From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v8 10/19] drm/i915/dsc: Compute Rate Control parameters for DSC Date: Tue, 6 Nov 2018 22:30:59 +0200 Message-ID: <20181106203059.GH9144@intel.com> References: <20181102213138.301-1-manasi.d.navare@intel.com> <20181102213138.301-11-manasi.d.navare@intel.com> <20181106143338.GV9144@intel.com> <20181106165240.GC18274@intel.com> <20181106170050.GC9144@intel.com> <20181106201450.GD26420@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: <20181106201450.GD26420@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Manasi Navare Cc: intel-gfx@lists.freedesktop.org, Gaurav K Singh , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMDYsIDIwMTggYXQgMTI6MTQ6NTBQTSAtMDgwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUdWUsIE5vdiAwNiwgMjAxOCBhdCAwNzowMDo1MFBNICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBUdWUsIE5vdiAwNiwgMjAxOCBhdCAwODo1Mjo0MUFNIC0w ODAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ID4gPiBPbiBUdWUsIE5vdiAwNiwgMjAxOCBhdCAw NDozMzozOFBNICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ID4gT24gRnJpLCBO b3YgMDIsIDIwMTggYXQgMDI6MzE6MjlQTSAtMDcwMCwgTWFuYXNpIE5hdmFyZSB3cm90ZToKPiA+ ID4gPiA+IEZyb206IEdhdXJhdiBLIFNpbmdoIDxnYXVyYXYuay5zaW5naEBpbnRlbC5jb20+Cj4g PiA+ID4gPiAKPiA+ID4gPiA+IFRoaXMgY29tcHV0YXRpb24gb2YgUkMgcGFyYW1zIGhhcHBlbnMg aW4gdGhlIGF0b21pYyBjb21taXQgcGhhc2UKPiA+ID4gPiA+IGR1cmluZyBjb21wdXRlX2NvbmZp ZygpIHRvIHZhbGlkYXRlIGlmIGRpc3BsYXkgc3RyZWFtIGNvbXByZXNzaW9uCj4gPiA+ID4gPiBj YW4gYmUgZW5hYmxlZCBmb3IgdGhlIHJlcXVlc3RlZCBtb2RlLgo+ID4gPiA+ID4gCj4gPiA+ID4g PiB2NyAoRnJvbSBNYW5hc2kpOgo+ID4gPiA+ID4gKiBVc2UgRFJNX0RFQlVHIGluc3RlYWQgb2Yg RFJNX0VSUk9SIChWaWxsZSkKPiA+ID4gPiA+ICogVXNlIEVycm9yIG51bWJlcmluc3RlYWQgb2Yg LTEgKFZpbGxlKQo+ID4gPiA+ID4gdjYgKEZyb20gTWFuYXNpKToKPiA+ID4gPiA+ICogVXNlIDkg aW5zdGVhZCBvZiAweDkgZm9yIGNvbnNpc3RlbmN5IChBbnVzaGEpCj4gPiA+ID4gPiAKPiA+ID4g PiA+IHY1IChGcm9tIE1hbmFzaSk6Cj4gPiA+ID4gPiAqIEZpeCBkaW0gY2hlY2twYXRjaCB3YXJu aW5ncy9jaGVja3MKPiA+ID4gPiA+IHY0KEZyb20gR2F1cmF2KToKPiA+ID4gPiA+ICogTm8gY2hh bmdlLlJlYmFzZSBvbiBkcm0tdGlwCj4gPiA+ID4gPiAKPiA+ID4gPiA+IHYzIChGcm9tIEdhdXJh dik6Cj4gPiA+ID4gPiAqIFJlYmFzZSBvbiB0b3Agb2YgTWFuYXNpJ3MgbGF0ZXN0IHNlcmllcwo+ ID4gPiA+ID4gKiBSZXR1cm4gLXZlIHZhbHVlIGluIGNhc2Ugb2YgZmFpbHVyZSBzY2VuYXJpb3Mg KE1hbmFzaSkKPiA+ID4gPiA+IAo+ID4gPiA+ID4gRml4IHJldmlldyBjb21tZW50cyBmcm9tIFZp bGxlOgo+ID4gPiA+ID4gKiBSZW1vdmUgdW5uZWNlc3NhcnkgY29tbWVudHMKPiA+ID4gPiA+ICog UmVtb3ZlIHVubmVjZXNzYXJ5IHBhcmFudGhlc2lzCj4gPiA+ID4gPiAqIEFkZCBjb21tZW50cyBm b3IgZmV3IFJDIHBhcmFtcyBjYWxjdWxhdGlvbnMKPiA+ID4gPiA+IAo+ID4gPiA+ID4gdjIgKEZy b20gTWFuYXNpKToKPiA+ID4gPiA+ICogUmViYXNlIEdhdXJhdidzIHBhdGNoIGZyb20gaW50ZWwt Z2Z4IHRvIGdmeC1pbnRlcm5hbAo+ID4gPiA+ID4gKiBVc2Ugc3RydWN0IGRybV9kc2NfY2ZnIGlu c3RlYWQgb2Ygc3RydWN0IGludGVsX2RwCj4gPiA+ID4gPiBhcyBhIHBhcmFtZXRlcgo+ID4gPiA+ ID4gCj4gPiA+ID4gPiBDYzogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNv bT4KPiA+ID4gPiA+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAbGludXguaW50ZWwuY29t Pgo+ID4gPiA+ID4gQ2M6IFZpbGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogR2F1cmF2IEsgU2luZ2ggPGdhdXJhdi5rLnNp bmdoQGludGVsLmNvbT4KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1h bmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiA+ID4gPiBSZXZpZXdlZC1ieTogQW51c2hhIFNy aXZhdHNhIDxhbnVzaGEuc3JpdmF0c2FAaW50ZWwuY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jIHwgMTI3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9u cygrKQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdmRzYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jCj4gPiA+ ID4gPiBpbmRleCAwYTE5MThmMmY2NDMuLmE3NmY3OGI5YzBlZSAxMDA2NDQKPiA+ID4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zkc2MuYwo+ID4gPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5jCj4gPiA+ID4gPiBAQCAtMzE3LDYgKzMxNywx MzAgQEAgc3RhdGljIGludCBnZXRfY29sdW1uX2luZGV4X2Zvcl9yY19wYXJhbXModTggYml0c19w ZXJfY29tcG9uZW50KQo+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4g PiA+ID4gK3N0YXRpYyBpbnQgaW50ZWxfY29tcHV0ZV9yY19wYXJhbWV0ZXJzKHN0cnVjdCBkcm1f ZHNjX2NvbmZpZyAqdmRzY19jZmcpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwl1bnNpZ25lZCBs b25nIGdyb3Vwc19wZXJfbGluZSA9IDA7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGxvbmcgZ3JvdXBz X3RvdGFsID0gMDsKPiA+ID4gPiA+ICsJdW5zaWduZWQgbG9uZyBudW1fZXh0cmFfbXV4X2JpdHMg PSAwOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBsb25nIHNsaWNlX2JpdHMgPSAwOwo+ID4gPiA+ID4g Kwl1bnNpZ25lZCBsb25nIGhyZF9kZWxheSA9IDA7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGxvbmcg ZmluYWxfc2NhbGUgPSAwOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBsb25nIHJic19taW4gPSAwOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiBOdW1iZXIgb2YgZ3JvdXBzIHVzZWQgdG8gY29kZSBl YWNoIGxpbmUgb2YgYSBzbGljZSAqLwo+ID4gPiA+ID4gKwlncm91cHNfcGVyX2xpbmUgPSBESVZf Uk9VTkRfVVAodmRzY19jZmctPnNsaWNlX3dpZHRoLAo+ID4gPiA+ID4gKwkJCQkgICAgICAgRFND X1JDX1BJWEVMU19QRVJfR1JPVVApOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiBjaHVua3Np emUgaW4gQnl0ZXMgKi8KPiA+ID4gPiA+ICsJdmRzY19jZmctPnNsaWNlX2NodW5rX3NpemUgPSBE SVZfUk9VTkRfVVAodmRzY19jZmctPnNsaWNlX3dpZHRoICoKPiA+ID4gPiA+ICsJCQkJCQkgIHZk c2NfY2ZnLT5iaXRzX3Blcl9waXhlbCwKPiA+ID4gPiA+ICsJCQkJCQkgICg4ICogMTYpKTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKHZkc2NfY2ZnLT5jb252ZXJ0X3JnYikKPiA+ID4gPiA+ ICsJCW51bV9leHRyYV9tdXhfYml0cyA9IDMgKiAodmRzY19jZmctPm11eF93b3JkX3NpemUgKwo+ ID4gPiA+ID4gKwkJCQkJICAoNCAqIHZkc2NfY2ZnLT5iaXRzX3Blcl9jb21wb25lbnQgKyA0KQo+ ID4gPiA+ID4gKwkJCQkJICAtIDIpOwo+ID4gPiA+ID4gKwllbHNlCj4gPiA+ID4gPiArCQludW1f ZXh0cmFfbXV4X2JpdHMgPSAzICogdmRzY19jZmctPm11eF93b3JkX3NpemUgKwo+ID4gPiA+ID4g KwkJCSg0ICogdmRzY19jZmctPmJpdHNfcGVyX2NvbXBvbmVudCArIDQpICsKPiA+ID4gPiA+ICsJ CQkyICogKDQgKiB2ZHNjX2NmZy0+Yml0c19wZXJfY29tcG9uZW50KSAtIDI7Cj4gPiA+ID4gPiAr CS8qIE51bWJlciBvZiBiaXRzIGluIG9uZSBTbGljZSAqLwo+ID4gPiA+ID4gKwlzbGljZV9iaXRz ID0gOCAqIHZkc2NfY2ZnLT5zbGljZV9jaHVua19zaXplICogdmRzY19jZmctPnNsaWNlX2hlaWdo dDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJd2hpbGUgKChudW1fZXh0cmFfbXV4X2JpdHMgPiAw KSAmJgo+ID4gPiA+ID4gKwkgICAgICAgKChzbGljZV9iaXRzIC0gbnVtX2V4dHJhX211eF9iaXRz KSAlIHZkc2NfY2ZnLT5tdXhfd29yZF9zaXplKSkKPiA+ID4gPiA+ICsJCW51bV9leHRyYV9tdXhf Yml0cy0tOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoZ3JvdXBzX3Blcl9saW5lIDwgdmRz Y19jZmctPmluaXRpYWxfc2NhbGVfdmFsdWUgLSA4KQo+ID4gPiA+ID4gKwkJdmRzY19jZmctPmlu aXRpYWxfc2NhbGVfdmFsdWUgPSBncm91cHNfcGVyX2xpbmUgKyA4Owo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwkvKiBzY2FsZV9kZWNyZW1lbnRfaW50ZXJ2YWwgY2FsY3VsYXRpb24gYWNjb3JkaW5n IHRvIERTQyBzcGVjIDEuMTEgKi8KPiA+ID4gPiA+ICsJaWYgKHZkc2NfY2ZnLT5pbml0aWFsX3Nj YWxlX3ZhbHVlID4gOCkKPiA+ID4gPiA+ICsJCXZkc2NfY2ZnLT5zY2FsZV9kZWNyZW1lbnRfaW50 ZXJ2YWwgPSBncm91cHNfcGVyX2xpbmUgLwo+ID4gPiA+ID4gKwkJCSh2ZHNjX2NmZy0+aW5pdGlh bF9zY2FsZV92YWx1ZSAtIDgpOwo+ID4gPiA+ID4gKwllbHNlCj4gPiA+ID4gPiArCQl2ZHNjX2Nm Zy0+c2NhbGVfZGVjcmVtZW50X2ludGVydmFsID0gRFNDX1NDQUxFX0RFQ1JFTUVOVF9JTlRFUlZB TF9NQVg7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXZkc2NfY2ZnLT5maW5hbF9vZmZzZXQgPSB2 ZHNjX2NmZy0+cmNfbW9kZWxfc2l6ZSAtCj4gPiA+ID4gPiArCQkodmRzY19jZmctPmluaXRpYWxf eG1pdF9kZWxheSAqCj4gPiA+ID4gPiArCQkgdmRzY19jZmctPmJpdHNfcGVyX3BpeGVsICsgOCkg LyAxNiArIG51bV9leHRyYV9tdXhfYml0czsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKHZk c2NfY2ZnLT5maW5hbF9vZmZzZXQgPj0gdmRzY19jZmctPnJjX21vZGVsX3NpemUpIHsKPiA+ID4g PiA+ICsJCURSTV9ERUJVR19LTVMoIkZpbmFsT2ZzIDwgUmNNb2RlbFN6ZSBmb3IgdGhpcyBJbml0 aWFsWG1pdERlbGF5XG4iKTsKPiA+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4g Kwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZpbmFsX3NjYWxlID0gKHZkc2NfY2ZnLT5yY19t b2RlbF9zaXplICogOCkgLwo+ID4gPiA+ID4gKwkJKHZkc2NfY2ZnLT5yY19tb2RlbF9zaXplIC0g dmRzY19jZmctPmZpbmFsX29mZnNldCk7Cj4gPiA+ID4gPiArCWlmICh2ZHNjX2NmZy0+c2xpY2Vf aGVpZ2h0ID4gMSkKPiA+ID4gPiA+ICsJCS8qCj4gPiA+ID4gPiArCQkgKiBOZmxCcGdPZmZzZXQg aXMgMTYgYml0IHZhbHVlIHdpdGggMTEgZnJhY3Rpb25hbCBiaXRzCj4gPiA+ID4gPiArCQkgKiBo ZW5jZSB3ZSBtdWx0aXBseSBieSAyXjExIGZvciBwcmVzZXJ2aW5nIHRoZQo+ID4gPiA+ID4gKwkJ ICogZnJhY3Rpb25hbCBwYXJ0Cj4gPiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCXZkc2NfY2Zn LT5uZmxfYnBnX29mZnNldCA9IERJVl9ST1VORF9VUCgodmRzY19jZmctPmZpcnN0X2xpbmVfYnBn X29mZnNldCA8PCAxMSksCj4gPiA+ID4gPiArCQkJCQkJCSh2ZHNjX2NmZy0+c2xpY2VfaGVpZ2h0 IC0gMSkpOwo+ID4gPiA+ID4gKwllbHNlCj4gPiA+ID4gPiArCQl2ZHNjX2NmZy0+bmZsX2JwZ19v ZmZzZXQgPSAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiAyXjE2IC0gMSAqLwo+ID4gPiA+ ID4gKwlpZiAodmRzY19jZmctPm5mbF9icGdfb2Zmc2V0ID4gNjU1MzUpIHsKPiA+ID4gPiA+ICsJ CURSTV9ERUJVR19LTVMoIk5mbEJwZ09mZnNldCBpcyB0b28gbGFyZ2UgZm9yIHRoaXMgc2xpY2Ug aGVpZ2h0XG4iKTsKPiA+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gKwl9Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCS8qIE51bWJlciBvZiBncm91cHMgdXNlZCB0byBjb2RlIHRo ZSBlbnRpcmUgc2xpY2UgKi8KPiA+ID4gPiA+ICsJZ3JvdXBzX3RvdGFsID0gZ3JvdXBzX3Blcl9s aW5lICogdmRzY19jZmctPnNsaWNlX2hlaWdodDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyog c2xpY2VfYnBnX29mZnNldCBpcyAxNiBiaXQgdmFsdWUgd2l0aCAxMSBmcmFjdGlvbmFsIGJpdHMg Ki8KPiA+ID4gPiA+ICsJdmRzY19jZmctPnNsaWNlX2JwZ19vZmZzZXQgPSBESVZfUk9VTkRfVVAo KCh2ZHNjX2NmZy0+cmNfbW9kZWxfc2l6ZSAtCj4gPiA+ID4gPiArCQkJCQkJICAgIHZkc2NfY2Zn LT5pbml0aWFsX29mZnNldCArCj4gPiA+ID4gPiArCQkJCQkJICAgIG51bV9leHRyYV9tdXhfYml0 cykgPDwgMTEpLAo+ID4gPiA+ID4gKwkJCQkJCSAgZ3JvdXBzX3RvdGFsKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJaWYgKGZpbmFsX3NjYWxlID4gOSkgewo+ID4gPiA+ID4gKwkJLyoKPiA+ID4g PiA+ICsJCSAqIFNjYWxlSW5jcmVtZW50SW50ZXJ2YWwgPQo+ID4gPiA+ID4gKwkJICogZmluYWxv ZmZzZXQvKChOZmxCcGdPZmZzZXQgKyBTbGljZUJwZ09mZnNldCkqOChmaW5hbHNjYWxlIC0gMS4x MjUpKQo+ID4gPiA+ID4gKwkJICogYXMgKE5mbEJwZ09mZnNldCArIFNsaWNlQnBnT2Zmc2V0KSBo YXMgMTEgYml0IGZyYWN0aW9uYWwgdmFsdWUsCj4gPiA+ID4gPiArCQkgKiB3ZSBuZWVkIGRpdmlk ZSBieSAyXjExIGZyb20gcHN0RHNjQ2ZnIHZhbHVlcwo+ID4gPiA+ID4gKwkJICovCj4gPiA+ID4g PiArCQl2ZHNjX2NmZy0+c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID0KPiA+ID4gPiA+ICsJCQkJ KHZkc2NfY2ZnLT5maW5hbF9vZmZzZXQgKiAoMSA8PCAxMSkpIC8KPiA+ID4gPiA+ICsJCQkJKCh2 ZHNjX2NmZy0+bmZsX2JwZ19vZmZzZXQgKwo+ID4gPiA+ID4gKwkJCQl2ZHNjX2NmZy0+c2xpY2Vf YnBnX29mZnNldCkqCj4gPiA+ID4gPiArCQkJCShmaW5hbF9zY2FsZSAtIDkpKTsKPiA+ID4gPiA+ ICsJfSBlbHNlIHsKPiA+ID4gPiA+ICsJCS8qCj4gPiA+ID4gPiArCQkgKiBJZiBmaW5hbFNjYWxl VmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDksIGEgdmFsdWUgb2YgMCBzaG91bGQKPiA+ ID4gPiA+ICsJCSAqIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgc2NhbGUgaW5jcmVtZW50IGF0IHRo ZSBlbmQgb2YgdGhlIHNsaWNlCj4gPiA+ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCXZkc2NfY2Zn LT5zY2FsZV9pbmNyZW1lbnRfaW50ZXJ2YWwgPSAwOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCWlmICh2ZHNjX2NmZy0+c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID4gNjU1 MzUpIHsKPiA+ID4gPiA+ICsJCURSTV9ERUJVR19LTVMoIlNjYWxlSW5jcmVtZW50SW50ZXJ2YWwg aXMgbGFyZ2UgZm9yIHNsaWNlIGhlaWdodFxuIik7Cj4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZB TDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkg KiBEU0Mgc3BlYyBtZW50aW9ucyB0aGF0IGJpdHNfcGVyX3BpeGVsIHNwZWNpZmllcyB0aGUgdGFy Z2V0Cj4gPiA+ID4gPiArCSAqIGJpdHMvcGl4ZWwgKGJwcCkgcmF0ZSB0aGF0IGlzIHVzZWQgYnkg dGhlIGVuY29kZXIsCj4gPiA+ID4gPiArCSAqIGluIHN0ZXBzIG9mIDEvMTYgb2YgYSBiaXQgcGVy IHBpeGVsCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gKwlyYnNfbWluID0gdmRzY19jZmctPnJj X21vZGVsX3NpemUgLSB2ZHNjX2NmZy0+aW5pdGlhbF9vZmZzZXQgKwo+ID4gPiA+ID4gKwkJRElW X1JPVU5EX1VQKHZkc2NfY2ZnLT5pbml0aWFsX3htaXRfZGVsYXkgKgo+ID4gPiA+ID4gKwkJCSAg ICAgdmRzY19jZmctPmJpdHNfcGVyX3BpeGVsLCAxNikgKwo+ID4gPiA+ID4gKwkJZ3JvdXBzX3Bl cl9saW5lICogdmRzY19jZmctPmZpcnN0X2xpbmVfYnBnX29mZnNldDsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsJaHJkX2RlbGF5ID0gRElWX1JPVU5EX1VQKChyYnNfbWluICogMTYpLCB2ZHNjX2Nm Zy0+Yml0c19wZXJfcGl4ZWwpOwo+ID4gPiA+ID4gKwl2ZHNjX2NmZy0+cmNfYml0cyA9IChocmRf ZGVsYXkgKiB2ZHNjX2NmZy0+Yml0c19wZXJfcGl4ZWwpIC8gMTY7Cj4gPiA+ID4gPiArCXZkc2Nf Y2ZnLT5pbml0aWFsX2RlY19kZWxheSA9IGhyZF9kZWxheSAtIHZkc2NfY2ZnLT5pbml0aWFsX3ht aXRfZGVsYXk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ID4gK30K PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICBpbnQgaW50ZWxfZHBfY29tcHV0ZV9k c2NfcGFyYW1zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+ID4gPiAgCQkJCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiBA QCAtNDUxLDUgKzU3NSw4IEBAIGludCBpbnRlbF9kcF9jb21wdXRlX2RzY19wYXJhbXMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwKPiA+ID4gPiA+ICAJdmRzY19jZmctPmluaXRpYWxfc2NhbGVf dmFsdWUgPSAodmRzY19jZmctPnJjX21vZGVsX3NpemUgPDwgMykgLwo+ID4gPiA+ID4gIAkJKHZk c2NfY2ZnLT5yY19tb2RlbF9zaXplIC0gdmRzY19jZmctPmluaXRpYWxfb2Zmc2V0KTsKPiA+ID4g PiA+ICAKPiA+ID4gPiA+ICsJaWYgKGludGVsX2NvbXB1dGVfcmNfcGFyYW1ldGVycyh2ZHNjX2Nm ZykgPCAwKQo+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gCj4gPiA+ID4gT25l IHNob3VsZCBwcmV0dHkgbXVjaCBhbHdheXMgcGFzcyBvbiB0aGUgZXJybm8gcmF0aGVyIHRoYW4g aW52ZW50aW5nIGEKPiA+ID4gPiBuZXcgb25lIG9uIHRoZSBzcG90Lgo+ID4gPiAKPiA+ID4gQnV0 IGNvbXB1dGVfcmNfcGFyYW1ldGVycygpIGZ1bmN0aW9uIHJldHVybnMgRUlOVkFMIGV2ZXJ5d2hl cmUgZm9yIGVycm9yIGNhc2VzCj4gPiAKPiA+IFdoeSBzaG91bGQgSSBoYXZlIHRvIGtub3cgdGhh dD8KPiAKPiBBZnRlciBkb2luZyBlcnJubyAtLWxpc3QgYW5kIGxvb2tpbmcgYXQgdGhlIGF2YWls YWJsZSBlcnJub3MsIHRoZSBtb3N0IGxvZ2ljYWwgb25lcyB0byByZXR1cm4KPiBmcm9tIGludGVs X2NvbXB1dGVfcmNfcGFyYW1ldGVycyBpcyBFUkFOR0Ugc2luY2UgdGhlIGVycm9ycyBhcmUgYmVj YXVzZSB0aGUgcGFyYW1ldGVycyBvZiBvdXQgb2YgdmFsaWQgcmFuZ2UuCgpJIGd1ZXNzIGl0IGRv ZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvbmUgd2UgcGljayBoZXJlIHNpbmNlCml0IHdvbid0 IGdvIGFsbCB0aGUgd2F5IG91dCB0byB1c2Vyc3BhY2UgYW55d2F5LgoKPiBBbmQgaGVyZSBJIGNh biBqdXN0IGRvIHJldHVybiBpbnRlbF9jb21wdXRlX3JjX3BhcmFtZXRlcnMoKQoKWWVzLCB0aGF0 IHNlZW1zIGdvb2QuCgo+IAo+IERvZXMgdGhpcyBsb29rIGdvb2Q/Cj4gCj4gTWFuYXNpCj4gCj4g PiAKPiA+IC0tIAo+ID4gVmlsbGUgU3lyasOkbMOkCj4gPiBJbnRlbAoKLS0gClZpbGxlIFN5cmrD pGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK