Return-Path: Message-ID: From: Claudio Takahasi To: bluez-devel@lists.sourceforge.net, cktakahasi@gmail.com In-Reply-To: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_13765_2334722.1121449057048" References: Subject: [Bluez-devel] Re: bluetoothd specification 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, 15 Jul 2005 14:37:37 -0300 ------=_Part_13765_2334722.1121449057048 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Marcel, I am sending a suggestion for bluetoothd implementation. Please send your feedback. Regarding the d-bus version checking, there is a different approach using pkg-config for check dbus version instead of verify if a function belongs to the dbus-1 The next step is implement the main loop. Regards, Claudio. On 7/12/05, Claudio Takahasi wrote: > Hi Marcel, >=20 > Periodic inquiry and adapter setup is extremely > necessary for me. Is it possible set a high priority > for these features? >=20 > Regarding the interfaces and objects path of the > bluetoothd my suggestion is: >=20 > >>>bluetoothd > DBus service : org.bluez.hci > DBus interface: org.bluez.hci > DBus object path: org/bluez/hci > - setup link properties > - setup inquiry mode > - kill bluetoothd > - show local adapters > - ??? > >>>SDP > DBus service : org.bluez.sdp > DBus interface: org.bluez.sdp > DBus object path: org/bluez/sdp > methods: > - search > - register/unregister > - get local services > - ??? >=20 > >>>PAN > DBus service : org.bluez.pan > DBus interface: org.bluez.pan > DBus object path: org/bluez/pan > - connect/disconnect > - listen start/stop > - connections >=20 >=20 > Open issues: > - How/Where handle multiple bluetooth adapters? > solution1: the device id (hci0) can be part of object path > eg: org.bluez.hci0.pan org.bluez.hci0.sdp >=20 > solution2: pass the device id as parameter or define a method > to set the active adapter. >=20 >=20 > I am not sure if it is better define a hierarchical objects or > register multiples objects. Dbus support two functions: > dbus_connection_register_object_path and > dbus_connection_register_fallback(for a given subsection of the > object hierarchy). But I think that it is not important now because > for both approachs the message handler functions are distinct. > I will investigate more which approach is the best. >=20 > Defining an hierarchical approach make easier define policy/rules > in the dbus configuration files. >=20 > Do you have a different design for it or suggestions? > There are a lot services that shall be inserted in the bluetoothd, > maybe should be better define multiple interfaces(adapter, link, ... ) > for this daemon. >=20 >=20 > Regards, > Claudio. > ------=_Part_13765_2334722.1121449057048 Content-Type: application/octet-stream; name="bluetoothd-patch-00.01" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bluetoothd-patch-00.01" LS0tIGJsdWV6LXV0aWxzLTIuMTgub3JpZy9hY2luY2x1ZGUubTQJMjAwNS0wNy0wMyAxODoxOTo1 MS4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV0b290aGQtMC4wLjQvYWNpbmNsdWRlLm00CTIwMDUt MDctMTUgMTQ6MTc6NTcuNDE4MzY2MDY0IC0wMzAwCkBAIC0yNTUsNiArMjU1LDM0IEBACiAJQUNf U1VCU1QoREJVU19MSUJTKQogXSkKIAorQUNfREVGVU4oW0FDX1ZFUl9EQlVTXSwgWworCWlmIHRl c3QgIiR7ZGJ1c19mb3VuZH0iID0gInllcyI7IHRoZW4gIAorCQlpZiB0ZXN0IC16ICIkUEtHX0NP TkZJRyI7IHRoZW4KKyAgICAgIAkJCUFDX1BBVEhfUFJPRyhQS0dfQ09ORklHLCBwa2ctY29uZmln LCBubykKKyAgICAgICAgCWZpCisJCWlmIHRlc3QgIiRQS0dfQ09ORklHIiA9ICJubyIgOyB0aGVu CisJCQllY2hvICIqKiogVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZC4g SXQgaXMiIAorCQkJZWNobyAiKioqIHJlcXVpcmVkIGZvciBjaGVjayBELUJVUyB2ZXJzaW9uLiBN YWtlIHN1cmUgaXQgaXMiCisJICAgICAgICAJZWNobyAiKioqIGluIHlvdXIgcGF0aCwgb3Igc2V0 IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IgorCQkJZWNobyAiKioqIHZhcmlhYmxlIHRvIHRo ZSBmdWxsIHBhdGggdG8gcGtnLWNvbmZpZy4iCisJCWVsc2UKKwkJCisJCQlBQ19NU0dfQ0hFQ0tJ TkcoW2RidXMgdmVyc2lvbl0pCisJCisJCQlEQlVTX1ZFUlNJT049YCRQS0dfQ09ORklHIC0tbW9k dmVyc2lvbiBkYnVzLTFgCisJCQlEQlVTX01BSk9SX1ZFUj1gZWNobyAkREJVU19WRVJTSU9OIHwg Y3V0IC1kLiAtZiAxYAorCQkJREJVU19NSU5PUl9WRVI9YGVjaG8gJERCVVNfVkVSU0lPTiB8IGN1 dCAtZC4gLWYgMmAKKwkJCURCVVNfTUlDUk9fVkVSPWBlY2hvICREQlVTX1ZFUlNJT04gfCBjdXQg LWQuIC1mIDNgCisKKwkJCUFDX01TR19SRVNVTFQoJERCVVNfVkVSU0lPTikKKwkJCUFDX0RFRklO RV9VTlFVT1RFRChEQlVTX01BSk9SX1ZFUiwgJERCVVNfTUFKT1JfVkVSLCBbRC1CVVMgbWFqb3Ig dmVyc2lvbi5dKQorCQkJQUNfREVGSU5FX1VOUVVPVEVEKERCVVNfTUlOT1JfVkVSLCAkREJVU19N SU5PUl9WRVIsIFtELUJVUyBtaW5vciB2ZXJzaW9uLl0pCisJCQlBQ19ERUZJTkVfVU5RVU9URUQo REJVU19NSUNST19WRVIsICREQlVTX01JQ1JPX1ZFUiwgW0QtQlVTIG1pY3JvIHZlcnNpb24uXSkK KworCQlmaQorCWZpCitdKQorCiBBQ19ERUZVTihbQUNfQVJHX0JMVUVaXSwgWwogCWRlYnVnX2Vu YWJsZT1ubwogCXBpZV9lbmFibGU9bm8KLS0tIGJsdWV6LXV0aWxzLTIuMTgub3JpZy9jb25maWcu aC5pbgkyMDA1LTA3LTAzIDIwOjE1OjM4LjAwMDAwMDAwMCAtMDMwMAorKysgYmx1ZXRvb3RoZC0w LjAuNC9jb25maWcuaC5pbgkyMDA1LTA3LTE1IDE0OjE3OjU3LjQxNzM2NjIxNiAtMDMwMApAQCAt MTUsNiArMTUsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkYnVzX3BlbmRp bmdfY2FsbF9zdGVhbF9yZXBseSgpIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfREJVU19QRU5E SU5HX0NBTExfU1RFQUxfUkVQTFkKIAorLyogRC1CVVMgbWFqb3IgdmVyc2lvbi4gKi8KKyN1bmRl ZiBEQlVTX01BSk9SX1ZFUgorCisvKiBELUJVUyBtaW5vciB2ZXJzaW9uLiAqLworI3VuZGVmIERC VVNfTUlOT1JfVkVSCisKKy8qIEQtQlVTIG1pY3JvIHZlcnNpb24uICovCisjdW5kZWYgREJVU19N SUNST19WRVIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFk ZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0RMRkNOX0gKIAotLS0gYmx1ZXotdXRpbHMtMi4xOC5v cmlnL2NvbmZpZ3VyZS5pbgkyMDA1LTA3LTAzIDIwOjEyOjA4LjAwMDAwMDAwMCAtMDMwMAorKysg Ymx1ZXRvb3RoZC0wLjAuNC9jb25maWd1cmUuaW4JMjAwNS0wNy0xNSAxNDoxNzo1Ny40MTYzNjYz NjggLTAzMDAKQEAgLTMxLDcgKzMxLDggQEAKIEFDX1BBVEhfQUxTQQogQUNfUEFUSF9VU0IKIEFD X1BBVEhfREJVUworQUNfVkVSX0RCVVMKIAogQUNfQVJHX0JMVUVaCiAKLUFDX09VVFBVVChNYWtl ZmlsZSBjb21tb24vTWFrZWZpbGUgdG9vbHMvTWFrZWZpbGUgcmZjb21tL01ha2VmaWxlIGhjaWQv TWFrZWZpbGUgc2RwZC9NYWtlZmlsZSBkdW5kL01ha2VmaWxlIHBhbmQvTWFrZWZpbGUgaGlkZC9N YWtlZmlsZSBjdXBzL01ha2VmaWxlIGFsc2EvTWFrZWZpbGUgdGVzdC9NYWtlZmlsZSBzY3JpcHRz L01ha2VmaWxlIHBjbWNpYS9NYWtlZmlsZSBleHRyYS9NYWtlZmlsZSkKK0FDX09VVFBVVChNYWtl ZmlsZSBjb21tb24vTWFrZWZpbGUgZGFlbW9uL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIHJmY29t bS9NYWtlZmlsZSBoY2lkL01ha2VmaWxlIHNkcGQvTWFrZWZpbGUgZHVuZC9NYWtlZmlsZSBwYW5k L01ha2VmaWxlIGhpZGQvTWFrZWZpbGUgY3Vwcy9NYWtlZmlsZSBhbHNhL01ha2VmaWxlIHRlc3Qv TWFrZWZpbGUgc2NyaXB0cy9NYWtlZmlsZSBwY21jaWEvTWFrZWZpbGUgZXh0cmEvTWFrZWZpbGUp CmRpZmYgLXVyTmF3IGJsdWV6LXV0aWxzLTIuMTgub3JpZy9kYWVtb24vYmx1ZXRvb3RoZF9kYnVz LmMgYmx1ZXRvb3RoZC0wLjAuNC9kYWVtb24vYmx1ZXRvb3RoZF9kYnVzLmMKLS0tIGJsdWV6LXV0 aWxzLTIuMTgub3JpZy9kYWVtb24vYmx1ZXRvb3RoZF9kYnVzLmMJMTk2OS0xMi0zMSAyMTowMDow MC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL2JsdWV0b290aGRf ZGJ1cy5jCTIwMDUtMDctMTUgMTQ6MTc6NTcuMTExNDEyNzI4IC0wMzAwCkBAIC0wLDAgKzEsMzE2 IEBACisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGlu dXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgIE1hcmNlbCBIb2x0bWFubiA8bWFy Y2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisj aW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworCisKKyNpbmNsdWRlICJibHVldG9vdGhkX2lu dGVybmFsLmgiCisjaW5jbHVkZSAicGFuX2RidXMuaCIKKworCit0eXBlZGVmIHN0cnVjdCB7CisJ Y29uc3QgY2hhciAqcHJvZmlsZTsKKwlpbnQ4X3QgICAgICBzdGF0dXM7IC8qIDE6YWN0aXZlICAw OmRpc2FibGVkKi8KKwlyZWdpc3Rlcl9mdW5jdGlvbl90ICpyZWdfZnVuYzsKKwl1bnJlZ2lzdGVy X2Z1bmN0aW9uX3QgKnVucmVnX2Z1bmM7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSlidGRfZmFs bGJhY2tfZW50cnlfdDsKKworYnRkX2ZhbGxiYWNrX2VudHJ5X3QgYnRkX3Byb2ZpbGVzIFtdID0g eworCXtQQU5fREJVU19TRVJWSUNFLCAxICwgcGFuX2RidXNfcmVnaXN0ZXIsIHBhbl9kYnVzX3Vu cmVnaXN0ZXJ9LAorCS8qIGR1bmQgKi8KKwkvKiBzZHAgKi8KKwkvKiBoaWQgKi8KKwl7IE5VTEws IDAsIE5VTEwgLCBOVUxMIH0KK307CisKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJaW50OF90ICAg ICAgcnVuOworCURCdXNDb25uZWN0aW9uKiBzeXNfYnVzOworCURCdXNDb25uZWN0aW9uKiBzZXNz X2J1czsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBibHVldG9vdGhkX2FwcF9kYXRhX3Q7CisK KworCitpbnQ4X3QgYmx1ZXRvb3RoZF9kaXNhYmxlX3Byb2ZpbGUoY29uc3QgY2hhciAqcHJvZmls ZSkKK3sKKwlpbnQ4X3QgcmV0ID0gMDsKKwlidGRfZmFsbGJhY2tfZW50cnlfdCAqcHRyID0gYnRk X3Byb2ZpbGVzOworCWNoYXIgc2VydmljZVsxMjhdOworCQorCXNwcmludGYoc2VydmljZSwgIiVz LiVzIixCTFVFVE9PVEhEX0RCVVNfU0VSVklDRSwgcHJvZmlsZSk7CisKKwlmb3IoO3B0ci0+cHJv ZmlsZTsgcHRyKyspIHsKKwkJaWYoc3RyY2FzZWNtcChwdHItPnByb2ZpbGUsIHNlcnZpY2UpID09 IDAgKSB7CisJCQlwdHItPnN0YXR1cyAgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30K K2ludDhfdCBibHVldG9vdGhkX2VuYWJsZV9wcm9maWxlKGNvbnN0IGNoYXIgKnByb2ZpbGUpCit7 CisJaW50OF90IHJldCA9IDA7CisJYnRkX2ZhbGxiYWNrX2VudHJ5X3QgKnB0ciA9IGJ0ZF9wcm9m aWxlczsKKwkKKwljaGFyIHNlcnZpY2VbMTI4XTsKKwkKKwlzcHJpbnRmKHNlcnZpY2UsICIlcy4l cyIsQkxVRVRPT1RIRF9EQlVTX1NFUlZJQ0UsIHByb2ZpbGUpOworCQorCQorCWZvcig7cHRyLT5w cm9maWxlOyBwdHIrKykgeworCQlpZihzdHJjYXNlY21wKHB0ci0+cHJvZmlsZSwgc2VydmljZSkg PT0gMCApIHsKKwkJCXB0ci0+c3RhdHVzICA9IDA7CisJCX0KKwl9CisJCisJcmV0dXJuIHJldDsK K30KKworCisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBfYnRkX21zZ19mdW5jKERCdXNDb25u ZWN0aW9uICpjb25uLCAKKwkJCQkgICAgICAgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7 CisKKworLyoqCisgKiBWaXJ0dWFsIHRhYmxlIHRoYXQgaW1wbGVtZW50cyB0aGUgaGFuZGxlcnMK KyAqIG9mIHRoZSBvYmplY3QgcGF0aCBoaWVyYXJjaHkKKyAqKi8KK3N0YXRpYyBEQnVzT2JqZWN0 UGF0aFZUYWJsZSBidGRfdnRhYmxlID0geworCU5VTEwsCisJJl9idGRfbXNnX2Z1bmMsCisJTlVM TCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTAorfTsKKworc3RhdGljIGJsdWV0b290aGRfYXBwX2Rh dGFfdCBhcHBfZGF0YTsKKworCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9wZXJpb2RpY19p bnFfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworc3RhdGljIERCdXNNZXNzYWdl KiBoYW5kbGVfc2Nhbl9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMg REJ1c01lc3NhZ2UqIGhhbmRsZV9nZXRfZGV2X3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpk YXRhKTsKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2xpc3Rfc2VydmljZXNfcmVxKERCdXNN ZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfZXhp dF9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzZXJ2aWNlX3Rh YmxlX3QgYnRkX3NlcnZpY2VzW10gPSB7CisJe0JMVUVUT09USERfU1ZDX1BFUklPRElDX0lOUV9S RVEsICAgICAgaGFuZGxlX3BlcmlvZGljX2lucV9yZXEgfSwKKwl7QkxVRVRPT1RIRF9TVkNfU0NB Tl9SRVEsICAgICAgICAgICAgICBoYW5kbGVfc2Nhbl9yZXEgfSwKKwl7QkxVRVRPT1RIRF9TVkNf R0VUX0RFVklDRVNfUkVRLCAgICAgICBoYW5kbGVfZ2V0X2Rldl9yZXEgfSwKKwl7QkxVRVRPT1RI RF9TVkNfTElTVF9TRVJWSUNFU19SRVEsICAgICBoYW5kbGVfbGlzdF9zZXJ2aWNlc19yZXEgfSwK Kwl7QkxVRVRPT1RIRF9TVkNfRVhJVF9SRVEsICAgICAgICAgICAgICBoYW5kbGVfZXhpdF9yZXEg fSwKKwl7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBfYnRkX3Np Z25hbF9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLCB2b2lk ICpkYXRhKQoreworCURCdXNIYW5kbGVyUmVzdWx0IHJldCA9IERCVVNfSEFORExFUl9SRVNVTFRf Tk9UX1lFVF9IQU5ETEVEOworCWNvbnN0IGNoYXIgKmlmYWNlOworCWNvbnN0IGNoYXIgKm1ldGhv ZDsKKworCWlmKCFtc2cgfHwgIWNvbm4pCisJCXJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05P VF9ZRVRfSEFORExFRDsKKwkKKwlpZiAoZGJ1c19tZXNzYWdlX2dldF90eXBlIChtc2cpICE9IERC VVNfTUVTU0FHRV9UWVBFX1NJR05BTCkKKwkJcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9U X1lFVF9IQU5ETEVEOworCisJaWZhY2UgPSBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtc2cp OworCW1ldGhvZCA9IGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG1zZyk7CisJCisJaWYoc3RyY21w KGlmYWNlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCkgPT0gMCkgeworCQlpZihzdHJjbXAobWV0aG9k LCAiRGlzY29ubmVjdGVkIikgPT0gMCl7CisJCQkvL1RPRE8KKwkJCWFwcF9kYXRhLnJ1biA9IDA7 CisJCQlyZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCX0KKwl9IGVsc2UKKwkJ aWYoc3RyY21wKGlmYWNlLCBEQlVTX0lOVEVSRkFDRV9EQlVTKSA9PSAwKSB7CisJCQlpZihzdHJj bXAobWV0aG9kLCAiTmFtZU93bmVyQ2hhbmdlZCIpID09IDApIHsKKwkJCS8vVE9ETworCQkJCQkg IHJldCA9IERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKwkJCX0KKwkJCWlmKHN0cmNtcCht ZXRob2QsICJOYW1lQWNxdWlyZWQiKSA9PSAwKSB7CisJCQkvL1RPRE8KKwkJCQkJICByZXQgPSBE QlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCQl9CisJCQorCQl9CisJCXJldHVybiByZXQ7 Cit9CisKKworCitpbnQ4X3QgYmx1ZXRvb3RoZF9pbml0KCkKK3sKKwlidGRfZmFsbGJhY2tfZW50 cnlfdCAqcHRyID0gYnRkX3Byb2ZpbGVzOworCQorCURCdXNFcnJvciBkYnVzX2Vycm9yOworCWlu dDhfdCByZXQgPSAwOworCisJCisJbWVtc2V0KCZhcHBfZGF0YSwgMCwgc2l6ZW9mKGJsdWV0b290 aGRfYXBwX2RhdGFfdCkpOworCQorCWRidXNfZXJyb3JfaW5pdCgmZGJ1c19lcnJvcik7CisJYXBw X2RhdGEuc3lzX2J1cyA9IGRidXNfYnVzX2dldChEQlVTX0JVU19TWVNURU0sICZkYnVzX2Vycm9y KTsKKworCWlmICghYXBwX2RhdGEuc3lzX2J1cykgeworCQlzeXNsb2coTE9HX0VSUiwgIkQtQnVz IEVycm9yOiAlcyIsIGRidXNfZXJyb3IubWVzc2FnZSk7CisJCWRidXNfZXJyb3JfZnJlZSgmZGJ1 c19lcnJvcik7CisJCXJldCA9ICAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworI2lmIDAJCisJ RGlzYWJsZSBmb3Igbm93CisJZGJ1c19lcnJvcl9pbml0KCZkYnVzX2Vycm9yKTsKKwlhcHBfZGF0 YS5zZXNzX2J1cyA9IGRidXNfYnVzX2dldChEQlVTX0JVU19TRVNTSU9OLCAmZGJ1c19lcnJvcik7 CisKKwlpZiAoIWFwcF9kYXRhLnNlc3NfYnVzKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiRC1CdXMg RXJyb3I6ICVzIiwgZGJ1c19lcnJvci5tZXNzYWdlKTsKKwkJZGJ1c19lcnJvcl9mcmVlKCZkYnVz X2Vycm9yKTsKKwkJcmV0ID0gIC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorI2VuZGlmCisJZGJ1 c19lcnJvcl9pbml0ICgmZGJ1c19lcnJvcik7CisJCisJREJVU19CVVNfUkVRVUVTVF9OQU1FKGFw cF9kYXRhLnN5c19idXMsIEJMVUVUT09USERfREJVU19TRVJWSUNFLCAKKwkJCSAgICAgIERCVVNf TkFNRV9GTEFHX1BST0hJQklUX1JFUExBQ0VNRU5ULCAKKwkJCSAgICAgICZkYnVzX2Vycm9yKTsK KwkKKwlpZiAoZGJ1c19lcnJvcl9pc19zZXQgKCZkYnVzX2Vycm9yKSkgeworCQlzeXNsb2coTE9H X0VSUiwiRC1CdXMgRXJyb3I6ICVzXG4iLCBkYnVzX2Vycm9yLm1lc3NhZ2UpOworCQlkYnVzX2Vy cm9yX2ZyZWUgKCZkYnVzX2Vycm9yKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwkJ CisJfQorCQorCWlmKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoYXBwX2Rh dGEuc3lzX2J1cywgQkxVRVRPT1RIRF9EQlVTX09CSl9QQVRILCAmYnRkX3Z0YWJsZSwgTlVMTCkp IHsKKwkJc3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHJlZ2lzdGVyICVzIG9iamVjdCIs IEJMVUVUT09USERfREJVU19PQkpfUEFUSCk7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7 CisJfQorCS8vUmVnaXN0ZXIgZmFsbGJhY2sgRC1CdXMgb2JqZWN0cworCXdoaWxlKHB0ci0+cHJv ZmlsZSkKKwl7CisJCWlmKHB0ci0+c3RhdHVzKQorCQkJcHRyLT5yZWdfZnVuYyhhcHBfZGF0YS5z eXNfYnVzKTsKKwkJcHRyKys7CisJfQorCQorCisJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2Zp bHRlciAoYXBwX2RhdGEuc3lzX2J1cywgX2J0ZF9zaWduYWxfZmlsdGVyLCBOVUxMLCBOVUxMKSkg eworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gYWRkIGZpbHRlciIpOworCQlyZXQg PSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8vVE9ETyBpbml0IG1haW4gbG9vcAorCQor CitjbGVhbnVwOgorCXJldHVybiByZXQ7Cit9CisKK2ludDhfdCBibHVldG9vdGhkX2V4aXQoKQor eworCWludDhfdCByZXQgPSAwOworCWFwcF9kYXRhLnJ1biA9IDA7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IF9idGRfbXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24g KmNvbm4sIAorCQkJCSAgICAgICBEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCXNl cnZpY2VfdGFibGVfdCAqcHRyX2hhbmRsZXJzID0gIGJ0ZF9zZXJ2aWNlczsKKwlEQnVzTWVzc2Fn ZSAqcmVwbHkgPSBOVUxMOworCURCdXNIYW5kbGVyUmVzdWx0IHJldCA9IERCVVNfSEFORExFUl9S RVNVTFRfTk9UX1lFVF9IQU5ETEVEOworCXVpbnQxNl90IHR5cGU7CisJY29uc3QgY2hhciAqaWZh Y2U7CisJY29uc3QgY2hhciAqbWV0aG9kOworCisJdHlwZSA9IGRidXNfbWVzc2FnZV9nZXRfdHlw ZShtc2cpOworCWlmYWNlID0gZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobXNnKTsKKwltZXRo b2QgPSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlciAobXNnKTsKKwkKKwlpZigodHlwZSA9PSBEQlVT X01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkgJiYgCisJCSAgIChzdHJjbXAoaWZhY2UsIEJMVUVU T09USERfREJVU19JRkFDRV9SRVEpID09IDApICYmCisJCSAgIChtZXRob2QgIT0gTlVMTCkpewor CQlmb3IgKDtwdHJfaGFuZGxlcnMtPm5hbWU7IHB0cl9oYW5kbGVycysrKSB7CisJCQlpZiAoc3Ry Y21wKG1ldGhvZCwgcHRyX2hhbmRsZXJzLT5uYW1lKSA9PSAwKSB7CisJCQkJcmVwbHkgPSAocHRy X2hhbmRsZXJzLT5oYW5kbGVyX2Z1bmMpKG1zZywgZGF0YSk7CisJCQkJaWYgKHJlcGx5KSB7CisJ CQkJCWlmICghZGJ1c19jb25uZWN0aW9uX3NlbmQgKGNvbm4sIHJlcGx5LCBOVUxMKSkgeworCQkJ CQkJc3lzbG9nKExPR19FUlIsICIlcyBsaW5lOiVkIENhbid0IHNlbmQgcmVwbHkgbWVzc2FnZSEi LAorCQkJCQkJCQlfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXykgOworCQkJCQl9CisJCQkJ CWRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOworCQkJCX0KKwkJCQlyZXQgPSBEQlVTX0hBTkRM RVJfUkVTVUxUX0hBTkRMRUQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJICAgfQorCQkgICBy ZXR1cm4gcmV0OworCit9CisKKworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfcGVyaW9kaWNf aW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlICpy ZXBseSA9IE5VTEw7CisJCisJcmV0dXJuIHJlcGx5OworfQorc3RhdGljIERCdXNNZXNzYWdlKiBo YW5kbGVfc2Nhbl9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVz c2FnZSAqcmVwbHkgPSBOVUxMOworCQorCXJldHVybiByZXBseTsKK30KK3N0YXRpYyBEQnVzTWVz c2FnZSogaGFuZGxlX2dldF9kZXZfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7 CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CitzdGF0 aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9saXN0X3NlcnZpY2VzX3JlcShEQnVzTWVzc2FnZSAqbXNn LCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJCisJcmV0dXJu IHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9leGl0X3JlcShEQnVzTWVz c2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJ CisJcmV0dXJuIHJlcGx5OworfQpkaWZmIC11ck5hdyBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFl bW9uL2JsdWV0b290aGRfZGJ1cy5oIGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL2JsdWV0b290aGRf ZGJ1cy5oCi0tLSBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL2JsdWV0b290aGRfZGJ1cy5o CTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVldG9vdGhkLTAuMC40 L2RhZW1vbi9ibHVldG9vdGhkX2RidXMuaAkyMDA1LTA3LTE1IDE0OjE3OjU3LjExMzQxMjQyNCAt MDMwMApAQCAtMCwwICsxLDM0IEBACisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90 b2NvbCBzdGFjayBmb3IgTGludXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgIE1h cmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaWZuZGVm IF9fSF9CTFVFVE9PVEhEX0RCVVNfSF9fCisjZGVmaW5lIF9fSF9CTFVFVE9PVEhEX0RCVVNfSF9f CisKKyNpbmNsdWRlICJibHVldG9vdGhkX2ludGVybmFsLmgiCisKK2ludDhfdCBibHVldG9vdGhk X2luaXQoKTsKK2ludDhfdCBibHVldG9vdGhkX2V4aXQoKTsKK2ludDhfdCBibHVldG9vdGhkX2Rp c2FibGVfcHJvZmlsZShjb25zdCBjaGFyICpwcm9maWxlKTsKK2ludDhfdCBibHVldG9vdGhkX2Vu YWJsZV9wcm9maWxlKGNvbnN0IGNoYXIgKnByb2ZpbGUpOworCisKKyNlbmRpZiAvKiBfX0hfQkxV RVRPT1RIRF9EQlVTX0hfXyAqLwpkaWZmIC11ck5hdyBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFl bW9uL2JsdWV0b290aGRfaW50ZXJuYWwuaCBibHVldG9vdGhkLTAuMC40L2RhZW1vbi9ibHVldG9v dGhkX2ludGVybmFsLmgKLS0tIGJsdWV6LXV0aWxzLTIuMTgub3JpZy9kYWVtb24vYmx1ZXRvb3Ro ZF9pbnRlcm5hbC5oCTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVl dG9vdGhkLTAuMC40L2RhZW1vbi9ibHVldG9vdGhkX2ludGVybmFsLmgJMjAwNS0wNy0xNSAxNDox Nzo1Ny4xMTM0MTI0MjQgLTAzMDAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqCisgKiAgQmx1ZVog LSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgKgorICogIENvcHlyaWdodCAo QykgMjAwNC0yMDA1ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CisgKgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQor ICoKKyAqLworI2lmbmRlZiBfX0hfQkxVRVRPT1RIRF9JTlRFUk5BTF9IX18KKyNkZWZpbmUgX19I X0JMVUVUT09USERfSU5URVJOQUxfSF9fCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNs dWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2luY2x1ZGUgPHN5cy9z eXNsb2cuaD4KKworI2luY2x1ZGUgImRidXMuaCIKKworCisKKyNkZWZpbmUgQ0hFQ0tfREJVU19W RVJTSU9OKG1ham9yLCBtaW5vcikgXAorCQkoREJVU19NQUpPUl9WRVIgPiAobWFqb3IpIHx8IFwK KwkJIAkoREJVU19NQUpPUl9WRVIgPT0gKG1ham9yKSAmJiBEQlVTX01JTk9SX1ZFUiA+PSAobWlu b3IpKSkKKworCisjaWYgQ0hFQ0tfREJVU19WRVJTSU9OKDAsIDMwKQorCSNkZWZpbmUgREJVU19C VVNfUkVRVUVTVF9OQU1FKHgseSx6LHcpCQkJZGJ1c19idXNfcmVxdWVzdF9uYW1lKHgseSx6LHcp CisjZWxzZSAvKiA8IDAuMzAgKi8KKwkjZGVmaW5lIERCVVNfQlVTX1JFUVVFU1RfTkFNRSh4LHks eix3KSAgICAgICAJCWRidXNfYnVzX2FjcXVpcmVfc2VydmljZSh4LHkseix3KQorCSNkZWZpbmUg REJVU19JTlRFUkZBQ0VfTE9DQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19JTlRF UkZBQ0VfT1JHX0ZSRUVERVNLVE9QX0xPQ0FMCisJI2RlZmluZSBEQlVTX0lOVEVSRkFDRV9EQlVT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0lOVEVSRkFDRV9PUkdfRlJFRURFU0tU T1BfREJVUworI2VuZGlmCisKK3R5cGVkZWYgaW50OF90ICByZWdpc3Rlcl9mdW5jdGlvbl90KERC dXNDb25uZWN0aW9uKik7Cit0eXBlZGVmIGludDhfdCAgdW5yZWdpc3Rlcl9mdW5jdGlvbl90KERC dXNDb25uZWN0aW9uKik7Cit0eXBlZGVmIERCdXNNZXNzYWdlKiAoc2VydmljZV9oYW5kbGVyX2Z1 bmNfdCkoREJ1c01lc3NhZ2UgKiwgdm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljb25z dCBjaGFyICpuYW1lOworCXNlcnZpY2VfaGFuZGxlcl9mdW5jX3QgKmhhbmRsZXJfZnVuYzsKKwlj b25zdCBjaGFyICpzaWduYXR1cmU7IC8qIFRPRE8gKi8KK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQp KXNlcnZpY2VfdGFibGVfdDsKKworCisKKyNlbmRpZiAvKiBfX0hfQkxVRVRPT1RIRF9JTlRFUk5B TF9IX18gKi8KZGlmZiAtdXJOYXcgYmx1ZXotdXRpbHMtMi4xOC5vcmlnL2RhZW1vbi9kYnVzLmgg Ymx1ZXRvb3RoZC0wLjAuNC9kYWVtb24vZGJ1cy5oCi0tLSBibHVlei11dGlscy0yLjE4Lm9yaWcv ZGFlbW9uL2RidXMuaAkxOTY5LTEyLTMxIDIxOjAwOjAwLjAwMDAwMDAwMCAtMDMwMAorKysgYmx1 ZXRvb3RoZC0wLjAuNC9kYWVtb24vZGJ1cy5oCTIwMDUtMDctMTUgMTQ6MTc6NTcuMTExNDEyNzI4 IC0wMzAwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKgorICogIEJsdWVaIC0gQmx1ZXRvb3RoIHBy b3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSAg TWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICoKKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj ZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpZm5k ZWYgX19IX0JMVUVUT09USERfSF9fCisjZGVmaW5lIF9fSF9CTFVFVE9PVEhEX0hfXworCisvKiBi bHVldG9vdGhkIEQtQnVzIHNlcnZpY2VzICovCisjZGVmaW5lIEJMVUVUT09USERfREJVU19TRVJW SUNFCSAgICAgICAgICJvcmcuYmx1ZXouYmx1ZXRvb3RoZCIKKyNkZWZpbmUgQkxVRVRPT1RIRF9E QlVTX0lGQUNFX1JFUSAgICAgICAgQkxVRVRPT1RIRF9EQlVTX1NFUlZJQ0UiLnJlcXVlc3QiCisj ZGVmaW5lIEJMVUVUT09USERfREJVU19JRkFDRV9TSUdOQUwgICAgIEJMVUVUT09USERfREJVU19T RVJWSUNFIi5zaWduYWwiCisjZGVmaW5lIEJMVUVUT09USERfREJVU19PQkpfUEFUSCAgICAgICAg ICIvb3JnL2JsdWV6L2JsdWV0b290aGQiCisKKyNkZWZpbmUgQkxVRVRPT1RIRF9TVkNfUEVSSU9E SUNfSU5RX1JFUSAgICAgICAgICAgICAgICJQZXJpb2RpY0lucSIKKyNkZWZpbmUgQkxVRVRPT1RI RF9TVkNfSU5RX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICJJbnF1aXJ5IgorI2RlZmluZSBC TFVFVE9PVEhEX1NWQ19TQ0FOX1JFUSAgICAgICAgICAgICAgICAgICAgICAgIlNjYW4iCisjZGVm aW5lIEJMVUVUT09USERfU1ZDX0dFVF9ERVZJQ0VTX1JFUSAgICAgICAgICAgICAgICAiR2V0RGV2 IgorI2RlZmluZSBCTFVFVE9PVEhEX1NWQ19MSVNUX1NFUlZJQ0VTX1JFUSAgICAgICAgICAgICAg Ikxpc3RTZXJ2aWNlcyIKKyNkZWZpbmUgQkxVRVRPT1RIRF9TVkNfRVhJVF9SRVEgICAgICAgICAg ICAgICAgICAgICAgICJFeGl0IgorCisjZGVmaW5lIEJMVUVUT09USERfU0lHTkFMX05FV19ERVZJ Q0UJCSJOZXdEZXYiCisjZGVmaW5lIEJMVUVUT09USERfU0lHTkFMX0VYSVRJTkcJCSJFeGl0aW5n IgorCisvKiBwYW4gRC1CdXMgc2VydmljZXMgKi8KKyNkZWZpbmUgUEFOX0RCVVNfU0VSVklDRSAg ICAgICAgIAlCTFVFVE9PVEhEX0RCVVNfU0VSVklDRSIucGFuIgorI2RlZmluZSBQQU5fREJVU19J RkFDRV9SRVEJCUJMVUVUT09USERfREJVU19TRVJWSUNFIi5wYW4ucmVxdWVzdCIKKyNkZWZpbmUg UEFOX0RCVVNfSUZBQ0VfU0lHTkFMCQlCTFVFVE9PVEhEX0RCVVNfU0VSVklDRSIucGFuLnNpZ25h bCIKKyNkZWZpbmUgUEFOX0RCVVNfUEFUSAkJCUJMVUVUT09USERfREJVU19PQkpfUEFUSCIvcGFu IgorCisjZGVmaW5lIFBBTl9TVkNfQ09OTl9SRVEgICAgICAJCSJDb25uZWN0IgorI2RlZmluZSBQ QU5fU1ZDX0RJU0NPTk5fUkVRCQkiRGlzY29ubmVjdCIKKyNkZWZpbmUgUEFOX1NWQ19TSE9XX1JF UQkJIlNob3ciCisjZGVmaW5lIFBBTl9TVkNfSUZDT05GSUdfUkVRCQkiSWZjb25maWciICAgICAg ICAgLyogVXNlZCBmb3Igc2V0IElQLCBuZXRtYXNrLCBiY2FzdCAqLworCisvKiBzZHAgRC1CdXMg c2VydmljZXMgKi8KKyNkZWZpbmUgU0RQX0RCVVNfU0VSVklDRSAgICAgICAgIAlCTFVFVE9PVEhE X0RCVVNfU0VSVklDRSIuc2RwIgorI2RlZmluZSBTRFBfREJVU19JRkFDRV9SRVEJCUJMVUVUT09U SERfREJVU19TRVJWSUNFIi5zZHAucmVxdWVzdCIKKyNkZWZpbmUgU0RQX0RCVVNfSUZBQ0VfU0lH TkFMCQlCTFVFVE9PVEhEX0RCVVNfU0VSVklDRSIuc2RwLnNpZ25hbCIKKyNkZWZpbmUgU0RQX0RC VVNfUEFUSAkJCUJMVUVUT09USERfREJVU19PQkpfUEFUSCIvc2RwIgorI2RlZmluZSBTRFBfU1ZD X1NFQVJDSF9SRVEgICAgICAJIlNlYXJjaCIKKyNkZWZpbmUgU0RQX1NWQ19CUk9XU0VfUkVRCQki QnJvd3NlIgorCisKKyNlbmRpZiAvKiBfX0hfQkxVRVRPT1RIRF9IX18gKi8KZGlmZiAtdXJOYXcg Ymx1ZXotdXRpbHMtMi4xOC5vcmlnL2RhZW1vbi9tYWluLmMgYmx1ZXRvb3RoZC0wLjAuNC9kYWVt b24vbWFpbi5jCi0tLSBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL21haW4uYwkxOTY5LTEy LTMxIDIxOjAwOjAwLjAwMDAwMDAwMCAtMDMwMAorKysgYmx1ZXRvb3RoZC0wLjAuNC9kYWVtb24v bWFpbi5jCTIwMDUtMDctMTUgMTQ6MTc6NTcuMTExNDEyNzI4IC0wMzAwCkBAIC0wLDAgKzEsMTEz IEBACisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGlu dXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgIE1hcmNlbCBIb2x0bWFubiA8bWFy Y2VsQGhvbHRtYW5uLm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisj aW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+ CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVk ZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisKKyNpbmNsdWRlIDxi bHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaS5oPgorI2luY2x1 ZGUgPGJsdWV0b290aC9oY2lfbGliLmg+CisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2lu Y2x1ZGUgImJsdWV0b290aGRfZGJ1cy5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG1haW5f bG9wdHNbXSA9IHsKK3sgImhlbHAiLCAgICAgMCwgMCwgJ2gnIH0sCit7ICJub2RldGFjaCIsIDAs IDAsICduJyB9LAoreyAiZGlzYWJsZSIsIDEsIDAsICdkJyB9LAoreyAwLCAwLCAwLCAwIH0KK307 CisKK3N0YXRpYyBjaGFyIG1haW5fc29wdHNbXSA9ICJobmQ6IjsKKworc3RhdGljIGNoYXIgbWFp bl9oZWxwW10gPSAKKwkJIkJsdWV0b290aCBELUJ1cyBkYWVtb24gdmVyc2lvbiAiIFZFUlNJT04g IiBcbiIKKwkJIlVzYWdlOlxuIgorCQkiXHRibHVldG9vdGhkIDxvcHRpb25zPlxuIgorCQkiT3B0 aW9uczpcbiIKKwkJIlx0LS1ub2RldGFjaCAtbiAgICAgICAgICAgICBEbyBub3QgYmVjb21lIGEg ZGFlbW9uXG4iCisJCSJcdC0tZGlzYWJsZSAgLWQgIDxwcm9maWxlPiAgRGlzYWJsZSBhIHByb2Zp bGVcbiIKKwkJCisJCQorCQkiXG5cblByb2ZpbGU6XG4iCisJCSJcdFBBTiBEVU4gSElEIC4uLlxu IjsKKwkJCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludDhfdCBkZXRh Y2ggPSAxOworCWludDhfdCBvcHQ7CisJCisJd2hpbGUgKChvcHQ9Z2V0b3B0X2xvbmcoYXJnYywg YXJndiwgbWFpbl9zb3B0cywgbWFpbl9sb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCXN3aXRjaChv cHQpIHsKKwkJCWNhc2UgJ24nOgorCQkJCWRldGFjaCA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNl ICdkJzoKKwkJCQlibHVldG9vdGhkX2Rpc2FibGVfcHJvZmlsZShvcHRhcmcpOworCQkJCWJyZWFr OworCQkJY2FzZSAnaCc6CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZihtYWluX2hlbHApOworCQkJ CWV4aXQoMCk7CisJCX0KKwl9CQorCQorCWlmIChkZXRhY2gpIHsKKwkJaWYgKGZvcmsoKSkgZXhp dCgwKTsKKworCQkvKiBEaXJlY3Qgc3RkaW4sc3Rkb3V0LHN0ZGVyciB0byAnL2Rldi9udWxsJyAq LworCQl7CisJCQlpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCQkJZHVwMihm ZCwgMCk7IGR1cDIoZmQsIDEpOyBkdXAyKGZkLCAyKTsKKwkJCWNsb3NlKGZkKTsKKwkJfQorCisJ CXNldHNpZCgpOworCQljaGRpcigiLyIpOworCX0KKworCW9wZW5sb2coImJsdWV0b290aGQiLCBM T0dfUElEIHwgTE9HX05ERUxBWSB8IExPR19QRVJST1IsIExPR19EQUVNT04pOworCXN5c2xvZyhM T0dfSU5GTywgIkJsdWV0b290aCBELUJ1cyBkYWVtb24gdmVyc2lvbiAlcyIsIFZFUlNJT04pOwor CQorCWJsdWV0b290aGRfaW5pdCgpOworCWJsdWV0b290aGRfZXhpdCgpOworCQorCXJldHVybiAw OworfQpkaWZmIC11ck5hdyBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL01ha2VmaWxlLmFt IGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL01ha2VmaWxlLmFtCi0tLSBibHVlei11dGlscy0yLjE4 Lm9yaWcvZGFlbW9uL01ha2VmaWxlLmFtCTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAwMDAwIC0w MzAwCisrKyBibHVldG9vdGhkLTAuMC40L2RhZW1vbi9NYWtlZmlsZS5hbQkyMDA1LTA3LTE1IDE0 OjE3OjU3LjExMjQxMjU3NiAtMDMwMApAQCAtMCwwICsxLDE3IEBACisjCisjICAkSWQ6IE1ha2Vm aWxlLmFtLHYgMS4yIDIwMDUvMDcvMDQgMTc6Mjk6MTcgaG9sdG1hbm4gRXhwICQKKyMKKworaWYg REJVUworc2Jpbl9QUk9HUkFNUyA9IGJsdWV0b290aGQKKworYmx1ZXRvb3RoZF9TT1VSQ0VTID0g bWFpbi5jIGJsdWV0b290aGRfZGJ1cy5jIHBhbl9kYnVzLmMKKworYmx1ZXRvb3RoZF9MREFERCA9 IEBEQlVTX0xJQlNAIEBCTFVFWl9MSUJTQCAkKHRvcF9idWlsZGRpcikvY29tbW9uL2xpYnRleHRm aWxlLmEKK2VuZGlmCisKK0FNX0NGTEFHUyA9IEBCTFVFWl9DRkxBR1NAIEBEQlVTX0NGTEFHU0AK KworSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvY29tbW9uCisKK01BSU5UQUlORVJDTEVBTkZJ TEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtdXJOYXcgYmx1ZXotdXRpbHMtMi4xOC5vcmlnL2RhZW1v bi9wYW5fZGJ1cy5jIGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL3Bhbl9kYnVzLmMKLS0tIGJsdWV6 LXV0aWxzLTIuMTgub3JpZy9kYWVtb24vcGFuX2RidXMuYwkxOTY5LTEyLTMxIDIxOjAwOjAwLjAw MDAwMDAwMCAtMDMwMAorKysgYmx1ZXRvb3RoZC0wLjAuNC9kYWVtb24vcGFuX2RidXMuYwkyMDA1 LTA3LTE1IDE0OjE3OjU3LjExNDQxMjI3MiAtMDMwMApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAq CisgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgKgorICog IENvcHlyaWdodCAoQykgMjAwNC0yMDA1ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFu bi5vcmc+CisgKgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTEx LTEzMDcgIFVTQQorICoKKyAqLworIAorCisjaW5jbHVkZSAgInBhbl9kYnVzLmgiCisKKworc3Rh dGljIERCdXNIYW5kbGVyUmVzdWx0IF9wYW5fbXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24gKmNvbm4s IAorCQkJCSAgICAgICBEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKKworCisvKioKKyAq IFZpcnR1YWwgdGFibGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBoYW5kbGVycworICogb2YgdGhlIG9i amVjdCBwYXRoIGhpZXJhcmNoeQorICoqLworc3RhdGljIERCdXNPYmplY3RQYXRoVlRhYmxlIHBh bl92dGFibGUgPSB7CisJTlVMTCwKKwkmX3Bhbl9tc2dfZnVuYywKKwlOVUxMLAorCU5VTEwsCisJ TlVMTCwKKwlOVUxMCit9OworCisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2Nvbm5fcmVx KERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5k bGVfZGlzY29ubl9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1 c01lc3NhZ2UqIGhhbmRsZV9zaG93X3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsK Kworc3RhdGljIHNlcnZpY2VfdGFibGVfdCBwYW5fc2VydmljZXNbXSA9IHsKKwl7UEFOX1NWQ19D T05OX1JFUSwgICAgICAJaGFuZGxlX2Nvbm5fcmVxIH0sCisJe1BBTl9TVkNfRElTQ09OTl9SRVEs CQloYW5kbGVfZGlzY29ubl9yZXEgfSwKKwl7UEFOX1NWQ19TSE9XX1JFUSwJCWhhbmRsZV9zaG93 X3JlcSB9LAorCXtOVUxMLCBOVUxMfQorfTsKKworaW50OF90IHBhbl9kYnVzX3JlZ2lzdGVyKERC dXNDb25uZWN0aW9uKiBjb25uKQoreworCWludDhfdCByZXQgPSAwOworCQorCWlmKCFkYnVzX2Nv bm5lY3Rpb25fcmVnaXN0ZXJfZmFsbGJhY2sgKGNvbm4sIFBBTl9EQlVTX1BBVEgsICZwYW5fdnRh YmxlLCBOVUxMKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gcmVnaXN0ZXIg JXMgb2JqZWN0IiwgUEFOX0RCVVNfUEFUSCk7CisJfQorCS8vIFRPRE8gYWRkIGZpbHRlcgorCXJl dHVybiByZXQ7Cit9CisKKworaW50OF90IHBhbl9kYnVzX3VucmVnaXN0ZXIoREJ1c0Nvbm5lY3Rp b24qIGNvbm4pCit7CisJaW50OF90ICByZXQgPSAwOworCQorCWlmKCFkYnVzX2Nvbm5lY3Rpb25f dW5yZWdpc3Rlcl9vYmplY3RfcGF0aChjb25uLCBQQU5fREJVU19QQVRIKSkgeworCQlzeXNsb2co TE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gdW5yZWdpc3RlciAlcyBvYmplY3QiLCBQQU5fREJVU19Q QVRIKTsKKwl9CisJLy8gVE9ETyByZW1vdmUgZmlsdGVycworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IF9wYW5fbXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24gKmNv bm4sIAorCQkJCSAgICAgICBEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCXNlcnZp Y2VfdGFibGVfdCAqcHRyX2hhbmRsZXJzID0gIHBhbl9zZXJ2aWNlczsKKwlEQnVzTWVzc2FnZSAq cmVwbHkgPSBOVUxMOworCURCdXNIYW5kbGVyUmVzdWx0IHJldCA9IERCVVNfSEFORExFUl9SRVNV TFRfTk9UX1lFVF9IQU5ETEVEOworCXVpbnQxNl90IHR5cGU7CisJY29uc3QgY2hhciAqaWZhY2U7 CisJY29uc3QgY2hhciAqbWV0aG9kOworCisJdHlwZSA9IGRidXNfbWVzc2FnZV9nZXRfdHlwZSht c2cpOworCWlmYWNlID0gZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobXNnKTsKKwltZXRob2Qg PSBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlciAobXNnKTsKKwkKKwlpZigodHlwZSA9PSBEQlVTX01F U1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkgJiYgCisJCSAgIChzdHJjbXAoaWZhY2UsIFBBTl9EQlVT X0lGQUNFX1JFUSkgPT0gMCkgJiYKKwkJICAgKG1ldGhvZCAhPSBOVUxMKSl7CisJCWZvciAoO3B0 cl9oYW5kbGVycy0+bmFtZTsgcHRyX2hhbmRsZXJzKyspIHsKKwkJCWlmIChzdHJjbXAobWV0aG9k LCBwdHJfaGFuZGxlcnMtPm5hbWUpID09IDApIHsKKwkJCQlyZXBseSA9IChwdHJfaGFuZGxlcnMt PmhhbmRsZXJfZnVuYykobXNnLCBkYXRhKTsKKwkJCQlpZiAocmVwbHkpIHsKKwkJCQkJaWYgKCFk YnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubiwgcmVwbHksIE5VTEwpKSB7CisJCQkJCQlzeXNsb2co TE9HX0VSUiwgIiVzIGxpbmU6JWQgQ2FuJ3Qgc2VuZCByZXBseSBtZXNzYWdlISIsCisJCQkJCQkJ CV9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fKSA7CisJCQkJCX0KKwkJCQkJZGJ1c19tZXNz YWdlX3VucmVmIChyZXBseSk7CisJCQkJfQorCQkJCXJldCA9IERCVVNfSEFORExFUl9SRVNVTFRf SEFORExFRDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisK KworCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9jb25uX3JlcShEQnVzTWVzc2FnZSAqbXNn LCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJCisJcmV0dXJu IHJlcGx5OworfQorc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfZGlzY29ubl9yZXEoREJ1c01l c3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOwor CQorCXJldHVybiByZXBseTsKK30KK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3Nob3dfcmVx KERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0g TlVMTDsKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CmRpZmYgLXVyTmF3IGJsdWV6LXV0aWxzLTIuMTgu b3JpZy9kYWVtb24vcGFuX2RidXMuaCBibHVldG9vdGhkLTAuMC40L2RhZW1vbi9wYW5fZGJ1cy5o Ci0tLSBibHVlei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL3Bhbl9kYnVzLmgJMTk2OS0xMi0zMSAy MTowMDowMC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL3Bhbl9k YnVzLmgJMjAwNS0wNy0xNSAxNDoxNzo1Ny4xMTA0MTI4ODAgLTAzMDAKQEAgLTAsMCArMSwzNSBA QAorLyoKKyAqCisgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4 CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNl bEBob2x0bWFubi5vcmc+CisgKgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rvbiwg TUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworI2lmbmRlZiBfX0hfUEFOX0RCVVNfSF9fCisj ZGVmaW5lIF9fSF9QQU5EX0RCVVNfSF9fCisKKyNpbmNsdWRlICJibHVldG9vdGhkX2ludGVybmFs LmgiCisKKworCisKKworaW50OF90IHBhbl9kYnVzX3JlZ2lzdGVyKERCdXNDb25uZWN0aW9uKiBj b25uKTsKK2ludDhfdCBwYW5fZGJ1c191bnJlZ2lzdGVyKERCdXNDb25uZWN0aW9uKiBjb25uKTsK KworI2VuZGlmIC8qIF9fSF9QQU5EX0RCVVNfSF9fICovCmRpZmYgLXVyTmF3IGJsdWV6LXV0aWxz LTIuMTgub3JpZy9kYWVtb24vc2NyaXB0cy9ibHVldG9vdGhkLmNvbmYgYmx1ZXRvb3RoZC0wLjAu NC9kYWVtb24vc2NyaXB0cy9ibHVldG9vdGhkLmNvbmYKLS0tIGJsdWV6LXV0aWxzLTIuMTgub3Jp Zy9kYWVtb24vc2NyaXB0cy9ibHVldG9vdGhkLmNvbmYJMTk2OS0xMi0zMSAyMTowMDowMC4wMDAw MDAwMDAgLTAzMDAKKysrIGJsdWV0b290aGQtMC4wLjQvZGFlbW9uL3NjcmlwdHMvYmx1ZXRvb3Ro ZC5jb25mCTIwMDUtMDctMTUgMTQ6MTc6NTcuMTA2NDEzNDg4IC0wMzAwCkBAIC0wLDAgKzEsMTkg QEAKKzwhLS0gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWVzIHRoZSByZXF1aXJlZCBz ZWN1cml0eSBwb2xpY2llcworICAgICBmb3IgYmx1ZXotcGFuZCB0byB3b3JrLiAtLT4KKworPCFE T0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENv bmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRh cmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKworICA8IS0tIC4uL3N5 c3RlbS5jb25mIGhhdmUgZGVuaWVkIGV2ZXJ5dGhpbmcsIHNvIHdlIGp1c3QgcHVuY2ggc29tZSBo b2xlcyAtLT4KKworICA8cG9saWN5IGNvbnRleHQ9ImRlZmF1bHQiPgorICAgIDxhbGxvdyBvd249 Im9yZy5ibHVlei5ibHVldG9vdGhkIi8+CisKKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0i b3JnLmJsdWV6LmJsdWV0b290aGQiLz4KKyAgICA8YWxsb3cgcmVjZWl2ZV9zZW5kZXI9Im9yZy5i bHVlei5ibHVldG9vdGhkIi8+CisKKyAgICA8YWxsb3cgc2VuZF9wYXRoPSIvb3JnL2JsdWV6L2Js dWV0b290aGQiLz4KKyAgPC9wb2xpY3k+CisKKzwvYnVzY29uZmlnPgpkaWZmIC11ck5hdyBibHVl ei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL3NjcmlwdHMvYmx1ZXRvb3RoZC5zZXJ2aWNlIGJsdWV0 b290aGQtMC4wLjQvZGFlbW9uL3NjcmlwdHMvYmx1ZXRvb3RoZC5zZXJ2aWNlCi0tLSBibHVlei11 dGlscy0yLjE4Lm9yaWcvZGFlbW9uL3NjcmlwdHMvYmx1ZXRvb3RoZC5zZXJ2aWNlCTE5NjktMTIt MzEgMjE6MDA6MDAuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVldG9vdGhkLTAuMC40L2RhZW1vbi9z Y3JpcHRzL2JsdWV0b290aGQuc2VydmljZQkyMDA1LTA3LTE1IDE0OjE3OjU3LjEwNjQxMzQ4OCAt MDMwMApAQCAtMCwwICsxLDQgQEAKKyMgU2VydmljZSBkZXNjcmlwdGlvbiBmaWxlCitbRC1CVVMg U2VydmljZV0KK05hbWU9b3JnLmJsdWV6LmJsdWV0b290aGQKK0V4ZWM9L2V0Yy9ibHVldG9vdGgv cnVuLWJsdWV0b290aGQuc2gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLXVyTmF3 IGJsdWV6LXV0aWxzLTIuMTgub3JpZy9kYWVtb24vc2NyaXB0cy9ydW4tYmx1ZXRvb3RoZC5zaCBi bHVldG9vdGhkLTAuMC40L2RhZW1vbi9zY3JpcHRzL3J1bi1ibHVldG9vdGhkLnNoCi0tLSBibHVl ei11dGlscy0yLjE4Lm9yaWcvZGFlbW9uL3NjcmlwdHMvcnVuLWJsdWV0b290aGQuc2gJMTk2OS0x Mi0zMSAyMTowMDowMC4wMDAwMDAwMDAgLTAzMDAKKysrIGJsdWV0b290aGQtMC4wLjQvZGFlbW9u L3NjcmlwdHMvcnVuLWJsdWV0b290aGQuc2gJMjAwNS0wNy0xNSAxNDoxNzo1Ny4xMDU0MTM2NDAg LTAzMDAKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK2JsdWV0b290aGQKXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCg== ------=_Part_13765_2334722.1121449057048-- ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel