From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH - amixer] listen to D-Bus for volume-up, volume-down and mute signals. Date: Mon, 03 Aug 2009 12:51:56 +0200 Message-ID: References: <1249296201-6930-1-git-send-email-stlman@poczta.fm> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (cantor.suse.de [195.135.220.2]) by alsa0.perex.cz (Postfix) with ESMTP id E8A9C103826 for ; Mon, 3 Aug 2009 12:51:56 +0200 (CEST) In-Reply-To: <1249296201-6930-1-git-send-email-stlman@poczta.fm> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: =?UTF-8?B?xYF1a2Fzeg==?= Stelmach Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org QXQgTW9uLCAgMyBBdWcgMjAwOSAxMjo0MzoyMSArMDIwMCwKxYF1a2FzeiBTdGVsbWFjaCB3cm90 ZToKPiAKPiAKPiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBELUJ1cyBzdXBwb3J0IGluIGFtaXhlci4g V2l0aCAtLWRidXMgb3B0aW9uIGdpdmVuIGFtaXhlcgo+IHdvcmtzIGNvbnRpbmlvdXNseSAobGlr ZSB3aXRoIHRoZSAtLXN0ZGluKSB3YWl0aW5nIGZvcgo+IG9yZy5mcmVlZGVza3RvcC5IYWwuRGV2 aWNlLkNvbmRpdGlvbiB3aXRoIHRoZSBmaXJzdCBhcmd1bWVudCAiQnV0dG9uUHJlc3NlZCIKPiBh bmQgdGhlIHNlY29uZCBiZWluZyBvbmUgb2Y6ICJ2b2x1bWUtdXAiLCAidm9sdW1lLWRvd24iIGFu ZCAibXV0ZSIuIFRoZXNlCj4gYXJlIGVtbWl0ZWQgYnkgdGhlIEhBTCBpbnB1dCBoZWxwZXIuIEEg c2luZ2xlIGFtaXhlciBwcm9jZXNzIGNhbiBjb250cm9sbAo+IG9uZSBtaXhlciBpdGVtLiBUaGVy ZSBhcmUgb3B0aW9ucyB0byBjaG9vc2UgYSBzcGVjaWZpYyBpdGVtIHRvIGNvbnRyb2xsLAo+IGFu IGlucHV0IGRldmljZSB0byBsaXN0ZW4gYW5kIGEgc2luZ2xlIGFkanVzdG1lbnQgc3RlcCBzaXpl Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IMWBdWthc3ogU3RlbG1hY2ggPHN0bG1hbkBwb2N6dGEuZm0+ CgpUaGFua3MgZm9yIHRoZSBwYXRjaC4KClRoZSBhcHByb2FjaCBpcyBpbnRlcmVzdGluZywgYnV0 IEknbSBub3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCBwdXQKYWxsIGludG8gYW1peGVyIGluIHRo aXMgd2F5IHNpbmNlIHdlIGRvbid0IHdhbnQgZXh0cmEgbGlicmFyeQpkZXBlbmRlbmN5LiAgKE5v dGU6IGFtaXhlciBjb3VsZCBiZSB1c2VkIGluIGluaXRyZC4pCkkgdGhpbmsgaXQncyBiZXR0ZXIg dG8gc3BsaXQgdGhlIGNvZGUgYW5kIG1ha2UgaXQgYXMgYW4gaW5kaXZpZHVhbApkYWVtb24gaW5z dGVhZCBvZiBhZGRpdGlvbmFsIG9wdGlvbnMgb2YgYW1peGVyLgoKCkp1c3QgbXkgJDAuMDIuCgp0 aGFua3MsCgpUYWthc2hpCgoKPiAtLS0KPiAgYW1peGVyL01ha2VmaWxlLmFtIHwgICAgMyArLQo+ ICBhbWl4ZXIvYW1peGVyLjEgICAgfCAgIDE4ICsrKysrKwo+ICBhbWl4ZXIvYW1peGVyLmMgICAg fCAgMTcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiAgY29uZmlndXJlLmluICAgICAgIHwgICAxMiArKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwg MjAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FtaXhl ci9NYWtlZmlsZS5hbSBiL2FtaXhlci9NYWtlZmlsZS5hbQo+IGluZGV4IGZjZDBlODEuLmZhOTUx YTYgMTAwNjQ0Cj4gLS0tIGEvYW1peGVyL01ha2VmaWxlLmFtCj4gKysrIGIvYW1peGVyL01ha2Vm aWxlLmFtCj4gQEAgLTEsNSArMSw2IEBACj4gIElOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpL2lu Y2x1ZGUKPiAtTERBREQgPSAtbG0KPiArTERBREQgPSAtbG0gQERCVVNfTElCU0AKPiArQ0ZMQUdT ICs9IEBEQlVTX0NGTEFHU0AKPiAgIyBMREZMQUdTID0gLXN0YXRpYwo+ICAjIENGTEFHUyArPSAt ZyAtV2FsbAo+ICAKPiBkaWZmIC0tZ2l0IGEvYW1peGVyL2FtaXhlci4xIGIvYW1peGVyL2FtaXhl ci4xCj4gaW5kZXggYjFhYzMyMy4uYmMxNjBiZSAxMDA2NDQKPiAtLS0gYS9hbWl4ZXIvYW1peGVy LjEKPiArKysgYi9hbWl4ZXIvYW1peGVyLjEKPiBAQCAtODgsNiArODgsMjQgQEAgU2VsZWN0IHRo ZSBjYXJkIG51bWJlciB0byBjb250cm9sLiBUaGUgZGV2aWNlIG5hbWUgY3JlYXRlZCBmcm9tIHRo aXMKPiAgcGFyYW1ldGVyIGhhcyBzeW50YXggJ2h3Ok4nIHdoZXJlIE4gaXMgc3BlY2lmaWVkIGNh cmQgbnVtYmVyLgo+ICAKPiAgLlRQCj4gK1xmSVwtXC1kYnVzWz1cZklTQ09OVFJPTFxmUF0KPiAr Cj4gK0Nvbm5lY3QgdG8gc3lzdGVtIEQtQnVzIGFuZCB3YWl0IGZvciBcZklvcmcuZnJlZWRlc2t0 b3AuSGFsLkRldmljZS5Db25kaXRpb25cZlAKPiArc2lnbmFscyB3aXRoIEJ1dHRvblByZXNzZWQg YXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBvbmUgb2Y6IFxmSXZvbHVtZS11cFxmUCwKPiArXGZJ dm9sdW1lLWRvd25cZlAgb3IgXGZJbXV0ZVxmUCBhcyB0aGUgc2Vjb25kIG9uZS4gQ29udHJvbCB0 aGUgc2VsZWN0ZWQKPiArXGZJU0NPTlRST0xcZlAgaXRlbS4gIFRoZSBkZWZhdWx0IGl0ZW0gaXMg J01hc3RlciwwJy4KPiArCj4gKy5UUAo+ICtcZklcLVwtZGJ1cy1wYXRoPTxcZklVRElcZlA+Cj4g Kwo+ICtDaG9vc2UgYSBwYXJ0aWN1bGFyIGlucHV0IGRldmljZSB0aGF0IGVtaXRzIGNvbnRyb2wg ZXZlbnRzLgo+ICsKPiArLlRQCj4gK1xmSVwtXC1kYnVzLXN0ZXA9PFxmSU5cZlA+Cj4gKwo+ICtT ZXQgYW4gYW1vdW50IGJ5IHdpY2ggdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2Ugdm9sdW1lIHVwb24g ZXZlbnQuCj4gKwo+ICsuVFAKPiAgXGZJXC1EXGZQIGRldmljZQo+ICAKPiAgU2VsZWN0IHRoZSBk ZXZpY2UgbmFtZSB0byBjb250cm9sLiBUaGUgZGVmYXVsdCBjb250cm9sIG5hbWUgaXMgJ2RlZmF1 bHQnLgo+IGRpZmYgLS1naXQgYS9hbWl4ZXIvYW1peGVyLmMgYi9hbWl4ZXIvYW1peGVyLmMKPiBp bmRleCA5NjIwNzIxLi4zMWRlNjc0IDEwMDY0NAo+IC0tLSBhL2FtaXhlci9hbWl4ZXIuYwo+ICsr KyBiL2FtaXhlci9hbWl4ZXIuYwo+IEBAIC0xOCw2ICsxOCw4IEBACj4gICAqCj4gICAqLwo+ICAK PiArI2luY2x1ZGUgImFjb25maWcuaCIKPiArCj4gICNpbmNsdWRlIDxzdGRpby5oPgo+ICAjaW5j bHVkZSA8c3RkbGliLmg+Cj4gICNpbmNsdWRlIDxzdHJpbmcuaD4KPiBAQCAtMzEsNiArMzMsMTAg QEAKPiAgI2luY2x1ZGUgPHN5cy9wb2xsLmg+Cj4gICNpbmNsdWRlICJhbWl4ZXIuaCIKPiAgCj4g KyNpZmRlZiBIQVZFX0RCVVMKPiArI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgo+ICsjZW5kaWYgLyog SEFWRV9EQlVTICovCj4gKwo+ICAjZGVmaW5lIExFVkVMX0JBU0lDCQkoMTw8MCkKPiAgI2RlZmlu ZSBMRVZFTF9JTkFDVElWRQkJKDE8PDEpCj4gICNkZWZpbmUgTEVWRUxfSUQJCSgxPDwyKQo+IEBA IC00Myw2ICs0OSwxMiBAQCBzdGF0aWMgaW50IGlnbm9yZV9lcnJvciA9IDA7Cj4gIHN0YXRpYyBz dHJ1Y3Qgc25kX21peGVyX3NlbGVtX3JlZ29wdCBzbWl4ZXJfb3B0aW9uczsKPiAgc3RhdGljIGNo YXIgY2FyZFs2NF0gPSAiZGVmYXVsdCI7Cj4gIAo+ICsjaWZkZWYgSEFWRV9EQlVTCj4gK3N0YXRp YyBjaGFyIGRidXNfc2N0bFs2NF0gPSAiTWFzdGVyLDAiOwo+ICtzdGF0aWMgY2hhciAqZGJ1c19w YXRoID0gTlVMTDsKPiArc3RhdGljIGNoYXIgZGJ1c19zdGVwWzhdID0gIjEiOwo+ICsjZW5kaWYg LyogSEFWRV9EQlVTICovCj4gKwo+ICBzdGF0aWMgdm9pZCBlcnJvcihjb25zdCBjaGFyICpmbXQs Li4uKQo+ICB7Cj4gIAl2YV9saXN0IHZhOwo+IEBAIC02MCw2ICs3MiwxMSBAQCBzdGF0aWMgaW50 IGhlbHAodm9pZCkKPiAgCXByaW50ZigiXG5BdmFpbGFibGUgb3B0aW9uczpcbiIpOwo+ICAJcHJp bnRmKCIgIC1oLC0taGVscCAgICAgICB0aGlzIGhlbHBcbiIpOwo+ICAJcHJpbnRmKCIgIC1jLC0t Y2FyZCBOICAgICBzZWxlY3QgdGhlIGNhcmRcbiIpOwo+ICsjaWZkZWYgSEFWRV9EQlVTCj4gKwlw cmludGYoIiAgLS1kYnVzWz1zSURdICAgIENvbm5lY3QgdG8gdGhlIHN5c3RlbSBELUJ1cyBhbmQg d2FpdCBmb3Igdm9sdW1lIG1lc3NhZ2VzXG4iKTsKPiArCXByaW50ZigiICAtLWRidXMtcGF0aCBV REkgQ2hvb3NlIGEgcGFydGljdWxhciBpbnB1dCBkZXZpY2UgKHVkaSlcbiIpOwo+ICsJcHJpbnRm KCIgIC0tZGJ1cy1zdGVwIE4gICBTZXQgdGhlIHN0ZXAgc2l6ZSAoZGVmYXVsdDogMSlcbiIpOwo+ ICsjZW5kaWYgLyogSEFWRV9EQlVTICovCj4gIAlwcmludGYoIiAgLUQsLS1kZXZpY2UgTiAgIHNl bGVjdCB0aGUgZGV2aWNlLCBkZWZhdWx0ICclcydcbiIsIGNhcmQpOwo+ICAJcHJpbnRmKCIgIC1k LC0tZGVidWcgICAgICBkZWJ1ZyBtb2RlXG4iKTsKPiAgCXByaW50ZigiICAtbiwtLW5vY2hlY2sg ICAgZG8gbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tpbmdcbiIpOwo+IEBAIC0xODg3LDE1ICsxOTA0 LDE0NyBAQCBzdGF0aWMgaW50IGV4ZWNfc3RkaW4odm9pZCkKPiAgCXJldHVybiAwOwo+ICB9Cj4g IAo+ICsjaWZkZWYgSEFWRV9EQlVTCj4gKwo+ICsjZGVmaW5lIE9QVF9EQlVTIDB4ODEKPiArI2Rl ZmluZSBPUFRfREJVU19QQVRIIDB4ODIKPiArI2RlZmluZSBPUFRfREJVU19TVEVQIDB4ODMKPiAr Cj4gK3ZvaWQqIGdldF9kYnVzX2FyZyhEQnVzTWVzc2FnZUl0ZXIqIGFyZ3MsIGludCB0eXBlLCB2 b2lkKiogb3V0KSB7Cj4gKwlpZiAodHlwZSAhPSBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5 cGUoYXJncykpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFz aWMoYXJncywgb3V0KTsKPiArCWRidXNfbWVzc2FnZV9pdGVyX25leHQoYXJncyk7Cj4gKwlyZXR1 cm4gKm91dDsKPiArfQo+ICsKPiAraW50IGV4ZWNfZGJ1cyh2b2lkKQo+ICt7Cj4gKwljaGFyICpz YXJndltNQVhfQVJHU107Cj4gKwlpbnQgc2FyZ2M7Cj4gKwljb25zdCBjaGFyKiBzOwo+ICsJaW50 IHN0ZXBsOwo+ICsJREJ1c0Vycm9yIGVycm9yOwo+ICsJREJ1c01lc3NhZ2UqIG1zZzsKPiArCURC dXNDb25uZWN0aW9uICpjb25uOwo+ICsJREJ1c01lc3NhZ2VJdGVyIGFyZ3M7Cj4gKwo+ICsJc3Rl cGwgPSBzdHJsZW4oZGJ1c19zdGVwKTsKPiArCWRidXNfc3RlcFtzdGVwbCsxXSA9ICdcMCc7Cj4g Kwo+ICsJZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwo+ICsJY29ubiA9IGRidXNfYnVzX2dldCAo REJVU19CVVNfU1lTVEVNLCAmZXJyb3IpOwo+ICsKPiArCWlmKCFjb25uKSB7Cj4gKwkJZnByaW50 ZihzdGRlcnIsICJkYnVzOiVzOiAlc1xuIiwKPiArCQkJZXJyb3IubmFtZSwgZXJyb3IubWVzc2Fn ZSk7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJZGJ1c19idXNfYWRkX21hdGNoKGNvbm4s Cj4gKwkJInR5cGU9J3NpZ25hbCcsIgo+ICsJCSJpbnRlcmZhY2U9J29yZy5mcmVlZGVza3RvcC5I YWwuRGV2aWNlJywiCj4gKwkJIm1lbWJlcj0nQ29uZGl0aW9uJyIsCj4gKwkJJmVycm9yKTsKPiAr CS8qIFRoZSBmaXJzdCBtZXNzYWdlIGlzIGEgTmFtZU93bmVyQ2hhbmdlZCBzaWduYWwsIGlnbm9y ZSBpdC4gKi8KPiArCW1zZyA9IGRidXNfY29ubmVjdGlvbl9wb3BfbWVzc2FnZShjb25uKTsKPiAr CWRidXNfbWVzc2FnZV91bnJlZihtc2cpOwo+ICsKPiArCWlmKGRidXNfZXJyb3JfaXNfc2V0KCZl cnJvcikpIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwgImRidXM6bWF0Y2ggZXJyb3I6JXNcbiIsCj4g KwkJCWVycm9yLm1lc3NhZ2UpOwo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsKPiArCXdoaWxlICgx KSB7Cj4gKwkJc2FyZ3ZbMF0gPSBkYnVzX3NjdGw7IHNhcmdjID0gMTsKPiArCj4gKwkJaWYgKCEo bXNnID0gZGJ1c19jb25uZWN0aW9uX3BvcF9tZXNzYWdlKGNvbm4pKSkgewo+ICsJCQlkYnVzX2Nv bm5lY3Rpb25fcmVhZF93cml0ZShjb25uLCAtMSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiAr Cj4gKwkJcyA9IGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG1zZyk7Cj4gKwkJaWYoc3RybmNt cCgib3JnLmZyZWVkZXNrdG9wLkhhbC5EZXZpY2UiLCBzLCAyNikpIHsKPiArCQkJaWYoZGVidWdm bGFnKQo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJkYnVzOnVuc3VwcG9ydGVkIGludGVyZmFjZTol c1xuIiwgcyk7Cj4gKwkJCWdvdG8gYmFkbWVzc2FnZTsKPiArCQl9Cj4gKwo+ICsJCWlmKGRidXNf cGF0aCAmJgo+ICsJCSAgICAocz1kYnVzX21lc3NhZ2VfZ2V0X3BhdGgobXNnKSkgJiYKPiArCQkg ICAgc3RybmNtcChkYnVzX3BhdGgsIHMsIHN0cmxlbihzKSkpIHsKPiArCQkJaWYoZGVidWdmbGFn KQo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJkYnVzOm5vdCB0aGUgc2VsZWN0ZWQgdWRpOiVzXG4i LCBzKTsKPiArCQkJZ290byBiYWRtZXNzYWdlOwo+ICsJCX0KPiArCj4gKwkJaWYoIWRidXNfbWVz c2FnZV9pdGVyX2luaXQobXNnLCAmYXJncykpIHsKPiArCQkJaWYoZGVidWdmbGFnKQo+ICsJCQkJ ZnByaW50ZihzdGRlcnIsICJkYnVzOm1lc3NhZ2UgaGFzIG5vIGFyZ3VtZW50c1xuIik7Cj4gKwkJ CWdvdG8gYmFkbWVzc2FnZTsKPiArCQl9Cj4gKwo+ICsJCWlmIChzdHJuY21wKGdldF9kYnVzX2Fy ZygmYXJncywgREJVU19UWVBFX1NUUklORywgKHZvaWQqKSZzKSwgIkJ1dHRvblByZXNzZWQiLCAx MykpIHsKPiArCQkJaWYoZGVidWdmbGFnKQo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJkYnVzOm5v dCBhIEJ1dHRvblByZXNzZWQgZXZlbnRcbiIpOwo+ICsJCQlnb3RvIGJhZG1lc3NhZ2U7Cj4gKwkJ fQo+ICsKPiArCQlpZiAoIWdldF9kYnVzX2FyZygmYXJncywgREJVU19UWVBFX1NUUklORywgKHZv aWQqKSZzKSkgewo+ICsJCQlpZihkZWJ1Z2ZsYWcpCj4gKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRi dXM6aW52YWxpZCBhcmd1bWVudCB0eXBlXG4iKTsKPiArCQkJZ290byBiYWRtZXNzYWdlOwo+ICsJ CX0KPiArCj4gKwkJLyogc3RhdGljIGludCBzc2V0KHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICph cmd2W10sIGludCByb2ZsYWcsIGludCBrZWVwX2hhbmRsZSkgKi8KPiArCQlpZiAoIXN0cm5jbXAo cywgInZvbHVtZS11cCIsIDkpKSB7Cj4gKwkJCWlmKGRlYnVnZmxhZykKPiArCQkJCWZwcmludGYo c3RkZXJyLCAiZGJ1czp2b2x1bWUtdXBcbiIpOwo+ICsJCQlkYnVzX3N0ZXBbc3RlcGxdPScrJzsK PiArCQkJc2FyZ3ZbMV0gPSBkYnVzX3N0ZXA7Cj4gKwkJfSBlbHNlIGlmICghc3RybmNtcChzLCAi dm9sdW1lLWRvd24iLCAxMSkpIHsKPiArCQkJaWYoZGVidWdmbGFnKQo+ICsJCQkJZnByaW50Zihz dGRlcnIsICJkYnVzOnZvbHVtZS1kb3duXG4iKTsKPiArCQkJZGJ1c19zdGVwW3N0ZXBsXT0nLSc7 Cj4gKwkJCXNhcmd2WzFdID0gZGJ1c19zdGVwOwo+ICsJCX0gZWxzZSBpZiAoIXN0cm5jbXAocywg Im11dGUiLCA0KSkgewo+ICsJCQlpZihkZWJ1Z2ZsYWcpCj4gKwkJCQlmcHJpbnRmKHN0ZGVyciwg ImRidXM6bXV0ZSAodG9nZ2xlKVxuIik7Cj4gKwkJCXNhcmd2WzFdID0gInRvZ2dsZSI7Cj4gKwkJ fSBlbHNlIHsKPiArCQkJaWYoZGVidWdmbGFnKQo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJkYnVz OmludmFsaWQgYXJndW1lbnQgdmFsdWVcbiIpOwo+ICsJCQlnb3RvIGJhZG1lc3NhZ2U7Cj4gKwkJ fQo+ICsJCXNzZXQoKytzYXJnYywgc2FyZ3YsIDAsIDEpOwo+ICtiYWRtZXNzYWdlOgo+ICsJCWRi dXNfbWVzc2FnZV91bnJlZihtc2cpOwo+ICsJfQo+ICsKPiArCWlmKGNvbm4pCj4gKwkJZGJ1c19j b25uZWN0aW9uX3VucmVmKGNvbm4pOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmIC8qIEhB VkVfREJVUyAqLwo+ICAKPiAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgewo+ ICAJaW50IG1vcmVoZWxwLCBsZXZlbCA9IDA7Cj4gIAlpbnQgcmVhZF9zdGRpbiA9IDA7Cj4gKyNp ZmRlZiBIQVZFX0RCVVMKPiArCWludCByZWFkX2RidXMgPSAwOwo+ICsJaW50IHQ7Cj4gKyNlbmRp ZiAvKiBIQVZFX0RCVVMgKi8KPiAgCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0 aW9uW10gPQo+ICAJewo+ICAJCXsiaGVscCIsIDAsIE5VTEwsICdoJ30sCj4gIAkJeyJjYXJkIiwg MSwgTlVMTCwgJ2MnfSwKPiArI2lmZGVmIEhBVkVfREJVUwo+ICsJCXsiZGJ1cyIsIG9wdGlvbmFs X2FyZ3VtZW50LCBOVUxMLCBPUFRfREJVU30sCj4gKwkJeyJkYnVzLXBhdGgiLCAxLCBOVUxMLCBP UFRfREJVU19QQVRIfSwKPiArCQl7ImRidXMtc3RlcCIsIDEsIE5VTEwsIE9QVF9EQlVTX1NURVB9 LAo+ICsjZW5kaWYgLyogSEFWRV9EQlVTICovCj4gIAkJeyJkZXZpY2UiLCAxLCBOVUxMLCAnRCd9 LAo+ICAJCXsicXVpZXQiLCAwLCBOVUxMLCAncSd9LAo+ICAJCXsiaW5hY3RpdmUiLCAwLCBOVUxM LCAnaSd9LAo+IEBAIC0xOTY0LDYgKzIxMTMsMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKPiAgCQljYXNlICdzJzoKPiAgCQkJcmVhZF9zdGRpbiA9IDE7Cj4gIAkJCWJyZWFr Owo+ICsjaWZkZWYgSEFWRV9EQlVTCj4gKwkJY2FzZSBPUFRfREJVUzoKPiArCQkJaWYob3B0YXJn KSB7Cj4gKwkJCQlzdHJuY3B5KGRidXNfc2N0bCwgb3B0YXJnLCBzaXplb2YoZGJ1c19zY3RsKS0x KTsKPiArCQkJCWRidXNfc2N0bFtzaXplb2YoZGJ1c19zY3RsKS0xXSA9ICdcMCc7Cj4gKwkJCX0K PiArCQkJcmVhZF9kYnVzID0gMTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfREJVU19QQVRI Ogo+ICsJCQlkYnVzX3BhdGg9b3B0YXJnOwo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9EQlVT X1NURVA6Cj4gKwkJCXQ9YXRvaShvcHRhcmcpOwo+ICsJCQlpZih0ID4gMCAmJiB0IDw9IDk5OTk5 OSkgewo+ICsJCQkJc25wcmludGYoZGJ1c19zdGVwLCBzaXplb2YoZGJ1c19zdGVwKSwgIiVkIiwg YXRvaShvcHRhcmcpKTsKPiArCQkJfQo+ICsJCQlicmVhazsKPiArI2VuZGlmIC8qIEhBVkVfREJV UyAqLwo+ICAJCWRlZmF1bHQ6Cj4gIAkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzd2l0Y2gg b3Igb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LlxuIik7Cj4gIAkJCW1vcmVoZWxwKys7Cj4gQEAg LTE5NzgsNiArMjE0NSwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAJ aWYgKHJlYWRfc3RkaW4pCj4gIAkJcmV0dXJuIGV4ZWNfc3RkaW4oKTsKPiAgCj4gKyNpZmRlZiBI QVZFX0RCVVMKPiArCWlmKHJlYWRfZGJ1cykKPiArCQlyZXR1cm4gZXhlY19kYnVzKCk7Cj4gKyNl bmRpZiAvKiBIQVZFX0RCVVMgKi8KPiAgCWlmIChhcmdjIC0gb3B0aW5kIDw9IDApIHsKPiAgCQly ZXR1cm4gc2VsZW1zKExFVkVMX0JBU0lDIHwgbGV2ZWwpID8gMSA6IDA7Cj4gIAl9Cj4gZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgo+IGluZGV4IDEzNDlmZjMuLjcxN2Q2 YzUgMTAwNjQ0Cj4gLS0tIGEvY29uZmlndXJlLmluCj4gKysrIGIvY29uZmlndXJlLmluCj4gQEAg LTcsNiArNyw5IEBAIEFNX0lOSVRfQVVUT01BS0UoYWxzYS11dGlscywgMS4wLjIwKQo+ICBBTV9H TlVfR0VUVEVYVChbZXh0ZXJuYWxdKQo+ICBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE1XSkK PiAgCj4gK2RubCByZXF1aXJlZCB2ZXJzaW9ucyBvZiBvdGhlciBwYWNrYWdlcwo+ICttNF9kZWZp bmUoW2RidXNfcmVxdWlyZWRfdmVyc2lvbl0sIFsxLjIuMF0pCj4gKwo+ICBkbmwgQ2hlY2tzIGZv ciBwcm9ncmFtcy4KPiAgCj4gIGRubCB0cnkgdG8gZ3VlcyBjcm9zcy1jb21waWxlciBpZiBub3Qg c2V0Cj4gQEAgLTc0LDYgKzc3LDE1IEBAIEFDX0FSR19FTkFCTEUoYWxzYW1peGVyLAo+ICAgICAg ICAgbm8pICBhbHNhbWl4ZXI9ZmFsc2UgOzsKPiAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQg dmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hbHNhbWl4ZXIpIDs7Cj4gICAgICAgZXNh Y10sW2Fsc2FtaXhlcj10cnVlXSkKPiArQUNfQVJHX1dJVEgoZGJ1cywgWyAgLS13aXRoLWRidXMg ICAgICAgICAgICAgRW5hYmxlIEQtQnVzIHN1cHBvcnQgaW4gYW1peGVyXSkKPiArICBpZiB0ZXN0 ICJ4JHdpdGhfZGJ1cyIgIT0geG5vOyB0aGVuCj4gKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhEQlVT LCBkYnVzLTEgPj0gZGJ1c19yZXF1aXJlZF92ZXJzaW9uLAo+ICsgICAgICBoYXZlX2RidXM9eWVz LAo+ICsgICAgICBoYXZlX2RidXM9bm8pCj4gKyAgZmkKPiArICBpZiB0ZXN0ICJ4JGhhdmVfZGJ1 cyIgPSB4eWVzOyB0aGVuCj4gKyAgICBBQ19ERUZJTkUoSEFWRV9EQlVTLCAxLCBbRGVmaW5lIHRv IDEgaWYgYW1peGVyIGlzIHRvIHN1cHBvcnQgRC1CdXNdKQo+ICsgIGZpCj4gIGZpCj4gIEFNX0NP TkRJVElPTkFMKEFMU0FNSVhFUiwgdGVzdCB4JGFsc2FtaXhlciA9IHh0cnVlKQo+ICAKPiAtLSAK PiAxLjYuMy4zCj4gCj4gCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFpvc3RhbiBEemlld2N6eW5hIGx1YiBD aGxvcGFraWVtIGxhdGEhCj4gV3lncmFqIHNrdXRlciA+PiBodHRwOi8vbGluay5pbnRlcmlhLnBs L2YyMmE3IAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpBbHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0 cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK