Return-Path: Message-ID: <41331EBB.9000606@gmx.de> Date: Mon, 30 Aug 2004 14:34:03 +0200 From: john MIME-Version: 1.0 To: Marcel Holtmann CC: BlueZ Mailing List Subject: Re: [Bluez-users] Problems with InputStream and OutputStream References: <1324.1093866265@www49.gmx.net> <1093867195.5620.16.camel@pegasus> In-Reply-To: <1093867195.5620.16.camel@pegasus> Content-Type: multipart/mixed; boundary="------------070309080401060901030505" List-ID: This is a multi-part message in MIME format. --------------070309080401060901030505 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, the relevant parts of the sources are attached (the important parts are the BTMidServ.java and the method doConnect() in BTServiceSearchUI.java). I hope the comments and Info-Messages will be enough declarations. I use Debian Linux with a 2.6.7 Kernel and KDE version 3.2.3. The phone is a Siemens SX1 with firmwareversion 10. It uses a Symbian OS Serie 60. The USB-dongle is from Acer and should be supported from BlueZ. Greeting Johannes Marcel Holtmann wrote: >Hi Johannes, > > > >>The way, to start a server on the Handy I already tried, but I didn't had in >>mind, that this has to be so, but to have a completely new connenction >>between the devices (or has it to be so?). >> >> > >forget about that. I was confused and thought that you wanna connect >from the PC to your phone, > > > >>The complete protocol is attached to the mail. The accosted lines exists >>(see attachment - would it be better to see the java-sources?). >> >> > >If you put it into a tar then name it this way ;) > > > >>On the pc runs a server, that is listening to a connection. A mobile phone >>searches for the device and the service, tries to connect an sends a 7byte >>long string ("String!"). This way works without any problems. Immediately >>after receiving, the server sends an 6byte long string("Handy!") to the >>phone, using the same connection. But the phone only receives an empty >>string. >> >> > >The string "Handy!" goes over the connection and right after that the >Linux side closes the connection. Maybe that is the problem or it is the >credit based flow control on the phone. I don't see any CFC problem, but >I also didn't wrote the Bluetooth stack on the phone. I think it is a >good idea to add a sleep(1) before you close the connection. > >Some other information might be handy. What kernel do you use and what >do you use as server on the Linux side? What kind of phone is this? > >Regards > >Marcel > > > > > --------------070309080401060901030505 Content-Type: application/x-tar; name="src.tar" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="src.tar" c3JjLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUA MDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADEwMTE0NjE2NDc0ADAxMTYwNwAgNQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAwMDAwMDAwADAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzcmMvQlRNaWRTZXJ2Mi5qYXZhAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDY3MTUA MTAxMTQ2MTY0NjEAMDE0MzQwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAAMDAwMDAwMAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBh Y2thZ2UgYnRTZXJ2ZXIyOwoKaW1wb3J0IGRlLmF2ZXRhbmEuYmx1ZXRvb3RoLmNvbm5lY3Rp b24uQlRDb25uZWN0aW9uOwppbXBvcnQgZGUuYXZldGFuYS5ibHVldG9vdGguY29ubmVjdGlv bi5CbHVldG9vdGhTdHJlYW07CmltcG9ydCBkZS5hdmV0YW5hLmJsdWV0b290aC5yZmNvbW0u UkZDb21tQ29ubmVjdGlvbjsKaW1wb3J0IGRlLmF2ZXRhbmEuYmx1ZXRvb3RoLnNkcC5TZXJ2 aWNlRGVzY3JpcHRvcjsKaW1wb3J0IGRlLmF2ZXRhbmEuYmx1ZXRvb3RoLnN0YWNrLkJsdWV0 b290aFN0YWNrOwppbXBvcnQgZGUuYXZldGFuYS5ibHVldG9vdGguc3RhY2suQmx1ZXpTdGFj azsKaW1wb3J0IGRlLmF2ZXRhbmEuYmx1ZXRvb3RoLnV0aWwuU2VydmljZUZpbmRlcjsKCmlt cG9ydCBqYXZheC5ibHVldG9vdGguKjsKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEu dXRpbC5FdmVudE9iamVjdDsKaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5pby4qOwoKcHVi bGljIGNsYXNzIEJUTWlkU2VydjIKewoKCXB1YmxpYyBCVE1pZFNlcnYyKCkKCXsKCgkJU3lz dGVtLm91dC5wcmludGxuKCJpbml0Iik7CgoJCXRyeQoJCXsKCQkJU3lzdGVtLm91dC5wcmlu dGxuKCJyZWFkeSIpOwoJCQlTdHJlYW1Db25uZWN0aW9uTm90aWZpZXIgbm90aWZ5ID0KCQkJ CShTdHJlYW1Db25uZWN0aW9uTm90aWZpZXIpIENvbm5lY3Rvci5vcGVuKAoJCQkJCSJidHNw cDovL2xvY2FsaG9zdDowZGFkNDM2NTVkZjExMWQ2OWY2ZTAwMDM5MzUzZTg1ODtuYW1lPUJU TWlkU2VydiIpOwoJCQlMb2NhbERldmljZSBsb2NhbCA9IExvY2FsRGV2aWNlLmdldExvY2Fs RGV2aWNlKCk7CgkJCVN0cmVhbUNvbm5lY3Rpb24gc3RyZWFtQ29uID0gbm90aWZ5LmFjY2Vw dEFuZE9wZW4oKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKAoJCQkJImNvbm5lY3RlZCB3aXRo IGZpZD0iCgkJCQkJKyAoKEJUQ29ubmVjdGlvbikgc3RyZWFtQ29uKS5nZXRDb25uZWN0aW9u SUQoKSk7CgkJCURhdGFJbnB1dFN0cmVhbSBpcyA9ICgoU3RyZWFtQ29ubmVjdGlvbikgc3Ry ZWFtQ29uKS5vcGVuRGF0YUlucHV0U3RyZWFtKCk7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigi SW5mbzogSW5wdXRTdHJlYW0gb3BlbiEiKTsKCQkJRGF0YU91dHB1dFN0cmVhbSBvcyA9ICgo U3RyZWFtQ29ubmVjdGlvbikgc3RyZWFtQ29uKS5vcGVuRGF0YU91dHB1dFN0cmVhbSgpOwoJ CQlTeXN0ZW0ub3V0LnByaW50bG4oIkluZm86IE91dHB1dFN0cmVhbSBvcGVuISIpOwoJCQl3 b3JrT25Db25uZWN0aW9uKHN0cmVhbUNvbiwgaXMsIG9zKTsKCQkJU3lzdGVtLm91dC5wcmlu dGxuKCJJbmZvOiBTZXJ2ZXIgZG93biEiKTsKCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2Up CgkJewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJsdWV0b290aCBleGNlcHRpb24iKTsKCQl9 Cgl9CgoJcHVibGljIHZvaWQgd29ya09uQ29ubmVjdGlvbigKCQlTdHJlYW1Db25uZWN0aW9u IHN0cmVhbUNvbiwKCQlEYXRhSW5wdXRTdHJlYW0gaXMsCQlEYXRhT3V0cHV0U3RyZWFtIG9z KQoJewoJCWJ5dGUgYltdOwoJCWludCBicmVha2VyID0gMDsKCQlpbnQgbG9vcCA9IDA7CgkJ Ynl0ZVtdIHRtcEJBID0gbnVsbDsKCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3 IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5mbzog Qnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9wZW4hIik7CgkJU3RyaW5nIGNsaWVudFJlc3BvbnNl ID0gIiI7CgkJdHJ5CgkJewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluZm86IGJlZ2luIHRy eS1ibG9jayEiKTsKCgkJLyoqKioqKioqKioqKiogdXNpbmcgRGF0YUlucHV0U3RyZWFtICoq KioqKioqKioqKioqKi8KCgkJCWNsaWVudFJlc3BvbnNlID0gaXMucmVhZFVURigpOwoJCQlT eXN0ZW0ub3V0LnByaW50bG4oIkZyb20gQ2xpZW50OiAiICsgY2xpZW50UmVzcG9uc2UgKyAi XG4iKTsKCQkJaXMuY2xvc2UoKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmZvOiBJbnB1 dFN0cmVhbSBjbG9zZWQhXG4iKTsKCgkJfSBjYXRjaCAoRU9GRXhjZXB0aW9uIGVvZmUpCgkJ ewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVPRkV4Y2VwdGlvbiBvbiBCVE1pZFNlcnYuQmx1 ZVRocmVhZC5ydW4oKSEiKTsKCQkJY2xpZW50UmVzcG9uc2UgPSBjbGllbnRSZXNwb25zZSAr ICIgY29ycnVwdCBkYXRhIGZyb20gY2xpZW50ISI7CgkJfSBjYXRjaCAoSU9FeGNlcHRpb24g aW9lKQoJCXsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJjb3JydXB0IGRhdGEgZnJvbSBjbGll bnQgISIpOwoJCQljbGllbnRSZXNwb25zZSA9ICJjb3JydXB0IGRhdGEgZnJvbSBjbGllbnQh IjsKCQl9CgoJCVN5c3RlbS5vdXQucHJpbnRsbigiZnJvbSBjbGllbnQ6ICIgKyBjbGllbnRS ZXNwb25zZSk7CgkJCgoJCXRyeQoJCXsKCQkJU3RyaW5nIG1zZyA9ICJIYW5keSEiOwoKCQkJ LyoqKioqKioqKiogIHVzZSBPdXRwdXRTdHJlYW0gYW5kIEJ5dGVBcnJheSAgICoqKioqKioq KioqKi8KCgkJCXRtcEJBID0gbXNnLmdldEJ5dGVzKCJJU08tODg1OS0xIik7CgkJCS8vCQkJ CXRtcEJBID0gbXNnLmdldEJ5dGVzKCk7CgoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVn SW5mbyBhZnRlciBjcmVhdGluZyBCeXRlQXJyYXkhXG4iKTsKCQkJb3Mud3JpdGUodG1wQkEp OwoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnSW5mbyBhZnRlciB3cml0aW5nIEJ5dGVB cnJheSFcbiIpOwoJCQkvLwkJCQlvcy5mbHVzaCgpOwoJCQlTeXN0ZW0ub3V0LnByaW50bG4o IkRlYnVnSW5mbyBhZnRlciBmbHVzaGluIE91dHB1dFN0cmVhbSFcbiIpOwoJCQlvcy5jbG9z ZSgpOwoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnSW5mbyBhZnRlciBjbG9zaW5nIHRo ZSBPdXRwdXRTdHJlYW0hXG4iKTsKCQkJU3RyaW5nIHMgPSBuZXcgU3RyaW5nKHRtcEJBLCAi SVNPLTg4NTktMSIpOwoJCQkvLwkJCQlTdHJpbmcgcyA9IG5ldyBTdHJpbmcodG1wQkEpOwoJ CQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnSW5mbyA6IHRoZSBzZW50IFN0cmluZyAxOiAi ICsgcyArICJcbiIpOwoJCX0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkKCQl7 CgkJCVN0cmluZyBzID0gbmV3IFN0cmluZyh0bXBCQSk7CgkJCVN5c3RlbS5vdXQucHJpbnRs bigKCQkJCSJhbiBlbXB0eSBCeXRlQXJyYXkgZXhpc3RzLiBoZXJlJ3MgdGhlIHN0cmluZzog XG4iICsgcyk7CgkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQoJCXsKCQkJU3lzdGVtLm91 dC5wcmludGxuKCJjb3JydXB0IGRhdGEgZnJvbSBjbGllbnQgISIpOwoJCQljbGllbnRSZXNw b25zZSA9ICJjb3JydXB0IGRhdGEgZnJvbSBjbGllbnQhIjsKCQl9CgkJc3RyZWFtQ29uLmNs b3NlKCk7Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhy b3dzIEV4Y2VwdGlvbgoJewoJCUJsdWV6U3RhY2sgc3RhY2sgPSBuZXcgQmx1ZXpTdGFjaygp OwoJCUJsdWV0b290aFN0YWNrLmluaXQoc3RhY2spOwoJCUJUTWlkU2VydjIgYnRtcyA9IG5l dyBCVE1pZFNlcnYyKCk7Cgl9Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAc3JjL0JUU2VydmljZVNlYXJjaFVJLmphdmEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDMxNTUxADEwMTE0NjE2 NDc0ADAxNTY3MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwADAwMDAwMDAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIGJ0 VGVzdG1pdFN0YXJ0Ow0KaW1wb3J0IGphdmEuaW8uRU9GRXhjZXB0aW9uOw0KaW1wb3J0IGph dmEuaW8uSU9FeGNlcHRpb247DQppbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0 aW9uOw0KaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOw0KaW1wb3J0IGphdmEuaW8uRGF0 YU91dHB1dFN0cmVhbTsNCmltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsN CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0 U3RyZWFtOw0KaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7DQppbXBvcnQgamF2YXguYmx1ZXRv b3RoLkRpc2NvdmVyeUFnZW50Ow0KaW1wb3J0IGphdmF4LmJsdWV0b290aC5SZW1vdGVEZXZp Y2U7DQppbXBvcnQgamF2YXguYmx1ZXRvb3RoLkRpc2NvdmVyeUxpc3RlbmVyOw0KaW1wb3J0 IGphdmF4LmJsdWV0b290aC5EZXZpY2VDbGFzczsNCmltcG9ydCBqYXZheC5ibHVldG9vdGgu U2VydmljZVJlY29yZDsNCmltcG9ydCBqYXZheC5ibHVldG9vdGguQmx1ZXRvb3RoU3RhdGVF eGNlcHRpb247DQppbXBvcnQgamF2YXguYmx1ZXRvb3RoLlVVSUQ7DQppbXBvcnQgamF2YXgu bWljcm9lZGl0aW9uLmlvLio7DQppbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmlvLkNvbm5l Y3RvcjsNCmltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ubGNkdWkuRGlzcGxheTsNCmltcG9y dCBqYXZheC5taWNyb2VkaXRpb24ubGNkdWkuRm9ybTsNCmltcG9ydCBqYXZheC5taWNyb2Vk aXRpb24ubGNkdWkuQ29tbWFuZDsNCmltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ubGNkdWku Q29tbWFuZExpc3RlbmVyOw0KaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5sY2R1aS5BbGVy dDsNCmltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ubGNkdWkuQWxlcnRUeXBlOw0KaW1wb3J0 IGphdmF4Lm1pY3JvZWRpdGlvbi5sY2R1aS5EaXNwbGF5YWJsZTsNCgpwdWJsaWMgY2xhc3Mg QlRTZXJ2aWNlU2VhcmNoVUkNCglleHRlbmRzIEZvcm0NCglpbXBsZW1lbnRzIERpc2NvdmVy eUxpc3RlbmVyLCBDb21tYW5kTGlzdGVuZXINCnsNCglDb21tYW5kIGRldmljZXNDb21tYW5k Ow0KCUNvbW1hbmQgZG9TZWFyY2hDb21tYW5kOw0KCUNvbW1hbmQgYmFja0NvbW1hbmQ7DQoJ QlRTZXJ2aWNlIHBhcmVudDsNCglCVERldmljZVVJIHBhcmVudFVJOw0KCVZlY3RvciBzZXJ2 aWNlczsNCglEZXZpY2VPYmplY3QgZG9iOw0KCURpc2NvdmVyeUFnZW50IGFnZW50Ow0KCVNl cnZpY2VPYmplY3Qgc2V2b2I7DQoJRGlzcGxheSBkaXNwbGF5Ow0KCUFsZXJ0IGE7DQoJYm9v bGVhbiBmb3VuZERldmljZXMgPSBmYWxzZTsNCglpbnRbXSBhdHRycyA9IG5ldyBpbnRbMV07 DQoJcHVibGljIEJUU2VydmljZVNlYXJjaFVJKA0KCQlCVFNlcnZpY2UgcGFyZW50RnJhbWUs DQoJCUJURGV2aWNlVUkgcGFyZW50dWksDQoJCURpc2NvdmVyeUFnZW50IGFnZW50MSkNCgl7 DQoJCXN1cGVyKCJTZXJ2aWNlU2VhcmNoIik7DQoJCXBhcmVudCA9IHBhcmVudEZyYW1lOw0K CQlwYXJlbnRVSSA9IHBhcmVudHVpOw0KCQlhZ2VudCA9IGFnZW50MTsNCgkJZGlzcGxheSA9 IERpc3BsYXkuZ2V0RGlzcGxheShwYXJlbnQucGFyZW50KTsNCgkJZGlzcGxheS5zZXRDdXJy ZW50KHRoaXMpOw0KCQlkZXZpY2VzQ29tbWFuZCA9IG5ldyBDb21tYW5kKCJEZXZpY2VzIiwg Q29tbWFuZC5TQ1JFRU4sIDIpOw0KCQliYWNrQ29tbWFuZCA9IG5ldyBDb21tYW5kKCJCYWNr IiwgQ29tbWFuZC5TQ1JFRU4sIDIpOw0KCQlhZGRDb21tYW5kKGRldmljZXNDb21tYW5kKTsN CgkJYWRkQ29tbWFuZChiYWNrQ29tbWFuZCk7DQoJCXNldENvbW1hbmRMaXN0ZW5lcih0aGlz KTsNCgl9DQoJcHVibGljIHZvaWQgY29tbWFuZEFjdGlvbihDb21tYW5kIGNvbW1hbmQsIERp c3BsYXlhYmxlIGRpc3BsYXlhYmxlKQ0KCXsNCgkJaWYgKGNvbW1hbmQgPT0gZGV2aWNlc0Nv bW1hbmQpDQoJCXsNCgkJCXRyeQ0KCQkJew0KCQkJCWlmIChmb3VuZERldmljZXMpDQoJCQkJ CWFnZW50LmNhbmNlbFNlcnZpY2VTZWFyY2goc2V2b2IudHJhbnNJRCk7DQoJCQkJZGlzcGxh eS5zZXRDdXJyZW50KHBhcmVudFVJKTsNCgkJCX0NCgkJCWNhdGNoIChOdWxsUG9pbnRlckV4 Y2VwdGlvbiBucGUpDQoJCQl7DQoJCQkJYSA9DQoJCQkJCW5ldyBBbGVydCgNCgkJCQkJCSJO dWxsUG9pbnRlckV4Y2VwdGlvbiIsDQoJCQkJCQkiRXJyb3IgYXQgQlRTZXJ2aWNlU2VhcmNo VUkuY29tbWFuZEFjdGlvbigpIiwNCgkJCQkJCW51bGwsDQoJCQkJCQlBbGVydFR5cGUuRVJS T1IpOw0KCQkJCWEuc2V0VGltZW91dCg3NTAwKTsNCgkJCQlkaXNwbGF5LnNldEN1cnJlbnQo YSk7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJaWYgKGNvbW1hbmQgPT0gYmFja0NvbW1hbmQp DQoJCQl7DQoNCgkJCQlkaXNwbGF5LnNldEN1cnJlbnQocGFyZW50LmYpOw0KCQkJfQ0KCX0N CglwdWJsaWMgdm9pZCBkZXZpY2VEaXNjb3ZlcmVkKFJlbW90ZURldmljZSByZCwgRGV2aWNl Q2xhc3MgZGMpDQoJew0KCQkvLyB0aGlzIG1ldGhvZCBpcyB1c3VhbGx5IG5ldmVyIHVzZWQN CgkJYSA9DQoJCQluZXcgQWxlcnQoDQoJCQkJIlJ1blRpbWVFcnJvciIsDQoJCQkJIkVycm9y IGluIGNsYXNzIEJUU2VydmljZVNlYXJjaFVJIiwNCgkJCQludWxsLA0KCQkJCUFsZXJ0VHlw ZS5FUlJPUik7DQoJCWEuc2V0VGltZW91dCg3NTAwKTsNCgkJZGlzcGxheS5zZXRDdXJyZW50 KGEpOw0KCX0NCglwdWJsaWMgdm9pZCBpbnF1aXJ5Q29tcGxldGVkKGludCBkaXNjVHlwZSkN Cgl7DQoJCUJURGV2aWNlVUkgYnRzOw0KCQlhcHBlbmQoIlxuSW5xdWlyeSBDb21wbGV0ZWQi KTsNCgkJc3dpdGNoIChkaXNjVHlwZSkNCgkJew0KCQkJLy8NCgkJCS8vCQlJZiBpbnF1aXJ5 IGNvbXBsZXRlZCBub3JtYWxseSwgZ2l2ZSB0aGUgdXNlciBhbiBhbGVydCBzdGF0aW5nDQoJ CQkvLwkJdGhhdCBubyBkZXZpY2VzIHdlcmUgZm91bmQsIG9yIHRoZSBudW1iZXIgb2YgZGV2 aWNlcyBkaXNjb3ZlcmVkLg0KCQkJLy8JCUFsc28sIHJldHJpdmUgZnJpZW5kbHkgbmFtZXMs IGlmIGRldmljZXMgd2VyZSBkaXNjb3ZlcmQuDQoJCQkvLw0KCQkJY2FzZSBEaXNjb3ZlcnlM aXN0ZW5lci5JTlFVSVJZX0NPTVBMRVRFRCA6DQoJCQkJYXBwZW5kKCJTZWFyY2ggY29tcGxl dGVkIik7DQoJCQkJaWYgKHNlcnZpY2VzLnNpemUoKSA9PSAwKQ0KCQkJCXsNCgkJCQkJZm91 bmREZXZpY2VzID0gZmFsc2U7DQoJCQkJCWFwcGVuZCgiTm8gZGV2aWNlcyBmb3VuZCEiKTsN CgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJZm91bmREZXZpY2VzID0gdHJ1ZTsNCgkJ CQkJYXBwZW5kKHNlcnZpY2VzLnNpemUoKSArICIgZGV2aWNlcyBmb3VuZCEiKTsNCgkJCQl9 DQoJCQkJYnJlYWs7DQoJCQkJLy8NCgkJCQkvLwkJQWxlcnQgdGhlIHVzZXIgaWYgYW4gZXJy b3Igb2NjdXJlZCBkdXJpbmcgZGV2aWNlIGRpc2NvdmVyeQ0KCQkJCS8vCQkoaW5xdWlyeSku IFNob3cgbGlzdCBvZiBkZXZpY2VzIGZvdW5kIGJlZm9yZSBlcnJvciBvY2N1cmVkLg0KCQkJ CS8vICAgIA0KCQkJY2FzZSBEaXNjb3ZlcnlMaXN0ZW5lci5JTlFVSVJZX0VSUk9SIDoNCgkJ CQlhLnNldFR5cGUoQWxlcnRUeXBlLkVSUk9SKTsNCgkJCQlpZiAoc2VydmljZXMuc2l6ZSgp ID4gMCkNCgkJCQl7DQoJCQkJCWZvdW5kRGV2aWNlcyA9IHRydWU7DQoJCQkJCWFwcGVuZCgN CgkJCQkJCSJUaGVyIHdhcyBhbiBJbnF1aXJ5IEVycm9yLCBidXQgIg0KCQkJCQkJCSsgc2Vy dmljZXMuc2l6ZSgpDQoJCQkJCQkJKyAiIGRldmljZShzKSB3ZXJlIGZvdW5kISIpOw0KCQkJ CX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlmb3VuZERldmljZXMgPSBmYWxzZTsNCgkJCQkJ YXBwZW5kKCJFcnJvciBvY2N1cmVkIGR1cmluZyBpbnF1aXJ5LiIpOw0KCQkJCX0NCgkJCQli cmVhazsNCgkJCQkvLw0KCQkJCS8vCQlJZiB0aGUgdXNlciByZXF1ZXN0cyB0ZXJtaW5hdGlv biBvZiB0aGUgZGV2aWNlIGRpc2NvdmVyeQ0KCQkJCS8vCQkoaW5xdWlyeSksIGFsZXJ0IHRo ZSB1c2VyIHRoYXQgdGhlIHByb2Nlc3MgaXMgYWN0dWFsbHkNCgkJCQkvLwkJdGVybWluYXRl ZC4NCgkJCQkvLw0KCQkJY2FzZSBEaXNjb3ZlcnlMaXN0ZW5lci5JTlFVSVJZX1RFUk1JTkFU RUQgOg0KCQkJCWFwcGVuZCgiU2VhcmNoIHRlcm1pbmF0ZWQuICIpOw0KCQkJCWlmIChzZXJ2 aWNlcy5zaXplKCkgPiAwKQ0KCQkJCXsNCgkJCQkJZm91bmREZXZpY2VzID0gdHJ1ZTsNCgkJ CQkJYXBwZW5kKA0KCQkJCQkJIkJ1dCAiICsgc2VydmljZXMuc2l6ZSgpICsgIiBzZXJ2aWNl cyBmb3VuZCBhbnl3YXkhIik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWZvdW5k RGV2aWNlcyA9IGZhbHNlOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgRGlzY292ZXJ5 TGlzdGVuZXIuU0VSVklDRV9TRUFSQ0hfQ09NUExFVEVEIDoNCgkJCQlhcHBlbmQoIlNlcnZp Y2UgU2VhcmNoIGNvbXBsZXRlZCIpOw0KCQkJCWlmIChzZXJ2aWNlcy5zaXplKCkgPiAwKQ0K CQkJCXsNCgkJCQkJZm91bmREZXZpY2VzID0gdHJ1ZTsNCgkJCQkJYXBwZW5kKCIsICIgKyBz ZXJ2aWNlcy5zaXplKCkgKyAiIHdlcmUgZm91bmQuIik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJ CQl7DQoJCQkJCWZvdW5kRGV2aWNlcyA9IGZhbHNlOw0KCQkJCQlhcHBlbmQoIlxuQnV0IG5v IFNlcnZpY2VzIHdlcmUgZm91bmQiKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIERp c2NvdmVyeUxpc3RlbmVyLlNFUlZJQ0VfU0VBUkNIX0RFVklDRV9OT1RfUkVBQ0hBQkxFIDoN CgkJCQlhcHBlbmQoIlNlcnZpY2VfU2VhcmNoX0RldmljZSBub3QgcmVhY2hhYmxlXG4iKTsN CgkJCQlpZiAoc2VydmljZXMuc2l6ZSgpID4gMCkNCgkJCQl7DQoJCQkJCWZvdW5kRGV2aWNl cyA9IHRydWU7DQoJCQkJCWFwcGVuZCgNCgkJCQkJCSJCdXQgIiArIHNlcnZpY2VzLnNpemUo KSArICIgc2VydmljZXMgZm91bmQgYW55d2F5ISIpOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJ CWNhc2UgRGlzY292ZXJ5TGlzdGVuZXIuU0VSVklDRV9TRUFSQ0hfVEVSTUlOQVRFRCA6DQoJ CQkJYXBwZW5kKCJTZXJ2aWNlIFNlYXJjaCB0ZXJtaW5hdGVkXG4iKTsNCgkJCQlpZiAoc2Vy dmljZXMuc2l6ZSgpID4gMCkNCgkJCQl7DQoJCQkJCWZvdW5kRGV2aWNlcyA9IHRydWU7DQoJ CQkJCWFwcGVuZCgNCgkJCQkJCSJCdXQgIiArIHNlcnZpY2VzLnNpemUoKSArICIgc2Vydmlj ZXMgZm91bmQgYW55d2F5ISIpOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgRGlzY292 ZXJ5TGlzdGVuZXIuU0VSVklDRV9TRUFSQ0hfTk9fUkVDT1JEUyA6DQoJCQkJZm91bmREZXZp Y2VzID0gZmFsc2U7DQoJCQkJYXBwZW5kKCJObyBTZXJ2aWNlcyBmb3VuZCIpOw0KCQkJCWJy ZWFrOw0KCQkJY2FzZSBEaXNjb3ZlcnlMaXN0ZW5lci5TRVJWSUNFX1NFQVJDSF9FUlJPUiA6 DQoJCQkJYXBwZW5kKCJTZXJ2aWNlIFNlYXJjaCBmYWlsZWRcbiIpOw0KCQkJCWlmIChzZXJ2 aWNlcy5zaXplKCkgPiAwKQ0KCQkJCXsNCgkJCQkJZm91bmREZXZpY2VzID0gdHJ1ZTsNCgkJ CQkJYXBwZW5kKA0KCQkJCQkJIkJ1dCAiICsgc2VydmljZXMuc2l6ZSgpICsgIiBzZXJ2aWNl cyBmb3VuZCBhbnl3YXkhIik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJZm91bmREZXZpY2Vz ID0gZmFsc2U7DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoJcHVibGljIHZvaWQgc3RhcnRTZXJ2 aWNlU2VhcmNoKERldmljZU9iamVjdCBkb2JqKQ0KCXsNCgkJaW50IHNlcnZpY2VJRCA9IC01 MzsNCgkJZG9iID0gZG9iajsNCgkJYXBwZW5kKGRvYi5nZXRGTmFtZSgpICsgIlxuIik7DQoJ CWFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsNCgkJU3RyaW5nIGRl dk5hbWUgPSBkb2JqLmdldEZOYW1lKCk7DQoJCVJlbW90ZURldmljZSByZW1EZXYgPSBkb2Jq LmdldFJEZXZpY2UoKTsNCgkJaWYgKHNlcnZpY2VzID09IG51bGwpDQoJCQlzZXJ2aWNlcyA9 IG5ldyBWZWN0b3IoKTsNCgkJZWxzZQ0KCQkJc2VydmljZXMucmVtb3ZlQWxsRWxlbWVudHMo KTsNCgkJLyoNCgkJICoJCVNlYXJjaCBmb3Igc2VydmljZXMgY29udGFpbmluZyB0aGUgUHVi bGljQnJvd3NlUm9vdCBVVUlEICgweDEwMDIpDQoJCSAqCQlTaG91bGQgZ2l2ZSB1cyBhbGwg cHVibGljIGJyb3dzZWFibGUgc2VydmljZXMNCgkJICoJCUxBTkFjY2Vzc1VzaW5nUFBQIDB4 MTEwMiwgT0JFWCAweDAwMDgsIEhUVFAgMHgwMDBDLCBTZXJpYWwgUG9ydCAweDExMDENCgkJ ICoJCURhaWwtdXAgTmV0d29ya2luZyAweDExMDMsIE9CRVhPYmplY3RQdXNoIDB4MTEwNSwg T0JFWCBGaWxlIFRyYW5mZXJlIDB4MTEwNg0KCQkgKgkJR2VuZXJpYyBBY2Nlc3MgSGVhZHNl dCAweDExMDggDQoJCSAqLw0KCQlVVUlEW10gdXVpZHMgPSBuZXcgVVVJRFsxXTsNCgkJdXVp ZHNbMF0gPSBuZXcgVVVJRCgweDExMDEpOw0KCQlhdHRyc1swXSA9IDB4MDAwQjsNCgkJLyoN CgkJICogCVN0YXJ0IHRoZSBhY3R1YWwgc2VydmljZSBzZWFyY2gsIHVzaW5nIHRoZSBhdHRy cyBhcnJheSBpbml0aWFsaXplZA0KCQkgKiAJZWFybGllciwgdGhlIFVVSUQgYXJyYXkgYW5k IHRoZSByZW1vdGUgZGV2aWNlIHdlIHdhbnQgdG8gZG8gYQ0KCQkgKiAJc2VydmljZSBzZWFy Y2ggb24NCgkJICovDQoJCXRyeQ0KCQl7DQoJCQlhcHBlbmQoIlNlYXJjaCBzdGFydHNcbiIp Ow0KCQkJaWYgKHRoaXMudG9TdHJpbmcoKS5sZW5ndGgoKSA9PSAwKQ0KCQkJCWFwcGVuZCgi VEhJUyBkbyBub3QgZXhpc3QhIVxuIik7DQoJCQlzZXJ2aWNlSUQgPSBhZ2VudC5zZWFyY2hT ZXJ2aWNlcyhhdHRycywgdXVpZHMsIHJlbURldiwgdGhpcyk7DQoJCX0NCgkJY2F0Y2ggKE51 bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkNCgkJew0KCQkJYSA9DQoJCQkJbmV3IEFsZXJ0KA0K CQkJCQkiTnVsbFBvaW50ZXJFeGNlcHRpb24iLA0KCQkJCQkiRXJyb3IgYXQgc3RhcnRTZXJ2 aWNlU2VhcmNoKCkiLA0KCQkJCQludWxsLA0KCQkJCQlBbGVydFR5cGUuRVJST1IpOw0KCQkJ YS5zZXRUaW1lb3V0KDc1MDApOw0KCQkJZGlzcGxheS5zZXRDdXJyZW50KGEpOw0KCQl9DQoJ CWNhdGNoIChCbHVldG9vdGhTdGF0ZUV4Y2VwdGlvbiBic2UpDQoJCXsNCgkJCWEgPQ0KCQkJ CW5ldyBBbGVydCgNCgkJCQkJIkJsdWV0b290aCBlcnJvciIsDQoJCQkJCSJFcnJvciBhdCBz dGFydFNlcnZpY2VTZWFyY2goKSIsDQoJCQkJCW51bGwsDQoJCQkJCUFsZXJ0VHlwZS5FUlJP Uik7DQoJCQlhLnNldFRpbWVvdXQoNzUwMCk7DQoJCQlkaXNwbGF5LnNldEN1cnJlbnQoYSk7 DQoJCX0NCgl9DQoJcHVibGljIHZvaWQgc2VydmljZXNEaXNjb3ZlcmVkKGludCB0cmFuc0lE LCBTZXJ2aWNlUmVjb3JkW10gc2VydlJlY29yZCkNCgl7DQoJCWFwcGVuZCgiQSBTZXJ2aWNl IERpc2NvdmVyeSBoYXMgZGlzY292ZXJlZDpcbiIpOw0KCQkvKgkJYXBwZW5kKCJUcmFuc0lE OiAiK3RyYW5zSUQrIlxuIik7DQoJCQkJYXBwZW5kKCJTZXJ2aWNlUmVjb3JkW106ICIrc2Vy dlJlY29yZCsiXG4iKTsNCgkJKi8NCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2UmVjb3Jk Lmxlbmd0aDsgaSsrKQ0KCQl7DQoJCQlzZXZvYiA9IG5ldyBTZXJ2aWNlT2JqZWN0KHNlcnZS ZWNvcmRbaV0sIHRyYW5zSUQpOw0KCQkJc2VydmljZXMuYWRkRWxlbWVudChzZXZvYik7DQoJ CQlhcHBlbmQoIlNlcnZpY2VPYmplY3Q6ICIgKyBzZXZvYi5nZXRTcnZSZWMoKSArICJcbiIp Ow0KCQkJYXBwZW5kKCJVUkw6ICIgKyBzZXZvYi5nZXRTcnZVUkwoKSk7DQoJCX0NCgkJLy8J CWFwcGVuZCgiQXR0cklEIDoiK3NlcnZSZWNvcmQuZ2V0QXR0cmlidXRlSUQoKSsiXG4iKTsN CgkJYXBwZW5kKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7DQoJfQ0KCXB1 YmxpYyB2b2lkIHNlcnZpY2VTZWFyY2hDb21wbGV0ZWQoaW50IHRyYW5zSUQsIGludCByZXNw Q29kZSkNCgl7DQoJCS8vCQlhcHBlbmQoIlRyYW5zSUQ6ICIrIHRyYW5zSUQgKyAiYW5kIHRo ZSBSZXNwbnNlQ29kZTogIisgcmVzcENvZGUpOw0KCQlzd2l0Y2ggKHJlc3BDb2RlKQ0KCQl7 DQoJCQljYXNlIFNFUlZJQ0VfU0VBUkNIX0NPTVBMRVRFRCA6DQoJCQkJaWYgKHNlcnZpY2Vz LnNpemUoKSA+IDApDQoJCQkJew0KCQkJCQlhcHBlbmQoc2VydmljZXMuc2l6ZSgpICsgIiBz ZXJ2aWNlcyBkaXNjb3ZlcmVkLiIpOw0KCQkJCQlTZXJ2aWNlT2JqZWN0IHNlcnZPYmogPQ0K CQkJCQkJKFNlcnZpY2VPYmplY3QpIHNlcnZpY2VzLmZpcnN0RWxlbWVudCgpOw0KCQkJCQlk b0Nvbm5lY3Qoc2Vydk9iaik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJYXBwZW5kKA0KCQkJ CQkJIlNvcnJ5LCBub25lIG9mIHRoZSBzcGVjaWZpZWQgc2VydmljZShzKSBpcyAiDQoJCQkJ CQkJKyAiYXZhaWxhYmxlIFxuIg0KCQkJCQkJCSsgc2VydmljZXMuc2l6ZSgpDQoJCQkJCQkJ KyAiIFtDb21wbGV0ZWRdIik7DQoJCQkJYnJlYWs7DQoJCQljYXNlIFNFUlZJQ0VfU0VBUkNI X1RFUk1JTkFURUQgOg0KCQkJCWlmIChzZXJ2aWNlcy5zaXplKCkgPiAwKQ0KCQkJCXsNCgkJ CQkJYXBwZW5kKA0KCQkJCQkJIkhvd2V2ZXIiICsgc2VydmljZXMuc2l6ZSgpICsgIiBzZXJ2 aWNlcyBkaXNjb3ZlcmVkLiIpOw0KCQkJCQlTZXJ2aWNlT2JqZWN0IHNlcnZPYmogPQ0KCQkJ CQkJKFNlcnZpY2VPYmplY3QpIHNlcnZpY2VzLmZpcnN0RWxlbWVudCgpOw0KCQkJCQlkb0Nv bm5lY3Qoc2Vydk9iaik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJYXBwZW5kKCJTb3JyeSwg bm9uZSBvZiB0aGUgc3BlY2lmaWVkIHNlcnZpY2UocykgaXMgYXZhaWxhYmxlIFtUZXJtaW5h dGVkXSIpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSBTRVJWSUNFX1NFQVJDSF9FUlJPUiA6DQoJ CQkJYXBwZW5kKCJBbiBFcnJvciBvY2N1cmVkIGR1cmluZyBTZXJ2aWNlU2VhcmNoLlxuIik7 DQoJCQkJaWYgKHNlcnZpY2VzLnNpemUoKSA+IDApDQoJCQkJew0KCQkJCQlhcHBlbmQoDQoJ CQkJCQkiSG93ZXZlciwgIg0KCQkJCQkJCSsgc2VydmljZXMuc2l6ZSgpDQoJCQkJCQkJKyAi IHNlcnZpY2VzIGRpc2NvdmVyZWQuIik7DQoJCQkJCVNlcnZpY2VPYmplY3Qgc2Vydk9iaiA9 DQoJCQkJCQkoU2VydmljZU9iamVjdCkgc2VydmljZXMuZmlyc3RFbGVtZW50KCk7DQoJCQkJ CWRvQ29ubmVjdChzZXJ2T2JqKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCQlhcHBlbmQoIkFu ZCBubyBzZXJ2aWNlIHdhcyBmb3VuZC4iKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgU0VSVklD RV9TRUFSQ0hfTk9fUkVDT1JEUyA6DQoJCQkJYXBwZW5kKCJTb3JyeSwgYnV0IG5vbmUgb2Yg dGhlIHNwZWNpZmllZCBzZXJ2aWNlKHMpIGF2YWlsYWJsZSBbTm8gUmVjb3Jkc10iKTsNCgkJ CQlicmVhazsNCgkJCWNhc2UgU0VSVklDRV9TRUFSQ0hfREVWSUNFX05PVF9SRUFDSEFCTEUg Og0KCQkJCWFwcGVuZCgiU29ycnksIGJ1dCB5b3VyIGRldmljZSBpc24ndCByZWFjaGFibGUg YW55IG1vcmUiKTsNCgkJCQlicmVhazsNCgkJfQ0KCX0NCglwdWJsaWMgdm9pZCBkb0Nvbm5l Y3QoU2VydmljZU9iamVjdCBzZXJ2b2JqKQ0KCXsNCgkJU3RyZWFtQ29ubmVjdGlvbiBjb247 DQoJCURhdGFPdXRwdXRTdHJlYW0gZG91dDsNCgkJT3V0cHV0U3RyZWFtIG91dDsNCgkJRGF0 YUlucHV0U3RyZWFtIGRpczsNCgkJSW5wdXRTdHJlYW0gaXM7DQoJCWJ5dGUgYltdID0gbnVs bDsNCgkJYnl0ZVtdIHRtcEJBID0gbnVsbDsNCgkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJv cyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsNCgkJU3RyaW5nIGluQ29taW5nOw0K CQlhcHBlbmQoIlRyeWluZyB0byBjb25uZWN0IHRvIHNwZWNpZmllZCBzZXJ2aWNlIik7DQoJ CXRyeQ0KCQl7DQoJCQlTdHJpbmcgdXJsID0gc2V2b2IuZ2V0U3J2VVJMKCk7ICAgLy8gZ2V0 IHRoZSBVUkwsIHdoZXJlIHRvIGNvbm5lY3QNCgkJCWFwcGVuZCgiVXJsOiAiICsgdXJsICsg IlxuIik7DQoJCQljb24gPSAoU3RyZWFtQ29ubmVjdGlvbikgQ29ubmVjdG9yLm9wZW4odXJs LCBDb25uZWN0b3IuUkVBRF9XUklURSk7DQoJCQlhcHBlbmQoIkluZm86IENvbm5lY3Rpb24g b3BlbiEiKTsNCgoJCQkvKioqKioqKioqKioqKiogdXNpbmcgRGF0YU91dHB1dFN0cmVhbSAq KioqKioqKioqKioqKi8NCgkJCWRvdXQgPSBjb24ub3BlbkRhdGFPdXRwdXRTdHJlYW0oKTsN CgkJCWFwcGVuZCgiSW5mbzogRGF0YU91dHB1dFN0cmVhbSBvcGVuIVxuIik7DQoJCQlTdHJp bmcgbXNnID0gIlN0cmluZyEiOw0KCQkJZG91dC53cml0ZVVURihtc2cpOw0KCQkJYXBwZW5k KCJJbmZvOiBEYXRhIHdyaXR0ZW4hXG4iKTsNCi8vCQkJVGhyZWFkLnNsZWVwKDEwKTsNCgkJ CWRvdXQuY2xvc2UoKTsNCgkJCWFwcGVuZCgiSW5mbzogRGF0YU91dHB1dFN0cmVhbSBjbG9z ZWQhXG4iKTsNCg0KCQkJLyoqKioqKioqKiogdXNpbmcgSW5wdXRTdHJlYW0gICoqKioqKioq KioqKioqKiovDQoJCQlpcyA9IGNvbi5vcGVuSW5wdXRTdHJlYW0oKTsNCgkJCWFwcGVuZCgi SW5mbzogSW5wdXRTdHJlYW0gb3BlbiEiKTsNCgkJCWludCBzdHJlYW1Db250ZW50ID0gMDsN CgkJCXdoaWxlIChzdHJlYW1Db250ZW50ICE9IC0xKQ0KCQkJew0KCQkJCXN0cmVhbUNvbnRl bnQgPSBpcy5yZWFkKCk7DQoJCQkJYm9zLndyaXRlKHN0cmVhbUNvbnRlbnQpOw0KCQkJCWJv cy5mbHVzaCgpOw0KCQkJCWIgPSBib3MudG9CeXRlQXJyYXkoKTsNCgkJCX0NCgkJCWJvcy5j bG9zZSgpOw0KCQkJaW5Db21pbmcgPSBuZXcgU3RyaW5nKGIsICJJU08tODg1OS0xIik7DQoJ CQlpcy5jbG9zZSgpOw0KCQkJYXBwZW5kKCJJbmZvOiBJbnB1dFN0cmVhbSBjbG9zZWQhXG4i KTsNCgkJCWFwcGVuZCgicmVjZWl2ZWQgU3RyaW5nOiAiICsgaW5Db21pbmcpOw0KCgkJCS8q KioqKioqKiogdHJhbnNmZXJlIGNvbXBsZXRlICoqKioqKioqKioqKioqKi8NCgkJCWNvbi5j bG9zZSgpOw0KCQkJYXBwZW5kKCJJbmZvOiBDb25uZWN0aW9uIGNsb3NlZCFcbiIpOw0KCQl9 DQoJCWNhdGNoIChFT0ZFeGNlcHRpb24gZW9mZSkNCgkJew0KCQkJdHJ5DQoJCQl7DQoJCQkJ YXBwZW5kKCJBbiBFT0ZFeGNlcHRpb24gd2FzIHRocm93biBvbiBkb0Nvbm5lY3QoKSEhXG4i KTsNCgkJCQlhID0NCgkJCQkJbmV3IEFsZXJ0KA0KCQkJCQkJIkVPRkV4Y2VwdGlvbiBvY2N1 cmVkIiwNCgkJCQkJCSJBbiBFT0ZFeGNlcHRpb24gd2FzIHRocm93biAiICsgIm9uIGRvQ29u bmVjdCgpISEiLA0KCQkJCQkJbnVsbCwNCgkJCQkJCW51bGwpOw0KCQkJCWEuc2V0VGltZW91 dCg3MDAwKTsNCgkJCQlkaXNwbGF5LnNldEN1cnJlbnQoYSk7DQoJCQkJLy9hcHBlbmQoZW9m ZS5nZXRNZXNzYWdlKCkpOw0KCQkJfQ0KCQkJY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9u IG5wZSkNCgkJCXsNCgkJCQlhcHBlbmQoIkFuIE51bGxQb2ludGVyRXhjZXB0aW9uIHdhcyB0 aHJvd24gb24gZG9Db25uZWN0KCkhIVxuIik7DQoJCQkJYSA9DQoJCQkJCW5ldyBBbGVydCgN CgkJCQkJCSJOdWxsUG9pbnRlckV4Y2VwdGlvbiBvY2N1cmVkIiwNCgkJCQkJCSJBbiBOdWxs UG9pbnRlckV4Y2VwdGlvbiB3YXMgdGhyb3duICINCgkJCQkJCQkrICJvbiBkb0Nvbm5lY3Qo KSEhIiwNCgkJCQkJCW51bGwsDQoJCQkJCQludWxsKTsNCgkJCX0NCgkJfQ0KCQljYXRjaCAo SW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBpb2UpDQoJCXsNCgkJCWFwcGVuZCgiQW4gSU9FeGNl cHRpb24gd2FzIHRocm93biBvbiBkb0Nvbm5lY3QoKSEhXG4iKTsNCgkJCWEgPQ0KCQkJCW5l dyBBbGVydCgNCgkJCQkJIklPRXhjZXB0aW9uIG9jY3VyZWQiLA0KCQkJCQkiQW4gSU9FeGNl cHRpb24gd2FzIHRocm93biAiICsgIm9uIGRvQ29ubmVjdCgpISEiLA0KCQkJCQludWxsLA0K CQkJCQludWxsKTsNCgkJCWEuc2V0VGltZW91dCg3MDAwKTsNCgkJCWRpc3BsYXkuc2V0Q3Vy cmVudChhKTsNCgkJCWFwcGVuZChpb2UuZ2V0TWVzc2FnZSgpKTsNCgkJfQ0KCQljYXRjaCAo SU9FeGNlcHRpb24gaW9lKQ0KCQl7DQoJCQlhcHBlbmQoIkFuIElPRXhjZXB0aW9uIHdhcyB0 aHJvd24gb24gZG9Db25uZWN0KCkhIVxuIik7DQoJCQlhID0NCgkJCQluZXcgQWxlcnQoDQoJ CQkJCSJJT0V4Y2VwdGlvbiBvY2N1cmVkIiwNCgkJCQkJIkFuIElPRXhjZXB0aW9uIHdhcyB0 aHJvd24gIiArICJvbiBkb0Nvbm5lY3QoKSEhIiwNCgkJCQkJbnVsbCwNCgkJCQkJbnVsbCk7 DQoJCQlhLnNldFRpbWVvdXQoNzAwMCk7DQoJCQlkaXNwbGF5LnNldEN1cnJlbnQoYSk7DQoJ CQlhcHBlbmQoaW9lLmdldE1lc3NhZ2UoKSk7DQoJCX0NCgkJY2F0Y2ggKEFycmF5SW5kZXhP dXRPZkJvdW5kc0V4Y2VwdGlvbiBhaW9vYmUpDQoJCXsNCgkJCWEgPQ0KCQkJCW5ldyBBbGVy dCgNCgkJCQkJIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsDQoJCQkJCWFpb29i ZS5nZXRNZXNzYWdlKCkgKyAiIG9uIGRvQ29ubmVjdCgpISEiLA0KCQkJCQludWxsLA0KCQkJ CQlBbGVydFR5cGUuRVJST1IpOw0KCQkJYS5zZXRUaW1lb3V0KDc1MDApOw0KCQkJZGlzcGxh eS5zZXRDdXJyZW50KGEpOw0KCQl9DQoJCWNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2Nl KQ0KCQl7DQoJCQlhID0NCgkJCQluZXcgQWxlcnQoDQoJCQkJCSJDbGFzc0Nhc3RFeGNlcHRp b24gb2NjdXJlZCIsDQoJCQkJCSJBbiBDbGFzc0Nhc3RFeGNlcHRpb24gd2FzIHRocm93biAi ICsgIm9uIGRvQ29ubmVjdCgpISEiLA0KCQkJCQludWxsLA0KCQkJCQludWxsKTsNCgkJCWEu c2V0VGltZW91dCg3NTAwKTsNCgkJCWRpc3BsYXkuc2V0Q3VycmVudChhKTsNCgkJfQ0KCQlj YXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKQ0KCQl7DQoJCQlhID0NCgkJCQluZXcg QWxlcnQoDQoJCQkJCSJOdWxsUG9pbnRlckV4Y2VwdGlvbiIsDQoJCQkJCW5wZS5nZXRNZXNz YWdlKCkgKyAiIG9uIEJUU2VydmljZVNlYWNoVUkuZG9Db25uZWN0KCkhISIsDQoJCQkJCW51 bGwsDQoJCQkJCUFsZXJ0VHlwZS5FUlJPUik7DQoJCQlhLnNldFRpbWVvdXQoNzUwMCk7DQoJ CQlkaXNwbGF5LnNldEN1cnJlbnQoYSk7DQoJCX0NCgkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQ0K CQl7DQoJCQlhID0NCgkJCQluZXcgQWxlcnQoDQoJCQkJCSJFeGNlcHRpb24iLA0KCQkJCQll LmdldE1lc3NhZ2UoKSArICIgb24gZG9Db25uZWN0KCkhISIsDQoJCQkJCW51bGwsDQoJCQkJ CUFsZXJ0VHlwZS5FUlJPUik7DQoJCQlhLnNldFRpbWVvdXQoNzUwMCk7DQoJCQlkaXNwbGF5 LnNldEN1cnJlbnQoYSk7DQoJCX0NCgl9DQp9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAA= --------------070309080401060901030505--