Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Apr 2009 16:51:09 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        Iain Hibbert <plunky@rya-online.net>
Cc:        freebsd-bluetooth@freebsd.org
Subject:   Re: libhci update
Message-ID:  <bb4a86c70904211651m6127745ao9d4f26c91e428994@mail.gmail.com>
In-Reply-To: <1240352254.082638.416.nullmailer@galant.ukfsn.org>
References:  <E1Lv5La-00058x-HH@smtpbarns01> <bb4a86c70904201053y1a04d76el336432d3e1a23576@mail.gmail.com> <1240311202.361300.1366.nullmailer@galant.ukfsn.org> <bb4a86c70904210959w6de5e808h9f85ee2bb1995dbf@mail.gmail.com> <1240352254.082638.416.nullmailer@galant.ukfsn.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0016363104f536d91f04681952b1
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

On Tue, Apr 21, 2009 at 3:17 PM, Iain Hibbert <plunky@rya-online.net> wrote:
> On Tue, 21 Apr 2009, Maksim Yevmenkin wrote:
>
>> the revised diff is attached. please review.
>
> Its all looking good, though some small tuneups still occurring :)

thanks for the review.

> in bt_devsend() you might also want to check for "plen > UINT8_MAX"?

done

> for bt_devrecv() should there also be a method for not timing out?  I can
> see that being used to wait for any packet which could be some time.
> (bt_devreq() does not need that I think?)

done

> In bt_devreq() you used buf[320] is that truly enough? I didn't check that
> part of the radio specification dedicated to baseband packet size but the
> Broadcom BCM2045B device in my laptop claims to have max_acl_size of 1017..

yes, but we are not dealing with acl packets in bt_devreq() only
commands and event that have up to 255 bytes of payload.

> Also, I think rlen and rparam can be empty in bt_devreq(), is that
> intentional and what does it mean?

if someone wants to just send request and does not really care about
return parameters.

> and finally some language improvements in the manpage below

fixed.

please see attached revised patch.

thanks,
max

--0016363104f536d91f04681952b1
Content-Type: text/plain; charset=US-ASCII; name="bluetooth.hci.diff.txt"
Content-Disposition: attachment; filename="bluetooth.hci.diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ftt91jr80

SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTEzNjMpCisrKyBo
Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDUwNSBAQAogICogJEZyZWVCU0QkCiAg
Ki8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgorI2luY2x1
ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI3VuZGVmCU1JTgor
I2RlZmluZQlNSU4oYSwgYikJKCgoYSkgPCAoYikpPyAoYSkgOiAoYikpCisKK3N0YXRpYyBpbnQg
ICAgYnRfZGV2YW55X2NiKGludCBzLCBzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQg
KnhkZXZuYW1lKTsKIHN0YXRpYyBjaGFyICogYnRfZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5h
bWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4pOwogCiBpbnQKK2J0X2Rldm9wZW4oY2hhciBj
b25zdCAqZGV2bmFtZSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaGNpCWhhOworCWJkYWRkcl90CQli
YTsKKwlpbnQJCQlzOworCisJaWYgKGRldm5hbWUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZB
TDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJ
aGEuaGNpX2xlbiA9IHNpemVvZihoYSk7CisJaGEuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsK
KworCWlmIChidF9hdG9uKGRldm5hbWUsICZiYSkpIHsKKwkJaWYgKCFidF9kZXZuYW1lKGhhLmhj
aV9ub2RlLCAmYmEpKQorCQkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShk
ZXZuYW1lLCBoYS5oY2lfbm9kZSwKKwkJCQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkg
eworCQllcnJubyA9IEVOWElPOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlzID0gc29ja2V0KFBG
X0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9QUk9UT19IQ0kpOworCWlmIChzIDwgMCkK
KwkJcmV0dXJuICgtMSk7CisKKwlpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwg
c2l6ZW9mKGhhKSkgPCAwIHx8CisJICAgIGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAm
aGEsIHNpemVvZihoYSkpIDwgMCkgeworCQljbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQor
CisJcmV0dXJuIChzKTsKK30KKworaW50CitidF9kZXZjbG9zZShpbnQgcykKK3sKKwlyZXR1cm4g
KGNsb3NlKHMpKTsKK30KKworaW50CitidF9kZXZzZW5kKGludCBzLCB1aW50MTZfdCBvcGNvZGUs
IHZvaWQgKnBhcmFtLCBzaXplX3QgcGxlbikKK3sKKwluZ19oY2lfY21kX3BrdF90CWg7CisJc3Ry
dWN0IGlvdmVjCQlpdlsyXTsKKwlpbnQJCQlpdm47CisKKwlpZiAoKHBsZW4gPT0gMCAmJiBwYXJh
bSAhPSBOVUxMKSB8fAorCSAgICAocGxlbiA+IDAgJiYgcGFyYW0gPT0gTlVMTCkgfHwKKwkgICAg
cGxlbiA+IFVJTlQ4X01BWCkgeyAKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOwor
CX0KKworCWl2WzBdLmlvdl9iYXNlID0gJmg7CisJaXZbMF0uaW92X2xlbiA9IHNpemVvZihoKTsK
Kwlpdm4gPSAxOworCisJaC50eXBlID0gTkdfSENJX0NNRF9QS1Q7CisJaC5vcGNvZGUgPSBodG9s
ZTE2KG9wY29kZSk7CisJaWYgKHBsZW4gPiAwKSB7CisJCWgubGVuZ3RoID0gcGxlbjsKKworCQlp
dlsxXS5pb3ZfYmFzZSA9IHBhcmFtOworCQlpdlsxXS5pb3ZfbGVuID0gcGxlbjsKKwkJaXZuID0g
MjsKKwl9IGVsc2UKKwkJaC5sZW5ndGggPSAwOworCisJd2hpbGUgKHdyaXRldihzLCBpdiwgaXZu
KSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCWNv
bnRpbnVlOworCisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3NzaXpl
X3QKK2J0X2RldnJlY3YoaW50IHMsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHRpbWVfdCB0bykK
K3sKKwlzc2l6ZV90CW47CisKKwlpZiAoYnVmID09IE5VTEwgfHwgc2l6ZSA9PSAwKSB7CisJCWVy
cm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAodG8gPj0gMCkgeworCQlm
ZF9zZXQJCXJmZDsKKwkJc3RydWN0IHRpbWV2YWwJdHY7CisKKwkJRkRfWkVSTygmcmZkKTsKKwkJ
RkRfU0VUKHMsICZyZmQpOworCisJCXR2LnR2X3NlYyA9IHRvOworCQl0di50dl91c2VjID0gMDsK
KworCQl3aGlsZSAoKG4gPSBzZWxlY3QocyArIDEsICZyZmQsIE5VTEwsIE5VTEwsICZ0dikpIDwg
MCkgeworCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCQljb250
aW51ZTsKKworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQlpZiAobiA9PSAwKSB7CisJCQllcnJu
byA9IEVUSU1FRE9VVDsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJYXNzZXJ0KEZEX0lTU0VU
KHMsICZyZmQpKTsKKwl9CisKKwl3aGlsZSAoKG4gPSByZWFkKHMsIGJ1Ziwgc2l6ZSkpIDwgMCkg
eworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7
CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJc3dpdGNoICgqKCh1aW50OF90ICopIGJ1ZikpIHsK
KwljYXNlIE5HX0hDSV9DTURfUEtUOiB7CisJCW5nX2hjaV9jbWRfcGt0X3QJKmggPSAobmdfaGNp
X2NtZF9wa3RfdCAqKSBidWY7CisKKwkJaWYgKG4gPj0gc2l6ZW9mKCpoKSAmJiBuID09IChzaXpl
b2YoKmgpICsgaC0+bGVuZ3RoKSkKKwkJCXJldHVybiAobik7CisJCX0gYnJlYWs7CisKKwljYXNl
IE5HX0hDSV9BQ0xfREFUQV9QS1Q6IHsKKwkJbmdfaGNpX2FjbGRhdGFfcGt0X3QJKmggPSAobmdf
aGNpX2FjbGRhdGFfcGt0X3QgKikgYnVmOworCisJCWlmIChuID49IHNpemVvZigqaCkgJiYgbiA9
PSAoc2l6ZW9mKCpoKSArIGxlMTZ0b2goaC0+bGVuZ3RoKSkpCisJCQlyZXR1cm4gKG4pOworCQl9
IGJyZWFrOworCisJY2FzZSBOR19IQ0lfU0NPX0RBVEFfUEtUOiB7CisJCW5nX2hjaV9zY29kYXRh
X3BrdF90CSpoID0gKG5nX2hjaV9zY29kYXRhX3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBz
aXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigqaCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChu
KTsKKwkJfSBicmVhazsKKworCWNhc2UgTkdfSENJX0VWRU5UX1BLVDogeworCQluZ19oY2lfZXZl
bnRfcGt0X3QJKmggPSAobmdfaGNpX2V2ZW50X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBz
aXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigqaCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChu
KTsKKwkJfSBicmVhazsKKwl9CisKKwllcnJubyA9IEVJTzsKKwlyZXR1cm4gKC0xKTsKK30KKwor
aW50CitidF9kZXZyZXEoaW50IHMsIHN0cnVjdCBidF9kZXZyZXEgKnIsIHRpbWVfdCB0bykKK3sK
Kwl1aW50OF90CQkJCWJ1ZlszMjBdOyAvKiBtb3JlIHRoYW4gZW5vdWdoICovCisJbmdfaGNpX2V2
ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZlbnRfcGt0X3QgKikgYnVmOworCW5nX2hjaV9jb21t
YW5kX2NvbXBsX2VwCQkqY2MgPSAobmdfaGNpX2NvbW1hbmRfY29tcGxfZXAgKikoZSsxKTsKKwlu
Z19oY2lfY29tbWFuZF9zdGF0dXNfZXAJKmNzID0gKG5nX2hjaV9jb21tYW5kX3N0YXR1c19lcCop
KGUrMSk7CisJc3RydWN0IGJ0X2RldmZpbHRlcgkJb2xkLCBuZXc7CisJdGltZV90CQkJCXRfZW5k
OworCXVpbnQxNl90CQkJb3Bjb2RlOworCXNzaXplX3QJCQkJbjsKKwlpbnQJCQkJZXJyb3I7CisK
KwlpZiAocyA8IDAgfHwgciA9PSBOVUxMIHx8IHRvIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsK
KwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYgKChyLT5ybGVuID09IDAgJiYgci0+cnBhcmFtICE9
IE5VTEwpIHx8CisJICAgIChyLT5ybGVuID4gMCAmJiByLT5ycGFyYW0gPT0gTlVMTCkpIHsKKwkJ
ZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCW1lbXNldCgmbmV3LCAwLCBz
aXplb2YobmV3KSk7CisJYnRfZGV2ZmlsdGVyX3BrdF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX1BL
VCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX0NPTU1BTkRfQ09N
UEwpOworCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcsIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NU
QVRVUyk7CisJaWYgKHItPmV2ZW50ICE9IDApCisJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcs
IHItPmV2ZW50KTsKKworCWlmIChidF9kZXZmaWx0ZXIocywgJm5ldywgJm9sZCkgPCAwKQorCQly
ZXR1cm4gKC0xKTsKKworCWVycm9yID0gMDsKKworCW4gPSBidF9kZXZzZW5kKHMsIHItPm9wY29k
ZSwgci0+Y3BhcmFtLCByLT5jbGVuKTsKKwlpZiAobiA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
KwkJZ290byBvdXQ7CQorCX0KKworCW9wY29kZSA9IGh0b2xlMTYoci0+b3Bjb2RlKTsKKwl0X2Vu
ZCA9IHRpbWUoTlVMTCkgKyB0bzsKKworCWRvIHsKKwkJdG8gPSB0X2VuZCAtIHRpbWUoTlVMTCk7
CisJCWlmICh0byA8IDApCisJCQl0byA9IDA7CisKKwkJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBz
aXplb2YoYnVmKSwgdG8pOworCQlpZiAobiA8IDApIHsKKwkJCWVycm9yID0gZXJybm87CisJCQln
b3RvIG91dDsKKwkJfQorCisJCWlmIChlLT50eXBlICE9IE5HX0hDSV9FVkVOVF9QS1QpIHsKKwkJ
CWVycm9yID0gRUlPOworCQkJZ290byBvdXQ7CisJCX0KKworCQluIC09IHNpemVvZigqZSk7CisK
KwkJc3dpdGNoIChlLT5ldmVudCkgeworCQljYXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX0NPTVBM
OgorCQkJaWYgKGNjLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQkJbiAtPSBzaXplb2YoKmNjKTsK
KworCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNw
eShyLT5ycGFyYW0sIGNjICsgMSwgci0+cmxlbik7CisJCQkJfQorCisJCQkJZ290byBvdXQ7CisJ
CQl9CisJCQlicmVhazsKKworCQljYXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUzoKKwkJ
CWlmIChjcy0+b3Bjb2RlID09IG9wY29kZSkgeworCQkJCWlmIChyLT5ldmVudCAhPSBOR19IQ0lf
RVZFTlRfQ09NTUFORF9TVEFUVVMpIHsKKwkJCQkJaWYgKGNzLT5zdGF0dXMgIT0gMCkgeworCQkJ
CQkJZXJyb3IgPSBFSU87CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJ
CQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJCXItPnJsZW4gPSBuOworCQkJCQkJbWVtY3B5
KHItPnJwYXJhbSwgY3MsIHItPnJsZW4pOworCQkJCQl9CisKKwkJCQkJZ290byBvdXQ7CisJCQkJ
fQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWlmIChlLT5ldmVudCA9PSByLT5l
dmVudCkgeworCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJ
CW1lbWNweShyLT5ycGFyYW0sIGUgKyAxLCByLT5ybGVuKTsKKwkJCQl9CisKKwkJCQlnb3RvIG91
dDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodG8gPiAwKTsKKworCWVycm9yID0g
RVRJTUVET1VUOworb3V0OgorCWJ0X2RldmZpbHRlcihzLCAmb2xkLCBOVUxMKTsKKworCWlmIChl
cnJvciAhPSAwKSB7CisJCWVycm5vID0gZXJyb3I7CisJCXJldHVybiAoLTEpOworCX0KKworCXJl
dHVybiAoMCk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2Zmls
dGVyIGNvbnN0ICpuZXcsIHN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCkKK3sKKwlzdHJ1Y3Qgbmdf
YnRzb2NrZXRfaGNpX3Jhd19maWx0ZXIJZjsKKwlzb2NrbGVuX3QJCQkJbGVuOworCisJaWYgKG5l
dyA9PSBOVUxMICYmIG9sZCA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4g
KC0xKTsKKwl9CisKKwlpZiAob2xkICE9IE5VTEwpIHsKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlp
ZiAoZ2V0c29ja29wdChzLCBTT0xfSENJX1JBVywgU09fSENJX1JBV19GSUxURVIsICZmLCAmbGVu
KSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKworCQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkp
OworCQltZW1jcHkob2xkLT5wYWNrZXRfbWFzaywgJmYucGFja2V0X21hc2ssCisJCQlNSU4oc2l6
ZW9mKG9sZC0+cGFja2V0X21hc2spLCBzaXplb2YoZi5wYWNrZXRfbWFzaykpKTsKKwkJbWVtY3B5
KG9sZC0+ZXZlbnRfbWFzaywgJmYuZXZlbnRfbWFzaywKKwkJCU1JTihzaXplb2Yob2xkLT5ldmVu
dF9tYXNrKSwgc2l6ZW9mKGYucGFja2V0X21hc2spKSk7CisJfQorCisJaWYgKG5ldyAhPSBOVUxM
KSB7CisJCW1lbXNldCgmZiwgMCwgc2l6ZW9mKGYpKTsKKwkJbWVtY3B5KCZmLnBhY2tldF9tYXNr
LCBuZXctPnBhY2tldF9tYXNrLAorCQkJTUlOKHNpemVvZihmLnBhY2tldF9tYXNrKSwgc2l6ZW9m
KG5ldy0+ZXZlbnRfbWFzaykpKTsKKwkJbWVtY3B5KCZmLmV2ZW50X21hc2ssIG5ldy0+ZXZlbnRf
bWFzaywKKwkJCU1JTihzaXplb2YoZi5ldmVudF9tYXNrKSwgc2l6ZW9mKG5ldy0+ZXZlbnRfbWFz
aykpKTsKKworCQlsZW4gPSBzaXplb2YoZik7CisJCWlmIChzZXRzb2Nrb3B0KHMsIFNPTF9IQ0lf
UkFXLCBTT19IQ0lfUkFXX0ZJTFRFUiwgJmYsIGxlbikgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJ
fQorCisJcmV0dXJuICgwKTsKK30KKwordm9pZAorYnRfZGV2ZmlsdGVyX3BrdF9zZXQoc3RydWN0
IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IHR5cGUpCit7CisJYml0X3NldChmaWx0ZXIt
PnBhY2tldF9tYXNrLCB0eXBlIC0gMSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9wa3RfY2xy
KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCB0eXBlKQoreworCWJpdF9jbGVh
cihmaWx0ZXItPnBhY2tldF9tYXNrLCB0eXBlIC0gMSk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVy
X3BrdF90c3Qoc3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IHR5cGUp
Cit7CisJcmV0dXJuIChiaXRfdGVzdChmaWx0ZXItPnBhY2tldF9tYXNrLCB0eXBlIC0gMSkpOwor
fQorCit2b2lkCitidF9kZXZmaWx0ZXJfZXZ0X3NldChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0
ZXIsIHVpbnQ4X3QgZXZlbnQpCit7CisJYml0X3NldChmaWx0ZXItPmV2ZW50X21hc2ssIGV2ZW50
IC0gMSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9ldnRfY2xyKHN0cnVjdCBidF9kZXZmaWx0
ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwliaXRfY2xlYXIoZmlsdGVyLT5ldmVudF9t
YXNrLCBldmVudCAtIDEpOworfQorCitpbnQKK2J0X2RldmZpbHRlcl9ldnRfdHN0KHN0cnVjdCBi
dF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwlyZXR1cm4gKGJp
dF90ZXN0KGZpbHRlci0+ZXZlbnRfbWFzaywgZXZlbnQgLSAxKSk7Cit9CisKK2ludAorYnRfZGV2
aW5xdWlyeShjaGFyIGNvbnN0ICpkZXZuYW1lLCB0aW1lX3QgbGVuZ3RoLCBpbnQgbnVtX3JzcCwK
KwkJc3RydWN0IGJ0X2RldmlucXVpcnkgKippaSkKK3sKKwl1aW50OF90CQkJCWJ1ZlszMjBdOwor
CWNoYXIJCQkJX2Rldm5hbWVbSENJX0RFVk5BTUVfU0laRV07CisJc3RydWN0IGJ0X2RldmZpbHRl
cgkJZjsKKwluZ19oY2lfaW5xdWlyeV9jcAkJKmNwID0gKG5nX2hjaV9pbnF1aXJ5X2NwICopIGJ1
ZjsKKwluZ19oY2lfZXZlbnRfcGt0X3QJCSplID0gKG5nX2hjaV9ldmVudF9wa3RfdCAqKSBidWY7
CisJbmdfaGNpX2lucXVpcnlfcmVzdWx0X2VwCSplcCA9IChuZ19oY2lfaW5xdWlyeV9yZXN1bHRf
ZXAgKikoZSsxKTsKKwluZ19oY2lfaW5xdWlyeV9yZXNwb25zZQkJKmlyOworCXN0cnVjdCBidF9k
ZXZpbnF1aXJ5CQkqaTsKKwlpbnQJCQkJcywgbjsKKwl0aW1lX3QJCQkJdG87CisKKwlpZiAoaWkg
PT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYg
KGRldm5hbWUgPT0gTlVMTCkgeworCQltZW1zZXQoX2Rldm5hbWUsIDAsIHNpemVvZihfZGV2bmFt
ZSkpOworCQlkZXZuYW1lID0gX2Rldm5hbWU7CisKKwkJbiA9IGJ0X2RldmVudW0oYnRfZGV2YW55
X2NiLCBfZGV2bmFtZSk7CisJCWlmIChuIDw9IDApIHsKKwkJCWlmIChuID09IDApCisJCQkJKmlp
ID0gTlVMTDsKKworCQkJcmV0dXJuIChuKTsKKwkJfQorCX0KKworCXMgPSBidF9kZXZvcGVuKGRl
dm5hbWUpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAoYnRfZGV2ZmlsdGVy
KHMsIE5VTEwsICZmKSA8IDApIHsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCXJldHVybiAoLTEpOwor
CX0KKworCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZmLCBOR19IQ0lfRVZFTlRfSU5RVUlSWV9DT01Q
TCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJmYsIE5HX0hDSV9FVkVOVF9JTlFVSVJZX1JFU1VM
VCk7CisKKwlpZiAoYnRfZGV2ZmlsdGVyKHMsICZmLCBOVUxMKSA8IDApIHsKKwkJYnRfZGV2Y2xv
c2Uocyk7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qIEFsd2F5cyB1c2UgR0lBQyBMQVAgKi8K
KwljcC0+bGFwWzBdID0gMHgzMzsKKwljcC0+bGFwWzFdID0gMHg4YjsKKwljcC0+bGFwWzJdID0g
MHg5ZTsKKworCS8qIENhbGN1bGF0ZSBpbnF1aXJlIGxlbmd0aCBpbiAxLjI4IHNlY29uZCB1bml0
cyAqLworCXRvID0gKHRpbWVfdCkgKChkb3VibGUpIGxlbmd0aCAvIDEuMjgpOworCWlmICh0byA8
PSAwKQorCQljcC0+aW5xdWlyeV9sZW5ndGggPSA0OwkJLyogNS4xMiBzZWNvbmRzICovCisJZWxz
ZSBpZiAodG8gPiAyNTQpCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IDI1NTsJLyogMzI2LjQwIHNl
Y29uZHMgKi8KKwllbHNlCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IHRvICsgMTsKKworCXRvID0g
KHRpbWVfdCkoKGRvdWJsZSkgY3AtPmlucXVpcnlfbGVuZ3RoICogMS4yOCkgKyAxOworCisJaWYg
KG51bV9yc3AgPD0gMCB8fCBudW1fcnNwID4gMjU1KQorCQludW1fcnNwID0gODsKKwljcC0+bnVt
X3Jlc3BvbnNlcyA9ICh1aW50OF90KSBudW1fcnNwOworCisJaSA9ICppaSA9IGNhbGxvYyhudW1f
cnNwLCBzaXplb2Yoc3RydWN0IGJ0X2RldmlucXVpcnkpKTsKKwlpZiAoaSA9PSBOVUxMKSB7CisJ
CWJ0X2RldmNsb3NlKHMpOworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQor
CisJaWYgKGJ0X2RldnNlbmQocywKKwkJTkdfSENJX09QQ09ERShOR19IQ0lfT0dGX0xJTktfQ09O
VFJPTCwgTkdfSENJX09DRl9JTlFVSVJZKSwKKwkJCWNwLCBzaXplb2YoKmNwKSkgPCAwKSB7CisJ
CWZyZWUoaSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKK3dhaXRf
Zm9yX21vcmU6CisKKwluID0gYnRfZGV2cmVjdihzLCBidWYsIHNpemVvZihidWYpLCB0byk7CisJ
aWYgKG4gPCAwKSB7CisJCWZyZWUoaSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0x
KTsKKwl9CisKKwlpZiAobiA8IHNpemVvZihuZ19oY2lfZXZlbnRfcGt0X3QpKSB7CisJCWZyZWUo
aSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQllcnJubyA9IEVJTzsKKwkJcmV0dXJuICgtMSk7CisJ
fQorCisJc3dpdGNoIChlLT5ldmVudCkgeworCWNhc2UgTkdfSENJX0VWRU5UX0lOUVVJUllfQ09N
UEw6CisJCWJyZWFrOworCisJY2FzZSBOR19IQ0lfRVZFTlRfSU5RVUlSWV9SRVNVTFQ6CisJCWly
ID0gKG5nX2hjaV9pbnF1aXJ5X3Jlc3BvbnNlICopKGVwICsgMSk7CisKKwkJZm9yIChuID0gMDsg
biA8IE1JTihlcC0+bnVtX3Jlc3BvbnNlcywgbnVtX3JzcCk7IG4gKyspIHsKKwkJCWJkYWRkcl9j
b3B5KCZpLT5iZGFkZHIsICZpci0+YmRhZGRyKTsKKwkJCWktPnBzY2FuX3JlcF9tb2RlID0gaXIt
PnBhZ2Vfc2Nhbl9yZXBfbW9kZTsKKwkJCWktPnBzY2FuX3BlcmlvZF9tb2RlID0gaXItPnBhZ2Vf
c2Nhbl9wZXJpb2RfbW9kZTsKKwkJCW1lbWNweShpLT5kZXZfY2xhc3MsIGlyLT51Y2xhc3MsIHNp
emVvZihpLT5kZXZfY2xhc3MpKTsKKwkJCWktPmNsb2NrX29mZnNldCA9IGxlMTZ0b2goaXItPmNs
b2NrX29mZnNldCk7CisKKwkJCWlyICsrOworCQkJaSArKzsKKwkJCW51bV9yc3AgLS07CisJCX0K
KwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWRlZmF1bHQ6CisJCWdvdG8gd2FpdF9mb3JfbW9yZTsK
KwkJLyogTk9UIFJFQUNIRUQgKi8KKwl9CisKKwlidF9kZXZjbG9zZShzKTsKKwkJCisJcmV0dXJu
IChpIC0gKmlpKTsKK30KKworaW50CiBidF9kZXZpbmZvKHN0cnVjdCBidF9kZXZpbmZvICpkaSkK
IHsKIAl1bmlvbiB7CkBAIC01Myw2ICs1NDMsNyBAQAogCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNp
X3Jhd19ub2RlX2RlYnVnCQlyODsKIAl9CQkJCQkJcnA7CiAJc3RydWN0IHNvY2thZGRyX2hjaQkJ
CQloYTsKKwlzb2NrbGVuX3QJCQkJCWhhbGVuOwogCWludAkJCQkJCXMsIHJ2YWw7CiAKIAlpZiAo
ZGkgPT0gTlVMTCkgewpAQCAtNjAsMjcgKzU1MSwxNCBAQAogCQlyZXR1cm4gKC0xKTsKIAl9CiAK
LQltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKLQloYS5oY2lfbGVuID0gc2l6ZW9mKGhhKTsK
LQloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwotCi0JaWYgKGJ0X2F0b24oZGktPmRldm5h
bWUsICZycC5yMS5iZGFkZHIpKSB7Ci0JCWlmICghYnRfZGV2bmFtZShoYS5oY2lfbm9kZSwgJnJw
LnIxLmJkYWRkcikpCi0JCQlyZXR1cm4gKC0xKTsKLQl9IGVsc2UgaWYgKGJ0X2RldjJub2RlKGRp
LT5kZXZuYW1lLCBoYS5oY2lfbm9kZSwKLQkJCQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVM
TCkgewotCQllcnJubyA9IEVOWElPOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlzID0gc29ja2V0
KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9QUk9UT19IQ0kpOworCXMgPSBidF9k
ZXZvcGVuKGRpLT5kZXZuYW1lKTsKIAlpZiAocyA8IDApCiAJCXJldHVybiAoLTEpOwogCiAJcnZh
bCA9IC0xOwogCi0JaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZiho
YSkpIDwgMCB8fAotCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBzaXpl
b2YoaGEpKSA8IDApCisJaGFsZW4gPSBzaXplb2YoaGEpOworCWlmIChnZXRzb2NrbmFtZShzLCAo
c3RydWN0IHNvY2thZGRyICopICZoYSwgJmhhbGVuKSA8IDApCiAJCWdvdG8gYmFkOwogCXN0cmxj
cHkoZGktPmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKIApAQCAt
MTM4LDcgKzYxNiw3IEBACiAKIAlydmFsID0gMDsKIGJhZDoKLQljbG9zZShzKTsKKwlidF9kZXZj
bG9zZShzKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0yMDUsNiArNjgzLDEzIEBACiAJcmV0
dXJuIChjb3VudCk7CiB9CiAKK3N0YXRpYyBpbnQKK2J0X2RldmFueV9jYihpbnQgcywgc3RydWN0
IGJ0X2RldmluZm8gY29uc3QgKmRpLCB2b2lkICp4ZGV2bmFtZSkKK3sKKwlzdHJsY3B5KChjaGFy
ICopIHhkZXZuYW1lLCBkaS0+ZGV2bmFtZSwgSENJX0RFVk5BTUVfU0laRSk7CisJcmV0dXJuICgx
KTsKK30KKwogc3RhdGljIGNoYXIgKgogYnRfZGV2Mm5vZGUoY2hhciBjb25zdCAqZGV2bmFtZSwg
Y2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKIHsKSW5kZXg6IGJsdWV0b290aC4zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJsdWV0b290aC4zCShyZXZpc2lvbiAxOTEzNjMpCisrKyBibHVldG9vdGguMwkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogLlwiICRJZDogYmx1ZXRvb3RoLjMsdiAxLjUg
MjAwMy8wNS8yMCAyMzowNDozMCBtYXggRXhwICQKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEZl
YnJ1YXJ5IDEzLCAyMDA5CisuRGQgQXByaWwgOSwgMjAwOQogLkR0IEJMVUVUT09USCAzCiAuT3MK
IC5TaCBOQU1FCkBAIC00MSw2ICs0MSwyMyBAQAogLk5tIGJ0X2VuZHByb3RvZW50ICwKIC5ObSBi
dF9hdG9uICwKIC5ObSBidF9udG9hICwKKy5ObSBidF9kZXZhZGRyICwKKy5ObSBidF9kZXZuYW1l
ICwKKy5ObSBidF9kZXZpbmZvICwKKy5ObSBidF9kZXZlbnVtICwKKy5ObSBidF9kZXZvcGVuICwK
Ky5ObSBidF9kZXZjbG9zZSAsCisuTm0gYnRfZGV2c2VuZCAsCisuTm0gYnRfZGV2cmVjdiAsCisu
Tm0gYnRfZGV2cmVxICwKKy5ObSBidF9kZXZmaWx0ZXIgLAorLk5tIGJ0X2RldmZpbHRlcl9wa3Rf
c2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfcGt0X2NsciAsCisuTm0gYnRfZGV2ZmlsdGVyX3BrdF90
c3QgLAorLk5tIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfZXZ0X2Ns
ciAsCisuTm0gYnRfZGV2ZmlsdGVyX2V2dF90c3QgLAorLk5tIGJ0X2RldmlucXVpcnkgLAogLk5t
IGJkYWRkcl9zYW1lICwKIC5ObSBiZGFkZHJfYW55ICwKIC5ObSBiZGFkZHJfY29weQpAQCAtODQs
NiArMTAxLDMyIEBACiAuRnQgaW50CiAuRm4gYnRfZGV2ZW51bSAiYnRfZGV2ZW51bV9jYl90ICpj
YiIgInZvaWQgKmFyZyIKIC5GdCBpbnQKKy5GbiBidF9kZXZvcGVuICJjaGFyIGNvbnN0ICpkZXZu
YW1lIgorLkZ0IGludAorLkZuIGJ0X2RldmNsb3NlICJpbnQgcyIKKy5GdCBpbnQKKy5GbiBidF9k
ZXZzZW5kICJpbnQgcyIgInVpbnQxNl90IG9wY29kZSIgInZvaWQgKnBhcmFtIiAic2l6ZV90IHBs
ZW4iCisuRnQgc3NpemVfdAorLkZuIGJ0X2RldnJlY3YgImludCBzIiAidm9pZCAqYnVmIiAic2l6
ZV90IHNpemUiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4gYnRfZGV2cmVxICJpbnQgcyIgInN0
cnVjdCBidF9kZXZyZXEgKnIiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4gYnRfZGV2ZmlsdGVy
ICJpbnQgcyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKm5ldyIgInN0cnVjdCBidF9kZXZm
aWx0ZXIgKm9sZCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgInN0cnVjdCBi
dF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlwZSIKKy5GdCB2b2lkCisuRm4gYnRfZGV2
ZmlsdGVyX3BrdF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlw
ZSIKKy5GdCBpbnQKKy5GbiBidF9kZXZmaWx0ZXJfcGt0X3RzdCAic3RydWN0IGJ0X2RldmZpbHRl
ciBjb25zdCAqZmlsdGVyIiAidWludDhfdCB0eXBlIgorLkZ0IHZvaWQKKy5GbiBidF9kZXZmaWx0
ZXJfZXZ0X3NldCAic3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyIiAidWludDhfdCBldmVudCIK
Ky5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIg
KmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50CisuRm4gYnRfZGV2ZmlsdGVyX2V2dF90
c3QgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisu
RnQgaW50CisuRm4gYnRfZGV2aW5xdWlyeSAiY2hhciBjb25zdCAqZGV2bmFtZSIgInRpbWVfdCBs
ZW5ndGgiICJpbnQgbnVtX3JzcCIgInN0cnVjdCBidF9kZXZpbnF1aXJ5ICoqaWkiCisuRnQgaW50
CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAiY29uc3QgYmRhZGRyX3QgKmIi
CiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRyX3QgKmEiCkBAIC0zMTEsNiAr
MzU0LDI0MCBAQAogb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAuUHAKIFRoZQorLkZuIGJ0
X2Rldm9wZW4KK2Z1bmN0aW9uIG9wZW5zIGEgQmx1ZXRvb3RoIGRldmljZSB3aXRoIHRoZSBnaXZl
bgorLkZhIGRldm5hbWUKK2FuZCByZXR1cm5zIGEgY29ubmVjdGVkIGFuZCBib3VuZAorLkR2IEhD
SQorc29ja2V0IGhhbmRsZS4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGFuIGVycm9yIGhh
cyBvY2N1cnJlZC4KKy5QcAorVGhlCisuRm4gYnRfZGV2Y2xvc2UKK2Nsb3NlcyB0aGUgcGFzc2Vk
CisuRHYgSENJCitzb2NrZXQgaGFuZGxlCisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdp
dGgKKy5YciBidF9kZXZvcGVuIDMgLgorLlBwCitUaGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlv
biBzZW5kcyBhIEJsdWV0b290aAorLkR2IEhDSQorY29tbWFuZCB3aXRoIHRoZSBnaXZlbgorLkZh
IG9wY29kZQordG8gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRh
aW5lZCB3aXRoCisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZQorLkZhIG9wY29kZQorcGFyYW1ldGVy
IGlzIGV4cHBlY3RlZCB0byBiZSBpbiB0aGUgaG9zdCBieXRlIG9yZGVyLgorVGhlCisuRmEgcGFy
YW0KK2FuZAorLkZhIHBsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBjb21tYW5kIHBhcmFtZXRlcnMu
CitUaGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgdGhlCisuRHYg
SENJCitmaWx0ZXIgb24gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLgorVGhlIGZ1bmN0aW9u
IHJldHVybnMgMCBvbiBzdWNjZXNzLAorb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAK
K1RoZQorLkZuIGJ0X2RldnJlY3YKK2Z1bmN0aW9uIHJlY2VpdmVzIG9uZSBCbHVldG9vdGgKKy5E
diBIQ0kKK3BhY2tldCBmcm9tIHRoZSBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWlu
ZWQgd2l0aAorLlhyIGJ0X2Rldm9wZW4gMyAuCitUaGUgcGFja2V0IGlzIHBsYWNlZCBpbnRvIHRo
ZSBwcm92aWRlZCBidWZmZXIKKy5GYSBidWYKK29mIHNpemUKKy5GYSBzaXplIC4KK1RoZQorLkZh
IHRvCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHJlY2VpdmUgdGltZW91dCBpbiBzZWNvbmRzLgorSW5m
aW5pdGUgdGltZW91dCBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhc3NpbmcgbmVnYXRpdmUgdmFsdWUg
aW4gdGhlCisuRmEgdG8KK3BhcmFtZXRlci4KK1RoZQorLkZuIGJ0X2RldnJlY3YKK2Z1bmN0aW9u
IGRvZXMgbm90IG1vZGlmeSB0aGUKKy5EdiBIQ0kKK2ZpbHRlciBvbiB0aGUgcHJvdmlkZWQgc29j
a2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0b3RhbCBudW1iZXIgb2YgYnl0ZXMg
cmVjZXZpZWQsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAorVGhlCisuRm4gYnRf
ZGV2cmVxCitmdW5jdGlvbiBtYWtlcyBhIEJsdWV0b290aAorLkR2IEhDSQorcmVxdWVzdCB0byB0
aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5YciBidF9kZXZv
cGVuIDMgLgorVGhlIGZ1bmN0aW9uIHdpbGwgc2VuZCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgYW5k
IHdpbGwgd2FpdCBmb3IgdGhlIHNwZWNpZmllZAorZXZlbnQsCitvciB0aW1lb3V0CisuRmEgdG8K
K3NlY29uZHMgdG8gb2NjdXIuCitUaGUKKy5WdCBidF9kZXZyZXEKK3N0cnVjdHVyZSBpcyBkZWZp
bmVkIGFzIGZvbGxvd3MKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAorc3RydWN0IGJ0X2Rl
dnJlcQoreworICAgICAgICB1aW50MTZfdCAgICAgICAgb3Bjb2RlOworICAgICAgICB1aW50OF90
ICAgICAgICAgZXZlbnQ7CisgICAgICAgIHZvaWQgICAgICAgICAgICAqY3BhcmFtOworICAgICAg
ICBzaXplX3QgICAgICAgICAgY2xlbjsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpycGFyYW07
CisgICAgICAgIHNpemVfdCAgICAgICAgICBybGVuOworfTsKKy5FZAorLlBwCitUaGUKKy5GYSBv
cGNvZGUKK2ZpZWxkIHNwZWNpZmllcyB0aGUgY29tbWFuZCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUg
aW4gdGhlIGhvc3QgYnl0ZSBvcmRlci4KK1RoZQorLkZhIGNwYXJhbQorYW5kCisuRmEgY2xlbgor
ZmllbGRzIHNwZWNpZnkgY29tbWFuZCBwYXJhbWV0ZXJzIGRhdGEgYW5kIGNvbW1hbmQgcGFyYW1l
dGVycyBkYXRhIHNpemUKK3Jlc3BlY3RpdmVseS4KK1RoZQorLkZhIGV2ZW50CitmaWVsZCBzcGVj
aWZpZXMgd2hpY2ggQmx1ZXRvb3RoCisuRHYgSENJCitldmVudCBJRCB0aGUgZnVuY3Rpb24gc2hv
dWxkIHdhaXQgZm9yLCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorVGhlCisu
RHYgSENJCitDb21tYW5kIENvbXBsZXRlIGFuZCBDb21tYW5kIFN0YXR1cyBldmVudHMgYXJlIGVu
YWJsZWQgYnkgZGVmYXVsdC4KK1RoZQorLkZhIHJwYXJhbQorYW5kCisuRmEgcmxlbgorcGFyYW1l
dGVycyBzcGVjaWZ5IGJ1ZmZlciBhbmQgYnVmZmVyIHNpemUgcmVzcGVjdGl2ZWx5IHdoZXJlIHJl
dHVybgorcGFyYW1ldGVycyBzaG91bGQgYmUgcGxhY2VkLgorVGhlCisuRm4gYnRfZGV2cmVxCitm
dW5jdGlvbiB0ZW1wb3JhcmlseSBtb2RpZmllcyBmaWx0ZXIgb24gdGhlIHByb3ZpZGVkCisuRHYg
SENJCitzb2NrZXQKKy5GYSBzIC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vzcywg
b3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAKK1RoZQorLkZuIGJ0X2RldmZpbHRlcgor
Y29udHJvbHMgdGhlIGxvY2FsCisuRHYgSENJCitmaWx0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBz
b2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0aAorLlhyIGJ0X2Rldm9wZW4g
MyAuCitGaWx0ZXJpbmcgY2FuIGJlIGRvbmUgb24gcGFja2V0IHR5cGVzLCBpLmUuCisuRHYgQUNM
ICwKKy5EdiBTQ08gb3IKKy5EdiBIQ0kgLAorY29tbWFuZCBhbmQgZXZlbnQgcGFja2V0cywgYW5k
LCBpbiBhZGRpdGlvbiwgb24KKy5EdiBIQ0kKK2V2ZW50IElEcy4KK0JlZm9yZSBhcHBseWluZyB0
aGUKKy5GYSBuZXcKK2ZpbHRlciAoaWYgcHJvdmlkZWQpIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0
byBvYnRhaW4gdGhlIGN1cnJlbnQgZmlsdGVyCitmcm9tIHRoZSBzb2NrZXQKKy5GYSBzCithbmQg
cGxhY2UgaXQgaW50byB0aGUKKy5GYSBvbGQKK3BhcmFtZXRlciAoaWYgcHJvdmlkZWQpLgorVGhl
IGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJl
ZC4KKy5QcAorVGhlCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgLAorLkZuIGJ0X2RldmZpbHRl
cl9wa3RfY2xyIAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF90c3QKK2Z1bmN0aW9ucyBjYW4g
YmUgdXNlZCB0byBtb2RpZnkgYW5kIHRlc3QgdGhlCisuRHYgSENJCitmaWx0ZXIKKy5GYSBmaWx0
ZXIgLgorVGhlCisuRmEgdHlwZQorcGFyYW1ldGVyIHNwZWNpZmllcworLkR2IEhDSQorcGFja2V0
IHR5cGUuCisuUHAKK1RoZQorLkZuIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5GbiBidF9kZXZm
aWx0ZXJfZXZ0X2NsciAKK2FuZAorLkZuIGJ0X2RldmZpbHRlcl9ldnRfdHN0CitmdW5jdGlvbnMg
Y2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGFuZCB0ZXN0IHRoZQorLkR2IEhDSQorZXZlbnQgZmlsdGVy
CisuRmEgZmlsdGVyIC4KK1RoZQorLkZhIGV2ZW50CitwYXJhbWV0ZXIgc3BlY2lmaWVzCisuRHYg
SENJCitldmVudCBJRC4KKy5QcAorVGhlCisuRm4gYnRfZGV2aW5xdWlyeQorZnVuY3Rpb24gcGVy
Zm9ybXMgQmx1ZXRvb3RoIGlucXVpcnkuCitUaGUKKy5GYSBkZXZuYW1lCitwYXJhbWV0ZXIgc3Bl
Y2lmaWVzIHdoaWNoIGxvY2FsIEJsdWV0b290aCBkZXZpY2Ugc2hvdWxkIHBlcmZvcm0gYW4gaW5x
dWlyeS4KK0lmIG5vdCBzZWNpZmllZCwgaS5lLgorLkR2IE5VTEwgLAordGhlbiBmaXJzdCBhdmFp
bGFibGUgZGV2aWNlIHdpbGwgYmUgdXNlZC4KK1RoZQorLkZhIGxlbmd0aAorcGFyYW1ldGVycyBz
cGVjaWZpZXMgdGhlIHRvdGFsIGxlbmd0aCBvZiBhbiBpbnF1aXJ5IGluIHNlY29uZHMuCitJZiBu
b3Qgc3BlY2lmaWVkLCBpLmUuIDAsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgorVGhlCisu
RmEgbnVtX3JzcAorcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlc3BvbnNlcyB0
aGF0IGNhbiBiZSByZWNlaXZlZCBiZWZvcmUKK3RoZSBpbnF1aXJ5IGlzIGhhbHRlZC4KK0lmIG5v
dCBzcGVjaWZpZWQsIGkuZS4gMCwgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCitUaGUKKy5G
YSBpaQorcGFyYW1ldGVyIHNwZWNpZmllcyB3aGVyZSB0byBwbGFjZSBpbnF1aXJ5IHJlc3VsdHMu
CitPbiBzdWNjZXNzLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdG90YWwgbnVtYmVyIG9mIGlu
cXVpcnkgcmVzdWx0cywKK3dpbGwgYWxsb2NhdGUsCit1c2luZworLlhyIGNhbGxvYyAzICwKK2J1
ZmZlciB0byBzdG9yZSBhbGwgdGhlIGlucXVpcnkgcmVzdWx0cyBhbmQKK3dpbGwgcmV0dXJuIHBv
aW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIgaW4gdGhlCisuRmEgaWkKK3BhcmFtZXRlci4K
K0l0IGlzIHVwIHRvIHRoZSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIHRvIGRpc3Bvc2Ugb2YgdGhl
IGJ1ZmZlciB1c2luZworLlhyIGZyZWUgMworY2FsbC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIC0x
IGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KK1RoZQorLlZ0IGJ0X2RldmlucXVpcnkKK3N0cnVj
dHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3MKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAor
c3RydWN0IGJ0X2RldmlucXVpcnkgeworICAgICAgICBiZGFkZHJfdCAgICAgICAgYmRhZGRyOwor
ICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5fcmVwX21vZGU7CisgICAgICAgIHVpbnQ4X3Qg
ICAgICAgICBwc2Nhbl9wZXJpb2RfbW9kZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgIGRldl9j
bGFzc1szXTsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGNsb2NrX29mZnNldDsKKyAgICAgICAg
aW50OF90ICAgICAgICAgIHJzc2k7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBkYXRhWzI0MF07
Cit9OworLkVkCisuUHAKK1RoZQogLkZuIGJkYWRkcl9zYW1lICwKIC5GbiBiZGFkZHJfYW55CiBh
bmQKQEAgLTQ0NCw2ICs3MjEsNiBAQAogLlNoIEFVVEhPUlMKIC5BbiBNYWtzaW0gWWV2bWVua2lu
IEFxIG1fZXZtZW5raW5AeWFob28uY29tCiAuU2ggQlVHUwotVGhlc2UgZnVuY3Rpb25zIHVzZSBz
dGF0aWMgZGF0YSBzdG9yYWdlOworU29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgdXNlIHN0YXRpYyBk
YXRhIHN0b3JhZ2U7CiBpZiB0aGUgZGF0YSBpcyBuZWVkZWQgZm9yIGZ1dHVyZSB1c2UsIGl0IHNo
b3VsZCBiZQogY29waWVkIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBjYWxscyBvdmVyd3JpdGUgaXQu
CkluZGV4OiBibHVldG9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBibHVldG9vdGguaAkocmV2aXNpb24g
MTkxMzYzKQorKysgYmx1ZXRvb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAK
ICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVk
ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDxzeXMvdW4u
aD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CkBAIC00Niw2ICs0Nyw3
IEBACiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfaGNpLmg+CiAjaW5j
bHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfbDJjYXAuaD4KICNpbmNsdWRlIDxu
ZXRncmFwaC9ibHVldG9vdGgvaW5jbHVkZS9uZ19idHNvY2tldC5oPgorI2luY2x1ZGUgPHRpbWUu
aD4KIAogX19CRUdJTl9ERUNMUwogCkBAIC0xMjksOCArMTMxLDQ4IEBACiAJdWludDhfdAkJX3Bh
ZGRpbmdbMjBdOwkvKiBsZWF2ZSBzcGFjZSBmb3IgZnV0dXJlIGFkZGl0aW9ucyAqLwogfTsKIAor
c3RydWN0IGJ0X2RldnJlcQoreworCXVpbnQxNl90CW9wY29kZTsKKwl1aW50OF90CQlldmVudDsK
Kwl2b2lkCQkqY3BhcmFtOworCXNpemVfdAkJY2xlbjsKKwl2b2lkCQkqcnBhcmFtOworCXNpemVf
dAkJcmxlbjsKK307CisKK3N0cnVjdCBidF9kZXZmaWx0ZXIgeworCWJpdHN0cl90CWJpdF9kZWNs
KHBhY2tldF9tYXNrLCA4KTsKKwliaXRzdHJfdAliaXRfZGVjbChldmVudF9tYXNrLCAyNTYpOwor
fTsKKworc3RydWN0IGJ0X2RldmlucXVpcnkgeworCWJkYWRkcl90ICAgICAgICBiZGFkZHI7CisJ
dWludDhfdCAgICAgICAgIHBzY2FuX3JlcF9tb2RlOworCXVpbnQ4X3QgICAgICAgICBwc2Nhbl9w
ZXJpb2RfbW9kZTsKKwl1aW50OF90ICAgICAgICAgZGV2X2NsYXNzWzNdOworCXVpbnQxNl90ICAg
ICAgICBjbG9ja19vZmZzZXQ7CisJaW50OF90ICAgICAgICAgIHJzc2k7CisJdWludDhfdCAgICAg
ICAgIGRhdGFbMjQwXTsKK307CisKIHR5cGVkZWYgaW50CShidF9kZXZlbnVtX2NiX3QpKGludCwg
c3RydWN0IGJ0X2RldmluZm8gY29uc3QgKiwgdm9pZCAqKTsKIAoraW50CQlidF9kZXZvcGVuIChj
aGFyIGNvbnN0ICpkZXZuYW1lKTsKK2ludAkJYnRfZGV2Y2xvc2UoaW50IHMpOworaW50CQlidF9k
ZXZzZW5kIChpbnQgcywgdWludDE2X3Qgb3Bjb2RlLCB2b2lkICpwYXJhbSwgc2l6ZV90IHBsZW4p
Oworc3NpemVfdAkJYnRfZGV2cmVjdiAoaW50IHMsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHRp
bWVfdCB0byk7CitpbnQJCWJ0X2RldnJlcSAgKGludCBzLCBzdHJ1Y3QgYnRfZGV2cmVxICpyLCB0
aW1lX3QgdG8pOworaW50CQlidF9kZXZmaWx0ZXIoaW50IHMsIHN0cnVjdCBidF9kZXZmaWx0ZXIg
Y29uc3QgKm5ldywKKwkJCSAgICAgc3RydWN0IGJ0X2RldmZpbHRlciAqb2xkKTsKK3ZvaWQJCWJ0
X2RldmZpbHRlcl9wa3Rfc2V0KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCB0
eXBlKTsKK3ZvaWQJCWJ0X2RldmZpbHRlcl9wa3RfY2xyKHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZp
bHRlciwgdWludDhfdCB0eXBlKTsKK2ludAkJYnRfZGV2ZmlsdGVyX3BrdF90c3Qoc3RydWN0IGJ0
X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IHR5cGUpOwordm9pZAkJYnRfZGV2Zmls
dGVyX2V2dF9zZXQoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IGV2ZW50KTsK
K3ZvaWQJCWJ0X2RldmZpbHRlcl9ldnRfY2xyKHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwg
dWludDhfdCBldmVudCk7CitpbnQJCWJ0X2RldmZpbHRlcl9ldnRfdHN0KHN0cnVjdCBidF9kZXZm
aWx0ZXIgY29uc3QgKmZpbHRlciwgdWludDhfdCBldmVudCk7CitpbnQJCWJ0X2RldmlucXVpcnko
Y2hhciBjb25zdCAqZGV2bmFtZSwgdGltZV90IGxlbmd0aCwgaW50IG51bV9yc3AsCisJCQkgICAg
ICBzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKTsKIGludAkJYnRfZGV2aW5mbyAoc3RydWN0IGJ0
X2RldmluZm8gKmRpKTsKIGludAkJYnRfZGV2ZW51bSAoYnRfZGV2ZW51bV9jYl90ICpjYiwgdm9p
ZCAqYXJnKTsKIApJbmRleDogTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFrZWZpbGUJKHJldmlz
aW9uIDE5MTM2MykKKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxOSBA
QAogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5mby4zCiBNTElOS1MrPQlibHVldG9vdGgu
MyBidF9kZXZlbnVtLjMKIAorTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2b3Blbi4zCitNTElO
S1MrPQlibHVldG9vdGguMyBidF9kZXZjbG9zZS4zCitNTElOS1MrPQlibHVldG9vdGguMyBidF9k
ZXZzZW5kLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldnJlcS4zCitNTElOS1MrPQlibHVl
dG9vdGguMyBidF9kZXZmaWx0ZXIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVy
X3BrdF9zZXQuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX3BrdF9jbHIuMwor
TUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX3BrdF90c3QuMworTUxJTktTKz0JYmx1
ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2dF9zZXQuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRf
ZGV2ZmlsdGVyX2V2dF9jbHIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2
dF90c3QuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5xdWlyeS4zCisKIE1MSU5LUys9
CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9h
bnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRhZGRyX2NvcHkuMwo=
--0016363104f536d91f04681952b1--



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