From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lankhorst, Maarten" Subject: Re: [PATCH v6 8/8] drm/i915/gen9: WM memory bandwidth related workaround Date: Tue, 29 Nov 2016 15:10:37 +0000 Message-ID: <1480432236.20867.12.camel@intel.com> References: <20161124040135.5517-1-mahesh1.kumar@intel.com> <20161124040135.5517-9-mahesh1.kumar@intel.com> <1479991890.30963.19.camel@intel.com> <4ab3b016-a9b0-a76b-cc65-e68b5a028622@intel.com> <1480412769.29359.15.camel@intel.com> <7cfc68d2-299b-e3db-b753-e9f113b0c1fc@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0FF946E721 for ; Tue, 29 Nov 2016 15:12:20 +0000 (UTC) In-Reply-To: <7cfc68d2-299b-e3db-b753-e9f113b0c1fc@intel.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "intel-gfx@lists.freedesktop.org" , "Kumar, Mahesh1" Cc: "Zanoni, Paulo R" List-Id: intel-gfx@lists.freedesktop.org TWFoZXNoIEt1bWFyIHNjaHJlZWYgb3AgZGkgMjktMTEtMjAxNiBvbSAxOToxNyBbKzA1MzBdOg0K PiANCj4gT24gVHVlc2RheSAyOSBOb3ZlbWJlciAyMDE2IDAzOjE2IFBNLCBMYW5raG9yc3QsIE1h YXJ0ZW4gd3JvdGU6DQo+ID4gDQo+ID4gTWFoZXNoIEt1bWFyIHNjaHJlZWYgb3AgZGkgMjktMTEt MjAxNiBvbSAxMToxMiBbKzA1MzBdOg0KPiA+ID4gDQo+ID4gPiBIaSwNCj4gPiA+IA0KPiA+ID4g DQo+ID4gPiBPbiBUaHVyc2RheSAyNCBOb3ZlbWJlciAyMDE2IDA2OjIxIFBNLCBMYW5raG9yc3Qs IE1hYXJ0ZW4gd3JvdGU6DQo+ID4gPiA+IA0KPiA+ID4gPiBNYWhlc2ggS3VtYXIgc2NocmVlZiBv cCBkbyAyNC0xMS0yMDE2IG9tIDA5OjMxIFsrMDUzMF06DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4g VGhpcyBwYXRjaCBpbXBsZW1uZXRzIFdvcmthcml1bmRzIHJlbGF0ZWQgdG8gZGlzcGxheQ0KPiA+ ID4gPiA+IGFyYml0cmF0ZWQNCj4gPiA+ID4gPiBtZW1vcnkNCj4gPiA+ID4gPiBiYW5kd2lkdGgu IFRoZXNlIFdBIGFyZSBhcHBsaWNhYmUgZm9yIGFsbCBnZW4tOSBiYXNlZA0KPiA+ID4gPiA+IHBs YXRmb3Jtcy4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHYxOg0KPiA+ID4g PiA+IMKgwqDCoC0gUmViYXNlIG9uIHRvcCBvZiBQYXVsbydzIHBhdGNoIHNlcmllcw0KPiA+ID4g PiA+IENoYW5nZXMgc2luY2UgdjI6DQo+ID4gPiA+ID4gwqDCoMKgLSBBZGRyZXNzIHJldmlldyBj b21tZW50cw0KPiA+ID4gPiA+IMKgwqDCoC0gUmViYXNlL3Jld29yayBhcyBwZXIgb3RoZXIgcGF0 Y2ggY2hhbmdlcyBpbiBzZXJpZXMNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5 OiBNYWhlc2ggS3VtYXIgPG1haGVzaDEua3VtYXJAaW50ZWwuY29tPg0KPiA+ID4gPiA+IC0tLQ0K PiA+ID4gPiA+IMKgwqDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfMKgwqDCoDkg KysrDQo+ID4gPiA+ID4gwqDCoMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyB8IDE0 OQ0KPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0NCj4g PiA+ID4gPiDCoMKgwqAyIGZpbGVzIGNoYW5nZWQsIDE0OSBpbnNlcnRpb25zKCspLCA5IGRlbGV0 aW9ucygtKQ0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oDQo+ID4gPiA+ID4gaW5kZXggNGUyZjE3Zi4uMmI2NzNjNiAxMDA2NDQNCj4gPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiA+ID4gPiA+IEBAIC0xMTkzLDYgKzEx OTMsMTMgQEAgZW51bSBpbnRlbF9zYmlfZGVzdGluYXRpb24gew0KPiA+ID4gPiA+IMKgwqDCoAlT QklfTVBIWSwNCj4gPiA+ID4gPiDCoMKgwqB9Ow0KPiA+ID4gPiA+IMKgwqDCoA0KPiA+ID4gPiA+ ICsvKiBTS0wrIFdhdGVybWFyayBhcmJpdHJhdGVkIGRpc3BsYXkgYmFuZHdpZHRoIFdvcmthcm91 bmRzDQo+ID4gPiA+ID4gKi8NCj4gPiA+ID4gPiArZW51bSB3YXRlcm1hcmtfbWVtb3J5X3dhIHsN Cj4gPiA+ID4gPiArCVdBVEVSTUFSS19XQV9OT05FLA0KPiA+ID4gPiA+ICsJV0FURVJNQVJLX1dB X1hfVElMRUQsDQo+ID4gPiA+ID4gKwlXQVRFUk1BUktfV0FfWV9USUxFRCwNCj4gPiA+ID4gPiAr fTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gwqDCoMKgI2RlZmluZSBRVUlSS19QSVBFQV9GT1JD RSAoMTw8MCkNCj4gPiA+ID4gPiDCoMKgwqAjZGVmaW5lIFFVSVJLX0xWRFNfU1NDX0RJU0FCTEUg KDE8PDEpDQo+ID4gPiA+ID4gwqDCoMKgI2RlZmluZSBRVUlSS19JTlZFUlRfQlJJR0hUTkVTUyAo MTw8MikNCj4gPiA+ID4gPiBAQCAtMTc2NCw2ICsxNzcxLDggQEAgc3RydWN0IHNrbF9kZGJfYWxs b2NhdGlvbiB7DQo+ID4gPiA+ID4gwqDCoMKgDQo+ID4gPiA+ID4gwqDCoMKgc3RydWN0IHNrbF93 bV92YWx1ZXMgew0KPiA+ID4gPiA+IMKgwqDCoAl1bnNpZ25lZCBkaXJ0eV9waXBlczsNCj4gPiA+ ID4gPiArCS8qIGFueSBXYXRlck1hcmsgbWVtb3J5IHdvcmthcm91bmQgUmVxdWlyZWQgKi8NCj4g PiA+ID4gPiArCWVudW0gd2F0ZXJtYXJrX21lbW9yeV93YSBtZW1fd2E7DQo+ID4gPiA+ID4gwqDC oMKgCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gZGRiOw0KPiA+ID4gPiA+IMKgwqDCoH07DQo+ ID4gPiA+ID4gwqDCoMKgDQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMNCj4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Bt LmMNCj4gPiA+ID4gPiBpbmRleCAzZTJkZDhmLi41NDdiYmRhIDEwMDY0NA0KPiA+ID4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMNCj4gPiA+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jDQo+ID4gPiA+ID4gQEAgLTI4ODksMTEgKzI4ODks NyBAQCBza2xfd21fcGxhbmVfaWQoY29uc3Qgc3RydWN0DQo+ID4gPiA+ID4gaW50ZWxfcGxhbmUN Cj4gPiA+ID4gPiAqcGxhbmUpDQo+ID4gPiA+ID4gwqDCoMKgCX0NCj4gPiA+ID4gPiDCoMKgwqB9 DQo+ID4gPiA+ID4gwqDCoMKgDQo+ID4gPiA+ID4gLS8qDQo+ID4gPiA+ID4gLSAqIEZJWE1FOiBX ZSBzdGlsbCBkb24ndCBoYXZlIHRoZSBwcm9wZXIgY29kZSBkZXRlY3QgaWYgd2UNCj4gPiA+ID4g PiBuZWVkDQo+ID4gPiA+ID4gdG8NCj4gPiA+ID4gPiBhcHBseSB0aGUgV0EsDQo+ID4gPiA+ID4g LSAqIHNvIGFzc3VtZSB3ZSdsbCBhbHdheXMgbmVlZCBpdCBpbiBvcmRlciB0byBhdm9pZA0KPiA+ ID4gPiA+IHVuZGVycnVucy4NCj4gPiA+ID4gPiAtICovDQo+ID4gPiA+ID4gLXN0YXRpYyBib29s IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZQ0KPiA+ID4g PiA+ICpzdGF0ZSkNCj4gPiA+ID4gPiArc3RhdGljIGJvb2wgaW50ZWxfbmVlZHNfbWVtb3J5X2J3 X3dhKHN0cnVjdA0KPiA+ID4gPiA+IGludGVsX2F0b21pY19zdGF0ZQ0KPiA+ID4gPiA+ICpzdGF0 ZSkNCj4gPiA+ID4gPiDCoMKgwqB7DQo+ID4gPiA+ID4gwqDCoMKgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtDQo+ID4gPiA+ID4gPiANCj4gPiA+ID4g PiA+IGJhc2UuZGV2KTsNCj4gPiA+ID4gPiDCoMKgwqANCj4gPiA+ID4gPiBAQCAtMzA2Nyw3ICsz MDYzLDcgQEAgYm9vbCBpbnRlbF9jYW5fZW5hYmxlX3NhZ3Yoc3RydWN0DQo+ID4gPiA+ID4gZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ID4gPiA+ID4gwqDCoMKgDQo+ID4gPiA+ID4gwqDCoMKg CQlsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5W2xldmVsXTsNCj4gPiA+ID4gPiDC oMKgwqANCj4gPiA+ID4gPiAtCQlpZiAoc2tsX25lZWRzX21lbW9yeV9id193YShpbnRlbF9zdGF0 ZSkgJiYNCj4gPiA+ID4gPiArCQlpZiAoaW50ZWxfbmVlZHNfbWVtb3J5X2J3X3dhKGludGVsX3N0 YXRlKSAmJg0KPiA+ID4gPiA+IMKgwqDCoAkJwqDCoMKgwqBwbGFuZS0+YmFzZS5zdGF0ZS0+ZmIt Pm1vZGlmaWVyID09DQo+ID4gPiA+ID4gwqDCoMKgCQnCoMKgwqDCoEk5MTVfRk9STUFUX01PRF9Y X1RJTEVEKQ0KPiA+ID4gPiA+IMKgwqDCoAkJCWxhdGVuY3kgKz0gMTU7DQo+ID4gPiA+ID4gQEAg LTM1OTcsNyArMzU5Myw3IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3QN Cj4gPiA+ID4gPiBzdHJ1Y3QNCj4gPiA+ID4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwN Cj4gPiA+ID4gPiDCoMKgwqAJdWludDMyX3QgeV9taW5fc2NhbmxpbmVzOw0KPiA+ID4gPiA+IMKg wqDCoAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9DQo+ID4gPiA+ID4gwqDCoMKg CQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3N0YXRlLT5iYXNlLnN0YXRlKTsNCj4gPiA+ID4gPiAt CWJvb2wgYXBwbHlfbWVtb3J5X2J3X3dhID0NCj4gPiA+ID4gPiBza2xfbmVlZHNfbWVtb3J5X2J3 X3dhKHN0YXRlKTsNCj4gPiA+ID4gPiArCWVudW0gd2F0ZXJtYXJrX21lbW9yeV93YSBtZW1fd2E7 DQo+ID4gPiA+ID4gwqDCoMKgCWJvb2wgeV90aWxlZCwgeF90aWxlZDsNCj4gPiA+ID4gPiDCoMKg wqANCj4gPiA+ID4gPiDCoMKgwqAJaWYgKGxhdGVuY3kgPT0gMCB8fCAhY3N0YXRlLT5iYXNlLmFj dGl2ZSB8fA0KPiA+ID4gPiA+ICFpbnRlbF9wc3RhdGUtDQo+ID4gPiA+ID4gPiANCj4gPiA+ID4g PiA+IGJhc2UudmlzaWJsZSkgew0KPiA+ID4gPiA+IEBAIC0zNjEzLDcgKzM2MDksOCBAQCBzdGF0 aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0DQo+ID4gPiA+ID4gc3RydWN0DQo+ID4g PiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ID4gPiA+ID4gwqDCoMKgCWlmIChJ U19LQUJZTEFLRShkZXZfcHJpdikgJiYgZGV2X3ByaXYtDQo+ID4gPiA+ID4gPmlwY19lbmFibGVk KQ0KPiA+ID4gPiA+IMKgwqDCoAkJbGF0ZW5jeSArPSA0Ow0KPiA+ID4gPiA+IMKgwqDCoA0KPiA+ ID4gPiA+IC0JaWYgKGFwcGx5X21lbW9yeV9id193YSAmJiB4X3RpbGVkKQ0KPiA+ID4gPiA+ICsJ bWVtX3dhID0gc3RhdGUtPndtX3Jlc3VsdHMubWVtX3dhOw0KPiA+ID4gPiA+ICsJaWYgKG1lbV93 YSAhPSBXQVRFUk1BUktfV0FfTk9ORSAmJiB4X3RpbGVkKQ0KPiA+ID4gPiA+IMKgwqDCoAkJbGF0 ZW5jeSArPSAxNTsNCj4gPiA+ID4gPiDCoMKgwqANCj4gPiA+ID4gPiDCoMKgwqAJd2lkdGggPSBk cm1fcmVjdF93aWR0aCgmaW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4NCj4gPiA+ID4gPiAxNjsN Cj4gPiA+ID4gPiBAQCAtMzY0OCw3ICszNjQ1LDcgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9w bGFuZV93bShjb25zdA0KPiA+ID4gPiA+IHN0cnVjdA0KPiA+ID4gPiA+IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LA0KPiA+ID4gPiA+IMKgwqDCoAkJeV9taW5fc2NhbmxpbmVzID0gNDsNCj4g PiA+ID4gPiDCoMKgwqAJfQ0KPiA+ID4gPiA+IMKgwqDCoA0KPiA+ID4gPiA+IC0JaWYgKGFwcGx5 X21lbW9yeV9id193YSkNCj4gPiA+ID4gPiArCWlmIChtZW1fd2EgPT0gV0FURVJNQVJLX1dBX1lf VElMRUQpDQo+ID4gPiA+ID4gwqDCoMKgCQl5X21pbl9zY2FubGluZXMgKj0gMjsNCj4gPiA+ID4g PiDCoMKgwqANCj4gPiA+ID4gPiDCoMKgwqAJcGxhbmVfYnl0ZXNfcGVyX2xpbmUgPSB3aWR0aCAq IGNwcDsNCj4gPiA+ID4gPiBAQCAtNDA3Nyw2ICs0MDc0LDE1IEBAIHNrbF9jb21wdXRlX2RkYihz dHJ1Y3QNCj4gPiA+ID4gPiBkcm1fYXRvbWljX3N0YXRlDQo+ID4gPiA+ID4gKnN0YXRlKQ0KPiA+ ID4gPiA+IMKgwqDCoAl9DQo+ID4gPiA+ID4gwqDCoMKgDQo+ID4gPiA+ID4gwqDCoMKgCS8qDQo+ ID4gPiA+ID4gKwnCoCogSWYgV2F0ZXJtYXJrIHdvcmthcm91bmQgaXMgY2hhbmdlZCB3ZSBuZWVk IHRvDQo+ID4gPiA+ID4gcmVjYWxjdWxhdGUNCj4gPiA+ID4gPiArCcKgKiB3YXRlcm1hcmsgdmFs dWVzIGZvciBhbGwgYWN0aXZlIHBpcGVzDQo+ID4gPiA+ID4gKwnCoCovDQo+ID4gPiA+ID4gKwlp ZiAoaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMubWVtX3dhICE9IGRldl9wcml2LQ0KPiA+ID4gPiA+ ID4gDQo+ID4gPiA+ID4gPiB3bS5za2xfaHcubWVtX3dhKSB7DQo+ID4gPiA+ID4gKwkJcmVhbGxv Y19waXBlcyA9IH4wOw0KPiA+ID4gPiA+ICsJCWludGVsX3N0YXRlLT53bV9yZXN1bHRzLmRpcnR5 X3BpcGVzID0gfjA7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJLyoN Cj4gPiA+ID4gPiDCoMKgwqAJwqAqIFdlJ3JlIG5vdCByZWNvbXB1dGluZyBmb3IgdGhlIHBpcGVz IG5vdA0KPiA+ID4gPiA+IGluY2x1ZGVkIGluDQo+ID4gPiA+ID4gdGhlDQo+ID4gPiA+ID4gY29t bWl0LCBzbw0KPiA+ID4gPiA+IMKgwqDCoAnCoCogbWFrZSBzdXJlIHdlIHN0YXJ0IHdpdGggdGhl IGN1cnJlbnQgc3RhdGUuDQo+ID4gPiA+ID4gwqDCoMKgCcKgKi8NCj4gPiA+ID4gPiBAQCAtNDEw Miw2ICs0MTA4LDEyOSBAQCBza2xfY29tcHV0ZV9kZGIoc3RydWN0DQo+ID4gPiA+ID4gZHJtX2F0 b21pY19zdGF0ZQ0KPiA+ID4gPiA+ICpzdGF0ZSkNCj4gPiA+ID4gPiDCoMKgwqB9DQo+ID4gPiA+ ID4gwqDCoMKgDQo+ID4gPiA+ID4gwqDCoMKgc3RhdGljIHZvaWQNCj4gPiA+ID4gPiArc2tsX2Nv bXB1dGVfbWVtb3J5X2JhbmR3aWR0aF93bV93YShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQ0KPiA+ ID4gPiA+ICpzdGF0ZSkNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IHN0YXRlLT5kZXY7DQo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7DQo+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YzsNCj4gPiA+ID4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50 ZWxfcHN0YXRlOw0KPiA+ID4gPiA+ICsJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxf c3RhdGUgPQ0KPiA+ID4gPiA+IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7DQo+ID4gPiA+ ID4gKwlzdHJ1Y3QgbWVtZGV2X2luZm8gKm1lbWRldl9pbmZvID0gJmRldl9wcml2LQ0KPiA+ID4g PiA+ID4gDQo+ID4gPiA+ID4gPiBtZW1kZXZfaW5mbzsNCj4gPiA+ID4gPiArCWludCBudW1fYWN0 aXZlX3BpcGVzOw0KPiA+ID4gPiA+ICsJdWludDMyX3QgbWF4X3BpcGVfYndfa2JwcywgdG90YWxf cGlwZV9id19rYnBzOw0KPiA+ID4gPiA+ICsJaW50IGRpc3BsYXlfYndfcGVyY2VudGFnZTsNCj4g PiA+ID4gPiArCWJvb2wgeV90aWxlX2VuYWJsZWQgPSBmYWxzZTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwlpZiAoIWludGVsX25lZWRzX21lbW9yeV9id193YShpbnRlbF9zdGF0ZSkpIHsNCj4g PiA+ID4gPiArCQlpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5tZW1fd2EgPQ0KPiA+ID4gPiA+IFdB VEVSTUFSS19XQV9OT05FOw0KPiA+ID4gPiA+ICsJCXJldHVybjsNCj4gPiA+ID4gPiArCX0NCj4g PiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAoIW1lbWRldl9pbmZvLT52YWxpZCkNCj4gPiA+ID4g PiArCQlnb3RvIGV4aXQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJbWF4X3BpcGVfYndfa2Jw cyA9IDA7DQo+ID4gPiA+ID4gKwludW1fYWN0aXZlX3BpcGVzID0gMDsNCj4gPiA+ID4gPiArCWZv cl9lYWNoX2ludGVsX2NydGMoZGV2LCBpbnRlbF9jcnRjKSB7DQo+ID4gPiA+ID4gKwkJc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZTsNCj4gPiA+ID4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lOw0KPiA+ID4gPiA+ICsJCWludCBudW1fYWN0aXZlX3BsYW5lczsNCj4gPiA+ID4g PiArCQl1aW50MzJfdMKgwqBtYXhfcGxhbmVfYndfa2JwcywgcGlwZV9id19rYnBzOw0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArCQkvKg0KPiA+ID4gPiA+ICsJCcKgKiBJZiBDUlRDIGlzIHBhcnQg b2YgY3VycmVudCBhdG9taWMgY29tbWl0LA0KPiA+ID4gPiA+IGdldA0KPiA+ID4gPiA+IGNydGMg c3RhdGUgZnJvbQ0KPiA+ID4gPiA+ICsJCcKgKiBleGlzdGluZyBDUlRDIHN0YXRlLiBlbHNlIHRh a2UgdGhlIGNhY2hlZA0KPiA+ID4gPiA+IENSVEMNCj4gPiA+ID4gPiBzdGF0ZQ0KPiA+ID4gPiA+ ICsJCcKgKi8NCj4gPiA+ID4gPiArCQljc3RhdGUgPSBOVUxMOw0KPiA+ID4gPiA+ICsJCWlmIChz dGF0ZSkNCj4gPiA+ID4gPiArCQkJY3N0YXRlID0NCj4gPiA+ID4gPiBpbnRlbF9hdG9taWNfZ2V0 X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUsDQo+ID4gPiA+ID4gKwkJCQkJaW50ZWxfY3J0Yyk7 DQo+ID4gPiA+ID4gKwkJaWYgKCFjc3RhdGUpDQo+ID4gPiA+ID4gKwkJCWNzdGF0ZSA9DQo+ID4g PiA+ID4gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjLQ0KPiA+ID4gPiA+ID4gDQo+ID4g PiA+ID4gPiBiYXNlLnN0YXRlKTsNCj4gPiA+ID4gVGhpcyBpcyByZWFsbHkgcmVhbGx5IG5vdCBh bGxvd2VkLiBJZiB5b3Ugd2FudCB0byBhY2Nlc3MNCj4gPiA+ID4gY3J0Yy0+c3RhdGUsIHlvdSBu ZWVkIHRvIGdldCB0aGUgc3RhdGUuDQo+ID4gPiA+IA0KPiA+ID4gPiBTaW5jZSBhIHcvYSBmb3Jj ZXMgYSBmdWxsIHJlY2FsY3VsYXRpb24sIGJlc3QgeW91IGNhbiBkbyBpcyBwdXQNCj4gPiA+ID4g dGhlDQo+ID4gPiA+IHBlcg0KPiA+ID4gPiBwaXBlIHN0YXR1cyBpbiBjcnRjX3N0YXRlLT53bS5z a2wgYXMgd2VsbC4gSWYgaXQgY2hhbmdlcyB5b3UNCj4gPiA+ID4gY291bGQNCj4gPiA+ID4gYWRk DQo+ID4gPiA+IGFsbCBvdGhlciBwaXBlcy4NCj4gPiA+IEkgcmVhbGx5IGRvbid0IHdhbnQgdG8g YWRkIGFsbCBwaXBlcyBpbiAic3RhdGUiIHVudGlsIHRoYXQgaXMNCj4gPiA+IG5lY2Vzc2FyeQ0K PiA+ID4gb3RoZXJ3aXNlIGl0J2xsIG1ha2Ugb3VyIGNvbW1pdCBodWdlLCB0aGF0J3Mgd2h5IGdl dHRpbmcgdGhlDQo+ID4gPiBjYWNoZWQNCj4gPiA+IHN0YXRlLg0KPiA+ID4gU2FtZSBnb2VzIGZv ciBwbGFuZS4gTGF0ZXIgaWYgdy9hIGNoYW5nZXMgdGhlbiBJJ23CoMKgYWRkaW5nIGFsbA0KPiA+ ID4gdGhlDQo+ID4gPiBDUlRDJ3MgaW4gcmVsbG9jX3BpcGVzIG1hc2suDQo+ID4gPiANCj4gPiA+ IAlpZiAoaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMubWVtX3dhICE9IGRldl9wcml2LQ0KPiA+ID4g PiANCj4gPiA+ID4gd20uc2tsX2h3Lm1lbV93YSkNCj4gPiA+IElmIEkgaG9sZCB0aGUgY3J0Yy0+ bXV0ZXggb3IgcGxhbmUtPm11dGV4IGxvY2ssIEl0IG1heSBjYXVzZQ0KPiA+ID4gZGVhZGxvY2sN Cj4gPiA+IHdpdGggb3RoZXIgY29tbWl0cy4NCj4gPiA+IEkgY2FuIGtlZXAgYSBjYWNoZWQgY29w eSBvZiBwbGFuZSBtZW1vcnkgYmFuZHdpZHRoIHJlcXVpcmVtZW50IGluDQo+ID4gPiAiZGV2X3By aXYtPndtLnNrbF9odyIsIGJ1dCBhZ2FpbiBpZiB0aGVyZSBhcmUgdHdvIHBhcmFsbGVsDQo+ID4g PiBjb21taXRzDQo+ID4gPiBpdA0KPiA+ID4gbWF5IGNhdXNlIHJhY2UuDQo+ID4gPiANCj4gPiA+ IENhbiB5b3UgcGxlYXNlIHN1Z2dlc3Qgd2hhdCBpcyB0aGUgY29ycmVjdCB3YXkgb2YgZ2V0dGlu Zw0KPiA+ID4gcGxhbmUvY3J0Yw0KPiA+ID4gc3RhdGUgZHVyaW5nIGNoZWNrIHBoYXNlIHdpdGhv dXQgaGF2ZSB0byBhY3R1YWxseSBjb21taXQgdGhlbQ0KPiA+ID4gKGFkZA0KPiA+ID4gaW4NCj4g PiA+IGdsb2JhbC1zdGF0ZSksDQo+ID4gPiBJZiBhbnkgc3VjaCB0aGluZyBpcyBhdmFpbGFibGUg aW4gYXRvbWljIGZyYW1ld29yaz8NCj4gPiBIb3cgb2Z0ZW4gd2lsbCB0aGUgd29ya2Fyb3VuZCBz dGF0dXMgY2hhbmdlIGluIHByYWN0aWNlPw0KPiBJbiBMaW51eCB1c2UtY2FzZSBzdGF0dXMgY2hh bmdlcyB2ZXJ5IHJhcmVseSwgSWYgd2UgY29ubmVjdCBtdWx0aXBsZcKgDQo+IGhpZ2ggcmVzb2x1 dGlvbiBkaXNwbGF5ICYgb3VyIERSQU0ncyBiYW5kd2lkdGggaXMgbGVzcyB3ZSBtYXkgaGF2ZQ0K PiB0b8KgDQo+IGVuYWJsZSB0aGUgV0EuDQo+ICYgaXQnbGwgcmVtYWluIHRoZXJlIHVudGlsIGFu eSBkaXNwbGF5IGluIHVucGx1Z2dlZCBPUiBhbnkgbW9kZXNldA0KPiB3aXRowqANCj4gbG93ZXIg cmVzb2x1dGlvbi4NCj4gT24gdGhlIG90aGVyIGhhbmQsIEluIE9TIHdpdGggbXVsdGktcGxhbmUg ZW5hYmxlZCwgV0EgbWF5IGNoYW5nZSBpZg0KPiBhbnnCoA0KPiBwbGFuZSBpcyBlbmFibGVkL2Rp c2FibGVkIChiYXNlZCBvbiB0b3RhbCBiYW5kd2lkdGggcmVxdWlyZW1lbnQgZm9yDQo+IGRpc3Bs YXkpDQo+ID4gDQo+ID4gWW91IGNvdWxkIGRvIHNhbWUgYXMgYWN0aXZlX2NydGNzLCBwcm90ZWN0 IGNoYW5naW5nIHRoZSB3b3JrYXJvdW5kDQo+ID4gY3VycmVudCBjcnRjJ3Mgd29ya2Fyb3VuZCBt b2RlIGluIGRldl9wcml2LT53bS5za2wud2Ffc3RhdGVbcGlwZV0NCj4gPiB3aXRoDQo+ID4gY29u bmVjdGlvbl9tdXRleC4gSWYgdGhpcyBtZWFucyBjaGFuZ2luZyB0aGF0IHRoZSBnbG9iYWwgd29y a2Fyb3VuZA0KPiA+IHNldHRpbmcgaXMgY2hhbmdlZCwgdGhlbiBhbHNvIGFjcXVpcmUgYWxsIG90 aGVyIGNydGMgc3RhdGVzLg0KPiBUaGlzIGlzIG5vdCBwZXItQ1JUQyBXQSwgdGhpcyBpcyBjb21w bGV0ZSBkaXNwbGF5LXN5c3RlbSBsZXZlbCBXQS4gJsKgDQo+IGRlcGVuZHMgdXBvbiB0b3RhbCBt ZW1vcnkgcmVxdWlyZW1lbnQgb2YgZGlzcGxheS4NCj4gQXMgeW91IHN1Z2dlc3RlZCBJIGNhbiBr ZWVwIHRoZSBzdGF0dXMoYmFuZHdpZHRoIHJlcXVpcmVtZW50KSBmb3INCj4gZWFjaMKgDQo+IHBp cGUgaW4gZGV2X3ByaXYtPndtLnNrbC53YV9zdGF0ZS9iYW5kd2lkdGhbcGlwZV0sIGFuZCBhY2Nl c3MgaXQNCj4gd2l0aMKgDQo+IHNvbWUgbXV0ZXguDQo+IElzIGNvbm5lY3Rpb24gbXV0ZXggaXMg cmlnaHQgbXV0ZXggdG8gaG9sZCwgd2hhdCBhYm91dCB3bV9tdXRleD8NCg0KSXQncyBuYXN0eSB0 byBkbyBzbywgYnV0IGl0IHdvdWxkIHdvcmsuIGNvbm5lY3Rpb25fbXV0ZXggaXMgYSB3d19tdXRl eC4NCkJ1dCBJIGRvbid0IHRoaW5rIHRoaXMgc2l0dWF0aW9uIHdpbGwgaGFwcGVuIG9mdGVuLCBz byBpZiB0aGUgdy9hIGZvcg0KY3VycmVudCBjcnRjIGNoYW5nZXMsIHdvbid0IGl0IGJlIGJldHRl ciB0byBqdXN0IGdyYWIgYWxsIHN0YXRlcw0KYW55d2F5PyBJIGRvbid0IHRoaW5rIHRoZSBvcHRp bWl6YXRpb24gaXMgd29ydGggdGhlIGNvbXBsZXhpdHkgaXQNCmludHJvZHVjZXMgeW91IHJ1biB0 aGUgbnVtYmVycyBpbiBub3JtYWwgdXNlLg0KDQp+TWFhcnRlbg0KLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkludGVs IEludGVybmF0aW9uYWwgQi5WLgpSZWdpc3RlcmVkIGluIFRoZSBOZXRoZXJsYW5kcyB1bmRlciBu dW1iZXIgMzQwOTg1MzUKU3RhdHV0b3J5IHNlYXQ6IEhhYXJsZW1tZXJtZWVyClJlZ2lzdGVyZWQg YWRkcmVzczogQ2Fwcm9uaWxhYW4gMzcsIDExMTlORyBTY2hpcGhvbC1SaWprCgpUaGlzIGUtbWFp bCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNvbmZpZGVudGlhbCBtYXRlcmlhbCBm b3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQocykuIEFueSByZXZpZXcg b3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBJZiB5b3Ug YXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVhc2UgY29udGFjdCB0aGUgc2VuZGVy IGFuZCBkZWxldGUgYWxsIGNvcGllcy4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==