From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: From: Claudio Takahasi To: bluez-devel@lists.sourceforge.net MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_6642_12528200.1128104566002" Subject: [Bluez-devel] hcid patch 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, 30 Sep 2005 15:22:46 -0300 ------=_Part_6642_12528200.1128104566002 Content-Type: multipart/alternative; boundary="----=_Part_6643_7404313.1128104566002" ------=_Part_6643_7404313.1128104566002 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks/Marcel, The patch is attached. The basic structure to start the development of the "sdp", "network", "serial", ... was added. There are a lot not implemented methods. Regards, Claudio. >>>>Main Features 1. added multiple bt adapter support 2. added the structures to support profiles 3. Modified paths to "/org/bluez/Devices" and "/org/bluez/Manager". Where "Devices" is going to provide device configuration services currently provided by hciconfig tool. The "Manager" will handle services related to connection establishment and setup, including profiles, sdp and device discovery. >>>>Next Action 1. Move the functions to to suitable file names( eg: dbus-mgr.c and dbus-dev.c) 2. Define the device based path name. >>>>How Test 1. /org/bluez/Devices, device up $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Devi= ces org.bluez.Devices.Up 2. /org/bluez/Manager, Device list $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Mana= ger org.bluez.Manager.DeviceList comment: This service returns an array of devices. The reply signature is "a(ss)", where the first string is the device name(eg: hci0, hci1) and the second string is the bluetooth address. You have to develop a python client or a "c" client to see the content. 3. /org/bluez/Manager/default/Controller, Inquiry $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.Inquiry byte:4 byte:10 uint16:0 or $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/hci0/Controller org.bluez.Manager.Inquiry byte:4 byte:10 uint16:0 comment: This service returns an array of devices. The reply signature is "a(suq)", where the first string is the bt address, the snd is the class an= d the last is the clock offset. You have to develop a python client or a "c" client to see the content. 4. /org/bluez/Manager/default/Controller, Periodic Inquiry $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.PeriodicInquirybyte:4 byte:27 byte:49 or $dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/hci0/Controller org.bluez.Manager.PeriodicInquiry byte:4 byte:27 byte:49 5. /org/bluez/Manager/default/Controller, Cancel Periodic Inquiry dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.CancelPeriodic or dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/hci0/Controller org.bluez.Manager.CancelPeriodic 6. /org/bluez/Manager/default/Controller, RoleSwitch dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.RoleSwitchstring:AA:AA:AA:AA:AA:AA byte:1 -- --------------------------------------------------------- Claudio Takahasi Nokia's Institute of Technology - INdT claudio.takahasi@indt.org.br ------=_Part_6643_7404313.1128104566002 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi folks/Marcel,

The patch is attached. The basic structure to start the development of the = "sdp", "network", "serial", ... was added. There are a lot not implemented methods.

Regards,
Claudio.

>>>>Main Features
1. added multiple bt adapter support
2. added the structures to support profiles
3. Modified paths to "/org/bluez/Devices" and "/org/bluez/Ma= nager". Where "Devices" is going to provide
   device configuration services currently provided by hciconfig = tool. The "Manager" will handle
   services related to connection establishment and setup, includ= ing profiles, sdp and device discovery.

>>>>Next Action
1. Move the functions to to suitable file names( eg: dbus-mgr.c and dbus-de= v.c)
2. Define the device based path name.


>>>>How Test
1. /org/bluez/Devices, device up
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Devi= ces org.bluez.Devices.Up

2. /org/bluez/Manager, Device list
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Mana= ger org.bluez.Manager.DeviceList

comment: This service returns an array of devices. The reply signature is "a(ss)", where the first string is the device name(eg: hci0, h= ci1) and the second string is the bluetooth address. You have to develop a python client or a "c" client to see the content.

3. /org/bluez/Manager/default/Controller, Inquiry
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.Inquiry byte:4 byte:10 uint16:0
or
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/hci0/Controller org.bluez.Manager.Inquiry byte:4 byte:10 uint16:0

comment: This service returns an array of devices. The reply signature is "a(suq)", where the first string is the bt address, the snd is= the class and the last is the clock offset. You have to develop a python client or a "c" client to see the content.

4. /org/bluez/Manager/default/Controller, Periodic Inquiry
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.PeriodicInquiry byte:4 byte:27 byte:49
or
$dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/hci0/Controller org.bluez.Manager.PeriodicInquiry byte:4 byte:27 byte:49

5. /org/bluez/Manager/default/Controller, Cancel Periodic Inquiry
dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manag= er/default/Controller org.bluez.Manager.CancelPeriodic
or
dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manag= er/hci0/Controller org.bluez.Manager.CancelPeriodic
6. /org/bluez/Manager/default/Controller, RoleSwitch
dbus-send --system --dest=3Dorg.bluez --type=3Dmethod_call /org/bluez/Manager/default/Controller org.bluez.Manager.RoleSwitch string:AA:AA:AA:AA:AA:AA byte:1



--
---------------------------------------------------------
Cla= udio Takahasi
Nokia's Institute of Technology - INdT
claudio.takahasi@indt.org.br
------=_Part_6643_7404313.1128104566002-- ------=_Part_6642_12528200.1128104566002 Content-Type: application/octet-stream; name="hcid_dbus_0009.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hcid_dbus_0009.patch" LS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvZGJ1cy1pbnRlcm5hbC5oCTE5NjktMTItMzEg MjE6MDA6MDAuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC9oY2lkL2Ri dXMtaW50ZXJuYWwuaAkyMDA1LTA5LTMwIDEwOjUyOjQwLjAwMDAwMDAwMCAtMDMwMApAQCAtMCww ICsxLDgyIEBACisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBm b3IgTGludXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgIFF1YWxjb21tIEluY29y cG9yYXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDAzICBNYXhpbSBLcmFzbnlhbnNreSA8 bWF4a0BxdWFsY29tbS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgIE1hcmNlbCBI b2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsKKyAqCisgKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqICBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRI SVJEIFBBUlRZIFJJR0hUUy4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgQ0xBSU0sIE9SIEFO WSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFH RVMgCisgKiAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQ Uk9GSVRTLCBXSEVUSEVSIElOIEFOIAorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIAorICogIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisg KgorICogIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVO VCBPRiBBTlkgUEFURU5UUywgCisgKiAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBS SUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICogIFNPRlRXQVJFIElTIERJU0NMQUlN RUQuCisgKgorICoKKyAqICAkSWQ6IGRidXMtaW50ZXJuYWwuaCx2IDAuMSAyMDA1LzA5LzE2IDA4 OjAwOjAwIGhvbHRtYW5uIEV4cCAkCisgKi8KKyAKKyNpZm5kZWYgX19IX0JMVUVaX0RCVVNfSU5U RVJOQUxfSF9fCisjZGVmaW5lIF9fSF9CTFVFWl9EQlVTX0lOVEVSTkFMX0hfXworCisjaWZkZWYg SEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZGJ1 cy9kYnVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgREVWSUNFX0lEX0xFTkdUSCAgICg0KQorCisjZGVm aW5lIEJMVUVUT09USF9ERVZJQ0VfTkFNRV9MRU4gICAgKDE4KQorI2RlZmluZSBCTFVFVE9PVEhf REVWSUNFX0FERFJfTEVOICAgICgxOCkKKworI2RlZmluZSBNQVhfUEFUSF9MRU5HVEggICAoNjQp CisKKworCit0eXBlZGVmIERCdXNNZXNzYWdlKiAoc2VydmljZV9oYW5kbGVyX2Z1bmNfdCkoREJ1 c01lc3NhZ2UgKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50OF90ICByZWdpc3Rlcl9mdW5jdGlvbl90 KERCdXNDb25uZWN0aW9uICpjb25uLCB1aW50OF90IGRmdF9yZWcsIHVpbnQxNl90IGlkKTsKK3R5 cGVkZWYgaW50OF90ICB1bnJlZ2lzdGVyX2Z1bmN0aW9uX3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4s IHVpbnQ4X3QgdW5yZWdfZGZ0LCB1aW50MTZfdCBpZCk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJ Y29uc3QgY2hhciAgICAgICAgICAgICAqbmFtZTsKKwlzZXJ2aWNlX2hhbmRsZXJfZnVuY190ICpo YW5kbGVyX2Z1bmM7CisJY29uc3QgY2hhciAgICAgICAgICAgICAqc2lnbmF0dXJlOworfXNlcnZp Y2VfdGFibGVfdDsKKwordHlwZWRlZiBjb25zdCBzZXJ2aWNlX3RhYmxlX3QqIGdldF9zdmNfdGFi bGVfZnVuY190KHZvaWQpOwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJCSpuYW1lOwor CXVpbnQ4X3QJCQlzdGF0dXM7IC8qIDE6YWN0aXZlICAwOmRpc2FibGVkICovCisJdWludDhfdAkJ CWRmdF9yZWc7IC8qIGRmdCBwYXRoIHJlZ2lzdGVyZWQgKi8KKwlyZWdpc3Rlcl9mdW5jdGlvbl90 ICAgICAqcmVnX2Z1bmM7CisJdW5yZWdpc3Rlcl9mdW5jdGlvbl90ICAgKnVucmVnX2Z1bmM7CisJ Z2V0X3N2Y190YWJsZV9mdW5jX3QgKmdldF9zdmNfdGFibGU7IC8qIHJldHVybiB0aGUgc2Vydmlj ZSB0YWJsZSAqLworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpcHJvZmlsZV9vYmpfcGF0aF9kYXRh X3Q7CisKKy8qIEQtQnVzIE1hbmFnZXIgZnVuY3Rpb25zICovCitnYm9vbGVhbiBtZ3JfZGJ1c19y ZWdfZGV2aWNlX3BhdGhzKHVpbnQxNl90IGlkKTsKK2dib29sZWFuIG1ncl9kYnVzX3VucmVnX2Rl dmljZV9wYXRocyh1aW50MTZfdCBpZCk7CisKKy8qIEhDSSBmdW5jdGlvbnMgKi8KK2NvbnN0IHNl cnZpY2VfdGFibGVfdCAqZ2V0X2hjaV90YWJsZSh2b2lkKTsKK2ludDhfdCAgaGNpX2RidXNfcmVn X29ial9wYXRoKERCdXNDb25uZWN0aW9uICpjb25uLCB1aW50OF90IGRmdF9yZWcsIHVpbnQxNl90 IGlkKTsKK2ludDhfdCAgaGNpX2RidXNfdW5yZWdfb2JqX3BhdGgoREJ1c0Nvbm5lY3Rpb24gKmNv bm4sIHVpbnQ4X3QgdW5yZWdfZGZ0LCB1aW50MTZfdCBpZCk7CisKKworI2VuZGlmIC8vX19IX0JM VUVaX0RCVVNfSU5URVJOQUxfSF9fCi0tLSBibHVlei11dGlscy1jdnMub3JpZy9oY2lkL2hjaWQu aAkyMDA1LTA5LTIzIDE0OjA5OjI4LjAwMDAwMDAwMCAtMDMwMAorKysgYmx1ZXotdXRpbHMtY3Zz LWhjaWQvaGNpZC9oY2lkLmgJMjAwNS0wOS0yNyAxNzoxMzo0NS4wMDAwMDAwMDAgLTAzMDAKQEAg LTEyMiw2ICsxMjIsNyBAQAogCiAjaWZkZWYgRU5BQkxFX0RCVVMKIGdib29sZWFuIGhjaWRfZGJ1 c19pbml0KHZvaWQpOwordm9pZCBoY2lkX2RidXNfZXhpdCh2b2lkKTsKIHZvaWQgaGNpZF9kYnVz X3JlcXVlc3RfcGluKGludCBkZXYsIHN0cnVjdCBoY2lfY29ubl9pbmZvICpjaSk7CiB2b2lkIGhj aWRfZGJ1c19pbnF1aXJ5X3N0YXJ0KGJkYWRkcl90ICpsb2NhbCk7CiB2b2lkIGhjaWRfZGJ1c19p bnF1aXJ5X2NvbXBsZXRlKGJkYWRkcl90ICpsb2NhbCk7Ci0tLSBibHVlei11dGlscy1jdnMub3Jp Zy9oY2lkL2RidXMuaAkxOTY5LTEyLTMxIDIxOjAwOjAwLjAwMDAwMDAwMCAtMDMwMAorKysgYmx1 ZXotdXRpbHMtY3ZzLWhjaWQvaGNpZC9kYnVzLmgJMjAwNS0wOS0zMCAxNDo1NDoxMy4wMDAwMDAw MDAgLTAzMDAKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKgorICogIEJsdWVaIC0gQmx1ZXRvb3Ro IHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAw MSAgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgIE1h eGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIw MDItMjAwNSAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICoKKyAqCisg KiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOworICoKKyAqICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogIE9SIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgorICogIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkK KyAqICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTLCBPUiBBTlkgREFNQUdFUyAKKyAqICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg T0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCisgKiAgQUNUSU9OIE9GIENP TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQg T0YgCisgKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg VEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElU WSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKKyAqICBDT1BZUklHSFRTLCBUUkFE RU1BUktTIE9SIE9USEVSIFJJR0hUUywgUkVMQVRJTkcgVE8gVVNFIE9GIFRISVMgCisgKiAgU09G VFdBUkUgSVMgRElTQ0xBSU1FRC4KKyAqCisgKgorICogICRJZDogZGJ1cy5oLHYgMC4xIDIwMDUv MDkvMTYgMDg6MDA6MDAgaG9sdG1hbm4gRXhwICQKKyAqLworIAorI2lmbmRlZiBfX0hfQkxVRVpf REJVU19IX18KKyNkZWZpbmUgX19IX0JMVUVaX0RCVVNfSF9fCisKKyNkZWZpbmUgX19FTkRfU0lH X18gREJVU19UWVBFX0lOVkFMSURfQVNfU1RSSU5HCisKKy8qIGJsdWV0b290aGQgQnVzIG5hbWUg Ki8KKyNkZWZpbmUgQkxVRVpfREJVU19OQU1FCQkJIm9yZy5ibHVleiIKKyNkZWZpbmUgSENJX0RG VF9ERVZJQ0VfTkFNRQkJImRlZmF1bHQiCisjZGVmaW5lIEhDSV9ERVZJQ0VfTkFNRQkJCSJoY2ki CisKKyNkZWZpbmUgQkxVRVpfREJVU19ERVZTX1BBVEgJCQkiL29yZy9ibHVlei9EZXZpY2VzIgor I2RlZmluZSBCTFVFWl9EQlVTX0RFVlNfSU5URVJGQUNFCQlCTFVFWl9EQlVTX05BTUUiLkRldmlj ZXMiCisKKyNkZWZpbmUgQkxVRVpfREJVU19NR1JfUEFUSAkJCSIvb3JnL2JsdWV6L01hbmFnZXIi CisjZGVmaW5lIEJMVUVaX0RCVVNfTUdSX0lOVEVSRkFDRQkJQkxVRVpfREJVU19OQU1FIi5NYW5h Z2VyIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICBCbHVlWiBELUJ1cyBEZXZpY2Ugc2Vydmlj ZSBkZWZpbml0aW9ucyAiL29yZy9ibHVlei9EZXZpY2UiCisgKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisj ZGVmaW5lIERFVl9VUF9SRVEJCQkiVXAiCisjZGVmaW5lIERFVl9ET1dOX1JFUQkJCSJEb3duIgor I2RlZmluZSBERVZfUkVTRVRfUkVRCQkJIlJlc2V0IgorI2RlZmluZSBERVZfU0VUX1BST1BFUlRZ X1JFUQkJIlNldFByb3BlcnR5IgorI2RlZmluZSBERVZfR0VUX1BST1BFUlRZX1JFUQkJIkdldFBy b3BlcnR5IgorCisjZGVmaW5lIERFVl9VUF9SRVFfU0lHTkFUVVJFICAgICAgICAgICAgCV9fRU5E X1NJR19fCisjZGVmaW5lIERFVl9ET1dOX1JFUV9TSUdOQVRVUkUgICAgICAgICAgICAJX19FTkRf U0lHX18KKyNkZWZpbmUgREVWX1JFU0VUX1JFUV9TSUdOQVRVUkUgICAgICAgICAgICAJX19FTkRf U0lHX18KKyNkZWZpbmUgREVWX1NFVF9QUk9QRVJUWV9SRVFfU0lHTkFUVVJFICAgICAgICAgICAg CV9fRU5EX1NJR19fCisjZGVmaW5lIERFVl9HRVRfUFJPUEVSVFlfUkVRX1NJR05BVFVSRSAgICAg ICAgICAgIAlfX0VORF9TSUdfXworCisKKy8vVE9ETyBhZGQgdGhlIG90aGVyIGhjaWNvbmZpZyBm ZWF0dXJlcworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICBCbHVlWiBELUJ1cyBNYW5hZ2VyIHNl cnZpY2UgZGVmaW5pdGlvbnMgIi9vcmcvYmx1ZXovTWFuYWdlciIKKyAqPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ki8KKyAKKyAvKiA9PT09PSBNYW5hZ2VyIGRlZmluaXRpb25zLCBzZXJ2aWNlcyB1bmRlciBCTFVF Wl9EQlVTX0RFVlNfUEFUSCA9PT09PSAqLworI2RlZmluZSBNR1JfR0VUX0RFVl9SRVEJCQkiRGV2 aWNlTGlzdCIKKyNkZWZpbmUgTUdSX0lOSVRfUkVRCQkJIkluaXQiCisKKy8qIEVuYWJsZS9EaXNh YmxlIHNlcnZpY2VzIGNvbnRyb2xsZXIsIHBhbiwgc2VyaWFsLCAuLi4gKi8KKyNkZWZpbmUgTUdS X0VOQUJMRV9SRVEJCQkiRW5hYmxlIgorI2RlZmluZSBNR1JfRElTQUJMRV9SRVEJCQkiRGlzYWJs ZSIKKworLy9zaWduYXR1cmVzCisjZGVmaW5lIE1HUl9HRVRfREVWX1JFUV9TSUdOQVRVUkUgICAg ICAgICAgICAJX19FTkRfU0lHX18KKworLyogeXlhKHNzKSovCisjZGVmaW5lIE1HUl9HRVRfREVW X1JFUExZX1NJR05BVFVSRQkJCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVT X1RZUEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0FSUkFZX0FTX1NUUklOR1wK KwkJCQkJCQlIQ0lfREVWSUNFX1NUUlVDVF9TSUdOQVRVUkVcCisJCQkJCQkJX19FTkRfU0lHX18K KyAKKy8qID09PT09IEhDSSBkZWZpbml0aW9ucyA9PT09PSAqLworI2RlZmluZSBCTFVFWl9EQlVT X0hDSQkJCSJDb250cm9sbGVyIgorI2RlZmluZSBCTFVFWl9EQlVTX0hDSV9QQVRICQlCTFVFWl9E QlVTX01HUl9QQVRIIi8iQkxVRVpfREJVU19IQ0kKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfSU5U RVJGQUNFCUJMVUVaX0RCVVNfTUdSX0lOVEVSRkFDRSIuIkJMVUVaX0RCVVNfSENJCisKKy8vSENJ IHNpZ25hbHMKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9TVEFSVAkJIklucXVpcnlT dGFydFNpZyIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9DT01QTEVURQkJIklucXVp cnlDb21wbGV0ZVNpZyIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9SRVNVTFQJCSJJ bnF1aXJ5UmVzdWx0U2lnIgorI2RlZmluZSBCTFVFWl9EQlVTX0hDSV9TSUdfUkVNT1RFX05BTUUJ CSJSZW1vdGVOYW1lU2lnIgorCisvL0hDSSBQcm92aWRlZCBzZXJ2aWNlcworI2RlZmluZSBIQ0lf UEVSSU9ESUNfSU5RX1JFUQkJCSJQZXJpb2RpY0lucXVpcnkiCisjZGVmaW5lIEhDSV9DQU5DRUxf UEVSSU9ESUNfSU5RX1JFUQkJIkNhbmNlbFBlcmlvZGljIgorI2RlZmluZSBIQ0lfSU5RX1JFUQkJ CQkiSW5xdWlyeSIKKyNkZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUQkJCSJSb2xlU3dpdGNoIgor CisKKyNkZWZpbmUgSENJX1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFCQkgICAgICAgIERCVVNf VFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfQllURV9BU19TVFJJTkdcCisJ CQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5EX1NJR19fCisJCQkJ CQkJCisjZGVmaW5lIEhDSV9DQU5DRUxfUEVSSU9ESUNfSU5RX1JFUV9TSUdOQVRVUkUJCV9fRU5E X1NJR19fCisKKyNkZWZpbmUgSENJX0lOUV9SRVFfU0lHTkFUVVJFICAgICAgICAgICAgICAgIAkg ICAgCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlEQlVTX1RZUEVfQllURV9BU19T VFJJTkdcCisJCQkJCQkJREJVU19UWVBFX1VJTlQxNl9BU19TVFJJTkdcCisJCQkJCQkJX19FTkRf U0lHX18KKwkJCQkJCQkKKyNkZWZpbmUgSENJX1JPTEVfU1dJVENIX1JFUV9TSUdOQVRVUkUgICAg ICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkdcCisJCQkJCQkJREJVU19U WVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5EX1NJR19fCisJCQkJCQkJCisjZGVmaW5l IEhDSV9ERVZJQ0VfU1RSVUNUX1NJR05BVFVSRQkJREJVU19TVFJVQ1RfQkVHSU5fQ0hBUl9BU19T VFJJTkdcCisJCQkJCQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJCQkJCURCVVNfVFlQ RV9TVFJJTkdfQVNfU1RSSU5HXAorCQkJCQkJREJVU19TVFJVQ1RfRU5EX0NIQVJfQVNfU1RSSU5H CisKKyNkZWZpbmUgSENJX0lOUV9SRVBMWV9TSUdOQVRVUkUJCQkJREJVU19TVFJVQ1RfQkVHSU5f Q0hBUl9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX1NUUklOR19BU19TVFJJTkdcCisJCQkJ CQkJREJVU19UWVBFX1VJTlQzMl9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX1VJTlQxNl9B U19TVFJJTkdcCisJCQkJCQkJREJVU19TVFJVQ1RfRU5EX0NIQVJfQVNfU1RSSU5HXAorCQkJCQkJ CV9fRU5EX1NJR19fCisKKworLyogPT09PT0gICAgU0RQIGRlZmluaXRpb25zICAgID09PT09ICov CisjZGVmaW5lIEJMVUVaX0RCVVNfU0RQIAkJIlNlcnZpY2UiCisvL0RlZmF1bHQgcGF0aCBmb3Ig U2VydmljZQorI2RlZmluZSBCTFVFWl9EQlVTX1NEUF9QQVRICUJMVUVaX0RCVVNfTUdSX1BBVEgi LyJIQ0lfREZUX0RFVklDRV9OQU1FIi8iQkxVRVpfREJVU19TRFAKKy8vU0RQIHNpZ25hbHMKKy8v U0RQIFByb3ZpZGVkIHNlcnZpY2VzCisvL1NEUCBzaWduYXR1cmVzCisKKworLyogPT09PT0gICBS RkNPTU0gZGVmaW5pdGlvbnMgID09PT09ICovCisjZGVmaW5lIEJMVUVaX0RCVVNfU0VSSUFMCQki U2VyaWFsIgorLy9EZWZhdWx0IHBhdGggZm9yIFNlcmlhbAorI2RlZmluZSBCTFVFWl9EQlVTX1NF UklBTF9QQVRICUJMVUVaX0RCVVNfTUdSX1BBVEgiLyJIQ0lfREZUX0RFVklDRV9OQU1FIi8iQkxV RVpfREJVU19TRVJJQUwKKy8vUkZDT01NIHNpZ25hbHMKKy8vUkZDT01NIFByb3ZpZGVkIHNlcnZp Y2VzCisvL1JGQ09NTSBzaWduYXR1cmVzCisKKworLyogPT09PT0gICAgUEFOIGRlZmluaXRpb25z ICAgID09PT09ICovCisjZGVmaW5lIEJMVUVaX0RCVVNfTkVUIAkJIk5ldHdvcmsiCisvL0RlZmF1 bHQgcGF0aCBmb3IgTmV0d29yaworI2RlZmluZSBCTFVFWl9EQlVTX05FVF9QQVRICUJMVUVaX0RC VVNfTUdSX1BBVEgiLyJIQ0lfREZUX0RFVklDRV9OQU1FIi8iQkxVRVpfREJVU19ORVQKKy8vUEFO IHNpZ25hbHMKKy8vUEFOIFByb3ZpZGVkIHNlcnZpY2VzCisvL1BBTiBzaWduYXR1cmVzCisKKy8q ID09PT09ICAgIEhJRCBkZWZpbml0aW9ucyAgICA9PT09PSAqLworI2RlZmluZSBCTFVFWl9EQlVT X0hJRCAJCSJISUQiCisvL0RlZmF1bHQgcGF0aCBmb3IgSElECisjZGVmaW5lIEJMVUVaX0RCVVNf SElEX1BBVEgJQkxVRVpfREJVU19NR1JfUEFUSCIvIkhDSV9ERlRfREVWSUNFX05BTUUiLyJCTFVF Wl9EQlVTX0hJRAorCisvL0hJRCBzaWduYWxzCisvL0hJRCBQcm92aWRlZCBzZXJ2aWNlcworLy9I SUQgc2lnbmF0dXJlcworCisKKy8qID09PT09IENvbW1vbiBFcnJvciBtZXNzYWdlcyBvZiBvcmcu Ymx1ZXouID09PT09Ki8KKyNkZWZpbmUgQkxVRVpfREJVU19FUlJfRkFJTEVEICAgICAgICAgICAg ICBCTFVFWl9EQlVTX05BTUUiLkVGYWlsZWQiCisjZGVmaW5lIEJMVUVaX0RCVVNfRVJSX05PX01F TU9SWSAgICAgICAgICAgQkxVRVpfREJVU19OQU1FIi5FTm9NZW1vcnkiCisvL1RPRE8gV2hhdCBh cmUgdGhlIG90aGVyIGVycm9yIHR5cGVzPworCisKKy8qIEJMVUVaX0RCVVNfRVJSX0ZBSUxFRAor ICogRUZhaWxlZCBlcnJvciBtZXNzYWdlcyBzaWduYXR1cmUgaXMgOiBzbmkKKyAqIFdoZXJlIHRo ZSBmaXJzdCBhcmd1bWVudCBpcyBhIHN0cmluZyhlcnJvciBtZXNzYWdlIGRlc2NyaXB0aW9uKSwK KyAqIHRoZSBzZWNvbmQgaXMgYSB1aW50MTYgdGhhdCBjb250YWlucyB0aGUgZXJyb3IgY2xhc3Mo c3lzdGVtLCBkYnVzIG9yIGhjaSkuCisgKiBUaGUgbGFzdCBhcmd1bWVudCBpcyBhIGludDMyIHRo YXQgY29udGFpbnMgdGhlIGVycm9yIGNvZGUoZXJybm8gCisgKiBmb3Igc3lzdGVtIGVycm9ycywg YSBkYnVzIGVycm9yIGNvZGUgZGVmaW5lZCBiZWxvdyBvciBhIGhjaSBlcnJvcikuCisgKiBGb3Ig aGNpIGVycm9yIHNlZSB0aGUgYmx1ZXRvb3RoIHNwZWNpZmljYXRpb24uCisgKi8KKyAKKy8qIGZp cnN0IGFyZ3VtZW50IG9mIHRoZSBlcnJvciBtc2cgKi8KKyNkZWZpbmUgQkxVRVpfRUNMQVNTX1NZ U1RFTSAgICgweDAxKQorI2RlZmluZSBCTFVFWl9FQ0xBU1NfREJVUyAgICAgKDB4MDIpCisjZGVm aW5lIEJMVUVaX0VDTEFTU19IQ0kgICAgICAoMHgwMykgLyogc2VlIEJsdWV0b290aCBlcnJvciBj b2RlICovCisKKy8qIEQtQnVzIGVycm9yIGNvZGUgKHNlY29uZCBhcmd1bWVudCBvZiB0aGUgZXJy b3IgbXNnKSovCisjZGVmaW5lIEJMVUVaX0VEQlVTX1VOS05PV05fTUVUSE9EICAgICAoMHgwMSkK KyNkZWZpbmUgQkxVRVpfRURCVVNfV1JPTkdfU0lHTkFUVVJFICAgICgweDAyKQorI2RlZmluZSBC TFVFWl9FREJVU19XUk9OR19QQVJBTSAgICAgICAgKDB4MDMpCisjZGVmaW5lIEJMVUVaX0VEQlVT X1JFQ09SRF9OT1RfRk9VTkQgICAoMHgwNCkKKworLyogQkxVRVpfREJVU19FUlJfTk9fTUVNT1JZ ICovCisjZGVmaW5lIEJMVUVaX0RCVVNfRVJSX05PX01FTU9SWV9TVFIJIk5vIG1lbW9yeSIKKwor CisjZW5kaWYgLypfX0hfQkxVRVpfREJVU19IX18qLwotLS0gYmx1ZXotdXRpbHMtY3ZzLm9yaWcv aGNpZC9kYnVzLmMJMjAwNS0wOS0yMyAxNDowOToyOC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV6 LXV0aWxzLWN2cy1oY2lkL2hjaWQvZGJ1cy5jCTIwMDUtMDktMzAgMTQ6NTc6NDMuMDAwMDAwMDAw IC0wMzAwCkBAIC0zMyw2ICszMyw5IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvaW9j dGwuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgog CkBAIC00NSw4ICs0OCwxMiBAQAogI2luY2x1ZGUgImdsaWItZWN0b215LmgiCiAKICNpbmNsdWRl ICJoY2lkLmgiCisjaW5jbHVkZSAiZGJ1cy5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIK KyNpbmNsdWRlICJ1dGlsLmgiCiAKIHN0YXRpYyBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsK K3N0YXRpYyBpbnQ4X3QgbnVtX2FkYXB0ZXJzID0gMDsKIAogI2RlZmluZSBUSU1FT1VUICgzMCAq IDEwMDApCQkvKiAzMCBzZWNvbmRzICovCiAKQEAgLTU1LDEzICs2MiwxNDQgQEAKICNkZWZpbmUg UkVRVUVTVF9OQU1FICJQaW5SZXF1ZXN0IgogI2RlZmluZSBQQVRIX05BTUUgIi9vcmcvYmx1ZXov UGluQWdlbnQiCiAKLSNkZWZpbmUgV1JPTkdfQVJHU19FUlJPUiAib3JnLmJsdWV6LkVycm9yLldy b25nQXJncyIKIAogc3RydWN0IHBpbl9yZXF1ZXN0IHsKIAlpbnQgZGV2OwogCWJkYWRkcl90IGJk YTsKIH07CiAKKworLyoKKyAqIEQtQnVzIGVycm9yIG1lc3NhZ2VzIGZ1bmN0aW9ucyBhbmQgZGVj bGFyYXRpb25zLgorICogVGhpcyBzZWN0aW9uIHNob3VsZCBiZSBtb3ZlZCB0byBhIGNvbW1vbiBm aWxlIAorICogaW4gdGhlIGZ1dHVyZQorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgIHsKKwl1aW50 OF90IGNvZGU7CisJY29uc3QgY2hhciAqc3RyOworfWJsdWV6X2Vycm9yX3Q7CisKK3N0YXRpYyBj b25zdCBibHVlel9lcnJvcl90IGVycm9yX2FycmF5W10gPSB7CisJeyBCTFVFWl9FREJVU19VTktO T1dOX01FVEhPRCwgICAiTWV0aG9kIG5vdCBmb3VuZCJ9LAorCXsgQkxVRVpfRURCVVNfV1JPTkdf U0lHTkFUVVJFLCAgIldyb25nIG1ldGhvZCBzaWduYXR1cmUifSwKKwl7IEJMVUVaX0VEQlVTX1dS T05HX1BBUkFNLCAgICAgICJJbnZhbGlkIHBhcmFtZXRlcnMifSwKKwl7IEJMVUVaX0VEQlVTX1JF Q09SRF9OT1RfRk9VTkQsICJObyByZWNvcmQgZm91bmQifSwKKwl7IDAsIE5VTEwgfQorfTsKKwor c3RhdGljIGNvbnN0IGNoYXIgKmJsdWV6X2RidXNfZXJyb3JfdG9fc3RyKGNvbnN0IHVpbnQxNl90 IGVjbGFzcywgY29uc3QgaW50MzJfdCBlY29kZSkgCit7CisJY29uc3QgYmx1ZXpfZXJyb3JfdCAq cHRyOworCQorCWlmIChlY2xhc3MgPT0gQkxVRVpfRUNMQVNTX1NZU1RFTSkgeworCQlyZXR1cm4g c3RyZXJyb3IoZWNvZGUpOworCX0gZWxzZSB7IC8qIEJMVUVaX0VDTEFTU19EQlVTICovCisJCQor CQlmb3IgKHB0ciA9IGVycm9yX2FycmF5OyBwdHItPmNvZGU7IHB0cisrKSB7CisJCQlpZihwdHIt PmNvZGUgPT0gZWNvZGUpIHsKKwkJCQlyZXR1cm4gcHRyLT5zdHI7CisJCQl9CisJCX0KKwl9CisJ cmV0dXJuIE5VTEw7Cit9CisKK0RCdXNNZXNzYWdlICpibHVlel9uZXdfZmFpbHVyZV9tc2coREJ1 c01lc3NhZ2UgKm1zZywgY29uc3QgdWludDE2X3QgZWNsYXNzLCBjb25zdCBpbnQzMl90IGVjb2Rl KQoreworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7 CisJY29uc3QgY2hhciAqZXJyb3JfbXNnID0gTlVMTDsKKwkKKwllcnJvcl9tc2cgPSBibHVlel9k YnVzX2Vycm9yX3RvX3N0cihlY2xhc3MsIGVjb2RlKTsKKwkKKwlpZiAoZXJyb3JfbXNnKSB7CisJ CisJCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEJMVUVaX0RCVVNfRVJSX0ZB SUxFRCwgZXJyb3JfbXNnKTsKKwkKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVw bHksICZpdGVyKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVT X1RZUEVfVUlOVDE2ICwmZWNsYXNzKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2lj KCZpdGVyLCBEQlVTX1RZUEVfSU5UMzIgLCZlY29kZSk7CisJfQorCQorCXJldHVybiByZXBseTsK K30KKworLyoKKyAqIE9iamVjdCBwYXRoIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rpb25zIAor ICoKKyAqLworc3RhdGljIHByb2ZpbGVfb2JqX3BhdGhfZGF0YV90IG9ial9wYXRoX3RhYmxlW10g PSB7CisJe0JMVUVaX0RCVVNfSENJLCAgICAgICAxLCAwLCBoY2lfZGJ1c19yZWdfb2JqX3BhdGgs ICAgIGhjaV9kYnVzX3VucmVnX29ial9wYXRoLCAgICBnZXRfaGNpX3RhYmxlICB9LAorCS8qeyBC TFVFWl9EQlVTX1NEUCwgICAgMCwgMCwgc2RwX2RidXNfcmVnX29ial9wYXRoLCAgICBzZHBfZGJ1 c191bnJlZ19vYmpfcGF0aCwgICAgTlVMTCAgfSwqLworCS8qeyBCTFVFWl9EQlVTX05FVCwgICAg MCwgMCwgbmV0X2RidXNfcmVnX29ial9wYXRoLCAgICBuZXRfZGJ1c191bnJlZ19vYmpfcGF0aCwg ICAgTlVMTCAgfSwqLworCS8qeyBCTFVFWl9EQlVTX0hJRCwgICAgMCwgMCwgaGlkX2RidXNfcmVn X29ial9wYXRoLCAgICBoaWRfZGJ1c191bnJlZ19vYmpfcGF0aCAsICAgTlVMTCAgfSwqLworCS8q eyBCTFVFWl9EQlVTX1NFUklBTCwgMCwgMCwgc2VyaWFsX2RidXNfcmVnX29ial9wYXRoLCBzZXJp YWxfZGJ1c191bnJlZ19vYmpfcGF0aCwgTlVMTCAgfSwqLworCXtOVUxMLCAwLCAwLCBOVUxMLCBO VUxMLCBOVUxMfQorfTsKKworLyoKKyAqIERldmljZSBNZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25z IG9iamVjdCB0YWJsZSBkZWNsYXJhdGlvbgorICovCitzdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQg bXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRh dGEpOworCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9nZXRfZGV2aWNlc19yZXEoREJ1c01l c3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9ub3Rf aW1wbGVtZW50ZWRfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworCitzdGF0aWMg Y29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgb2JqX3Z0YWJsZSA9IHsKKwlOVUxMLAorCSZtc2df ZnVuYywKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMCit9OworCisvKgorICogU2Vydmlj ZSBwcm92aWRlZCB1bmRlciB0aGUgcGF0aCBCTFVFWl9EQlVTX0RFVlNfUEFUSAorICogVE9ETyBh ZGQgdGhlIGhhbmRsZXJzCisgKi8KK3N0YXRpYyBjb25zdCBzZXJ2aWNlX3RhYmxlX3QgZGV2X3Nl cnZpY2VzW10gPSB7CisJe0RFVl9VUF9SRVEsIAkJaGFuZGxlX25vdF9pbXBsZW1lbnRlZF9yZXEs CURFVl9VUF9SRVFfU0lHTkFUVVJFfSwKKwl7REVWX0RPV05fUkVRLCAJCWhhbmRsZV9ub3RfaW1w bGVtZW50ZWRfcmVxLAlERVZfRE9XTl9SRVFfU0lHTkFUVVJFfSwKKwl7REVWX1JFU0VUX1JFUSwg CWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlERVZfUkVTRVRfUkVRX1NJR05BVFVSRSB9LAor CXtERVZfU0VUX1BST1BFUlRZX1JFUSwgCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlERVZf U0VUX1BST1BFUlRZX1JFUV9TSUdOQVRVUkUgfSwKKwl7REVWX0dFVF9QUk9QRVJUWV9SRVEsIAlo YW5kbGVfbm90X2ltcGxlbWVudGVkX3JlcSwJREVWX0dFVF9QUk9QRVJUWV9SRVFfU0lHTkFUVVJF IH0sCisJe05VTEwsIE5VTEwsIE5VTEx9Cit9OworCisvKgorICogTWFuYWdlciBNZXNzYWdlIGhh bmRsZXIgZnVuY3Rpb25zIG9iamVjdCB0YWJsZSBkZWNsYXJhdGlvbgorICoKKyAqLworc3RhdGlj IGNvbnN0IHNlcnZpY2VfdGFibGVfdCBtZ3Jfc2VydmljZXNbXSA9IHsKKwl7TUdSX0dFVF9ERVZf UkVRLAloYW5kbGVfZ2V0X2RldmljZXNfcmVxLAkJTUdSX0dFVF9ERVZfUkVRX1NJR05BVFVSRX0s CisJe01HUl9JTklUX1JFUSwgCQloYW5kbGVfbm90X2ltcGxlbWVudGVkX3JlcSwgCU5VTEwgfSwK Kwl7TUdSX0VOQUJMRV9SRVEsCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLCAJTlVMTCB9LAor CXtNR1JfRElTQUJMRV9SRVEsCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlOVUxMIH0sCisJ e05VTEwsCQkJaGFuZGxlX25vdF9pbXBsZW1lbnRlZF9yZXEsCU5VTEx9Cit9OworCisKKy8qCisg KiBIQ0kgTWFuYWdlciBNZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25zIG9iamVjdCB0YWJsZSBkZWNs YXJhdGlvbgorICoKKyAqLworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9zaWduYWxfZmls dGVyIChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7 CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3BlcmlvZGljX2lucV9yZXEoREJ1c01lc3Nh Z2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9jYW5jZWxf cGVyaW9kaWNfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBE QnVzTWVzc2FnZSogaGFuZGxlX2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7 CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9yb2xlX3N3aXRjaF9yZXEoREJ1c01lc3NhZ2Ug Km1zZywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBjb25zdCBzZXJ2aWNlX3RhYmxlX3QgaGNpX3Nl cnZpY2VzW10gPSB7CisJe0hDSV9QRVJJT0RJQ19JTlFfUkVRLAkJaGFuZGxlX3BlcmlvZGljX2lu cV9yZXEsCUhDSV9QRVJJT0RJQ19JTlFfUkVRX1NJR05BVFVSRX0sCisJe0hDSV9DQU5DRUxfUEVS SU9ESUNfSU5RX1JFUSwJaGFuZGxlX2NhbmNlbF9wZXJpb2RpY19pbnFfcmVxLAlIQ0lfQ0FOQ0VM X1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFfSwKKwl7SENJX1JPTEVfU1dJVENIX1JFUSwJCWhh bmRsZV9yb2xlX3N3aXRjaF9yZXEsCQlIQ0lfUk9MRV9TV0lUQ0hfUkVRX1NJR05BVFVSRX0sCisJ e0hDSV9JTlFfUkVRLAkJCWhhbmRsZV9pbnFfcmVxLAkJCUhDSV9JTlFfUkVRX1NJR05BVFVSRX0s CisJe05VTEwsCQkJCU5VTEwsCQkJCU5VTEx9Cit9OworCiBzdGF0aWMgdm9pZCByZXBseV9oYW5k bGVyX2Z1bmN0aW9uKERCdXNQZW5kaW5nQ2FsbCAqY2FsbCwgdm9pZCAqdXNlcl9kYXRhKQogewog CXN0cnVjdCBwaW5fcmVxdWVzdCAqcmVxID0gKHN0cnVjdCBwaW5fcmVxdWVzdCAqKSB1c2VyX2Rh dGE7CkBAIC0xNzAsOCArMzA4LDkgQEAKIAogCWJhc3dhcCgmdG1wLCBsb2NhbCk7IGxvY2FsX2Fk ZHIgPSBiYXRvc3RyKCZ0bXApOwogCi0JbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFs KCIvb3JnL2JsdWV6L0RldkFnZW50IiwKLQkJCQkib3JnLmJsdWV6LkRldkFnZW50IiwgIklucXVp cnlTdGFydCIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChCTFVFWl9EQlVT X0hDSV9QQVRILAorCQkJCQkgIEJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwgCisJCQkJCSAgQkxV RVpfREJVU19IQ0lfU0lHX0lOUV9TVEFSVCk7CiAJaWYgKG1lc3NhZ2UgPT0gTlVMTCkgewogCQlz eXNsb2coTE9HX0VSUiwgIkNhbid0IGFsbG9jYXRlIEQtQlVTIGlucXVpcnkgc3RhcnQgbWVzc2Fn ZSIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTIwNCw4ICszNDMsOSBAQAogCiAJYmFzd2FwKCZ0bXAs IGxvY2FsKTsgbG9jYWxfYWRkciA9IGJhdG9zdHIoJnRtcCk7CiAKLQltZXNzYWdlID0gZGJ1c19t ZXNzYWdlX25ld19zaWduYWwoIi9vcmcvYmx1ZXovRGV2QWdlbnQiLAotCQkJCSJvcmcuYmx1ZXou RGV2QWdlbnQiLCAiSW5xdWlyeUNvbXBsZXRlIik7CisJbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9u ZXdfc2lnbmFsKEJMVUVaX0RCVVNfSENJX1BBVEgsCisJCQkJQkxVRVpfREJVU19IQ0lfSU5URVJG QUNFLCAKKwkJCQlCTFVFWl9EQlVTX0hDSV9TSUdfSU5RX0NPTVBMRVRFKTsKIAlpZiAobWVzc2Fn ZSA9PSBOVUxMKSB7CiAJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgYWxsb2NhdGUgRC1CVVMgaW5x dWlyeSBjb21wbGV0ZSBtZXNzYWdlIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMjQxLDggKzM4MSw5 IEBACiAJYmFzd2FwKCZ0bXAsIGxvY2FsKTsgbG9jYWxfYWRkciA9IGJhdG9zdHIoJnRtcCk7CiAJ YmFzd2FwKCZ0bXAsIHBlZXIpOyBwZWVyX2FkZHIgPSBiYXRvc3RyKCZ0bXApOwogCi0JbWVzc2Fn ZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKCIvb3JnL2JsdWV6L0RldkFnZW50IiwKLQkJCQki b3JnLmJsdWV6LkRldkFnZW50IiwgIklucXVpcnlSZXN1bHQiKTsKKwltZXNzYWdlID0gZGJ1c19t ZXNzYWdlX25ld19zaWduYWwoQkxVRVpfREJVU19IQ0lfUEFUSCwKKwkJCQlCTFVFWl9EQlVTX0hD SV9JTlRFUkZBQ0UsIAorCQkJCUJMVUVaX0RCVVNfSENJX1NJR19JTlFfUkVTVUxUKTsKIAlpZiAo bWVzc2FnZSA9PSBOVUxMKSB7CiAJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgYWxsb2NhdGUgRC1C VVMgaW5xdWlyeSByZXN1bHQgbWVzc2FnZSIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTI4MCw4ICs0 MjEsOSBAQAogCWJhc3dhcCgmdG1wLCBsb2NhbCk7IGxvY2FsX2FkZHIgPSBiYXRvc3RyKCZ0bXAp OwogCWJhc3dhcCgmdG1wLCBwZWVyKTsgcGVlcl9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAotCW1l c3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgiL29yZy9ibHVlei9EZXZBZ2VudCIsCi0J CQkJIm9yZy5ibHVlei5EZXZBZ2VudCIsICJSZW1vdGVOYW1lIik7CisJbWVzc2FnZSA9IGRidXNf bWVzc2FnZV9uZXdfc2lnbmFsKEJMVUVaX0RCVVNfSENJX1BBVEgsCisJCQkJQkxVRVpfREJVU19I Q0lfSU5URVJGQUNFLAorCQkJCUJMVUVaX0RCVVNfSENJX1NJR19SRU1PVEVfTkFNRSk7CiAJaWYg KG1lc3NhZ2UgPT0gTlVMTCkgewogCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFsbG9jYXRlIEQt QlVTIHJlbW90ZSBuYW1lIG1lc3NhZ2UiKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0zODgsNiArNTMw LDggQEAKIHsKIAlEQnVzRXJyb3IgZXJyb3I7CiAKKwludW1fYWRhcHRlcnMgPSAwOworCQogCWRi dXNfZXJyb3JfaW5pdCgmZXJyb3IpOwogCiAJY29ubmVjdGlvbiA9IGRidXNfYnVzX2dldChEQlVT X0JVU19TWVNURU0sICZlcnJvcik7CkBAIC0zOTgsOCArNTQyLDc1NSBAQAogCQlyZXR1cm4gRkFM U0U7CiAJfQogCisJZGJ1c19idXNfcmVxdWVzdF9uYW1lKGNvbm5lY3Rpb24sIEJMVUVaX0RCVVNf TkFNRSwgCisJCQkgICAgICBEQlVTX05BTUVfRkxBR19QUk9ISUJJVF9SRVBMQUNFTUVOVCwgCisJ CQkgICAgICAmZXJyb3IpOworCQorCWlmIChkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgewor CQlzeXNsb2coTE9HX0VSUiwiRC1CdXMgRXJyb3I6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsKKwkJ ZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCS8vUmVn aXN0ZXJpbmcgdGhlIGRldmljZSBwYXRoCisJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJf b2JqZWN0X3BhdGgoY29ubmVjdGlvbiwgQkxVRVpfREJVU19ERVZTX1BBVEgsICZvYmpfdnRhYmxl LCBOVUxMKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMg b2JqZWN0IiwgQkxVRVpfREJVU19ERVZTX1BBVEgpOworCQlyZXR1cm4gRkFMU0U7CisJfSBlbHNl IHsKKwkJc3lzbG9nKExPR19JTkZPLCJyZWdpc3RlcmluZyAgLSAgcGF0aDolcyIsIEJMVUVaX0RC VVNfREVWU19QQVRIKTsJCisJfQorCisJLy9SZWdpc3RlcmluZyB0aGUgbWFuYWdlciBwYXRoCisJ CisJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoY29ubmVjdGlvbiwg QkxVRVpfREJVU19NR1JfUEFUSCwgJm9ial92dGFibGUsIE5VTEwpKSB7CisJCXN5c2xvZyhMT0df RVJSLCJEQlVTIGZhaWxlZCB0byByZWdpc3RlciAlcyBvYmplY3QiLCBCTFVFWl9EQlVTX01HUl9Q QVRIKTsKKwkJcmV0dXJuIEZBTFNFOworCX0gZWxzZSB7CisJCXN5c2xvZyhMT0dfSU5GTywicmVn aXN0ZXJpbmcgIC0gIHBhdGg6JXMiLCBCTFVFWl9EQlVTX01HUl9QQVRIKTsKKwl9CisKKworCWlm ICghZGJ1c19jb25uZWN0aW9uX2FkZF9maWx0ZXIgKGNvbm5lY3Rpb24sIGhjaV9zaWduYWxfZmls dGVyLCBOVUxMLCBOVUxMKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gYWRk IGZpbHRlciIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCQogCWRidXNfY29ubmVjdGlvbl9zZXRf d2F0Y2hfZnVuY3Rpb25zKGNvbm5lY3Rpb24sCiAJCWFkZF93YXRjaCwgcmVtb3ZlX3dhdGNoLCB3 YXRjaF90b2dnbGVkLCBOVUxMLCBOVUxMKTsKIAogCXJldHVybiBUUlVFOwogfQorCisvKgorICog QGJyaWVmIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyIGFsbCBzZXJ2 aWNlIGZvciAKKyAqIGVhY2ggbmV3IGhjaSBkZXZpY2UKKyAqIERldGFpbGVkIGRlc2NyaXB0aW9u OiBXaGVuIGEgSENJX0RFVl9VUCBldmVudCBpcyByZWNlaXZlZCBvciB0aGUKKyAqIGRhZW1vbiBp cyBpbml0aWFsaXplZCB0aGUgc2VydmljZSBwYXRocyBtdXN0IGJlIHJlZ2lzdGVyZWQuIGVnOgor ICogcGFuLCBzZHAsIGhjaSwgcmZjb21tIHBhdGhzLgorICogQHBhcmFtIGlkIGRldmljZSBpZAor ICogQHJldHVybiBUUlVFL0ZBTFNFCisgKi8gCitnYm9vbGVhbiBtZ3JfZGJ1c19yZWdfZGV2aWNl X3BhdGhzKHVpbnQxNl90IGlkKQoreworCXByb2ZpbGVfb2JqX3BhdGhfZGF0YV90ICpwdHIgPSBv YmpfcGF0aF90YWJsZTsKKwlpbnQ4X3QgcmV0ID0gMDsKKwkKKwlpZiAoY29ubmVjdGlvbikgewor CQlmb3IgKDtwdHItPm5hbWU7IHB0cisrKSB7CisJCQlyZXQgPSAocHRyLT5yZWdfZnVuYyhjb25u ZWN0aW9uLCBwdHItPmRmdF9yZWcsIGlkKSk7CisJCQlpZiAocmV0IDwgMCkgIHsKKwkJCQlicmVh azsKKwkJCX0KKwkJCS8qIHRoZSBkZWZhdWx0IHBhdGggaXMgbm93IHJlZ2lzdGVyZWQgKi8KKwkJ CXB0ci0+ZGZ0X3JlZyA9IDE7CisJCX0KKwkJCisJCWlmICghcmV0KSB7CisJCQludW1fYWRhcHRl cnMrKzsKKwkJfQorCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gRkFMU0U7CisJ fQorfQorCisvKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHVu cmVnaXN0ZXIgYWxsIHNlcnZpY2UgZm9yIAorICogYSBkZXRhY2hlZCBoY2kgZGV2aWNlCisgKiBE ZXRhaWxlZCBkZXNjcmlwdGlvbjogV2hlbiBhIEhDSV9ERVZfRE9XTiBldmVudCBpcyByZWNlaXZl ZCB0aGUgCisgKiBzZXJ2aWNlIHBhdGhzIG11c3QgYmUgdW5yZWdpc3RlcmVkLiBlZzogcGFuLCBz ZHAsIGhjaSwgcmZjb21tIHBhdGhzLgorICogQHBhcmFtIGlkIGRldmljZSBpZAorICogQHJldHVy biBUUlVFL0ZBTFNFCisgKi8KK2dib29sZWFuIG1ncl9kYnVzX3VucmVnX2RldmljZV9wYXRocyh1 aW50MTZfdCBpZCkKK3sKKwlwcm9maWxlX29ial9wYXRoX2RhdGFfdCAqcHRyID0gb2JqX3BhdGhf dGFibGU7CisJdWludDhfdCBkZnRfdW5yZWcgPSAwOworCQorCWlmIChjb25uZWN0aW9uKSB7CisJ CWZvciAoO3B0ci0+bmFtZTsgcHRyKyspIHsKKwkJCWRmdF91bnJlZyA9IChudW1fYWRhcHRlcnMg PiAxKT8gMDoxOworCQkJbnVtX2FkYXB0ZXJzLS07CisJCQlwdHItPnVucmVnX2Z1bmMoY29ubmVj dGlvbiwgZGZ0X3VucmVnLCBpZCk7CisJCQkKKwkJCWlmIChkZnRfdW5yZWcgKSB7CisJCQkJcHRy LT5kZnRfcmVnID0gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQly ZXR1cm4gRkFMU0U7CisJfQorfQorCisvKgorICogQGJyaWVmIEhDSSBvYmplY3QgcGF0aCByZWdp c3RlciBmdW5jdGlvbgorICogRGV0YWlsZWQgZGVzY3JpcHRpb246IGZ1bmN0aW9uIHJlc3BvbnNp YmxlIGZvciByZWdpc3RlciBhIG5ldyBoY2kgCisgKiBELUJ1cyBwYXRoLiBJZiBuZWNlc3Nhcnkg dGhlIGRlZmF1bHQgcGF0aCBtdXN0IGJlIHJlZ2lzdGVyZWQgdG9vLgorICogQHBhcmFtIGNvbm4g RC1CdXMgY29ubmVjdGlvbgorICogQHBhcmFtIGRmdF9yZWcgcmVnaXN0ZXIgdGhlIGRlZmF1bHQg cGF0aCgwIG9yICEwKQorICogQHBhcmFtIGlkIGhjaSBkZXZpY2UgaWRlbnRpZmljYXRpb24KKyAq IEByZXR1cm4gKDAtU3VjY2Vzcy8tMSBmYWlsdXJlKQorICovCitpbnQ4X3QgaGNpX2RidXNfcmVn X29ial9wYXRoKERCdXNDb25uZWN0aW9uICpjb25uLCB1aW50OF90IGRmdF9yZWcsIHVpbnQxNl90 IGlkKQoreworCWNoYXIgcGF0aFtNQVhfUEFUSF9MRU5HVEhdOworCWludDhfdCByZXQgPSAwOwor CXVpbnQxNl90ICpwdHJfaWQgPSAgKGludDE2X3QqKW1hbGxvYygxKTsKKwl1aW50MTZfdCAqcHRy X2lkX2RmdDsKKwkKKwkvKiByZWdpc3RlciB0aGUgZGVmYXVsdCBwYXRoKi8KKwlpZiAoIWRmdF9y ZWcpIHsKKwkgCXB0cl9pZF9kZnQgPSAgKGludDE2X3QqKW1hbGxvYygxKTsKKwkJKnB0cl9pZF9k ZnQgPSAweEZGRkY7CisJCXNwcmludGYocGF0aCwgIiVzLyVzLyVzIiwgQkxVRVpfREJVU19NR1Jf UEFUSCwgSENJX0RGVF9ERVZJQ0VfTkFNRSwgQkxVRVpfREJVU19IQ0kpOworCQorCQlzeXNsb2co TE9HX0lORk8sICJyZWdpc3RlcmluZyBkZnQgcGF0aDolcyAtIGlkOiVkIiwgcGF0aCwgMHhGRkZG KTsKKwkKKwkJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoY29ubiwg cGF0aCwgJm9ial92dGFibGUsIHB0cl9pZF9kZnQpKSB7CisJCQlzeXNsb2coTE9HX0VSUiwiREJV UyBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0aCk7CisJCQkvL2lnbm9yZSwgdGhl IGRlZmF1bHQgcGF0aCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkCisJCX0KKwkKKwl9CisJCisJKnB0 cl9pZCA9IGlkOworCQorCS8qIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IHBhdGgqLworCXNwcmludGYo cGF0aCwgIiVzLyVzJWQvJXMiLCBCTFVFWl9EQlVTX01HUl9QQVRILCBIQ0lfREVWSUNFX05BTUUs IGlkICxCTFVFWl9EQlVTX0hDSSk7CisJCisJc3lzbG9nKExPR19JTkZPLCAicmVnaXN0ZXJpbmcg IC0gIHBhdGg6JXMgLSBpZDolZCIscGF0aCwgaWQpOworCQorCWlmICghZGJ1c19jb25uZWN0aW9u X3JlZ2lzdGVyX29iamVjdF9wYXRoKGNvbm4sIHBhdGgsICZvYmpfdnRhYmxlLCBwdHJfaWQpKSB7 CisJCXN5c2xvZyhMT0dfRVJSLCJEQlVTIGZhaWxlZCB0byByZWdpc3RlciAlcyBvYmplY3QiLCBw YXRoKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBA YnJpZWYgSENJIG9iamVjdCBwYXRoIHVucmVnaXN0ZXIgZnVuY3Rpb24KKyAqIERldGFpbGVkIGRl c2NyaXB0aW9uOiBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdW5yZWdpc3RlciBIQ0kgRC1CdXMK KyAqIHBhdGggZm9yIGEgZGV0YWNoZWQgaGNpIGRldmljZS4gSWYgbmVjZXNzYXJ5IHRoZSBkZWZh dWx0IHBhdGggbXVzdCAKKyAqIGJlIHJlZ2lzdGVyZWQgdG9vLgorICogQHBhcmFtIGNvbm4gRC1C dXMgY29ubmVjdGlvbgorICogQHBhcmFtIHVucmVnX2RmdCByZWdpc3RlciB0aGUgZGVmYXVsdCBw YXRoKDAgb3IgITApCisgKiBAcGFyYW0gaWQgaGNpIGRldmljZSBpZGVudGlmaWNhdGlvbgorICog QHJldHVybiAoMC1TdWNjZXNzLy0xIGZhaWx1cmUpCisgKi8KK2ludDhfdCBoY2lfZGJ1c191bnJl Z19vYmpfcGF0aChEQnVzQ29ubmVjdGlvbiAqY29ubiwgdWludDhfdCB1bnJlZ19kZnQsIHVpbnQx Nl90IGlkKSAKK3sKKwlpbnQ4X3QgcmV0ID0gMDsKKwljaGFyIHBhdGhbTUFYX1BBVEhfTEVOR1RI XTsKKwljaGFyIGRmdF9wYXRoW01BWF9QQVRIX0xFTkdUSF07CisJdWludDE2X3QgKmRhdGE7CisJ CisJaWYgKHVucmVnX2RmdCkgeworCQlzcHJpbnRmKGRmdF9wYXRoLCAiJXMvJXMvJXMiLCBCTFVF Wl9EQlVTX01HUl9QQVRILCBIQ0lfREZUX0RFVklDRV9OQU1FLCBCTFVFWl9EQlVTX0hDSSk7CisJ CXN5c2xvZyhMT0dfSU5GTywgIiVzIC0gdW5yZWdpc3RlcmluZyBkZnQ6JXMiLCBfX1BSRVRUWV9G VU5DVElPTl9fLCBkZnRfcGF0aCk7CisJCWlmICghZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJf b2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIGRmdF9wYXRoKSkgeworCQkJc3lzbG9nKExPR19FUlIs IkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgZGZ0X3BhdGgpOworCQkJcmV0 ID0gLTE7CisJCX0gZWxzZSB7CisJCQlpZihkYnVzX2Nvbm5lY3Rpb25fZ2V0X29iamVjdF9wYXRo X2RhdGEoY29ubiwgZGZ0X3BhdGgsICh2b2lkKikmZGF0YSkpCisJCQl7CisJCQkJaWYoZGF0YSkK KwkJCQkJZnJlZShkYXRhKTsKKwkJCQlkYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCQkKKwl9CisJ CisJc3ByaW50ZihwYXRoLCAiJXMvJXMlZC8lcyIsIEJMVUVaX0RCVVNfTUdSX1BBVEgsIEhDSV9E RVZJQ0VfTkFNRSwgaWQsIEJMVUVaX0RCVVNfSENJKTsKKwlzeXNsb2coTE9HX0lORk8sICIlcyAt IHVucmVnaXN0ZXJpbmcgc3BlYzolcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHBhdGgpOworCWlm ICghZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBh dGgpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCJEQlVTIGZhaWxlZCB0byB1bnJlZ2lzdGVyICVzIG9i amVjdCIsIHBhdGgpOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQlpZihkYnVzX2Nvbm5lY3Rp b25fZ2V0X29iamVjdF9wYXRoX2RhdGEoY29ubiwgcGF0aCwgKHZvaWQqKSZkYXRhKSkKKwkJewor CQkJaWYoZGF0YSkKKwkJCQlmcmVlKGRhdGEpOworCQkJZGF0YSA9IE5VTEw7CisJCX0KKwl9CisJ CisJcmV0dXJuIHJldDsKK30KKworCitjb25zdCBzZXJ2aWNlX3RhYmxlX3QgKmdldF9oY2lfdGFi bGUodm9pZCkgeworCXJldHVybiBoY2lfc2VydmljZXM7Cit9CisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAKKyAq ICBTZWN0aW9uIHJlc2VydmVkIHRvIEhDSSBNYW5haGVyIEQtQnVzIG1lc3NhZ2UgaGFuZGxlcnMK KyAqICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3ZvaWQgaGNpZF9kYnVzX2V4aXQodm9pZCkKK3sKKwljaGFyIHBh dGhbTUFYX1BBVEhfTEVOR1RIXTsKKwljaGFyIGZzdF9wYXJlbnRbXSA9IEJMVUVaX0RCVVNfTUdS X1BBVEg7CisJY2hhciBzbmRfcGFyZW50W01BWF9QQVRIX0xFTkdUSF07CisJY2hhciAqKmZzdF9s ZXZlbCA9IE5VTEw7CisJY2hhciAqKnNuZF9sZXZlbCA9IE5VTEw7CisJY2hhciAqcHRyMTsKKwlj aGFyICpwdHIyOworCQorCWlmICghY29ubmVjdGlvbikKKwkJcmV0dXJuOworCS8qIHVucmVnaXN0 ZXIgYWxsIG9iamVjdHMgcGF0aHMgKi8KKwkKKwlpZiAoIWRidXNfY29ubmVjdGlvbl91bnJlZ2lz dGVyX29iamVjdF9wYXRoIChjb25uZWN0aW9uLCBCTFVFWl9EQlVTX0RFVlNfUEFUSCkpIHsKKwkJ c3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgQkxV RVpfREJVU19ERVZTX1BBVEgpOworCX0gZWxzZSB7CisJCXN5c2xvZyhMT0dfSU5GTywidW5yZWdp c3RlcmluZyAgLSAgcGF0aDolcyIsIEJMVUVaX0RCVVNfREVWU19QQVRIKTsKKwl9CisKKwlpZiAo IWRidXNfY29ubmVjdGlvbl91bnJlZ2lzdGVyX29iamVjdF9wYXRoIChjb25uZWN0aW9uLCBCTFVF Wl9EQlVTX01HUl9QQVRIKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gdW5y ZWdpc3RlciAlcyBvYmplY3QiLCBCTFVFWl9EQlVTX01HUl9QQVRIKTsKKwl9IGVsc2UgeworCQlz eXNsb2coTE9HX0lORk8sInVucmVnaXN0ZXJpbmcgIC0gIHBhdGg6JXMiLCBCTFVFWl9EQlVTX01H Ul9QQVRIKTsKKwl9CisJCisJLy9nZXR0aW5nIHRoZSBmaXJzdCBsZXZlbAorCWRidXNfY29ubmVj dGlvbl9saXN0X3JlZ2lzdGVyZWQoY29ubmVjdGlvbiwgZnN0X3BhcmVudCwgJmZzdF9sZXZlbCk7 CisJCisJZm9yICggOypmc3RfbGV2ZWw7IGZzdF9sZXZlbCsrKSB7CisJCXB0cjEgPSAqZnN0X2xl dmVsOworCQlzcHJpbnRmKHNuZF9wYXJlbnQsICIlcy8lcyIsIGZzdF9wYXJlbnQsIHB0cjEpOwor CQkKKwkJLy9nZXR0aW5nIHRoZSBzZWNvbmQgbGV2ZWwKKwkJZGJ1c19jb25uZWN0aW9uX2xpc3Rf cmVnaXN0ZXJlZChjb25uZWN0aW9uLCBzbmRfcGFyZW50LCAmc25kX2xldmVsKTsKKwkJCisJCWlm ICghKCpzbmRfbGV2ZWwpKSB7CisJCQkvL25vIGNoaWxkCisJCQlzcHJpbnRmKHBhdGgsICIlcy8l cyIsIEJMVUVaX0RCVVNfTUdSX1BBVEgsIHB0cjEpOworCQkJCisJCQlzeXNsb2coTE9HX0lORk8s ICJ1bnJlZ2lzdGVyaW5nIHBhdGg6ICVzIiwgcGF0aCk7CisJCQkKKwkJCWlmICghZGJ1c19jb25u ZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBhdGgpKSB7CisJCQkJ c3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0 aCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQkKKwkJZm9yICggOypzbmRfbGV2ZWw7IHNu ZF9sZXZlbCsrKSB7CisJCQkvL3VucmVnaXN0ZXJpbmcgY2hpbGQgbGV2ZWwgcGF0aAorCQkJcHRy MiA9ICpzbmRfbGV2ZWw7CisJCQlzcHJpbnRmKHBhdGgsICIlcy8lcy8lcyIsIEJMVUVaX0RCVVNf TUdSX1BBVEgsIHB0cjEsIHB0cjIpOworCQkJCisJCQlzeXNsb2coTE9HX0lORk8sICJ1bnJlZ2lz dGVyaW5nIHBhdGg6ICVzIiwgcGF0aCk7CisJCQkKKwkJCWlmICghZGJ1c19jb25uZWN0aW9uX3Vu cmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBhdGgpKSB7CisJCQkJc3lzbG9nKExP R19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0aCk7CisJCQl9 CisJCX0KKwkJaWYgKCpzbmRfbGV2ZWwpIAorCQkJZGJ1c19mcmVlX3N0cmluZ19hcnJheShzbmRf bGV2ZWwpOworCX0KKwkKKwlpZiAoKmZzdF9sZXZlbCkgCisJCWRidXNfZnJlZV9zdHJpbmdfYXJy YXkoZnN0X2xldmVsKTsKK30KKworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9zaWduYWxf ZmlsdGVyIChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0 YSkKK3sKKwlEQnVzSGFuZGxlclJlc3VsdCByZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9Z RVRfSEFORExFRDsKKwljb25zdCBjaGFyICppZmFjZTsKKwljb25zdCBjaGFyICptZXRob2Q7CisK KwlpZiAoIW1zZyB8fCAhY29ubikKKwkJcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lF VF9IQU5ETEVEOworCQorCWlmIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKG1zZykgIT0gREJVU19N RVNTQUdFX1RZUEVfU0lHTkFMKQorCQlyZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVU X0hBTkRMRUQ7CisKKwlpZmFjZSA9IGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG1zZyk7CisJ bWV0aG9kID0gZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobXNnKTsKKwkKKwlpZiAoc3RyY21wKGlm YWNlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCkgPT0gMCkgeworCQlpZiAoc3RyY21wKG1ldGhvZCwg IkRpc2Nvbm5lY3RlZCIpID09IDApeworCQkJcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5E TEVEOworCQl9CisJfSBlbHNlCWlmIChzdHJjbXAoaWZhY2UsIERCVVNfSU5URVJGQUNFX0RCVVMp ID09IDApIHsKKwkJCWlmIChzdHJjbXAobWV0aG9kLCAiTmFtZU93bmVyQ2hhbmdlZCIpID09IDAp IHsKKwkJCQlyZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCQl9CisJCQlpZiAo c3RyY21wKG1ldGhvZCwgIk5hbWVBY3F1aXJlZCIpID09IDApIHsKKwkJCQlyZXQgPSBEQlVTX0hB TkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisvKgorICog VGhlcmUgaXMgb25seSBvbmUgbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciBhbGwgb2JqZWN0 IHBhdGhzCisgKgorICovCisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBtc2dfZnVuYyhEQnVz Q29ubmVjdGlvbiAqY29ubiwgCisJCQkJICAgICAgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0 YSkKK3sKKwljb25zdCBzZXJ2aWNlX3RhYmxlX3QgKnB0cl9oYW5kbGVycyA9IE5VTEw7CisJREJ1 c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwl1aW50MTZfdCB0eXBlOworCWNvbnN0IGNoYXIgKmlm YWNlOworCWNvbnN0IGNoYXIgKm1ldGhvZDsKKwljb25zdCBjaGFyICpzaWduYXR1cmU7CisJY29u c3QgY2hhciAqcGF0aDsKKwljb25zdCBjaGFyICpyZWxfcGF0aDsKKwljb25zdCBjaGFyICp0bXBf aWZhY2UgPSBOVUxMOworCXVpbnQ4X3QgcmVzdWx0ID0gQkxVRVpfRURCVVNfVU5LTk9XTl9NRVRI T0Q7CisJREJ1c0hhbmRsZXJSZXN1bHQgcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVU X0hBTkRMRUQ7OworCXVpbnQ4X3QgZm91bmQgPSAwOworCQorCQorCXBhdGggPSBkYnVzX21lc3Nh Z2VfZ2V0X3BhdGgobXNnKTsKKwl0eXBlID0gZGJ1c19tZXNzYWdlX2dldF90eXBlKG1zZyk7CisJ aWZhY2UgPSBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtc2cpOworCW1ldGhvZCA9IGRidXNf bWVzc2FnZV9nZXRfbWVtYmVyIChtc2cpOworCXNpZ25hdHVyZSA9IGRidXNfbWVzc2FnZV9nZXRf c2lnbmF0dXJlKG1zZyk7CisJCisJCisJCisJLy9nZXQgdGhlIHVzZXIgZGF0YQorCWlmIChzdHJj bXAocGF0aCwgQkxVRVpfREJVU19ERVZTX1BBVEgpID09IDApIHsKKwkJcHRyX2hhbmRsZXJzID0g ZGV2X3NlcnZpY2VzOyAvL1RPRE8KKwkJdG1wX2lmYWNlID0gQkxVRVpfREJVU19ERVZTX0lOVEVS RkFDRTsKKwkJZm91bmQgPSAxOworCX0gZWxzZSBpZiAoc3RyY21wKHBhdGgsIEJMVUVaX0RCVVNf TUdSX1BBVEgpID09IDApIHsKKwkJcHRyX2hhbmRsZXJzID0gbWdyX3NlcnZpY2VzOy8vVE9ETwor CQl0bXBfaWZhY2UgPSBCTFVFWl9EQlVTX01HUl9JTlRFUkZBQ0U7CisJCWZvdW5kID0gMTsKKwl9 IGVsc2UgeworCQkvKiBvbmx5IG1zZyB0byByZWdpc3RlcmVkIG9iamVjdCBwYXRocyB3aWxsIGJl IHJlY2VpdmVkICovCisJCQorCQlwcm9maWxlX29ial9wYXRoX2RhdGFfdCAqbWdyX2NoaWxkID0g b2JqX3BhdGhfdGFibGU7CisJCXJlbF9wYXRoID0gc3RycmNocihwYXRoLCcvJyk7CisJCXJlbF9w YXRoKys7CisJCQorCQlpZiAocmVsX3BhdGgpIHsKKwkJCWZvciAoO21ncl9jaGlsZC0+bmFtZTsg bWdyX2NoaWxkKyspIHsKKwkJCQlpZihzdHJjbXAobWdyX2NoaWxkLT5uYW1lLCByZWxfcGF0aCkg PT0gMCkgeworCQkJCQlwdHJfaGFuZGxlcnMgPSBtZ3JfY2hpbGQtPmdldF9zdmNfdGFibGUoKTsK KwkJCQkJZm91bmQgPSAxOworCQkJCX0KKwkJCX0KKwkJCQorCQkJdG1wX2lmYWNlID0gQkxVRVpf REJVU19NR1JfSU5URVJGQUNFOworCQl9CisJfQorCQorCWlmIChmb3VuZCAmJiAodHlwZSA9PSBE QlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkgJiYgCisJCShzdHJjbXAoaWZhY2UsIHRtcF9p ZmFjZSkgPT0gMCkgJiYgKG1ldGhvZCAhPSBOVUxMKSkgeworCQkKKwkJZm9yICg7IHB0cl9oYW5k bGVycy0+bmFtZTsgcHRyX2hhbmRsZXJzKyspIHsKKwkJCWlmIChzdHJjbXAobWV0aG9kLCBwdHJf aGFuZGxlcnMtPm5hbWUpID09IDApIHsKKwkJCQkvKiByZXNldHRpbmcgdW5rbm93biBtZXRob2Qu IEl0J3MgcG9zc2libGUgaGFuZGxlIG1ldGhvZCBvdmVybG9hZCAqLworCQkJCXJlc3VsdCA9IEJM VUVaX0VEQlVTX1dST05HX1NJR05BVFVSRTsgCisJCQkJaWYgKHN0cmNtcChwdHJfaGFuZGxlcnMt PnNpZ25hdHVyZSwgc2lnbmF0dXJlKSA9PSAwKSB7CisJCQkJCWlmKHB0cl9oYW5kbGVycy0+aGFu ZGxlcl9mdW5jKSB7CisJCQkJCQlyZXBseSA9IChwdHJfaGFuZGxlcnMtPmhhbmRsZXJfZnVuYyko bXNnLCBkYXRhKTsKKwkJCQkJCXJlc3VsdCA9IDA7IC8qIHJlc2V0dGluZyB3cm9uZyBzaWduYXR1 cmUqLworCQkJCQl9IGVsc2UgeworCQkJCQkJc3lzbG9nKExPR19JTkZPLCAiU2VydmljZSBub3Qg aW1wbGVtZW50ZWQiKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9IAorCQkJCQorCQkJfQor CQl9CisJCQorCQlpZiAocmVzdWx0KSB7CisJCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21z Zyhtc2csIEJMVUVaX0VDTEFTU19EQlVTLCByZXN1bHQpOworCQkJc3lzbG9nKExPR19JTkZPLCAi JXMgLSAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIAorCQkJCShyZXN1bHQgPT0gQkxVRVpfRURC VVNfVU5LTk9XTl9NRVRIT0Q/IlVua25vd24gTWV0aG9kIjogIldyb25nIHNpZ25hdHVyZSIpKTsK KwkJfQorCQkKKwkJLyogc2VuZCBhbiBlcnJvciBvciB0aGUgc3VjY2VzcyByZXBseSovCisJCWlm IChyZXBseSkgeworCQkJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubiwgcmVwbHksIE5V TEwpKSB7IAorCQkJCXN5c2xvZyhMT0dfRVJSLCAiJXMgbGluZTolZCBDYW4ndCBzZW5kIHJlcGx5 IG1lc3NhZ2UhIiwgXAorCQkJCQlfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXykgOworCQkJ fQorCQkJZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CisJCX0KKwkJCisJCXJldCA9IERCVVNf SEFORExFUl9SRVNVTFRfSEFORExFRDsKKwl9IGVsc2UgeworCQlzeXNsb2coTE9HX0lORk8sICJS ZXF1ZXN0IG5vdCBoYW5kbGVkIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKworCisKK3N0YXRp YyBEQnVzTWVzc2FnZSogaGFuZGxlX3BlcmlvZGljX2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywg dm9pZCAqZGF0YSkgCit7CisJd3JpdGVfaW5xdWlyeV9tb2RlX2NwIGlucV9tb2RlOworCXBlcmlv ZGljX2lucXVpcnlfY3AgaW5xX3BhcmFtOworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNN ZXNzYWdlICpyZXBseSA9IE5VTEw7CisJdWludDhfdCBsZW5ndGg7CisJdWludDhfdCBtYXhfcGVy aW9kOworCXVpbnQ4X3QgbWluX3BlcmlvZDsKKwlpbnQzMl90IHNvY2sgPSAtMTsKKwlpbnQzMl90 IGRldl9pZCA9IC0xOworCQorCXN5c2xvZyhMT0dfSU5GTywgIiVzIC0gbGluZTolZCIsIF9fUFJF VFRZX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkKKwlpZiAoKGRldl9pZCA9IGhjaV9nZXRfcm91 dGUoTlVMTCkpIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkJsdWV0b290aCBkZXZpY2UgaXMg bm90IGF2YWlsYWJsZSIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJM VUVaX0VDTEFTU19TWVNURU0sIEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsKKwkJCisJfQorCQor CWlmICgoc29jayA9IGhjaV9vcGVuX2RldihkZXZfaWQpKSA8IDApIHsKKwkJc3lzbG9nKExPR19F UlIsICJIQ0kgZGV2aWNlIG9wZW4gZmFpbGVkIik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1 cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX1NZU1RFTSwgRU5PREVWKTsKKwkJZ290byBjbGVhbnVw OworCX0KKwkKKwlkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1zZywgJml0ZXIpOworCWRidXNfbWVz c2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmxlbmd0aCk7CisJZGJ1c19tZXNzYWdlX2l0ZXJf bmV4dCgmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmbWluX3Bl cmlvZCk7CisJZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CQorCWRidXNfbWVzc2FnZV9p dGVyX2dldF9iYXNpYygmaXRlciwgJm1heF9wZXJpb2QpOworCQorCWlmICgobGVuZ3RoID49IG1p bl9wZXJpb2QpIHx8IChtaW5fcGVyaW9kID49IG1heF9wZXJpb2QpKSB7CisJCSAgcmVwbHkgPSBi bHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfREJVUywgQkxVRVpfRURCVVNf V1JPTkdfUEFSQU0pOworCQkgIGdvdG8gY2xlYW51cDsKKwl9CisKKwlpbnFfcGFyYW0ubnVtX3Jz cCA9IDEwMDsKKwlpbnFfcGFyYW0ubGVuZ3RoICA9IGxlbmd0aDsKKworCWlucV9wYXJhbS5tYXhf cGVyaW9kID0gbWF4X3BlcmlvZDsKKwlpbnFfcGFyYW0ubWluX3BlcmlvZCA9IG1pbl9wZXJpb2Q7 CisKKwkvKiBHZW5lcmFsL1VubGltaXRlZCBJbnF1aXJ5IEFjY2VzcyBDb2RlIChHSUFDKSAqLwor CWlucV9wYXJhbS5sYXBbMF0gPSAweDMzOworCWlucV9wYXJhbS5sYXBbMV0gPSAweDhiOworCWlu cV9wYXJhbS5sYXBbMl0gPSAweDllOworCisJaW5xX21vZGUubW9kZSA9IDE7IC8vSU5RVUlSWV9X SVRIX1JTU0k7CisJCisJaWYgKGhjaV9zZW5kX2NtZChzb2NrLCBPR0ZfSE9TVF9DVEwsIE9DRl9X UklURV9JTlFVSVJZX01PREUsIAorCQlXUklURV9JTlFVSVJZX01PREVfQ1BfU0laRSwgJmlucV9t b2RlKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBzZXQgaW5xdWlyeSBtb2RlOiVz LiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1z ZywgQkxVRVpfRUNMQVNTX1NZU1RFTSwgZXJybm8pOworCQlnb3RvIGNsZWFudXA7CisJfQorCQor CWlmIChoY2lfc2VuZF9jbWQoc29jaywgT0dGX0xJTktfQ1RMLCBPQ0ZfUEVSSU9ESUNfSU5RVUlS WSwgCisJCVBFUklPRElDX0lOUVVJUllfQ1BfU0laRSwgJmlucV9wYXJhbSkgPCAwKSB7CisJCXN5 c2xvZyhMT0dfRVJSLCAiQ2FuJ3Qgc2VuZCBIQ0kgY29tbWFuZHM6JXMuIiwgc3RyZXJyb3IoZXJy bm8pKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1Nf U1lTVEVNLCBlcnJubyk7CisJCWdvdG8gY2xlYW51cDsKKwl9IGVsc2UgeworCQorCQl1aW50OF90 IHJlc3VsdCA9IDA7CisJCS8qIHJldHVybiBUUlVFIHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9u IHdhcyBjb21wbGV0ZWQgKi8KKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsK KwkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSAs JnJlc3VsdCk7CisJfQorCQorY2xlYW51cDoKKworCWlmIChzb2NrID4gMCkKKwkJY2xvc2Uoc29j ayk7CisJCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9j YW5jZWxfcGVyaW9kaWNfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQorewor CURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJaW50 MzJfdCBzb2NrID0gLTE7CisJaW50MzJfdCBkZXZfaWQgPSAtMTsKKwkKKwlzeXNsb2coTE9HX0lO Rk8sICIlcyAtIGxpbmU6JWQiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCisJ aWYgKChkZXZfaWQgPSBoY2lfZ2V0X3JvdXRlKE5VTEwpKSA8IDApIHsKKwkJc3lzbG9nKExPR19F UlIsICJCbHVldG9vdGggZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUiKTsKKwkJcmVwbHkgPSBibHVl el9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQln b3RvIGNsZWFudXA7CisJCQorCX0KKwkKKwlpZiAoKHNvY2sgPSBoY2lfb3Blbl9kZXYoZGV2X2lk KSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiSENJIGRldmljZSBvcGVuIGZhaWxlZCIpOwor CQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0s IEVOT0RFVik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJCisJaWYgKGhjaV9zZW5kX2NtZChzb2Nr LCBPR0ZfTElOS19DVEwsIE9DRl9FWElUX1BFUklPRElDX0lOUVVJUlksIDAgLCBOVUxMKSA8IDAp IHsKKwkJc3lzbG9nKExPR19FUlIsICJTZW5kIGhjaSBjb21tYW5kIGZhaWxlZC4iKTsKKwkJcmVw bHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBlcnJu byk7CisJfSBlbHNlICB7CisJCXVpbnQ4X3QgcmVzdWx0ICA9IDA7CisJCS8qIHJldHVybiBUUlVF IHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgKi8KKwkJcmVwbHkgPSBk YnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJf aW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jh c2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSAsJnJlc3VsdCk7CisJfQorCQorY2xlYW51cDoKKwlp ZiAoc29jayA+IDApCisJCWNsb3NlKHNvY2spOworCQorCXJldHVybiByZXBseTsKK30KKworc3Rh dGljIERCdXNNZXNzYWdlKiBoYW5kbGVfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpk YXRhKQoreworCWNvbnN0IGNoYXIgYXJyYXlfc2lnW10gPSBIQ0lfSU5RX1JFUExZX1NJR05BVFVS RTsKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZUl0ZXIgYXJyYXlfaXRlcjsK KwlEQnVzTWVzc2FnZUl0ZXIgIHN0cnVjdF9pdGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5V TEw7CisJaW5xdWlyeV9pbmZvICppbmZvID0gTlVMTDsKKwljaGFyIGFkZHJbMThdOworCWNvbnN0 IGNoYXIgKnBhZGRyID0gYWRkcjsKKwlpbnQzMl90IGRldl9pZCA9IC0xOworCXVpbnQzMl90IGNs YXNzID0gMDsKKwl1aW50MTZfdCBjbG9ja19vZmZzZXQ7CisJdWludDE2X3QgZmxhZ3M7CisJaW50 OF90IGxlbmd0aDsKKwlpbnQ4X3QgbnVtX3JzcDsKKwlpbnQ4X3QgaTsKKworCXN5c2xvZyhMT0df SU5GTywgIiVzIC0gbGluZTolZCIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwor CWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShOVUxMKSkgPCAwKSB7CisJCXN5c2xvZyhMT0df RVJSLCAiQmx1ZXRvb3RoIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIik7CisJCXJlcGx5ID0gYmx1 ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRUNMQVNTX1NZU1RFTSwgRU5PREVWKTsKKwkJ Z290byBjbGVhbnVwOworCQkKKwl9CisJCisJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtc2csICZp dGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZsZW5ndGgpOworCWRi dXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNp YygmaXRlciwgJm51bV9yc3ApOworCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCWRi dXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmZsYWdzKTsKKwkKKwlpZiAoKGxlbmd0 aCA8PSAwKSB8fCAobnVtX3JzcCA8PSAwKSkgeworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJl X21zZyhtc2csIEJMVUVaX0VDTEFTU19EQlVTLCBCTFVFWl9FREJVU19XUk9OR19QQVJBTSk7CisJ CWdvdG8gY2xlYW51cDsKKwl9CisJCisJbnVtX3JzcCA9IGhjaV9pbnF1aXJ5KGRldl9pZCwgbGVu Z3RoLCBudW1fcnNwLCBOVUxMLCAmaW5mbywgZmxhZ3MpOworCQorCWlmIChudW1fcnNwIDwgMCkg eworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNU RU0sIGVycm5vKTsKKwl9IGVsc2UgeworCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9k X3JldHVybihtc2cpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBseSwgJml0 ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBF X0FSUkFZLCBhcnJheV9zaWcsICZhcnJheV9pdGVyKTsKKwkJCisJICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbnVtX3JzcDsgaSsrKSB7CisJCQliYTJzdHIoJihpbmZvK2kpLT5iZGFkZHIsIGFkZHIp OworCisJCQljbG9ja19vZmZzZXQgPSBidG9ocygoaW5mbytpKS0+Y2xvY2tfb2Zmc2V0KTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgMyBieXRlcyBhcmUgdXNlZCAqLworCQkJbWVt Y3B5KCZjbGFzcywgKGluZm8raSktPmRldl9jbGFzcywgMyk7CisJCQkKKwkJCWRidXNfbWVzc2Fn ZV9pdGVyX29wZW5fY29udGFpbmVyKCZhcnJheV9pdGVyLCBEQlVTX1RZUEVfU1RSVUNULCBOVUxM LCAmc3RydWN0X2l0ZXIpOworCQkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZzdHJ1 Y3RfaXRlciwgREJVU19UWVBFX1NUUklORyAsICZwYWRkcik7CisJCQlkYnVzX21lc3NhZ2VfaXRl cl9hcHBlbmRfYmFzaWMoJnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVfVUlOVDMyICwgJmNsYXNzKTsK KwkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3RydWN0X2l0ZXIsIERCVVNfVFlQ RV9VSU5UMTYgLCAmY2xvY2tfb2Zmc2V0KTsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2Nv bnRhaW5lcigmYXJyYXlfaXRlciwgJnN0cnVjdF9pdGVyKTsKKwl9CisgICAgICAgIAlkYnVzX21l c3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoJml0ZXIsICZhcnJheV9pdGVyKTsKKyAgICAgICAg fQorCitjbGVhbnVwOgorCWlmKGluZm8pCisJCWJ0X2ZyZWUoaW5mbyk7CisJCisJcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3JvbGVfc3dpdGNoX3JlcShEQnVz TWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURC dXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJY2hhciAqc3RyX2JkYWRkciA9IE5VTEw7CisJYmRh ZGRyX3QgYmRhZGRyOworCXVpbnQ4X3Qgcm9sZTsKKwlpbnQzMl90IGRldl9pZCA9IC0xLCBzb2Nr ID0gLTE7CisJCisJc3lzbG9nKExPR19JTkZPLCAiJXMgLSBsaW5lOiVkIiwgX19QUkVUVFlfRlVO Q1RJT05fXywgX19MSU5FX18pOworCQorCWRidXNfbWVzc2FnZV9pdGVyX2luaXQobXNnLCAmaXRl cik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmc3RyX2JkYWRkcik7CisJ ZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jh c2ljKCZpdGVyLCAmcm9sZSk7CisJCisJc3RyMmJhKHN0cl9iZGFkZHIsICZiZGFkZHIpOworCQor CWRldl9pZCA9IGhjaV9mb3JfZWFjaF9kZXYoSENJX1VQLCBmaW5kX2Nvbm4sIChsb25nKSAmYmRh ZGRyKTsKKwkKKwlpZiAoZGV2X2lkIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkJsdWV0b290 aCBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNn LCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCQor CXNvY2sgPSBoY2lfb3Blbl9kZXYoZGV2X2lkKTsKKwkKKwlpZiAoc29jayA8IDApIHsKKwkJc3lz bG9nKExPR19FUlIsICJIQ0kgZGV2aWNlIG9wZW4gZmFpbGVkXG4iKTsKKwkJcmVwbHkgPSBibHVl el9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FQ0xBU1NfU1lTVEVNLCBFTk9ERVYpOworCQln b3RvIGNsZWFudXA7CisJfQorCisJaWYgKGhjaV9zd2l0Y2hfcm9sZShzb2NrLCAmYmRhZGRyLCBy b2xlLCAxMDAwMCkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiU3dpdGNoIHJvbGUgcmVxdWVz dCBmYWlsZWRcbiIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVa X0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwl9IGVsc2UgeworCQl1aW50OF90IHJlc3VsdCA9IDA7 CisJCS8qIHJldHVybiBUUlVFIHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9uIHdhcyBjb21wbGV0 ZWQgKi8KKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwkJ ZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKwkJZGJ1c19tZXNz YWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSwgJnJlc3VsdCk7CisJ fQorY2xlYW51cDoKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CisKKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgCisg KiAgU2VjdGlvbiByZXNlcnZlZCB0byBEZXZpY2UgRC1CdXMgbWVzc2FnZSBoYW5kbGVycworICog IAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfZ2V0X2RldmljZXNfcmVx KERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7 CisJREJ1c01lc3NhZ2VJdGVyIGFycmF5X2l0ZXI7CisJREJ1c01lc3NhZ2VJdGVyICBzdHJ1Y3Rf aXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCQorCXN0cnVjdCBoY2lfZGV2X2xp c3RfcmVxICpkbCA9IE5VTEw7CisJc3RydWN0IGhjaV9kZXZfcmVxICpkciAgICAgID0gTlVMTDsK KwlzdHJ1Y3QgaGNpX2Rldl9pbmZvIGRpOworCWludDE2X3QgaTsKKwlpbnQzMl90IHNvY2sgPSAt MTsKKwkKKwljaGFyIGFuYW1lW0JMVUVUT09USF9ERVZJQ0VfTkFNRV9MRU5dOworCWNoYXIgYWFk ZHJbQkxVRVRPT1RIX0RFVklDRV9BRERSX0xFTl07CisJY2hhciAqcGFkZHIgPSBhYWRkcjsKKwlj aGFyICpwbmFtZSA9IGFuYW1lOworCWNvbnN0IGNoYXIgYXJyYXlfc2lnW10gPSBIQ0lfREVWSUNF X1NUUlVDVF9TSUdOQVRVUkU7CisJCisJc3lzbG9nKExPR19JTkZPLCAiJXMgLSBsaW5lOiVkIiwg X19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18pOworCQorICAgICAgICAvKiBDcmVhdGUgYW5k IGJpbmQgSENJIHNvY2tldCAqLworICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfQkxVRVRP T1RILCBTT0NLX1JBVywgQlRQUk9UT19IQ0kpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBzeXNs b2coTE9HX0VSUiwgIkNhbid0IG9wZW4gSENJIHNvY2tldDogJXMgKCVkKSIsCisgICAgICAgICAg ICAgICAgCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCQlyZXBseSA9IGJsdWV6X25ld19mYWls dXJlX21zZyhtc2csIEJMVUVaX0VDTEFTU19TWVNURU0sIGVycm5vKTsKKwkJZ290byBjbGVhbnVw OworICAgICAgICB9CisKKworCWRsID0gbWFsbG9jKEhDSV9NQVhfREVWICogc2l6ZW9mKCpkcikg KyBzaXplb2YoKmRsKSk7CisJCisJaWYgKCFkbCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0 IGFsbG9jYXRlIG1lbW9yeSIpOworCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobXNn LCBCTFVFWl9EQlVTX0VSUl9OT19NRU1PUlksIEJMVUVaX0RCVVNfRVJSX05PX01FTU9SWV9TVFIp OworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZGwtPmRldl9udW0gPSBIQ0lfTUFYX0RFVjsKKwlk ciA9IGRsLT5kZXZfcmVxOworCisJaWYgKGlvY3RsKHNvY2ssIEhDSUdFVERFVkxJU1QsICh2b2lk ICopIGRsKSA8IDApIHsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVF Wl9FQ0xBU1NfU1lTVEVNLCBlcnJubyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkKKwkvKiBh Y3RpdmUgYmx1ZXRvb3RoIGFkYXB0ZXIgZm91bmQgKi8KKwlyZXBseSA9IGRidXNfbWVzc2FnZV9u ZXdfbWV0aG9kX3JldHVybihtc2cpOworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJl cGx5LCAmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERC VVNfVFlQRV9BUlJBWSwgYXJyYXlfc2lnLCAmYXJyYXlfaXRlcik7CisJZHIgPSBkbC0+ZGV2X3Jl cTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgZGwtPmRldl9udW07IGkrKywgZHIrKykgeworCQlpZiAo aGNpX3Rlc3RfYml0KEhDSV9VUCwgJmRyLT5kZXZfb3B0KSkgeworCQkJbWVtc2V0KCZkaSwgMCAs IHNpemVvZihzdHJ1Y3QgaGNpX2Rldl9pbmZvKSk7CisJCQlkaS5kZXZfaWQgPSBkci0+ZGV2X2lk OworCQkJCQorCQkJaWYgKCFpb2N0bChzb2NrLCBIQ0lHRVRERVZJTkZPLCAodm9pZCAqKSAmZGkp KSB7CisJCQkJc3RyY3B5KGFuYW1lLCBkaS5uYW1lKTsKKwkJCQliYTJzdHIoJmRpLmJkYWRkciwg YWFkZHIpOworCQkJCWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZhcnJheV9pdGVy LCBEQlVTX1RZUEVfU1RSVUNULCBOVUxMLAorCQkJCQkJJnN0cnVjdF9pdGVyKTsKKwkJCQlkYnVz X21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVfU1RSSU5H ICwmcG5hbWUpOworCQkJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3RydWN0X2l0 ZXIsIERCVVNfVFlQRV9TVFJJTkcgLCZwYWRkcik7CisJCQkJc3lzbG9nKExPR19JTkZPLCAiJXMg LSAoJXMsICVzKSIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHBuYW1lLCBwYWRkcik7CisJCQkJCisJ CQkJZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCZhcnJheV9pdGVyLCAmc3RydWN0 X2l0ZXIpOworCQkJfQorCQl9CisJfQorCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5l cigmaXRlciwgJmFycmF5X2l0ZXIpOworCitjbGVhbnVwOgorCWlmIChkbCkKKwkJZnJlZShkbCk7 CisJCisJaWYgKHNvY2sgPiAwKQorCQljbG9zZSAoc29jayk7CisJCisJcmV0dXJuIHJlcGx5Owor fQorCisKKworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfbm90X2ltcGxlbWVudGVkX3JlcShE QnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKSB7CisJY29uc3QgY2hhciAqcGF0aDsKKwljb25z dCBjaGFyICppZmFjZTsKKwljb25zdCBjaGFyICptZXRob2Q7CisJCisJcGF0aCA9IGRidXNfbWVz c2FnZV9nZXRfcGF0aChtc2cpOworCWlmYWNlID0gZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2Uo bXNnKTsKKwltZXRob2QgPSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtc2cpOworCQorCXN5c2xv ZyhMT0dfSU5GTywgIk5vdCBJbXBsZW1lbnRlZCAtIHBhdGg6JXMsIGlmYWNlOiVzIG1ldGhvZDol cyIsIHBhdGgsIGlmYWNlLCBtZXRob2QpOworCQorCXJldHVybiBOVUxMOworCit9ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQotLS0gYmx1ZXotdXRpbHMtY3ZzLm9yaWcvaGNpZC9tYWluLmMJ MjAwNS0wOS0yMyAxNDowOToyOC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV6LXV0aWxzLWN2cy1o Y2lkL2hjaWQvbWFpbi5jCTIwMDUtMDktMzAgMTU6MTk6MTguMDAwMDAwMDAwIC0wMzAwCkBAIC01 Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgImhjaWQuaCIKICNpbmNsdWRlICJsaWIuaCIKIAorI2lm ZGVmIEVOQUJMRV9EQlVTCisjaW5jbHVkZSAiZGJ1cy1pbnRlcm5hbC5oIgorI2VuZGlmCisKIHN0 cnVjdCBoY2lkX29wdHMgaGNpZDsKIHN0cnVjdCBkZXZpY2Vfb3B0cyBkZWZhdWx0X2RldmljZTsK IHN0cnVjdCBkZXZpY2Vfb3B0cyAqcGFyc2VyX2RldmljZTsKQEAgLTM3NSw2ICszNzksOSBAQAog CiAJCWlmIChoY2lkLnNlY3VyaXR5ICYmIGhjaV90ZXN0X2JpdChIQ0lfVVAsICZkci0+ZGV2X29w dCkpCiAJCQlzdGFydF9zZWN1cml0eV9tYW5hZ2VyKGRyLT5kZXZfaWQpOworI2lmZGVmIEVOQUJM RV9EQlVTCisJCQltZ3JfZGJ1c19yZWdfZGV2aWNlX3BhdGhzKGRyLT5kZXZfaWQpOworI2VuZGlm CiAJfQogCiAJZnJlZShkbCk7CkBAIC00MzgsMTIgKzQ0NSwxOCBAQAogCQkJY29uZmlndXJlX2Rl dmljZShzZC0+ZGV2X2lkKTsKIAkJaWYgKGhjaWQuc2VjdXJpdHkpCiAJCQlzdGFydF9zZWN1cml0 eV9tYW5hZ2VyKHNkLT5kZXZfaWQpOworI2lmZGVmIEVOQUJMRV9EQlVTCisJCW1ncl9kYnVzX3Jl Z19kZXZpY2VfcGF0aHMoc2QtPmRldl9pZCk7CisjZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIEhD SV9ERVZfRE9XTjoKIAkJc3lzbG9nKExPR19JTkZPLCAiSENJIGRldiAlZCBkb3duIiwgc2QtPmRl dl9pZCk7CiAJCWlmIChoY2lkLnNlY3VyaXR5KQogCQkJc3RvcF9zZWN1cml0eV9tYW5hZ2VyKHNk LT5kZXZfaWQpOworI2lmZGVmIEVOQUJMRV9EQlVTCisJCW1ncl9kYnVzX3VucmVnX2RldmljZV9w YXRocyhzZC0+ZGV2X2lkKTsKKyNlbmRpZgogCQlicmVhazsKIAl9CiB9CkBAIC02MjcsNyArNjQw LDkgQEAKIAlnX21haW5fcnVuKGV2ZW50X2xvb3ApOwogCiAJZnJlZV9kZXZpY2Vfb3B0cygpOwot CisjaWZkZWYgRU5BQkxFX0RCVVMJCisJaGNpZF9kYnVzX2V4aXQoKTsKKyNlbmRpZgogCXN5c2xv ZyhMT0dfSU5GTywgIkV4aXQuIik7CiAJcmV0dXJuIDA7CiB9Ci0tLSBibHVlei11dGlscy1jdnMu b3JpZy9jb21tb24vdXRpbC5oCTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAwMDAwIC0wMzAwCisr KyBibHVlei11dGlscy1jdnMtaGNpZC9jb21tb24vdXRpbC5oCTIwMDUtMDktMjMgMTc6NTg6NDQu MDAwMDAwMDAwIC0wMzAwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKgorICogIEJsdWVaIC0gQmx1 ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIw MDUgICAgICAgQ2xhdWRpbyBUYWthaGFzaSA8Y2xhdWRpby50YWthaGFzaUBpbmR0Lm9yZy5icj4K KyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9s dG1hbm4ub3JnPgorICoKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICoKKyAqICBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUworICogIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgor ICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkKKyAqICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1Qg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKKyAqICBXSEFUU09FVkVS IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g QU4gCisgKiAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VT IEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV U0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAgQUxMIExJQUJJTElU WSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAK KyAqICBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUywgUkVMQVRJTkcgVE8g VVNFIE9GIFRISVMgCisgKiAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyAqCisgKgorICogICRJ ZDogdXRpbC5oLHYgMC4xIDIwMDUvMDkvMjMgMDg6MDA6MDAgaG9sdG1hbm4gRXhwICQKKyAqLwor IAorI2lmbmRlZiBfX0hfQkxVRVpfVVRJTF9IX18KKyNkZWZpbmUgX19IX0JMVUVaX1VUSUxfSF9f CisKK2ludCBmaW5kX2Nvbm4oaW50IHMsIGludCBkZXZfaWQsIGxvbmcgYXJnKTsKKworI2VuZGlm IC8vX19IX0JMVUVaX1VUSUxfSF9fCi0tLSBibHVlei11dGlscy1jdnMub3JpZy9jb21tb24vTWFr ZWZpbGUuYW0JMjAwNS0wOS0yMyAxNDowOToyOC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV6LXV0 aWxzLWN2cy1oY2lkL2NvbW1vbi9NYWtlZmlsZS5hbQkyMDA1LTA5LTIzIDE3OjU4OjQ0LjAwMDAw MDAwMCAtMDMwMApAQCAtMiwxMCArMiwxMiBAQAogIyAgJElkOiBNYWtlZmlsZS5hbSx2IDEuMiAy MDA1LzA4LzA1IDExOjA3OjM0IGhvbHRtYW5uIEV4cCAkCiAjCiAKLW5vaW5zdF9MSUJSQVJJRVMg PSBsaWJ0ZXh0ZmlsZS5hCitub2luc3RfTElCUkFSSUVTID0gbGlidGV4dGZpbGUuYSBsaWJ1dGls LmEKIAogbGlidGV4dGZpbGVfYV9TT1VSQ0VTID0gdGV4dGZpbGUuaCB0ZXh0ZmlsZS5jCiAKK2xp YnV0aWxfYV9TT1VSQ0VTID0gdXRpbC5oIHV0aWwuYworCiBub2luc3RfUFJPR1JBTVMgPSB0ZXN0 X3RleHRmaWxlCiAKIHRlc3RfdGV4dGZpbGVfTERBREQgPSBsaWJ0ZXh0ZmlsZS5hCi0tLSBibHVl ei11dGlscy1jdnMub3JpZy9jb21tb24vdXRpbC5jCTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAw MDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC9jb21tb24vdXRpbC5jCTIwMDUtMDkt MjMgMTc6NTg6NDQuMDAwMDAwMDAwIC0wMzAwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKgorICog IEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDUgICAgICAgQ2xhdWRpbyBUYWthaGFzaSA8Y2xhdWRpby50YWthaGFzaUBp bmR0Lm9yZy5icj4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSAgTWFyY2VsIEhvbHRtYW5u IDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICoKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICoK KyAqICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUworICogIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFS VFkgUklHSFRTLgorICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMp IEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAqICBDTEFJTSwgT1IgQU5ZIFNQRUNJ QUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyAKKyAq ICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMs IFdIRVRIRVIgSU4gQU4gCisgKiAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9U SEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgKiAgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAg QUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFO WSBQQVRFTlRTLCAKKyAqICBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUywg UkVMQVRJTkcgVE8gVVNFIE9GIFRISVMgCisgKiAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyAq CisgKgorICogICRJZDogdXRpbC5jLHYgMC4xIDIwMDUvMDkvMjMgMDg6MDA6MDAgaG9sdG1hbm4g RXhwICQKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgor I2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5 cy9zeXNsb2cuaD4KKworI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRl IDxibHVldG9vdGgvaGNpLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4KKworCitp bnQgZmluZF9jb25uKGludCBzLCBpbnQgZGV2X2lkLCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaGNp X2Nvbm5fbGlzdF9yZXEgKmNsID0gTlVMTDsKKwlzdHJ1Y3QgaGNpX2Nvbm5faW5mbyAqY2k7CisJ aW50IGk7CisJaW50IHJlc3VsdCA9IDA7CisJCisJaWYgKCEoY2wgPSBtYWxsb2MoMTAgKiBzaXpl b2YoKmNpKSArIHNpemVvZigqY2wpKSkpIHsKKwkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBhbGxv Y2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJCisJY2wtPmRldl9pZCAgID0gZGV2 X2lkOworCWNsLT5jb25uX251bSA9IDEwOworCWNpICAgICAgICAgICA9IGNsLT5jb25uX2luZm87 CisKKwlpZiAoaW9jdGwocywgSENJR0VUQ09OTkxJU1QsICh2b2lkICopIGNsKSkgeworCQlzeXNs b2coTE9HX0VSUiwgIkNhbid0IGdldCBjb25uZWN0aW9uIGxpc3RcbiIpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2wtPmNvbm5fbnVtOyBpKyssIGNpKyspIHsKKwkJaWYg KCFiYWNtcCgoYmRhZGRyX3QgKikgYXJnLCAmY2ktPmJkYWRkcikpIHsKKwkJcmVzdWx0ID0gMTsK KwkJZ290byBjbGVhbnVwOworCQl9CisJfQorY2xlYW51cDoKKwlpZihjbCkKKwkJZnJlZShjbCk7 CisJcmV0dXJuIHJlc3VsdDsKK30KLS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL3Rvb2xzL01ha2Vm aWxlLmFtCTIwMDUtMDktMjMgMTQ6MDk6MjguMDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGls cy1jdnMtaGNpZC90b29scy9NYWtlZmlsZS5hbQkyMDA1LTA5LTIzIDE3OjU4OjIyLjAwMDAwMDAw MCAtMDMwMApAQCAtNDQsNyArNDQsNyBAQAogaGNpY29uZmlnX0xEQUREID0gQEJMVUVaX0xJQlNA ICQodG9wX2J1aWxkZGlyKS9jb21tb24vbGlidGV4dGZpbGUuYQogCiBoY2l0b29sX1NPVVJDRVMg PSBoY2l0b29sLmMgb3VpLmggb3VpLmMKLWhjaXRvb2xfTERBREQgPSBAQkxVRVpfTElCU0AgJCh0 b3BfYnVpbGRkaXIpL2NvbW1vbi9saWJ0ZXh0ZmlsZS5hCitoY2l0b29sX0xEQUREID0gQEJMVUVa X0xJQlNAICQodG9wX2J1aWxkZGlyKS9jb21tb24vbGlidGV4dGZpbGUuYSAkKHRvcF9idWlsZGRp cikvY29tbW9uL2xpYnV0aWwuYQogCiBsMnBpbmdfTERBREQgPSBAQkxVRVpfTElCU0AKIAotLS0g Ymx1ZXotdXRpbHMtY3ZzLm9yaWcvdG9vbHMvaGNpdG9vbC5jCTIwMDUtMDktMjMgMTQ6MDk6Mjgu MDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC90b29scy9oY2l0b29sLmMJ MjAwNS0wOS0yNyAxNTo1MzozOS4wMDAwMDAwMDAgLTAzMDAKQEAgLTQ5LDYgKzQ5LDcgQEAKIAog I2luY2x1ZGUgInRleHRmaWxlLmgiCiAjaW5jbHVkZSAib3VpLmgiCisjaW5jbHVkZSAidXRpbC5o IgogCiAjZGVmaW5lIGZvcl9lYWNoX29wdChvcHQsIGxvbmcsIHNob3J0KSB3aGlsZSAoKG9wdD1n ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBzaG9ydCA/IHNob3J0OiIrIiwgbG9uZywgTlVMTCkpICE9 IC0xKQogCkBAIC0xMDMsMzIgKzEwNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg ZmluZF9jb25uKGludCBzLCBpbnQgZGV2X2lkLCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgaGNpX2Nv bm5fbGlzdF9yZXEgKmNsOwotCXN0cnVjdCBoY2lfY29ubl9pbmZvICpjaTsKLQlpbnQgaTsKLQot CWlmICghKGNsID0gbWFsbG9jKDEwICogc2l6ZW9mKCpjaSkgKyBzaXplb2YoKmNsKSkpKSB7Ci0J CXBlcnJvcigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7Ci0JCWV4aXQoMSk7Ci0JfQotCWNsLT5k ZXZfaWQgPSBkZXZfaWQ7Ci0JY2wtPmNvbm5fbnVtID0gMTA7Ci0JY2kgPSBjbC0+Y29ubl9pbmZv OwotCi0JaWYgKGlvY3RsKHMsIEhDSUdFVENPTk5MSVNULCAodm9pZCAqKSBjbCkpIHsKLQkJcGVy cm9yKCJDYW4ndCBnZXQgY29ubmVjdGlvbiBsaXN0Iik7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IGNsLT5jb25uX251bTsgaSsrLCBjaSsrKQotCQlpZiAoIWJhY21wKChiZGFk ZHJfdCAqKSBhcmcsICZjaS0+YmRhZGRyKSkKLQkJCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19 Ci0KIHN0YXRpYyB2b2lkIGhleF9kdW1wKGNoYXIgKnByZWYsIGludCB3aWR0aCwgdW5zaWduZWQg Y2hhciAqYnVmLCBpbnQgbGVuKQogewogCXJlZ2lzdGVyIGludCBpLG47Cg== ------=_Part_6642_12528200.1128104566002-- ------------------------------------------------------- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel