Return-Path: Message-ID: From: Claudio Takahasi To: bluez-devel@lists.sourceforge.net Subject: Re: [Bluez-devel] hcid D-Bus patch In-Reply-To: <1127411650.12287.15.camel@blade> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_13592_30875326.1127485701071" References: <1127292701.495.11.camel@localhost.localdomain> <1127398647.5344.24.camel@blade> <1127411650.12287.15.camel@blade> Sender: bluez-devel-admin@lists.sourceforge.net Errors-To: bluez-devel-admin@lists.sourceforge.net Reply-To: bluez-devel@lists.sourceforge.net List-Unsubscribe: , List-Id: BlueZ development List-Post: List-Help: List-Subscribe: , List-Archive: Date: Fri, 23 Sep 2005 11:28:21 -0300 ------=_Part_13592_30875326.1127485701071 Content-Type: multipart/alternative; boundary="----=_Part_13593_2327099.1127485701071" ------=_Part_13593_2327099.1127485701071 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks, This patch implements inquiry, periodic inquiry, role switch and cancel periodic inquiry. Suggestions and comments are welcome! Regards, Claudio >>> Next action 1. move shared codes to common directory 2. fix the error code format for EFailed messages 3. handle multiple devices 4. develop other services >>> Configuration file location: /etc/dbus-1/system.d/hcid.conf The D-Bus configuration file is required for security policies. >>> How test This is the easiest way to test the hcid D-Bus services. Another option is develop a "c" client or a python client. //Sending Get Device Request $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.GetDevReq //Sending Inquiry Request 1o. param: length 2o. param: num response 3o. param: flags (0 or 1) $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.InquiryReq byte:4 byte:10 uint16:0 comment: We have develop a client to extract the reply message arguments //Sending Periodic Inquiry Request 1o. param: length 2o. param: min period 3o. param: max period $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.PeriodicInquiryReq byte:4 byte:27 byte:49 //Sending Cancel Periodic Inquiry Request $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.CancelPeriodicInqReq //Sending Role Switch Request 1o. param: Remote device 2o. param: Role $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:1 $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:0 ------=_Part_13593_2327099.1127485701071 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks,

This patch implements inquiry, periodic inquiry, role switch and cancel periodic inquiry.

Suggestions and comments are welcome!

Regards,
Claudio


>>> Next action
1. move shared codes to common directory
2. fix the error code format for EFailed messages
3. handle multiple devices
4. develop other services

>>> Configuration file
location: /etc/dbus-1/system.d/hcid.conf
The D-Bus configuration file is required for security policies.

>>> How test
This is the easiest way to test the hcid D-Bus services. Another option is = develop a "c" client
or a python client.

//Sending Get Device Request
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.GetDevReq

//Sending Inquiry Request
1o. param: length
2o. param: num response
3o. param: flags (0 or 1)
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.InquiryReq byte:4 byte:10 uint16:0
comment: We have develop a client to extract the reply message arguments
//Sending Periodic Inquiry Request
1o. param: length
2o. param: min period
3o. param: max period
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.PeriodicInquiryReq byte:4 byte:27 byte:49

//Sending Cancel Periodic Inquiry Request
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci = org.bluez.hci.CancelPeriodicInqReq

//Sending Role Switch Request
1o. param: Remote device
2o. param: Role
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:1
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/hci org.bluez.hci.RoleSwitchReq string:00:20:E0:78:7F:7F byte:0

