From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Tue, 7 May 2019 13:20:38 +0300 Message-ID: <20190507102038.GF24299@intel.com> References: <20190503190831.1759-1-ville.syrjala@linux.intel.com> <20190503190831.1759-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 16E4589E7B for ; Tue, 7 May 2019 10:20:42 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Clinton Taylor Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMDYsIDIwMTkgYXQgMDM6Mzg6NDNQTSAtMDcwMCwgQ2xpbnRvbiBUYXlsb3Ig d3JvdGU6Cj4gCj4gT24gNS8zLzE5IDEyOjA4IFBNLCBWaWxsZSBTeXJqYWxhIHdyb3RlOgo+ID4g RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ Cj4gPiBJQ0wgaGFzIHNvIG1hbnkgcGxhbmVzIHRoYXQgaXQgY2FuIGVhc2lseSBleGNlZWQgdGhl IG1heGltdW0KPiA+IGVmZmVjdGl2ZSBtZW1vcnkgYmFuZHdpZHRoIG9mIHRoZSBzeXN0ZW0uIFdl IG11c3QgdGhlcmVmb3JlIGNoZWNrCj4gPiB0aGF0IHdlIGRvbid0IGV4Y2VlZCB0aGF0IGxpbWl0 Lgo+ID4KPiA+IFRoZSBhbGdvcml0aG0gaXMgdmVyeSBtYWdpYyBudW1iZXIgaGVhdnkgYW5kIGxh Y2tzIHN1ZmZpY2llbnQKPiA+IGV4cGxhbmF0aW9uIGZvciBub3cuIFdlIGFsc28gaGF2ZSBubyBz YW5lIHdheSB0byBxdWVyeSB0aGUKPiA+IG1lbW9yeSBjbG9jayBhbmQgdGltaW5ncywgc28gd2Ug bXVzdCByZWx5IG9uIGEgY29tYmluYXRpb24gb2YKPiA+IHJhdyByZWFkb3V0IGZyb20gdGhlIG1l bW9yeSBjb250cm9sbGVyIGFuZCBoYXJkY29kZWQgYXNzdW1wdGlvbnMuCj4gPiBUaGUgbWVtb3J5 IGNvbnRyb2xsZXIgdmFsdWVzIG9idmlvdXNseSBjaGFuZ2UgYXMgdGhlIHN5c3RlbQo+ID4ganVt cHMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IFNBR1YgcG9pbnRzLCBzbyB3ZSB0cnkgdG8gc3RhYmls aXplCj4gPiBpdCBmaXJzdCBieSBkaXNhYmxpbmcgU0FHViBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo ZSByZWFkb3V0Lgo+ID4KPiA+IFRoZSB1dGlsaXplZCBiYW5kd2lkdGggaXMgdHJhY2tlZCB2aWEg YSBkZXZpY2Ugd2lkZSBhdG9taWMKPiA+IHByaXZhdGUgb2JqZWN0LiBUaGF0IGlzIGFjdHVhbGx5 IG5vdCByb2J1c3QgYmVjYXVzZSB3ZSBjYW4ndAo+ID4gYWZmb3JkIHRvIGVuZm9yY2Ugc3RyaWN0 IGdsb2JhbCBvcmRlcmluZyBiZXR3ZWVuIHRoZSBwaXBlcy4KPiA+IFRodXMgSSB0aGluayBJJ2xs IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gc2ltcGx5IGNob3AgdXAgdGhlCj4gPiBhdmFpbGFibGUg YmFuZHdpZHRoIGJldHdlZW4gYWxsIHRoZSBhY3RpdmUgcGlwZXMuIEVhY2ggcGlwZQo+ID4gY2Fu IHRoZW4gZG8gd2hhdGV2ZXIgaXQgd2FudHMgYXMgbG9uZyBhcyBpdCBkb2Vzbid0IGV4Y2VlZAo+ ID4gaXRzIGJ1ZGdldC4gVGhhdCBzY2hlbWUgd2lsbCBhbHNvIHJlcXVpcmUgdGhhdCB3ZSBhc3N1 bWUgdGhhdAo+ID4gYW55IG51bWJlciBvZiBwbGFuZXMgY291bGQgYmUgYWN0aXZlIGF0IGFueSB0 aW1lLgo+ID4KPiA+IFRPRE86IG1ha2UgaXQgcm9idXN0IGFuZCBkZWFsIHdpdGggYWxsIHRoZSBv cGVuIHF1ZXN0aW9ucwo+IAo+IFRPRE86IEFkZCBjb21tZW50cyBkZXRhaWxpbmcgc3RydWN0dXJl cwo+IAo+ID4KPiA+IHYyOiBTbGVlcCBsb25nZXIgYWZ0ZXIgZGlzYWJsaW5nIFNBR1YKPiA+IHYz OiBQb2xsIGZvciB0aGUgZGNsayB0byBnZXQgcmFpc2VkIChzZWVuIGl0IHRha2UgMjUwbXMhKQo+ ID4gICAgICBJZiB0aGUgc3lzdGVtIGhhcyAyMTMzTVQvcyBtZW1vcnkgdGhlbiB3ZSBwb2ludGxl c3NseQo+ID4gICAgICB3YWl0IG9uZSBmdWxsIHNlY29uZCA6KAo+ID4gdjQ6IFVzZSB0aGUgbmV3 IHBjb2RlIGludGVyZmFjZSB0byBnZXQgdGhlIHFndiBwb2ludHMgcmF0aGVyCj4gPiAgICAgIHRo YXQgdXNpbmcgaGFyZGNvZGVkIG51bWJlcnMKPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiA+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgfCAyMjkgKysrKysrKysrKysr KysrKysrKysrKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg ICB8ICAxMCArCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICAg IHwgICAzICsKPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMg fCAgMjAgKysKPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmgg fCAgIDIgKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jICAgICAgICAgICB8 IDE4MSArKysrKysrKysrKysrKysrKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9i dy5oICAgICAgICAgICB8ICA0NiArKysrKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgICAgICB8ICA0MCArKystCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oICAgICAgICAgIHwgICAyICsKPiA+ICAgMTAgZmlsZXMgY2hhbmdlZCwgNTMzIGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmMKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmgKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4g aW5kZXggNjgxMDZmZTM1YTA0Li4xMzlhMGZjMTkzOTAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiA+IEBAIC0xMzgsNiArMTM4LDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ ID4gICAJICBpbnRlbF9hdG9taWMubyBcCj4gPiAgIAkgIGludGVsX2F0b21pY19wbGFuZS5vIFwK PiA+ICAgCSAgaW50ZWxfYmlvcy5vIFwKPiA+ICsJICBpbnRlbF9idy5vIFwKPiA+ICAgCSAgaW50 ZWxfY2RjbGsubyBcCj4gPiAgIAkgIGludGVsX2NvbG9yLm8gXAo+ID4gICAJICBpbnRlbF9jb21i b19waHkubyBcCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+IGluZGV4IDVlZDg2NDc1MmM3 Yi4uYjdmYTdiNTFjMmUyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ID4gQEAg LTcwLDYgKzcwLDcgQEAKPiA+ICAgI2luY2x1ZGUgImludGVsX292ZXJsYXkuaCIKPiA+ICAgI2lu Y2x1ZGUgImludGVsX3BpcGVfY3JjLmgiCj4gPiAgICNpbmNsdWRlICJpbnRlbF9wbS5oIgo+ID4g KyNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ID4gICAjaW5jbHVkZSAiaW50ZWxfc3ByaXRl LmgiCj4gPiAgICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+ID4gICAKPiA+IEBAIC0xNDM1LDYgKzE0 MzYsMjMyIEBAIGJ4dF9nZXRfZHJhbV9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiA+ICAgCXJldHVybiAwOwo+ID4gICB9Cj4gPiAgIAo+ID4gK3N0cnVjdCBpbnRlbF9x Z3ZfcG9pbnQgewo+ID4gKwl1MTYgZGNsaywgdF9ycCwgdF9yZHByZSwgdF9yYywgdF9yYXMsIHRf cmNkOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGludGVsX3NhZ3ZfaW5mbyB7Cj4gPiArCXN0 cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgcG9pbnRzWzNdOwo+ID4gKwl1OCBudW1fcG9pbnRzOwo+ID4g Kwl1OCBudW1fY2hhbm5lbHM7Cj4gPiArCXU4IHRfYmw7Cj4gPiArCWVudW0gaW50ZWxfZHJhbV90 eXBlIGRyYW1fdHlwZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3Jl YWRfbWVtX2dsb2JhbF9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ ICsJCQkJCSAgc3RydWN0IGludGVsX3NhZ3ZfaW5mbyAqc2kpCj4gPiArewo+ID4gKwl1MzIgdmFs ID0gMDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVf cmVhZChkZXZfcHJpdiwKPiA+ICsJCQkJICAgICBJQ0xfUENPREVfTUVNX1NVQlNZU1lTVEVNX0lO Rk8gfAo+ID4gKwkJCQkgICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxfSU5GTywKPiA+ ICsJCQkJICAgICAmdmFsLCBOVUxMKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCj4gPiArCXN3aXRjaCAodmFsICYgMHhmKSB7Cj4gPiArCWNhc2UgMDoKPiA+ICsJCXNp LT5kcmFtX3R5cGUgPSBJTlRFTF9EUkFNX0REUjQ7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAx Ogo+ID4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1fRERSMzsKPiA+ICsJCWJyZWFrOwo+ ID4gKwljYXNlIDI6Cj4gPiArCQlzaS0+ZHJhbV90eXBlID0gSU5URUxfRFJBTV9MUEREUjM7Cj4g PiArCQlicmVhazsKPiA+ICsJY2FzZSAzOgo+ID4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RS QU1fTFBERFIzOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5HX0NB U0UodmFsICYgMHhmKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCXNpLT5udW1f Y2hhbm5lbHMgPSAodmFsICYgMHhmMCkgPj4gNDsKPiA+ICsJc2ktPm51bV9wb2ludHMgPSAodmFs ICYgMHhmMDApID4+IDg7Cj4gPiArCj4gPiArCXNpLT50X2JsID0gc2ktPmRyYW1fdHlwZSA9PSBJ TlRFTF9EUkFNX0REUjQgPyA0IDogODsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRfcWd2X3BvaW50X2luZm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkJIHN0cnVjdCBpbnRlbF9xZ3ZfcG9p bnQgKnNwLAo+ID4gKwkJCQkJIGludCBwb2ludCkKPiA+ICt7Cj4gPiArCXUzMiB2YWwgPSAwLCB2 YWwyOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV9y ZWFkKGRldl9wcml2LAo+ID4gKwkJCQkgICAgIElDTF9QQ09ERV9NRU1fU1VCU1lTWVNURU1fSU5G TyB8Cj4gPiArCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9QT0lOVF9JTkZPKHBv aW50KSwKPiA+ICsJCQkJICAgICAmdmFsLCAmdmFsMik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQly ZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlzcC0+ZGNsayA9IHZhbCAmIDB4ZmZmZjsKPiA+ICsJc3At PnRfcnAgPSAodmFsICYgMHhmZjAwMDApID4+IDE2Owo+ID4gKwlzcC0+dF9yY2QgPSAodmFsICYg MHhmZjAwMDAwMCkgPj4gMjQ7Cj4gPiArCj4gPiArCXNwLT50X3JkcHJlID0gdmFsMiAmIDB4ZmY7 Cj4gPiArCXNwLT50X3JhcyA9ICh2YWwyICYgMHhmZjAwKSA+PiA4Owo+ID4gKwo+ID4gKwlzcC0+ dF9yYyA9IHNwLT50X3JwICsgc3AtPnRfcmFzOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBpY2xfZ2V0X3Fndl9wb2ludHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9zYWd2X2luZm8g KnNpKQo+ID4gK3sKPiA+ICsJaW50IGksIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaWNsX3Bjb2Rl X3JlYWRfbWVtX2dsb2JhbF9pbmZvKGRldl9wcml2LCBzaSk7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlpZiAoV0FSTl9PTihzaS0+bnVtX3BvaW50cyA+IEFS UkFZX1NJWkUoc2ktPnBvaW50cykpKQo+ID4gKwkJc2ktPm51bV9wb2ludHMgPSBBUlJBWV9TSVpF KHNpLT5wb2ludHMpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7 IGkrKykgewo+ID4gKwkJc3RydWN0IGludGVsX3Fndl9wb2ludCAqc3AgPSAmc2ktPnBvaW50c1tp XTsKPiA+ICsKPiA+ICsJCXJldCA9IGljbF9wY29kZV9yZWFkX3Fndl9wb2ludF9pbmZvKGRldl9w cml2LCBzcCwgaSk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4g PiArCQlEUk1fREVCVUdfS01TKCJRR1YgJWQ6IERDTEs9JWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFT PSVkIHRSQ0Q9JWQgdFJDPSVkXG4iLAo+ID4gKwkJCSAgICAgIGksIHNwLT5kY2xrLCBzcC0+dF9y cCwgc3AtPnRfcmRwcmUsIHNwLT50X3JhcywKPiA+ICsJCQkgICAgICBzcC0+dF9yY2QsIHNwLT50 X3JjKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBpY2xfY2FsY19idyhpbnQgZGNsaywgaW50IG51bSwgaW50IGRlbikKPiA+ICt7Cj4g PiArCS8qIG11bHRpcGxlcyBvZiAxNi42NjZNSHogKDEwMC82KSAqLwo+ID4gKwlyZXR1cm4gRElW X1JPVU5EX0NMT1NFU1QobnVtICogZGNsayAqIDEwMCwgZGVuICogNik7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgaWNsX3NhZ3ZfbWF4X2RjbGsoY29uc3Qgc3RydWN0IGludGVsX3NhZ3Zf aW5mbyAqc2kpCj4gPiArewo+ID4gKwl1MTYgZGNsayA9IDA7Cj4gPiArCWludCBpOwo+ID4gKwo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7IGkrKykKPiA+ICsJCWRjbGsgPSBt YXgoZGNsaywgc2ktPnBvaW50c1tpXS5kY2xrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRjbGs7Cj4g PiArfQo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9zYV9pbmZvIHsKPiA+ICsJdTggZGVidXJzdCwg bXBhZ2VzaXplLCBkZXByb2did2xpbWl0LCBkaXNwbGF5cnRpZHM7Cj4gPiArfTsKPiAKPiBpbnRl bF9zYV9pbmZvPwoKc2EgPT0gc3lzdGVtIGFnZW50LgoKPiBEb2Vzbid0IHNlZW0gdmVyeSBkZXNj cmlwdGl2ZS4gYWxzbyB2ZXJ5IGNsb3NlIHRvIAo+IGludGVsX3NhZ3ZfaW5mbwoKSSB3YXMgbWVh bmluZyB0byByZW5hbWUgaW50ZWxfc2Fndl9pbmZvIHRvIGludGVsX3Fndl9pbmZvIGJ1dAphcHBh cmVudGx5IGZvcmdvdC4gT2gsIEkgc2hvdWxkIHJlYWxseSBhZGQgYSBjb21tZW50IGV4cGxhaW5p bmcKd2hhdCBxZ3Ygc3RhbmRzIGZvci4KCj4gCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9zYV9pbmZvIGljbF9zYV9pbmZvID0gewo+ID4gKwkuZGVidXJzdCA9IDgsCj4gPiAr CS5tcGFnZXNpemUgPSAxNiwKPiA+ICsJLmRlcHJvZ2J3bGltaXQgPSAyNSwgLyogR0IvcyAqLwo+ ID4gKwkuZGlzcGxheXJ0aWRzID0gMTI4LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBp Y2xfZ2V0X2J3X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gK3sK PiA+ICsJc3RydWN0IGludGVsX3NhZ3ZfaW5mbyBzaSA9IHt9Owo+ID4gKwljb25zdCBzdHJ1Y3Qg aW50ZWxfc2FfaW5mbyAqc2EgPSAmaWNsX3NhX2luZm87Cj4gPiArCWJvb2wgaXNfeV90aWxlID0g dHJ1ZTsgLyogYXNzdW1lIHkgdGlsZSBtYXkgYmUgdXNlZCAqLwo+ID4gKwlpbnQgbnVtX2NoYW5u ZWxzOwo+ID4gKwlpbnQgZGVpbnRlcmxlYXZlOwo+ID4gKwlpbnQgaXBxZGVwdGgsIGlwcWRlcHRo cGNoOwo+ID4gKwlpbnQgZGNsa19tYXg7Cj4gPiArCWludCBtYXhkZWJ3Owo+ID4gKwlpbnQgaSwg cmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBpY2xfZ2V0X3Fndl9wb2ludHMoZGV2X3ByaXYsICZzaSk7 Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwludW1fY2hhbm5lbHMgPSBz aS5udW1fY2hhbm5lbHM7Cj4gPiArCj4gPiArCWRlaW50ZXJsZWF2ZSA9IERJVl9ST1VORF9VUChu dW1fY2hhbm5lbHMsIGlzX3lfdGlsZSA/IDQgOiAyKTsKPiA+ICsJZGNsa19tYXggPSBpY2xfc2Fn dl9tYXhfZGNsaygmc2kpOwo+ID4gKwo+ID4gKwlpcHFkZXB0aHBjaCA9IDE2Owo+ID4gKwo+ID4g KwltYXhkZWJ3ID0gbWluKHNhLT5kZXByb2did2xpbWl0ICogMTAwMCwKPiA+ICsJCSAgICAgIGlj bF9jYWxjX2J3KGRjbGtfbWF4LCAxNiwgMSkgKiA2IC8gMTApOyAvKiA2MCUgKi8KPiA+ICsJaXBx ZGVwdGggPSBtaW4oaXBxZGVwdGhwY2gsIHNhLT5kaXNwbGF5cnRpZHMgLyBudW1fY2hhbm5lbHMp Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZfcHJpdi0+bWF4X2J3 KTsgaSsrKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfYndfaW5mbyAqYmkgPSAmZGV2X3ByaXYtPm1h eF9id1tpXTsKPiA+ICsJCWludCBjbHBjaGdyb3VwOwo+ID4gKwkJaW50IGo7Cj4gPiArCj4gPiAr CQljbHBjaGdyb3VwID0gKHNhLT5kZWJ1cnN0ICogZGVpbnRlcmxlYXZlIC8gbnVtX2NoYW5uZWxz KSA8PCBpOwo+ID4gKwkJYmktPm51bV9wbGFuZXMgPSAoaXBxZGVwdGggLSBjbHBjaGdyb3VwKSAv IGNscGNoZ3JvdXAgKyAxOwo+ID4gKwo+ID4gKwkJZm9yIChqID0gMDsgaiA8IHNpLm51bV9wb2lu dHM7IGorKykgewo+ID4gKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgKnNwID0gJnNp LnBvaW50c1tqXTsKPiA+ICsJCQlpbnQgY3QsIGJ3Owo+ID4gKwo+ID4gKwkJCS8qCj4gPiArCQkJ ICogTWF4IHJvdyBjeWNsZSB0aW1lCj4gPiArCQkJICoKPiA+ICsJCQkgKiBGSVhNRSB3aGF0IGlz IHRoZSBsb2dpYyBiZWhpbmQgdGhlCj4gPiArCQkJICogYXNzdW1lZCBidXJzdCBsZW5ndGg/Cj4g PiArCQkJICovCj4gPiArCQkJY3QgPSBtYXhfdChpbnQsIHNwLT50X3JjLCBzcC0+dF9ycCArIHNw LT50X3JjZCArCj4gPiArCQkJCSAgIChjbHBjaGdyb3VwIC0gMSkgKiBzaS50X2JsICsgc3AtPnRf cmRwcmUpOwo+ID4gKwkJCWJ3ID0gaWNsX2NhbGNfYncoc3AtPmRjbGssIGNscGNoZ3JvdXAgKiAz MiAqIG51bV9jaGFubmVscywgY3QpOwo+ID4gKwo+ID4gKwkJCWJpLT5kZXJhdGVkYndbal0gPSBt aW4obWF4ZGVidywKPiA+ICsJCQkJCSAgICAgICBidyAqIDkgLyAxMCk7IC8qIDkwJSAqLwo+ID4g Kwo+ID4gKwkJCURSTV9ERUJVR19LTVMoIkJXJWQgLyBRR1YgJWQ6IG51bV9wbGFuZXM9JWQgZGVy YXRlZGJ3PSVkXG4iLAo+ID4gKwkJCQkgICAgICBpLCBqLCBiaS0+bnVtX3BsYW5lcywgYmktPmRl cmF0ZWRid1tqXSk7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoYmktPm51bV9wbGFuZXMgPT0g MSkKPiA+ICsJCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBpY2xfbWF4X2J3KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkgICAgICAgaW50IG51bV9wbGFuZXMsIGludCBxZ3Zf cG9pbnQpCj4gPiArewo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ID4gKwkJY29uc3Qgc3RydWN0IGlu dGVsX2J3X2luZm8gKmJpID0KPiA+ICsJCQkmZGV2X3ByaXYtPm1heF9id1tpXTsKPiA+ICsKPiA+ ICsJCWlmIChudW1fcGxhbmVzID49IGJpLT5udW1fcGxhbmVzKQo+ID4gKwkJCXJldHVybiBiaS0+ ZGVyYXRlZGJ3W3Fndl9wb2ludF07Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr fQo+ID4gKwo+ID4gK3Vuc2lnbmVkIGludCBpbnRlbF9tYXhfZGF0YV9yYXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkJIGludCBudW1fcGxhbmVzKQo+ID4gK3sK PiA+ICsJaWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQo+ID4gKwkJLyoKPiA+ICsJCSAqIEZJWE1F IHdpdGggU0FHViBkaXNhYmxlZCBtYXliZSB3ZSBjYW4gYXNzdW1lCj4gPiArCQkgKiBwb2ludCAx IHdpbGwgYWx3YXlzIGJlIHVzZWQ/IFNlZW1zIHRvIG1hdGNoCj4gPiArCQkgKiB0aGUgYmVoYXZp b3VyIG9ic2VydmVkIGluIHRoZSB3aWxkLgo+ID4gKwkJICovCj4gPiArCQlyZXR1cm4gbWluMyhp Y2xfbWF4X2J3KGRldl9wcml2LCBudW1fcGxhbmVzLCAwKSwKPiA+ICsJCQkgICAgaWNsX21heF9i dyhkZXZfcHJpdiwgbnVtX3BsYW5lcywgMSksCj4gPiArCQkJICAgIGljbF9tYXhfYncoZGV2X3By aXYsIG51bV9wbGFuZXMsIDIpKTsKPiA+ICsJZWxzZQo+ID4gKwkJcmV0dXJuIFVJTlRfTUFYOwo+ ID4gK30KPiA+ICsKPiA+ICAgc3RhdGljIHZvaWQKPiA+ICAgaW50ZWxfZ2V0X2RyYW1faW5mbyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAgIHsKPiA+IEBAIC0xNjU1LDYg KzE4ODIsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gICAJICovCj4gPiAgIAlpbnRlbF9nZXRfZHJhbV9pbmZv KGRldl9wcml2KTsKPiA+ICAgCj4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+ ID4gKwkJaWNsX2dldF9id19pbmZvKGRldl9wcml2KTsKPiA+ICAgCj4gPiAgIAlyZXR1cm4gMDsK PiA+ICAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+IGluZGV4IDY0ZmEzNTNhNjJiYi4u ZDFiOWMzZmU1ODAyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gQEAgLTU0 LDYgKzU0LDcgQEAKPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1fY2FjaGUuaD4KPiA+ICAgI2luY2x1 ZGUgPGRybS9kcm1fdXRpbC5oPgo+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV9kc2MuaD4KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1fY29ubmVj dG9yLmg+Cj4gPiAgICNpbmNsdWRlIDxkcm0vaTkxNV9tZWlfaGRjcF9pbnRlcmZhY2UuaD4KPiA+ ICAgCj4gPiBAQCAtMTgzNyw2ICsxODM4LDEzIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK PiA+ICAgCQl9IHR5cGU7Cj4gPiAgIAl9IGRyYW1faW5mbzsKPiA+ICAgCj4gPiArCXN0cnVjdCBp bnRlbF9id19pbmZvIHsKPiA+ICsJCWludCBudW1fcGxhbmVzOwo+ID4gKwkJaW50IGRlcmF0ZWRi d1szXTsKPiA+ICsJfSBtYXhfYndbNl07Cj4gPiArCj4gPiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9v YmogYndfb2JqOwo+ID4gKwo+ID4gICAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBydW50aW1lX3Bt Owo+ID4gICAKPiA+ICAgCXN0cnVjdCB7Cj4gPiBAQCAtMjcwNiw2ICsyNzE0LDggQEAgZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaTkxNV9tY2hfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cj4gPiAgIGV4dGVybiB1bnNpZ25lZCBsb25nIGk5MTVfZ2Z4X3ZhbChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gICBleHRlcm4gdm9pZCBpOTE1X3VwZGF0ZV9n ZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gPiAgIGludCB2bHZf Zm9yY2VfZ2Z4X2Nsb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBv bik7Cj4gPiArdW5zaWduZWQgaW50IGludGVsX21heF9kYXRhX3JhdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkgaW50IG51bV9wbGFuZXMpOwo+ID4gICAKPiA+ ICAgdTMyIGludGVsX2NhbGN1bGF0ZV9tY3Jfc19zc19zZWxlY3Qoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKPiA+ICAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+IGlu ZGV4IGU5N2M0N2ZjYTY0NS4uMzk5MzY2YTQxNTI0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+ID4gQEAgLTg3NzQsNiArODc3NCw5IEBAIGVudW0gewo+ID4gICAjZGVmaW5lICAg R0VONl9QQ09ERV9XUklURV9NSU5fRlJFUV9UQUJMRQkweDgKPiA+ICAgI2RlZmluZSAgIEdFTjZf UENPREVfUkVBRF9NSU5fRlJFUV9UQUJMRQkweDkKPiA+ICAgI2RlZmluZSAgIEdFTjZfUkVBRF9P Q19QQVJBTVMJCQkweGMKPiA+ICsjZGVmaW5lICAgSUNMX1BDT0RFX01FTV9TVUJTWVNZU1RFTV9J TkZPCTB4ZAo+ID4gKyNkZWZpbmUgICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxfSU5G TwkoMHgwIDw8IDgpCj4gPiArI2RlZmluZSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9Q T0lOVF9JTkZPKHBvaW50KQkoKChwb2ludCkgPDwgMTYpIHwgKDB4MSA8PCA4KSkKPiA+ICAgI2Rl ZmluZSAgIEdFTjZfUENPREVfUkVBRF9EX0NPTVAJCTB4MTAKPiA+ICAgI2RlZmluZSAgIEdFTjZf UENPREVfV1JJVEVfRF9DT01QCQkweDExCj4gPiAgICNkZWZpbmUgICBIU1dfUENPREVfREVfV1JJ VEVfRlJFUV9SRVEJCTB4MTcKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9hdG9taWNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19w bGFuZS5jCj4gPiBpbmRleCBkMTE2ODFkNzFhZGQuLmYxNDJjNWMyMmQ3ZSAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+ID4gQEAgLTExNCw2ICsx MTQsMjIgQEAgaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiA+ICAgCWRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0 YXRlKTsKPiA+ICAgfQo+ID4gICAKPiA+ICt1bnNpZ25lZCBpbnQgaW50ZWxfcGxhbmVfZGF0YV9y YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gK3sKPiA+ ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5m YjsKPiA+ICsJdW5zaWduZWQgaW50IGNwcCA9IDA7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKwlp ZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ ICsJZm9yIChpID0gMDsgaSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkrKykKPiA+ICsJCWNw cCArPSBmYi0+Zm9ybWF0LT5jcHBbaV07Cj4gPiArCj4gPiArCXJldHVybiBjcHAgKiBjcnRjX3N0 YXRlLT5waXhlbF9yYXRlOwo+ID4gK30KPiA+ICsKPiA+ICAgaW50IGludGVsX3BsYW5lX2F0b21p Y19jaGVja193aXRoX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZSwKPiA+ICAgCQkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3Rh dGUsCj4gPiAgIAkJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVf c3RhdGUsCj4gPiBAQCAtMTI1LDYgKzE0MSw3IEBAIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hl Y2tfd2l0aF9zdGF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfCj4g PiAgIAluZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7Cj4g PiAgIAluZXdfY3J0Y19zdGF0ZS0+bnYxMl9wbGFuZXMgJj0gfkJJVChwbGFuZS0+aWQpOwo+ID4g ICAJbmV3X2NydGNfc3RhdGUtPmM4X3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7Cj4gPiArCW5l d19jcnRjX3N0YXRlLT5kYXRhX3JhdGVbcGxhbmUtPmlkXSA9IDA7Cj4gPiAgIAluZXdfcGxhbmVf c3RhdGUtPmJhc2UudmlzaWJsZSA9IGZhbHNlOwo+ID4gICAKPiA+ICAgCWlmICghbmV3X3BsYW5l X3N0YXRlLT5iYXNlLmNydGMgJiYgIW9sZF9wbGFuZV9zdGF0ZS0+YmFzZS5jcnRjKQo+ID4gQEAg LTE0OSw2ICsxNjYsOSBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjXwo+ID4gICAJaWYgKG5ld19w bGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlIHx8IG9sZF9wbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxl KQo+ID4gICAJCW5ld19jcnRjX3N0YXRlLT51cGRhdGVfcGxhbmVzIHw9IEJJVChwbGFuZS0+aWQp Owo+ID4gICAKPiA+ICsJbmV3X2NydGNfc3RhdGUtPmRhdGFfcmF0ZVtwbGFuZS0+aWRdID0KPiA+ ICsJCWludGVsX3BsYW5lX2RhdGFfcmF0ZShuZXdfY3J0Y19zdGF0ZSwgbmV3X3BsYW5lX3N0YXRl KTsKPiA+ICsKPiA+ICAgCXJldHVybiBpbnRlbF9wbGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKG9s ZF9jcnRjX3N0YXRlLAo+ID4gICAJCQkJCSAgICAgICAmbmV3X2NydGNfc3RhdGUtPmJhc2UsCj4g PiAgIAkJCQkJICAgICAgIG9sZF9wbGFuZV9zdGF0ZSwKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5oCj4gPiBpbmRleCAxNDY3ODYyMDQ0MGYuLjBhOTY1MTM3NmQw ZSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFu ZS5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuaAo+ ID4gQEAgLTE1LDYgKzE1LDggQEAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwo+ID4gICAKPiA+ ICAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGludGVsX3BsYW5l X2hlbHBlcl9mdW5jczsKPiA+ICAgCj4gPiArdW5zaWduZWQgaW50IGludGVsX3BsYW5lX2RhdGFf cmF0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJ ICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cj4gPiAgIHZv aWQgaW50ZWxfdXBkYXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgIAkJ CWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gICAJCQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9idy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfYncuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uMzA0YmY4N2YwYTJlCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9idy5jCj4gPiBAQCAtMCwwICsxLDE4MSBAQAo+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE5IElu dGVsIENvcnBvcmF0aW9uCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJpbnRlbF9idy5oIgo+ID4g KyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiA+ICsKPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGlu dGVsX2J3X2NydGNfbnVtX2FjdGl2ZV9wbGFuZXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCj4gPiArewo+ID4gKwkvKgo+ID4gKwkgKiBXZSBhc3N1bWUgY3Vyc29y cyBhcmUgc21hbGwgZW5vdWdoCj4gPiArCSAqIHRvIG5vdCBub3QgY2F1c2UgYmFuZHdpZHRoIHBy b2JsZW1zLgo+ID4gKwkgKi8KPiA+ICsJcmV0dXJuIGh3ZWlnaHQ4KGNydGNfc3RhdGUtPmFjdGl2 ZV9wbGFuZXMgJiB+QklUKFBMQU5FX0NVUlNPUikpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dW5zaWduZWQgaW50IGludGVsX2J3X2NydGNfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX2NydGMgKmNy dGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gPiArCXVuc2lnbmVk IGludCBkYXRhX3JhdGUgPSAwOwo+ID4gKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOwo+ID4gKwo+ ID4gKwlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4gPiArCQkv Kgo+ID4gKwkJICogV2UgYXNzdW1lIGN1cnNvcnMgYXJlIHNtYWxsIGVub3VnaAo+ID4gKwkJICog dG8gbm90IG5vdCBjYXVzZSBiYW5kd2lkdGggcHJvYmxlbXMuCj4gPiArCQkgKi8KPiA+ICsJCWlm IChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiAr CQlkYXRhX3JhdGUgKz0gY3J0Y19zdGF0ZS0+ZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlyZXR1cm4gZGF0YV9yYXRlOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGludGVs X2J3X2NydGNfdXBkYXRlKHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUsCj4gPiArCQkJ ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNl LmNydGMpOwo+ID4gKwo+ID4gKwlid19zdGF0ZS0+ZGF0YV9yYXRlW2NydGMtPnBpcGVdID0KPiA+ ICsJCWludGVsX2J3X2NydGNfZGF0YV9yYXRlKGNydGNfc3RhdGUpOwo+ID4gKwlid19zdGF0ZS0+ bnVtX2FjdGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0gPQo+ID4gKwkJaW50ZWxfYndfY3J0Y19udW1f YWN0aXZlX3BsYW5lcyhjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0tNUygicGlw ZSAlYyBkYXRhIHJhdGUgJXUgbnVtIGFjdGl2ZSBwbGFuZXMgJXVcbiIsCj4gPiArCQkgICAgICBw aXBlX25hbWUoY3J0Yy0+cGlwZSksCj4gPiArCQkgICAgICBid19zdGF0ZS0+ZGF0YV9yYXRlW2Ny dGMtPnBpcGVdLAo+ID4gKwkJICAgICAgYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW2NydGMt PnBpcGVdKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9id19u dW1fYWN0aXZlX3BsYW5lcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAr CQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2J3X3N0YXRlICpid19zdGF0ZSkKPiA+ICt7 Cj4gPiArCXVuc2lnbmVkIGludCBudW1fYWN0aXZlX3BsYW5lcyA9IDA7Cj4gPiArCWVudW0gcGlw ZSBwaXBlOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ID4gKwkJ bnVtX2FjdGl2ZV9wbGFuZXMgKz0gYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW3BpcGVdOwo+ ID4gKwo+ID4gKwlyZXR1cm4gbnVtX2FjdGl2ZV9wbGFuZXM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfYndfZGF0YV9yYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9id19zdGF0 ZSAqYndfc3RhdGUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlID0gMDsKPiA+ ICsJZW51bSBwaXBlIHBpcGU7Cj4gPiArCj4gPiArCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBp cGUpCj4gPiArCQlkYXRhX3JhdGUgKz0gYndfc3RhdGUtPmRhdGFfcmF0ZVtwaXBlXTsKPiA+ICsK PiA+ICsJcmV0dXJuIGRhdGFfcmF0ZTsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGludGVsX2J3X2F0 b21pY19jaGVjayhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmJhc2Uu ZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLCAqb2xk X2NydGNfc3RhdGU7Cj4gPiArCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUgPSBOVUxM Owo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlLCBtYXhfZGF0YV9yYXRlOwo+ID4gKwl1bnNp Z25lZCBpbnQgbnVtX2FjdGl2ZV9wbGFuZXM7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRj Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJLyogRklYTUUgZWFybGllciBnZW5zIG5lZWQgc29t ZSBjaGVja3MgdG9vICovCj4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpCj4gPiAr CQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZm9yX2VhY2hfb2xkbmV3X2ludGVsX2NydGNfaW5fc3Rh dGUoc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLAo+ID4gKwkJCQkJICAgIG5ld19jcnRjX3N0 YXRlLCBpKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgb2xkX2RhdGFfcmF0ZSA9Cj4gPiArCQkJaW50 ZWxfYndfY3J0Y19kYXRhX3JhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gKwkJdW5zaWduZWQgaW50 IG5ld19kYXRhX3JhdGUgPQo+ID4gKwkJCWludGVsX2J3X2NydGNfZGF0YV9yYXRlKG5ld19jcnRj X3N0YXRlKTsKPiA+ICsJCXVuc2lnbmVkIGludCBvbGRfYWN0aXZlX3BsYW5lcyA9Cj4gPiArCQkJ aW50ZWxfYndfY3J0Y19udW1fYWN0aXZlX3BsYW5lcyhvbGRfY3J0Y19zdGF0ZSk7Cj4gPiArCQl1 bnNpZ25lZCBpbnQgbmV3X2FjdGl2ZV9wbGFuZXMgPQo+ID4gKwkJCWludGVsX2J3X2NydGNfbnVt X2FjdGl2ZV9wbGFuZXMobmV3X2NydGNfc3RhdGUpOwo+ID4gKwo+ID4gKwkJLyoKPiA+ICsJCSAq IEF2b2lkIGxvY2tpbmcgdGhlIGJ3IHN0YXRlIHdoZW4KPiA+ICsJCSAqIG5vdGhpbmcgc2lnbmlm aWNhbnQgaGFzIGNoYW5nZWQuCj4gPiArCQkgKi8KPiA+ICsJCWlmIChvbGRfZGF0YV9yYXRlID09 IG5ld19kYXRhX3JhdGUgJiYKPiA+ICsJCSAgICBvbGRfYWN0aXZlX3BsYW5lcyA9PSBuZXdfYWN0 aXZlX3BsYW5lcykKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWJ3X3N0YXRlICA9IGlu dGVsX2F0b21pY19nZXRfYndfc3RhdGUoc3RhdGUpOwo+ID4gKwkJaWYgKElTX0VSUihid19zdGF0 ZSkpCj4gPiArCQkJcmV0dXJuIFBUUl9FUlIoYndfc3RhdGUpOwo+ID4gKwo+ID4gKwkJYndfc3Rh dGUtPmRhdGFfcmF0ZVtjcnRjLT5waXBlXSA9IG5ld19kYXRhX3JhdGU7Cj4gPiArCQlid19zdGF0 ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0gPSBuZXdfYWN0aXZlX3BsYW5lczsKPiA+ ICsKPiA+ICsJCURSTV9ERUJVR19LTVMoInBpcGUgJWMgZGF0YSByYXRlICV1IG51bSBhY3RpdmUg cGxhbmVzICV1XG4iLAo+ID4gKwkJCSAgICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSwKPiA+ICsJ CQkgICAgICBid19zdGF0ZS0+ZGF0YV9yYXRlW2NydGMtPnBpcGVdLAo+ID4gKwkJCSAgICAgIGJ3 X3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSk7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJaWYgKCFid19zdGF0ZSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlkYXRhX3JhdGUg PSBpbnRlbF9id19kYXRhX3JhdGUoZGV2X3ByaXYsIGJ3X3N0YXRlKTsKPiA+ICsJbnVtX2FjdGl2 ZV9wbGFuZXMgPSBpbnRlbF9id19udW1fYWN0aXZlX3BsYW5lcyhkZXZfcHJpdiwgYndfc3RhdGUp Owo+ID4gKwo+ID4gKwltYXhfZGF0YV9yYXRlID0gaW50ZWxfbWF4X2RhdGFfcmF0ZShkZXZfcHJp diwgbnVtX2FjdGl2ZV9wbGFuZXMpOwo+ID4gKwo+ID4gKwlkYXRhX3JhdGUgPSBESVZfUk9VTkRf VVAoZGF0YV9yYXRlLCAxMDAwKTsKPiA+ICsKPiA+ICsJaWYgKGRhdGFfcmF0ZSA+IG1heF9kYXRh X3JhdGUpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkJhbmR3aWR0aCAldSBNQi9zIGV4Y2VlZHMg bWF4IGF2YWlsYWJsZSAlZCBNQi9zICglZCBhY3RpdmUgcGxhbmVzKVxuIiwKPiA+ICsJCQkgICAg ICBkYXRhX3JhdGUsIG1heF9kYXRhX3JhdGUsIG51bV9hY3RpdmVfcGxhbmVzKTsKPiA+ICsJCXJl dHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICppbnRlbF9id19kdXBsaWNhdGVf c3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqKQo+ID4gK3sKPiA+ICsJc3RydWN0IGlu dGVsX2J3X3N0YXRlICpzdGF0ZTsKPiA+ICsKPiA+ICsJc3RhdGUgPSBrbWVtZHVwKG9iai0+c3Rh dGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFzdGF0ZSkKPiA+ICsJ CXJldHVybiBOVUxMOwo+ID4gKwo+ID4gKwlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2Jq X2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7Cj4gPiArCj4gPiArCXJldHVybiAm c3RhdGUtPmJhc2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGludGVsX2J3X2Rlc3Ry b3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4gKwkJCQkgICBzdHJ1Y3Qg ZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNz IGludGVsX2J3X2Z1bmNzID0gewo+ID4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVs X2J3X2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxf YndfZGVzdHJveV9zdGF0ZSwKPiA+ICt9Owo+ID4gKwo+ID4gK2ludCBpbnRlbF9id19pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRl bF9id19zdGF0ZSAqc3RhdGU7Cj4gPiArCj4gPiArCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0 YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghc3RhdGUpCj4gPiArCQlyZXR1cm4gLUVOT01F TTsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KCZkZXZfcHJpdi0+ZHJt LCAmZGV2X3ByaXYtPmJ3X29iaiwKPiA+ICsJCQkJICAgICZzdGF0ZS0+YmFzZSwgJmludGVsX2J3 X2Z1bmNzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9idy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5j MTQyNzJjYTViNTkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2J3LmgKPiA+IEBAIC0wLDAgKzEsNDYgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUICovCj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRl bCBDb3Jwb3JhdGlvbgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19JTlRFTF9CV19IX18K PiA+ICsjZGVmaW5lIF9fSU5URUxfQldfSF9fCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gPiArI2luY2x1ZGUg ImludGVsX2Rpc3BsYXkuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKPiA+ ICtzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlOwo+ID4gK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRl Owo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9id19zdGF0ZSB7Cj4gPiArCXN0cnVjdCBkcm1fcHJp dmF0ZV9zdGF0ZSBiYXNlOwo+ID4gKwo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlW0k5MTVf TUFYX1BJUEVTXTsKPiA+ICsJdTggbnVtX2FjdGl2ZV9wbGFuZXNbSTkxNV9NQVhfUElQRVNdOwo+ ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSB0b19pbnRlbF9id19zdGF0ZSh4KSBjb250YWluZXJf b2YoKHgpLCBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUsIGJhc2UpCj4gPiArCj4gPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKgo+ID4gK2ludGVsX2F0b21pY19nZXRfYndfc3Rh dGUoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5iYXNlLmRldik7Cj4g PiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqYndfc3RhdGU7Cj4gPiArCj4gPiArCWJ3X3N0 YXRlID0gZHJtX2F0b21pY19nZXRfcHJpdmF0ZV9vYmpfc3RhdGUoJnN0YXRlLT5iYXNlLAo+ID4g KwkJCQkJCSAgICAmZGV2X3ByaXYtPmJ3X29iaik7Cj4gPiArCWlmIChJU19FUlIoYndfc3RhdGUp KQo+ID4gKwkJcmV0dXJuIEVSUl9DQVNUKGJ3X3N0YXRlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHRv X2ludGVsX2J3X3N0YXRlKGJ3X3N0YXRlKTsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGludGVsX2J3 X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICtpbnQgaW50ZWxf YndfYXRvbWljX2NoZWNrKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ICt2 b2lkIGludGVsX2J3X2NydGNfdXBkYXRlKHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUs Cj4gPiArCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4g PiArCj4gPiArI2VuZGlmIC8qIF9fSU5URUxfQldfSF9fICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBkODFlYzgwZTM0ZjYuLmE5NTU4NDBiNzNjYiAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBAQCAtNTAsNiArNTAs NyBAQAo+ID4gICAjaW5jbHVkZSAiaW50ZWxfYWNwaS5oIgo+ID4gICAjaW5jbHVkZSAiaW50ZWxf YXRvbWljLmgiCj4gPiAgICNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKPiA+ICsjaW5j bHVkZSAiaW50ZWxfYncuaCIKPiA+ICAgI2luY2x1ZGUgImludGVsX2NvbG9yLmgiCj4gPiAgICNp bmNsdWRlICJpbnRlbF9jZGNsay5oIgo+ID4gICAjaW5jbHVkZSAiaW50ZWxfY3J0LmgiCj4gPiBA QCAtMjg2Myw2ICsyODY0LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcGxhbmVfZGlzYWJsZV9ub2F0 b21pYyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+ICAgCj4gPiAgIAlpbnRlbF9zZXRfcGxh bmVfdmlzaWJsZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgZmFsc2UpOwo+ID4gICAJZml4dXBf YWN0aXZlX3BsYW5lcyhjcnRjX3N0YXRlKTsKPiA+ICsJY3J0Y19zdGF0ZS0+ZGF0YV9yYXRlW3Bs YW5lLT5pZF0gPSAwOwo+ID4gICAKPiA+ICAgCWlmIChwbGFuZS0+aWQgPT0gUExBTkVfUFJJTUFS WSkKPiA+ICAgCQlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5X25vYXRvbWljKCZjcnRjLT5iYXNl KTsKPiA+IEBAIC02NTkwLDYgKzY1OTIsOCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2Fi bGVfbm9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gICAJc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXI7Cj4gPiAgIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Cj4gPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGNydGMtPmRldik7Cj4gPiArCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndf c3RhdGUgPQo+ID4gKwkJdG9faW50ZWxfYndfc3RhdGUoZGV2X3ByaXYtPmJ3X29iai5zdGF0ZSk7 Cj4gPiAgIAllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbjsKPiA+ICAgCXN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gPiAgIAl1NjQgZG9tYWluczsKPiA+IEBAIC02NjUy LDYgKzY2NTYsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfbm9hdG9taWMoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAo+ID4gICAJZGV2X3ByaXYtPmFjdGl2ZV9jcnRjcyAmPSB+KDEg PDwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gPiAgIAlkZXZfcHJpdi0+bWluX2NkY2xrW2ludGVsX2Ny dGMtPnBpcGVdID0gMDsKPiA+ICAgCWRldl9wcml2LT5taW5fdm9sdGFnZV9sZXZlbFtpbnRlbF9j cnRjLT5waXBlXSA9IDA7Cj4gPiArCj4gPiArCWJ3X3N0YXRlLT5kYXRhX3JhdGVbaW50ZWxfY3J0 Yy0+cGlwZV0gPSAwOwo+ID4gKwlid19zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbaW50ZWxfY3J0 Yy0+cGlwZV0gPSAwOwo+ID4gICB9Cj4gPiAgIAo+ID4gICAvKgo+ID4gQEAgLTExMTc2LDYgKzEx MTgzLDcgQEAgaW50IGludGVsX3BsYW5lX2F0b21pY19jYWxjX2NoYW5nZXMoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXQKPiA+ICAgCWlmICghaXNfY3J0Y19lbmFi bGVkKSB7Cj4gPiAgIAkJcGxhbmVfc3RhdGUtPnZpc2libGUgPSB2aXNpYmxlID0gZmFsc2U7Cj4g PiAgIAkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+YWN0aXZlX3BsYW5lcyAmPSB+ QklUKHBsYW5lLT5pZCk7Cj4gPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5k YXRhX3JhdGVbcGxhbmUtPmlkXSA9IDA7Cj4gPiAgIAl9Cj4gPiAgIAo+ID4gICAJaWYgKCF3YXNf dmlzaWJsZSAmJiAhdmlzaWJsZSkKPiA+IEBAIC0xMzI5Niw3ICsxMzMwNCwxNSBAQCBzdGF0aWMg aW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gICAJCXJl dHVybiByZXQ7Cj4gPiAgIAo+ID4gICAJaW50ZWxfZmJjX2Nob29zZV9jcnRjKGRldl9wcml2LCBp bnRlbF9zdGF0ZSk7Cj4gPiAtCXJldHVybiBjYWxjX3dhdGVybWFya19kYXRhKGludGVsX3N0YXRl KTsKPiA+ICsJcmV0ID0gY2FsY193YXRlcm1hcmtfZGF0YShpbnRlbF9zdGF0ZSk7Cj4gPiArCWlm IChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBpbnRlbF9id19hdG9t aWNfY2hlY2soaW50ZWxfc3RhdGUpOwo+IFRoaXMgc2hvdWxkIGJlIGJlZm9yZSBjYWxjX3dhdGVy bWFya19kYXRhLiBJZiB3ZSBkb24ndCBoYXZlIHRoZSAKPiBiYW5kd2lkdGggd2h5IGNhbGN1bGF0 ZSB0aGUgV01zLgoKSSB3YW50ZWQgdG8ga2VlcCBpdCBsYXN0IHRvIG1pbmltaXplIHRoZSB0aW1l IHdlIGhvbGQgdGhlIGdsb2JhbApsb2NrLiBBbHRob3VnaCBtYXliZSB3ZSBtaWdodCB3YW50IHRv IGNvbnNpZGVyIHRoZSBidyB3aGVuCmNhbGN1bGF0aW5nIHRoZSB3YXRlcm1hcmtzLiBUaGVyZSBh cmUgc29tZSBiYW5kd2lkdGggcmVsYXRlZAp3b3JrYXJvdW5kcyBpbiB0aGUgd20gY29kZSBmb3Ig ZWFybGllciBwbGF0Zm9ybXMgdGhhdCBtaWdodCBiZQpyZWxheGVkIGlmIHdlIGhhZCBhbiBhY3R1 YWwgaWRlYSBvbiB0aGUgYncgdXRpbGl6YXRpb24uIEknbGwKaGF2ZSB0byB0aGluayBhYm91dCBp dC4KCj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyZXR1cm4g MDsKPiA+ICAgfQo+ID4gICAKPiA+ICAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfcHJlcGFyZV9j b21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+IEBAIC0xNTY5Niw2ICsxNTcxMiwxMCBA QCBpbnQgaW50ZWxfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgIAo+ ID4gICAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKPiA+ICAgCj4gPiArCXJldCA9IGludGVs X2J3X2luaXQoZGV2X3ByaXYpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICAgCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMDsKPiA+ICAgCWRldi0+bW9k ZV9jb25maWcubWluX2hlaWdodCA9IDA7Cj4gPiAgIAo+ID4gQEAgLTE2MzE4LDggKzE2MzM4LDEx IEBAIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfcmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ID4gICAJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0 ZXIpOwo+ID4gICAKPiA+ICAgCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Cj4gPiAr CQlzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKmJ3X3N0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9id19z dGF0ZShkZXZfcHJpdi0+Yndfb2JqLnN0YXRlKTsKPiA+ICAgCQlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSA9Cj4gPiAgIAkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFz ZS5zdGF0ZSk7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ID4gICAJCWludCBt aW5fY2RjbGsgPSAwOwo+ID4gICAKPiA+ICAgCQltZW1zZXQoJmNydGMtPmJhc2UubW9kZSwgMCwg c2l6ZW9mKGNydGMtPmJhc2UubW9kZSkpOwo+ID4gQEAgLTE2MzU4LDYgKzE2MzgxLDIxIEBAIHN0 YXRpYyB2b2lkIGludGVsX21vZGVzZXRfcmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+ID4gICAJCWRldl9wcml2LT5taW5fdm9sdGFnZV9sZXZlbFtjcnRjLT5waXBlXSA9 Cj4gPiAgIAkJCWNydGNfc3RhdGUtPm1pbl92b2x0YWdlX2xldmVsOwo+ID4gICAKPiA+ICsJCWZv cl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMsIHBsYW5lKSB7 Cj4gPiArCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4g PiArCQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKPiA+ICsKPiA+ ICsJCQkvKgo+ID4gKwkJCSAqIEZJWE1FIGRvbid0IGhhdmUgdGhlIGZiIHlldCwgc28gY2FuJ3QK PiA+ICsJCQkgKiB1c2UgaW50ZWxfcGxhbmVfZGF0YV9yYXRlKCkgOigKPiA+ICsJCQkgKi8KPiA+ ICsJCQlpZiAocGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ICsJCQkJY3J0Y19zdGF0ZS0+ ZGF0YV9yYXRlW3BsYW5lLT5pZF0gPQo+ID4gKwkJCQkJNCAqIGNydGNfc3RhdGUtPnBpeGVsX3Jh dGU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpbnRlbF9id19jcnRjX3VwZGF0ZShid19zdGF0ZSwg Y3J0Y19zdGF0ZSk7Cj4gPiArCj4gPiAgIAkJaW50ZWxfcGlwZV9jb25maWdfc2FuaXR5X2NoZWNr KGRldl9wcml2LCBjcnRjX3N0YXRlKTsKPiA+ICAgCX0KPiA+ICAgfQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmgKPiA+IGluZGV4IDQwNDllMDNkMmMwZC4uNDdmNTUxNjAxYTA1IDEwMDY0NAo+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBAQCAtODg1LDYgKzg4NSw4IEBAIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlIHsKPiA+ICAgCj4gPiAgIAlzdHJ1Y3QgaW50ZWxfY3J0Y193bV9z dGF0ZSB3bTsKPiA+ICAgCj4gPiArCXUzMiBkYXRhX3JhdGVbSTkxNV9NQVhfUExBTkVTXTsKPiA+ ICsKPiA+ICAgCS8qIEdhbW1hIG1vZGUgcHJvZ3JhbW1lZCBvbiB0aGUgcGlwZSAqLwo+ID4gICAJ dTMyIGdhbW1hX21vZGU7Cj4gPiAgIAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=