From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 7/8] drm/i915: Allow final wm programming to be scheduled after next vblank (v2) Date: Mon, 6 Jul 2015 11:07:52 +0200 Message-ID: <20150706090752.GK2156@phenom.ffwll.local> References: <1435803961-30079-1-git-send-email-matthew.d.roper@intel.com> <1435803961-30079-8-git-send-email-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2F7A56E802 for ; Mon, 6 Jul 2015 02:05:06 -0700 (PDT) Received: by wiwl6 with SMTP id l6so278099214wiw.0 for ; Mon, 06 Jul 2015 02:05:04 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1435803961-30079-8-git-send-email-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdWwgMDEsIDIwMTUgYXQgMDc6MjY6MDBQTSAtMDcwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBBZGQgYSBzaW1wbGUgbWVjaGFuaXNtIHRvIHRyaWdnZXIgZmluYWwgd2F0ZXJtYXJrIHVw ZGF0ZXMgaW4gYW4KPiBhc3luY2hyb25vdXMgbWFubmVyIG9uY2UgdGhlIG5leHQgdmJsYW5rIG9j Y3Vycy4gIE5vIHBsYXRmb3JtIHR5cGVzCj4gYWN0dWFsbHkgc3VwcG9ydCBhdG9taWMgd2F0ZXJt YXJrIHByb2dyYW1taW5nIHVudGlsIGEgZnV0dXJlIHBhdGNoLCBzbwo+IHRoZXJlIHNob3VsZCBi ZSBubyBmdW5jdGlvbmFsIGNoYW5nZSB5ZXQ7IGluZGl2aWR1YWwgcGxhdGZvcm1zIHdpbGwgYmUK PiBjb252ZXJ0ZWQgdG8gdXNlIHRoaXMgbWVjaGFuaXNtIG9uZS1ieS1vbmUgaW4gZnV0dXJlIHBh dGNoZXMuCj4gCj4gTm90ZSB0aGF0IHdlJ2xsIHByb2JhYmx5IGV4cGFuZCB0aGlzIHRvIGNvdmVy IG90aGVyIHBvc3QtdmJsYW5rIGFzeW5jCj4gdGFza3MgKGxpa2UgdW5waW5uaW5nKSBhdCBzb21l IHBvaW50IGluIHRoZSBmdXR1cmUuCj4gCj4gdjI6IE11Y2ggc2ltcGxlciB2YmxhbmsgbWVjaGFu aXNtIHRoYW4gd2FzIHVzZWQgaW4gdGhlIHByZXZpb3VzIHNlcmllczsKPiAgICAgbm8gbmVlZCB0 byBhbGxvY2F0ZSBuZXcgaGVhcCBzdHJ1Y3R1cmVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1hdHQg Um9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICA3ICsrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9pcnEuYyAgICAgIHwgIDkgKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgNCArKysrCj4gIDQgZmlsZXMg Y2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBpbmRleCAyNzc0OTc2Li41YWQ5NDJlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gQEAgLTYyOCw2ICs2MjgsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9m dW5jcyB7Cj4gIAkJCQkgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCQkJIHVpbnQzMl90IHNw cml0ZV93aWR0aCwgdWludDMyX3Qgc3ByaXRlX2hlaWdodCwKPiAgCQkJCSBpbnQgcGl4ZWxfc2l6 ZSwgYm9vbCBlbmFibGUsIGJvb2wgc2NhbGVkKTsKPiArCXZvaWQgKCpwcm9ncmFtX3dhdGVybWFy a3MpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIAlpbnQgKCptb2Rlc2V0 X2NhbGNfY2RjbGspKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gIAl2b2lkICgq bW9kZXNldF9jb21taXRfY2RjbGspKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4g IAkvKiBSZXR1cm5zIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGNydGMsIGFuZCBpZiB0aGUgY3J0 YyBpcyBhY3RpdmUsCj4gQEAgLTI1NjcsNiArMjU2OCwxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21k X3RhYmxlIHsKPiAgI2RlZmluZSBIQVNfTDNfRFBGKGRldikgKElTX0lWWUJSSURHRShkZXYpIHx8 IElTX0hBU1dFTEwoZGV2KSkKPiAgI2RlZmluZSBOVU1fTDNfU0xJQ0VTKGRldikgKElTX0hTV19H VDMoZGV2KSA/IDIgOiBIQVNfTDNfRFBGKGRldikpCj4gIAo+ICsvKgo+ICsgKiBGSVhNRTogIE5v dCBhbGwgcGxhdGZvcm1zIGhhdmUgYmVlbiB0cmFuc2l0aW9uZWQgdG8gYXRvbWljIHdhdGVybWFy awo+ICsgKiB1cGRhdGVzIHlldC4KPiArICovCj4gKyNkZWZpbmUgSEFTX0FUT01JQ19XTShkZXZf cHJpdikgKGRldl9wcml2LT5kaXNwbGF5LnByb2dyYW1fd2F0ZXJtYXJrcyAhPSBOVUxMKQoKSEFT X0ZPTyBpcyBnZW5lcmFsbHkgaHcgZmVhdHVyZXMuIEkgdGhpbmsgZXNwZWNpYWxseSBmb3IganVz dCB0aGlzIHZmdW5jCmNoZWNrIGlzIGNsZWFyZXIgdG8gaW5saW5lIGl0LgoKPiArCj4gICNkZWZp bmUgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIgNTAKPiAgI2RlZmluZSBHRU45X0ZSRVFfU0NBTEVS IDMKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gaW5kZXggYTZmYmU2NC4uMjBjNzI2MCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0xNDUyLDYgKzE0NTIsMTUgQEAgc3Rh dGljIHZvaWQgZ2VuNl9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1MzIgcG1faWlyKQo+ICAKPiAgc3RhdGljIGJvb2wgaW50ZWxfcGlwZV9oYW5kbGVf dmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlKQo+ICB7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGMgKmNydGMgPSBkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV07 Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 Cj4gKwo+ICsJaWYgKGludGVsX2NydGMtPm5lZWRfdmJsYW5rX3dtX3VwZGF0ZSkgewo+ICsJCXF1 ZXVlX3dvcmsoZGV2X3ByaXYtPndxLCAmaW50ZWxfY3J0Yy0+d21fd29yayk7Cj4gKwkJaW50ZWxf Y3J0Yy0+bmVlZF92Ymxhbmtfd21fdXBkYXRlID0gZmFsc2U7CgpXZSBuZWVkIHNvbWUgbG9jayBv ciBzb21lIG90aGVyIG1lYW5zIG9mIHN5bmMgdG8gYmUgYWJsZSB0byBjYW5jZWwgc3VjaCBhbgp1 cGRhdGUgaWYgdXNlcnNwYWNlIHN1Ym1pdHMgdGhlIG5leHQgYXRvbWljIHVwZGF0ZS4gT3RoZXJ3 aXNlIHRoaXMgd29yawptaWdodCBvdmVyd3JpdGUgdGhlIGludGVybWVkaWF0ZSB3bSB2YWx1ZXMu CgpJbW8gYmVzdCB3b3VsZCBiZSBpZiB3ZSBjcmVhdGVhIGEgY2FuY2VsX3dvcmtfc3luYy1saWtl IGludGVyZmFjZSB3aGljaAplbnN1cmVzIHRoZSB3b3JrIHdpbGwgYmUgY2FuY2VsbGVkICh3aGVu IGl0J3MgYWxyZWFkeSBzY2hlZHVsZWQpIG9yIHdvbid0CmV2ZXIgZ2V0IHNjaGVkdWxlZCB0aHJv dWdoIG91ciB2YmxhbmsgaGFuZGxlci4gVGhhdCB3b3VsZCBtaXJyb3IgdGhlCmludGVyZmFjZSBJ IGhhdmUgaW4gbWluZCBmb3IgZ2VuZXJpYyB2Ymxhbmsgd29ya2Vycywgd2hpY2ggaW1vIHNob3Vs ZApjbG9zZWx5IHJlc2VtYmxlIHRoZSBpbnRlcmZhY2Ugd2UgaGF2ZSBmb3IgZGVsYXllZF93b3Jr IChmb3IgdmJsYW5rIHdvcmsKcnVuIGluIHByb2Nlc3MgY29udGV4dCkgYW5kIHRpbWVycyAoZm9y IHZibGFuayBydW4gZnJvbSBoYXJkaXJxIGNvbnRleHQpLgoKPiArCX0KPiArCj4gIAlpZiAoIWRy bV9oYW5kbGVfdmJsYW5rKGRldiwgcGlwZSkpCj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggNDZiNjJjYy4uZmE0MzczZSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtNDczNyw2ICs0NzM3LDEw IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bvc3RfcGxhbmVfdXBkYXRlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICAJ c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gIAo+ICsJaWYgKEhBU19BVE9NSUNfV00odG9faTkx NShkZXYpKSkKPiArCQkvKiB2YmxhbmsgaGFuZGxlciB3aWxsIGtpY2sgb2ZmIHdvcmtxdWV1ZSB0 YXNrIHRvIHVwZGF0ZSB3bSdzICovCj4gKwkJY3J0Yy0+bmVlZF92Ymxhbmtfd21fdXBkYXRlID0g dHJ1ZTsKPiArCj4gIAlpZiAoYXRvbWljLT53YWl0X3ZibGFuaykKPiAgCQlpbnRlbF93YWl0X2Zv cl92YmxhbmsoZGV2LCBjcnRjLT5waXBlKTsKPiAgCj4gQEAgLTQ3NDUsNyArNDc0OSw3IEBAIHN0 YXRpYyB2b2lkIGludGVsX3Bvc3RfcGxhbmVfdXBkYXRlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KQo+ICAJaWYgKGF0b21pYy0+ZGlzYWJsZV9jeHNyKQo+ICAJCWNzdGF0ZS0+d20uY3hzcl9hbGxv d2VkID0gdHJ1ZTsKPiAgCj4gLQlpZiAoY3J0Yy0+YXRvbWljLnVwZGF0ZV93bV9wb3N0KQo+ICsJ aWYgKCFIQVNfQVRPTUlDX1dNKHRvX2k5MTUoZGV2KSkgJiYgY3J0Yy0+YXRvbWljLnVwZGF0ZV93 bV9wb3N0KQo+ICAJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKCZjcnRjLT5iYXNlKTsKPiAgCj4g IAlpZiAoYXRvbWljLT51cGRhdGVfZmJjKSB7Cj4gQEAgLTQ3NTcsOSArNDc2MSwxMCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9wb3N0X3BsYW5lX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykK PiAgCWlmIChhdG9taWMtPnBvc3RfZW5hYmxlX3ByaW1hcnkpCj4gIAkJaW50ZWxfcG9zdF9lbmFi bGVfcHJpbWFyeSgmY3J0Yy0+YmFzZSk7Cj4gIAo+IC0JZHJtX2Zvcl9lYWNoX3BsYW5lX21hc2so cGxhbmUsIGRldiwgYXRvbWljLT51cGRhdGVfc3ByaXRlX3dhdGVybWFya3MpCj4gLQkJaW50ZWxf dXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzKHBsYW5lLCAmY3J0Yy0+YmFzZSwKPiAtCQkJCQkgICAg ICAgMCwgMCwgMCwgZmFsc2UsIGZhbHNlKTsKPiArCWlmICghSEFTX0FUT01JQ19XTSh0b19pOTE1 KGRldikpKQo+ICsJCWRybV9mb3JfZWFjaF9wbGFuZV9tYXNrKHBsYW5lLCBkZXYsIGF0b21pYy0+ dXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzKQo+ICsJCQlpbnRlbF91cGRhdGVfc3ByaXRlX3dhdGVy bWFya3MocGxhbmUsICZjcnRjLT5iYXNlLAo+ICsJCQkJCQkgICAgICAgMCwgMCwgMCwgZmFsc2Us IGZhbHNlKTsKCkNhbid0IHdlIGp1c3QgbW92ZSB0aGlzIGxvb3AgaW50byBpbnRlbF91cGRhdGVf d2F0ZXJtYXJrIGFmdGVyIGFsbCB0aGUKYXRvbWljIHJld29yayBhbmQgeW91J3ZlIGp1c3QgaGF2 aW5nIG1vdmVkIHRoZSBscF93bSB2cy4gc2NhbGluZyB3YQphcm91bmQ/IE9uZSBsZXNzIHRoaW5n IHRvIGtlZXAgaW4gbWluZCB3aGVuIHRyYW5zaXRpb25pbmcuCgo+ICAJbWVtc2V0KGF0b21pYywg MCwgc2l6ZW9mKCphdG9taWMpKTsKPiAgfQo+IEBAIC0xNDA3MCw2ICsxNDA3NSwyMSBAQCBzdGF0 aWMgdm9pZCBza2xfaW5pdF9zY2FsZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcgo+ICAJc2NhbGVyX3N0YXRlLT5zY2FsZXJfaWQgPSAtMTsKPiAg fQo+ICAKPiArLyogRklYTUU6IFRoaXMgbWF5IGV4cGFuZCB0byBjb3ZlciBvdGhlciB0YXNrcyBs aWtlIHVucGlubmluZyBpbiB0aGUgZnV0dXJlLi4uICovCj4gK3N0YXRpYyB2b2lkIHdtX3dvcmtf ZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0KPiArCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGludGVsX2NydGMs IHdtX3dvcmspOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShpbnRlbF9jcnRjLT5iYXNlLmRldik7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIUhBU19BVE9NSUNf V00oZGV2X3ByaXYpKSkKPiArCQlyZXR1cm47Cj4gKwlpZiAoV0FSTl9PTighaW50ZWxfY3J0Yy0+ YmFzZS5zdGF0ZS0+YWN0aXZlKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZGV2X3ByaXYtPmRpc3Bs YXkucHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQg aW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQo+ICB7Cj4g IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ IEBAIC0xNDE0Miw2ICsxNDE2Miw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKPiAgCWRldl9wcml2LT5wbGFuZV90b19jcnRj X21hcHBpbmdbaW50ZWxfY3J0Yy0+cGxhbmVdID0gJmludGVsX2NydGMtPmJhc2U7Cj4gIAlkZXZf cHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbaW50ZWxfY3J0Yy0+cGlwZV0gPSAmaW50ZWxfY3J0 Yy0+YmFzZTsKPiAgCj4gKwlJTklUX1dPUksoJmludGVsX2NydGMtPndtX3dvcmssIHdtX3dvcmtf ZnVuYyk7Cj4gKwo+ICAJZHJtX2NydGNfaGVscGVyX2FkZCgmaW50ZWxfY3J0Yy0+YmFzZSwgJmlu dGVsX2hlbHBlcl9mdW5jcyk7Cj4gIAo+ICAJV0FSTl9PTihkcm1fY3J0Y19pbmRleCgmaW50ZWxf Y3J0Yy0+YmFzZSkgIT0gaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKPiBpbmRleCAzMzViMjRiLi43NzVlM2QwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKPiBAQCAtNTg2LDYgKzU4NiwxMCBAQCBzdHJ1Y3QgaW50ZWxfY3J0YyB7Cj4gIAlpbnQgbnVt X3NjYWxlcnM7Cj4gIAo+ICAJc3RydWN0IHZsdl93bV9zdGF0ZSB3bV9zdGF0ZTsKPiArCj4gKwkv KiBEbyB3ZSBuZWVkIHRvIHByb2dyYW0gd2F0ZXJtYXJrIHZhbHVlcyBhZnRlciB0aGUgbmV4dCB2 Ymxhbms/ICovCj4gKwlib29sIG5lZWRfdmJsYW5rX3dtX3VwZGF0ZTsKCk1heWJlIHZibGFua193 bV91cGRhdGVfcGVuZGluZz8gU2luY2UgIm5lZWQiIGlzIHBsYXRmb3JtLXNwZWNpZmljIGFuZApp bnZhcmlhbnQgYXQgcnVudGltZSBhbmQgc28gYSBiaXQgY29uZnVzaW5nICh0byBtZSBhdCBsZWFz dCkuCi1EYW5pZWwKCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd21fd29yazsKPiAgfTsKPiAgCj4g IHN0cnVjdCBpbnRlbF9wbGFuZV93bV9wYXJhbWV0ZXJzIHsKPiAtLSAKPiAyLjEuNAo+IAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK