Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jun 2006 09:48:26 -0300
From:      "Roberto Lima" <betogigi@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: Jail-Aware Scheduling
Message-ID:  <d69013b30606120548u29174b80w3ab6d1b9edeef62d@mail.gmail.com>

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

Hi all, i have a patch from freebsd 4.x not developed for me, but this
is very good for appreciate and or upgrade the patch for versions 5.x
6.x or current. This use sysctl oids to limit memory ram and cpu use.

Regards and sorry for my bad english,
Roberto Lima.

------=_Part_1853_19119760.1150116506221
Content-Type: application/octet-stream; name=jail_seperation.v7.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_eoctn9x4
Content-Disposition: attachment; filename="jail_seperation.v7.patch"

ZGlmZiAtdXIgc3JjLnZpcmdpbi9zeXMva2Vybi9rZXJuX2ZvcmsuYyBzcmMuZGlydHkvc3lzL2tl
cm4va2Vybl9mb3JrLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4va2Vybl9mb3JrLmMJTW9uIERl
YyAgOSAxOTozMzo0NCAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4va2Vybl9mb3JrLmMJVGh1
IEZlYiAyNyAxNzozODozMiAyMDAzCkBAIC0xMjAsNiArMTIwLDExIEBACiAJaW50IGVycm9yOwog
CXN0cnVjdCBwcm9jICpwMjsKIAorCWVycm9yID0gamFpbF9jaGVja19yZXNvdXJjZXModGQpOwor
CWlmIChlcnJvcikgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCQkKIAltdHhfbG9jaygmR2lhbnQp
OwogCWVycm9yID0gZm9yazEodGQsIFJGRkRHIHwgUkZQUk9DLCAwLCAmcDIpOwogCWlmIChlcnJv
ciA9PSAwKSB7CkBAIC0xNDIsNiArMTQ3LDExIEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBwcm9j
ICpwMjsKIAorCWVycm9yID0gamFpbF9jaGVja19yZXNvdXJjZXModGQpOworCWlmIChlcnJvcikg
eworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJbXR4X2xvY2soJkdpYW50KTsKIAllcnJvciA9IGZv
cmsxKHRkLCBSRkZERyB8IFJGUFJPQyB8IFJGUFBXQUlUIHwgUkZNRU0sIDAsICZwMik7CiAJaWYg
KGVycm9yID09IDApIHsKQEAgLTE2Miw2ICsxNzIsMTEgQEAKIHsKIAlpbnQgZXJyb3I7CiAJc3Ry
dWN0IHByb2MgKnAyOworCisJZXJyb3IgPSBqYWlsX2NoZWNrX3Jlc291cmNlcyh0ZCk7CisJaWYg
KGVycm9yKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CiAKIAkvKiBEb24ndCBhbGxvdyBrZXJuZWwg
b25seSBmbGFncy4gKi8KIAlpZiAoKHVhcC0+ZmxhZ3MgJiBSRktFUk5FTE9OTFkpICE9IDApCmRp
ZmYgLXVyIHNyYy52aXJnaW4vc3lzL2tlcm4va2Vybl9qYWlsLmMgc3JjLmRpcnR5L3N5cy9rZXJu
L2tlcm5famFpbC5jCi0tLSBzcmMudmlyZ2luL3N5cy9rZXJuL2tlcm5famFpbC5jCVRodSBEZWMg
MTkgMDI6NDA6MTAgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9rZXJuL2tlcm5famFpbC5jCVNhdCBN
YXIgMjIgMTM6MjU6MzkgMjAwMwpAQCAtMTgsNiArMTgsMTEgQEAKICNpbmNsdWRlIDxzeXMvc3lz
cHJvdG8uaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8c3lzL3Byb2MuaD4K
KyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUg
PHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92
bV9tYXAuaD4KICNpbmNsdWRlIDxzeXMvamFpbC5oPgogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAj
aW5jbHVkZSA8c3lzL211dGV4Lmg+CkBAIC0yNSw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHN5cy9z
eXNjdGwuaD4KICNpbmNsdWRlIDxuZXQvaWYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cisj
aW5jbHVkZSA8c3lzL3NidWYuaD4KKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxz
eXMvdm5vZGUuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KIAogTUFMTE9DX0RFRklORShNX1BS
SVNPTiwgInByaXNvbiIsICJQcmlzb24gc3RydWN0dXJlcyIpOwogCkBAIC00OSw2ICs1OCwxMTgg
QEAKICAgICAmamFpbF9zeXN2aXBjX2FsbG93ZWQsIDAsCiAgICAgIlByb2Nlc3NlcyBpbiBqYWls
IGNhbiB1c2UgU3lzdGVtIFYgSVBDIHByaW1pdGl2ZXMiKTsKIAoraW50IGphaWxfcXVvdGFzX2Fs
bG93ZWQgPSAwOworU1lTQ1RMX0lOVChfc2VjdXJpdHlfamFpbCwgT0lEX0FVVE8sIHF1b3Rhc19h
bGxvd2VkLCBDVExGTEFHX1JXLCAmamFpbF9xdW90YXNfYWxsb3dlZCwgMCwKKyAgICAiUHJvY2Vz
c2VzIGhhdmUgYWNjZXNzIHRvIHRoZSBxdW90YSBzeXN0ZW0uIik7CisKK2ludAlqYWlsX2hpZGVf
cHJvY2Vzc2VzID0gMDsKK1NZU0NUTF9JTlQoX3NlY3VyaXR5X2phaWwsIE9JRF9BVVRPLCBoaWRl
X3Byb2Nlc3NlcywgQ1RMRkxBR19SVywKKyAgICAmamFpbF9oaWRlX3Byb2Nlc3NlcywgMCwKKyAg
ICAiUHJvY2Vzc2VzIGluIGphaWwgYXJlIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGphaWwgKGV4
Y2VwdCB0byByb290KSIpOworCitpbnQJamFpbF9oaWRlX2ZpbGVzID0gMDsKK1NZU0NUTF9JTlQo
X3NlY3VyaXR5X2phaWwsIE9JRF9BVVRPLCBoaWRlX2ZpbGVzLCBDVExGTEFHX1JXLAorICAgICZq
YWlsX2hpZGVfZmlsZXMsIDAsCisgICAgIkZpbGVzIGluIGphaWwgYXJlIG5vdCB2aXNpYmxlIG91
dHNpZGUgdGhlIGphaWwgKGV4Y2VwdCB0byByb290KSIpOworCitzdHJ1Y3QgamFpbHMgZmlyc3Rq
YWlsID0gTElTVF9IRUFEX0lOSVRJQUxJWkVSKGphaWxzKTsKKworU1lTQ1RMX05PREUoLCBPSURf
QVVUTywgamFpbCwgQ1RMRkxBR19SRCwgMCwgImphaWwgcGFyYW1ldGVycyIpOworU1lTQ1RMX05P
REUoX2phaWwsIE9JRF9BVVRPLCBqYWlscywgQ1RMRkxBR19SRCwgMCwgInBlci1qYWlsIHNldHRp
bmdzIik7CisKK2ludCBqYWlsX2lwdjRhZGRyX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsK
KworaW50CitqYWlsX2lwdjRhZGRyX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWlu
dCBlcnJvciwgaSA9IDAsIGogPSAwLCBrLCBpcG1vZGU7CisJY2hhciBidWZbMTAyNF0sICp0bXBw
dHIsICp0bXBidWYsICp0bXBidWYyOworCXN0cnVjdCBwcmlzb24gKnByID0gKHN0cnVjdCBwcmlz
b24qKShvaWRwLT5vaWRfYXJnMSk7CisJdV9pbnQzMl90ICppcHNfbmV3OworCWluX2FkZHJfdCBh
ZGRyOworCXN0cnVjdCBzYnVmICpzYjsKKwlzdHJ1Y3QgaW5fYWRkciBpbmFkZHI7CisJdW5zaWdu
ZWQgbG9uZyBpcGVsZW1lbnRbNF07CisKKwkvKiBTcGl0IG91dCBhbGwgSVAgYWRkcmVzc2VzIGlu
IGphaWwuICovCisJc2IgPSBzYnVmX25ldyhOVUxMLCBOVUxMLCAxMDI0LCBTQlVGX0FVVE9FWFRF
TkQpOworCWZvciAoaSA9IDA7IGkgPCBwci0+cHJfbmlwczsgaSsrKSB7CisJCWluYWRkci5zX2Fk
ZHIgPSBudG9obChwci0+cHJfaXBzW2ldKTsKKwkJc2J1Zl9wcmludGYoc2IsICIlcyIsIGluZXRf
bnRvYShpbmFkZHIpKTsKKwkJaWYgKGkgIT0gcHItPnByX25pcHMgLSAxKSB7CisJCQlzYnVmX3By
aW50ZihzYiwgIiwiKTsKKwkJfQorCX0KKwlzYnVmX2ZpbmlzaChzYik7CisJc3RybGNweShidWYs
IHNidWZfZGF0YShzYiksIHNpemVvZihidWYpKTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3Ry
aW5nKG9pZHAsICZidWZbMF0sIHNpemVvZihidWYpLCByZXEpOworCXNidWZfZGVsZXRlKHNiKTsK
KworCWlmIChlcnJvciA9PSAwICYmIHJlcS0+bmV3cHRyICE9IE5VTEwpIHsKKwkJaWYgKGJ1Zlsw
XSA9PSAnKycgfHwgKGJ1ZlswXSA+PSA0OCAmJiBidWZbMF0gPD0gNTcpKSB7CisJCQlpcG1vZGUg
PSAwOworCQkJTUFMTE9DKGlwc19uZXcsIHVfaW50MzJfdCAqLCBzaXplb2YodV9pbnQzMl90KSAq
IChwci0+cHJfbmlwcyArIDEpLCBNX1BSSVNPTiwgTV9XQUlUT0spOworCQkJbWVtY3B5KGlwc19u
ZXcsIHByLT5wcl9pcHMsIHNpemVvZih1X2ludDMyX3QpICogKHByLT5wcl9uaXBzKSk7CisJCX0g
ZWxzZSBpZiAoYnVmWzBdID09ICctJykgeworCQkJaXBtb2RlID0gMTsKKwkJCWlmIChwci0+cHJf
bmlwcyA9PSAxKSB7CisJCQkJcmV0dXJuIEVJTlZBTDsKKwkJCX0KKwkJCU1BTExPQyhpcHNfbmV3
LCB1X2ludDMyX3QgKiwgc2l6ZW9mKHVfaW50MzJfdCkgKiAocHItPnByX25pcHMgLSAxKSwgTV9Q
UklTT04sIE1fV0FJVE9LKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwor
CQkvKiBTaW11bGF0ZSBpbmV0X2F0b24gKnNpZ2gqLiAqLworCQl0bXBwdHIgPSAoY2hhciopJmFk
ZHI7CisJCWlmIChidWZbMF0gPT0gJysnIHx8IGJ1ZlswXSA9PSAnLScpIHsKKwkJCXRtcGJ1ZjIg
PSBidWYgKyAxOworCQl9IGVsc2UgeworCQkJdG1wYnVmMiA9IGJ1ZjsKKwkJfQorCQl0bXBidWYg
PSB0bXBidWYyOworCQl3aGlsZSgqdG1wYnVmKSB7CisJCQkvKiBGaXJzdCBwYXNzOiByZXBsYWNl
ICcuJyB3aXRoICdcMCcuICovCisJCQlpZiAoKnRtcGJ1ZiA9PSAnLicpIHsKKwkJCQlpKys7CisJ
CQkJKnRtcGJ1ZiA9ICdcMCc7CisJCQl9CisJCQl0bXBidWYrKzsKKwkJfQorCQl0bXBidWYgPSB0
bXBidWYyOworCQlmb3IoaiA9IDA7IGogPD0gaTsgaisrKSB7CisJCQkvKiBTZWNvbmQgcGFzczog
ZmlsbCBhZGRyLiAqLworCQkJaXBlbGVtZW50W2pdID0gc3RydG91bCh0bXBidWYsIE5VTEwsIDEw
KTsKKwkJCWsgPSBzdHJsZW4odG1wYnVmKTsKKwkJCXRtcGJ1ZiArPSBrICsgMTsKKwkJfQorCQlh
ZGRyID0gaXBlbGVtZW50WzNdOworCQlhZGRyIHw9IChpcGVsZW1lbnRbMF0gPDwgMjQpIHwgKGlw
ZWxlbWVudFsxXSA8PCAxNikgfCAoaXBlbGVtZW50WzJdIDw8IDgpOworCisJCS8qIFBlcmZvcm0g
YWRkL2RlbGV0ZSAqLworCQltdHhfbG9jaygmcHItPnByX210eCk7CisJCWlmIChpcG1vZGUgPT0g
MCkgeworCQkJaXBzX25ld1twci0+cHJfbmlwc10gPSBhZGRyOworCQkJcHItPnByX25pcHMrKzsK
KwkJfSBlbHNlIHsKKwkJCWkgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IHByLT5wcl9uaXBzOyBq
KyspIHsKKwkJCQlpZiAoYWRkciAhPSBwci0+cHJfaXBzW2pdKSB7CisJCQkJCWlwc19uZXdbaV0g
PSBwci0+cHJfaXBzW2pdOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQkJcHItPnByX25pcHMt
LTsKKwkJfQorCQlGUkVFKHByLT5wcl9pcHMsIE1fUFJJU09OKTsKKwkJcHItPnByX2lwcyA9IGlw
c19uZXc7CisJCW10eF91bmxvY2soJnByLT5wcl9tdHgpOworCisJfQorCisJcmV0dXJuIGVycm9y
OworfQorCiAvKgogICogTVBTQUZFCiAgKi8KQEAgLTYwLDE2ICsxODEsMTggQEAKIAl9ICovICp1
YXA7CiB7CiAJc3RydWN0IHByb2MgKnAgPSB0ZC0+dGRfcHJvYzsKLQlpbnQgZXJyb3I7CisJaW50
IGVycm9yLCBzaXplID0gMDsKIAlzdHJ1Y3QgcHJpc29uICpwcjsKIAlzdHJ1Y3QgamFpbCBqOwog
CXN0cnVjdCBjaHJvb3RfYXJncyBjYTsKIAlzdHJ1Y3QgdWNyZWQgKm5ld2NyZWQgPSBOVUxMLCAq
b2xkY3JlZDsKKwlzdHJ1Y3QgamFpbGVsZW1lbnQgKnRtcGVsZW1lbnQ7CisJY2hhciAqdG1wU3Ry
aW5nOwogCiAJZXJyb3IgPSBjb3B5aW4odWFwLT5qYWlsLCAmaiwgc2l6ZW9mIGopOwogCWlmIChl
cnJvcikKIAkJcmV0dXJuIChlcnJvcik7Ci0JaWYgKGoudmVyc2lvbiAhPSAwKQorCWlmIChqLnZl
cnNpb24gIT0gMSkKIAkJcmV0dXJuIChFSU5WQUwpOwogCiAJTUFMTE9DKHByLCBzdHJ1Y3QgcHJp
c29uICosIHNpemVvZiAqcHIgLCBNX1BSSVNPTiwgTV9XQUlUT0sgfCBNX1pFUk8pOwpAQCAtODUs
NyArMjA4LDE2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGJhaWw7CiAJbmV3Y3JlZCA9IGNyZ2V0
KCk7Ci0JcHItPnByX2lwID0gai5pcF9udW1iZXI7CisKKwlNQUxMT0MocHItPnByX2lwcywgdV9p
bnQzMl90ICosIHNpemVvZih1X2ludDMyX3QpICogai5uaXBzLCBNX1BSSVNPTiwKKwkgICAgTV9X
QUlUT0spOworCWVycm9yID0gY29weWluKGouaXBzLCBwci0+cHJfaXBzLCBzaXplb2YodV9pbnQz
Ml90KSAqIGoubmlwcyk7CisJaWYgKGVycm9yKSB7CisJCUZSRUUocHItPnByX2lwcywgTV9QUklT
T04pOworCQlnb3RvIGJhaWw7CisJfQorCXByLT5wcl9uaXBzID0gai5uaXBzOworCiAJUFJPQ19M
T0NLKHApOwogCS8qIEltcGxpY2l0bHkgZmFpbCBpZiBhbHJlYWR5IGluIGphaWwuICAqLwogCWVy
cm9yID0gc3VzZXJfY3JlZChwLT5wX3VjcmVkLCAwKTsKQEAgLTk2LDYgKzIyOCw0OCBAQAogCXAt
PnBfdWNyZWQgPSBuZXdjcmVkOwogCXAtPnBfdWNyZWQtPmNyX3ByaXNvbiA9IHByOwogCXByLT5w
cl9yZWYgPSAxOworCisJLyogQWRkIGphaWwgdG8gbGlzdC4gKi8KKwlNQUxMT0ModG1wZWxlbWVu
dCwgc3RydWN0IGphaWxlbGVtZW50Kiwgc2l6ZW9mKHN0cnVjdCBqYWlsZWxlbWVudCksIE1fUFJJ
U09OLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJdG1wZWxlbWVudC0+cHIgPSBwcjsKKwlNQUxMT0Mo
dG1wZWxlbWVudC0+Y2hyb290X3BhdGgsIGNoYXIgKiwgc3RybGVuKGoucGF0aCkgKyAxLCBNX1BS
SVNPTiwgTV9XQUlUT0spOworCWNvcHlpbnN0cihqLnBhdGgsIHRtcGVsZW1lbnQtPmNocm9vdF9w
YXRoLCBzdHJsZW4oai5wYXRoKSArIDEsICZzaXplKTsKKwlMSVNUX0lOU0VSVF9IRUFEKCZmaXJz
dGphaWwsIHRtcGVsZW1lbnQsIHBvaW50ZXJzKTsKKworCS8qIEFkZCBzeXNjdGxzLiAqLworCXN0
cmNweShwci0+cHJfaG9zdF9vaWQsIHByLT5wcl9ob3N0KTsKKwl0bXBTdHJpbmcgPSBwci0+cHJf
aG9zdF9vaWQ7CisJd2hpbGUoKnRtcFN0cmluZykgeworCQlpZiAoKnRtcFN0cmluZyA9PSAnLicp
IHsKKwkJCSp0bXBTdHJpbmcgPSAnXyc7CisJCX0KKwkJdG1wU3RyaW5nKys7CisJfQorCQorCXN5
c2N0bF9jdHhfaW5pdCgmcHItPmpkX3N5c2N0bHRyZWUpOworCXByLT5qZF9zeXNjdGx0cmVldG9w
ID0gU1lTQ1RMX0FERF9OT0RFKCZwci0+amRfc3lzY3RsdHJlZSwKKwkJU1lTQ1RMX1NUQVRJQ19D
SElMRFJFTihfamFpbF9qYWlscyksIE9JRF9BVVRPLAorCQlwci0+cHJfaG9zdF9vaWQsIENUTEZM
QUdfUkQsIDAsICJqYWlsIGhvc3RuYW1lIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5qZF9zeXNj
dGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVUTywg
ImFsbG93X3Jhd19zb2NrZXRzIiwgCisJCUNUTEZMQUdfUlcsICZwci0+amFpbF9zZXR0aW5ncy5h
bGxvd19yYXdfc29ja2V0cywgMCwgIkFsbG93IHJhdyBzb2NrZXRzIGluIGphaWw/Iik7CisJU1lT
Q1RMX0FERF9JTlQoJnByLT5qZF9zeXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5
c2N0bHRyZWV0b3ApLCBPSURfQVVUTywgImFsbG93X2lwZnciLCAKKwkJQ1RMRkxBR19SVywgJnBy
LT5qYWlsX3NldHRpbmdzLmFsbG93X2lwZncsIDAsICJBbGxvdyBpcGZ3IHVzZT8iKTsKKwlTWVND
VExfQUREX0lOVCgmcHItPmpkX3N5c2N0bHRyZWUsIFNZU0NUTF9DSElMRFJFTihwci0+amRfc3lz
Y3RsdHJlZXRvcCksIE9JRF9BVVRPLCAibWF4X3JhbSIsIAorCQlDVExGTEFHX1JXLCAmcHItPmph
aWxfc2V0dGluZ3MubWF4X3JhbSwgMCwgIk1heGltdW0gUkFNIGFsbG93ZWQgZm9yIGphaWwgKDAg
PSB1bmxpbWl0ZWQpIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5qZF9zeXNjdGx0cmVlLCBTWVND
VExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVUTywgIm1heF9jcHUiLCAK
KwkJQ1RMRkxBR19SVywgJnByLT5qYWlsX3NldHRpbmdzLm1heF9jcHUsIDAsICJNYXhpbXVtIENQ
VSBhbGxvd2VkIGZvciBqYWlsICgwID0gdW5saW1pdGVkKSIpOworCVNZU0NUTF9BRERfSU5UKCZw
ci0+amRfc3lzY3RsdHJlZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwg
T0lEX0FVVE8sICJtYXhfcHJvY3MiLCAKKwkJQ1RMRkxBR19SVywgJnByLT5qYWlsX3NldHRpbmdz
Lm1heF9wcm9jcywgMCwgIk1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NlcyBhbGxvd2VkIGZvciBq
YWlsICgwID0gdW5saW1pdGVkKSIpOworCVNZU0NUTF9BRERfSU5UKCZwci0+amRfc3lzY3RsdHJl
ZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwgT0lEX0FVVE8sICJwcm9j
c191c2VkIiwgCisJCUNUTEZMQUdfUkQsICZwci0+amFpbF9zZXR0aW5ncy5wcm9jc191c2VkLCAw
LCAiTnVtYmVyIG9mIHByb2Nlc3NlcyBydW5uaW5nIik7CisJU1lTQ1RMX0FERF9JTlQoJnByLT5q
ZF9zeXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURf
QVVUTywgInJhbV91c2VkIiwgCisJCUNUTEZMQUdfUkQsICZwci0+amFpbF9zZXR0aW5ncy5yYW1f
dXNlZCwgMCwgIkFtb3VudCBvZiBSQU0gdXNlZCIpOworCVNZU0NUTF9BRERfSU5UKCZwci0+amRf
c3lzY3RsdHJlZSwgU1lTQ1RMX0NISUxEUkVOKHByLT5qZF9zeXNjdGx0cmVldG9wKSwgT0lEX0FV
VE8sICJjcHVfdXNlZCIsIAorCQlDVExGTEFHX1JELCAmcHItPmphaWxfc2V0dGluZ3MuY3B1X3Vz
ZWQsIDAsICJBbW91bnQgb2YgQ1BVIHVzZWQiKTsKKwlTWVNDVExfQUREX1BST0MoJnByLT5qZF9z
eXNjdGx0cmVlLCBTWVNDVExfQ0hJTERSRU4ocHItPmpkX3N5c2N0bHRyZWV0b3ApLCBPSURfQVVU
TywgCisJCSJpcHY0YWRkciIsIENUTFRZUEVfU1RSSU5HIHwgQ1RMRkxBR19SVywgcHIsIHNpemVv
ZiAoc3RydWN0IHByaXNvbiksIGphaWxfaXB2NGFkZHJfc3lzY3RsLAorCQkiQSIsICJMaXN0IG9m
IElQdjQgYWRkcmVzc2VzIGluIGphaWwuIik7CisKIAlQUk9DX1VOTE9DSyhwKTsKIAljcmZyZWUo
b2xkY3JlZCk7CiAJcmV0dXJuICgwKTsKQEAgLTEwNywxNyArMjgxLDE1NyBAQAogCXJldHVybiAo
ZXJyb3IpOwogfQogCitpbnQKK2phaWxfY2FsY3RvdGFsdXNlZChwcikKKwlzdHJ1Y3QgcHJpc29u
ICpwcjsKK3sKKwlzdHJ1Y3QgcHJvYyAqcHJvY2VzczsKKwl1X2ludCB0b3RhbHJhbSA9IDA7CisJ
dV9pbnQgbnVtcHJvY3MgPSAwOworCisJLyogR28gdGhyb3VnaCBldmVyeSBwcm9jZXNzIGluIHRo
ZSBzeXN0ZW0gYW5kIGNhbGN1bGF0ZSAKKwkgICB0aGUgYW1vdW50IG9mIENQVSBhbmQgUkFNIHVz
ZWQuICovCisJRk9SRUFDSF9QUk9DX0lOX1NZU1RFTShwcm9jZXNzKSB7CisJCWlmICghamFpbGVk
KHByb2Nlc3MtPnBfdWNyZWQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcm9jZXNz
LT5wX3VjcmVkLT5jcl9wcmlzb24gIT0gcHIpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbnVt
cHJvY3MrKzsKKwkJdG90YWxyYW0gKz0gcHJvY2Vzcy0+cF92bXNwYWNlLT52bV90c2l6ZSArIHBy
b2Nlc3MtPnBfdm1zcGFjZS0+dm1fZHNpemUKKwkJICAgICsgcHJvY2Vzcy0+cF92bXNwYWNlLT52
bV9zc2l6ZTsKKwl9CisKKwltdHhfbG9jaygmcHItPnByX210eCk7CisJcHItPmphaWxfc2V0dGlu
Z3MucmFtX3VzZWQgPSB0b3RhbHJhbSAqIFBBR0VfU0laRTsKKwlwci0+amFpbF9zZXR0aW5ncy5w
cm9jc191c2VkID0gbnVtcHJvY3M7CisJbXR4X3VubG9jaygmcHItPnByX210eCk7CisKKwlyZXR1
cm4gMDsKK30KKworLyogVGhpcyBpcyBmcm9tIHByaW50LmMgaW4gL3Vzci9zcmMvYmluL3BzLiAq
LworI2RlZmluZSBmeHRvZmwoZml4cHQpICAgKChkb3VibGUpKGZpeHB0KSAvIEZTQ0FMRSkKKwor
dm9pZAoramFpbF91cGRhdGVfY3B1KHZvaWQpCit7CisJc3RydWN0IHByb2MgKnA7CisJc3RydWN0
IGphaWxlbGVtZW50ICplbGVtZW50OworCXN0cnVjdCB0aHJlYWQgKnRkOworCisJLyogSWYgbm8g
amFpbHMgZXhpc3QsIGV4aXQgZnVuY3Rpb24uICovCisJaWYgKCFmaXJzdGphaWwubGhfZmlyc3Qp
IHsKKwkJcmV0dXJuOworCX0KKworCS8qIENsZWFyIGphaWwgQ1BVIGNvdW50ZXJzLiAqLworCUxJ
U1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBwb2ludGVycykgeworCQllbGVtZW50LT5w
ci0+amFpbF9zZXR0aW5ncy5jcHVfdXNlZCA9IDA7CisJfQorCisJLyogQ2hlY2sgYWxsIHByb2Nl
c3NlcyBmb3IgQ1BVIHVzYWdlLiAqLworCUZPUkVBQ0hfUFJPQ19JTl9TWVNURU0ocCkgeworCQlG
T1JFQUNIX1RIUkVBRF9JTl9QUk9DKHAsIHRkKSB7CisJCQlpZiAodGQtPnRkX2tzZSAmJiB0ZC0+
dGRfdWNyZWQtPmNyX3ByaXNvbikgeworCQkJCXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uLT5qYWls
X3NldHRpbmdzLmNwdV91c2VkICs9IAorCQkJCSAgICBmeHRvZmwoc2NoZWRfcGN0Y3B1KHRkLT50
ZF9rc2UpKSAqIDEwMC4wOworCQkJfQorCQl9CisJfQorCisJLyogRXhpdCBmdW5jdGlvbi4gKi8K
KwlyZXR1cm47Cit9CisKK2ludAoramFpbF9jaGVja19jcHUodWMpCisJc3RydWN0IHVjcmVkICp1
YzsKK3sKKwlpZiAodWMtPmNyX3ByaXNvbiAmJiB1Yy0+Y3JfcHJpc29uLT5qYWlsX3NldHRpbmdz
LmNwdV91c2VkID49IAorCSAgICB1Yy0+Y3JfcHJpc29uLT5qYWlsX3NldHRpbmdzLm1heF9jcHUg
JiYgdWMtPmNyX3ByaXNvbi0+amFpbF9zZXR0aW5ncy5tYXhfY3B1ID4gMCkgeworCQlyZXR1cm4g
MTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludAoramFpbF9jaGVja19yZXNv
dXJjZXModGQpCisJc3RydWN0IHRocmVhZCAqdGQ7Cit7CisJc3RydWN0IHByaXNvbiAqcHIgPSB0
ZC0+dGRfcHJvYy0+cF91Y3JlZC0+Y3JfcHJpc29uOworICAgICAgICAKKwlpZiAocHIpIHsKKwkJ
LyogRW5zdXJlIGphaWwgaXNuJ3QgdXNpbmcgbW9yZSB0aGFuIGl0IGlzIGFsbG9jYXRlZC4gKi8g
CisJCWphaWxfY2FsY3RvdGFsdXNlZChwcik7CisJCWlmIChwci0+amFpbF9zZXR0aW5ncy5tYXhf
cmFtID4gMCAmJiAKKwkJICAgIHByLT5qYWlsX3NldHRpbmdzLnJhbV91c2VkID4gcHItPmphaWxf
c2V0dGluZ3MubWF4X3JhbSkgeworCQkJcmV0dXJuIEVOT01FTTsKKwkJfSBlbHNlIGlmIChwci0+
amFpbF9zZXR0aW5ncy5tYXhfcHJvY3MgPiAwICYmCisJCSAgICBwci0+amFpbF9zZXR0aW5ncy5w
cm9jc191c2VkID4gcHItPmphaWxfc2V0dGluZ3MubWF4X3Byb2NzKSB7CisJCQlyZXR1cm4gRUFH
QUlOOworCQl9IGVsc2UgaWYgKHByLT5qYWlsX3NldHRpbmdzLm1heF9jcHUgPiAwICYmICAKKwkJ
ICAgIHByLT5qYWlsX3NldHRpbmdzLmNwdV91c2VkID4gcHItPmphaWxfc2V0dGluZ3MubWF4X2Nw
dSkgeyAgICAKKwkJCXJldHVybiBFQUdBSU47CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor
aW50CitqYWlsX2NoZWNrX2ZpbGVwZXJtKHZwLCBjcmVkLCB0ZCkKKwlzdHJ1Y3Qgdm5vZGUgKnZw
OworCXN0cnVjdCB1Y3JlZCAqY3JlZDsKKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKK3sKKwlzdHJ1Y3Qg
amFpbGVsZW1lbnQgKmVsZW1lbnQ7CisKKwkvKiBJZiBmaWxlIGlzIGluIGEgcnVubmluZyBqYWls
LCBhbmQgamFpbF9oaWRlX2ZpbGVzID0gMSwgZGVueSBwZXJtaXNzaW9uCisJICAgdG8gYWxsIGJ1
dCByb290LiAqLworCWlmIChqYWlsX2hpZGVfZmlsZXMgJiYgIWNyZWQtPmNyX3ByaXNvbiAmJiBj
cmVkLT5jcl91aWQgPiAwKSB7CisJCUxJU1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBw
b2ludGVycykgeworCQkJaWYgKCFzdHJuY21wKHZwLT52X21vdW50LT5tbnRfc3RhdC5mX21udG9u
bmFtZSwgZWxlbWVudC0+Y2hyb290X3BhdGgsCisJCQkgICAgc3RybGVuKGVsZW1lbnQtPmNocm9v
dF9wYXRoKSkpIHsKKwkJCQlyZXR1cm4gRUFDQ0VTOworCQkJfQorCQl9IAorCX0KKworCXJldHVy
biAwOworfQorCiB2b2lkCiBwcmlzb25fZnJlZShzdHJ1Y3QgcHJpc29uICpwcikKIHsKKwlzdHJ1
Y3QgamFpbGVsZW1lbnQgKmVsZW1lbnQ7CiAKIAltdHhfbG9jaygmcHItPnByX210eCk7CiAJcHIt
PnByX3JlZi0tOwogCWlmIChwci0+cHJfcmVmID09IDApIHsKIAkJbXR4X3VubG9jaygmcHItPnBy
X210eCk7CiAJCW10eF9kZXN0cm95KCZwci0+cHJfbXR4KTsKKworCQkvKiBSZW1vdmUgamFpbCBm
cm9tIGxpc3QuICovCisJCUxJU1RfRk9SRUFDSChlbGVtZW50LCAmZmlyc3RqYWlsLCBwb2ludGVy
cykgeworCQkJaWYgKGVsZW1lbnQtPnByID09IHByKSB7CisJCQkJTElTVF9SRU1PVkUoZWxlbWVu
dCwgcG9pbnRlcnMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJaWYgKHByLT5wcl9saW51
eCAhPSBOVUxMKQogCQkJRlJFRShwci0+cHJfbGludXgsIE1fUFJJU09OKTsKKwkJRlJFRShwci0+
cHJfaXBzLCBNX1BSSVNPTik7CisKKwkJLyogUmVtb3ZlIHN5c2N0bHMuICovCisJCXByLT5qZF9z
eXNjdGx0cmVldG9wID0gTlVMTDsKKwkJc3lzY3RsX2N0eF9mcmVlKCZwci0+amRfc3lzY3RsdHJl
ZSk7CisKIAkJRlJFRShwciwgTV9QUklTT04pOwogCQlyZXR1cm47CiAJfQpAQCAtMTM3LDcgKzQ1
MSw3IEBACiBwcmlzb25fZ2V0aXAoc3RydWN0IHVjcmVkICpjcmVkKQogewogCi0JcmV0dXJuIChj
cmVkLT5jcl9wcmlzb24tPnByX2lwKTsKKwlyZXR1cm4gKGNyZWQtPmNyX3ByaXNvbi0+cHJfaXBz
WzBdKTsKIH0KIAogaW50CkBAIC0xNTIsMjAgKzQ2NiwxNiBAQAogCWVsc2UKIAkJdG1wID0gbnRv
aGwoKmlwKTsKIAlpZiAodG1wID09IElOQUREUl9BTlkpIHsKLQkJaWYgKGZsYWcpIAotCQkJKmlw
ID0gY3JlZC0+Y3JfcHJpc29uLT5wcl9pcDsKLQkJZWxzZQotCQkJKmlwID0gaHRvbmwoY3JlZC0+
Y3JfcHJpc29uLT5wcl9pcCk7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICh0bXAgPT0gSU5BRERS
X0xPT1BCQUNLKSB7CiAJCWlmIChmbGFnKQotCQkJKmlwID0gY3JlZC0+Y3JfcHJpc29uLT5wcl9p
cDsKKwkJCSppcCA9IGNyZWQtPmNyX3ByaXNvbi0+cHJfaXBzWzBdOwogCQllbHNlCi0JCQkqaXAg
PSBodG9ubChjcmVkLT5jcl9wcmlzb24tPnByX2lwKTsKKwkJCSppcCA9IGh0b25sKGNyZWQtPmNy
X3ByaXNvbi0+cHJfaXBzWzBdKTsKIAkJcmV0dXJuICgwKTsKIAl9Ci0JaWYgKGNyZWQtPmNyX3By
aXNvbi0+cHJfaXAgIT0gdG1wKQorCWlmICghcHJpc29uX2NoZWNrX2lwKGNyZWQtPmNyX3ByaXNv
biwgdG1wKSkKIAkJcmV0dXJuICgxKTsKIAlyZXR1cm4gKDApOwogfQpAQCAtMTgzLDkgKzQ5Myw5
IEBACiAJCXRtcCA9IG50b2hsKCppcCk7CiAJaWYgKHRtcCA9PSBJTkFERFJfTE9PUEJBQ0spIHsK
IAkJaWYgKGZsYWcpCi0JCQkqaXAgPSBjcmVkLT5jcl9wcmlzb24tPnByX2lwOworCQkJKmlwID0g
Y3JlZC0+Y3JfcHJpc29uLT5wcl9pcHNbMF07CiAJCWVsc2UKLQkJCSppcCA9IGh0b25sKGNyZWQt
PmNyX3ByaXNvbi0+cHJfaXApOworCQkJKmlwID0gaHRvbmwoY3JlZC0+Y3JfcHJpc29uLT5wcl9p
cHNbMF0pOwogCQlyZXR1cm47CiAJfQogCXJldHVybjsKQEAgLTIwMSw3ICs1MTEsNyBAQAogCQlv
ayA9IDE7CiAJZWxzZSBpZiAoc2FpLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpCiAJCW9rID0gMDsK
LQllbHNlIGlmIChjcmVkLT5jcl9wcmlzb24tPnByX2lwICE9IG50b2hsKHNhaS0+c2luX2FkZHIu
c19hZGRyKSkKKwllbHNlIGlmICghcHJpc29uX2NoZWNrX2lwKGNyZWQtPmNyX3ByaXNvbiwgbnRv
aGwoc2FpLT5zaW5fYWRkci5zX2FkZHIpKSkKIAkJb2sgPSAxOwogCWVsc2UKIAkJb2sgPSAwOwpA
QCAtMjIxLDYgKzUzMSwxMiBAQAogCQkJcmV0dXJuIChFU1JDSCk7CiAJCWlmIChjcmVkMi0+Y3Jf
cHJpc29uICE9IGNyZWQxLT5jcl9wcmlzb24pCiAJCQlyZXR1cm4gKEVTUkNIKTsKKwl9IGVsc2Ug
eworCQkvKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGFwcGVhcnMgaWYgYSBwcm9jZXNz
IGlzIHJ1bm5pbmcgaW4KKwkJICAgYSBqYWlsIGFuZCB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIHVu
ZGVyIHRoZSBzYW1lIFVJRCBhcyB0aGUgdXNlciwKKwkJICAga2lsbCgpIHdpbGwgYWN0dWFsbHkg
a2lsbCBpdC4gKi8KKwkJaWYgKGphaWxlZChjcmVkMikgJiYgY3JlZDEtPmNyX3J1aWQgIT0gMCAm
JiBqYWlsX2hpZGVfcHJvY2Vzc2VzKQorCQkJcmV0dXJuIChFU1JDSCk7CiAJfQogCiAJcmV0dXJu
ICgwKTsKQEAgLTI1NCw0ICs1NzAsMjAgQEAKIAl9CiAJZWxzZQogCQlzdHJsY3B5KGJ1ZiwgaG9z
dG5hbWUsIHNpemUpOworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBJUCBleGlzdHMgaW4g
dGhlIGphaWwuCisgKi8KK2ludAorcHJpc29uX2NoZWNrX2lwKHN0cnVjdCBwcmlzb24gKnByLCB1
X2ludDMyX3QgaXApCit7CisJcmVnaXN0ZXIgdV9pbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBw
ci0+cHJfbmlwczsgKytpKSB7CisJCWlmIChwci0+cHJfaXBzW2ldID09IGlwKQorCQkJcmV0dXJu
ICgxKTsKKwl9CisKKwlyZXR1cm4gKDApOwogfQpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9rZXJu
L2tlcm5fc3dpdGNoLmMgc3JjLmRpcnR5L3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMKLS0tIHNyYy52
aXJnaW4vc3lzL2tlcm4va2Vybl9zd2l0Y2guYwlNb24gT2N0IDE0IDE0OjQzOjAyIDIwMDIKKysr
IHNyYy5kaXJ0eS9zeXMva2Vybi9rZXJuX3N3aXRjaC5jCVRodSBGZWIgMjcgMTc6Mzg6MzIgMjAw
MwpAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgPHN5cy9wcm9jLmg+CiAjaW5jbHVkZSA8c3lz
L3F1ZXVlLmg+CiAjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVkZSA8c3lzL2phaWwuaD4K
ICNpbmNsdWRlIDxtYWNoaW5lL2NyaXRpY2FsLmg+CiAKIENUQVNTRVJUKChSUUJfQlBXICogUlFC
X0xFTikgPT0gUlFfTlFTKTsKQEAgLTI0MSw2ICsyNDIsMTAgQEAKIAkJCW9yaWdpbmFsLT50ZF9r
c2UgPSBOVUxMOwogCQlvcmlnaW5hbCA9IG93bmVyOwogCisJCWlmIChURF9JU19KU0xFRVAob3du
ZXIpICYmIGphaWxfY2hlY2tfY3B1KG93bmVyLT50ZF91Y3JlZCkgPT0gMCkgeworCQkJLyogV2Fr
ZSBpdCB1cC4gKi8KKwkJCVREX0NMUl9KU0xFRVAob3duZXIpOworCQl9CiAJCWlmIChURF9DQU5f
UlVOKG93bmVyKSkgewogCQkJLyoKIAkJCSAqIElmIHRoZSBvd25lciB0aHJlYWQgaXMgbm93IHJ1
bm5hYmxlLCAgcnVuIGl0Li4KQEAgLTM3OSw2ICszODQsMTMgQEAKIAlzdHJ1Y3Qga3NlZ3JwICpr
ZzsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDI7CiAJc3RydWN0IHRocmVhZCAqdGRhOworCisJaWYgKHRk
LT50ZF91Y3JlZCAmJiBqYWlsX2NoZWNrX2NwdSh0ZC0+dGRfdWNyZWQpID09IDEpIHsKKwkJLyog
RG9uJ3QgYWRkIHRvIHJ1biBxdWV1ZS4gUHV0IGl0IHRvIHNsZWVwLiBFeGl0IGZ1bmN0aW9uLiAq
LworCQlURF9TRVRfSlNMRUVQKHRkKTsKKwkJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPnJlc2No
ZWQgPSAxOworCQlyZXR1cm47CisJfQogCiAJQ1RSMShLVFJfUlVOUSwgInNldHJ1bnF1ZXVlOiB0
ZCVwIiwgdGQpOwogCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKZGlmZiAtdXIg
c3JjLnZpcmdpbi9zeXMva2Vybi9zY2hlZF80YnNkLmMgc3JjLmRpcnR5L3N5cy9rZXJuL3NjaGVk
XzRic2QuYwotLS0gc3JjLnZpcmdpbi9zeXMva2Vybi9zY2hlZF80YnNkLmMJVGh1IE5vdiAyMSAw
MjozMDo1NSAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vc2NoZWRfNGJzZC5jCVRodSBGZWIg
MjcgMTc6Mzg6MzIgMjAwMwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHN5cy9zeXN0bS5o
PgogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KICNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVk
ZSA8c3lzL2phaWwuaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRl
eC5oPgogI2luY2x1ZGUgPHN5cy9wcm9jLmg+CkBAIC0xMTYsNyArMTE3LDcgQEAKIHsKIAogCW10
eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsKLQlpZiAodGQtPnRkX3ByaW9yaXR5IDwg
Y3VydGhyZWFkLT50ZF9wcmlvcml0eSkKKwlpZiAodGQtPnRkX3ByaW9yaXR5IDwgY3VydGhyZWFk
LT50ZF9wcmlvcml0eSB8fCB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbikKIAkJY3VydGhyZWFkLT50
ZF9rc2UtPmtlX2ZsYWdzIHw9IEtFRl9ORUVEUkVTQ0hFRDsKIH0KIApAQCAtMjQxLDEyICsyNDIs
MjkgQEAKIAlzdHJ1Y3Qga3NlICprZTsKIAlzdHJ1Y3Qga3NlZ3JwICprZzsKIAlpbnQgcmVhbHN0
YXRoejsKLQlpbnQgYXdha2U7CisJaW50IGF3YWtlLCBjaGVja2VkX3N0YXR1cyA9IDA7CiAKIAly
ZWFsc3RhdGh6ID0gc3RhdGh6ID8gc3RhdGh6IDogaHo7CiAJc3hfc2xvY2soJmFsbHByb2NfbG9j
ayk7CiAJRk9SRUFDSF9QUk9DX0lOX1NZU1RFTShwKSB7CiAJCW10eF9sb2NrX3NwaW4oJnNjaGVk
X2xvY2spOworCQlpZiAocC0+cF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQlpZiAoIWphaWxfY2hl
Y2tfY3B1KHAtPnBfdWNyZWQpKSB7CisJCQkJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsK
KwkJCQlGT1JFQUNIX1RIUkVBRF9JTl9QUk9DKHAsIHRkKSB7CisJCQkJCWlmIChURF9JU19KU0xF
RVAodGQpKSB7CisJCQkJCQlURF9DTFJfSlNMRUVQKHRkKTsKKwkJCQkJCXNldHJ1bnF1ZXVlKHRk
KTsKKwkJCQkJfQorCQkJCX0KKwkJCQltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsKKwkJCX0K
KwkJCWlmIChjaGVja2VkX3N0YXR1cyA9PSAwKSB7CisJCQkJamFpbF91cGRhdGVfY3B1KCk7CisJ
CQkJY2hlY2tlZF9zdGF0dXMgPSAxOworCQkJfQorCQl9CisKIAkJcC0+cF9zd3RpbWUrKzsKIAkJ
Rk9SRUFDSF9LU0VHUlBfSU5fUFJPQyhwLCBrZykgeyAKIAkJCWF3YWtlID0gMDsKZGlmZiAtdXIg
c3JjLnZpcmdpbi9zeXMva2Vybi9zeXN2X2lwYy5jIHNyYy5kaXJ0eS9zeXMva2Vybi9zeXN2X2lw
Yy5jCi0tLSBzcmMudmlyZ2luL3N5cy9rZXJuL3N5c3ZfaXBjLmMJTW9uIEFwciAgMSAxNDozMTow
MCAyMDAyCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9pcGMuYwlUaHUgRmViIDI3IDE3OjM4
OjMyIDIwMDMKQEAgLTc4LDYgKzc4LDExIEBACiB7CiAJc3RydWN0IHVjcmVkICpjcmVkID0gdGQt
PnRkX3VjcmVkOwogCisJLyogQ2hlY2sgZm9yIGphaWwgbWF0Y2guICovCisJaWYgKGNyZWQtPmNy
X3ByaXNvbiAhPSBwZXJtLT5wcikgeworCQlyZXR1cm4gRUFDQ0VTOworCX0KKwogCS8qIENoZWNr
IGZvciB1c2VyIG1hdGNoLiAqLwogCWlmIChjcmVkLT5jcl91aWQgIT0gcGVybS0+Y3VpZCAmJiBj
cmVkLT5jcl91aWQgIT0gcGVybS0+dWlkKSB7CiAJCWlmIChtb2RlICYgSVBDX00pCmRpZmYgLXVy
IHNyYy52aXJnaW4vc3lzL2tlcm4vc3lzdl9tc2cuYyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9t
c2cuYwotLS0gc3JjLnZpcmdpbi9zeXMva2Vybi9zeXN2X21zZy5jCVN1biBEZWMgMTUgMDY6NTQ6
NTUgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9rZXJuL3N5c3ZfbXNnLmMJVGh1IEZlYiAyNyAxNzoz
ODozMiAyMDAzCkBAIC00MzUsNiArNDM1LDcgQEAKIAkJbXNxcHRyLT5tc2dfcGVybS5naWQgPSBt
c3FidWYubXNnX3Blcm0uZ2lkOwkvKiBjaGFuZ2UgdGhlIG93bmVyICovCiAJCW1zcXB0ci0+bXNn
X3Blcm0ubW9kZSA9IChtc3FwdHItPm1zZ19wZXJtLm1vZGUgJiB+MDc3NykgfAogCQkgICAgKG1z
cWJ1Zi5tc2dfcGVybS5tb2RlICYgMDc3Nyk7CisJCW1zcXB0ci0+bXNnX3Blcm0ucHIgPSB0ZC0+
dGRfdWNyZWQtPmNyX3ByaXNvbjsKIAkJbXNxcHRyLT5tc2dfcWJ5dGVzID0gbXNxYnVmLm1zZ19x
Ynl0ZXM7CiAJCW1zcXB0ci0+bXNnX2N0aW1lID0gdGltZV9zZWNvbmQ7CiAJCWJyZWFrOwpAQCAt
NTM5LDYgKzU0MCw3IEBACiAJCW1zcXB0ci0+bXNnX3Blcm0ubW9kZSA9IChtc2dmbGcgJiAwNzc3
KTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJldHVybmVkIG1zcWlkIGlzIHVuaXF1ZSAqLwog
CQltc3FwdHItPm1zZ19wZXJtLnNlcSA9IChtc3FwdHItPm1zZ19wZXJtLnNlcSArIDEpICYgMHg3
ZmZmOworCQltc3FwdHItPm1zZ19wZXJtLnByID0gdGQtPnRkX3VjcmVkLT5jcl9wcmlzb247CiAJ
CW1zcXB0ci0+bXNnX2ZpcnN0ID0gTlVMTDsKIAkJbXNxcHRyLT5tc2dfbGFzdCA9IE5VTEw7CiAJ
CW1zcXB0ci0+bXNnX2NieXRlcyA9IDA7CmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL2tlcm4vc3lz
dl9zZW0uYyBzcmMuZGlydHkvc3lzL2tlcm4vc3lzdl9zZW0uYwotLS0gc3JjLnZpcmdpbi9zeXMv
a2Vybi9zeXN2X3NlbS5jCUZyaSBPY3QgMTggMjA6MDc6MzUgMjAwMgorKysgc3JjLmRpcnR5L3N5
cy9rZXJuL3N5c3Zfc2VtLmMJVGh1IEZlYiAyNyAxNzozODozMiAyMDAzCkBAIC01ODUsNiArNTg1
LDcgQEAKIAkJc2VtYXB0ci0+c2VtX3Blcm0ubW9kZSA9IChzZW1hcHRyLT5zZW1fcGVybS5tb2Rl
ICYgfjA3NzcpIHwKIAkJICAgIChzYnVmLnNlbV9wZXJtLm1vZGUgJiAwNzc3KTsKIAkJc2VtYXB0
ci0+c2VtX2N0aW1lID0gdGltZV9zZWNvbmQ7CisJCXNlbWFwdHItPnNlbV9wZXJtLnByID0gdGQt
PnRkX3VjcmVkLT5jcl9wcmlzb247CiAJCWJyZWFrOwogCiAJY2FzZSBJUENfU1RBVDoKQEAgLTgz
Miw2ICs4MzMsNyBAQAogCQlzZW1hW3NlbWlkXS5zZW1fcGVybS5tb2RlID0gKHNlbWZsZyAmIDA3
NzcpIHwgU0VNX0FMTE9DOwogCQlzZW1hW3NlbWlkXS5zZW1fcGVybS5zZXEgPQogCQkgICAgKHNl
bWFbc2VtaWRdLnNlbV9wZXJtLnNlcSArIDEpICYgMHg3ZmZmOworCQlzZW1hW3NlbWlkXS5zZW1f
cGVybS5wciA9IGNyZWQtPmNyX3ByaXNvbjsKIAkJc2VtYVtzZW1pZF0uc2VtX25zZW1zID0gbnNl
bXM7CiAJCXNlbWFbc2VtaWRdLnNlbV9vdGltZSA9IDA7CiAJCXNlbWFbc2VtaWRdLnNlbV9jdGlt
ZSA9IHRpbWVfc2Vjb25kOwpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9rZXJuL3N5c3Zfc2htLmMg
c3JjLmRpcnR5L3N5cy9rZXJuL3N5c3Zfc2htLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4vc3lz
dl9zaG0uYwlXZWQgQXVnIDE0IDIwOjEwOjEyIDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMva2Vybi9z
eXN2X3NobS5jCVRodSBGZWIgMjcgMTc6Mzg6MzIgMjAwMwpAQCAtMjI2LDYgKzIyNiwxMSBAQAog
CiAJc2VnbnVtID0gSVBDSURfVE9fSVgoc2htbWFwX3MtPnNobWlkKTsKIAlzaG1zZWcgPSAmc2ht
c2Vnc1tzZWdudW1dOworCS8qIENoZWNrIGphaWwgcGVybWlzc2lvbnMuICovCisJaWYgKHAtPnBf
dWNyZWQtPmNyX3ByaXNvbiAhPSBzaG1zZWctPnNobV9wZXJtLnByKSB7CisJCXJldHVybihFQUND
RVMpOworCX0KKwogCXNpemUgPSByb3VuZF9wYWdlKHNobXNlZy0+c2htX3NlZ3N6KTsKIAlyZXN1
bHQgPSB2bV9tYXBfcmVtb3ZlKCZwLT5wX3Ztc3BhY2UtPnZtX21hcCwgc2htbWFwX3MtPnZhLAog
CSAgICBzaG1tYXBfcy0+dmEgKyBzaXplKTsKQEAgLTUzOCw2ICs1NDMsNyBAQAogCQkgICAgKHNo
bXNlZy0+c2htX3Blcm0ubW9kZSAmIH5BQ0NFU1NQRVJNUykgfAogCQkgICAgKGluYnVmLnNobV9w
ZXJtLm1vZGUgJiBBQ0NFU1NQRVJNUyk7CiAJCXNobXNlZy0+c2htX2N0aW1lID0gdGltZV9zZWNv
bmQ7CisJCXNobXNlZy0+c2htX3Blcm0ucHIgPSB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbjsKIAkJ
YnJlYWs7CiAJY2FzZSBJUENfUk1JRDoKIAkJZXJyb3IgPSBpcGNwZXJtKHRkLCAmc2htc2VnLT5z
aG1fcGVybSwgSVBDX00pOwpAQCAtNjQ1LDYgKzY1MSw3IEBACiAJc2htc2VnLT5zaG1fcGVybS5t
b2RlID0gU0hNU0VHX0FMTE9DQVRFRCB8IFNITVNFR19SRU1PVkVEOwogCXNobXNlZy0+c2htX3Bl
cm0ua2V5ID0gdWFwLT5rZXk7CiAJc2htc2VnLT5zaG1fcGVybS5zZXEgPSAoc2htc2VnLT5zaG1f
cGVybS5zZXEgKyAxKSAmIDB4N2ZmZjsKKwlzaG1zZWctPnNobV9wZXJtLnByID0gdGQtPnRkX3Vj
cmVkLT5jcl9wcmlzb247CiAJc2htX2hhbmRsZSA9IChzdHJ1Y3Qgc2htX2hhbmRsZSAqKQogCSAg
ICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzaG1faGFuZGxlKSwgTV9TSE0sIE1fV0FJVE9LKTsKIAlz
aG1pZCA9IElYU0VRX1RPX0lQQ0lEKHNlZ251bSwgc2htc2VnLT5zaG1fcGVybSk7CkBAIC02NzMs
NiArNjgwLDcgQEAKIAlzaG1zZWctPnNobV9scGlkID0gc2htc2VnLT5zaG1fbmF0dGNoID0gMDsK
IAlzaG1zZWctPnNobV9hdGltZSA9IHNobXNlZy0+c2htX2R0aW1lID0gMDsKIAlzaG1zZWctPnNo
bV9jdGltZSA9IHRpbWVfc2Vjb25kOworCXNobXNlZy0+c2htX3Blcm0ucHIgPSB0ZC0+dGRfdWNy
ZWQtPmNyX3ByaXNvbjsKIAlzaG1fY29tbWl0dGVkICs9IGJ0b2Moc2l6ZSk7CiAJc2htX251c2Vk
Kys7CiAJaWYgKHNobXNlZy0+c2htX3Blcm0ubW9kZSAmIFNITVNFR19XQU5URUQpIHsKZGlmZiAt
dXIgc3JjLnZpcmdpbi9zeXMva2Vybi92ZnNfc3lzY2FsbHMuYyBzcmMuZGlydHkvc3lzL2tlcm4v
dmZzX3N5c2NhbGxzLmMKLS0tIHNyYy52aXJnaW4vc3lzL2tlcm4vdmZzX3N5c2NhbGxzLmMJTW9u
IEphbiAgNiAxNDoyMDo1NCAyMDAzCisrKyBzcmMuZGlydHkvc3lzL2tlcm4vdmZzX3N5c2NhbGxz
LmMJTW9uIE1hciAgMyAwNzo1MzoyNyAyMDAzCkBAIC0xNTgsNyArMTU4LDggQEAKIH0KIAogLyog
WFhYIFBSSVNPTjogY291bGQgYmUgcGVyIHByaXNvbiBmbGFnICovCi1zdGF0aWMgaW50IHByaXNv
bl9xdW90YXM7CisvKnN0YXRpYyBpbnQgcHJpc29uX3F1b3RhczsqLworZXh0ZXJuIGludCBqYWls
X3F1b3Rhc19hbGxvd2VkOwogI2lmIDAKIFNZU0NUTF9JTlQoX2tlcm5fcHJpc29uLCBPSURfQVVU
TywgcXVvdGFzLCBDVExGTEFHX1JXLCAmcHJpc29uX3F1b3RhcywgMCwgIiIpOwogI2VuZGlmCkBA
IC0xODksNyArMTkwLDcgQEAKIAlpbnQgZXJyb3I7CiAJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAot
CWlmIChqYWlsZWQodGQtPnRkX3VjcmVkKSAmJiAhcHJpc29uX3F1b3RhcykKKwlpZiAoamFpbGVk
KHRkLT50ZF91Y3JlZCkgJiYgIWphaWxfcXVvdGFzX2FsbG93ZWQpCiAJCXJldHVybiAoRVBFUk0p
OwogCU5ESU5JVCgmbmQsIExPT0tVUCwgRk9MTE9XLCBVSU9fVVNFUlNQQUNFLCB1YXAtPnBhdGgs
IHRkKTsKIAlpZiAoKGVycm9yID0gbmFtZWkoJm5kKSkgIT0gMCkKQEAgLTMxMSw2ICszMTIsOCBA
QAogCWludCBmbGFnczsKIH07CiAjZW5kaWYKK2V4dGVybiBzdHJ1Y3QgamFpbHMgZmlyc3RqYWls
OworCiBpbnQKIGdldGZzc3RhdCh0ZCwgdWFwKQogCXN0cnVjdCB0aHJlYWQgKnRkOwpAQCAtMzI0
LDYgKzMyNyw3IEBACiAJcmVnaXN0ZXIgc3RydWN0IHN0YXRmcyAqc3A7CiAJY2FkZHJfdCBzZnNw
OwogCWxvbmcgY291bnQsIG1heGNvdW50LCBlcnJvcjsKKwlzdHJ1Y3Qgc3RhdGZzICp0bXBzcDsK
IAogCW1heGNvdW50ID0gdWFwLT5idWZzaXplIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZnMpOwogCXNm
c3AgPSAoY2FkZHJfdCl1YXAtPmJ1ZjsKQEAgLTM1Niw3ICszNjAsMzUgQEAKIAkJCQljb250aW51
ZTsKIAkJCX0KIAkJCXNwLT5mX2ZsYWdzID0gbXAtPm1udF9mbGFnICYgTU5UX1ZJU0ZMQUdNQVNL
OwotCQkJZXJyb3IgPSBjb3B5b3V0KHNwLCBzZnNwLCBzaXplb2YoKnNwKSk7CisKKwkJCS8qIElm
IGphaWxlZCwgb25seSByZXR1cm4gdGhlIG1vdW50cG9pbnRzIHRoYXQgYXJlIGluIHRoZSBqYWls
LiAqLworCQkJaWYgKHRkLT50ZF9wcm9jLT5wX3VjcmVkLT5jcl9wcmlzb24pIHsKKwkJCQlzdHJ1
Y3QgamFpbGVsZW1lbnQgKmVsZW1lbnQ7CisJCQkJTElTVF9GT1JFQUNIKGVsZW1lbnQsICZmaXJz
dGphaWwsIHBvaW50ZXJzKSB7CisJCQkJCWlmIChlbGVtZW50LT5wciA9PSB0ZC0+dGRfcHJvYy0+
cF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlp
ZiAoIXN0cm5jbXAoZWxlbWVudC0+Y2hyb290X3BhdGgsIHNwLT5mX21udG9ubmFtZSwgCisJCQkJ
ICBzdHJsZW4oZWxlbWVudC0+Y2hyb290X3BhdGgpKSkgeworCQkJCQlNQUxMT0ModG1wc3AsIHN0
cnVjdCBzdGF0ZnMgKiwgc2l6ZW9mKHN0cnVjdCBzdGF0ZnMpLCBNX1BSSVNPTiwgTV9XQUlUT0sp
OworCQkJCQltZW1jcHkodG1wc3AsIHNwLCBzaXplb2Yoc3RydWN0IHN0YXRmcykpOworCQkJCQlz
dHJjcHkodG1wc3AtPmZfbW50b25uYW1lLCBzcC0+Zl9tbnRvbm5hbWUgKyBzdHJsZW4oZWxlbWVu
dC0+Y2hyb290X3BhdGgpKTsKKwkJCQkJaWYgKHN0cmxlbih0bXBzcC0+Zl9tbnRvbm5hbWUpID09
IDApIHsKKwkJCQkJCS8qIFJvb3QgbW91bnQuICovCisJCQkJCQlzdHJjcHkodG1wc3AtPmZfbW50
b25uYW1lLCAiLyIpOworCQkJCQl9CisJCQkJCWVycm9yID0gY29weW91dCh0bXBzcCwgc2ZzcCwg
c2l6ZW9mKCp0bXBzcCkpOworCQkJCQlGUkVFKHRtcHNwLCBNX1BSSVNPTik7CisJCQkJfSBlbHNl
IHsKKwkJCQkJbXR4X2xvY2soJm1vdW50bGlzdF9tdHgpOworCQkJCQlubXAgPSBUQUlMUV9ORVhU
KG1wLCBtbnRfbGlzdCk7CisJCQkJCXZmc191bmJ1c3kobXAsIHRkKTsKKwkJCQkJY29udGludWU7
CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IGNvcHlvdXQoc3AsIHNmc3AsIHNpemVv
Zigqc3ApKTsKKwkJCX0KIAkJCWlmIChlcnJvcikgewogCQkJCXZmc191bmJ1c3kobXAsIHRkKTsK
IAkJCQlyZXR1cm4gKGVycm9yKTsKQEAgLTE0MjMsNiArMTQ1NSw3IEBACiAJCQlmbGFncyB8PSBW
V1JJVEU7CiAJCWlmICh1c2VyX2ZsYWdzICYgWF9PSykKIAkJCWZsYWdzIHw9IFZFWEVDOworCiAj
aWZkZWYgTUFDCiAJCWVycm9yID0gbWFjX2NoZWNrX3Zub2RlX2FjY2VzcyhjcmVkLCB2cCwgZmxh
Z3MpOwogCQlpZiAoZXJyb3IpCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL25ldGluZXQvaW5fcGNi
LmMgc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5jCi0tLSBzcmMudmlyZ2luL3N5cy9uZXRp
bmV0L2luX3BjYi5jCUZyaSBOb3YgIDggMTY6NTA6MzIgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9u
ZXRpbmV0L2luX3BjYi5jCVN1biBNYXIgIDIgMTk6NTc6NDAgMjAwMwpAQCAtMjk2LDcgKzI5Niw3
IEBACiAJCQkgICAgIUlOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7
CiAJCQkJdCA9IGluX3BjYmxvb2t1cF9sb2NhbChpbnAtPmlucF9wY2JpbmZvLAogCQkJCSAgICBz
aW4tPnNpbl9hZGRyLCBscG9ydCwKLQkJCQkgICAgcHJpc29uID8gMCA6ICBJTlBMT09LVVBfV0lM
RENBUkQpOworCQkJCSAgICBwcmlzb24gPyAwIDogIElOUExPT0tVUF9XSUxEQ0FSRCwgcHJpc29u
ID8gdGQgOiBOVUxMKTsKIAkJCQlpZiAodCAmJgogCQkJCSAgICAobnRvaGwoc2luLT5zaW5fYWRk
ci5zX2FkZHIpICE9IElOQUREUl9BTlkgfHwKIAkJCQkgICAgIG50b2hsKHQtPmlucF9sYWRkci5z
X2FkZHIpICE9IElOQUREUl9BTlkgfHwKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJICAgIHByaXNv
bl9pcCh0ZC0+dGRfdWNyZWQsIDAsICZzaW4tPnNpbl9hZGRyLnNfYWRkcikpCiAJCQkJcmV0dXJu
IChFQUREUk5PVEFWQUlMKTsKIAkJCXQgPSBpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgc2lu
LT5zaW5fYWRkciwKLQkJCSAgICBscG9ydCwgcHJpc29uID8gMCA6IHdpbGQpOworCQkJICAgIGxw
b3J0LCBwcmlzb24gPyAwIDogd2lsZCwgcHJpc29uID8gdGQgOiBOVUxMKTsKIAkJCWlmICh0ICYm
CiAJCQkgICAgKHJldXNlcG9ydCAmIHQtPmlucF9zb2NrZXQtPnNvX29wdGlvbnMpID09IDApIHsK
ICNpZiBkZWZpbmVkKElORVQ2KQpAQCAtMzQwLDYgKzM0MCw5IEBACiAJCXVzaG9ydCBmaXJzdCwg
bGFzdDsKIAkJaW50IGNvdW50OwogCisJCWlmIChsYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAm
JiB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNvbikKKwkJCWxhZGRyLnNfYWRkciA9IGh0b25sKHByaXNv
bl9nZXRpcCh0ZC0+dGRfdWNyZWQpKTsKKwogCQlpZiAobGFkZHIuc19hZGRyICE9IElOQUREUl9B
TlkpCiAJCQlpZiAocHJpc29uX2lwKHRkLT50ZF91Y3JlZCwgMCwgJmxhZGRyLnNfYWRkcikpCiAJ
CQkJcmV0dXJuIChFSU5WQUwpOwpAQCAtMzgxLDcgKzM4NCw3IEBACiAJCQkJCSpsYXN0cG9ydCA9
IGZpcnN0OwogCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKIAkJCX0gd2hpbGUgKGluX3Bj
Ymxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwgbHBvcnQsCi0JCQkgICAgd2lsZCkpOworCQkJ
ICAgIHdpbGQsIHdpbGQgPyBOVUxMIDogdGQpKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBj
b3VudGluZyB1cApAQCAtMzk2LDcgKzM5OSw3IEBACiAJCQkJCSpsYXN0cG9ydCA9IGZpcnN0Owog
CQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKIAkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9s
b2NhbChwY2JpbmZvLCBsYWRkciwgbHBvcnQsCi0JCQkgICAgd2lsZCkpOworCQkJICAgIHdpbGQs
IHdpbGQgPyBOVUxMIDogdGQpKTsKIAkJfQogCX0KIAlpZiAocHJpc29uX2lwKHRkLT50ZF91Y3Jl
ZCwgMCwgJmxhZGRyLnNfYWRkcikpCkBAIC01MTksOSArNTIyLDEzIEBACiAJCSAqIGFuZCB0aGUg
cHJpbWFyeSBpbnRlcmZhY2Ugc3VwcG9ydHMgYnJvYWRjYXN0LAogCQkgKiBjaG9vc2UgdGhlIGJy
b2FkY2FzdCBhZGRyZXNzIGZvciB0aGF0IGludGVyZmFjZS4KIAkJICovCi0JCWlmIChmYWRkci5z
X2FkZHIgPT0gSU5BRERSX0FOWSkKLQkJCWZhZGRyID0gSUFfU0lOKFRBSUxRX0ZJUlNUKCZpbl9p
ZmFkZHJoZWFkKSktPnNpbl9hZGRyOwotCQllbHNlIGlmIChmYWRkci5zX2FkZHIgPT0gKHVfbG9u
ZylJTkFERFJfQlJPQURDQVNUICYmCisJCWlmIChmYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkg
eworCQkJaWYgKGphaWxlZChjcmVkKSkgeworCQkJCWZhZGRyLnNfYWRkciA9IGh0b25sKHByaXNv
bl9nZXRpcChjcmVkKSk7CisJCQl9IGVsc2UgeworCQkJCWZhZGRyID0gSUFfU0lOKFRBSUxRX0ZJ
UlNUKCZpbl9pZmFkZHJoZWFkKSktPnNpbl9hZGRyOworCQkJfQorCQl9IGVsc2UgaWYgKGZhZGRy
LnNfYWRkciA9PSAodV9sb25nKUlOQUREUl9CUk9BRENBU1QgJiYKIAkJICAgIChUQUlMUV9GSVJT
VCgmaW5faWZhZGRyaGVhZCktPmlhX2lmcC0+aWZfZmxhZ3MgJgogCQkgICAgSUZGX0JST0FEQ0FT
VCkpCiAJCQlmYWRkciA9IHNhdG9zaW4oJlRBSUxRX0ZJUlNUKApAQCAtODc2LDExICs4ODMsMTIg
QEAKICAqIExvb2t1cCBhIFBDQiBiYXNlZCBvbiB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydC4K
ICAqLwogc3RydWN0IGlucGNiICoKLWluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwg
bHBvcnRfYXJnLCB3aWxkX29rYXkpCitpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIs
IGxwb3J0X2FyZywgd2lsZF9va2F5LCB0ZCkKIAlzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvOwog
CXN0cnVjdCBpbl9hZGRyIGxhZGRyOwogCXVfaW50IGxwb3J0X2FyZzsKIAlpbnQgd2lsZF9va2F5
OworCXN0cnVjdCB0aHJlYWQgKnRkOwogewogCXJlZ2lzdGVyIHN0cnVjdCBpbnBjYiAqaW5wOwog
CWludCBtYXRjaHdpbGQgPSAzLCB3aWxkY2FyZDsKQEAgLTkwMCwxMSArOTA4LDE4IEBACiAjZW5k
aWYKIAkJCWlmIChpbnAtPmlucF9mYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgogCQkJICAg
IGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBsYWRkci5zX2FkZHIgJiYKLQkJCSAgICBpbnAtPmlu
cF9scG9ydCA9PSBscG9ydCkgeworCQkJICAgIGlucC0+aW5wX2xwb3J0ID09IGxwb3J0ICYmIAor
CQkJICAgIChsYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSB8fCAhdGQtPnRkX3VjcmVkLT5jcl9w
cmlzb24pKSB7CiAJCQkJLyoKIAkJCQkgKiBGb3VuZC4KIAkJCQkgKi8KIAkJCQlyZXR1cm4gKGlu
cCk7CisJCQl9IGVsc2UgaWYgKHRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uICYmCisJCQkgICAgdGQt
PnRkX3VjcmVkLT5jcl9wcmlzb24gPT0gaW5wLT5pbnBfc29ja2V0LT5zb19jcmVkLT5jcl9wcmlz
b24gJiYKKwkJCSAgICBpbnAtPmlucF9mYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgorCQkJ
ICAgIGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBsYWRkci5zX2FkZHIgJiYKKwkJCSAgICBpbnAt
PmlucF9scG9ydCA9PSBscG9ydCkgeworCQkJCXJldHVybiAoaW5wKTsKIAkJCX0KIAkJfQogCQkv
KgpAQCAtMTAwNSwxMiArMTAyMCwyNCBAQAogCiAJCWhlYWQgPSAmcGNiaW5mby0+aGFzaGJhc2Vb
SU5QX1BDQkhBU0goSU5BRERSX0FOWSwgbHBvcnQsIDAsIHBjYmluZm8tPmhhc2htYXNrKV07CiAJ
CUxJU1RfRk9SRUFDSChpbnAsIGhlYWQsIGlucF9oYXNoKSB7CisJCQlpZiAoaW5wLT5pbnBfc29j
a2V0LT5zb19jcmVkLT5jcl9wcmlzb24gJiYKKwkJCSAgICBpbnAtPmlucF9scG9ydCA9PSBscG9y
dCAmJgorCQkJICAgIGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CisJCQkJ
aWYgKHByaXNvbl9jaGVja19pcChpbnAtPmlucF9zb2NrZXQtPnNvX2NyZWQtPmNyX3ByaXNvbiwg
bnRvaGwobGFkZHIuc19hZGRyKSkpIHsKKwkJCQkJcmV0dXJuIChpbnApOworCQkJCX0KKwkJCX0K
KwkJfQorCisJCWhlYWQgPSAmcGNiaW5mby0+aGFzaGJhc2VbSU5QX1BDQkhBU0goSU5BRERSX0FO
WSwgbHBvcnQsIDAsIHBjYmluZm8tPmhhc2htYXNrKV07CisJCUxJU1RfRk9SRUFDSChpbnAsIGhl
YWQsIGlucF9oYXNoKSB7CiAjaWZkZWYgSU5FVDYKIAkJCWlmICgoaW5wLT5pbnBfdmZsYWcgJiBJ
TlBfSVBWNCkgPT0gMCkKIAkJCQljb250aW51ZTsKICNlbmRpZgogCQkJaWYgKGlucC0+aW5wX2Zh
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZICYmCi0JCQkgICAgaW5wLT5pbnBfbHBvcnQgPT0gbHBv
cnQpIHsKKwkJCSAgICBpbnAtPmlucF9scG9ydCA9PSBscG9ydCAmJgorCQkJICAgICFpbnAtPmlu
cF9zb2NrZXQtPnNvX2NyZWQtPmNyX3ByaXNvbikgewogCQkJCWlmIChpZnAgJiYgaWZwLT5pZl90
eXBlID09IElGVF9GQUlUSCAmJgogCQkJCSAgICAoaW5wLT5pbnBfZmxhZ3MgJiBJTlBfRkFJVEgp
ID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMTAxOSwxMSArMTA0NiwxNCBAQAogCQkJCWVsc2Ug
aWYgKGlucC0+aW5wX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CiAjaWYgZGVmaW5lZChJ
TkVUNikKIAkJCQkJaWYgKElOUF9DSEVDS19TT0NLQUYoaW5wLT5pbnBfc29ja2V0LAotCQkJCQkJ
CSAgICAgQUZfSU5FVDYpKQorCQkJCQkJCSAgICAgQUZfSU5FVDYpKSB7CiAJCQkJCQlsb2NhbF93
aWxkX21hcHBlZCA9IGlucDsKLQkJCQkJZWxzZQorCQkJCQl9IGVsc2UgeworI2VuZGlmIC8qIGRl
ZmluZWQoSU5FVDYpICovCisJCQkJCQlsb2NhbF93aWxkID0gaW5wOworI2lmIGRlZmluZWQoSU5F
VDYpCisJCQkJCX0KICNlbmRpZiAvKiBkZWZpbmVkKElORVQ2KSAqLwotCQkJCQlsb2NhbF93aWxk
ID0gaW5wOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTE0NSw3ICsxMTc1LDcgQEAKIHsKIAlpZiAo
IWphaWxlZCh0ZC0+dGRfdWNyZWQpKQogCQlyZXR1cm4gKDApOwotCWlmIChudG9obChpbnAtPmlu
cF9sYWRkci5zX2FkZHIpID09IHByaXNvbl9nZXRpcCh0ZC0+dGRfdWNyZWQpKQorCWlmIChwcmlz
b25fY2hlY2tfaXAodGQtPnRkX3VjcmVkLT5jcl9wcmlzb24sIG50b2hsKGlucC0+aW5wX2xhZGRy
LnNfYWRkcikpKQogCQlyZXR1cm4gKDApOwogCXJldHVybiAoMSk7CiB9CmRpZmYgLXVyIHNyYy52
aXJnaW4vc3lzL25ldGluZXQvaW5fcGNiLmggc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5o
Ci0tLSBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L2luX3BjYi5oCVR1ZSBOb3YgMTIgMTM6NDQ6Mzgg
MjAwMgorKysgc3JjLmRpcnR5L3N5cy9uZXRpbmV0L2luX3BjYi5oCVRodSBGZWIgMjcgMTc6Mzg6
MzMgMjAwMwpAQCAtMzM5LDcgKzMzOSw3IEBACiBpbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5w
Y2IgKik7CiBzdHJ1Y3QgaW5wY2IgKgogCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2Jp
bmZvICosCi0JICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsKKwkgICAgc3RydWN0IGlu
X2FkZHIsIHVfaW50LCBpbnQsIHN0cnVjdCB0aHJlYWQgKik7CiBzdHJ1Y3QgaW5wY2IgKgogCWlu
X3BjYmxvb2t1cF9oYXNoKHN0cnVjdCBpbnBjYmluZm8gKiwgc3RydWN0IGluX2FkZHIsIHVfaW50
LAogCSAgICBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQsIGludCwgc3RydWN0IGlmbmV0ICopOwpkaWZm
IC11ciBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L2lwX2Z3LmMgc3JjLmRpcnR5L3N5cy9uZXRpbmV0
L2lwX2Z3LmMKLS0tIHNyYy52aXJnaW4vc3lzL25ldGluZXQvaXBfZncuYwlTYXQgSnVuIDIyIDA1
OjUxOjAyIDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMvbmV0aW5ldC9pcF9mdy5jCVNhdCBNYXIgMjIg
MTM6MzY6MDkgMjAwMwpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0aW5ldC9pZl9l
dGhlci5oPiAvKiBYWFggZXRoZXJ0eXBlX2lwICovCiAKKyNpbmNsdWRlIDxzeXMvamFpbC5oPgor
CiBzdGF0aWMgaW50IGZ3X2RlYnVnID0gMTsKICNpZmRlZiBJUEZJUkVXQUxMX1ZFUkJPU0UKIHN0
YXRpYyBpbnQgZndfdmVyYm9zZSA9IDE7CkBAIC0yMDEwLDYgKzIwMTIsMTEgQEAKIAl9CiAKIAll
cnJvciA9IDA7CisKKwkvKiBJZiBhbGxvd19pcGZ3IGlzIG5vdCBlbmFibGVkLCByZXR1cm4gYW4g
ZXJyb3IuICovCisJaWYgKHNvcHQtPnNvcHRfdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gJiYgIXNv
cHQtPnNvcHRfdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPmphaWxfc2V0dGluZ3MuYWxsb3dfaXBm
dykgeworCQlyZXR1cm4gRVBFUk07CisJfQogCiAJc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpIHsK
IAljYXNlIElQX0ZXX0dFVDoKZGlmZiAtdXIgc3JjLnZpcmdpbi9zeXMvbmV0aW5ldC9pcF9mdzIu
YyBzcmMuZGlydHkvc3lzL25ldGluZXQvaXBfZncyLmMKLS0tIHNyYy52aXJnaW4vc3lzL25ldGlu
ZXQvaXBfZncyLmMJU3VuIERlYyAxNSAwNjo1Nzo0MyAyMDAyCisrKyBzcmMuZGlydHkvc3lzL25l
dGluZXQvaXBfZncyLmMJU3VuIE1hciAyMyAxMDowNTozNyAyMDAzCkBAIC03Nyw2ICs3Nyw4IEBA
CiAKICNpbmNsdWRlIDxtYWNoaW5lL2luX2Nrc3VtLmg+CS8qIFhYWCBmb3IgaW5fY2tzdW0gKi8K
IAorI2luY2x1ZGUgPHN5cy9qYWlsLmg+CisKIC8qCiAgKiBYWFggVGhpcyBvbmUgc2hvdWxkIGdv
IGluIHN5cy9tYnVmLmguIEl0IGlzIHVzZWQgdG8gYXZvaWQgdGhhdAogICogYSBmaXJld2FsbC1n
ZW5lcmF0ZWQgcGFja2V0IGxvb3BzIGZvcmV2ZXIgdGhyb3VnaCB0aGUgZmlyZXdhbGwuCkBAIC0y
NDQwLDYgKzI0NDIsMzQgQEAKIAlyZXR1cm4gRUlOVkFMOwogfQogCitzdGF0aWMgaW50CitjaGVj
a19pcGZ3X2phaWwoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBpcF9mdyAqcnVsZSkKK3sKKwlp
cGZ3X2luc25faXAgKmlwX2NtZDsKKwlpcGZ3X2luc24gKmNtZDsKKworCS8qIEphaWxlZD8gKi8K
KwlpZiAoIXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCXJldHVybiAwOworCX0KKworCS8q
IERlZmF1bHQgcnVsZT8gKi8KKwlpZiAocnVsZS0+cnVsZW51bSA9PSBJUEZXX0RFRkFVTFRfUlVM
RSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDaGVjayBhbGwgSVAgYWRkcmVzc2VzIGluIG9w
Y29kZSBsaXN0LiAqLworCWZvciAoY21kID0gcnVsZS0+Y21kOyBjbWQgIT0gQUNUSU9OX1BUUihy
dWxlKTsgY21kKyspIHsKKwkJaWYgKGNtZC0+b3Bjb2RlID09IE9fSVBfRFNUIHx8IGNtZC0+b3Bj
b2RlID09IE9fSVBfU1JDKSB7CisJCQlpcF9jbWQgPSAoaXBmd19pbnNuX2lwKikoY21kKTsKKwkJ
CWlmIChwcmlzb25fY2hlY2tfaXAodGQtPnRkX3VjcmVkLT5jcl9wcmlzb24sIGh0b25sKGlwX2Nt
ZC0+YWRkci5zX2FkZHIpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcmV0
dXJuIEVQRVJNOworfQogCiAvKioKICAqIHtzZXR8Z2V0fXNvY2tvcHQgcGFyc2VyLgpAQCAtMjQ3
MSw2ICsyNTAxLDExIEBACiAKIAllcnJvciA9IDA7CiAKKyAgICAgICAgLyogSWYgYWxsb3dfaXBm
dyBpcyBub3QgZW5hYmxlZCwgcmV0dXJuIGFuIGVycm9yLiAqLworCWlmIChzb3B0LT5zb3B0X3Rk
LT50ZF91Y3JlZC0+Y3JfcHJpc29uICYmICFzb3B0LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJp
c29uLT5qYWlsX3NldHRpbmdzLmFsbG93X2lwZncpIHsKKwkJcmV0dXJuIEVQRVJNOworCX0KKwog
CXN3aXRjaCAoc29wdC0+c29wdF9uYW1lKSB7CiAJY2FzZSBJUF9GV19HRVQ6CiAJCS8qCkBAIC0y
NDk4LDEwICsyNTMzLDEyIEBACiAKIAkJYnAgPSBidWY7CiAJCWZvciAocnVsZSA9IGxheWVyM19j
aGFpbjsgcnVsZSA7IHJ1bGUgPSBydWxlLT5uZXh0KSB7Ci0JCQlpbnQgaSA9IFJVTEVTSVpFKHJ1
bGUpOwotCQkJYmNvcHkocnVsZSwgYnAsIGkpOwotCQkJKChzdHJ1Y3QgaXBfZncgKilicCktPnNl
dF9kaXNhYmxlID0gc2V0X2Rpc2FibGU7Ci0JCQlicCA9IChzdHJ1Y3QgaXBfZncgKikoKGNoYXIg
KilicCArIGkpOworCQkJaWYgKCFjaGVja19pcGZ3X2phaWwoc29wdC0+c29wdF90ZCwgcnVsZSkp
IHsKKwkJCQlpbnQgaSA9IFJVTEVTSVpFKHJ1bGUpOworCQkJCWJjb3B5KHJ1bGUsIGJwLCBpKTsK
KwkJCQkoKHN0cnVjdCBpcF9mdyAqKWJwKS0+c2V0X2Rpc2FibGUgPSBzZXRfZGlzYWJsZTsKKwkJ
CQlicCA9IChzdHJ1Y3QgaXBfZncgKikoKGNoYXIgKilicCArIGkpOworCQkJfQogCQl9CiAJCWlm
IChpcGZ3X2R5bl92KSB7CiAJCQlpbnQgaTsKQEAgLTI1NDcsNyArMjU4NCwxMCBAQAogCQkgKiB0
aGUgbGlzdCB0byBwb2ludCB0byB0aGUgZGVmYXVsdCBydWxlLCBhbmQgdGhlbiBmcmVlaW5nCiAJ
CSAqIHRoZSBvbGQgbGlzdCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxvY2suCiAJCSAqLwotCisJ
CWlmIChzb3B0LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQllcnJvciA9IEVQ
RVJNOworCQkJYnJlYWs7CisJCX0KIAkJcyA9IHNwbGltcCgpOwogCQlmcmVlX2NoYWluKCZsYXll
cjNfY2hhaW4sIDAgLyoga2VlcCBkZWZhdWx0IHJ1bGUgKi8pOwogCQlzcGx4KHMpOwpAQCAtMjU2
MSw2ICsyNjAxLDEwIEBACiAJCWlmIChlcnJvciB8fCAoZXJyb3IgPSBjaGVja19pcGZ3X3N0cnVj
dChydWxlLCBzaXplKSkpCiAJCQlicmVhazsKIAorCQkvKiBDaGVjayBhbmQgbWFrZSBzdXJlIElQ
IGFkZHJlc3NlcyBhcmUgdmFsaWQgKGlmIGphaWxlZCkuICovCisJCWVycm9yID0gY2hlY2tfaXBm
d19qYWlsKHNvcHQtPnNvcHRfdGQsIHJ1bGUpOworCQlpZiAoZXJyb3IpIGJyZWFrOworCiAJCWVy
cm9yID0gYWRkX3J1bGUoJmxheWVyM19jaGFpbiwgcnVsZSk7CiAJCXNpemUgPSBSVUxFU0laRShy
dWxlKTsKIAkJaWYgKCFlcnJvciAmJiBzb3B0LT5zb3B0X2RpciA9PSBTT1BUX0dFVCkKQEAgLTI1
ODQsNiArMjYyOCw5IEBACiAJCQkyKnNpemVvZih1X2ludDMyX3QpLCBzaXplb2YodV9pbnQzMl90
KSk7CiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOworCQllcnJvciA9IGNoZWNrX2lwZndfamFpbChz
b3B0LT5zb3B0X3RkLCAoc3RydWN0IGlwX2Z3KilydWxlX2J1Zik7CisJCWlmIChlcnJvcikKKwkJ
CWJyZWFrOwogCQlzaXplID0gc29wdC0+c29wdF92YWxzaXplOwogCQlpZiAoc2l6ZSA9PSBzaXpl
b2YodV9pbnQzMl90KSkJLyogZGVsZXRlIG9yIHJlYXNzaWduICovCiAJCQllcnJvciA9IGRlbF9l
bnRyeSgmbGF5ZXIzX2NoYWluLCBydWxlX2J1ZlswXSk7CkBAIC0yNjA1LDcgKzI2NTIsMjIgQEAK
IAkJICAgIGlmIChlcnJvcikKIAkJCWJyZWFrOwogCQl9Ci0JCWVycm9yID0gemVyb19lbnRyeShy
dWxlbnVtLCBzb3B0LT5zb3B0X25hbWUgPT0gSVBfRldfUkVTRVRMT0cpOworCisJCWlmIChzb3B0
LT5zb3B0X3RkLT50ZF91Y3JlZC0+Y3JfcHJpc29uKSB7CisJCQkvKiBXZSBoYXZlIHRvIGRvIHRo
aXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkuIHJ1bGVudW0gY2FuJ3QgYmUKKwkJCSAgIGEgcnVsZSB0
aGF0J3Mgb3V0c2lkZSB0aGUgamFpbC4gKi8KKwkJCWZvciAocnVsZSA9IGxheWVyM19jaGFpbjsg
cnVsZSA7IHJ1bGUgPSBydWxlLT5uZXh0KSB7CisJCQkJaWYgKHJ1bGUtPnJ1bGVudW0gPT0gcnVs
ZW51bSB8fCBydWxlbnVtID09IDApIHsKKwkJCQkJaWYgKCFjaGVja19pcGZ3X2phaWwoc29wdC0+
c29wdF90ZCwgcnVsZSkpIHsKKwkJCQkJCXplcm9fZW50cnkocnVsZS0+cnVsZW51bSwgc29wdC0+
c29wdF9uYW1lID09IElQX0ZXX1JFU0VUTE9HKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRp
bnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IgPSB6ZXJvX2Vu
dHJ5KHJ1bGVudW0sIHNvcHQtPnNvcHRfbmFtZSA9PSBJUF9GV19SRVNFVExPRyk7CisJCX0KIAkJ
YnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9uZXRpbmV0L3Jhd19p
cC5jIHNyYy5kaXJ0eS9zeXMvbmV0aW5ldC9yYXdfaXAuYwotLS0gc3JjLnZpcmdpbi9zeXMvbmV0
aW5ldC9yYXdfaXAuYwlXZWQgTm92IDIwIDEyOjAwOjU0IDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMv
bmV0aW5ldC9yYXdfaXAuYwlTYXQgTWFyIDIyIDEyOjE5OjQ2IDIwMDMKQEAgLTc4LDYgKzc4LDgg
QEAKICNpbmNsdWRlIDxuZXRpbmV0Ni9pcHNlYy5oPgogI2VuZGlmIC8qSVBTRUMqLwogCisjaW5j
bHVkZSA8c3lzL2phaWwuaD4KKwogc3RydWN0CWlucGNiaGVhZCByaXBjYjsKIHN0cnVjdAlpbnBj
YmluZm8gcmlwY2JpbmZvOwogCkBAIC01MjgsMTIgKzUzMCwyMCBAQAogewogCXN0cnVjdCBpbnBj
YiAqaW5wOwogCWludCBlcnJvciwgczsKKwlzdHJ1Y3QgcHJpc29uICpzYXZlZCA9IE5VTEw7CiAK
IAlpbnAgPSBzb3RvaW5wY2Ioc28pOwogCWlmIChpbnApCiAJCXBhbmljKCJyaXBfYXR0YWNoIik7
Ci0JaWYgKHRkICYmIChlcnJvciA9IHN1c2VyKHRkKSkgIT0gMCkKKwlpZiAodGQgJiYgdGQtPnRk
X3VjcmVkLT5jcl9wcmlzb24gJiYgdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24tPmphaWxfc2V0dGlu
Z3MuYWxsb3dfcmF3X3NvY2tldHMpIHsKKwkJc2F2ZWQgPSB0ZC0+dGRfdWNyZWQtPmNyX3ByaXNv
bjsKKwkJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gPSBOVUxMOworCX0KKwlpZiAodGQgJiYgKGVy
cm9yID0gc3VzZXIodGQpKSAhPSAwKSB7CisJCXRkLT50ZF91Y3JlZC0+Y3JfcHJpc29uID0gc2F2
ZWQ7CiAJCXJldHVybiBlcnJvcjsKKwl9CisJdGQtPnRkX3VjcmVkLT5jcl9wcmlzb24gPSBzYXZl
ZDsKIAogCWlmIChwcm90byA+PSBJUFBST1RPX01BWCB8fCBwcm90byA8IDApCiAJCXJldHVybiBF
UFJPVE9OT1NVUFBPUlQ7CmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL25ldGluZXQ2L2luNl9wY2Iu
YyBzcmMuZGlydHkvc3lzL25ldGluZXQ2L2luNl9wY2IuYwotLS0gc3JjLnZpcmdpbi9zeXMvbmV0
aW5ldDYvaW42X3BjYi5jCVR1ZSBPY3QgMTUgMjA6MjU6MDUgMjAwMgorKysgc3JjLmRpcnR5L3N5
cy9uZXRpbmV0Ni9pbjZfcGNiLmMJVGh1IEZlYiAyNyAxNzozODozMyAyMDAzCkBAIC0yMTMsNyAr
MjEzLDcgQEAKIAkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNik7CiAJCQkJCXQgPSBpbl9w
Y2Jsb29rdXBfbG9jYWwocGNiaW5mbywKIAkJCQkJCXNpbi5zaW5fYWRkciwgbHBvcnQsCi0JCQkJ
CQlJTlBMT09LVVBfV0lMRENBUkQpOworCQkJCQkJSU5QTE9PS1VQX1dJTERDQVJELCBOVUxMKTsK
IAkJCQkJaWYgKHQgJiYKIAkJCQkJICAgIChzby0+c29fY3JlZC0+Y3JfdWlkICE9CiAJCQkJCSAg
ICAgdC0+aW5wX3NvY2tldC0+c29fY3JlZC0+Y3JfdWlkKSAmJgpAQCAtMjM0LDcgKzIzNCw3IEBA
CiAKIAkJCQlpbjZfc2luNl8yX3Npbigmc2luLCBzaW42KTsKIAkJCQl0ID0gaW5fcGNibG9va3Vw
X2xvY2FsKHBjYmluZm8sIHNpbi5zaW5fYWRkciwKLQkJCQkJCSAgICAgICBscG9ydCwgd2lsZCk7
CisJCQkJCQkgICAgICAgbHBvcnQsIHdpbGQsIHdpbGQgPyBOVUxMIDogdGQpOwogCQkJCWlmICh0
ICYmCiAJCQkJICAgIChyZXVzZXBvcnQgJiB0LT5pbnBfc29ja2V0LT5zb19vcHRpb25zKQogCQkJ
CSAgICA9PSAwICYmCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL3N5cy9pcGMuaCBzcmMuZGlydHkv
c3lzL3N5cy9pcGMuaAotLS0gc3JjLnZpcmdpbi9zeXMvc3lzL2lwYy5oCU1vbiBPY3QgMTQgMTQ6
NTA6NDEgMjAwMgorKysgc3JjLmRpcnR5L3N5cy9zeXMvaXBjLmgJVGh1IEZlYiAyNyAxNzozODoz
MyAyMDAzCkBAIC04NCw2ICs4NCw3IEBACiAJdXNob3J0CW1vZGU7CS8qIHIvdyBwZXJtaXNzaW9u
ICovCiAJdXNob3J0CXNlcTsJLyogc2VxdWVuY2UgIyAodG8gZ2VuZXJhdGUgdW5pcXVlIG1zZy9z
ZW0vc2htIGlkKSAqLwogCWtleV90CWtleTsJLyogdXNlciBzcGVjaWZpZWQgbXNnL3NlbS9zaG0g
a2V5ICovCisJc3RydWN0IHByaXNvbiAqcHI7CS8qIEZvciBqYWlsIGNvbnRyb2wuICovCiB9Owog
CiAjaWYgX19CU0RfVklTSUJMRQpkaWZmIC11ciBzcmMudmlyZ2luL3N5cy9zeXMvamFpbC5oIHNy
Yy5kaXJ0eS9zeXMvc3lzL2phaWwuaAotLS0gc3JjLnZpcmdpbi9zeXMvc3lzL2phaWwuaAlTdW4g
TWF5ICA1IDIxOjEzOjA4IDIwMDIKKysrIHNyYy5kaXJ0eS9zeXMvc3lzL2phaWwuaAlTYXQgTWFy
IDIyIDEzOjM0OjEyIDIwMDMKQEAgLTE3LDcgKzE3LDggQEAKIAl1X2ludDMyX3QJdmVyc2lvbjsK
IAljaGFyCQkqcGF0aDsKIAljaGFyCQkqaG9zdG5hbWU7Ci0JdV9pbnQzMl90CWlwX251bWJlcjsK
Kwl1X2ludDMyX3QJKmlwczsKKwl1X2ludAkJbmlwczsKIH07CiAKICNpZm5kZWYgX0tFUk5FTApA
QCAtMjksNiArMzAsOSBAQAogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgogI2luY2x1ZGUgPHN5cy9f
bG9jay5oPgogI2luY2x1ZGUgPHN5cy9fbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+
CisKK3N0cnVjdCB2bm9kZTsKIAogI2lmZGVmIE1BTExPQ19ERUNMQVJFCiBNQUxMT0NfREVDTEFS
RShNX1BSSVNPTik7CkBAIC00OCwxMCArNTIsMjYgQEAKIHN0cnVjdCBwcmlzb24gewogCWludAkJ
IHByX3JlZjsJCQkvKiAocCkgcmVmY291bnQgKi8KIAljaGFyIAkJIHByX2hvc3RbTUFYSE9TVE5B
TUVMRU5dOwkvKiAocCkgamFpbCBob3N0bmFtZSAqLwotCXVfaW50MzJfdAkgcHJfaXA7CQkJCS8q
IChjKSBpcCBhZGRyIGhvc3QgKi8KKwl1X2ludDMyX3QJICpwcl9pcHM7CQkJLyogKGMpIGlwIGFk
ZHIgaG9zdCAqLworCXVfaW50CQlwcl9uaXBzOwogCXZvaWQJCSpwcl9saW51eDsJCQkvKiAocCkg
bGludXggYWJpICovCiAJaW50CQkgcHJfc2VjdXJlbGV2ZWw7CQkvKiAocCkgc2VjdXJlbGV2ZWwg
Ki8KIAlzdHJ1Y3QgbXR4CSBwcl9tdHg7CisJdV9pbnQJCXByX251bXByb2NzOworCXN0cnVjdCB7
CisJCXVfaW50IG1heF9yYW07CisJCXVfaW50IG1heF9jcHU7CisJCXVfaW50IG1heF9wcm9jczsK
KwkJdV9pbnQgcmFtX3VzZWQ7CisJCXVfaW50IHByb2NzX3VzZWQ7CisJCXVfaW50IGNwdV91c2Vk
OworCQl1X2ludCBhbGxvd19yYXdfc29ja2V0czsKKwkJdV9pbnQgYWxsb3dfaXBmdzsKKwl9IGph
aWxfc2V0dGluZ3M7CisJY2hhciBwcl9ob3N0X29pZFtNQVhIT1NUTkFNRUxFTl07CisJc3RydWN0
IHN5c2N0bF9jdHhfbGlzdCBqZF9zeXNjdGx0cmVlOworCXN0cnVjdCBzeXNjdGxfb2lkICpqZF9z
eXNjdGx0cmVldG9wOworCWludCByZXNjaGVkOwogfTsKIAogLyoKQEAgLTY0LDYgKzg0LDE3IEBA
CiBleHRlcm4gaW50CWphaWxfc3lzdmlwY19hbGxvd2VkOwogCiAvKgorICogTGlzdCBvZiBqYWls
cyAoZm9yIGphaWxfYXR0YWNoKCksIGV0LiBhbC4pCisgKi8KK3N0cnVjdCBqYWlsZWxlbWVudCB7
CisJc3RydWN0IHByaXNvbiAqcHI7CQkJCS8qIFByaXNvbiBlbGVtZW50ICovCisJY2hhciAqY2hy
b290X3BhdGg7CQkJCS8qIFBhdGggdG8gY2hyb290IHRvLiAqLworCUxJU1RfRU5UUlkoamFpbGVs
ZW1lbnQpIHBvaW50ZXJzOworfTsKKworTElTVF9IRUFEKGphaWxzLCBqYWlsZWxlbWVudCk7CisK
Ky8qCiAgKiBLZXJuZWwgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIGphaWwoKS4KICAqLwogc3RydWN0
IHVjcmVkOwpAQCAtNzcsNiArMTA4LDEyIEBACiBpbnQgcHJpc29uX2lmKHN0cnVjdCB1Y3JlZCAq
Y3JlZCwgc3RydWN0IHNvY2thZGRyICpzYSk7CiBpbnQgcHJpc29uX2lwKHN0cnVjdCB1Y3JlZCAq
Y3JlZCwgaW50IGZsYWcsIHVfaW50MzJfdCAqaXApOwogdm9pZCBwcmlzb25fcmVtb3RlX2lwKHN0
cnVjdCB1Y3JlZCAqY3JlZCwgaW50IGZsYWdzLCB1X2ludDMyX3QgKmlwKTsKK2ludCBwcmlzb25f
Y2hlY2tfaXAoc3RydWN0IHByaXNvbiAqcHIsIHVfaW50MzJfdCBpcCk7CitpbnQgamFpbF9jYWxj
dG90YWx1c2VkKHN0cnVjdCBwcmlzb24gKnByKTsKK2ludCBqYWlsX2NoZWNrX3Jlc291cmNlcyhz
dHJ1Y3QgdGhyZWFkICp0ZCk7CitpbnQgamFpbF9jaGVja19jcHUoc3RydWN0IHVjcmVkICp1Yyk7
Cit2b2lkIGphaWxfdXBkYXRlX2NwdSh2b2lkKTsKK2ludCBqYWlsX2NoZWNrX2ZpbGVwZXJtKHN0
cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB1Y3JlZCAqY3JlZCwgc3RydWN0IHRocmVhZCAqdGQpOwog
CiAjZW5kaWYgLyogIV9LRVJORUwgKi8KICNlbmRpZiAvKiAhX1NZU19KQUlMX0hfICovCmRpZmYg
LXVyIHNyYy52aXJnaW4vc3lzL3N5cy9wcm9jLmggc3JjLmRpcnR5L3N5cy9zeXMvcHJvYy5oCi0t
LSBzcmMudmlyZ2luL3N5cy9zeXMvcHJvYy5oCU1vbiBEZWMgIDkgMTk6MzM6NDUgMjAwMgorKysg
c3JjLmRpcnR5L3N5cy9zeXMvcHJvYy5oCVRodSBGZWIgMjcgMTc6Mzg6MzMgMjAwMwpAQCAtMzQ3
LDYgKzM0Nyw3IEBACiAjZGVmaW5lCVRESV9MT0NLCTB4MDgJLyogU3RvcHBlZCBvbiBhIGxvY2su
ICovCiAjZGVmaW5lCVRESV9JV0FJVAkweDEwCS8qIEF3YWl0aW5nIGludGVycnVwdC4gKi8KICNk
ZWZpbmUJVERJX0xPQU4JMHgyMAkvKiBib3VuZCB0aHJlYWQncyBLU0UgaXMgbGVudCAqLworI2Rl
ZmluZSBURElfSlNMRUVQCTB4NDAJLyogSmFpbCBzdXNwZW5zaW9uIGR1ZSB0byBoaWdoIENQVS4g
Ki8KIAogI2RlZmluZQlURF9JU19TTEVFUElORyh0ZCkJKCh0ZCktPnRkX2luaGliaXRvcnMgJiBU
RElfU0xFRVBJTkcpCiAjZGVmaW5lCVREX09OX1NMRUVQUSh0ZCkJKCh0ZCktPnRkX3djaGFuICE9
IE5VTEwpCkBAIC0zNTUsNiArMzU2LDcgQEAKICNkZWZpbmUJVERfT05fTE9DSyh0ZCkJCSgodGQp
LT50ZF9pbmhpYml0b3JzICYgVERJX0xPQ0spCiAjZGVmaW5lCVREX0xFTlQodGQpCQkoKHRkKS0+
dGRfaW5oaWJpdG9ycyAmIFRESV9MT0FOKQogI2RlZmluZQlURF9BV0FJVElOR19JTlRSKHRkKQko
KHRkKS0+dGRfaW5oaWJpdG9ycyAmIFRESV9JV0FJVCkKKyNkZWZpbmUgVERfSVNfSlNMRUVQKHRk
KQkoKHRkKS0+dGRfaW5oaWJpdG9ycyAmIFRESV9KU0xFRVApCiAjZGVmaW5lCVREX0lTX1JVTk5J
TkcodGQpCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfUlVOTklORykKICNkZWZpbmUJVERfT05fUlVO
USh0ZCkJCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfUlVOUSkKICNkZWZpbmUJVERfQ0FOX1JVTih0
ZCkJCSgodGQpLT50ZF9zdGF0ZSA9PSBURFNfQ0FOX1JVTikKQEAgLTM3Nyw2ICszNzksNyBAQAog
I2RlZmluZQlURF9TRVRfU1VTUEVOREVEKHRkKQlURF9TRVRfSU5ISUIoKHRkKSwgVERJX1NVU1BF
TkRFRCkKICNkZWZpbmUJVERfU0VUX0lXQUlUKHRkKQlURF9TRVRfSU5ISUIoKHRkKSwgVERJX0lX
QUlUKQogI2RlZmluZQlURF9TRVRfTE9BTih0ZCkJCVREX1NFVF9JTkhJQigodGQpLCBURElfTE9B
TikKKyNkZWZpbmUgVERfU0VUX0pTTEVFUCh0ZCkJVERfU0VUX0lOSElCKCh0ZCksIFRESV9KU0xF
RVApCiAKICNkZWZpbmUJVERfQ0xSX1NMRUVQSU5HKHRkKQlURF9DTFJfSU5ISUIoKHRkKSwgVERJ
X1NMRUVQSU5HKQogI2RlZmluZQlURF9DTFJfU1dBUFBFRCh0ZCkJVERfQ0xSX0lOSElCKCh0ZCks
IFRESV9TV0FQUEVEKQpAQCAtMzg0LDYgKzM4Nyw3IEBACiAjZGVmaW5lCVREX0NMUl9TVVNQRU5E
RUQodGQpCVREX0NMUl9JTkhJQigodGQpLCBURElfU1VTUEVOREVEKQogI2RlZmluZQlURF9DTFJf
SVdBSVQodGQpCVREX0NMUl9JTkhJQigodGQpLCBURElfSVdBSVQpCiAjZGVmaW5lCVREX0NMUl9M
T0FOKHRkKQkJVERfQ0xSX0lOSElCKCh0ZCksIFRESV9MT0FOKQorI2RlZmluZSBURF9DTFJfSlNM
RUVQKHRkKQlURF9DTFJfSU5ISUIoKHRkKSwgVERJX0pTTEVFUCkKIAogI2RlZmluZQlURF9TRVRf
UlVOTklORyh0ZCkJZG8geyh0ZCktPnRkX3N0YXRlID0gVERTX1JVTk5JTkc7IH0gd2hpbGUgKDAp
CiAjZGVmaW5lCVREX1NFVF9SVU5RKHRkKQkJZG8geyh0ZCktPnRkX3N0YXRlID0gVERTX1JVTlE7
IH0gd2hpbGUgKDApCmRpZmYgLXVyIHNyYy52aXJnaW4vc3lzL3Vmcy91ZnMvdWZzX3Zub3BzLmMg
c3JjLmRpcnR5L3N5cy91ZnMvdWZzL3Vmc192bm9wcy5jCi0tLSBzcmMudmlyZ2luL3N5cy91ZnMv
dWZzL3Vmc192bm9wcy5jCVN1biBPY3QgMjcgMTE6MDk6NDkgMjAwMgorKysgc3JjLmRpcnR5L3N5
cy91ZnMvdWZzL3Vmc192bm9wcy5jCU1vbiBNYXIgIDMgMDc6NTc6MTcgMjAwMwpAQCAtNjIsNiAr
NjIsNyBAQAogI2luY2x1ZGUgPHN5cy9jb25mLmg+CiAjaW5jbHVkZSA8c3lzL2FjbC5oPgogI2lu
Y2x1ZGUgPHN5cy9tYWMuaD4KKyNpbmNsdWRlIDxzeXMvamFpbC5oPgogCiAjaW5jbHVkZSA8bWFj
aGluZS9tdXRleC5oPgogCkBAIC0zMzksNiArMzQwLDEyIEBACiAJc3RydWN0IGFjbCAqYWNsOwog
CXNpemVfdCBsZW47CiAjZW5kaWYKKworCS8qIERvIHNwZWNpYWwgamFpbCBjaGVja2luZywgaWYg
bmVjZXNzYXJ5LiAqLworCWVycm9yID0gamFpbF9jaGVja19maWxlcGVybSh2cCwgYXAtPmFfY3Jl
ZCwgYXAtPmFfdGQpOworCWlmIChlcnJvcikgeworCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJLyoK
IAkgKiBEaXNhbGxvdyB3cml0ZSBhdHRlbXB0cyBvbiByZWFkLW9ubHkgZmlsZXN5c3RlbXM7CmRp
ZmYgLXVyIHNyYy52aXJnaW4vdXNyLnNiaW4vamFpbC9qYWlsLmMgc3JjLmRpcnR5L3Vzci5zYmlu
L2phaWwvamFpbC5jCi0tLSBzcmMudmlyZ2luL3Vzci5zYmluL2phaWwvamFpbC5jCU1vbiBBcHIg
MjIgMDc6NDQ6NDMgMjAwMgorKysgc3JjLmRpcnR5L3Vzci5zYmluL2phaWwvamFpbC5jCVRodSBG
ZWIgMjcgMTc6Mzg6MzMgMjAwMwpAQCAtMjYsMjggKzI2LDY4IEBACiBtYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgamFpbCBqOwotCWludCBpOworCWludCBpLCBrLCBtLCBj
ID0gMTsKIAlzdHJ1Y3QgaW5fYWRkciBpbjsKKwljaGFyICp0ZW1wc3RyaW5nLCBpcHN0cmluZ1sx
Nl07CiAKLQlpZiAoYXJnYyA8IDUpIAotCQllcnJ4KDEsICJ1c2FnZTogJXMgcGF0aCBob3N0bmFt
ZSBpcC1udW1iZXIgY29tbWFuZCAuLi5cbiIsCisJaWYgKGFyZ2MgPCA1KSB7CisJCWVycngoMSwg
IlVzYWdlOiAlcyBwYXRoIGhvc3RuYW1lIGlwMVssaXAyWy4uLl1dIGNvbW1hbmQgLi4uXG4iLAog
CQkgICAgYXJndlswXSk7CisJfQorCiAJaSA9IGNoZGlyKGFyZ3ZbMV0pOwogCWlmIChpKQogCQll
cnIoMSwgImNoZGlyICVzIiwgYXJndlsxXSk7CiAJbWVtc2V0KCZqLCAwLCBzaXplb2YoaikpOwot
CWoudmVyc2lvbiA9IDA7CisJai52ZXJzaW9uID0gMTsKIAlqLnBhdGggPSBhcmd2WzFdOwogCWou
aG9zdG5hbWUgPSBhcmd2WzJdOwotCWkgPSBpbmV0X2F0b24oYXJndlszXSwgJmluKTsKLQlpZiAo
IWkpCi0JCWVycngoMSwgIkNvdWxkbid0IG1ha2Ugc2Vuc2Ugb2YgaXAtbnVtYmVyXG4iKTsKLQlq
LmlwX251bWJlciA9IG50b2hsKGluLnNfYWRkcik7CisKKwkvKiBGZWIuIDEsIDIwMDMgKE1TKTog
RGV0ZXJtaW5lIGhvdyBtYW55IElQIGFkZHJlc3NlcyB1c2VyIHBhc3NlZCB0byBqYWlsLiBUaGlz
CisJICAgaXMgaW1wb3J0YW50IGxhdGVyIGZvciBmaWxsaW5nIGluIGoubmlwcyBhbmQgZm9yIGFs
bG9jYXRpbmcgdGhlIHByb3BlciBhbW91bnQKKwkgICBvZiBtZW1vcnkuICovCisJdGVtcHN0cmlu
ZyA9IGFyZ3ZbM107CisJd2hpbGUoKnRlbXBzdHJpbmcpIHsKKwkJaWYgKCp0ZW1wc3RyaW5nID09
ICcsJykgYysrOworCQl0ZW1wc3RyaW5nKys7CisJfQorCWoubmlwcyA9IGM7CisKKwkvKiBBbGxv
Y2F0ZSBSQU0sIGRlcGVuZGluZyBvbiBudW1iZXIgb2YgSVAgYWRkcmVzc2VzIHBhc3NlZC4gKi8K
KwlqLmlwcyA9ICh1X2ludDMyX3QgKiltYWxsb2Moc2l6ZW9mKHVfaW50MzJfdCkgKiBjKTsKKwlp
ZiAoai5pcHMgPT0gTlVMTCkgeworCQllcnJ4KDEsICJtYWxsb2MoKSBpc3N1ZSwgbGluZSA1NiAo
L3Vzci9zcmMvdXNyLnNiaW4vamFpbC9qYWlsLmMpLiBQb3NzaWJsZSBsYWNrIG9mIFJBTSBvciBz
b2Z0d2FyZSBidWcuIik7CisJfQorCisJLyogQ29weSBlYWNoIElQIGludG8gdGhlIGFycmF5Lgor
CSAgIE5vdGUgKE1TLCAwMi8wMS8yMDAzKTogNC54IHZlcnNpb24gdXNlZCBzdHJ0b2soKSwgYSBk
YW5nZXJvdXMgcHJvZ3JhbW1pbmcgY29uc3RydWN0LiAqLworCXRlbXBzdHJpbmcgPSBhcmd2WzNd
OworCW0gPSAwOworCXdoaWxlICgqdGVtcHN0cmluZykgeworCQlrID0gMDsKKwkJd2hpbGUgKDEp
IHsKKwkJCWlmICgqKHRlbXBzdHJpbmcraykgPT0gJywnIHx8ICoodGVtcHN0cmluZytrKSA9PSAn
XDAnKSB7CisJCQkJc3RybmNweShpcHN0cmluZywgdGVtcHN0cmluZywgayk7CisJCQkJaXBzdHJp
bmdba10gPSAnXDAnOworCQkJCWkgPSBpbmV0X2F0b24oaXBzdHJpbmcsICZpbik7CisJCQkJaWYg
KCFpKSB7CisJCQkJCWZyZWUoai5pcHMpOworCQkJCQllcnJ4KDEsICJDb3VsZG4ndCBtYWtlIHNl
bnNlIG9mIElQIGFkZHJlc3MgJXMiLCBpcHN0cmluZyk7CisJCQkJfQorCQkJCWouaXBzW20rK10g
PSBudG9obChpbi5zX2FkZHIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaysrOworCQl9CisJCXRl
bXBzdHJpbmcgPSB0ZW1wc3RyaW5nICsgazsKKwkJaWYgKCp0ZW1wc3RyaW5nID09ICcsJykgdGVt
cHN0cmluZysrOworCX0KKwkJCiAJaSA9IGphaWwoJmopOwogCWlmIChpKQotCQllcnIoMSwgIklt
cHJpc29ubWVudCBmYWlsZWQiKTsKKwkJZXJyeCgxLCAiSW1wcmlzb25tZW50IGZhaWxlZCIpOwog
CWkgPSBleGVjdihhcmd2WzRdLCBhcmd2ICsgNCk7CiAJaWYgKGkpCi0JCWVycigxLCAiZXhlY3Yo
JXMpIiwgYXJndls0XSk7CisJCWVycngoMSwgImV4ZWN2KCVzKSIsIGFyZ3ZbNF0pOwogCWV4aXQg
KDApOwogfQo=
------=_Part_1853_19119760.1150116506221--



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