From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] drm/i915/icl: Fix context RPCS programming Date: Mon, 3 Sep 2018 12:11:50 +0100 Message-ID: <4c3a8fbf-7575-d2c8-6728-4720bfdb2cb6@linux.intel.com> References: <20180831115334.2274-1-tvrtko.ursulin@linux.intel.com> <21570b44-22cb-e65a-ca4f-34ef41e2f719@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 442688991C for ; Mon, 3 Sep 2018 11:12:04 +0000 (UTC) In-Reply-To: <21570b44-22cb-e65a-ca4f-34ef41e2f719@intel.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin , Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDMxLzA4LzIwMTggMTc6NTIsIExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+IE9uIDMxLzA4 LzIwMTggMTI6NTMsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+PiBGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+Pgo+PiBUaGVyZSBhcmUgdHdvIGlzc3VlcyB3 aXRoIHRoZSBjdXJyZW50IFJQQ1MgcHJvZ3JhbW1pbmcgZm9yIEljZWxha2U6Cj4+Cj4+IEV4cGFu c2lvbiBvZiB0aGUgc2xpY2UgY291bnQgYml0ZmllbGQgaGFzIGJlZW4gbWlzc2VkLCBhcyB3ZWxs IGFzIHRoZQo+PiByZXF1aXJlZCBwcm9ncmFtbWluZyB3b3JrYXJvdW5kIGZvciB0aGUgc3Vic2xp Y2UgY291bnQgYml0ZmllbGQgc2l6ZQo+PiBsaW1pdGF0aW9uLgo+Pgo+PiAxKQo+Pgo+PiBCaXRm aWVsZCB3aWR0aCBmb3IgY29uZmlndXJpbmcgdGhlIGFjdGl2ZSBzbGljZSBjb3VudCBoYXMgZ3Jv d24gc28gd2UgCj4+IG5lZWQKPj4gdG8gcHJvZ3JhbSB0aGUgR0VOOF9SX1BXUl9DTEtfU1RBVEUg YWNjb3JkaW5nbHkuCj4+Cj4+IEN1cnJlbnQgY29kZSB3YXMgYWx3YXlzIHJlcXVlc3RpbmcgZWln aHQgdGltZXMgdGhlIG51bWJlciBvZiBzbGljZXMgKGR1ZQo+PiB3cml0dGluZyB0byBhIGJpdGZp ZWxkIHN0YXJ0aW5nIHRocmVlIGJpdHMgaGlnaGVyIHRoYW4gaXQgc2hvdWxkKS4gVGhlc2UKPj4g cmVxdWVzdHMgd2VyZSBsdWNraWx5IGEpIGNhcHBlZCBieSB0aGUgaGFyZHdhcmUgdG8gdGhlIGF2 YWlsYWJsZSAKPj4gbnVtYmVyIG9mCj4+IHNsaWNlcywgYW5kIGIpIHdlIGhhdmVuJ3QgeWV0IGV4 cG9ydGVkIHRoZSBjb2RlIHRvIGFzayBmb3IgcmVkdWNlZCBzbGljZQo+PiBjb25maWd1cmF0aW9u cy4KPj4KPj4gRHVlIGJvdGggb2YgdGhlIGFib3ZlIHRoZXJlIHdhcyBubyBpbXBhY3QgZnJvbSB0 aGlzIGluY29ycmVjdCBwcm9ncmFtbWluZwo+PiBidXQgd2Ugc2hvdWxkIHN0aWxsIGZpeCBpdC4K Pj4KPj4gMikKPj4KPj4gRHVlIHN1YnNsaWNlIGNvdW50IGJpdGZpZWxkIGJlaW5nIG9ubHkgdGhy ZWUgYml0cyB3aWRlIGFuZCBmdXJ0aGVybW9yZQo+PiBjYXBwZWQgdG8gYSBtYXhpbXVtIGRvY3Vt ZW50ZWQgdmFsdWUgb2YgZm91ciwgc3BlY2lhbCBwcm9ncmFtbWluZwo+PiB3b3JrYXJvdW5kIGlz IG5lZWRlZCB0byBlbmFibGUgbW9yZSB0aGFuIGZvdXIgc3Vic2xpY2VzLgo+Pgo+PiBXaXRoIHRo aXMgcHJvZ3JhbW1pbmcgZHJpdmVyIGhhcyB0byBjb25zaWRlciB0aGUgR1QgY29uZmlndXJhdGlv biBhcwo+PiAyeDR4OCwgd2hpbGUgdGhlIGhhcmR3YXJlIGludGVybmFsbHkgdHJhbnNsYXRlcyB0 aGlzIHRvIDF4OHg4Lgo+Pgo+PiBBIGxpbWl0YXRpb24gc3RlbW1pbmcgZnJvbSB0aGlzIGlzIHRo YXQgZWl0aGVyIGEgc3Vic2xpY2UgY291bnQgYmV0d2Vlbgo+PiBvbmUgYW5kIGZvdXIgY2FuIGJl IHNlbGVjdGVkLCBvciBhIHN1YnNsaWNlIGNvdW50IGVxdWFsaW5nIHRoZSB0b3RhbAo+PiBudW1i ZXIgb2Ygc3Vic2xpY2VzIGluIGFsbCBzZWxlY3RlZCBzbGljZXMuIEluIG90aGVyIHdvcmRzLCBv ZGQgc3Vic2xpY2UKPj4gY291bnRzIGdyZWF0ZXIgdGhhbiBmb3VyIGFyZSBpbXBvc3NpYmxlLCBh cyBhcmUgb2RkIHN1YnNsaWNlIGNvdW50cwo+PiBncmVhdGVyIHRoYW4gYSBzaW5nbGUgc2xpY2Ug c3Vic2xpY2UgY291bnQuCj4+Cj4+IFRoaXMgYWxzbyBoYWQgbm8gaW1wYWN0IGluIHRoZSBjdXJy ZW50IGNvZGUgYmFzZSBkdWUgYnJlYWthZ2UgZnJvbSAxKQo+PiBhbHdheXMgcmVxZXN0aW5nIG1v cmUgdGhhbiBvbmUgc2xpY2UuCj4+Cj4+IFdoaWxlIGZpeGluZyB0aGlzIHdlIGFsc28gYWRkIHNv bWUgYXNzZXJ0cyB0byBmbGFnIHVwIGFueSBmdXR1cmUgYml0ZmllbGQKPj4gb3ZlcmZsb3dzLgo+ Pgo+PiBTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgo+PiBCc3BlYzogMTIyNDcKPj4gUmVwb3J0ZWQtYnk6IHRvbnkueWVAaW50ZWwuY29tCj4+ IFN1Z2dlc3RlZC1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50 ZWwuY29tPgo+PiBDYzogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50 ZWwuY29tPgo+PiBDYzogdG9ueS55ZUBpbnRlbC5jb20KPj4gQ2M6IE1pa2EgS3VvcHBhbGEgPG1p a2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgo+PiAtLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaMKgIHzCoCAyICsKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMgfCA4OSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+PiDCoCAyIGZp bGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAKPj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4+IGluZGV4IGYyMzIxNzg1Y2JkNi4uMDliYzhlNzMwZWUx IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gQEAgLTM0NCw2ICszNDQsOCBAQCBz dGF0aWMgaW5saW5lIGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IAo+PiByZWcp Cj4+IMKgICNkZWZpbmXCoMKgIEdFTjhfUlBDU19TX0NOVF9FTkFCTEXCoMKgwqAgKDEgPDwgMTgp Cj4+IMKgICNkZWZpbmXCoMKgIEdFTjhfUlBDU19TX0NOVF9TSElGVMKgwqDCoMKgwqDCoMKgIDE1 Cj4+IMKgICNkZWZpbmXCoMKgIEdFTjhfUlBDU19TX0NOVF9NQVNLwqDCoMKgwqDCoMKgwqAgKDB4 NyA8PCBHRU44X1JQQ1NfU19DTlRfU0hJRlQpCj4+ICsjZGVmaW5lwqDCoCBHRU4xMV9SUENTX1Nf Q05UX1NISUZUwqDCoMKgIDEyCj4+ICsjZGVmaW5lwqDCoCBHRU4xMV9SUENTX1NfQ05UX01BU0vC oMKgwqDCoMKgwqDCoCAoMHgzZiA8PCBHRU4xMV9SUENTX1NfQ05UX1NISUZUKQo+PiDCoCAjZGVm aW5lwqDCoCBHRU44X1JQQ1NfU1NfQ05UX0VOQUJMRcKgwqDCoCAoMSA8PCAxMSkKPj4gwqAgI2Rl ZmluZcKgwqAgR0VOOF9SUENTX1NTX0NOVF9TSElGVMKgwqDCoCA4Cj4+IMKgICNkZWZpbmXCoMKg IEdFTjhfUlBDU19TU19DTlRfTUFTS8KgwqDCoMKgwqDCoMKgICgweDcgPDwgR0VOOF9SUENTX1NT X0NOVF9TSElGVCkKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+IGluZGV4IGY4Y2Vi OWM5OWRkNi4uMzIzYzQ2MzE5Y2I4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ PiBAQCAtMjQ4MCw2ICsyNDgwLDkgQEAgaW50IGxvZ2ljYWxfeGNzX3JpbmdfaW5pdChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzIAo+PiAqZW5naW5lKQo+PiDCoCBzdGF0aWMgdTMyCj4+IMKgIG1ha2Vf cnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgIHsKPj4gK8KgwqDC oCBib29sIHN1YnNsaWNlX3BnID0gSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuaGFzX3N1YnNs aWNlX3BnOwo+PiArwqDCoMKgIHU4IHNsaWNlcyA9IGh3ZWlnaHQ4KElOVEVMX0lORk8oZGV2X3By aXYpLT5zc2V1LnNsaWNlX21hc2spOwo+PiArwqDCoMKgIHU4IHN1YnNsaWNlcyA9IAo+PiBod2Vp Z2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZV9tYXNrWzBdKTsKPj4gwqDC oMKgwqDCoCB1MzIgcnBjcyA9IDA7Cj4+IMKgwqDCoMKgwqAgLyoKPj4gQEAgLTI0ODksNiArMjQ5 MiwzOCBAQCBtYWtlX3JwY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDC oMKgwqDCoMKgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAwOwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFNpbmNlIHRoZSBTU2Nv dW50IGJpdGZpZWxkIGluIEdFTjhfUl9QV1JfQ0xLX1NUQVRFIGlzIG9ubHkgCj4+IHRocmVlIGJp dHMKPj4gK8KgwqDCoMKgICogd2lkZSBhbmQgSWNlbGFrZSBoYXMgdXAgdG8gZWlnaHQgc3Vic2xp Y2VzLCBzcGVjZmlhbCAKPj4gcHJvZ3JhbW1pbmcgaXMKPj4gK8KgwqDCoMKgICogbmVlZGVkIGlu IG9yZGVyIHRvIGNvcnJlY3RseSBlbmFibGUgYWxsIHN1YnNsaWNlcy4KPj4gK8KgwqDCoMKgICoK Pj4gK8KgwqDCoMKgICogQWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24gc29mdHdhcmUgbXVzdCBj b25zaWRlciB0aGUgCj4+IGNvbmZpZ3VyYXRpb24KPj4gK8KgwqDCoMKgICogYXMgMng0eDggYW5k IGhhcmR3YXJlIHdpbGwgdHJhbnNsYXRlIHRoaXMgdG8gMXg4eDguCj4+ICvCoMKgwqDCoCAqCj4+ ICvCoMKgwqDCoCAqIEZ1cnRoZW1vcmUsIGV2ZW4gdGhvdWdoIFNTY291bnQgaXMgdGhyZWUgYml0 cywgbWF4aW11bSBkb2N1bWVudGVkCj4+ICvCoMKgwqDCoCAqIHZhbHVlIGZvciBpdCBpcyBmb3Vy LiBGcm9tIHRoaXMgc29tZSBydWxlcy9yZXN0cmljdGlvbnMgZm9sbG93Ogo+PiArwqDCoMKgwqAg Kgo+PiArwqDCoMKgwqAgKiAxLgo+PiArwqDCoMKgwqAgKiBJZiBlbmFibGVkIHN1YnNsaWNlIGNv dW50IGlzIGdyZWF0ZXIgdGhhbiBmb3VyLCB0d28gd2hvbGUgCj4+IHNsaWNlcyBtdXN0Cj4+ICvC oMKgwqDCoCAqIGJlIGVuYWJsZWQgaW5zdGVhZC4KPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKg ICogMi4KPj4gK8KgwqDCoMKgICogV2hlbiBtb3JlIHRoYW4gb25lIHNsaWNlIGlzIGVuYWJsZWQs IGhhcmR3YXJlIGlnbm9yZXMgdGhlIAo+PiBzdWJzbGljZQo+PiArwqDCoMKgwqAgKiBjb3VudCBh bHRvZ2V0aGVyLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBGcm9tIHRoZXNlIHJlc3Ry aWN0aW9ucyBpdCBmb2xsb3dzIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIAo+PiBlbmFibGUK Pj4gK8KgwqDCoMKgICogYSBjb3VudCBvZiBzdWJzbGljZXMgYmV0d2VlbiB0aGUgU1Njb3VudCBt YXhpbXVtIG9mIGZvdXIgCj4+IHJlc3RyaWN0aW9uLAo+PiArwqDCoMKgwqAgKiBhbmQgdGhlIG1h eGltdW0gYXZhaWxhYmxlIG51bWJlciBvbiBhIHBhcnRpY3VsYXIgU0tVLiBFaXRoZXIgYWxsCj4+ ICvCoMKgwqDCoCAqIHN1YnNsaWNlcyBhcmUgZW5hYmxlZCwgb3IgYSBjb3VudCBiZXR3ZWVuIG9u ZSBhbmQgZm91ciBvbiB0aGUgCj4+IGZpcnN0Cj4+ICvCoMKgwqDCoCAqIHNsaWNlLgo+PiArwqDC oMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoSVNfR0VOMTEoZGV2X3ByaXYpICYmIHNsaWNlcyA9PSAx ICYmIHN1YnNsaWNlcyA+PSA0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKHN1YnNs aWNlcyAmIDEpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBzdWJzbGljZV9wZyA9IGZhbHNlOwo+ IAo+IAo+IEVyci4uLiBOb3cgSSdtIGxvb2tpbmcgYXQgdGhlIGRvY3VtZW50YXRpb24gYWdhaW4g YW5kIEkgc2VlIHRoaXMgZm9yIHRoZSAKPiBzdWJzbGljZSBlbmFibGUgZmllbGQgOgo+IAo+IAo+ IEVuYWJsZSBTdWJzbGljZSBDb3VudCBSZXF1ZXN0Lgo+IAo+IDAgPSBVc2UgQXN5bmMgc3Vic2xp Y2UgY291bnQKPiAKPiAxID0gVXNlIFNTY291bnQgaW4gdGhpcyByZWdpc3Rlcgo+IAo+IAo+IFNl YXJjaGluZyBmb3IgIkFzeW5jIHN1YnNsaWNlIGNvdW50IiBsZWFkcyBtZSB0byBhbm90aGVyIHJl Z2lzdGVyIChCU3BlYyAKPiA5NDk3KS4KPiAKPiBSZWFsbHkgY29uZnVzZWQgYXMgdG8gd2hhdCB0 aGlzIGRvZXMgOnwKPiAKPiBJcyB0aGUgaGFyZHdhcmUgdGhlbiByZWFkaW5nIGZvciB0aGF0IHNl Y29uZCByZWdpc3RlciBpZiB5b3Ugc2V0IAo+IFNTQ291bnRFbiB0byAwPwoKSSB0aGluayBpdCBp c24ndC4gV2VsbCwgYnkgdHJhbnNpdGl2ZSBwcm9wZXJ0eSBvZiBzdWJzbGljZSBzaHV0ZG93biBu b3QgCmJlaW5nIHN1cHBvcnRlZCB1bmxlc3Mgc2xpY2UgY291bnQgaXMgb25lLiBTbyB3aGVuIHdl IHNldCBzbGljZSBjb3VudCB0byAKZ3JlYXRlciB0aGFuIG9uZSwgaXQgZG9lc24ndCBtYXR0ZXIg d2hhdCB3ZSBwdXQgaW4gYW55IHN1YnNsaWNlIGNvbnRyb2wgCmZpZWxkcy4KCkFzIGJzcGVjIDMz NTc1IHNheXMgcHJvZ3JhbW1pbmcgdmlhIFJfUFdSX0NMS19TVEFURSBpcyBwcmVmZXJyZWQgb3Zl ciAKdGhlIEFzeW5jIG1vZGUgY29uZmlnLCBJIHRoaW5rIHdlIGFyZSBvdmVyYWxsIGdvb2Qgd2l0 aCB0aGlzIHBhdGNoLgoKPiAKPiAKPiBXZSBjb3VsZCBwdXQgbWF4KGh3ZWlnaHQ4KHNzZXUuc3Vi c2xpY2VfbWFza1swXSksIDQpIGluIFNTQ291bnQsIGJ1dCAKPiBpdCdzIHVuY2xlYXIgd2hhdCdz IHJpZ2h0Li4uCj4gCj4gCj4gSWYgeW91IGZlZWwgbGlrZSB0aGlzIG5lZWRzIHRvIGJlIGludmVz dGlnYXRlZCwgZ28gYWhlYWQuCj4gCj4gT3RoZXJ3aXNlIEkgaGF2ZSBhIG1pbm9yIHN0eWxlIHN1 Z2dlc3Rpb24gYmVsb3csIGVpdGhlciB3YXkgOgo+IAo+IAo+IFJldmlld2VkLWJ5OiBMaW9uZWwg TGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Cj4gCj4gCj4+ICvCoMKg wqDCoMKgwqDCoCBzbGljZXMgKj0gMjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCAv Kgo+PiDCoMKgwqDCoMKgwqAgKiBTdGFydGluZyBpbiBHZW45LCByZW5kZXIgcG93ZXIgZ2F0aW5n IGNhbiBsZWF2ZQo+PiDCoMKgwqDCoMKgwqAgKiBzbGljZS9zdWJzbGljZS9FVSBpbiBhIHBhcnRp YWxseSBlbmFibGVkIHN0YXRlLiBXZQo+PiBAQCAtMjQ5NiwyNCArMjUzMSw1MiBAQCBtYWtlX3Jw Y3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgwqAgKiBl bmFibGVtZW50Lgo+PiDCoMKgwqDCoMKgICovCj4+IMKgwqDCoMKgwqAgaWYgKElOVEVMX0lORk8o ZGV2X3ByaXYpLT5zc2V1Lmhhc19zbGljZV9wZykgewo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8 PSBHRU44X1JQQ1NfU19DTlRfRU5BQkxFOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBod2Vp Z2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zbGljZV9tYXNrKSA8PAo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBHRU44X1JQQ1NfU19DTlRfU0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDC oCBycGNzIHw9IEdFTjhfUlBDU19FTkFCTEU7Cj4gCj4gCj4gSSB3b3VsZCB1c2UgYSB1MzIgdmFs OyBsaWtlIHlvdSBkaWQgZm9yIHRoZSBzdWJzbGljZSBwYXJ0IGJlbG93IGFuZCBqdXN0IAo+IE9S IHRoaW5ncyB0b2dldGhlci4KPiAKPiBKdXN0IGZlZWxzIGEgYml0IG1vcmUgcmVhZGFibGUsIGJ1 dCB1cCB0byB5b3UuCgpJIGtub3csIHdhcyA1MC01MCBvbiB0aGlzIG15c2VsZi4gWW91IHRpcHBl ZCB0aGUgc2NhbGUgbm93IHNvIEknbGwgCnJlc3Bpbi4gVGhhbmtzIGZvciB0aGUgci1iLCBJJ2xs IGtlZXAgaXQgZm9yIHRoaXMgdHdlYWsuCgpSZWdhcmRzLAoKVHZydGtvCgo+IAo+PiArwqDCoMKg wqDCoMKgwqAgdTMyIG1hc2s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgPSBzbGljZXM7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hc2sgPSBHRU4xMV9SUENTX1NfQ05UX01BU0s7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJwY3MgPDw9IEdFTjExX1JQQ1NfU19DTlRfU0hJ RlQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBtYXNrID0gR0VOOF9SUENTX1NfQ05UX01BU0s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJwY3MgPDw9IEdFTjhfUlBDU19TX0NOVF9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgR0VNX0JVR19PTihycGNzICYgfm1hc2spOwo+PiArwqDCoMKg wqDCoMKgwqAgcnBjcyAmPSBtYXNrOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdF TjhfUlBDU19FTkFCTEUgfCBHRU44X1JQQ1NfU19DTlRfRU5BQkxFOwo+PiDCoMKgwqDCoMKgIH0K Pj4gLcKgwqDCoCBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuaGFzX3N1YnNsaWNlX3Bn KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19TU19DTlRfRU5BQkxFOwo+ PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBod2VpZ2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+ c3NldS5zdWJzbGljZV9tYXNrWzBdKSA8PAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU44 X1JQQ1NfU1NfQ05UX1NISUZUOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1Nf RU5BQkxFOwo+PiArwqDCoMKgIGlmIChzdWJzbGljZV9wZykgewo+PiArwqDCoMKgwqDCoMKgwqAg dTMyIHZhbCA9IHN1YnNsaWNlczsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgdmFsIDw8PSBHRU44 X1JQQ1NfU1NfQ05UX1NISUZUOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKHZh bCAmIH5HRU44X1JQQ1NfU1NfQ05UX01BU0spOwo+PiArwqDCoMKgwqDCoMKgwqAgdmFsICY9IEdF TjhfUlBDU19TU19DTlRfTUFTSzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44 X1JQQ1NfRU5BQkxFIHwgR0VOOF9SUENTX1NTX0NOVF9FTkFCTEUgfCB2YWw7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoMKgwqDCoMKgIGlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5oYXNfZXVf cGcpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHJwY3MgfD0gSU5URUxfSU5GTyhkZXZfcHJpdiktPnNz ZXUuZXVfcGVyX3N1YnNsaWNlIDw8Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBD U19FVV9NSU5fU0hJRlQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IElOVEVMX0lORk8oZGV2 X3ByaXYpLT5zc2V1LmV1X3Blcl9zdWJzbGljZSA8PAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU44X1JQQ1NfRVVfTUFYX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgdmFsID0gSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuZXVf cGVyX3N1YnNsaWNlIDw8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU44X1JQQ1Nf RVVfTUlOX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAgR0VNX0JVR19PTih2YWwgJiB+R0VOOF9S UENTX0VVX01JTl9NQVNLKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHZhbCAmPSBHRU44X1JQQ1NfRVVf TUlOX01BU0s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gdmFsOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCB2YWwgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5ldV9wZXJfc3Vi c2xpY2UgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBDU19FVV9NQVhf U0hJRlQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKHZhbCAmIH5HRU44X1JQQ1NfRVVf TUFYX01BU0spOwo+PiArwqDCoMKgwqDCoMKgwqAgdmFsICY9IEdFTjhfUlBDU19FVV9NQVhfTUFT SzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSB2YWw7Cj4+ICsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX0VOQUJMRTsKPj4gwqDCoMKgwqDCoCB9Cj4gCj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRl bC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=