From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 07/13] drm/i915: Move LUT programming to happen after vblank waits Date: Wed, 16 Jan 2019 20:02:25 +0200 Message-ID: <20190116180225.GR20097@intel.com> References: <20190111170823.4441-1-ville.syrjala@linux.intel.com> <20190111170823.4441-8-ville.syrjala@linux.intel.com> <20190116173859.GH4563@mdroper-desk.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 762AD6F1A0 for ; Wed, 16 Jan 2019 18:02:29 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190116173859.GH4563@mdroper-desk.amr.corp.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 T24gV2VkLCBKYW4gMTYsIDIwMTkgYXQgMDk6Mzg6NTlBTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBGcmksIEphbiAxMSwgMjAxOSBhdCAwNzowODoxN1BNICswMjAwLCBWaWxsZSBTeXJq YWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IAo+ID4gVGhlIExVVHMgYXJlIHNpbmdsZSBidWZmZXJlZCBzbyB3ZSBz aG91bGQgcHJvZ3JhbSB0aGVtIGFmdGVyCj4gPiB0aGUgZG91YmxlIGJ1ZmZlcmVkIHBpcGUgdXBk YXRlcyBoYXZlIGJlZW4gbGF0Y2hlZCBieSB0aGUKPiA+IGhhcmR3YXJlLgo+ID4gCj4gPiBXZSds bCBhbHNvIGZpeCB1cCB0aGUgSVBTIHZzLiBzcGxpdCBnYW1tYSB3L2EgdG8gZG8gdGhlIElQUwo+ ID4gZGlzYWJsZSBsaWtlIGV2ZXJ5b25lIGVsc2UuIE5vdGUgdGhhdCB0aGlzIGlzIGN1cnJlbnRs eSBkZWFkCj4gPiBjb2RlIGFzIHdlIGRvbid0IHVzZSB0aGUgc3BsaXQgZ2FtbWEgbW9kZSBvbiBI U1csIGJ1dCB0aGF0Cj4gPiB3aWxsIGJlIGZpeGVkIHVwIHNob3J0bHkuCj4gCj4gSSBkb24ndCB0 aGluayB0aGlzIGlzIHF1aXRlIGRlYWQgY29kZS4uLndlIGRvbid0IHVzZSBzcGxpdCBnYW1tYQo+ IG91cnNlbHZlcywgYnV0IHdlIGNvdWxkIHBvdGVudGlhbGx5IGluaGVyaXQgdGhhdCBzZXR1cCBm cm9tIHRoZSBCSU9TCj4gKHdoaWNoIHdpbGwgc3RpY2sgYXJvdW5kIHVudGlsIGl0IGV2ZW50dWFs bHkgZ2V0cyBjbG9iYmVyZWQgYnkgdGhlIGZpcnN0Cj4gbW9kZXNldC9mYXN0c2V0KS4KPiAKPiBV bWEncyBzZXJpZXMgYWRkZWQgc29tZSBsb2dpYyB0byBzYW5pdGl6ZSB0aGUgTFVUJ3MgaW1tZWRp YXRlbHkgb24gYm9vdCwKPiBidXQgdGhhdCBoYXNuJ3QgbGFuZGVkIHlldC4KPiAKPiAKPiA+IAo+ ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMg ICB8IDI1ICstLS0tLS0tLS0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYyB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+ICAyIGZpbGVzIGNo YW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2NvbG9yLmMKPiA+IGluZGV4IGY5ZTA4NTUxNjJmMy4uMGMwZGE3ZWQwZmQ3 IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYwo+ID4gQEAgLTM2MSwyOSAr MzYxLDYgQEAgc3RhdGljIHZvaWQgaHN3X2NvbG9yX2NvbW1pdChjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICAJaWxrX2xvYWRfY3NjX21hdHJpeChjcnRjX3N0 YXRlKTsKPiA+ICB9Cj4gPiAgCj4gPiAtLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1h IHVuaXQgZm9yIHRoZSBDUlRDIG9uIEhhc3dlbGwuICovCj4gPiAtc3RhdGljIHZvaWQgaGFzd2Vs bF9sb2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4g PiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19z dGF0ZS0+YmFzZS5jcnRjKTsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gPiAtCWJvb2wgcmVlbmFibGVfaXBzID0gZmFs c2U7Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAqIFdvcmthcm91bmQgOiBEbyBub3QgcmVhZCBvciB3 cml0ZSB0aGUgcGlwZSBwYWxldHRlL2dhbW1hIGRhdGEgd2hpbGUKPiA+IC0JICogR0FNTUFfTU9E RSBpcyBjb25maWd1cmVkIGZvciBzcGxpdCBnYW1tYSBhbmQgSVBTX0NUTCBoYXMgSVBTIGVuYWJs ZWQuCj4gPiAtCSAqLwo+ID4gLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgJiYgY3J0Y19zdGF0 ZS0+aXBzX2VuYWJsZWQgJiYKPiA+IC0JICAgIChjcnRjX3N0YXRlLT5nYW1tYV9tb2RlID09IEdB TU1BX01PREVfTU9ERV9TUExJVCkpIHsKPiA+IC0JCWhzd19kaXNhYmxlX2lwcyhjcnRjX3N0YXRl KTsKPiA+IC0JCXJlZW5hYmxlX2lwcyA9IHRydWU7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JaTl4eF9s b2FkX2x1dHMoY3J0Y19zdGF0ZSk7Cj4gPiAtCj4gPiAtCWlmIChyZWVuYWJsZV9pcHMpCj4gPiAt CQloc3dfZW5hYmxlX2lwcyhjcnRjX3N0YXRlKTsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIHZv aWQgYmR3X2xvYWRfZGVnYW1tYV9sdXQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiA+IEBAIC02NjAsNyArNjM3LDcgQEAgdm9p ZCBpbnRlbF9jb2xvcl9pbml0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ID4gIAlpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0 cyA9IGNoZXJyeXZpZXdfbG9hZF9sdXRzOwo+ID4gIAl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2 X3ByaXYpKSB7Cj4gPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBoYXN3ZWxsX2xv YWRfbHV0czsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGk5eHhfbG9hZF9s dXRzOwo+ID4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuY29sb3JfY29tbWl0ID0gaHN3X2NvbG9yX2Nv bW1pdDsKPiA+ICAJfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0dFTjlf QkMoZGV2X3ByaXYpIHx8Cj4gPiAgCQkgICBJU19CUk9YVE9OKGRldl9wcml2KSkgewo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggOTZjNzg1NjZiOGU2Li4xY2Fl ZTQxMjg5NzQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4g QEAgLTUyOTksMjQgKzUyOTksNTQgQEAgaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeV9ub2F0b21p YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAgc3RhdGljIGJvb2wgaHN3X3ByZV91cGRhdGVf ZGlzYWJsZV9pcHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRl LAo+ID4gIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRj X3N0YXRlKQo+ID4gIHsKPiA+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9j cnRjKG5ld19jcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiA+ICsKPiA+ICAJaWYg KCFvbGRfY3J0Y19zdGF0ZS0+aXBzX2VuYWJsZWQpCj4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiAg Cj4gPiAgCWlmIChuZWVkc19tb2Rlc2V0KCZuZXdfY3J0Y19zdGF0ZS0+YmFzZSkpCj4gPiAgCQly ZXR1cm4gdHJ1ZTsKPiA+ICAKPiA+ICsJLyoKPiA+ICsJICogV29ya2Fyb3VuZCA6IERvIG5vdCBy ZWFkIG9yIHdyaXRlIHRoZSBwaXBlIHBhbGV0dGUvZ2FtbWEgZGF0YSB3aGlsZQo+ID4gKwkgKiBH QU1NQV9NT0RFIGlzIGNvbmZpZ3VyZWQgZm9yIHNwbGl0IGdhbW1hIGFuZCBJUFNfQ1RMIGhhcyBJ UFMgZW5hYmxlZC4KPiA+ICsJICoKPiA+ICsJICogRGlzYWJsZSBJUFMgYmVmb3JlIHdlIHByb2dy YW0gdGhlIExVVC4KPiA+ICsJICovCj4gPiArCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSAmJgo+ ID4gKwkgICAgKG5ld19jcnRjX3N0YXRlLT5iYXNlLmNvbG9yX21nbXRfY2hhbmdlZCB8fAo+ID4g KwkgICAgIG5ld19jcnRjX3N0YXRlLT51cGRhdGVfcGlwZSkgJiYKPiA+ICsJICAgIG5ld19jcnRj X3N0YXRlLT5nYW1tYV9tb2RlID09IEdBTU1BX01PREVfTU9ERV9TUExJVCkKPiAKPiBXb3VsZG4n dCB3ZSB3YW50IG9sZF9jcnRjX3N0YXRlIGZvciB0aGUgZ2FtbWFfbW9kZSB0ZXN0PyAgV2UgbmVl ZCB0bwo+IGRpc2FibGUgSVBTIGlmIHdlJ3JlIGFscmVhZHkgaW4gc3BsaXQgZ2FtbWEgbW9kZSAo aW5oZXJpdGVkIGZyb20gQklPUyksCj4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlJ3JlIG1vdmlu ZyB0byBub24tc3BsaXQgZ2FtbWEuCgpXZSdyZSBnb2luZyB0byB1cGRhdGUgdGhlIGdhbW1hIG1v ZGUgYmVmb3JlIHByb2dyYW1taW5nIHRoZSBMVVQuCgpCdXQgSSB0aGluayBJJ2xsIHByb2JhYmx5 IGNoYW5nZSB0aGlzIHRvIGRpc2FibGUgSVBTIGFyb3VuZCBhbGwgTFVUCnVwZGF0ZXMgdG8gcHJl dmVudCBJUFMgZnJvbSB1c2luZyB0aGUgb2xkIExVVCBkdXJpbmcgdGhlIHZibGFuay4gVGhhdCdz CmFzc3VtaW5nIElQUyBkb2VzIGFjdHVhbGx5IHByZWZpbGwgZHVyaW5nIHZibGFuayAod2hpY2gg d291bGQgbWFrZSBzZW5zZQp0byBtZSkuCgoKPiAKPiAKPiBNYXR0Cj4gCj4gPiArCQlyZXR1cm4g dHJ1ZTsKPiA+ICsKPiA+ICAJcmV0dXJuICFuZXdfY3J0Y19zdGF0ZS0+aXBzX2VuYWJsZWQ7Cj4g PiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBib29sIGhzd19wb3N0X3VwZGF0ZV9lbmFibGVfaXBzKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKPiA+ICAJCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKPiA+ICB7 Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhuZXdfY3J0Y19z dGF0ZS0+YmFzZS5jcnRjKTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gPiArCj4gPiAgCWlmICghbmV3X2NydGNfc3Rh dGUtPmlwc19lbmFibGVkKQo+ID4gIAkJcmV0dXJuIGZhbHNlOwo+ID4gIAo+ID4gIAlpZiAobmVl ZHNfbW9kZXNldCgmbmV3X2NydGNfc3RhdGUtPmJhc2UpKQo+ID4gIAkJcmV0dXJuIHRydWU7Cj4g PiAgCj4gPiArCS8qCj4gPiArCSAqIFdvcmthcm91bmQgOiBEbyBub3QgcmVhZCBvciB3cml0ZSB0 aGUgcGlwZSBwYWxldHRlL2dhbW1hIGRhdGEgd2hpbGUKPiA+ICsJICogR0FNTUFfTU9ERSBpcyBj b25maWd1cmVkIGZvciBzcGxpdCBnYW1tYSBhbmQgSVBTX0NUTCBoYXMgSVBTIGVuYWJsZWQuCj4g PiArCSAqCj4gPiArCSAqIFJlLWVuYWJsZSBJUFMgYWZ0ZXIgdGhlIExVVCBoYXMgYmVlbiBwcm9n cmFtbWVkLgo+ID4gKwkgKi8KPiA+ICsJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpICYmCj4gPiAr CSAgICAobmV3X2NydGNfc3RhdGUtPmJhc2UuY29sb3JfbWdtdF9jaGFuZ2VkIHx8Cj4gPiArCSAg ICAgbmV3X2NydGNfc3RhdGUtPnVwZGF0ZV9waXBlKSAmJgo+ID4gKwkgICAgbmV3X2NydGNfc3Rh dGUtPmdhbW1hX21vZGUgPT0gR0FNTUFfTU9ERV9NT0RFX1NQTElUKQo+ID4gKwkJcmV0dXJuIHRy dWU7Cj4gPiArCj4gPiAgCS8qCj4gPiAgCSAqIFdlIGNhbid0IHJlYWQgb3V0IElQUyBvbiBicm9h ZHdlbGwsIGFzc3VtZSB0aGUgd29yc3QgYW5kCj4gPiAgCSAqIGZvcmNpYmx5IGVuYWJsZSBJUFMg b24gdGhlIGZpcnN0IGZhc3RzZXQuCj4gPiBAQCAtMTEwNTAsNyArMTEwODAsNyBAQCBzdGF0aWMg aW50IGludGVsX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJ CQlyZXR1cm4gcmV0Owo+ID4gIAl9Cj4gPiAgCj4gPiAtCWlmIChjcnRjX3N0YXRlLT5jb2xvcl9t Z210X2NoYW5nZWQpIHsKPiA+ICsJaWYgKG1vZGVfY2hhbmdlZCB8fCBjcnRjX3N0YXRlLT5jb2xv cl9tZ210X2NoYW5nZWQpIHsKPiA+ICAJCXJldCA9IGludGVsX2NvbG9yX2NoZWNrKHBpcGVfY29u ZmlnKTsKPiA+ICAJCWlmIChyZXQpCj4gPiAgCQkJcmV0dXJuIHJldDsKPiA+IEBAIC0xMzExNyw2 ICsxMzE0NywxNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gIAkgKi8KPiA+ICAJZHJtX2F0b21pY19oZWxw ZXJfd2FpdF9mb3JfZmxpcF9kb25lKGRldiwgc3RhdGUpOwo+ID4gIAo+ID4gKwlmb3JfZWFjaF9u ZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgbmV3X2NydGNfc3RhdGUsIGkpIHsKPiA+ICsJ CW5ld19pbnRlbF9jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0 ZSk7Cj4gPiArCj4gPiArCQlpZiAobmV3X2NydGNfc3RhdGUtPmFjdGl2ZSAmJgo+ID4gKwkJICAg ICFuZWVkc19tb2Rlc2V0KG5ld19jcnRjX3N0YXRlKSAmJgo+ID4gKwkJICAgIChuZXdfaW50ZWxf Y3J0Y19zdGF0ZS0+YmFzZS5jb2xvcl9tZ210X2NoYW5nZWQgfHwKPiA+ICsJCSAgICAgbmV3X2lu dGVsX2NydGNfc3RhdGUtPnVwZGF0ZV9waXBlKSkKPiA+ICsJCQlpbnRlbF9jb2xvcl9sb2FkX2x1 dHMobmV3X2ludGVsX2NydGNfc3RhdGUpOwo+ID4gKwl9Cj4gPiArCj4gPiAgCS8qCj4gPiAgCSAq IE5vdyB0aGF0IHRoZSB2YmxhbmsgaGFzIHBhc3NlZCwgd2UgY2FuIGdvIGFoZWFkIGFuZCBwcm9n cmFtIHRoZQo+ID4gIAkgKiBvcHRpbWFsIHdhdGVybWFya3Mgb24gcGxhdGZvcm1zIHRoYXQgbmVl ZCB0d28tc3RlcCB3YXRlcm1hcmsKPiA+IEBAIC0xMzYzMiwxMSArMTM2NzIsNiBAQCBzdGF0aWMg dm9pZCBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAg CQlpbnRlbF9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKG9sZF9pbnRlbF9zdGF0ZSwgaW50ZWxf Y3J0Yyk7Cj4gPiAgCWJvb2wgbW9kZXNldCA9IG5lZWRzX21vZGVzZXQoJmludGVsX2NzdGF0ZS0+ YmFzZSk7Cj4gPiAgCj4gPiAtCWlmICghbW9kZXNldCAmJgo+ID4gLQkgICAgKGludGVsX2NzdGF0 ZS0+YmFzZS5jb2xvcl9tZ210X2NoYW5nZWQgfHwKPiA+IC0JICAgICBpbnRlbF9jc3RhdGUtPnVw ZGF0ZV9waXBlKSkKPiA+IC0JCWludGVsX2NvbG9yX2xvYWRfbHV0cyhpbnRlbF9jc3RhdGUpOwo+ ID4gLQo+ID4gIAkvKiBQZXJmb3JtIHZibGFuayBldmFzaW9uIGFyb3VuZCBjb21taXQgb3BlcmF0 aW9uICovCj4gPiAgCWludGVsX3BpcGVfdXBkYXRlX3N0YXJ0KGludGVsX2NzdGF0ZSk7Cj4gPiAg Cj4gPiAtLSAKPiA+IDIuMTkuMgo+ID4gCj4gCj4gLS0gCj4gTWF0dCBSb3Blcgo+IEdyYXBoaWNz IFNvZnR3YXJlIEVuZ2luZWVyCj4gSW9URyBQbGF0Zm9ybSBFbmFibGluZyAmIERldmVsb3BtZW50 Cj4gSW50ZWwgQ29ycG9yYXRpb24KPiAoOTE2KSAzNTYtMjc5NQoKLS0gClZpbGxlIFN5cmrDpGzD pApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK