From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v8 13/19] drm/i915/dp: Configure i915 Picture parameter Set registers during DSC enabling Date: Tue, 6 Nov 2018 08:50:15 -0800 Message-ID: <20181106165015.GB18274@intel.com> References: <20181102213138.301-1-manasi.d.navare@intel.com> <20181102213138.301-14-manasi.d.navare@intel.com> <20181106143608.GW9144@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181106143608.GW9144@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMDYsIDIwMTggYXQgMDQ6MzY6MDhQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIEZyaSwgTm92IDAyLCAyMDE4IGF0IDAyOjMxOjMyUE0gLTA3MDAsIE1hbmFz aSBOYXZhcmUgd3JvdGU6Cj4gPiBBZnRlciBlbmNvZGVyLT5wcmVfZW5hYmxlKCkgaG9vaywgYWZ0 ZXIgbGluayB0cmFpbmluZyBzZXF1ZW5jZSBpcwo+ID4gY29tcGxldGVkLCBQUFMgcmVnaXN0ZXJz IGZvciBEU0MgZW5jb2RlciBhcmUgY29uZmlndXJlZCB1c2luZyB0aGUKPiA+IERTQyBzdGF0ZSBw YXJhbWV0ZXJzIGluIGludGVsX2NydGNfc3RhdGUgYXMgcGFydCBvZiBEU0MgZW5hYmxpbmcKPiA+ IHJvdXRpbmUgaW4gdGhlIHNvdXJjZS4gRFNDIGVuYWJsaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFm dGVyCj4gPiBlbmNvZGVyLT5wcmVfZW5hYmxlKCkgYmVmb3JlIGVuYmFsaW5nIHRoZSBwaXBlIGFu ZCBhZnRlcgo+ID4gY29tcHJlc3Npb24gaXMgZW5hYmxlZCBvbiB0aGUgc2luay4KPiA+IAo+ID4g djY6Cj4gPiBpbnRlbF9kc2NfZW5hYmxlIHRvIGJlIHBhcnQgb2YgcHJlX2VuYWJsZSBob29rIChW aWxsZSkKPiA+IHY1Ogo+ID4gKiBtYWtlIGNydGNfc3RhdGUgY29uc3QgKFZpbGxlKQo+ID4gdjQ6 Cj4gPiAqIFVzZSBjcHVfdHJhbnNjb2RlciBpbnN0ZWFkIG9mIGVuY29kZXItPnR5cGUgZm9yIHVz aW5nIEVEUCB0cmFuc2NvZGVyCj4gPiBEU0MgcmVnaXN0ZXJzKFZpbGxlKQo+ID4gKiBLZWVwIGFs bCBQU1MgcmVncyB0b2dldGhlciAoQW51c2hhKQo+ID4gCj4gPiB2MzoKPiA+ICogQ29uZmlndXJl IFBpY193aWR0aC8yIGZvciBlYWNoIFZEU0MgZW5naW5lIHdoZW4gdHdvIFZEU0MgZW5naW5lcyBw ZXIgcGlwZQo+ID4gYXJlIHVzZWQgKE1hbmFzaSkKPiA+ICogQWRkIERTQyBzbGljZV9yb3dfcGVy X2ZyYW1lIGluIFBQUzE2IChNYW5hc2kpCj4gPiAKPiA+IHYyOgo+ID4gKiBFbmFibGUgUEcyIHBv d2VyIHdlbGwgZm9yIFZEU0Mgb24gZURQCj4gPiAKPiA+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5u aWt1bGFAbGludXguaW50ZWwuY29tPgo+ID4gQ2M6IFZpbGxlIFN5cmphbGEgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgo+ID4gQ2M6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZh dHNhQGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5k Lm5hdmFyZUBpbnRlbC5jb20+Cj4gPiBSZXZpZXdlZC1ieTogQW51c2hhIFNyaXZhdHNhIDxhbnVz aGEuc3JpdmF0c2FAaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgIHwgICAyICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k ZGkuYyAgICAgfCAgIDYgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jICAgIHwgNDE5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDQgZmlsZXMgY2hhbmdlZCwgNDI4IGlu c2VydGlvbnMoKykKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBpbmRleCBkNzc5 N2E0MWM2NDguLmYzNDdkMGQ3YjllYiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiA+IEBAIC0zNDg1LDYgKzM0ODUsOCBAQCBleHRlcm4gdm9pZCBpbnRlbF9ycHNfbWFya19pbnRl cmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiA+ICAJCQkJICAgICAgIGJv b2wgaW50ZXJhY3RpdmUpOwo+ID4gIGV4dGVybiBib29sIGludGVsX3NldF9tZW1vcnlfY3hzcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkJCSAgYm9vbCBlbmFibGUp Owo+ID4gK2V4dGVybiB2b2lkIGludGVsX2RzY19lbmFibGUoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCj4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSk7Cj4gPiAgCj4gPiAgaW50IGk5MTVfcmVnX3JlYWRfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+ICAJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+IGluZGV4IGFmMTJjMTVlZDk0Zi4uYmJhMDgz MjJhZmI3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiBAQCAtMjk2Miw2 ICsyOTYyLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gIAo+ID4gIAlpZiAoIWlzX21zdCkKPiA+ICAJCWlu dGVsX2RkaV9lbmFibGVfcGlwZV9jbG9jayhjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICsJLyoKPiA+ ICsJICogRW5hYmxlIGFuZCBDb25maWd1cmUgRGlzcGxheSBTdHJlYW0gQ29tcHJlc3Npb24gaW4g dGhlIHNvdXJjZQo+ID4gKwkgKiBpZiBlbmFibGVkIGluIGludGVsX2NydGNfc3RhdGUuCj4gPiAr CSAqLwo+ID4gKwlpbnRlbF9kc2NfZW5hYmxlKGVuY29kZXIsIGNydGNfc3RhdGUpOwo+ID4gIH0K PiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfcHJlX2VuYWJsZV9oZG1pKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+ID4gaW5kZXggNDc3ZTUzYzM3MzUzLi5kM2FhNzdmNGQ2MDYgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTU0MTcsNiArNTQxNyw3IEBAIHN0YXRp YyB2b2lkIGludGVsX2VuY29kZXJzX3ByZV9lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ ID4gIAo+ID4gIAkJaWYgKGVuY29kZXItPnByZV9lbmFibGUpCj4gPiAgCQkJZW5jb2Rlci0+cHJl X2VuYWJsZShlbmNvZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiA+ICsKPiAKPiBCb2d1 cyB3aGl0ZXNwYWNlIGxlZnRvdmVyLiBQbGVhc2UgdHJ5IHRvIHJlYWQgdGhyb3VnaCB5b3VyIG93 biBwYXRjaGVzCj4gYmVmb3JlIHNlbmRpbmcgdGhlbS4gVGhhdCBnZW5lcmFsbHkgaGVscHMgY2F0 Y2ggc2lsbHkgdGhpbmdzIGxpa2UgdGhpcy4KPgoKT2ggeWVzLCBJIHdpbGwgZml4IHRoaXMsIGFj dHVhbGx5IEkgZGlkIGJ1dCB0aGUgbmV3IHZlcnNpb25zIHdlcmUgc2VudCB3aXRoIENJIHRhZyBh ZnRlciB0aGlzIHRvIGdldCB0aGUKQ0kgcmVzdWx0cy4KCk1hbmFzaQogCj4gPiAgCX0KPiA+ICB9 Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jCj4gPiBpbmRleCBhNzZmNzhiOWMw ZWUuLjBlYWE2OTc3ODE2MCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3Zkc2MuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jCj4g PiBAQCAtNTgwLDMgKzU4MCw0MjIgQEAgaW50IGludGVsX2RwX2NvbXB1dGVfZHNjX3BhcmFtcyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gIAo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgaW50ZWxfY29uZmlndXJlX3Bwc19mb3JfZHNjX2VuY29kZXIo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiArCQkJCQkJY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiA+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRl dik7Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZHNjX2NvbmZpZyAqdmRzY19jZmcgPSAmY3J0Y19z dGF0ZS0+ZHBfZHNjX2NmZzsKPiA+ICsJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4g KwllbnVtIHRyYW5zY29kZXIgY3B1X3RyYW5zY29kZXIgPSBjcnRjX3N0YXRlLT5jcHVfdHJhbnNj b2RlcjsKPiA+ICsJdTMyIHBwc192YWwgPSAwOwo+ID4gKwl1MzIgcmNfYnVmX3RocmVzaF9kd29y ZFs0XTsKPiA+ICsJdTMyIHJjX3JhbmdlX3BhcmFtc19kd29yZFs4XTsKPiA+ICsJdTggbnVtX3Zk c2NfaW5zdGFuY2VzID0gKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KSA/IDIgOiAx Owo+ID4gKwlpbnQgaSA9IDA7Cj4gPiArCj4gPiArCS8qIFBvcHVsYXRlIFBJQ1RVUkVfUEFSQU1F VEVSX1NFVF8wIHJlZ2lzdGVycyAqLwo+ID4gKwlwcHNfdmFsID0gRFNDX1ZFUl9NQUogfCB2ZHNj X2NmZy0+ZHNjX3ZlcnNpb25fbWlub3IgPDwKPiA+ICsJCURTQ19WRVJfTUlOX1NISUZUIHwKPiA+ ICsJCXZkc2NfY2ZnLT5iaXRzX3Blcl9jb21wb25lbnQgPDwgRFNDX0JQQ19TSElGVCB8Cj4gPiAr CQl2ZHNjX2NmZy0+bGluZV9idWZfZGVwdGggPDwgRFNDX0xJTkVfQlVGX0RFUFRIX1NISUZUOwo+ ID4gKwlpZiAodmRzY19jZmctPmJsb2NrX3ByZWRfZW5hYmxlKQo+ID4gKwkJcHBzX3ZhbCB8PSBE U0NfQkxPQ0tfUFJFRElDVElPTjsKPiA+ICsJZWxzZQo+ID4gKwkJcHBzX3ZhbCAmPSB+RFNDX0JM T0NLX1BSRURJQ1RJT047Cj4gPiArCWlmICh2ZHNjX2NmZy0+Y29udmVydF9yZ2IpCj4gPiArCQlw cHNfdmFsIHw9IERTQ19DT0xPUl9TUEFDRV9DT05WRVJTSU9OOwo+ID4gKwllbHNlCj4gPiArCQlw cHNfdmFsICY9IH5EU0NfQ09MT1JfU1BBQ0VfQ09OVkVSU0lPTjsKPiA+ICsJaWYgKHZkc2NfY2Zn LT5lbmFibGU0MjIpCj4gPiArCQlwcHNfdmFsIHw9IERTQ180MjJfRU5BQkxFOwo+ID4gKwllbHNl Cj4gPiArCQlwcHNfdmFsICY9IH5EU0NfNDIyX0VOQUJMRTsKPiA+ICsJaWYgKHZkc2NfY2ZnLT52 YnJfZW5hYmxlKQo+ID4gKwkJcHBzX3ZhbCB8PSBEU0NfVkJSX0VOQUJMRTsKPiA+ICsJZWxzZQo+ ID4gKwkJcHBzX3ZhbCAmPSB+RFNDX1ZCUl9FTkFCTEU7Cj4gPiArCj4gPiArCURSTV9JTkZPKCJQ UFMwID0gMHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+ICsJaWYgKGNwdV90cmFuc2NvZGVyID09IFRS QU5TQ09ERVJfRURQKSB7Cj4gPiArCQlJOTE1X1dSSVRFKERTQ0FfUElDVFVSRV9QQVJBTUVURVJf U0VUXzAsIHBwc192YWwpOwo+ID4gKwkJLyoKPiA+ICsJCSAqIElmIDIgVkRTQyBpbnN0YW5jZXMg YXJlIG5lZWRlZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4gPiArCQkgKiBWRFNDCj4gPiAr CQkgKi8KPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+ICsJ CQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzAsIHBwc192YWwpOwo+ID4g Kwl9IGVsc2Ugewo+ID4gKwkJSTkxNV9XUklURShJQ0xfRFNDMF9QSUNUVVJFX1BBUkFNRVRFUl9T RVRfMChwaXBlKSwgcHBzX3ZhbCk7Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5k c2Nfc3BsaXQpCj4gPiArCQkJSTkxNV9XUklURShJQ0xfRFNDMV9QSUNUVVJFX1BBUkFNRVRFUl9T RVRfMChwaXBlKSwKPiA+ICsJCQkJICAgcHBzX3ZhbCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyog UG9wdWxhdGUgUElDVFVSRV9QQVJBTUVURVJfU0VUXzEgcmVnaXN0ZXJzICovCj4gPiArCXBwc192 YWwgPSAwOwo+ID4gKwlwcHNfdmFsIHw9IERTQ19CUFAodmRzY19jZmctPmJpdHNfcGVyX3BpeGVs KTsKPiA+ICsJRFJNX0lORk8oIlBQUzEgPSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4gKwlpZiAo Y3B1X3RyYW5zY29kZXIgPT0gVFJBTlNDT0RFUl9FRFApIHsKPiA+ICsJCUk5MTVfV1JJVEUoRFND QV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMSwgcHBzX3ZhbCk7Cj4gPiArCQkvKgo+ID4gKwkJICog SWYgMiBWRFNDIGluc3RhbmNlcyBhcmUgbmVlZGVkLCBjb25maWd1cmUgUFBTIGZvciBzZWNvbmQK PiA+ICsJCSAqIFZEU0MKPiA+ICsJCSAqLwo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJh bXMuZHNjX3NwbGl0KQo+ID4gKwkJCUk5MTVfV1JJVEUoRFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9T RVRfMSwgcHBzX3ZhbCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0Mw X1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8xKHBpcGUpLCBwcHNfdmFsKTsKPiA+ICsJCWlmIChjcnRj X3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+ICsJCQlJOTE1X1dSSVRFKElDTF9EU0Mx X1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8xKHBpcGUpLAo+ID4gKwkJCQkgICBwcHNfdmFsKTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwkvKiBQb3B1bGF0ZSBQSUNUVVJFX1BBUkFNRVRFUl9TRVRfMiByZWdp c3RlcnMgKi8KPiA+ICsJcHBzX3ZhbCA9IDA7Cj4gPiArCXBwc192YWwgfD0gRFNDX1BJQ19IRUlH SFQodmRzY19jZmctPnBpY19oZWlnaHQpIHwKPiA+ICsJCURTQ19QSUNfV0lEVEgodmRzY19jZmct PnBpY193aWR0aCAvIG51bV92ZHNjX2luc3RhbmNlcyk7Cj4gPiArCURSTV9JTkZPKCJQUFMyID0g MHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+ICsJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VU UFVUX0VEUCkgewo+ID4gKwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8y LCBwcHNfdmFsKTsKPiA+ICsJCS8qCj4gPiArCQkgKiBJZiAyIFZEU0MgaW5zdGFuY2VzIGFyZSBu ZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4gKwkJICogVkRTQwo+ID4gKwkJICov Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJSTkx NV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8yLCBwcHNfdmFsKTsKPiA+ICsJfSBl bHNlIHsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VUXzIo cGlwZSksIHBwc192YWwpOwo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3Nw bGl0KQo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVSRV9QQVJBTUVURVJfU0VUXzIo cGlwZSksCj4gPiArCQkJCSAgIHBwc192YWwpOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFBvcHVs YXRlIFBJQ1RVUkVfUEFSQU1FVEVSX1NFVF8zIHJlZ2lzdGVycyAqLwo+ID4gKwlwcHNfdmFsID0g MDsKPiA+ICsJcHBzX3ZhbCB8PSBEU0NfU0xJQ0VfSEVJR0hUKHZkc2NfY2ZnLT5zbGljZV9oZWln aHQpIHwKPiA+ICsJCURTQ19TTElDRV9XSURUSCh2ZHNjX2NmZy0+c2xpY2Vfd2lkdGgpOwo+ID4g KwlEUk1fSU5GTygiUFBTMyA9IDB4JTA4eFxuIiwgcHBzX3ZhbCk7Cj4gPiArCWlmIChjcHVfdHJh bnNjb2RlciA9PSBUUkFOU0NPREVSX0VEUCkgewo+ID4gKwkJSTkxNV9XUklURShEU0NBX1BJQ1RV UkVfUEFSQU1FVEVSX1NFVF8zLCBwcHNfdmFsKTsKPiA+ICsJCS8qCj4gPiArCQkgKiBJZiAyIFZE U0MgaW5zdGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4gKwkJ ICogVkRTQwo+ID4gKwkJICovCj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nf c3BsaXQpCj4gPiArCQkJSTkxNV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8zLCBw cHNfdmFsKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVS RV9QQVJBTUVURVJfU0VUXzMocGlwZSksIHBwc192YWwpOwo+ID4gKwkJaWYgKGNydGNfc3RhdGUt PmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVS RV9QQVJBTUVURVJfU0VUXzMocGlwZSksCj4gPiArCQkJCSAgIHBwc192YWwpOwo+ID4gKwl9Cj4g PiArCj4gPiArCS8qIFBvcHVsYXRlIFBJQ1RVUkVfUEFSQU1FVEVSX1NFVF80IHJlZ2lzdGVycyAq Lwo+ID4gKwlwcHNfdmFsID0gMDsKPiA+ICsJcHBzX3ZhbCB8PSBEU0NfSU5JVElBTF9YTUlUX0RF TEFZKHZkc2NfY2ZnLT5pbml0aWFsX3htaXRfZGVsYXkpIHwKPiA+ICsJCURTQ19JTklUSUFMX0RF Q19ERUxBWSh2ZHNjX2NmZy0+aW5pdGlhbF9kZWNfZGVsYXkpOwo+ID4gKwlEUk1fSU5GTygiUFBT NCA9IDB4JTA4eFxuIiwgcHBzX3ZhbCk7Cj4gPiArCWlmIChjcHVfdHJhbnNjb2RlciA9PSBUUkFO U0NPREVSX0VEUCkgewo+ID4gKwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NF VF80LCBwcHNfdmFsKTsKPiA+ICsJCS8qCj4gPiArCQkgKiBJZiAyIFZEU0MgaW5zdGFuY2VzIGFy ZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4gKwkJICogVkRTQwo+ID4gKwkJ ICovCj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJ STkxNV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF80LCBwcHNfdmFsKTsKPiA+ICsJ fSBlbHNlIHsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VU XzQocGlwZSksIHBwc192YWwpOwo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNj X3NwbGl0KQo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVSRV9QQVJBTUVURVJfU0VU XzQocGlwZSksCj4gPiArCQkJCSAgIHBwc192YWwpOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFBv cHVsYXRlIFBJQ1RVUkVfUEFSQU1FVEVSX1NFVF81IHJlZ2lzdGVycyAqLwo+ID4gKwlwcHNfdmFs ID0gMDsKPiA+ICsJcHBzX3ZhbCB8PSBEU0NfU0NBTEVfSU5DX0lOVCh2ZHNjX2NmZy0+c2NhbGVf aW5jcmVtZW50X2ludGVydmFsKSB8Cj4gPiArCQlEU0NfU0NBTEVfREVDX0lOVCh2ZHNjX2NmZy0+ c2NhbGVfZGVjcmVtZW50X2ludGVydmFsKTsKPiA+ICsJRFJNX0lORk8oIlBQUzUgPSAweCUwOHhc biIsIHBwc192YWwpOwo+ID4gKwlpZiAoY3B1X3RyYW5zY29kZXIgPT0gVFJBTlNDT0RFUl9FRFAp IHsKPiA+ICsJCUk5MTVfV1JJVEUoRFNDQV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfNSwgcHBzX3Zh bCk7Cj4gPiArCQkvKgo+ID4gKwkJICogSWYgMiBWRFNDIGluc3RhbmNlcyBhcmUgbmVlZGVkLCBj b25maWd1cmUgUFBTIGZvciBzZWNvbmQKPiA+ICsJCSAqIFZEU0MKPiA+ICsJCSAqLwo+ID4gKwkJ aWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4gKwkJCUk5MTVfV1JJVEUo RFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9TRVRfNSwgcHBzX3ZhbCk7Cj4gPiArCX0gZWxzZSB7Cj4g PiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF81KHBpcGUpLCBw cHNfdmFsKTsKPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+ ICsJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF81KHBpcGUpLAo+ ID4gKwkJCQkgICBwcHNfdmFsKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBQb3B1bGF0ZSBQSUNU VVJFX1BBUkFNRVRFUl9TRVRfNiByZWdpc3RlcnMgKi8KPiA+ICsJcHBzX3ZhbCA9IDA7Cj4gPiAr CXBwc192YWwgfD0gRFNDX0lOSVRJQUxfU0NBTEVfVkFMVUUodmRzY19jZmctPmluaXRpYWxfc2Nh bGVfdmFsdWUpIHwKPiA+ICsJCURTQ19GSVJTVF9MSU5FX0JQR19PRkZTRVQodmRzY19jZmctPmZp cnN0X2xpbmVfYnBnX29mZnNldCkgfAo+ID4gKwkJRFNDX0ZMQVRORVNTX01JTl9RUCh2ZHNjX2Nm Zy0+ZmxhdG5lc3NfbWluX3FwKSB8Cj4gPiArCQlEU0NfRkxBVE5FU1NfTUFYX1FQKHZkc2NfY2Zn LT5mbGF0bmVzc19tYXhfcXApOwo+ID4gKwlEUk1fSU5GTygiUFBTNiA9IDB4JTA4eFxuIiwgcHBz X3ZhbCk7Cj4gPiArCWlmIChjcHVfdHJhbnNjb2RlciA9PSBUUkFOU0NPREVSX0VEUCkgewo+ID4g KwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF82LCBwcHNfdmFsKTsKPiA+ ICsJCS8qCj4gPiArCQkgKiBJZiAyIFZEU0MgaW5zdGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3Vy ZSBQUFMgZm9yIHNlY29uZAo+ID4gKwkJICogVkRTQwo+ID4gKwkJICovCj4gPiArCQlpZiAoY3J0 Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJSTkxNV9XUklURShEU0NDX1BJ Q1RVUkVfUEFSQU1FVEVSX1NFVF82LCBwcHNfdmFsKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCUk5 MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VUXzYocGlwZSksIHBwc192YWwp Owo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4gKwkJCUk5 MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVSRV9QQVJBTUVURVJfU0VUXzYocGlwZSksCj4gPiArCQkJ CSAgIHBwc192YWwpOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFBvcHVsYXRlIFBJQ1RVUkVfUEFS QU1FVEVSX1NFVF83IHJlZ2lzdGVycyAqLwo+ID4gKwlwcHNfdmFsID0gMDsKPiA+ICsJcHBzX3Zh bCB8PSBEU0NfU0xJQ0VfQlBHX09GRlNFVCh2ZHNjX2NmZy0+c2xpY2VfYnBnX29mZnNldCkgfAo+ ID4gKwkJRFNDX05GTF9CUEdfT0ZGU0VUKHZkc2NfY2ZnLT5uZmxfYnBnX29mZnNldCk7Cj4gPiAr CURSTV9JTkZPKCJQUFM3ID0gMHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+ICsJaWYgKGNwdV90cmFu c2NvZGVyID09IFRSQU5TQ09ERVJfRURQKSB7Cj4gPiArCQlJOTE1X1dSSVRFKERTQ0FfUElDVFVS RV9QQVJBTUVURVJfU0VUXzcsIHBwc192YWwpOwo+ID4gKwkJLyoKPiA+ICsJCSAqIElmIDIgVkRT QyBpbnN0YW5jZXMgYXJlIG5lZWRlZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4gPiArCQkg KiBWRFNDCj4gPiArCQkgKi8KPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19z cGxpdCkKPiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzcsIHBw c192YWwpOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJSTkxNV9XUklURShJQ0xfRFNDMF9QSUNUVVJF X1BBUkFNRVRFUl9TRVRfNyhwaXBlKSwgcHBzX3ZhbCk7Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJSTkxNV9XUklURShJQ0xfRFNDMV9QSUNUVVJF X1BBUkFNRVRFUl9TRVRfNyhwaXBlKSwKPiA+ICsJCQkJICAgcHBzX3ZhbCk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJLyogUG9wdWxhdGUgUElDVFVSRV9QQVJBTUVURVJfU0VUXzggcmVnaXN0ZXJzICov Cj4gPiArCXBwc192YWwgPSAwOwo+ID4gKwlwcHNfdmFsIHw9IERTQ19GSU5BTF9PRkZTRVQodmRz Y19jZmctPmZpbmFsX29mZnNldCkgfAo+ID4gKwkJRFNDX0lOSVRJQUxfT0ZGU0VUKHZkc2NfY2Zn LT5pbml0aWFsX29mZnNldCk7Cj4gPiArCURSTV9JTkZPKCJQUFM4ID0gMHglMDh4XG4iLCBwcHNf dmFsKTsKPiA+ICsJaWYgKGNwdV90cmFuc2NvZGVyID09IFRSQU5TQ09ERVJfRURQKSB7Cj4gPiAr CQlJOTE1X1dSSVRFKERTQ0FfUElDVFVSRV9QQVJBTUVURVJfU0VUXzgsIHBwc192YWwpOwo+ID4g KwkJLyoKPiA+ICsJCSAqIElmIDIgVkRTQyBpbnN0YW5jZXMgYXJlIG5lZWRlZCwgY29uZmlndXJl IFBQUyBmb3Igc2Vjb25kCj4gPiArCQkgKiBWRFNDCj4gPiArCQkgKi8KPiA+ICsJCWlmIChjcnRj X3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUElD VFVSRV9QQVJBTUVURVJfU0VUXzgsIHBwc192YWwpOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJSTkx NV9XUklURShJQ0xfRFNDMF9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfOChwaXBlKSwgcHBzX3ZhbCk7 Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJSTkx NV9XUklURShJQ0xfRFNDMV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfOChwaXBlKSwKPiA+ICsJCQkJ ICAgcHBzX3ZhbCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogUG9wdWxhdGUgUElDVFVSRV9QQVJB TUVURVJfU0VUXzkgcmVnaXN0ZXJzICovCj4gPiArCXBwc192YWwgPSAwOwo+ID4gKwlwcHNfdmFs IHw9IERTQ19SQ19NT0RFTF9TSVpFKERTQ19SQ19NT0RFTF9TSVpFX0NPTlNUKSB8Cj4gPiArCQlE U0NfUkNfRURHRV9GQUNUT1IoRFNDX1JDX0VER0VfRkFDVE9SX0NPTlNUKTsKPiA+ICsJRFJNX0lO Rk8oIlBQUzkgPSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4gKwlpZiAoY3B1X3RyYW5zY29kZXIg PT0gVFJBTlNDT0RFUl9FRFApIHsKPiA+ICsJCUk5MTVfV1JJVEUoRFNDQV9QSUNUVVJFX1BBUkFN RVRFUl9TRVRfOSwgcHBzX3ZhbCk7Cj4gPiArCQkvKgo+ID4gKwkJICogSWYgMiBWRFNDIGluc3Rh bmNlcyBhcmUgbmVlZGVkLCBjb25maWd1cmUgUFBTIGZvciBzZWNvbmQKPiA+ICsJCSAqIFZEU0MK PiA+ICsJCSAqLwo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ ID4gKwkJCUk5MTVfV1JJVEUoRFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9TRVRfOSwgcHBzX3ZhbCk7 Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFSQU1F VEVSX1NFVF85KHBpcGUpLCBwcHNfdmFsKTsKPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFy YW1zLmRzY19zcGxpdCkKPiA+ICsJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1F VEVSX1NFVF85KHBpcGUpLAo+ID4gKwkJCQkgICBwcHNfdmFsKTsKPiA+ICsJfQo+ID4gKwo+ID4g KwkvKiBQb3B1bGF0ZSBQSUNUVVJFX1BBUkFNRVRFUl9TRVRfMTAgcmVnaXN0ZXJzICovCj4gPiAr CXBwc192YWwgPSAwOwo+ID4gKwlwcHNfdmFsIHw9IERTQ19SQ19RVUFOVF9JTkNfTElNSVQwKHZk c2NfY2ZnLT5yY19xdWFudF9pbmNyX2xpbWl0MCkgfAo+ID4gKwkJRFNDX1JDX1FVQU5UX0lOQ19M SU1JVDEodmRzY19jZmctPnJjX3F1YW50X2luY3JfbGltaXQxKSB8Cj4gPiArCQlEU0NfUkNfVEFS R0VUX09GRl9ISUdIKERTQ19SQ19UR1RfT0ZGU0VUX0hJX0NPTlNUKSB8Cj4gPiArCQlEU0NfUkNf VEFSR0VUX09GRl9MT1coRFNDX1JDX1RHVF9PRkZTRVRfTE9fQ09OU1QpOwo+ID4gKwlEUk1fSU5G TygiUFBTMTAgPSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4gKwlpZiAoY3B1X3RyYW5zY29kZXIg PT0gVFJBTlNDT0RFUl9FRFApIHsKPiA+ICsJCUk5MTVfV1JJVEUoRFNDQV9QSUNUVVJFX1BBUkFN RVRFUl9TRVRfMTAsIHBwc192YWwpOwo+ID4gKwkJLyoKPiA+ICsJCSAqIElmIDIgVkRTQyBpbnN0 YW5jZXMgYXJlIG5lZWRlZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4gPiArCQkgKiBWRFND Cj4gPiArCQkgKi8KPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkK PiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzEwLCBwcHNfdmFs KTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJB TUVURVJfU0VUXzEwKHBpcGUpLCBwcHNfdmFsKTsKPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2Nf cGFyYW1zLmRzY19zcGxpdCkKPiA+ICsJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFS QU1FVEVSX1NFVF8xMChwaXBlKSwKPiA+ICsJCQkJICAgcHBzX3ZhbCk7Cj4gPiArCX0KPiA+ICsK PiA+ICsJLyogUG9wdWxhdGUgUGljdHVyZSBwYXJhbWV0ZXIgc2V0IDE2ICovCj4gPiArCXBwc192 YWwgPSAwOwo+ID4gKwlwcHNfdmFsIHw9IERTQ19TTElDRV9DSFVOS19TSVpFKHZkc2NfY2ZnLT5z bGljZV9jaHVua19zaXplKSB8Cj4gPiArCQlEU0NfU0xJQ0VfUEVSX0xJTkUoKHZkc2NfY2ZnLT5w aWNfd2lkdGggLyBudW1fdmRzY19pbnN0YW5jZXMpIC8KPiA+ICsJCQkJICAgdmRzY19jZmctPnNs aWNlX3dpZHRoKSB8Cj4gPiArCQlEU0NfU0xJQ0VfUk9XX1BFUl9GUkFNRSh2ZHNjX2NmZy0+cGlj X2hlaWdodCAvCj4gPiArCQkJCQl2ZHNjX2NmZy0+c2xpY2VfaGVpZ2h0KTsKPiA+ICsJRFJNX0lO Rk8oIlBQUzE2ID0gMHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+ICsJaWYgKGNwdV90cmFuc2NvZGVy ID09IFRSQU5TQ09ERVJfRURQKSB7Cj4gPiArCQlJOTE1X1dSSVRFKERTQ0FfUElDVFVSRV9QQVJB TUVURVJfU0VUXzE2LCBwcHNfdmFsKTsKPiA+ICsJCS8qCj4gPiArCQkgKiBJZiAyIFZEU0MgaW5z dGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4gKwkJICogVkRT Qwo+ID4gKwkJICovCj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQp Cj4gPiArCQkJSTkxNV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8xNiwgcHBzX3Zh bCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFS QU1FVEVSX1NFVF8xNihwaXBlKSwgcHBzX3ZhbCk7Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNj X3BhcmFtcy5kc2Nfc3BsaXQpCj4gPiArCQkJSTkxNV9XUklURShJQ0xfRFNDMV9QSUNUVVJFX1BB UkFNRVRFUl9TRVRfMTYocGlwZSksCj4gPiArCQkJCSAgIHBwc192YWwpOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCS8qIFBvcHVsYXRlIHRoZSBSQ19CVUZfVEhSRVNIIHJlZ2lzdGVycyAqLwo+ID4gKwlt ZW1zZXQocmNfYnVmX3RocmVzaF9kd29yZCwgMCwgc2l6ZW9mKHJjX2J1Zl90aHJlc2hfZHdvcmQp KTsKPiA+ICsJZm9yIChpID0gMDsgaSA8IERTQ19OVU1fQlVGX1JBTkdFUyAtIDE7IGkrKykgewo+ ID4gKwkJcmNfYnVmX3RocmVzaF9kd29yZFtpLzRdIHw9ICh1MzIpKHZkc2NfY2ZnLT5yY19idWZf dGhyZXNoW2ldIDw8Cj4gPiArCQkJCQkJICBCSVRTX1BFUl9CWVRFICogKGkgJSA0KSk7Cj4gPiAr CQlEUk1fSU5GTygiIFJDX0JVRl9USFJFU0glZCA9IDB4JTA4eFxuIiwgaSwKPiA+ICsJCQkgcmNf YnVmX3RocmVzaF9kd29yZFtpLzRdKTsKPiA+ICsJfQo+ID4gKwlpZiAoY3B1X3RyYW5zY29kZXIg PT0gVFJBTlNDT0RFUl9FRFApIHsKPiA+ICsJCUk5MTVfV1JJVEUoRFNDQV9SQ19CVUZfVEhSRVNI XzAsIHJjX2J1Zl90aHJlc2hfZHdvcmRbMF0pOwo+ID4gKwkJSTkxNV9XUklURShEU0NBX1JDX0JV Rl9USFJFU0hfMF9VRFcsIHJjX2J1Zl90aHJlc2hfZHdvcmRbMV0pOwo+ID4gKwkJSTkxNV9XUklU RShEU0NBX1JDX0JVRl9USFJFU0hfMSwgcmNfYnVmX3RocmVzaF9kd29yZFsyXSk7Cj4gPiArCQlJ OTE1X1dSSVRFKERTQ0FfUkNfQlVGX1RIUkVTSF8xX1VEVywgcmNfYnVmX3RocmVzaF9kd29yZFsz XSk7Cj4gPiArCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpIHsKPiA+ICsJ CQlJOTE1X1dSSVRFKERTQ0NfUkNfQlVGX1RIUkVTSF8wLAo+ID4gKwkJCQkgICByY19idWZfdGhy ZXNoX2R3b3JkWzBdKTsKPiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUkNfQlVGX1RIUkVTSF8wX1VE VywKPiA+ICsJCQkJICAgcmNfYnVmX3RocmVzaF9kd29yZFsxXSk7Cj4gPiArCQkJSTkxNV9XUklU RShEU0NDX1JDX0JVRl9USFJFU0hfMSwKPiA+ICsJCQkJICAgcmNfYnVmX3RocmVzaF9kd29yZFsy XSk7Cj4gPiArCQkJSTkxNV9XUklURShEU0NDX1JDX0JVRl9USFJFU0hfMV9VRFcsCj4gPiArCQkJ CSAgIHJjX2J1Zl90aHJlc2hfZHdvcmRbM10pOwo+ID4gKwkJfQo+ID4gKwl9IGVsc2Ugewo+ID4g KwkJSTkxNV9XUklURShJQ0xfRFNDMF9SQ19CVUZfVEhSRVNIXzAocGlwZSksCj4gPiArCQkJICAg cmNfYnVmX3RocmVzaF9kd29yZFswXSk7Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX0JV Rl9USFJFU0hfMF9VRFcocGlwZSksCj4gPiArCQkJICAgcmNfYnVmX3RocmVzaF9kd29yZFsxXSk7 Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX0JVRl9USFJFU0hfMShwaXBlKSwKPiA+ICsJ CQkgICByY19idWZfdGhyZXNoX2R3b3JkWzJdKTsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBf UkNfQlVGX1RIUkVTSF8xX1VEVyhwaXBlKSwKPiA+ICsJCQkgICByY19idWZfdGhyZXNoX2R3b3Jk WzNdKTsKPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkgewo+ID4g KwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfQlVGX1RIUkVTSF8wKHBpcGUpLAo+ID4gKwkJCQkg ICByY19idWZfdGhyZXNoX2R3b3JkWzBdKTsKPiA+ICsJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1JD X0JVRl9USFJFU0hfMF9VRFcocGlwZSksCj4gPiArCQkJCSAgIHJjX2J1Zl90aHJlc2hfZHdvcmRb MV0pOwo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfQlVGX1RIUkVTSF8xKHBpcGUpLAo+ ID4gKwkJCQkgICByY19idWZfdGhyZXNoX2R3b3JkWzJdKTsKPiA+ICsJCQlJOTE1X1dSSVRFKElD TF9EU0MxX1JDX0JVRl9USFJFU0hfMV9VRFcocGlwZSksCj4gPiArCQkJCSAgIHJjX2J1Zl90aHJl c2hfZHdvcmRbM10pOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFBvcHVsYXRlIHRo ZSBSQ19SQU5HRV9QQVJBTUVURVJTIHJlZ2lzdGVycyAqLwo+ID4gKwltZW1zZXQocmNfcmFuZ2Vf cGFyYW1zX2R3b3JkLCAwLCBzaXplb2YocmNfcmFuZ2VfcGFyYW1zX2R3b3JkKSk7Cj4gPiArCWZv ciAoaSA9IDA7IGkgPCBEU0NfTlVNX0JVRl9SQU5HRVM7IGkrKykgewo+ID4gKwkJcmNfcmFuZ2Vf cGFyYW1zX2R3b3JkW2kvMl0gfD0gKHUzMikoKCh2ZHNjX2NmZy0+cmNfcmFuZ2VfcGFyYW1zW2ld LnJhbmdlX2JwZ19vZmZzZXQgPDwKPiA+ICsJCQkJCQkgICAgICBSQ19CUEdfT0ZGU0VUX1NISUZU KSB8Cj4gPiArCQkJCQkJICAgICAodmRzY19jZmctPnJjX3JhbmdlX3BhcmFtc1tpXS5yYW5nZV9t YXhfcXAgPDwKPiA+ICsJCQkJCQkgICAgICBSQ19NQVhfUVBfU0hJRlQpIHwKPiA+ICsJCQkJCQkg ICAgICh2ZHNjX2NmZy0+cmNfcmFuZ2VfcGFyYW1zW2ldLnJhbmdlX21pbl9xcCA8PAo+ID4gKwkJ CQkJCSAgICAgIFJDX01JTl9RUF9TSElGVCkpIDw8IDE2ICogKGkgJSAyKSk7Cj4gPiArCQlEUk1f SU5GTygiIFJDX1JBTkdFX1BBUkFNXyVkID0gMHglMDh4XG4iLCBpLAo+ID4gKwkJCSByY19yYW5n ZV9wYXJhbXNfZHdvcmRbaS8yXSk7Cj4gPiArCX0KPiA+ICsJaWYgKGNwdV90cmFuc2NvZGVyID09 IFRSQU5TQ09ERVJfRURQKSB7Cj4gPiArCQlJOTE1X1dSSVRFKERTQ0FfUkNfUkFOR0VfUEFSQU1F VEVSU18wLAo+ID4gKwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFswXSk7Cj4gPiArCQlJOTE1 X1dSSVRFKERTQ0FfUkNfUkFOR0VfUEFSQU1FVEVSU18wX1VEVywKPiA+ICsJCQkgICByY19yYW5n ZV9wYXJhbXNfZHdvcmRbMV0pOwo+ID4gKwkJSTkxNV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFN RVRFUlNfMSwKPiA+ICsJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbMl0pOwo+ID4gKwkJSTkx NV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFNRVRFUlNfMV9VRFcsCj4gPiArCQkJICAgcmNfcmFu Z2VfcGFyYW1zX2R3b3JkWzNdKTsKPiA+ICsJCUk5MTVfV1JJVEUoRFNDQV9SQ19SQU5HRV9QQVJB TUVURVJTXzIsCj4gPiArCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzRdKTsKPiA+ICsJCUk5 MTVfV1JJVEUoRFNDQV9SQ19SQU5HRV9QQVJBTUVURVJTXzJfVURXLAo+ID4gKwkJCSAgIHJjX3Jh bmdlX3BhcmFtc19kd29yZFs1XSk7Cj4gPiArCQlJOTE1X1dSSVRFKERTQ0FfUkNfUkFOR0VfUEFS QU1FVEVSU18zLAo+ID4gKwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFs2XSk7Cj4gPiArCQlJ OTE1X1dSSVRFKERTQ0FfUkNfUkFOR0VfUEFSQU1FVEVSU18zX1VEVywKPiA+ICsJCQkgICByY19y YW5nZV9wYXJhbXNfZHdvcmRbN10pOwo+ID4gKwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMu ZHNjX3NwbGl0KSB7Cj4gPiArCQkJSTkxNV9XUklURShEU0NDX1JDX1JBTkdFX1BBUkFNRVRFUlNf MCwKPiA+ICsJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzBdKTsKPiA+ICsJCQlJOTE1X1dS SVRFKERTQ0NfUkNfUkFOR0VfUEFSQU1FVEVSU18wX1VEVywKPiA+ICsJCQkJICAgcmNfcmFuZ2Vf cGFyYW1zX2R3b3JkWzFdKTsKPiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUkNfUkFOR0VfUEFSQU1F VEVSU18xLAo+ID4gKwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbMl0pOwo+ID4gKwkJCUk5 MTVfV1JJVEUoRFNDQ19SQ19SQU5HRV9QQVJBTUVURVJTXzFfVURXLAo+ID4gKwkJCQkgICByY19y YW5nZV9wYXJhbXNfZHdvcmRbM10pOwo+ID4gKwkJCUk5MTVfV1JJVEUoRFNDQ19SQ19SQU5HRV9Q QVJBTUVURVJTXzIsCj4gPiArCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFs0XSk7Cj4gPiAr CQkJSTkxNV9XUklURShEU0NDX1JDX1JBTkdFX1BBUkFNRVRFUlNfMl9VRFcsCj4gPiArCQkJCSAg IHJjX3JhbmdlX3BhcmFtc19kd29yZFs1XSk7Cj4gPiArCQkJSTkxNV9XUklURShEU0NDX1JDX1JB TkdFX1BBUkFNRVRFUlNfMywKPiA+ICsJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzZdKTsK PiA+ICsJCQlJOTE1X1dSSVRFKERTQ0NfUkNfUkFOR0VfUEFSQU1FVEVSU18zX1VEVywKPiA+ICsJ CQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzddKTsKPiA+ICsJCX0KPiA+ICsJfSBlbHNlIHsK PiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVSU18wKHBpcGUpLAo+ ID4gKwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFswXSk7Cj4gPiArCQlJOTE1X1dSSVRFKElD TF9EU0MwX1JDX1JBTkdFX1BBUkFNRVRFUlNfMF9VRFcocGlwZSksCj4gPiArCQkJICAgcmNfcmFu Z2VfcGFyYW1zX2R3b3JkWzFdKTsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0Vf UEFSQU1FVEVSU18xKHBpcGUpLAo+ID4gKwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFsyXSk7 Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX1JBTkdFX1BBUkFNRVRFUlNfMV9VRFcocGlw ZSksCj4gPiArCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzNdKTsKPiA+ICsJCUk5MTVfV1JJ VEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVSU18yKHBpcGUpLAo+ID4gKwkJCSAgIHJjX3Jh bmdlX3BhcmFtc19kd29yZFs0XSk7Cj4gPiArCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX1JBTkdF X1BBUkFNRVRFUlNfMl9VRFcocGlwZSksCj4gPiArCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3Jk WzVdKTsKPiA+ICsJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVSU18zKHBp cGUpLAo+ID4gKwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFs2XSk7Cj4gPiArCQlJOTE1X1dS SVRFKElDTF9EU0MwX1JDX1JBTkdFX1BBUkFNRVRFUlNfM19VRFcocGlwZSksCj4gPiArCQkJICAg cmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzddKTsKPiA+ICsJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFy YW1zLmRzY19zcGxpdCkgewo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfUkFOR0VfUEFS QU1FVEVSU18wKHBpcGUpLAo+ID4gKwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbMF0pOwo+ ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfUkFOR0VfUEFSQU1FVEVSU18wX1VEVyhwaXBl KSwKPiA+ICsJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzFdKTsKPiA+ICsJCQlJOTE1X1dS SVRFKElDTF9EU0MxX1JDX1JBTkdFX1BBUkFNRVRFUlNfMShwaXBlKSwKPiA+ICsJCQkJICAgcmNf cmFuZ2VfcGFyYW1zX2R3b3JkWzJdKTsKPiA+ICsJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1JDX1JB TkdFX1BBUkFNRVRFUlNfMV9VRFcocGlwZSksCj4gPiArCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19k d29yZFszXSk7Cj4gPiArCQkJSTkxNV9XUklURShJQ0xfRFNDMV9SQ19SQU5HRV9QQVJBTUVURVJT XzIocGlwZSksCj4gPiArCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFs0XSk7Cj4gPiArCQkJ STkxNV9XUklURShJQ0xfRFNDMV9SQ19SQU5HRV9QQVJBTUVURVJTXzJfVURXKHBpcGUpLAo+ID4g KwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNV0pOwo+ID4gKwkJCUk5MTVfV1JJVEUoSUNM X0RTQzFfUkNfUkFOR0VfUEFSQU1FVEVSU18zKHBpcGUpLAo+ID4gKwkJCQkgICByY19yYW5nZV9w YXJhbXNfZHdvcmRbNl0pOwo+ID4gKwkJCUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfUkFOR0VfUEFS QU1FVEVSU18zX1VEVyhwaXBlKSwKPiA+ICsJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzdd KTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGludGVsX2RzY19lbmFi bGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiArCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7Cj4gPiArCj4gPiArCWlmICgh Y3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5jb21wcmVzc2lvbl9lbmFibGUpCj4gPiArCQlyZXR1cm47 Cj4gPiArCj4gPiArCWludGVsX2NvbmZpZ3VyZV9wcHNfZm9yX2RzY19lbmNvZGVyKGVuY29kZXIs IGNydGNfc3RhdGUpOwo+ID4gKwo+ID4gKwlyZXR1cm47Cj4gCj4gUG9pbnRsZXNzIHJldHVybgo+ IAo+ID4gK30KPiA+IC0tIAo+ID4gMi4xOC4wCj4gCj4gLS0gCj4gVmlsbGUgU3lyasOkbMOkCj4g SW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==