From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH 07/27] drm/i915/icl: Interrupt handling Date: Wed, 10 Jan 2018 16:56:25 -0200 Message-ID: <1515610585.22902.64.camel@intel.com> References: <20180109232336.11029-1-paulo.r.zanoni@intel.com> <20180109232336.11029-8-paulo.r.zanoni@intel.com> <1515579388.4144.21.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id F23D96E287 for ; Wed, 10 Jan 2018 18:56:46 +0000 (UTC) In-Reply-To: <1515579388.4144.21.camel@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joonas Lahtinen , intel-gfx@lists.freedesktop.org Cc: Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org RW0gUXVhLCAyMDE4LTAxLTEwIMOgcyAxMjoxNiArMDIwMCwgSm9vbmFzIExhaHRpbmVuIGVzY3Jl dmV1Ogo+IE9uIFR1ZSwgMjAxOC0wMS0wOSBhdCAyMToyMyAtMDIwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+ID4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K PiA+IAo+ID4gdjI6IFJlYmFzZS4KPiA+IAo+ID4gdjM6Cj4gPiAgICogUmVtb3ZlIERQRiwgaXQg aGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFNLTCsuCj4gPiAgICogRml4IC1pbnRlcm5hbCByZWJhc2Ug d3J0LiBleGVjbGlzdHMgaW50ZXJydXB0IGhhbmRsaW5nLgo+ID4gCj4gPiB2NDogUmViYXNlLgo+ ID4gCj4gPiB2NToKPiA+ICAgKiBVcGRhdGVkIGZvciBQT1IgY2hhbmdlcy4gKERhbmllbGUgQ2Vy YW9sbyBTcHVyaW8pCj4gPiAgICogTWVyZ2VkIHdpdGggaXJxIGhhbmRsaW5nIGZpeGVzIGJ5IERh bmllbGUgQ2VyYW9sbyBTcHVyaW86Cj4gPiAgICAgICAqIFNpbXBsaWZ5IHRoZSBjb2RlIGJ5IHVz aW5nIGdlbjhfY3NfaXJxX2hhbmRsZXIuCj4gPiAgICAgICAqIEZpeCBpbnRlcnJ1cHQgaGFuZGxp bmcgZm9yIHRoZSB1cHN0cmVhbSBrZXJuZWwuCj4gPiAKPiA+IHY2Ogo+ID4gICAqIFJlbW92ZSBl YXJseSBicmluZ3VwIGRlYnVnIG1lc3NhZ2VzIChUdnJ0a28pCj4gPiAgICogQWRkIE5CIGFib3V0 IGFyYml0cmFyeSBzcGluIHdhaXQgdGltZW91dCAoVHZydGtvKQo+ID4gCj4gPiB2NyAoZnJvbSBQ YXVsbyk6Cj4gPiAgICogRG9uJ3QgdHJ5IHRvIHdyaXRlIFJPIGJpdHMgdG8gcmVnaXN0ZXJzLgo+ ID4gICAqIERvbid0IGNoZWNrIGZvciBQQ0ggdHlwZXMgdGhhdCBkb24ndCBleGlzdC4gUENIIGlu dGVycnVwdHMgYXJlCj4gPiBub3QKPiA+ICAgICBoZXJlIHlldC4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+IFNpZ25l ZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4KPiA+IFNpZ25l ZC1vZmYtYnk6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJpb0Bp bnRlbC4KPiA+IGNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE9zY2FyIE1hdGVvIDxvc2Nhci5tYXRl b0BpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFu b25pQGludGVsLmNvbT4KPiAKPiA8U05JUD4KPiAKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmMKPiA+IEBAIC00MTUsNiArNDE1LDkgQEAgdm9pZCBnZW42X2VuYWJsZV9y cHNfaW50ZXJydXB0cyhzdHJ1Y3QKPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4g IAlpZiAoUkVBRF9PTkNFKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKSkKPiA+ICAJCXJldHVybjsK PiA+ICAKPiA+ICsJaWYgKFdBUk5fT05fT05DRShJU19HRU4xMShkZXZfcHJpdikpKQo+ID4gKwkJ cmV0dXJuOwo+ID4gKwo+ID4gIAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwo+ ID4gIAlXQVJOX09OX09OQ0UocnBzLT5wbV9paXIpOwo+ID4gIAlXQVJOX09OX09OQ0UoSTkxNV9S RUFEKGdlbjZfcG1faWlyKGRldl9wcml2KSkgJiBkZXZfcHJpdi0KPiA+ID5wbV9ycHNfZXZlbnRz KTsKPiA+IEBAIC00MzEsNiArNDM0LDkgQEAgdm9pZCBnZW42X2Rpc2FibGVfcnBzX2ludGVycnVw dHMoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICAJaWYgKCFSRUFE X09OQ0UocnBzLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQo+ID4gIAkJcmV0dXJuOwo+ID4gIAo+ID4g KwlpZiAoV0FSTl9PTl9PTkNFKElTX0dFTjExKGRldl9wcml2KSkpCj4gPiArCQlyZXR1cm47Cj4g PiArCj4gCj4gVGhlc2Ugc2hvdWxkIGJlIEdFTV9CVUdfT04gYXQgbW9zdCBhbmQgc2hvdWxkIGJl IHRoZSBmaXJzdCB0aGluZyBpbgo+IGZ1bmN0aW9uLgo+IAo+ID4gIAlzcGluX2xvY2tfaXJxKCZk ZXZfcHJpdi0+aXJxX2xvY2spOwo+ID4gIAlycHMtPmludGVycnVwdHNfZW5hYmxlZCA9IGZhbHNl Owo+ID4gIAo+ID4gQEAgLTI3NTEsNiArMjc1NywxMzEgQEAgc3RhdGljIHZvaWQgX19maW5pX3dl ZGdlKHN0cnVjdCB3ZWRnZV9tZQo+ID4gKncpCj4gPiAgCSAgICAgKFcpLT5pOTE1OwkJCQkJCQo+ ID4gCVwKPiA+ICAJICAgICBfX2Zpbmlfd2VkZ2UoKFcpKSkKPiA+ICAKPiA+ICtzdGF0aWMgX19h bHdheXNfaW5saW5lIHZvaWQKPiA+ICtnZW4xMV9jc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIHUzMiBpaXIpCj4gPiArewo+ID4gKwlnZW44X2NzX2lycV9oYW5k bGVyKGVuZ2luZSwgaWlyLCAwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlycXJldHVybl90 Cj4gPiArZ2VuMTFfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCB1MzIKPiA+IG1hc3Rlcl9jdGwpCj4gCj4gVGhpcyBmdW5jdGlvbiBjb3VsZCB1c2Ugc29t ZSByZWFkYWJpbGl0eSA6KQo+IAo+ID4gK3sKPiA+ICsJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05P TkU7Cj4gPiArCXUxNiBpcnFbMl1bMzJdOwo+ID4gKwl1MzIgZHcsIGlkZW50Owo+ID4gKwl1bnNp Z25lZCBsb25nIHRtcDsKPiA+ICsJdW5zaWduZWQgaW50IGJhbmssIGJpdCwgZW5naW5lOwo+ID4g Kwl1bnNpZ25lZCBsb25nIHdhaXRfc3RhcnQsIHdhaXRfZW5kOwo+ID4gKwo+ID4gKwltZW1zZXQo aXJxLCAwLCBzaXplb2YoaXJxKSk7Cj4gPiArCj4gPiArCWZvciAoYmFuayA9IDA7IGJhbmsgPCAy OyBiYW5rKyspIHsKPiA+ICsJCWlmIChtYXN0ZXJfY3RsICYgR0VOMTFfR1RfRFdfSVJRKGJhbmsp KSB7Cj4gCj4gSW52ZXJ0IGNvbmRpdGlvbiBhbmQgdXNlIGNvbnRpbnVlOwo+IAo+ID4gKwkJCWR3 ID0gSTkxNV9SRUFEX0ZXKEdFTjExX0dUX0lOVFJfRFcoYmFuaykpOwo+ID4gKwkJCWlmICghZHcp Cj4gPiArCQkJCURSTV9FUlJPUigiR1RfSU5UUl9EVyV1IGJsYW5rIVxuIiwKPiA+IGJhbmspOwo+ IAo+IFByb2JhYmx5IG5lZWRzIGEgbW9yZSBhcHByb3ByaWF0ZSBhY3Rpb24sIEdFTV9CVUdfT04g aWYgd2UndmUgbmV2ZXIKPiBzZWVuIHRoaXMgb24gSFcuCj4gCj4gPiArCQkJdG1wID0gZHc7Cj4g PiArCQkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZ0bXAsIDMyKSB7Cj4gPiArCQkJCUk5MTVfV1JJ VEVfRlcoR0VOMTFfSUlSX1JFR19TRUxFQ1QKPiA+IE9SKGJhbmspLCAxIDw8IGJpdCk7Cj4gCj4g QklUKGJpdCkKPiAKPiArIG5ld2xpbmUgaGVyZQo+IAo+ID4gKwkJCQl3YWl0X3N0YXJ0ID0gbG9j YWxfY2xvY2soKSA+PiAxMDsKPiA+ICsJCQkJLyogTkI6IFNwZWNzIGRvIG5vdCBzcGVjaWZ5IGhv dwo+ID4gbG9uZyB0byBzcGluIHdhaXQuCj4gPiArCQkJCSAqIFRha2luZyAxMDB1cyBhcyBhbiBl ZHVjYXRlZAo+ID4gZ3Vlc3MgKi8KPiA+ICsJCQkJd2FpdF9lbmQgPSB3YWl0X3N0YXJ0ICsgMTAw Owo+ID4gKwkJCQlkbyB7Cj4gPiArCQkJCQlpZGVudCA9Cj4gPiBJOTE1X1JFQURfRlcoR0VOMTFf SU5UUl9JREVOVElUWV9SRUcoYmFuaykpOwo+ID4gKwkJCQl9IHdoaWxlICghKGlkZW50ICYKPiA+ IEdFTjExX0lOVFJfREFUQV9WQUxJRCkgJiYKPiA+ICsJCQkJCSAhdGltZV9hZnRlcigodW5zaWdu ZWQKPiA+IGxvbmcpbG9jYWxfY2xvY2soKSA+PiAxMCwgd2FpdF9lbmQpKTsKPiAKPiBVaCBvaCwg bm90IGEgcmVhbGx5IG5pY2UgdGhpbmcgdG8gZG8gaW4gSVJRIGhhbmRsZXIgOiggV2Ugc2hvdWxk Cj4gcHJvYmFibHkgbG9vayBhdCBzb21lIGFjdHVhbCBkZWxheSBudW1iZXJzIGFuZCBub3QgZG8g dGhpcy4KPiAKPiA+ICsKPiA+ICsJCQkJaWYgKCEoaWRlbnQgJgo+ID4gR0VOMTFfSU5UUl9EQVRB X1ZBTElEKSkKPiA+ICsJCQkJCURSTV9FUlJPUigiSU5UUl9JREVOVElUWV9SCj4gPiBFRyV1OiV1 IHRpbWVkIG91dCFcbiIsCj4gPiArCQkJCQkJICBiYW5rLCBiaXQpOwo+ID4gKwo+ID4gKwkJCQlp cnFbYmFua11bYml0XSA9IGlkZW50ICYKPiA+IEdFTjExX0lOVFJfRU5HSU5FX01BU0s7Cj4gPiAr CQkJCWlmICghaXJxW2JhbmtdW2JpdF0pCj4gPiArCQkJCQlEUk1fRVJST1IoIklOVFJfSURFTlRJ VFlfUgo+ID4gRUcldToldSBibGFuayFcbiIsCj4gPiArCQkJCQkJICBiYW5rLCBiaXQpOwo+IAo+ IERSTV9FUlJPUiBhZ2FpbiBzZWVtcyBsaWtlIGJpdCBvZiBhbiB1bmRlcnN0YXRlbWVudCBmb3Ig aW50ZXJydXB0Lgo+IAo+ICsgbmV3bGluZSBoZXJlCj4gCj4gPiArCQkJCUk5MTVfV1JJVEVfRlco R0VOMTFfSU5UUl9JREVOVElUWV8KPiA+IFJFRyhiYW5rKSwgaWRlbnQpOwo+ID4gKwkJCX0KPiAK PiArIG5ld2xpbmUgaGVyZQo+IAo+ID4gKwkJCUk5MTVfV1JJVEVfRlcoR0VOMTFfR1RfSU5UUl9E VyhiYW5rKSwgZHcpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChpcnFbMF1bR0VO MTFfUkNTMF0pIHsKPiA+ICsJCWdlbjExX2NzX2lycV9oYW5kbGVyKGRldl9wcml2LT5lbmdpbmVb UkNTXSwKPiA+ICsJCQkJICAgICBpcnFbMF1bR0VOMTFfUkNTMF0pOwo+ID4gKwkJcmV0ID0gSVJR X0hBTkRMRUQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGlycVswXVtHRU4xMV9CQ1NdKSB7Cj4g PiArCQlnZW4xMV9jc19pcnFfaGFuZGxlcihkZXZfcHJpdi0+ZW5naW5lW0JDU10sCj4gPiArCQkJ CSAgICAgaXJxWzBdW0dFTjExX0JDU10pOwo+ID4gKwkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJZm9yIChlbmdpbmUgPSAwOyBlbmdpbmUgPCA0OyBlbmdpbmUrKykgewo+ ID4gKwkJaWYgKGlycVsxXVtHRU4xMV9WQ1MoZW5naW5lKV0pIHsKPiA+ICsJCQlnZW4xMV9jc19p cnFfaGFuZGxlcihkZXZfcHJpdi0KPiA+ID5lbmdpbmVbX1ZDUyhlbmdpbmUpXSwKPiA+ICsJCQkJ CSAgICAgaXJxWzFdW0dFTjExX1ZDUyhlbmdpCj4gPiBuZSldKTsKPiA+ICsJCQlyZXQgPSBJUlFf SEFORExFRDsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGVuZ2luZSA9IDA7IGVu Z2luZSA8IDI7IGVuZ2luZSsrKSB7Cj4gPiArCQlpZiAoaXJxWzFdW0dFTjExX1ZFQ1MoZW5naW5l KV0pIHsKPiA+ICsJCQlnZW4xMV9jc19pcnFfaGFuZGxlcihkZXZfcHJpdi0KPiA+ID5lbmdpbmVb X1ZFQ1MoZW5naW5lKV0sCj4gPiArCQkJCQkgICAgIGlycVsxXVtHRU4xMV9WRUNTKGVuZwo+ID4g aW5lKV0pOwo+ID4gKwkJCXJldCA9IElSUV9IQU5ETEVEOwo+ID4gKwkJfQo+ID4gKwl9Cj4gCj4g RG9lc24ndCB0aGUgYWJvdmUgY29kZSBsb29rIGxpa2UgYSB0YWJsZSB0byBiZSBpdGVyYXRlZCBv dmVyPwo+IAo+IDxTTklQPgo+IAo+ID4gK3N0YXRpYyB2b2lkIGdlbjExX2d0X2lycV9wb3N0aW5z dGFsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ID4gKmRldl9wcml2KQo+ID4gK3sKPiA+ICsJ Y29uc3QgdTMyIGlycXMgPSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgfAo+ID4gR1RfQ09OVEVY VF9TV0lUQ0hfSU5URVJSVVBUOwo+ID4gKwo+ID4gKwlCVUlMRF9CVUdfT04oaXJxcyAmIDB4ZmZm ZjAwMDApOwo+IAo+ICNkZWZpbmUgZm9yIHRoZSBtYXNrLgo+IAo+ID4gKwo+ID4gKwkvKiBFbmFi bGUgUkNTLCBCQ1MsIFZDUyBhbmQgVkVDUyBjbGFzcyBpbnRlcnJ1cHRzLiAqLwo+ID4gKwlJOTE1 X1dSSVRFKEdFTjExX1JFTkRFUl9DT1BZX0lOVFJfRU5BQkxFLCBpcnFzIDw8IDE2IHwKPiA+IGly cXMpOwo+ID4gKwlJOTE1X1dSSVRFKEdFTjExX1ZDU19WRUNTX0lOVFJfRU5BQkxFLAkgIGlycXMg PDwgMTYKPiA+IHwgaXJxcyk7Cj4gPiArCj4gPiArCS8qIFVubWFzayBpcnFzIG9uIFJDUywgQkNT LCBWQ1MgYW5kIFZFQ1MgZW5naW5lcy4gKi8KPiA+ICsJSTkxNV9XUklURShHRU4xMV9SQ1MwX1JT VkRfSU5UUl9NQVNLLAl+KGlycXMgPDwKPiA+IDE2KSk7Cj4gPiArCUk5MTVfV1JJVEUoR0VOMTFf QkNTX1JTVkRfSU5UUl9NQVNLLAl+KGlycXMgPDwKPiA+IDE2KSk7Cj4gPiArCUk5MTVfV1JJVEUo R0VOMTFfVkNTMF9WQ1MxX0lOVFJfTUFTSywJfihpcnFzIHwgaXJxcwo+ID4gPDwgMTYpKTsKPiA+ ICsJSTkxNV9XUklURShHRU4xMV9WQ1MyX1ZDUzNfSU5UUl9NQVNLLAl+KGlycXMgfCBpcnFzCj4g PiA8PCAxNikpOwo+ID4gKwlJOTE1X1dSSVRFKEdFTjExX1ZFQ1MwX1ZFQ1MxX0lOVFJfTUFTSywJ fihpcnFzIHwKPiA+IGlycXMgPDwgMTYpKTsKPiAKPiBXZSBzaG91bGQgYWxzbyBoYXZlIGFuIGFj dHVhbCBzaGlmdCBhbmQgbWFzayAjZGVmaW5lcyBmb3IgdGhlc2UsIG5vdwo+IGl0J3MgYWxsIGhh cmRjb2RlZCBoZXJlLgo+IAo+ID4gKwo+ID4gKwlkZXZfcHJpdi0+cG1faW1yID0gMHhmZmZmZmZm ZjsgLyogVE9ETyAqLwo+IAo+IFNvbWUgY29kZSBtaXNzaW5nIGl0IHNlZW1zLgo+IAo+ID4gK30K PiAKPiA8U05JUD4KPiAKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMK PiA+IEBAIC03OTU3LDcgKzc5NTcsMTAgQEAgdm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNh dmUoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICAJZGV2X3ByaXYt Pmd0X3BtLnJjNi5lbmFibGVkID0gdHJ1ZTsgLyogZm9yY2UgUkM2IGRpc2FibGluZwo+ID4gKi8K PiA+ICAJaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwo+ID4gIAo+ID4gLQln ZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKPiA+ICsJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMSkKPiA+ICsJCWdlbjZfcmVzZXRfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYp Owo+ID4gKwllbHNlCj4gPiArCQlXQVJOX09OX09OQ0UoMSk7Cj4gCj4gU29tZSBjb2RlIGlzIG9i dmlvdXNseSBtaXNzaW5nIGhlcmUuCj4gCj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBpbmxpbmUg dm9pZCBpbnRlbF9kaXNhYmxlX2xsY19wc3RhdGUoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ID4gQEAgLTgwNzAsNiArODA3Myw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuYWJs ZV9ycHMoc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICAJCWNoZXJy eXZpZXdfZW5hYmxlX3JwcyhkZXZfcHJpdik7Cj4gPiAgCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdikpIHsKPiA+ICAJCXZhbGxleXZpZXdfZW5hYmxlX3JwcyhkZXZfcHJpdik7Cj4g PiArCX0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpKSB7 Cj4gPiArCQkvKiBUT0RPICovCj4gCj4gRGl0dG8uCj4gCj4gSWYgdGhlc2UgYXJlIGluIGEgbGF0 ZXIgcGF0Y2gsIHNob3VsZCBiZSBzcXVhc2hlZCBoZXJlLgoKU29tZSBvZiB0aGUgVE9ET3MgYW5k IFdBUk5zIGFkZGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGltcGxlbWVudGVkIGxhdGVyCmluIHRoZSBz ZXJpZXMuIEknbSBub3QgaW4gZmF2b3Igb2Ygc3F1YXNoaW5nIGV2ZXJ5dGhpbmcgaW50byBhIHNp bmdsZQpwYXRjaDogdGhpcyBwYXRjaCBpcyBtb3JlIGxpa2UgImFkZCB0aGUgZm91bmRhdGlvbiBm b3IgaW50ZXJydXB0cyIgYW5kCmxhdGVyIHBhdGNoZXMgaW1wbGVtZW50IHNwZWNpZmljIGZlYXR1 cmVzIHRoYXQgYXJlIG1pc3NpbmcgaGVyZSAocnBzLApyYzYsIGV0YykuCgpJbiBhZGRpdGlvbiB0 byB0aGF0LCB0aGV5IGFyZSBkb25lIGJ5IGRpZmZlcmVudCBhdXRob3JzLCBzbyBzcXVhc2hpbmcK bWFrZXMgYXV0aG9yc2hpcCBldmVuIG1vcmUgY29tcGxpY2F0ZWQuIElmIHRoZXNlIHdlcmUgZmVh dHVyZXMgb2YgYW4KZXhpc3RpbmcgYW5kIGFscmVhZHktd29ya2luZyBwbGF0Zm9ybSB0aGVuIHNx dWFzaGluZyB3b3VsZCBiZSBuZWVkZWQsCmJ1dCBub3QgaGVyZSBpbiB0aGlzIGNhc2Ugd2hlcmUg d2Uga25vdyBub3RoaW5nIHdvcmtzIGZvciBJQ0wgeWV0LgoKPiAKPiBSZWdhcmRzLCBKb29uYXMK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==