From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Hutchings Subject: Re: [Linux-kernel] [PATCH 1/6] ALSA: usb: ADC3: Add initial BADD spec support Date: Wed, 13 Dec 2017 22:48:53 +0000 Message-ID: <1513205333.18523.270.camel@codethink.co.uk> References: <20171129105532.15420-1-jorge.sanjuan@codethink.co.uk> <20171129105532.15420-2-jorge.sanjuan@codethink.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from imap1.codethink.co.uk (imap1.codethink.co.uk [176.9.8.82]) by alsa0.perex.cz (Postfix) with ESMTP id CCEAD266D45 for ; Wed, 13 Dec 2017 23:48:55 +0100 (CET) In-Reply-To: <20171129105532.15420-2-jorge.sanjuan@codethink.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Jorge Sanjuan , alsa-devel@alsa-project.org Cc: linux-kernel@lists.codethink.co.uk List-Id: alsa-devel@alsa-project.org T24gV2VkLCAyMDE3LTExLTI5IGF0IDEwOjU1ICswMDAwLCBKb3JnZSBTYW5qdWFuIHdyb3RlOgo+ IFRoZSBCYXNpYyBBdWRpbyBEZXZpY2UgMyAoQkFERCkgc3BlYyByZXF1aXJlcyB0aGUgaG9zdCB0 bwo+IGhhdmUgImluZmVycmVkIiBkZXNjcmlwdG9ycyB3aGVuIGEgQkFERCBwcm9maWxlIElEIGlz IHNwZWNpZmllZC4KPiBUaGlzIGRlc2NyaXB0b3IgZ2VuZXJhdG9yIGNyZWF0ZXMgYSBidWZmZXIg d2l0aCBrbm93biBkZXNjcmlwdG9ycwo+IGZvciBlYWNoIHByb2ZpbGUgdGhhdCBjYW4gYmUgdGhl biByZWFkIHRvIGNyZWF0ZSB0aGUgYWxzYSBhdWRpbwo+IGRldmljZShzKS4gVGhlIFVBQzMgY29t cGxpYW50IGRldmljZXMgc2hvdWxkIGhhdmUgb25lIGNvbmZpZ3VyYXRpb24KPiB0aGF0IGlzIEJB REQgY29tcGxpYW50Lgo+IAo+IFRoZSBVU0IgcmVxdWVzdCBmcm9tIGhvc3QgYXJlIGJ5cGFzc2Vk IGFuZCB0aGVzZSBidWZmZXJzIGFyZSByZWFkCj4gaW5zdGVhZC4KPiAKPiBUaGlzIHBhdGNoIHNl cmllcyBjb3ZlcnMgKGZvciBub3cpIHRoZSBmb2xsb3dpbmcgdG9wb2xvZ2llczoKPiAKPiDCoC0g SEVBRFBIT05FLgo+IMKgLSBIRUFEU0VULgo+IAo+IEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVy IHRvIHRoZSBzcGVjIGF0Ogo+IAo+IMKgaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZG9j cy9kZXZjbGFzc19kb2NzLwo+IAo+IFNpZ25lZC1vZmYtYnk6IEpvcmdlIFNhbmp1YW4gPGpvcmdl LnNhbmp1YW5AY29kZXRoaW5rLmNvLnVrPgo+IC0tLQpbLi4uXQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9zb3VuZC91c2IvYmFkZC5jCj4gQEAgLTAsMCArMSw0OTUgQEAKPiArLyoKPiArICrCoMKg wqBVU0I6IEF1ZGlvIENsYXNzIDM6IHN1cHBvcnQgZm9yIEJBU0lDIEFVRElPIERFVklDRSB2LjMK PiArICoKPiArICrCoMKgwqBBdXRob3I6IEpvcmdlIFNhbmp1YW4gPGpvcmdlLnNhbmp1YW5AY29k ZXRoaW5rLmNvLnVrPgo+ICsgKsKgwqDCoENvcHlyaWdodCAoQykgMjAxNyBDb2RldGhpbmsgTHRk Lgo+ICsgKgo+ICsgKsKgwqDCoFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CgpEcm9wIHRoZSBHUEwgYm9pbGVycGxhdGUg YW5kIGFkZCBhbiBTUERYIGxpY2VuY2UgaWRlbnRpZmllciBpbnN0ZWFkCihzZWUgY29tbWl0IGIy NDQxMzE4MGY1NikuCgpbLi4uXQo+ICtzdHJ1Y3QgdWFjM19mZWF0dXJlX3VuaXRfZGVzY3JpcHRv ciBpbmZfZmVhdF91bml0X2lkMiA9IHsKPiArCS5iTGVuZ3RoID0gMHgwRiwgLyogMHgxMyBpZiBz dGVyZW8gKi8KPiArCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAo+ICsJ LmJEZXNjcmlwdG9yU3VidHlwZSA9IFVBQzNfRkVBVFVSRV9VTklULAo+ICsKPiArCS5iVW5pdElE ID0gMHgwMiwKPiArCS8qIGJTb3VyY2VJRCAtPiBQcm9maWxlIGRlcGVuZGVudCAqLwo+ICsJLmJt YUNvbnRyb2xzWzBdID0gMHgwMywgLyogTXV0ZSAqLwo+ICsJLmJtYUNvbnRyb2xzWzFdID0gMHgw QywgLyogQ2huMSBWb2wgKi8KPiArCS8qIElmIHN0ZXJlbyAqLwo+ICsJLy8uYm1hQ29udHJvbHNb Ml0gPSAweDBDLCAvKiBDaG4yIFZvbCAqLwoKS2VybmVsIHN0eWxlIGlzIHRvIHVzZSBvbmx5IC8q ICovIGNvbW1lbnRzLCBub3QgLy8gY29tbWVudHMuCgpbLi4uXQo+ICsvKioKPiArICogYmFkZF9n ZW5fY2x1c3Rlcl9kZXNjIC0gVGhpcyBpcyB0byBieXBhc3MgdGhlIEdFVF9ISUdIX0NBUEFCSUxJ VFkKPiArICogVUFDMyByZXF1ZXN0cyBmb3IgZ2V0dGluZyBjbHVzdGVyIGRlc2NyaXB0b3JzIGFu ZCwgaW5zdGVhZCwgZ2VuZXJhdGUKPiArICogdGhlIGNsdXN0ZXIgb24gdGhlIGhvc3Qgc2lkZSBh cyBwZXIgQkFERCBzcGVjaWZpY2F0aW9uLgo+ICsgKi8KCkEga2VybmVsLWRvYyBjb21tZW50IG1z dCBoYXZlIGEgb25lLWxpbmUgc3VtbWFyeSBhbmQgdGhlbiBhIGRlc2NyaXB0aW9uCm9mIGVhY2gg cGFyYW1ldGVyLiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBkb2Vzbid0IG5lZWQgdGhhdCBraW5k IG9mCmRvY3VtZW50YXRpb24sIHNvIHlvdSBjb3VsZCBkcm9wIHRoZSBleHRyYSAqIGZyb20gdGhl IGNvbW1lbnQgb3BlbmVyLgoKPiArdm9pZCAqIGJhZGRfZ2VuX2NsdXN0ZXJfZGVzYyh1bnNpZ25l ZCBpbnQgbV9zKQoKTm8gc3BhY2UgYWZ0ZXIgdGhlICouICBVc2UgY2hlY2twYXRjaC5wbCB0byBj aGVjayBmb3IgdHJpdmlhbCBzdHlsZQppc3N1ZXMgbGlrZSB0aGlzLgoKPiArewo+ICsJc3RydWN0 IHVhYzNfY2x1c3Rlcl9oZWFkZXJfZGVzY3JpcHRvciBjbHVzdGVyOwo+ICsJc3RydWN0IHVhYzNf Y2x1c3Rlcl9pbmZvcm1hdGlvbl9zZWdtZW50X2Rlc2NyaXB0b3Igc2VnbWVudDsKPiArCXN0cnVj dCB1YWMzX2NsdXN0ZXJfZW5kX3NlZ21lbnRfZGVzY3JpcHRvciBlbmQ7Cj4gKwl2b2lkICpidWZm ZXI7Cj4gKwlpbnQgcG9zID0gMDsKPiArCWludCBsZW5ndGg7Cj4gKwo+ICsJZW5kLndMZW5ndGgg PSAweDAzOwoKSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgbGl0dGxlLWVuZGlhbiwgaW4gd2hp Y2ggY2FzZSB5b3UgbmVlZCB0byB1c2UKY3B1X3RvX2xlMTYoMHgwMykuCgpTaW1pbGFybHkgZm9y IGFsbCB0aGUgb3RoZXIgMTYvMzItYml0IGZpZWxkcyBpbiBkZXNjcmlwdG9ycy4KCj4gKwllbmQu YlNlZ21lbnRUeXBlID0gVUFDM19FTkRfU0VHTUVOVDsKPiArCj4gKwlpZiAobV9zID09IDB4MDEp IHsgLyogTW9ubyAqLwoKUmF0aGVyIHRoYW4gY29tbWVudGluZyB0aGF0IHRoaXMgY29uc3RhbnQg bWVhbnMgTW9ubywgeW91IHNob3VsZCBuYW1lCml0IHdpdGggYW4gZW51bSBvciBtYWNyby4gIChP ciBpZiB0aGUgdmFyaWFibGUgaXMgYWN0dWFsbHkgYSBudW1iZXIgb2YKY2hhbm5lbHMsIHRoZW4g eW91IHNob3VsZCByZW5hbWUgaXQuKQoKPiArCQlsZW5ndGggPSAweDEwOwoKV2hlcmUgZG9lcyB0 aGlzIG51bWJlciBjb21lIGZyb20/ICBTaG91bGRuJ3QgaXQgYmUgd3JpdHRlbiBhcwpzaXplb2Yo Y2x1c3RlcikgKyBzaXplb2Yoc2VnbWVudCkgKyBzaXplb2YoZW5kKT8KClsuLi5dCj4gKy8qKgo+ ICsgKiBiYWRkX2dlbl9jc2ludF9kZXNjIC0gZ2VuZXJhdGVzIGEgYnVmZmVyIHdpdGggdGhlIGlu ZmVycmVkCj4gKyAqIGRlc2NyaXB0b3JzIHRoYXQgYXJlIHByZWRlZmluZWQgaW4gdGhlIEJBREQg c3BlY2ZpY2F0aW9uLgoKQSBrZXJuZWwtZG9jIHN1bW1hcnkgaGFzIHRvIGJlIGEgc2luZ2xlIGxp bmUuICBUaGlzIGlzIG5vdCBqdXN0IGEKcmVjb21tZW5kYXRpb24sIGl0J3MgYSBoYXJkIGNvbnN0 cmFpbnQgb2YgdGhlIHNjcmlwdC4KClRoZXJlIGFyZSBhIGxvdCBtb3JlIG1hZ2ljIG51bWJlcnMg aW4gaGVyZSB0aGF0IG91Z2h0IHRvIGJlIHJlcGxhY2VkIGJ5CmVpdGhlciBuYW1lZCBjb25zdGFu dHMgb3IgYW4gZXhwcmVzc2lvbiB1c2luZyBzaXplb2YoKS4KClsuLi5dCj4gLS0tIGEvc291bmQv dXNiL3N0cmVhbS5jCj4gKysrIGIvc291bmQvdXNiL3N0cmVhbS5jCj4gQEAgLTM3LDYgKzM3LDcg QEAKPiDCoCNpbmNsdWRlICJmb3JtYXQuaCIKPiDCoCNpbmNsdWRlICJjbG9jay5oIgo+IMKgI2lu Y2x1ZGUgInN0cmVhbS5oIgo+ICsjaW5jbHVkZSAiYmFkZC5oIgo+IMKgCj4gwqAvKgo+IMKgICog ZnJlZSBhIHN1YnN0cmVhbQo+IEBAIC00ODUsNyArNDg2LDExIEBAIHN0YXRpYyBpbnQgcGFyc2Vf dWFjX2VuZHBvaW50X2F0dHJpYnV0ZXMoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCj4gwqAJ c3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhh bHRzKTsKPiDCoAlpbnQgYXR0cmlidXRlcyA9IDA7Cj4gwqAKPiAtCWNzZXAgPSBzbmRfdXNiX2Zp bmRfZGVzYyhhbHRzLT5lbmRwb2ludFswXS5leHRyYSwgYWx0cy0+ZW5kcG9pbnRbMF0uZXh0cmFs ZW4sIE5VTEwsIFVTQl9EVF9DU19FTkRQT0lOVCk7Cj4gKwlpZiAocHJvdG9jb2wgPT0gVUFDX1ZF UlNJT05fMyAmJgo+ICsJCQljaGlwLT5iYWRkX3Byb2ZpbGUgPiBVQUMzX0ZVTkNUSU9OX1NVQkNM QVNTX0ZVTExfQURDXzNfMCkKClRoaXMgbG9va3MgZXhjZXNzaXZlbHkgaW5kZW50ZWQuCgo+ICsJ CWNzZXAgPSBiYWRkX2dldF9lcF9kZWMoKTsKPiArCWVsc2UKPiArCQljc2VwID0gc25kX3VzYl9m aW5kX2Rlc2MoYWx0cy0+ZW5kcG9pbnRbMF0uZXh0cmEsIGFsdHMtPmVuZHBvaW50WzBdLmV4dHJh bGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQpOwo+IMKgCj4gwqAJLyogQ3JlYW13YXJlIE5v YWggaGFzIHRoaXMgZGVzY3JpcHRvciBhZnRlciB0aGUgMm5kIGVuZHBvaW50ICovCj4gwqAJaWYg KCFjc2VwICYmIGFsdHNkLT5iTnVtRW5kcG9pbnRzID49IDIpClsuLi5dCj4gQEAgLTcxNSwxMSAr NzIzLDMzIEBAIGludCBzbmRfdXNiX3BhcnNlX2F1ZGlvX2ludGVyZmFjZShzdHJ1Y3Qgc25kX3Vz Yl9hdWRpbyAqY2hpcCwgaW50IGlmYWNlX25vKQo+IMKgCQkJc3RydWN0IHVhYzNfYXNfaGVhZGVy X2Rlc2NyaXB0b3IgKmFzOwo+IMKgCQkJc3RydWN0IHVhYzNfY2x1c3Rlcl9oZWFkZXJfZGVzY3Jp cHRvciAqY2x1c3RlcjsKPiDCoAkJCXN0cnVjdCB1YWMzX2hjX2Rlc2NyaXB0b3JfaGVhZGVyIGhj X2hlYWRlcjsKPiArCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYmFkZF9jdHJsX2ludGY7 Cj4gKwkJCXZvaWQgKmJhZGRfZXh0cmE7Cj4gKwkJCWludCBiYWRkX2V4dHJhbGVuOwo+IMKgCQkJ dTE2IGNsdXN0ZXJfaWQsIHdMZW5ndGg7Cj4gwqAKPiAtCQkJYXMgPSBzbmRfdXNiX2ZpbmRfY3Np bnRfZGVzYyhhbHRzLT5leHRyYSwKPiAtCQkJCQkJCWFsdHMtPmV4dHJhbGVuLAo+IC0JCQkJCQkJ TlVMTCwgVUFDX0FTX0dFTkVSQUwpOwo+ICsJCQliYWRkX2N0cmxfaW50ZiA9IGt6YWxsb2Moc2l6 ZW9mKCpiYWRkX2N0cmxfaW50ZiksIEdGUF9LRVJORUwpOwoKTWlzc2luZyBhbiBlcnJvciBjaGVj ayBoZXJlLgoKPiArCQkJbWVtY3B5KGJhZGRfY3RybF9pbnRmLCBjaGlwLT5jdHJsX2ludGYsIHNp emVvZigqYmFkZF9jdHJsX2ludGYpKTsKPiArCj4gKwkJCWlmIChjaGlwLT5iYWRkX3Byb2ZpbGUg PiBVQUMzX0ZVTkNUSU9OX1NVQkNMQVNTX0ZVTExfQURDXzNfMCkgewo+ICsKPiArCQkJCWFzID0g YmFkZF9nZXRfYXNfaWZhY2Uoc3RyZWFtLCBlcF9wYWNrc2l6ZSk7Cj4gKwo+ICsJCQkJZXJyID0g YmFkZF9nZW5fY3NpbnRfZGVzYygmYmFkZF9leHRyYSwgY2hpcC0+YmFkZF9wcm9maWxlLCBhcy0+ d0NsdXN0ZXJEZXNjcklEKTsKPiArCQkJCWlmIChlcnIgPD0gMCB8fCAhYmFkZF9leHRyYSkgewo+ ICsJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAo+ICsJCQkJCQkiJXU6JWQgOiBDYW5ub3Qgc2V0IEJB REQgcHJvZmlsZSAweCV4LiBlcnI9JWQuIGJhZGRfZXh0cmEgJXBcbiIsCj4gKwkJCQkJCWlmYWNl X25vLCBhbHRubywgY2hpcC0+YmFkZF9wcm9maWxlLCBlcnIsIGJhZGRfZXh0cmEpOwo+ICsJCQkJ CXJldHVybiBlcnI7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJYmFkZF9leHRyYWxlbiA9IGVycjsKPiAr CQkJCWJhZGRfY3RybF9pbnRmLT5leHRyYSA9IGJhZGRfZXh0cmE7Cj4gKwkJCQliYWRkX2N0cmxf aW50Zi0+ZXh0cmFsZW4gPSBiYWRkX2V4dHJhbGVuOwoKSSBkb24ndCB0aGluayB0aGUgYmFkZF9l eHRyYSBvciBiYWRkX2V4dHJhbGVuIHZhcmlhYmxlcyBhcmUgcmVhbGx5Cm5lZWRlZCBoZXJlIC0g dGhleSBqdXN0IHNlZW0gdG8gY29tcGxpY2F0ZSB0aGlzLgoKPiArCQkJfSBlbHNlCj4gKwkJCQlh cyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLAo+ICsJCQkJCQkJCWFsdHMt PmV4dHJhbGVuLAo+ICsJCQkJCQkJCU5VTEwsIFVBQ19BU19HRU5FUkFMKTsKPiDCoAo+IMKgCQkJ aWYgKCFhcykgewo+IMKgCQkJCWRldl9lcnIoJmRldi0+ZGV2LAo+IEBAIC03NDMsNTMgKzc3Myw2 NCBAQCBpbnQgc25kX3VzYl9wYXJzZV9hdWRpb19pbnRlcmZhY2Uoc3RydWN0IHNuZF91c2JfYXVk aW8gKmNoaXAsIGludCBpZmFjZV9ubykKPiDCoAkJCQljb250aW51ZTsKPiDCoAkJCX0KPiDCoAo+ IC0JCQkvKgo+IC0JCQnCoCogR2V0IG51bWJlciBvZiBjaGFubmVscyBhbmQgY2hhbm5lbCBtYXAg dGhyb3VnaAo+IC0JCQnCoCogSGlnaCBDYXBhYmlsaXR5IENsdXN0ZXIgRGVzY3JpcHRvcgo+IC0J CQnCoCoKPiAtCQkJwqAqIEZpcnN0IHN0ZXA6IGdldCBIaWdoIENhcGFiaWxpdHkgaGVhZGVyIGFu ZAo+IC0JCQnCoCogcmVhZCBzaXplIG9mIENsdXN0ZXIgRGVzY3JpcHRvcgo+IC0JCQnCoCovCj4g LQkJCWVyciA9IHNuZF91c2JfY3RsX21zZyhjaGlwLT5kZXYsCj4gLQkJCQkJdXNiX3JjdmN0cmxw aXBlKGNoaXAtPmRldiwgMCksCj4gLQkJCQkJVUFDM19DU19SRVFfSElHSF9DQVBBQklMSVRZX0RF U0NSSVBUT1IsCj4gLQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwg VVNCX0RJUl9JTiwKPiAtCQkJCQljbHVzdGVyX2lkLAo+IC0JCQkJCXNuZF91c2JfY3RybF9pbnRm KGNoaXApLAo+IC0JCQkJCSZoY19oZWFkZXIsIHNpemVvZihoY19oZWFkZXIpKTsKPiAtCQkJaWYg KGVyciA8IDApCj4gLQkJCQlyZXR1cm4gZXJyOwo+IC0JCQllbHNlIGlmIChlcnIgIT0gc2l6ZW9m KGhjX2hlYWRlcikpIHsKPiAtCQkJCWRldl9lcnIoJmRldi0+ZGV2LAo+IC0JCQkJCSIldTolZCA6 IGNhbid0IGdldCBIaWdoIENhcGFiaWxpdHkgZGVzY3JpcHRvclxuIiwKPiAtCQkJCQlpZmFjZV9u bywgYWx0bm8pOwo+IC0JCQkJcmV0dXJuIC1FSU87Cj4gLQkJCX0KPiAtCj4gLQkJCS8qCj4gLQkJ CcKgKiBTZWNvbmQgc3RlcDogYWxsb2NhdGUgbmVlZGVkIGFtb3VudCBvZiBtZW1vcnkKPiAtCQkJ wqAqIGFuZCByZXF1ZXN0IENsdXN0ZXIgRGVzY3JpcHRvcgo+IC0JCQnCoCovCj4gLQkJCXdMZW5n dGggPSBsZTE2X3RvX2NwdShoY19oZWFkZXIud0xlbmd0aCk7Cj4gLQkJCWNsdXN0ZXIgPSBremFs bG9jKHdMZW5ndGgsIEdGUF9LRVJORUwpOwo+IC0JCQlpZiAoIWNsdXN0ZXIpCj4gLQkJCQlyZXR1 cm4gLUVOT01FTTsKPiAtCQkJZXJyID0gc25kX3VzYl9jdGxfbXNnKGNoaXAtPmRldiwKPiAtCQkJ CQl1c2JfcmN2Y3RybHBpcGUoY2hpcC0+ZGV2LCAwKSwKPiAtCQkJCQlVQUMzX0NTX1JFUV9ISUdI X0NBUEFCSUxJVFlfREVTQ1JJUFRPUiwKPiAtCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNC X1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAo+IC0JCQkJCWNsdXN0ZXJfaWQsCj4gLQkJCQkJc25k X3VzYl9jdHJsX2ludGYoY2hpcCksCj4gLQkJCQkJY2x1c3Rlciwgd0xlbmd0aCk7Cj4gLQkJCWlm IChlcnIgPCAwKSB7Cj4gLQkJCQlrZnJlZShjbHVzdGVyKTsKPiAtCQkJCXJldHVybiBlcnI7Cj4g LQkJCX0gZWxzZSBpZiAoZXJyICE9IHdMZW5ndGgpIHsKPiAtCQkJCWRldl9lcnIoJmRldi0+ZGV2 LAo+IC0JCQkJCSIldTolZCA6IGNhbid0IGdldCBDbHVzdGVyIERlc2NyaXB0b3JcbiIsCj4gLQkJ CQkJaWZhY2Vfbm8sIGFsdG5vKTsKPiAtCQkJCWtmcmVlKGNsdXN0ZXIpOwo+IC0JCQkJcmV0dXJu IC1FSU87Cj4gKwkJCWlmIChjaGlwLT5iYWRkX3Byb2ZpbGUgPiBVQUMzX0ZVTkNUSU9OX1NVQkNM QVNTX0ZVTExfQURDXzNfMCkgewo+ICsKPiArCQkJCWNsdXN0ZXIgPSBiYWRkX2dlbl9jbHVzdGVy X2Rlc2MoY2x1c3Rlcl9pZCk7Cj4gKwkJCQlpZiAoIWNsdXN0ZXIpIHsKPiArCQkJCQlkZXZfZXJy KCZkZXYtPmRldizCoAo+ICsJCQkJCQkiJXU6JWQgOiBjYW4ndCBnZXQgQ2x1c3RlciBEZXNjcmlw dG9yXG4iLAo+ICsJCQkJCQlpZmFjZV9ubywgYWx0bm8pOwo+ICsJCQkJCXJldHVybiAtRU5PTUVN Owo+ICsJCQkJfQo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJLyoKPiArCQkJCcKgKiBHZXQgbnVtYmVy IG9mIGNoYW5uZWxzIGFuZCBjaGFubmVsIG1hcCB0aHJvdWdoCj4gKwkJCQnCoCogSGlnaCBDYXBh YmlsaXR5IENsdXN0ZXIgRGVzY3JpcHRvcgo+ICsJCQkJwqAqCj4gKwkJCQnCoCogRmlyc3Qgc3Rl cDogZ2V0IEhpZ2ggQ2FwYWJpbGl0eSBoZWFkZXIgYW5kCj4gKwkJCQnCoCogcmVhZCBzaXplIG9m IENsdXN0ZXIgRGVzY3JpcHRvcgo+ICsJCQkJwqAqLwo+ICsJCQkJZXJyID0gc25kX3VzYl9jdGxf bXNnKGNoaXAtPmRldiwKPiArCQkJCQkJdXNiX3JjdmN0cmxwaXBlKGNoaXAtPmRldiwgMCksCj4g KwkJCQkJCVVBQzNfQ1NfUkVRX0hJR0hfQ0FQQUJJTElUWV9ERVNDUklQVE9SLAo+ICsJCQkJCQlV U0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAo+ICsJCQkJ CQljbHVzdGVyX2lkLAo+ICsJCQkJCQlzbmRfdXNiX2N0cmxfaW50ZihjaGlwKSwKPiArCQkJCQkJ JmhjX2hlYWRlciwgc2l6ZW9mKGhjX2hlYWRlcikpOwo+ICsJCQkJaWYgKGVyciA8IDApCj4gKwkJ CQkJcmV0dXJuIGVycjsKPiArCQkJCWVsc2UgaWYgKGVyciAhPSBzaXplb2YoaGNfaGVhZGVyKSkg ewo+ICsJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAo+ICsJCQkJCQkiJXU6JWQgOiBjYW4ndCBnZXQg SGlnaCBDYXBhYmlsaXR5IGRlc2NyaXB0b3JcbiIsCj4gKwkJCQkJCWlmYWNlX25vLCBhbHRubyk7 Cj4gKwkJCQkJcmV0dXJuIC1FSU87Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJLyoKPiArCQkJCcKgKiBT ZWNvbmQgc3RlcDogYWxsb2NhdGUgbmVlZGVkIGFtb3VudCBvZiBtZW1vcnkKPiArCQkJCcKgKiBh bmQgcmVxdWVzdCBDbHVzdGVyIERlc2NyaXB0b3IKPiArCQkJCcKgKi8KPiArCQkJCXdMZW5ndGgg PSBsZTE2X3RvX2NwdShoY19oZWFkZXIud0xlbmd0aCk7Cj4gKwkJCQljbHVzdGVyID0ga3phbGxv Yyh3TGVuZ3RoLCBHRlBfS0VSTkVMKTsKPiArCQkJCWlmICghY2x1c3RlcikKPiArCQkJCQlyZXR1 cm4gLUVOT01FTTsKPiArCQkJCWVyciA9IHNuZF91c2JfY3RsX21zZyhjaGlwLT5kZXYsCj4gKwkJ CQkJCXVzYl9yY3ZjdHJscGlwZShjaGlwLT5kZXYsIDApLAo+ICsJCQkJCQlVQUMzX0NTX1JFUV9I SUdIX0NBUEFCSUxJVFlfREVTQ1JJUFRPUiwKPiArCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSB8 IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKPiArCQkJCQkJY2x1c3Rlcl9pZCwKPiArCQkJ CQkJc25kX3VzYl9jdHJsX2ludGYoY2hpcCksCj4gKwkJCQkJCWNsdXN0ZXIsIHdMZW5ndGgpOwo+ ICsJCQkJaWYgKGVyciA8IDApIHsKPiArCQkJCQlrZnJlZShjbHVzdGVyKTsKPiArCQkJCQlyZXR1 cm4gZXJyOwo+ICsJCQkJfSBlbHNlIGlmIChlcnIgIT0gd0xlbmd0aCkgewo+ICsJCQkJCWRldl9l cnIoJmRldi0+ZGV2LAo+ICsJCQkJCQkiJXU6JWQgOiBjYW4ndCBnZXQgQ2x1c3RlciBEZXNjcmlw dG9yXG4iLAo+ICsJCQkJCQlpZmFjZV9ubywgYWx0bm8pOwo+ICsJCQkJCWtmcmVlKGNsdXN0ZXIp Owo+ICsJCQkJCXJldHVybiAtRUlPOwo+ICsJCQkJfQoKVGhpcyBpcyBhIGxhcmdlIGJsb2NrIG9m IGNvZGUgZ2V0dGluZyBpbmRlbnRlZCBtYW55IGxldmVscyBkZWVwLiAgSQpjYW4ndCBoZWxwIHRo aW5raW5nIHRoYXQgaXQgYWxzbyBvdWdodCB0byBiZSB0dXJuZWQgaW50byBhIHNlcGFyYXRlCmZ1 bmN0aW9uLgoKQWxsIHRoZSBlcnJvciBjYXNlcyBpbiB0aGlzIGJsb2NrIHdpbGwgbm93IGxlYWsg YmFkZF9jdHJsX2luZiwgYW5kIGl0CndvdWxkIGJlIGVhc2llciB0byBhdm9pZCB0aGF0IGlmIGl0 J3MgdHVybmVkIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbi4KCgo+IMKgCQkJfQo+IMKgCj4gwqAJ CQludW1fY2hhbm5lbHMgPSBjbHVzdGVyLT5iTnJDaGFubmVsczsKPiBAQCAtODAyLDcgKzg0Myw3 IEBAIGludCBzbmRfdXNiX3BhcnNlX2F1ZGlvX2ludGVyZmFjZShzdHJ1Y3Qgc25kX3VzYl9hdWRp byAqY2hpcCwgaW50IGlmYWNlX25vKQo+IMKgCQkJLyogbG9va3VwIHRoZSB0ZXJtaW5hbCBhc3Nv Y2lhdGVkIHRvIHRoaXMgaW50ZXJmYWNlCj4gwqAJCQnCoCogdG8gZXh0cmFjdCB0aGUgY2xvY2sg Ki8KPiDCoAkJCWlucHV0X3Rlcm0gPSBzbmRfdXNiX2ZpbmRfaW5wdXRfdGVybWluYWxfZGVzY3Jp cHRvcigKPiAtCQkJCQkJCWNoaXAtPmN0cmxfaW50ZiwKPiArCQkJCQkJCWJhZGRfY3RybF9pbnRm LAo+IMKgCQkJCQkJCWFzLT5iVGVybWluYWxMaW5rKTsKPiDCoAo+IMKgCQkJaWYgKGlucHV0X3Rl cm0pIHsKPiBAQCAtODEwLDcgKzg1MSw3IEBAIGludCBzbmRfdXNiX3BhcnNlX2F1ZGlvX2ludGVy ZmFjZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGlmYWNlX25vKQo+IMKgCQkJCWJy ZWFrOwo+IMKgCQkJfQo+IMKgCj4gLQkJCW91dHB1dF90ZXJtID0gc25kX3VzYl9maW5kX291dHB1 dF90ZXJtaW5hbF9kZXNjcmlwdG9yKGNoaXAtPmN0cmxfaW50ZiwKPiArCQkJb3V0cHV0X3Rlcm0g PSBzbmRfdXNiX2ZpbmRfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IoYmFkZF9jdHJsX2ludGYs Cj4gwqAJCQkJCQkJCQnCoMKgwqDCoMKgwqBhcy0+YlRlcm1pbmFsTGluayk7Cj4gwqAJCQlpZiAo b3V0cHV0X3Rlcm0pIHsKPiDCoAkJCQljbG9jayA9IG91dHB1dF90ZXJtLT5iQ1NvdXJjZUlEOwpb Li4uXQoKSXQgbG9va3MgbGlrZSBiYWRkX2N0cmxfaW5mICphbHdheXMqIGdldHMgbGVha2VkLgoK QmVuLgoKLS0gCkJlbiBIdXRjaGluZ3MKU29mdHdhcmUgRGV2ZWxvcGVyLCBDb2RldGhpbmsgTHRk LgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1k ZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWls bWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==