Return-path: Received: from mail-yw0-f183.google.com ([209.85.211.183]:56912 "EHLO mail-yw0-f183.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751095AbZGaSPR (ORCPT ); Fri, 31 Jul 2009 14:15:17 -0400 Received: by ywh13 with SMTP id 13so1989772ywh.15 for ; Fri, 31 Jul 2009 11:15:17 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20090731180805.GD7963@makis> References: <20090731180805.GD7963@makis> From: "Luis R. Rodriguez" Date: Fri, 31 Jul 2009 11:14:57 -0700 Message-ID: <43e72e890907311114k5a049c08jfa40a3ed45e9afed@mail.gmail.com> Subject: Re: [PATCH 3/4] ath5k: Wakeup fixes To: ath5k-devel@lists.ath5k.org, linux-wireless@vger.kernel.org, linville@tuxdriver.com, jirislaby@gmail.com, me@bobcopeland.com, mcgrof@gmail.com, nbd@openwrt.org Content-Type: text/plain; charset=UTF-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: T24gRnJpLCBKdWwgMzEsIDIwMDkgYXQgMTE6MDggQU0sIE5pY2sKS29zc2lmaWRpczxtaWNrQG1h ZHdpZmktcHJvamVjdC5vcmc+IHdyb3RlOgo+IMKgKiBEb24ndCBwdXQgY2hpcCB0byBmdWxsIHNs ZWVwIGJlY2F1c2UgdGhlcmUgYXJlIHByb2JsZW1zIGR1cmluZwo+IMKgIHdha2V1cC4gSW5zdGVh ZCBob2xkIE1BQy9CYXNlYmFuZCBvbiB3YXJtIHJlc2V0IHN0YXRlIHZpYSBhIG5ldwo+IMKgIGZ1 bmN0aW9uIGF0aDVrX2h3X29uX2hvbGQuCj4KPiDCoCogRHVycmluZyBhdHRhY2ggcHJlc2VydmUg cGNpY2ZnIGJpdHMgd2hlbiBlbmFibGluZyBwY2kgY29yZQo+IMKgIHN3IHJldHJ5IGZpeC4KPgo+ IMKgKiBNaW5vciBjbGVhbnVwcwoKQ2FuIHlvdSBhZGRyZXNzIHRoZXNlIGNoYW5nZXMgc2VwYXJh dGVseT8gSSBzZWUgeW91IHRlbmQgdG8gaXRlbWl6ZQp0aGUgdGhpbmdzIHlvdSBjaGFuZ2UsIGV2 ZW4gd2hlbiB5b3UganVzdCBtYWtlIG9uZSBjaGFuZ2UuIFBsZWFzZQpjb25zaWRlciBhZGRyZXNz aW5nIG9uZSBjaGFuZ2UgcGVyIGNvbW1pdCBhbmQganVzdCBlbnN1cmUgdGhlIHdoeSBpcwpjcnlz dGFsIGNsZWFyLgoKICBMdWlzCgo+IC0tLQo+IMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDVrL2F0aDVrLmggwqB8IMKgIMKgMSArCj4gwqBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRo NWsvYXR0YWNoLmMgfCDCoCDCoDQgKy0KPiDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1 ay9iYXNlLmMgwqAgfCDCoCA0NCArKysrKy0tLS0KPiDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0 aC9hdGg1ay9yZXNldC5jIMKgfCDCoDE1NSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t Cj4gwqA0IGZpbGVzIGNoYW5nZWQsIDE0MSBpbnNlcnRpb25zKCspLCA2MyBkZWxldGlvbnMoLSkK Pgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaCBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCj4gaW5kZXggOTEzNzUxMS4u MTA0N2E2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRo NWsuaAo+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCj4gQEAg LTExNTcsNiArMTE1Nyw3IEBAIGV4dGVybiB2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1 Y3QgYXRoNWtfc29mdGMgKnNjKTsKPgo+IMKgLyogUmVzZXQgRnVuY3Rpb25zICovCj4gwqBleHRl cm4gaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdz LCBib29sIGluaXRpYWwpOwo+ICtleHRlcm4gaW50IGF0aDVrX2h3X29uX2hvbGQoc3RydWN0IGF0 aDVrX2h3ICphaCk7Cj4gwqBleHRlcm4gaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19o dyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwgc3RydWN0IGllZWU4MDIxMV9jaGFu bmVsICpjaGFubmVsLCBib29sIGNoYW5nZV9jaGFubmVsKTsKPiDCoC8qIFBvd2VyIG1hbmFnZW1l bnQgZnVuY3Rpb25zICovCj4gwqBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9wb3dlcihzdHJ1Y3Qg YXRoNWtfaHcgKmFoLCBlbnVtIGF0aDVrX3Bvd2VyX21vZGUgbW9kZSwgYm9vbCBzZXRfY2hpcCwg dTE2IHNsZWVwX2R1cmF0aW9uKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mv YXRoL2F0aDVrL2F0dGFjaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFj aC5jCj4gaW5kZXggNjI2MzA2NS4uNjVkNDM4YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC93 aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9h dGgvYXRoNWsvYXR0YWNoLmMKPiBAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0cnVjdCBhdGg1a19odyAq YXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKQo+ IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ290byBlcnJfZnJlZTsKPgo+IMKgIMKgIMKgIMKgLyog QnJpbmcgZGV2aWNlIG91dCBvZiBzbGVlcCBhbmQgcmVzZXQgaXQncyB1bml0cyAqLwo+IC0gwqAg wqAgwqAgcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgQ0hBTk5FTF9CLCB0cnVlKTsKPiAr IMKgIMKgIMKgIHJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIDAsIHRydWUpOwo+IMKgIMKg IMKgIMKgaWYgKHJldCkKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZXJyX2ZyZWU7Cj4K PiBAQCAtMjYxLDcgKzI2MSw3IEBAIHN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0 cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKQo+Cj4gwqAgwqAgwqAgwqAvKiBF bmFibGUgcGNpIGNvcmUgcmV0cnkgZml4IG9uIEhhaW5hbiAoNTIxM0EpIGFuZCBsYXRlciBjaGlw cyAqLwo+IMKgIMKgIMKgIMKgaWYgKHNyZXYgPj0gQVI1S19TUkVWX0FSNTIxM0EpCj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCBhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUENJQ0ZHX1JFVFJZ X0ZJWCwgQVI1S19QQ0lDRkcpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQVI1S19SRUdfRU5B QkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBBUjVLX1BDSUNGR19SRVRSWV9GSVgpOwo+Cj4gwqAg wqAgwqAgwqAvKgo+IMKgIMKgIMKgIMKgICogR2V0IGNhcmQgY2FwYWJpbGl0aWVzLCBjYWxpYnJh dGlvbiB2YWx1ZXMgZXRjCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCj4gaW5k ZXggN2RiMzJjZS4uYjY0NzMxYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9h dGgvYXRoNWsvYmFzZS5jCj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jh c2UuYwo+IEBAIC0yNDQ4LDI3ICsyNDQ4LDI5IEBAIGF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVr X3NvZnRjICpzYykKPiDCoCDCoCDCoCDCoHJldCA9IGF0aDVrX3N0b3BfbG9ja2VkKHNjKTsKPiDC oCDCoCDCoCDCoGlmIChyZXQgPT0gMCAmJiAhdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2Mt PnN0YXR1cykpIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qCj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCogU2V0IHRoZSBjaGlwIGluIGZ1bGwgc2xlZXAgbW9kZS4gwqBOb3RlIHRoYXQg d2UgYXJlCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogY2FyZWZ1bCB0byBkbyB0aGlzIG9u bHkgd2hlbiBicmluZ2luZyB0aGUgaW50ZXJmYWNlCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCogY29tcGxldGVseSB0byBhIHN0b3AuIMKgV2hlbiB0aGUgY2hpcCBpcyBpbiB0aGlzIHN0YXRl Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogaXQgbXVzdCBiZSBjYXJlZnVsbHkgd29rZW4g dXAgb3IgcmVmZXJlbmNlcyB0bwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIHJlZ2lzdGVy cyBpbiB0aGUgUENJIGNsb2NrIGRvbWFpbiBtYXkgZnJlZXplIHRoZSBidXMKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKiAoYW5kIHN5c3RlbSkuIMKgVGhpcyB2YXJpZXMgYnkgY2hpcCBhbmQg aXMgbW9zdGx5IGFuCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogaXNzdWUgd2l0aCBuZXdl ciBwYXJ0cyB0aGF0IGdvIHRvIHNsZWVwIG1vcmUgcXVpY2tseS4KPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgKi8KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChzYy0+YWgtPmFoX21hY19z cmV2ID49IDB4NzgpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qCj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogWFhYCj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogZG9uJ3QgcHV0IG5ld2VyIE1BQyByZXZpc2lvbnMg PiA3LjggdG8gc2xlZXAgYmVjYXVzZQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAqIG9mIHRoZSBhYm92ZSBtZW50aW9uZWQgcHJvYmxlbXMKPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKi8KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIEFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtYWMgdmVyc2lvbiA+IDcuOCwg Igo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIm5vdCBw dXR0aW5nIGRldmljZSB0byBzbGVlcFxuIik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IGVs c2Ugewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQVRINUtfREJHKHNjLCBB VEg1S19ERUJVR19SRVNFVCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICJwdXR0aW5nIGRldmljZSB0byBmdWxsIHNsZWVwXG4iKTsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGF0aDVrX2h3X3NldF9wb3dlcihzYy0+YWgsIEFSNUtf UE1fRlVMTF9TTEVFUCwgdHJ1ZSwgMCk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogRG9uJ3Qgc2V0IHRoZSBjYXJkIGluIGZ1bGwgc2xlZXAg bW9kZSEKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAqIGEpIFdoZW4gdGhlIGRldmljZSBpcyBpbiB0aGlzIHN0YXRlIGl0IG11c3QgYmUgY2Fy ZWZ1bGx5Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogd29rZW4gdXAgb3IgcmVmZXJlbmNl cyB0byByZWdpc3RlcnMgaW4gdGhlIFBDSSBjbG9jawo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAqIGRvbWFpbiBtYXkgZnJlZXplIHRoZSBidXMgKGFuZCBzeXN0ZW0pLiDCoFRoaXMgdmFyaWVz Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogYnkgY2hpcCBhbmQgaXMgbW9zdGx5IGFuIGlz c3VlIHdpdGggbmV3ZXIgcGFydHMKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiAobWFkd2lm aSBzb3VyY2VzIG1lbnRpb25lZCBzcmV2ID49IDB4NzgpIHRoYXQgZ28gdG8KPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKiBzbGVlcCBtb3JlIHF1aWNrbHkuCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBiKSBPbiBvbGRlciBjaGlwcyBm dWxsIHNsZWVwIHJlc3VsdHMgYSB3ZWlyZCBiZWhhdmlvdXIKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKiBkdXJpbmcgd2FrZXVwLiBJIHRlc3RlZCB2YXJpb3VzIGNhcmRzIHdpdGggc3JldiA8 IDB4NzgKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBhbmQgdGhleSBkb24ndCB3YWtlIHVw IGFmdGVyIG1vZHVsZSByZWxvYWQsIGEgc2Vjb25kCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCogbW9kdWxlIHJlbG9hZCBpcyBuZWVkZWQgdG8gYnJpbmcgdGhlIGNhcmQgdXAgYWdhaW4uCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBV bnRpbCB3ZSBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBkb24ndCBlbmFibGUKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgKiBmdWxsIGNoaXAgcmVzZXQgb24gYW55IGNoaXAgKHRoaXMgaXMg d2hhdCBMZWdhY3kgSEFMCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogYW5kIFNhbSdzIEhB TCBkbyBhbnl3YXkpLiBJbnN0ZWFkIFBlcmZvcm0gYSBmdWxsIHJlc2V0Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCogb24gdGhlIGRldmljZSAoc2FtZSBhcyBpbml0aWFsIHN0YXRlIGFmdGVy IGF0dGFjaCkgYW5kCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogbGVhdmUgaXQgaWRsZSAo a2VlcCBNQUMvQkIgb24gd2FybSByZXNldCkgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJl dCA9IGF0aDVrX2h3X29uX2hvbGQoc2MtPmFoKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgInB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwXG4iKTsK PiDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDCoGF0aDVrX3R4YnVmX2ZyZWUoc2MsIHNjLT5iYnVm KTsKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQu YyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jCj4gaW5kZXggODY3MzNm ZC4uMzRlMTNjNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsv cmVzZXQuYwo+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jCj4g QEAgLTI1OCwyOSArMjU4LDM1IEBAIGludCBhdGg1a19od19zZXRfcG93ZXIoc3RydWN0IGF0aDVr X2h3ICphaCwgZW51bSBhdGg1a19wb3dlcl9tb2RlIG1vZGUsCj4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBpZiAoIXNldF9jaGlwKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg Z290byBjb21taXQ7Cj4KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIFByZXNlcnZlIHNsZWVw IGR1cmF0aW9uICovCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkYXRhID0gYXRoNWtfaHdfcmVn X3JlYWQoYWgsIEFSNUtfU0xFRVBfQ1RMKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAv KiBJZiBjYXJkIGlzIGRvd24gd2UgJ2xsIGdldCAweGZmZmYuLi4gc28gd2UKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgKiBuZWVkIHRvIGNsZWFuIHRoaXMgdXAgYmVmb3JlIHdlIHdyaXRlIHRo ZSByZWdpc3Rlcgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqLwo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgaWYgKGRhdGEgJiAweGZmYzAwMDAwKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgZGF0YSA9IDA7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBlbHNlCj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkYXRhID0gZGF0YSAmIDB4ZmZmY2ZmZmY7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBQcmVzZXJ2ZSBzbGVlcCBk dXJhdGlvbiBldGMgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRhdGEg PSBkYXRhICYgfkFSNUtfU0xFRVBfQ1RMX1NMRTsKPgo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg YXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1NMRUVQX0NUTCk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCBhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEgfCBBUjVLX1NMRUVQX0NU TF9TTEVfV0FLRSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFSNUtfU0xFRVBfQ1RMKTsK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVkZWxheSgxNSk7Cj4KPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGZvciAoaSA9IDUwOyBpID4gMDsgaS0tKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBmb3IgKGkgPSAyMDA7IGkgPiAwOyBpLS0pIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoC8qIENoZWNrIGlmIHRoZSBjaGlwIGRpZCB3YWtlIHVwICovCj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAoKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVL X1BDSUNGRykgJgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgQVI1S19QQ0lDRkdfU1BXUl9ETikgPT0gMCkKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+Cj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvKiBXYWl0IGEgYml0IGFuZCByZXRyeSAqLwo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdWRlbGF5KDIwMCk7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtf U0xFRVBfQ1RMKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVkZWxheSg1 MCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhdGg1a19od19yZWdfd3Jp dGUoYWgsIGRhdGEgfCBBUjVLX1NMRUVQX0NUTF9TTEVfV0FLRSwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIEFSNUtfU0xFRVBfQ1RMKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPgo+ IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLyogRmFpbCBpZiB0aGUgY2hpcCBkaWRuJ3Qgd2FrZSB1 cCAqLwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGkgPD0gMCkKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGlmIChpID09IDApCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqByZXR1cm4gLUVJTzsKPgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gQEAgLTI5 Niw2ICszMDIsNjQgQEAgY29tbWl0Ogo+IMKgfQo+Cj4gwqAvKgo+ICsgKiBQdXQgZGV2aWNlIG9u IGhvbGQKPiArICoKPiArICogUHV0IE1BQyBhbmQgQmFzZWJhbmQgb24gd2FybSByZXNldCBhbmQK PiArICoga2VlcCB0aGF0IHN0YXRlIChkb24ndCBjbGVhbiBzbGVlcCBjb250cm9sCj4gKyAqIHJl Z2lzdGVyKS4gQWZ0ZXIgdGhpcyBNQUMgYW5kIEJhc2ViYW5kIGFyZQo+ICsgKiBkaXNhYmxlZCBh bmQgYSBmdWxsIHJlc2V0IGlzIG5lZWRlZCB0byBjb21lCj4gKyAqIGJhY2suIFRoaXMgd2F5IHdl IHNhdmUgYXMgbXVjaCBwb3dlciBhcyBwb3NzaWJsZQo+ICsgKiB3aXRob3V0IHB1dGluZyB0aGUg Y2FyZCBvbiBmdWxsIHNsZWVwLgo+ICsgKi8KPiAraW50IGF0aDVrX2h3X29uX2hvbGQoc3RydWN0 IGF0aDVrX2h3ICphaCkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBh aC0+YWhfc2MtPnBkZXY7Cj4gKyDCoCDCoCDCoCB1MzIgYnVzX2ZsYWdzOwo+ICsgwqAgwqAgwqAg aW50IHJldDsKPiArCj4gKyDCoCDCoCDCoCAvKiBNYWtlIHN1cmUgZGV2aWNlIGlzIGF3YWtlICov Cj4gKyDCoCDCoCDCoCByZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0Us IHRydWUsIDApOwo+ICsgwqAgwqAgwqAgaWYgKHJldCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YWtldXAgdGhlIE1BQyBDaGlwXG4i KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiByZXQ7Cj4gKyDCoCDCoCDCoCB9Cj4g Kwo+ICsgwqAgwqAgwqAgLyoKPiArIMKgIMKgIMKgIMKgKiBQdXQgY2hpcHNldCBvbiB3YXJtIHJl c2V0Li4uCj4gKyDCoCDCoCDCoCDCoCoKPiArIMKgIMKgIMKgIMKgKiBOb3RlOiBwdXRpbmcgUENJ IGNvcmUgb24gd2FybSByZXNldCBvbiBQQ0ktRSBjYXJkcwo+ICsgwqAgwqAgwqAgwqAqIHJlc3Vs dHMgY2FyZCB0byBoYW5nIGFuZCBhbHdheXMgcmV0dXJuIDB4ZmZmZi4uLiBzbwo+ICsgwqAgwqAg wqAgwqAqIHdlIGluZ29yZSB0aGF0IGZsYWcgZm9yIFBDSS1FIGNhcmRzLiBPbiBQQ0kgY2FyZHMK PiArIMKgIMKgIMKgIMKgKiB0aGlzIGZsYWcgZ2V0cyBjbGVhcmVkIGFmdGVyIDY0IFBDSSBjbG9j a3MuCj4gKyDCoCDCoCDCoCDCoCovCj4gKyDCoCDCoCDCoCBidXNfZmxhZ3MgPSAocGRldi0+aXNf cGNpZSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOwo+ICsKPiArIMKgIMKgIMKgIGlmIChhaC0+ YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0 ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQVI1S19SRVNFVF9DVExfTUFDIHwgQVI1S19SRVNF VF9DVExfRE1BIHwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFSNUtfUkVT RVRfQ1RMX1BIWSB8IEFSNUtfUkVTRVRfQ1RMX1BDSSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBtZGVsYXkoMik7Cj4gKyDCoCDCoCDCoCB9IGVsc2Ugewo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NU TF9QQ1UgfAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQVI1S19SRVNFVF9D VExfQkFTRUJBTkQgfCBidXNfZmxhZ3MpOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKg IGlmIChyZXQpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFUSDVLX0VSUihhaC0+YWhfc2Ms ICJmYWlsZWQgdG8gcHV0IGRldmljZSBvbiB3YXJtIHJlc2V0XG4iKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHJldHVybiAtRUlPOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIC8q IC4uLndha2V1cCBhZ2FpbiEqLwo+ICsgwqAgwqAgwqAgcmV0ID0gYXRoNWtfaHdfc2V0X3Bvd2Vy KGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKPiArIMKgIMKgIMKgIGlmIChyZXQpIHsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gcHV0 IGRldmljZSBvbiBob2xkXG4iKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiByZXQ7 Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr LyoKPiDCoCogQnJpbmcgdXAgTUFDICsgUEhZIENoaXBzIGFuZCBwcm9ncmFtIFBMTAo+IMKgKiBU T0RPOiBIYWxmL1F1YXJ0ZXIgcmF0ZSBzdXBwb3J0Cj4gwqAqLwo+IEBAIC0zMTgsNiArMzgyLDUw IEBAIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFn cywgYm9vbCBpbml0aWFsKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIHJldDsKPiDC oCDCoCDCoCDCoH0KPgo+ICsgwqAgwqAgwqAgLyoKPiArIMKgIMKgIMKgIMKgKiBQdXQgY2hpcHNl dCBvbiB3YXJtIHJlc2V0Li4uCj4gKyDCoCDCoCDCoCDCoCoKPiArIMKgIMKgIMKgIMKgKiBOb3Rl OiBwdXRpbmcgUENJIGNvcmUgb24gd2FybSByZXNldCBvbiBQQ0ktRSBjYXJkcwo+ICsgwqAgwqAg wqAgwqAqIHJlc3VsdHMgY2FyZCB0byBoYW5nIGFuZCBhbHdheXMgcmV0dXJuIDB4ZmZmZi4uLiBz bwo+ICsgwqAgwqAgwqAgwqAqIHdlIGluZ29yZSB0aGF0IGZsYWcgZm9yIFBDSS1FIGNhcmRzLiBP biBQQ0kgY2FyZHMKPiArIMKgIMKgIMKgIMKgKiB0aGlzIGZsYWcgZ2V0cyBjbGVhcmVkIGFmdGVy IDY0IFBDSSBjbG9ja3MuCj4gKyDCoCDCoCDCoCDCoCovCj4gKyDCoCDCoCDCoCBidXNfZmxhZ3Mg PSAocGRldi0+aXNfcGNpZSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOwo+ICsKPiArIMKgIMKg IMKgIGlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1Ug fAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQVI1S19SRVNFVF9DVExfTUFD IHwgQVI1S19SRVNFVF9DVExfRE1BIHwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIEFSNUtfUkVTRVRfQ1RMX1BIWSB8IEFSNUtfUkVTRVRfQ1RMX1BDSSk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtZGVsYXkoMik7Cj4gKyDCoCDCoCDCoCB9IGVsc2Ug ewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBB UjVLX1JFU0VUX0NUTF9QQ1UgfAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg QVI1S19SRVNFVF9DVExfQkFTRUJBTkQgfCBidXNfZmxhZ3MpOwo+ICsgwqAgwqAgwqAgfQo+ICsK PiArIMKgIMKgIMKgIGlmIChyZXQpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFUSDVLX0VS UihhaC0+YWhfc2MsICJmYWlsZWQgdG8gcmVzZXQgdGhlIE1BQyBDaGlwXG4iKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlPOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKg IMKgIC8qIC4uLndha2V1cCBhZ2FpbiEuLi4qLwo+ICsgwqAgwqAgwqAgcmV0ID0gYXRoNWtfaHdf c2V0X3Bvd2VyKGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKPiArIMKgIMKgIMKgIGlmIChy ZXQpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWls ZWQgdG8gcmVzdW1lIHRoZSBNQUMgQ2hpcFxuIik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy ZXR1cm4gcmV0Owo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIC8qIC4uLmNsZWFyIHJl c2V0IGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHB1bGwgZGV2aWNlIG91dCBvZgo+ICsgwqAgwqAgwqAg wqAqIHdhcm0gcmVzZXQgKi8KPiArIMKgIMKgIMKgIGlmIChhdGg1a19od19uaWNfcmVzZXQoYWgs IDApKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBBVEg1S19FUlIoYWgtPmFoX3NjLCAiZmFp bGVkIHRvIHdhcm0gcmVzZXQgdGhlIE1BQyBDaGlwXG4iKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJldHVybiAtRUlPOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIC8qIE9uIGlu aXRpYWxpemF0aW9uIHNraXAgUExMIHByb2dyYW1taW5nIHNpbmNlIHdlIGRvbid0IGhhdmUKPiAr IMKgIMKgIMKgIMKgKiBhIGNoYW5uZWwgLyBtb2RlIHNldCB5ZXQgKi8KPiArIMKgIMKgIMKgIGlm IChpbml0aWFsKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gKwo+IMKgIMKg IMKgIMKgaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Cj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAvKgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICogR2V0IGNoYW5uZWwgbW9k ZSBmbGFncwo+IEBAIC0zODMsMzkgKzQ5MSw2IEBAIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0 cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKQo+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQVI1S19QSFlf VFVSQk8pOwo+IMKgIMKgIMKgIMKgfQo+Cj4gLSDCoCDCoCDCoCAvKiByZXNldGluZyBQQ0kgb24g UENJLUUgY2FyZHMgcmVzdWx0cyBjYXJkIHRvIGhhbmcKPiAtIMKgIMKgIMKgIMKgKiBhbmQgYWx3 YXlzIHJldHVybiAweGZmZmYuLi4gc28gd2UgaW5nb3JlIHRoYXQgZmxhZwo+IC0gwqAgwqAgwqAg wqAqIGZvciBQQ0ktRSBjYXJkcyAqLwo+IC0gwqAgwqAgwqAgYnVzX2ZsYWdzID0gKHBkZXYtPmlz X3BjaWUpID8gMCA6IEFSNUtfUkVTRVRfQ1RMX1BDSTsKPiAtCj4gLSDCoCDCoCDCoCAvKiBSZXNl dCBjaGlwc2V0ICovCj4gLSDCoCDCoCDCoCBpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUy MTApIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldCA9IGF0aDVrX2h3X25pY19yZXNldChh aCwgQVI1S19SRVNFVF9DVExfUENVIHwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIEFSNUtfUkVTRVRfQ1RMX01BQyB8IEFSNUtfUkVTRVRfQ1RMX0RNQSB8Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBBUjVLX1JFU0VUX0NUTF9QSFkgfCBBUjVLX1JFU0VU X0NUTF9QQ0kpOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWRlbGF5KDIp Owo+IC0gwqAgwqAgwqAgfSBlbHNlIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldCA9IGF0 aDVrX2h3X25pY19yZXNldChhaCwgQVI1S19SRVNFVF9DVExfUENVIHwKPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFSNUtfUkVTRVRfQ1RMX0JBU0VCQU5EIHwgYnVzX2ZsYWdz KTsKPiAtIMKgIMKgIMKgIH0KPiAtIMKgIMKgIMKgIGlmIChyZXQpIHsKPiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIEFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gcmVzZXQgdGhlIE1BQyBD aGlwXG4iKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlPOwo+IC0gwqAgwqAg wqAgfQo+IC0KPiAtIMKgIMKgIMKgIC8qIC4uLndha2V1cCBhZ2FpbiEqLwo+IC0gwqAgwqAgwqAg cmV0ID0gYXRoNWtfaHdfc2V0X3Bvd2VyKGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKPiAt IMKgIMKgIMKgIGlmIChyZXQpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEFUSDVLX0VSUihh aC0+YWhfc2MsICJmYWlsZWQgdG8gcmVzdW1lIHRoZSBNQUMgQ2hpcFxuIik7Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gcmV0Owo+IC0gwqAgwqAgwqAgfQo+IC0KPiAtIMKgIMKgIMKg IC8qIC4uLmZpbmFsIHdhcm0gcmVzZXQgKi8KPiAtIMKgIMKgIMKgIGlmIChhdGg1a19od19uaWNf cmVzZXQoYWgsIDApKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBBVEg1S19FUlIoYWgtPmFo X3NjLCAiZmFpbGVkIHRvIHdhcm0gcmVzZXQgdGhlIE1BQyBDaGlwXG4iKTsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHJldHVybiAtRUlPOwo+IC0gwqAgwqAgwqAgfQo+IC0KPiDCoCDCoCDCoCDC oGlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewo+Cj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAvKiAuLi51cGRhdGUgUExMIGlmIG5lZWRlZCAqLwo+Cg==