------=_Part_13593_2327099.1127485701071-- ------=_Part_13592_30875326.1127485701071 Content-Type: application/octet-stream; name="hcid.conf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hcid.conf" PCEtLSBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHNlY3Vy aXR5IHBvbGljaWVzCiAgICAgZm9yIGJsdWV6LWhjaWQgdG8gd29yay4gLS0+Cgo8IURPQ1RZUEUg YnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJh dGlvbiAxLjAvL0VOIgogImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVz LzEuMC9idXNjb25maWcuZHRkIj4KPGJ1c2NvbmZpZz4KCiAgPCEtLSAuLi9zeXN0ZW0uY29uZiBo YXZlIGRlbmllZCBldmVyeXRoaW5nLCBzbyB3ZSBqdXN0IHB1bmNoIHNvbWUgaG9sZXMgLS0+Cgog IDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CiAgICA8YWxsb3cgb3duPSJvcmcuYmx1ZXoiLz4K CiAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmJsdWV6LmhjaSIvPgogICAgPGFsbG93 IHJlY2VpdmVfc2VuZGVyPSJvcmcuYmx1ZXouaGNpIi8+CgogICAgPGFsbG93IHNlbmRfcGF0aD0i L29yZy9ibHVlei9oY2kiLz4KICA8L3BvbGljeT4KCjwvYnVzY29uZmlnPgo= ------=_Part_13592_30875326.1127485701071 Content-Type: application/octet-stream; name="hcid_dbus_0007.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hcid_dbus_0007.patch" LS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvZGJ1cy5oCTE5NjktMTItMzEgMjE6MDA6MDAu MDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC1kYnVzL2hjaWQvZGJ1cy5o CTIwMDUtMDktMjMgMTA6MDg6MTYuMDAwMDAwMDAwIC0wMzAwCkBAIC0wLDAgKzEsMTUzIEBACisv KgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKKyAq CisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgIFF1YWxjb21tIEluY29ycG9yYXRlZAorICog IENvcHlyaWdodCAoQykgMjAwMi0yMDAzICBNYXhpbSBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29t bS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgIE1hcmNlbCBIb2x0bWFubiA8bWFy Y2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK KyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiAg VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MKKyAqICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqICBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJ R0hUUy4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQg QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElO RElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCisgKiAgV0hB VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU SEVSIElOIEFOIAorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBU T1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICogIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogIEFMTCBM SUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFU RU5UUywgCisgKiAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFU SU5HIFRPIFVTRSBPRiBUSElTIAorICogIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisgKgorICoK KyAqICAkSWQ6IGRidXMuaCx2IDAuMSAyMDA1LzA5LzE2IDA4OjAwOjAwIGhvbHRtYW5uIEV4cCAk CisgKi8KKyAKKyNpZm5kZWYgX19IX0JMVUVaX0RCVVNfSF9fCisjZGVmaW5lIF9fSF9CTFVFWl9E QlVTX0hfXworCisjZGVmaW5lIF9fRU5EX1NJR19fIERCVVNfVFlQRV9JTlZBTElEX0FTX1NUUklO RworCisvKiBibHVldG9vdGhkIEJ1cyBuYW1lICovCisjZGVmaW5lIEJMVUVaX0RCVVNfTkFNRQkJ Im9yZy5ibHVleiIKKworCisvKiA9PT09PSBIQ0kgZGVmaW5pdGlvbnMgPT09PT0gKi8KKyNkZWZp bmUgQkxVRVpfREJVU19IQ0lfUEFUSAkJIi9vcmcvYmx1ZXovaGNpIgorI2RlZmluZSBCTFVFWl9E QlVTX0hDSV9JTlRFUkZBQ0UJQkxVRVpfREJVU19OQU1FIi5oY2kiCisKKy8vSENJIHNpZ25hbHMK KyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9TVEFSVAkJIklucXVpcnlTdGFydFNpZyIK KyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9DT01QTEVURQkJIklucXVpcnlDb21wbGV0 ZVNpZyIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9SRVNVTFQJCSJJbnF1aXJ5UmVz dWx0U2lnIgorI2RlZmluZSBCTFVFWl9EQlVTX0hDSV9TSUdfUkVNT1RFX05BTUUJCSJSZW1vdGVO YW1lU2lnIgorCisvL0hDSSBQcm92aWRlZCBzZXJ2aWNlcworI2RlZmluZSBIQ0lfR0VUX0RFVklD RVNfUkVRCQkJIkdldERldlJlcSIKKyNkZWZpbmUgSENJX1BFUklPRElDX0lOUV9SRVEJCQkiUGVy aW9kaWNJbnFSZXEiCisjZGVmaW5lIEhDSV9DQU5DRUxfUEVSSU9ESUNfSU5RX1JFUQkJIkNhbmNl bFBlcmlvZGljSW5xUmVxIgorI2RlZmluZSBIQ0lfSU5RX1JFUQkJCQkiSW5xdWlyeVJlcSIKKyNk ZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUQkJCSJSb2xlU3dpdGNoUmVxIgorCisvL0hDSSBzaWdu YXR1cmVzCisjZGVmaW5lIEhDSV9HRVRfREVWSUNFU19SRVFfU0lHTkFUVVJFICAgICAgICAgICAg CV9fRU5EX1NJR19fCisKKyNkZWZpbmUgSENJX1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFCQkg ICAgICAgIERCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfQllURV9B U19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5E X1NJR19fCisJCQkJCQkJCisjZGVmaW5lIEhDSV9DQU5DRUxfUEVSSU9ESUNfSU5RX1JFUV9TSUdO QVRVUkUJCV9fRU5EX1NJR19fCisKKyNkZWZpbmUgSENJX0lOUV9SRVFfU0lHTkFUVVJFICAgICAg ICAgICAgICAgIAkgICAgCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZ UEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX1VJTlQxNl9BU19TVFJJTkdcCisJ CQkJCQkJX19FTkRfU0lHX18KKwkJCQkJCQkKKyNkZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUV9T SUdOQVRVUkUgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkdcCisJ CQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5EX1NJR19fCisJCQkJ CQkJCisjZGVmaW5lIEhDSV9ERVZJQ0VfU1RSVUNUX1NJR05BVFVSRQkJREJVU19TVFJVQ1RfQkVH SU5fQ0hBUl9BU19TVFJJTkdcCisJCQkJCQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJ CQkJCURCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HXAorCQkJCQkJREJVU19TVFJVQ1RfRU5EX0NI QVJfQVNfU1RSSU5HCisvKiB5eWEoc3MpKi8KKyNkZWZpbmUgSENJX0dFVF9ERVZJQ0VTX1JFUExZ X1NJR05BVFVSRQkJCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVf QllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0FSUkFZX0FTX1NUUklOR1wKKwkJCQkJ CQlIQ0lfREVWSUNFX1NUUlVDVF9TSUdOQVRVUkVcCisJCQkJCQkJX19FTkRfU0lHX18KKworI2Rl ZmluZSBIQ0lfSU5RX1JFUExZX1NJR05BVFVSRQkJCQlEQlVTX1NUUlVDVF9CRUdJTl9DSEFSX0FT X1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVT X1RZUEVfVUlOVDMyX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfVUlOVDE2X0FTX1NUUklO R1wKKwkJCQkJCQlEQlVTX1NUUlVDVF9FTkRfQ0hBUl9BU19TVFJJTkdcCisJCQkJCQkJX19FTkRf U0lHX18KKworCisvKiA9PT09PSBIQ0lDT05GSUcgZGVmaW5pdGlvbnMgPT09PT0gKi8KKy8vSENJ Q09ORklHIHNpZ25hbHMKKy8vSENJQ09ORklHIFByb3ZpZGVkIHNlcnZpY2VzCisvL0hDSUNPTkZJ RyBzaWduYXR1cmVzCisKKy8qID09PT09ICAgIFNEUCBkZWZpbml0aW9ucyAgICA9PT09PSAqLwor Ly9TRFAgc2lnbmFscworLy9TRFAgUHJvdmlkZWQgc2VydmljZXMKKy8vU0RQIHNpZ25hdHVyZXMK KworCisvKiA9PT09PSAgIFJGQ09NTSBkZWZpbml0aW9ucyAgPT09PT0gKi8KKy8vUkZDT01NIHNp Z25hbHMKKy8vUkZDT01NIFByb3ZpZGVkIHNlcnZpY2VzCisvL1JGQ09NTSBzaWduYXR1cmVzCisK KworLyogPT09PT0gICAgUEFOIGRlZmluaXRpb25zICAgID09PT09ICovCisvL1BBTiBzaWduYWxz CisvL1BBTiBQcm92aWRlZCBzZXJ2aWNlcworLy9QQU4gc2lnbmF0dXJlcworCisvKiA9PT09PSAg ICBISUQgZGVmaW5pdGlvbnMgICAgPT09PT0gKi8KKy8vSElEIHNpZ25hbHMKKy8vSElEIFByb3Zp ZGVkIHNlcnZpY2VzCisvL0hJRCBzaWduYXR1cmVzCisKKworLyogPT09PT0gQ29tbW9uIEVycm9y IG1lc3NhZ2VzIG9mIG9yZy5ibHVlei4gPT09PT0qLworI2RlZmluZSBCTFVFWl9EQlVTX0VSUl9G QUlMRUQgICAgICAgICAgICAgIEJMVUVaX0RCVVNfTkFNRSIuRUZhaWxlZCIKKyNkZWZpbmUgQkxV RVpfREJVU19FUlJfTk9fTUVNT1JZICAgICAgICAgICBCTFVFWl9EQlVTX05BTUUiLkVOb01lbW9y eSIKKy8vVE9ETyBXaGF0IGFyZSB0aGUgb3RoZXIgZXJyb3IgdHlwZXM/CisKKworLyogQkxVRVpf REJVU19FUlJfRkFJTEVECisgKiBFRmFpbGVkIGVycm9yIG1lc3NhZ2VzIHNpZ25hdHVyZSBpcyA6 IHNuaQorICogV2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgc3RyaW5nKGVycm9yIG1lc3Nh Z2UgZGVzY3JpcHRpb24pLAorICogdGhlIHNlY29uZCBpcyBhIHVpbnQxNiB0aGF0IGNvbnRhaW5z IHRoZSBlcnJvciBjbGFzcyhzeXN0ZW0sIGRidXMgb3IgaGNpKS4KKyAqIFRoZSBsYXN0IGFyZ3Vt ZW50IGlzIGEgaW50MzIgdGhhdCBjb250YWlucyB0aGUgZXJyb3IgY29kZShlcnJubyAKKyAqIGZv ciBzeXN0ZW0gZXJyb3JzLCBhIGRidXMgZXJyb3IgY29kZSBkZWZpbmVkIGJlbG93IG9yIGEgaGNp IGVycm9yKS4KKyAqIEZvciBoY2kgZXJyb3Igc2VlIHRoZSBibHVldG9vdGggc3BlY2lmaWNhdGlv bi4KKyAqLworIAorLyogZmlyc3QgYXJndW1lbnQgb2YgdGhlIGVycm9yIG1zZyAqLworI2RlZmlu ZSBCTFVFWl9FQ0xBU1NfU1lTVEVNICAgKDB4MDEpCisjZGVmaW5lIEJMVUVaX0VDTEFTU19EQlVT ICAgICAoMHgwMikKKyNkZWZpbmUgQkxVRVpfRUNMQVNTX0hDSSAgICAgICgweDAzKSAvKiBzZWUg Qmx1ZXRvb3RoIGVycm9yIGNvZGUgKi8KKworLyogRC1CdXMgZXJyb3IgY29kZSAoc2Vjb25kIGFy Z3VtZW50IG9mIHRoZSBlcnJvciBtc2cpKi8KKyNkZWZpbmUgQkxVRVpfRURCVVNfVU5LTk9XTl9N RVRIT0QgICAgICgweDAxKQorI2RlZmluZSBCTFVFWl9FREJVU19XUk9OR19TSUdOQVRVUkUgICAg KDB4MDIpCisjZGVmaW5lIEJMVUVaX0VEQlVTX1dST05HX1BBUkFNICAgICAgICAoMHgwMykKKyNk ZWZpbmUgQkxVRVpfRURCVVNfUkVDT1JEX05PVF9GT1VORCAgICgweDA0KQorCisvKiBCTFVFWl9E QlVTX0VSUl9OT19NRU1PUlkgKi8KKyNkZWZpbmUgQkxVRVpfREJVU19FUlJfTk9fTUVNT1JZX1NU UgkiTm8gbWVtb3J5IgorCisKKyNlbmRpZiAvKl9fSF9CTFVFWl9EQlVTX0hfXyovCi0tLSBibHVl ei11dGlscy1jdnMub3JpZy9oY2lkL2RidXMuYwkyMDA1LTA5LTE1IDE4OjA1OjIzLjAwMDAwMDAw MCAtMDMwMAorKysgYmx1ZXotdXRpbHMtY3ZzLWhjaWQtZGJ1cy9oY2lkL2RidXMuYwkyMDA1LTA5 LTIzIDExOjE5OjA5LjAwMDAwMDAwMCAtMDMwMApAQCAtMzMsOCArMzMsMTIgQEAKICNlbmRpZgog CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0 ZC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+Cisj aW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKIAogI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGgu aD4KICNpbmNsdWRlIDxibHVldG9vdGgvaGNpLmg+CkBAIC00NSwyMyArNDksMTU5IEBACiAjaW5j bHVkZSAiZ2xpYi1lY3RvbXkuaCIKIAogI2luY2x1ZGUgImhjaWQuaCIKKyNpbmNsdWRlICJkYnVz LmgiCiAKIHN0YXRpYyBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKIAogI2RlZmluZSBUSU1F T1VUICgzMCAqIDEwMDApCQkvKiAzMCBzZWNvbmRzICovCiAKKyNkZWZpbmUgQkxVRVRPT1RIX0RF VklDRV9OQU1FX0xFTiAgICAoMTgpCisjZGVmaW5lIEJMVUVUT09USF9ERVZJQ0VfQUREUl9MRU4g ICAgKDE4KQorCiAjZGVmaW5lIFNFUlZJQ0VfTkFNRSAib3JnLmJsdWV6LlBpbkFnZW50IgogI2Rl ZmluZSBJTlRFUkZBQ0VfTkFNRSBTRVJWSUNFX05BTUUKICNkZWZpbmUgUkVRVUVTVF9OQU1FICJQ aW5SZXF1ZXN0IgogI2RlZmluZSBQQVRIX05BTUUgIi9vcmcvYmx1ZXovUGluQWdlbnQiCiAKLSNk ZWZpbmUgV1JPTkdfQVJHU19FUlJPUiAib3JnLmJsdWV6LkVycm9yLldyb25nQXJncyIKLQogc3Ry dWN0IHBpbl9yZXF1ZXN0IHsKIAlpbnQgZGV2OwogCWJkYWRkcl90IGJkYTsKIH07CiAKKy8qCisg KiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3ZlZCB0byBhIGNvbW1vbiBsaWJyYXJ5CisgKi8K K2ludCBmaW5kX2Nvbm4oaW50IHMsIGludCBkZXZfaWQsIGxvbmcgYXJnKQoreworCXN0cnVjdCBo Y2lfY29ubl9saXN0X3JlcSAqY2wgPSBOVUxMOworCXN0cnVjdCBoY2lfY29ubl9pbmZvICpjaTsK KwlpbnQgaTsKKwlpbnQgcmVzdWx0ID0gMDsKKwkKKwlpZiAoIShjbCA9IG1hbGxvYygxMCAqIHNp emVvZigqY2kpICsgc2l6ZW9mKCpjbCkpKSkgeworCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFs bG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKwkKKwljbC0+ZGV2X2lkICAgPSBk ZXZfaWQ7CisJY2wtPmNvbm5fbnVtID0gMTA7CisJY2kgICAgICAgICAgID0gY2wtPmNvbm5faW5m bzsKKworCWlmIChpb2N0bChzLCBIQ0lHRVRDT05OTElTVCwgKHZvaWQgKikgY2wpKSB7CisJCXN5 c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgZ2V0IGNvbm5lY3Rpb24gbGlzdFxuIik7CisJCXJldHVybiAw OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbC0+Y29ubl9udW07IGkrKywgY2krKykgeworCQlp ZiAoIWJhY21wKChiZGFkZHJfdCAqKSBhcmcsICZjaS0+YmRhZGRyKSkgeworCQlyZXN1bHQgPSAx OworCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CitjbGVhbnVwOgorCWlmKGNsKQorCQlmcmVlKGNs KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRC1CdXMgZXJyb3IgbWVzc2FnZXMgZnVu Y3Rpb25zIGFuZCBkZWNsYXJhdGlvbnMuCisgKiBUaGlzIHNlY3Rpb24gc2hvdWxkIGJlIG1vdmVk IHRvIGEgY29tbW9uIGZpbGUgCisgKiBpbiB0aGUgZnV0dXJlCisgKgorICovCit0eXBlZGVmIHN0 cnVjdCAgeworCXVpbnQ4X3QgY29kZTsKKwljb25zdCBjaGFyICpzdHI7Cit9Ymx1ZXpfZXJyb3Jf dDsKKworc3RhdGljIGNvbnN0IGJsdWV6X2Vycm9yX3QgZXJyb3JfYXJyYXlbXSA9IHsKKwl7IEJM VUVaX0VEQlVTX1VOS05PV05fTUVUSE9ELCAgICJNZXRob2Qgbm90IGZvdW5kIn0sCisJeyBCTFVF Wl9FREJVU19XUk9OR19TSUdOQVRVUkUsICAiV3JvbmcgbWV0aG9kIHNpZ25hdHVyZSJ9LAorCXsg QkxVRVpfRURCVVNfV1JPTkdfUEFSQU0sICAgICAgIkludmFsaWQgcGFyYW1ldGVycyJ9LAorCXsg QkxVRVpfRURCVVNfUkVDT1JEX05PVF9GT1VORCwgIk5vIHJlY29yZCBmb3VuZCJ9LAorCXsgMCwg TlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYmx1ZXpfZGJ1c19lcnJvcl90b19zdHIo Y29uc3QgdWludDE2X3QgZWNsYXNzLCBjb25zdCBpbnQzMl90IGVjb2RlKSAKK3sKKwljb25zdCBi bHVlel9lcnJvcl90ICpwdHI7CisJCisJaWYgKGVjbGFzcyA9PSBCTFVFWl9FQ0xBU1NfU1lTVEVN KSB7CisJCXJldHVybiBzdHJlcnJvcihlY29kZSk7CisJfSBlbHNlIHsgLyogQkxVRVpfRUNMQVNT X0RCVVMgKi8KKwkJCisJCWZvciAocHRyID0gZXJyb3JfYXJyYXk7IHB0ci0+Y29kZTsgcHRyKysp IHsKKwkJCWlmKHB0ci0+Y29kZSA9PSBlY29kZSkgeworCQkJCXJldHVybiBwdHItPnN0cjsKKwkJ CX0KKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworREJ1c01lc3NhZ2UgKmJsdWV6X25ld19m YWlsdXJlX21zZyhEQnVzTWVzc2FnZSAqbXNnLCBjb25zdCB1aW50MTZfdCBlY2xhc3MsIGNvbnN0 IGludDMyX3QgZWNvZGUpCit7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisJREJ1c01lc3NhZ2Ug KnJlcGx5ID0gTlVMTDsKKwljb25zdCBjaGFyICplcnJvcl9tc2cgPSBOVUxMOworCQorCWVycm9y X21zZyA9IGJsdWV6X2RidXNfZXJyb3JfdG9fc3RyKGVjbGFzcywgZWNvZGUpOworCQorCWlmIChl cnJvcl9tc2cpIHsKKwkKKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywgQkxV RVpfREJVU19FUlJfRkFJTEVELCBlcnJvcl9tc2cpOworCQorCQlkYnVzX21lc3NhZ2VfaXRlcl9p bml0X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFz aWMoJml0ZXIsIERCVVNfVFlQRV9VSU5UMTYgLCZlY2xhc3MpOworCQlkYnVzX21lc3NhZ2VfaXRl cl9hcHBlbmRfYmFzaWMoJml0ZXIsIERCVVNfVFlQRV9JTlQzMiAsJmVjb2RlKTsKKwl9CisJCisJ cmV0dXJuIHJlcGx5OworfQorCisvKgorICogTWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9ucyBvYmpl Y3QgdGFibGUgZGVjbGFyYXRpb24KKyAqCisgKi8KKyAKK3R5cGVkZWYgREJ1c01lc3NhZ2UqIChz ZXJ2aWNlX2hhbmRsZXJfZnVuY190KShEQnVzTWVzc2FnZSAqLCB2b2lkICopOworCit0eXBlZGVm IHN0cnVjdAoreworCWNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWU7CisJc2VydmljZV9oYW5k bGVyX2Z1bmNfdCAqaGFuZGxlcl9mdW5jOworCWNvbnN0IGNoYXIgICAgICAgICAgICAgKnNpZ25h dHVyZTsKK31zZXJ2aWNlX3RhYmxlX3Q7CisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBoY2lf bXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRh dGEpOworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9zaWduYWxfZmlsdGVyIChEQnVzQ29u bmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBE QnVzTWVzc2FnZSogaGFuZGxlX2dldF9kZXZpY2VzX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lk ICpkYXRhKTsKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3BlcmlvZGljX2lucV9yZXEoREJ1 c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9j YW5jZWxfcGVyaW9kaWNfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKK3N0 YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAq ZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9yb2xlX3N3aXRjaF9yZXEoREJ1c01l c3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CisKKworc3RhdGljIGNvbnN0IERCdXNPYmplY3RQYXRo VlRhYmxlIGhjaV92dGFibGUgPSB7CisJTlVMTCwKKwkmaGNpX21zZ19mdW5jLAorCU5VTEwsCisJ TlVMTCwKKwlOVUxMLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzZXJ2aWNlX3RhYmxlX3Qg aGNpX3NlcnZpY2VzW10gPSB7CisJe0hDSV9HRVRfREVWSUNFU19SRVEsICAgICAgICAgaGFuZGxl X2dldF9kZXZpY2VzX3JlcSwgICAgICAgICBIQ0lfR0VUX0RFVklDRVNfUkVRX1NJR05BVFVSRX0s CisJe0hDSV9QRVJJT0RJQ19JTlFfUkVRLCAgICAgICAgaGFuZGxlX3BlcmlvZGljX2lucV9yZXEs ICAgICAgICBIQ0lfUEVSSU9ESUNfSU5RX1JFUV9TSUdOQVRVUkV9LAorCXtIQ0lfQ0FOQ0VMX1BF UklPRElDX0lOUV9SRVEsIGhhbmRsZV9jYW5jZWxfcGVyaW9kaWNfaW5xX3JlcSwgSENJX0NBTkNF TF9QRVJJT0RJQ19JTlFfUkVRX1NJR05BVFVSRX0sCisJe0hDSV9ST0xFX1NXSVRDSF9SRVEsICAg ICAgICAgaGFuZGxlX3JvbGVfc3dpdGNoX3JlcSwgICAgICAgICBIQ0lfUk9MRV9TV0lUQ0hfUkVR X1NJR05BVFVSRX0sCisJe0hDSV9JTlFfUkVRLCAgICAgICAgICAgICAgICAgaGFuZGxlX2lucV9y ZXEsICAgICAgICAgICAgICAgICBIQ0lfSU5RX1JFUV9TSUdOQVRVUkV9LAkKKwl7TlVMTCwgTlVM TCwgTlVMTH0KK307CisKIHN0YXRpYyB2b2lkIHJlcGx5X2hhbmRsZXJfZnVuY3Rpb24oREJ1c1Bl bmRpbmdDYWxsICpjYWxsLCB2b2lkICp1c2VyX2RhdGEpCiB7CiAJc3RydWN0IHBpbl9yZXF1ZXN0 ICpyZXEgPSAoc3RydWN0IHBpbl9yZXF1ZXN0ICopIHVzZXJfZGF0YTsKQEAgLTE2OSw4ICszMDks OSBAQAogCiAJYmFzd2FwKCZ0bXAsIGxvY2FsKTsgbG9jYWxfYWRkciA9IGJhdG9zdHIoJnRtcCk7 CiAKLQltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoIi9vcmcvYmx1ZXovRGV2QWdl bnQiLAotCQkJCSJvcmcuYmx1ZXouRGV2QWdlbnQiLCAiSW5xdWlyeVN0YXJ0Iik7CisJbWVzc2Fn ZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKEJMVUVaX0RCVVNfSENJX1BBVEgsCisJCQkJCSAg QkxVRVpfREJVU19IQ0lfSU5URVJGQUNFLCAKKwkJCQkJICBCTFVFWl9EQlVTX0hDSV9TSUdfSU5R X1NUQVJUKTsKIAlpZiAobWVzc2FnZSA9PSBOVUxMKSB7CiAJCXN5c2xvZyhMT0dfRVJSLCAiQ2Fu J3QgYWxsb2NhdGUgRC1CVVMgaW5xdWlyeSBzdGFydCBtZXNzYWdlIik7CiAJCWdvdG8gZmFpbGVk OwpAQCAtMjAzLDggKzM0NCw5IEBACiAKIAliYXN3YXAoJnRtcCwgbG9jYWwpOyBsb2NhbF9hZGRy ID0gYmF0b3N0cigmdG1wKTsKIAotCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgi L29yZy9ibHVlei9EZXZBZ2VudCIsCi0JCQkJIm9yZy5ibHVlei5EZXZBZ2VudCIsICJJbnF1aXJ5 Q29tcGxldGUiKTsKKwltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoQkxVRVpfREJV U19IQ0lfUEFUSCwKKwkJCQlCTFVFWl9EQlVTX0hDSV9JTlRFUkZBQ0UsIAorCQkJCUJMVUVaX0RC VVNfSENJX1NJR19JTlFfQ09NUExFVEUpOwogCWlmIChtZXNzYWdlID09IE5VTEwpIHsKIAkJc3lz bG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyBpbnF1aXJ5IGNvbXBsZXRlIG1lc3Nh Z2UiKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0yMzgsOCArMzgwLDkgQEAKIAliYXN3YXAoJnRtcCwg bG9jYWwpOyBsb2NhbF9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAliYXN3YXAoJnRtcCwgcGVlcik7 IHBlZXJfYWRkciA9IGJhdG9zdHIoJnRtcCk7CiAKLQltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25l d19zaWduYWwoIi9vcmcvYmx1ZXovRGV2QWdlbnQiLAotCQkJCSJvcmcuYmx1ZXouRGV2QWdlbnQi LCAiSW5xdWlyeVJlc3VsdCIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChC TFVFWl9EQlVTX0hDSV9QQVRILAorCQkJCUJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwgCisJCQkJ QkxVRVpfREJVU19IQ0lfU0lHX0lOUV9SRVNVTFQpOwogCWlmIChtZXNzYWdlID09IE5VTEwpIHsK IAkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyBpbnF1aXJ5IHJlc3VsdCBt ZXNzYWdlIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMjQ5LDcgKzM5Miw3IEBACiAJCQkJCURCVVNf VFlQRV9TVFJJTkcsICZsb2NhbF9hZGRyLAogCQkJCQlEQlVTX1RZUEVfU1RSSU5HLCAmcGVlcl9h ZGRyLAogCQkJCQlEQlVTX1RZUEVfVUlOVDMyLCAmY2xhc3MsCi0JCQkJCURCVVNfVFlQRV9JTlQz MiwgJnJzc2ksCisJCQkJCURCVVNfVFlQRV9CWVRFLCAmcnNzaSwKIAkJCQkJREJVU19UWVBFX0lO VkFMSUQpOwogCiAJaWYgKGRidXNfY29ubmVjdGlvbl9zZW5kKGNvbm5lY3Rpb24sIG1lc3NhZ2Us IE5VTEwpID09IEZBTFNFKSB7CkBAIC0yNzcsOCArNDIwLDkgQEAKIAliYXN3YXAoJnRtcCwgbG9j YWwpOyBsb2NhbF9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAliYXN3YXAoJnRtcCwgcGVlcik7IHBl ZXJfYWRkciA9IGJhdG9zdHIoJnRtcCk7CiAKLQltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19z aWduYWwoIi9vcmcvYmx1ZXovRGV2QWdlbnQiLAotCQkJCSJvcmcuYmx1ZXouRGV2QWdlbnQiLCAi UmVtb3RlTmFtZSIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChCTFVFWl9E QlVTX0hDSV9QQVRILAorCQkJCUJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwKKwkJCQlCTFVFWl9E QlVTX0hDSV9TSUdfUkVNT1RFX05BTUUpOwogCWlmIChtZXNzYWdlID09IE5VTEwpIHsKIAkJc3lz bG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyByZW1vdGUgbmFtZSBtZXNzYWdlIik7 CiAJCWdvdG8gZmFpbGVkOwpAQCAtMzg4LDYgKzUzMiw3IEBACiAJZGJ1c19lcnJvcl9pbml0KCZl cnJvcik7CiAKIAljb25uZWN0aW9uID0gZGJ1c19idXNfZ2V0KERCVVNfQlVTX1NZU1RFTSwgJmVy cm9yKTsKKwkKIAlpZiAoY29ubmVjdGlvbiA9PSBOVUxMKSB7CiAJCWZwcmludGYoc3RkZXJyLCAi RmFpbGVkIHRvIG9wZW4gY29ubmVjdGlvbiB0byBzeXN0ZW0gbWVzc2FnZSBidXM6ICVzXG4iLAog CQkJZXJyb3IubWVzc2FnZSk7CkBAIC0zOTUsOCArNTQwLDQyOSBAQAogCQlyZXR1cm4gRkFMU0U7 CiAJfQogCisJZGJ1c19idXNfcmVxdWVzdF9uYW1lKGNvbm5lY3Rpb24sIEJMVUVaX0RCVVNfTkFN RSwgCisJCQkgICAgICBEQlVTX05BTUVfRkxBR19QUk9ISUJJVF9SRVBMQUNFTUVOVCwgCisJCQkg ICAgICAmZXJyb3IpOworCQorCWlmIChkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworCQlz eXNsb2coTE9HX0VSUiwiRC1CdXMgRXJyb3I6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsKKwkJZGJ1 c19lcnJvcl9mcmVlICgmZXJyb3IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCWlmICghZGJ1 c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdF9wYXRoKGNvbm5lY3Rpb24sIEJMVUVaX0RCVVNf SENJX1BBVEgsICZoY2lfdnRhYmxlLCBOVUxMKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBm YWlsZWQgdG8gcmVnaXN0ZXIgJXMgb2JqZWN0IiwgQkxVRVpfREJVU19IQ0lfUEFUSCk7CisJCXJl dHVybiBGQUxTRTsKKwl9CisKKwlpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChjb25u ZWN0aW9uLCBoY2lfc2lnbmFsX2ZpbHRlciwgTlVMTCwgTlVMTCkpIHsKKwkJc3lzbG9nKExPR19F UlIsIkRCVVMgZmFpbGVkIHRvIGFkZCBmaWx0ZXIiKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkK IAlkYnVzX2Nvbm5lY3Rpb25fc2V0X3dhdGNoX2Z1bmN0aW9ucyhjb25uZWN0aW9uLAogCQlhZGRf d2F0Y2gsIHJlbW92ZV93YXRjaCwgd2F0Y2hfdG9nZ2xlZCwgTlVMTCwgTlVMTCk7Ci0KIAlyZXR1 cm4gVFJVRTsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgCisgKiAgU2VjdGlvbiByZXNlcnZlZCB0byBE LUJ1cyBtZXNzYWdlIGhhbmRsZXJzCisgKiAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBEQnVzSGFu ZGxlclJlc3VsdCBoY2lfc2lnbmFsX2ZpbHRlciAoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNN ZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJREJ1c0hhbmRsZXJSZXN1bHQgcmV0ID0gREJV U19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7CisJY29uc3QgY2hhciAqaWZhY2U7CisJ Y29uc3QgY2hhciAqbWV0aG9kOworCisJaWYgKCFtc2cgfHwgIWNvbm4pCisJCXJldHVybiBEQlVT X0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKKwkKKwlpZiAoZGJ1c19tZXNzYWdlX2dl dF90eXBlIChtc2cpICE9IERCVVNfTUVTU0FHRV9UWVBFX1NJR05BTCkKKwkJcmV0dXJuIERCVVNf SEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworCisJaWZhY2UgPSBkYnVzX21lc3NhZ2Vf Z2V0X2ludGVyZmFjZShtc2cpOworCW1ldGhvZCA9IGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG1z Zyk7CisJCisJaWYgKHN0cmNtcChpZmFjZSwgREJVU19JTlRFUkZBQ0VfTE9DQUwpID09IDApIHsK KwkJaWYgKHN0cmNtcChtZXRob2QsICJEaXNjb25uZWN0ZWQiKSA9PSAwKXsKKwkJCXJldCA9IERC VVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKwkJfQorCX0gZWxzZQlpZiAoc3RyY21wKGlmYWNl LCBEQlVTX0lOVEVSRkFDRV9EQlVTKSA9PSAwKSB7CisJCQlpZiAoc3RyY21wKG1ldGhvZCwgIk5h bWVPd25lckNoYW5nZWQiKSA9PSAwKSB7CisJCQkJcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9I QU5ETEVEOworCQkJfQorCQkJaWYgKHN0cmNtcChtZXRob2QsICJOYW1lQWNxdWlyZWQiKSA9PSAw KSB7CisJCQkJcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworCQkJfQorCX0KKwly ZXR1cm4gcmV0OworfQorc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9tc2dfZnVuYyhEQnVz Q29ubmVjdGlvbiAqY29ubiwgCisJCQkJICAgICAgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0 YSkKK3sKKwljb25zdCBzZXJ2aWNlX3RhYmxlX3QgKnB0cl9oYW5kbGVycyA9ICBoY2lfc2Vydmlj ZXM7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwl1aW50MTZfdCB0eXBlOworCWNvbnN0 IGNoYXIgKmlmYWNlOworCWNvbnN0IGNoYXIgKm1ldGhvZDsKKwljb25zdCBjaGFyICpzaWduYXR1 cmU7CisJdWludDhfdCByZXN1bHQgPSBCTFVFWl9FREJVU19VTktOT1dOX01FVEhPRDsKKwlEQnVz SGFuZGxlclJlc3VsdCByZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDs7 CisJCisJdHlwZSA9IGRidXNfbWVzc2FnZV9nZXRfdHlwZShtc2cpOworCWlmYWNlID0gZGJ1c19t ZXNzYWdlX2dldF9pbnRlcmZhY2UobXNnKTsKKwltZXRob2QgPSBkYnVzX21lc3NhZ2VfZ2V0X21l bWJlciAobXNnKTsKKwlzaWduYXR1cmUgPSBkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZShtc2cp OworCQorCWlmICgodHlwZSA9PSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkgJiYgCisJ CShzdHJjbXAoaWZhY2UsIEJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSkgPT0gMCkgJiYgCisJCSht ZXRob2QgIT0gTlVMTCkpIHsKKwkJCisJCWZvciAoOyBwdHJfaGFuZGxlcnMtPm5hbWU7IHB0cl9o YW5kbGVycysrKSB7CisJCQlpZiAoc3RyY21wKG1ldGhvZCwgcHRyX2hhbmRsZXJzLT5uYW1lKSA9 PSAwKSB7CisJCQkJLyogcmVzZXR0aW5nIHVua25vd24gbWV0aG9kLiBJdCdzIHBvc3NpYmxlIGhh bmRsZSBtZXRob2Qgb3ZlcmxvYWQgKi8KKwkJCQlyZXN1bHQgPSBCTFVFWl9FREJVU19XUk9OR19T SUdOQVRVUkU7IAorCQkJCWlmIChzdHJjbXAocHRyX2hhbmRsZXJzLT5zaWduYXR1cmUsIHNpZ25h dHVyZSkgPT0gMCkgeworCQkJCQlyZXBseSA9IChwdHJfaGFuZGxlcnMtPmhhbmRsZXJfZnVuYyko bXNnLCBkYXRhKTsKKwkJCQkJcmVzdWx0ID0gMDsgLyogcmVzZXR0aW5nIHdyb25nIHNpZ25hdHVy ZSovCisJCQkJCWJyZWFrOworCQkJCX0gCisJCQkJCisJCQl9CisJCX0KKwkJCisJCWlmIChyZXN1 bHQpCisJCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19E QlVTLCByZXN1bHQpOworCQkKKwkJCisJCS8qIHNlbmQgYW4gZXJyb3Igb3IgdGhlIHN1Y2Nlc3Mg cmVwbHkqLworCQlpZiAocmVwbHkpIHsKKwkJCWlmICghZGJ1c19jb25uZWN0aW9uX3NlbmQgKGNv bm4sIHJlcGx5LCBOVUxMKSkgeyAKKwkJCQlzeXNsb2coTE9HX0VSUiwgIiVzIGxpbmU6JWQgQ2Fu J3Qgc2VuZCByZXBseSBtZXNzYWdlISIsIFwKKwkJCQkJX19QUkVUVFlfRlVOQ1RJT05fXywgX19M SU5FX18pIDsKKwkJCX0KKwkJCWRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOworCQl9CisJCQor CQlyZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJfQorCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2dldF9kZXZpY2VzX3JlcShEQnVzTWVzc2Fn ZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNz YWdlSXRlciBhcnJheV9pdGVyOworCURCdXNNZXNzYWdlSXRlciAgc3RydWN0X2l0ZXI7CisJREJ1 c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwkKKwlzdHJ1Y3QgaGNpX2Rldl9saXN0X3JlcSAqZGwg PSBOVUxMOworCXN0cnVjdCBoY2lfZGV2X3JlcSAqZHIgICAgICA9IE5VTEw7CisJc3RydWN0IGhj aV9kZXZfaW5mbyBkaTsKKwlpbnQxNl90IGk7CisJdWludDhfdCB1cF9kZXYgPSAwOworCWludDMy X3Qgc29jayA9IC0xOworCQorCWNoYXIgYW5hbWVbQkxVRVRPT1RIX0RFVklDRV9OQU1FX0xFTl07 CisJY2hhciBhYWRkcltCTFVFVE9PVEhfREVWSUNFX0FERFJfTEVOXTsKKwljaGFyICpwYWRkciA9 IGFhZGRyOworCWNoYXIgKnBuYW1lID0gYW5hbWU7CisJY29uc3QgY2hhciBhcnJheV9zaWdbXSA9 IEhDSV9ERVZJQ0VfU1RSVUNUX1NJR05BVFVSRTsKKworICAgICAgICAvKiBDcmVhdGUgYW5kIGJp bmQgSENJIHNvY2tldCAqLworICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfQkxVRVRPT1RI LCBTT0NLX1JBVywgQlRQUk9UT19IQ0kpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBzeXNsb2co TE9HX0VSUiwgIkNhbid0IG9wZW4gSENJIHNvY2tldDogJXMgKCVkKSIsCisgICAgICAgICAgICAg ICAgCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJl X21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwkJZ290byBjbGVhbnVwOwor ICAgICAgICB9CisKKworCWRsID0gbWFsbG9jKEhDSV9NQVhfREVWICogc2l6ZW9mKCpkcikgKyBz aXplb2YoKmRsKSk7CisJCisJaWYgKCFkbCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFs bG9jYXRlIG1lbW9yeSIpOworCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobXNnLCBC TFVFWl9EQlVTX0VSUl9OT19NRU1PUlksIEJMVUVaX0RCVVNfRVJSX05PX01FTU9SWV9TVFIpOwor CQlnb3RvIGNsZWFudXA7CisJfQorCisJZGwtPmRldl9udW0gPSBIQ0lfTUFYX0RFVjsKKwlkciA9 IGRsLT5kZXZfcmVxOworCisJaWYgKGlvY3RsKHNvY2ssIEhDSUdFVERFVkxJU1QsICh2b2lkICop IGRsKSA8IDApIHsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9F Q0xBU1NfU1lTVEVNLCBlcnJubyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkKKwkvKiBhY3Rp dmUgYmx1ZXRvb3RoIGFkYXB0ZXIgZm91bmQgKi8KKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdf bWV0aG9kX3JldHVybihtc2cpOworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5 LCAmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERCVVNf VFlQRV9BUlJBWSwgYXJyYXlfc2lnLCAmYXJyYXlfaXRlcik7CisJZHIgPSBkbC0+ZGV2X3JlcTsK KwkKKwlmb3IgKGkgPSAwOyBpIDwgZGwtPmRldl9udW07IGkrKywgZHIrKykgeworCQlpZiAoaGNp X3Rlc3RfYml0KEhDSV9VUCwgJmRyLT5kZXZfb3B0KSkgeworCQkJdXBfZGV2Kys7CisJCQltZW1z ZXQoJmRpLCAwICwgc2l6ZW9mKHN0cnVjdCBoY2lfZGV2X2luZm8pKTsKKwkJCWRpLmRldl9pZCA9 IGRyLT5kZXZfaWQ7CisJCQkJCisJCQlpZiAoIWlvY3RsKHNvY2ssIEhDSUdFVERFVklORk8sICh2 b2lkICopICZkaSkpIHsKKwkJCQlzdHJjcHkoYW5hbWUsIGRpLm5hbWUpOworCQkJCWJhMnN0cigm ZGkuYmRhZGRyLCBhYWRkcik7CisJCQkJZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIo JmFycmF5X2l0ZXIsIERCVVNfVFlQRV9TVFJVQ1QsIE5VTEwsCisJCQkJCQkmc3RydWN0X2l0ZXIp OworCQkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3RydWN0X2l0ZXIsIERCVVNf VFlQRV9TVFJJTkcgLCZwbmFtZSk7CisJCQkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2lj KCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX1NUUklORyAsJnBhZGRyKTsKKwkJCQlkYnVzX21lc3Nh Z2VfaXRlcl9jbG9zZV9jb250YWluZXIoJmFycmF5X2l0ZXIsICZzdHJ1Y3RfaXRlcik7CisJCQl9 CisJCX0KKwl9CisJZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCZpdGVyLCAmYXJy YXlfaXRlcik7CisKK2NsZWFudXA6CisJaWYgKGRsKQorCQlmcmVlKGRsKTsKKwkKKwlpZiAoc29j ayA+IDApCisJCWNsb3NlIChzb2NrKTsKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CisKK3N0YXRpYyBE QnVzTWVzc2FnZSogaGFuZGxlX3BlcmlvZGljX2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9p ZCAqZGF0YSkgCit7CisJd3JpdGVfaW5xdWlyeV9tb2RlX2NwIGlucV9tb2RlOworCXBlcmlvZGlj X2lucXVpcnlfY3AgaW5xX3BhcmFtOworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNz YWdlICpyZXBseSA9IE5VTEw7CisJdWludDhfdCBsZW5ndGg7CisJdWludDhfdCBtYXhfcGVyaW9k OworCXVpbnQ4X3QgbWluX3BlcmlvZDsKKworCWludDMyX3Qgc29jayA9IC0xOworCWludDMyX3Qg ZGV2X2lkID0gLTE7CisJCisJaWYgKChkZXZfaWQgPSBoY2lfZ2V0X3JvdXRlKE5VTEwpKSA8IDAp IHsKKwkJc3lzbG9nKExPR19FUlIsICJCbHVldG9vdGggZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUi KTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lT VEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJCQorCX0KKwkKKwlpZiAoKHNvY2sgPSBo Y2lfb3Blbl9kZXYoZGV2X2lkKSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiSENJIGRldmlj ZSBvcGVuIGZhaWxlZCIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJM VUVaX0VDTEFTU19TWVNURU0sIEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJCisJZGJ1 c19tZXNzYWdlX2l0ZXJfaW5pdChtc2csICZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRf YmFzaWMoJml0ZXIsICZsZW5ndGgpOworCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOwor CWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJm1pbl9wZXJpb2QpOworCWRidXNf bWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOwkKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMo Jml0ZXIsICZtYXhfcGVyaW9kKTsKKwkKKwlpZiAoKGxlbmd0aCA+PSBtaW5fcGVyaW9kKSB8fCAo bWluX3BlcmlvZCA+PSBtYXhfcGVyaW9kKSkgeworCQkgIHJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1 cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX0RCVVMsIEJMVUVaX0VEQlVTX1dST05HX1BBUkFNKTsK KwkJICBnb3RvIGNsZWFudXA7CisJfQorCisJaW5xX3BhcmFtLm51bV9yc3AgPSAxMDA7CisJaW5x X3BhcmFtLmxlbmd0aCAgPSBsZW5ndGg7CisKKwlpbnFfcGFyYW0ubWF4X3BlcmlvZCA9IG1heF9w ZXJpb2Q7CisJaW5xX3BhcmFtLm1pbl9wZXJpb2QgPSBtaW5fcGVyaW9kOworCisJLyogR2VuZXJh bC9VbmxpbWl0ZWQgSW5xdWlyeSBBY2Nlc3MgQ29kZSAoR0lBQykgKi8KKwlpbnFfcGFyYW0ubGFw WzBdID0gMHgzMzsKKwlpbnFfcGFyYW0ubGFwWzFdID0gMHg4YjsKKwlpbnFfcGFyYW0ubGFwWzJd ID0gMHg5ZTsKKworCWlucV9tb2RlLm1vZGUgPSAxOyAvL0lOUVVJUllfV0lUSF9SU1NJOworCQor CWlmIChoY2lfc2VuZF9jbWQoc29jaywgT0dGX0hPU1RfQ1RMLCBPQ0ZfV1JJVEVfSU5RVUlSWV9N T0RFLCAKKwkJV1JJVEVfSU5RVUlSWV9NT0RFX0NQX1NJWkUsICZpbnFfbW9kZSkgPCAwKSB7CisJ CXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3Qgc2V0IGlucXVpcnkgbW9kZTolcy4iLCBzdHJlcnJvcihl cnJubykpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFT U19TWVNURU0sIGVycm5vKTsKKwkJZ290byBjbGVhbnVwOworCX0KKwkKKwlpZiAoaGNpX3NlbmRf Y21kKHNvY2ssIE9HRl9MSU5LX0NUTCwgT0NGX1BFUklPRElDX0lOUVVJUlksIAorCQlQRVJJT0RJ Q19JTlFVSVJZX0NQX1NJWkUsICZpbnFfcGFyYW0pIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwg IkNhbid0IHNlbmQgSENJIGNvbW1hbmRzOiVzLiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJlcGx5 ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX1NZU1RFTSwgZXJybm8p OworCQlnb3RvIGNsZWFudXA7CisJfSBlbHNlIHsKKwkKKwkJdWludDhfdCByZXN1bHQgPSAwOwor CQkvKiByZXR1cm4gVFJVRSB0byBpbmRpY2F0ZSB0aGF0IG9wZXJhdGlvbiB3YXMgY29tcGxldGVk ICovCisJCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJCWRi dXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7CisJCWRidXNfbWVzc2Fn ZV9pdGVyX2FwcGVuZF9iYXNpYygmaXRlciwgREJVU19UWVBFX0JZVEUgLCZyZXN1bHQpOworCX0K KwkKK2NsZWFudXA6CisKKwlpZiAoc29jayA+IDApCisJCWNsb3NlKHNvY2spOworCQorCXJldHVy biByZXBseTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfY2FuY2VsX3BlcmlvZGlj X2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVzc2FnZUl0 ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCWludDMyX3Qgc29jayA9IC0x OworCWludDMyX3QgZGV2X2lkID0gLTE7CisJCisJaWYgKChkZXZfaWQgPSBoY2lfZ2V0X3JvdXRl KE5VTEwpKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJCbHVldG9vdGggZGV2aWNlIGlzIG5v dCBhdmFpbGFibGUiKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVF Wl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJCQorCX0KKwkKKwlp ZiAoKHNvY2sgPSBoY2lfb3Blbl9kZXYoZGV2X2lkKSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJS LCAiSENJIGRldmljZSBvcGVuIGZhaWxlZCIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJl X21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsK Kwl9CisJCisJaWYgKGhjaV9zZW5kX2NtZChzb2NrLCBPR0ZfTElOS19DVEwsIE9DRl9FWElUX1BF UklPRElDX0lOUVVJUlksIDAgLCBOVUxMKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJTZW5k IGhjaSBjb21tYW5kIGZhaWxlZC4iKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2co bXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBlcnJubyk7CisJfSBlbHNlICB7CisJCXVpbnQ4X3Qg cmVzdWx0ICA9IDA7CisJCS8qIHJldHVybiBUUlVFIHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9u IHdhcyBjb21wbGV0ZWQgKi8KKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsK KwkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSAs JnJlc3VsdCk7CisJfQorCQorY2xlYW51cDoKKwlpZiAoc29jayA+IDApCisJCWNsb3NlKHNvY2sp OworCQorCXJldHVybiByZXBseTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfaW5x X3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCWNvbnN0IGNoYXIgYXJyYXlf c2lnW10gPSBIQ0lfSU5RX1JFUExZX1NJR05BVFVSRTsKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsK KwlEQnVzTWVzc2FnZUl0ZXIgYXJyYXlfaXRlcjsKKwlEQnVzTWVzc2FnZUl0ZXIgIHN0cnVjdF9p dGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJaW5xdWlyeV9pbmZvICppbmZvID0g TlVMTDsKKwljaGFyIGFkZHJbMThdOworCWNvbnN0IGNoYXIgKnBhZGRyID0gYWRkcjsKKwlpbnQz Ml90IGRldl9pZCA9IC0xOworCXVpbnQzMl90IGNsYXNzID0gMDsKKwl1aW50MTZfdCBjbG9ja19v ZmZzZXQ7CisJdWludDE2X3QgZmxhZ3M7CisJaW50OF90IGxlbmd0aDsKKwlpbnQ4X3QgbnVtX3Jz cDsKKwlpbnQ4X3QgaTsKKworCWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShOVUxMKSkgPCAw KSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQmx1ZXRvb3RoIGRldmljZSBpcyBub3QgYXZhaWxhYmxl Iik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX1NZ U1RFTSwgRU5PREVWKTsKKwkJZ290byBjbGVhbnVwOworCQkKKwl9CisJCisJZGJ1c19tZXNzYWdl X2l0ZXJfaW5pdChtc2csICZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0 ZXIsICZsZW5ndGgpOworCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCWRidXNfbWVz c2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJm51bV9yc3ApOworCWRidXNfbWVzc2FnZV9pdGVy X25leHQoJml0ZXIpOworCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmZsYWdz KTsKKwkKKwlpZiAoKGxlbmd0aCA8PSAwKSB8fCAobnVtX3JzcCA8PSAwKSkgeworCQlyZXBseSA9 IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19EQlVTLCBCTFVFWl9FREJV U19XUk9OR19QQVJBTSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJCisJbnVtX3JzcCA9IGhjaV9p bnF1aXJ5KGRldl9pZCwgbGVuZ3RoLCBudW1fcnNwLCBOVUxMLCAmaW5mbywgZmxhZ3MpOworCQor CWlmIChudW1fcnNwIDwgMCkgeworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2cs IEJMVUVaX0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwl9IGVsc2UgeworCQlyZXBseSA9IGRidXNf bWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0 X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5l cigmaXRlciwgREJVU19UWVBFX0FSUkFZLCBhcnJheV9zaWcsICZhcnJheV9pdGVyKTsKKwkJCisJ ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3JzcDsgaSsrKSB7CisJCQliYTJzdHIoJihpbmZv K2kpLT5iZGFkZHIsIGFkZHIpOworCisJCQljbG9ja19vZmZzZXQgPSBidG9ocygoaW5mbytpKS0+ Y2xvY2tfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgMyBieXRlcyBh cmUgdXNlZCAqLworCQkJbWVtY3B5KCZjbGFzcywgKGluZm8raSktPmRldl9jbGFzcywgMyk7CisJ CQkKKwkJCWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZhcnJheV9pdGVyLCBEQlVT X1RZUEVfU1RSVUNULCBOVUxMLCAmc3RydWN0X2l0ZXIpOworCQkJZGJ1c19tZXNzYWdlX2l0ZXJf YXBwZW5kX2Jhc2ljKCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX1NUUklORyAsICZwYWRkcik7CisJ CQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVf VUlOVDMyICwgJmNsYXNzKTsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3Ry dWN0X2l0ZXIsIERCVVNfVFlQRV9VSU5UMTYgLCAmY2xvY2tfb2Zmc2V0KTsKKwkJCWRidXNfbWVz c2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmYXJyYXlfaXRlciwgJnN0cnVjdF9pdGVyKTsKKwl9 CisgICAgICAgIAlkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoJml0ZXIsICZhcnJh eV9pdGVyKTsKKyAgICAgICAgfQorCitjbGVhbnVwOgorCWlmKGluZm8pCisJCWJ0X2ZyZWUoaW5m byk7CisJCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3Jv bGVfc3dpdGNoX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNz YWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJY2hhciAqc3RyX2Jk YWRkciA9IE5VTEw7CisJYmRhZGRyX3QgYmRhZGRyOworCXVpbnQ4X3Qgcm9sZTsKKwlpbnQzMl90 IGRldl9pZCA9IC0xLCBzb2NrID0gLTE7CisJCisJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtc2cs ICZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZzdHJfYmRhZGRy KTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9n ZXRfYmFzaWMoJml0ZXIsICZyb2xlKTsKKwkKKwlzdHIyYmEoc3RyX2JkYWRkciwgJmJkYWRkcik7 CisJCisJZGV2X2lkID0gaGNpX2Zvcl9lYWNoX2RldihIQ0lfVVAsIGZpbmRfY29ubiwgKGxvbmcp ICZiZGFkZHIpOworCQorCWlmIChkZXZfaWQgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQmx1 ZXRvb3RoIGRldmljZSBmYWlsZWRcbiIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21z Zyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsKKwl9 CisJCisJc29jayA9IGhjaV9vcGVuX2RldihkZXZfaWQpOworCQorCWlmIChzb2NrIDwgMCkgewor CQlzeXNsb2coTE9HX0VSUiwgIkhDSSBkZXZpY2Ugb3BlbiBmYWlsZWRcbiIpOworCQlyZXBseSA9 IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIEVOT0RFVik7 CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoaGNpX3N3aXRjaF9yb2xlKHNvY2ssICZiZGFk ZHIsIHJvbGUsIDEwMDAwKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJTd2l0Y2ggcm9sZSBy ZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywg QkxVRVpfRUNMQVNTX1NZU1RFTSwgZXJybm8pOworCX0gZWxzZSB7CisJCXVpbnQ4X3QgcmVzdWx0 ID0gMDsKKwkJLyogcmV0dXJuIFRSVUUgdG8gaW5kaWNhdGUgdGhhdCBvcGVyYXRpb24gd2FzIGNv bXBsZXRlZCAqLworCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cp OworCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVz X21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJml0ZXIsIERCVVNfVFlQRV9CWVRFLCAmcmVzdWx0 KTsKKwl9CitjbGVhbnVwOgorCQorCXJldHVybiByZXBseTsKK30K ------=_Part_13592_30875326.1127485701071-- ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel