From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: drm/komeda: Add support for generation of CRC data per frame. Date: Fri, 2 Aug 2019 16:09:10 +0200 Message-ID: <20190802140910.GN7444@phenom.ffwll.local> References: <20190801104231.23938-1-Liviu.Dudau@arm.com> <20190802093908.7tt4navdtdnfvksf@DESKTOP-E1NTVVP.localdomain> <20190802101303.s6vod63363nnbjgv@DESKTOP-E1NTVVP.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4E4296EE6B for ; Fri, 2 Aug 2019 14:09:14 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id k8so72459799edr.11 for ; Fri, 02 Aug 2019 07:09:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190802101303.s6vod63363nnbjgv@DESKTOP-E1NTVVP.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Brian Starkey Cc: nd , Liviu Dudau , LKML , "dri-devel@lists.freedesktop.org" , "james qian wang (Arm Technology China)" , "Lowry Li (Arm Technology China)" List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBdWcgMDIsIDIwMTkgYXQgMTA6MTM6MDNBTSArMDAwMCwgQnJpYW4gU3RhcmtleSB3 cm90ZToKPiBIaSBEYW5pZWwsCj4gCj4gT24gRnJpLCBBdWcgMDIsIDIwMTkgYXQgMTE6NTI6MTFB TSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9uIEZyaSwgQXVnIDIsIDIwMTkgYXQg MTE6MzkgQU0gQnJpYW4gU3RhcmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPiB3cm90ZToKPiA+ ID4KPiA+ID4gSGkgTGl2aXUsCj4gPiA+Cj4gPiA+IE9uIFRodSwgQXVnIDAxLCAyMDE5IGF0IDEx OjQyOjMxQU0gKzAxMDAsIExpdml1IER1ZGF1IHdyb3RlOgo+ID4gPiA+IEtvbWVkYSBoYXMgc3Vw cG9ydCB0byBnZW5lcmF0ZSBwZXItZnJhbWUgQ1JDIHZhbHVlcyBpbiB0aGUgRE9VCj4gPiA+ID4g YmFja2VuZCBzdWJzeXN0ZW0uIEltcGxlbWVudCBuZWNlc3NhcnkgaG9va3MgdG8gZXhwb3NlIHRo ZSBDUkMKPiA+ID4gPiAiY29udHJvbCIgYW5kICJkYXRhIiBmaWxlIG92ZXIgZGVidWdmcyBhbmQg cHJvZ3JhbSB0aGUgRE9VeF9CUwo+ID4gPiA+IGFjY29yZGluZ2x5Lgo+ID4gPiA+Cj4gPiA+ID4g VGhpcyBwYXRjaCBtYWtlcyB1c2Ugb2YgUEwxIChwcm9ncmFtbWFibGUgbGluZSAxKSBpbnRlcnJ1 cHQgdG8KPiA+ID4gPiBrbm93IHdoZW4gdGhlIENSQyBnZW5lcmF0aW9uIGhhcyBmaW5pc2hlZC4K PiA+ID4gPgo+ID4gPiA+IFBhdGNoIGlzIGFsc28gZGVwZW5kZW50IG9uIHRoZSBzZXJpZXMgdGhh dCBhZGRzIGR1YWwtbGluayBzdXBwb3J0Cj4gPiA+ID4gZm9yIGtvbWVkYTogaHR0cHM6Ly9wYXRj aHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Nlcmllcy82MjI4MC8KPiA+ID4gPgo+ID4gPiA+IENjOiAi amFtZXMgcWlhbiB3YW5nIChBcm0gVGVjaG5vbG9neSBDaGluYSkiIDxqYW1lcy5xaWFuLndhbmdA YXJtLmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBMaXZpdSBEdWRhdSA8bGl2aXUuZHVkYXVA YXJtLmNvbT4KPiA+ID4gPiAtLS0KPiA+ID4gPiAgLi4uL2FybS9kaXNwbGF5L2tvbWVkYS9kNzEv ZDcxX2NvbXBvbmVudC5jICAgIHwgIDIgKy0KPiA+ID4gPiAgLi4uL2dwdS9kcm0vYXJtL2Rpc3Bs YXkva29tZWRhL2Q3MS9kNzFfZGV2LmMgIHwgMjkgKysrKysrKystCj4gPiA+ID4gIC4uLi9ncHUv ZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfY3J0Yy5jICB8IDYxICsrKysrKysrKysrKysr KysrKy0KPiA+ID4gPiAgLi4uL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9kZXYu aCAgIHwgIDIgKwo+ID4gPiA+ICAuLi4vZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRh X2ttcy5oICAgfCAgMyArCj4gPiA+ID4gIC4uLi9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVk YV9waXBlbGluZS5oICB8ICAxICsKPiA+ID4gPiAgNiBmaWxlcyBjaGFuZ2VkLCA5NCBpbnNlcnRp b25zKCspLCA0IGRlbGV0aW9ucygtKQo+ID4gPiA+Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvZDcxL2Q3MV9jb21wb25lbnQuYyBiL2RyaXZl cnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvZDcxL2Q3MV9jb21wb25lbnQuYwo+ID4gPiA+ IGluZGV4IDU1YThjYzk0ODA4YTEuLjNjNDU0Njg4NDhlZTQgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9kNzEvZDcxX2NvbXBvbmVudC5jCj4g PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9kNzEvZDcxX2Nv bXBvbmVudC5jCj4gPiA+ID4gQEAgLTEwNjEsNyArMTA2MSw3IEBAIHN0YXRpYyB2b2lkIGQ3MV90 aW1pbmdfY3RybHJfdXBkYXRlKHN0cnVjdCBrb21lZGFfY29tcG9uZW50ICpjLAo+ID4gPiA+ICAg ICAgIG1hbGlkcF93cml0ZTMyKHJlZywgQlNfUFJFRkVUQ0hfTElORSwgRDcxX0RFRkFVTFRfUFJF UFJFVENIX0xJTkUpOwo+ID4gPiA+Cj4gPiA+ID4gICAgICAgLyogY29uZmlndXJlIGJzIGNvbnRy b2wgcmVnaXN0ZXIgKi8KPiA+ID4gPiAtICAgICB2YWx1ZSA9IEJTX0NUUkxfRU4gfCBCU19DVFJM X1ZNOwo+ID4gPiA+ICsgICAgIHZhbHVlID0gQlNfQ1RSTF9FTiB8IEJTX0NUUkxfVk0gfCBCU19D VFJMX0NSQzsKPiA+ID4gPiAgICAgICBpZiAoYy0+cGlwZWxpbmUtPmR1YWxfbGluaykgewo+ID4g PiA+ICAgICAgICAgICAgICAgbWFsaWRwX3dyaXRlMzIocmVnLCBCU19EUklGVF9UTywgaGZyb250 X3BvcmNoICsgMTYpOwo+ID4gPiA+ICAgICAgICAgICAgICAgdmFsdWUgfD0gQlNfQ1RSTF9ETDsK PiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9k NzEvZDcxX2Rldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9kNzEvZDcx X2Rldi5jCj4gPiA+ID4gaW5kZXggZDU2N2FiN2VkMzE0ZS4uMDViZmQ5ODkxYzU0MCAxMDA2NDQK PiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2Q3MS9kNzFf ZGV2LmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2Q3 MS9kNzFfZGV2LmMKPiA+ID4gPiBAQCAtMTE1LDYgKzExNSw4IEBAIHN0YXRpYyB1NjQgZ2V0X2Rv dV9ldmVudChzdHJ1Y3QgZDcxX3BpcGVsaW5lICpkNzFfcGlwZWxpbmUpCj4gPiA+ID4gICAgICAg cmF3X3N0YXR1cyA9IG1hbGlkcF9yZWFkMzIocmVnLCBCTEtfSVJRX1JBV19TVEFUVVMpOwo+ID4g PiA+ICAgICAgIGlmIChyYXdfc3RhdHVzICYgRE9VX0lSUV9QTDApCj4gPiA+ID4gICAgICAgICAg ICAgICBldnRzIHw9IEtPTUVEQV9FVkVOVF9WU1lOQzsKPiA+ID4gPiArICAgICBpZiAocmF3X3N0 YXR1cyAmIERPVV9JUlFfUEwxKQo+ID4gPiA+ICsgICAgICAgICAgICAgZXZ0cyB8PSBLT01FREFf RVZFTlRfQ1JDRE9ORTsKPiA+ID4gPiAgICAgICBpZiAocmF3X3N0YXR1cyAmIERPVV9JUlFfVU5E KQo+ID4gPiA+ICAgICAgICAgICAgICAgZXZ0cyB8PSBLT01FREFfRVZFTlRfVVJVTjsKPiA+ID4g Pgo+ID4gPiA+IEBAIC0xNDksNyArMTUxLDcgQEAgc3RhdGljIHU2NCBnZXRfZG91X2V2ZW50KHN0 cnVjdCBkNzFfcGlwZWxpbmUgKmQ3MV9waXBlbGluZSkKPiA+ID4gPgo+ID4gPiA+ICBzdGF0aWMg dTY0IGdldF9waXBlbGluZV9ldmVudChzdHJ1Y3QgZDcxX3BpcGVsaW5lICpkNzFfcGlwZWxpbmUs IHUzMiBnY3Vfc3RhdHVzKQo+ID4gPiA+ICB7Cj4gPiA+ID4gLSAgICAgdTMyIGV2dHMgPSAwVUxM Owo+ID4gPiA+ICsgICAgIHU2NCBldnRzID0gMFVMTDsKPiA+ID4gPgo+ID4gPiA+ICAgICAgIGlm IChnY3Vfc3RhdHVzICYgKEdMQl9JUlFfU1RBVFVTX0xQVTAgfCBHTEJfSVJRX1NUQVRVU19MUFUx KSkKPiA+ID4gPiAgICAgICAgICAgICAgIGV2dHMgfD0gZ2V0X2xwdV9ldmVudChkNzFfcGlwZWxp bmUpOwo+ID4gPiA+IEBAIC0xNjMsNiArMTY1LDI2IEBAIHN0YXRpYyB1NjQgZ2V0X3BpcGVsaW5l X2V2ZW50KHN0cnVjdCBkNzFfcGlwZWxpbmUgKmQ3MV9waXBlbGluZSwgdTMyIGdjdV9zdGF0dXMp Cj4gPiA+ID4gICAgICAgcmV0dXJuIGV2dHM7Cj4gPiA+ID4gIH0KPiA+ID4gPgo+ID4gPiA+ICtz dGF0aWMgdm9pZCBnZXRfZnJhbWVfY3JjcyhzdHJ1Y3QgZDcxX3BpcGVsaW5lICpkNzFfcGlwZWxp bmUsIHUzMiBwaXBlLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga29t ZWRhX2V2ZW50cyAqZXZ0cykKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgIGlmIChldnRzLT5waXBl c1twaXBlXSAmIEtPTUVEQV9FVkVOVF9DUkNET05FKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICBz dHJ1Y3Qga29tZWRhX2NvbXBvbmVudCAqYzsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAgICAg ICBjID0ga29tZWRhX3BpcGVsaW5lX2dldF9jb21wb25lbnQoJmQ3MV9waXBlbGluZS0+YmFzZSwK PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL T01FREFfQ09NUE9ORU5UX1RJTUlOR19DVFJMUik7Cj4gPiA+ID4gKyAgICAgICAgICAgICBpZiAo IWMpCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gPiArCj4gPiA+ ID4gKyAgICAgICAgICAgICBldnRzLT5jcmNzW3BpcGVdWzBdID0gbWFsaWRwX3JlYWQzMihjLT5y ZWcsIEJTX0NSQzBfTE9XKTsKPiA+ID4gPiArICAgICAgICAgICAgIGV2dHMtPmNyY3NbcGlwZV1b MV0gPSBtYWxpZHBfcmVhZDMyKGMtPnJlZywgQlNfQ1JDMF9ISUdIKTsKPiA+ID4gPiArICAgICAg ICAgICAgIGlmIChkNzFfcGlwZWxpbmUtPmJhc2UuZHVhbF9saW5rKSB7Cj4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGV2dHMtPmNyY3NbcGlwZV1bMl0gPSBtYWxpZHBfcmVhZDMyKGMtPnJl ZywgQlNfQ1JDMV9MT1cpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBldnRzLT5jcmNz W3BpcGVdWzNdID0gbWFsaWRwX3JlYWQzMihjLT5yZWcsIEJTX0NSQzFfSElHSCk7Cj4gPiA+ID4g KyAgICAgICAgICAgICB9Cj4gPiA+ID4gKyAgICAgfQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICBzdGF0aWMgaXJxcmV0dXJuX3QKPiA+ID4gPiAgZDcxX2lycV9oYW5kbGVyKHN0cnVjdCBr b21lZGFfZGV2ICptZGV2LCBzdHJ1Y3Qga29tZWRhX2V2ZW50cyAqZXZ0cykKPiA+ID4gPiAgewo+ ID4gPiA+IEBAIC0xOTUsNiArMjE3LDkgQEAgZDcxX2lycV9oYW5kbGVyKHN0cnVjdCBrb21lZGFf ZGV2ICptZGV2LCBzdHJ1Y3Qga29tZWRhX2V2ZW50cyAqZXZ0cykKPiA+ID4gPiAgICAgICBpZiAo Z2N1X3N0YXR1cyAmIEdMQl9JUlFfU1RBVFVTX1BJUEUxKQo+ID4gPiA+ICAgICAgICAgICAgICAg ZXZ0cy0+cGlwZXNbMV0gfD0gZ2V0X3BpcGVsaW5lX2V2ZW50KGQ3MS0+cGlwZXNbMV0sIGdjdV9z dGF0dXMpOwo+ID4gPiA+Cj4gPiA+ID4gKyAgICAgZ2V0X2ZyYW1lX2NyY3MoZDcxLT5waXBlc1sw XSwgMCwgZXZ0cyk7Cj4gPiA+ID4gKyAgICAgZ2V0X2ZyYW1lX2NyY3MoZDcxLT5waXBlc1sxXSwg MSwgZXZ0cyk7Cj4gPiA+ID4gKwo+ID4gPiA+ICAgICAgIHJldHVybiBnY3Vfc3RhdHVzID8gSVJR X0hBTkRMRUQgOiBJUlFfTk9ORTsKPiA+ID4gPiAgfQo+ID4gPiA+Cj4gPiA+ID4gQEAgLTIwMiw3 ICsyMjcsNyBAQCBkNzFfaXJxX2hhbmRsZXIoc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYsIHN0cnVj dCBrb21lZGFfZXZlbnRzICpldnRzKQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHQ1VfSVJRX01PREUgfCBHQ1VfSVJRX0VSUikKPiA+ID4gPiAgI2RlZmluZSBFTkFCTEVE X0xQVV9JUlFTICAgICAoTFBVX0lSUV9JQlNZIHwgTFBVX0lSUV9FUlIgfCBMUFVfSVJRX0VPVykK PiA+ID4gPiAgI2RlZmluZSBFTkFCTEVEX0NVX0lSUVMgICAgICAgICAgICAgIChDVV9JUlFfT1ZS IHwgQ1VfSVJRX0VSUikKPiA+ID4gPiAtI2RlZmluZSBFTkFCTEVEX0RPVV9JUlFTICAgICAoRE9V X0lSUV9VTkQgfCBET1VfSVJRX0VSUikKPiA+ID4gPiArI2RlZmluZSBFTkFCTEVEX0RPVV9JUlFT ICAgICAoRE9VX0lSUV9VTkQgfCBET1VfSVJRX0VSUiB8IERPVV9JUlFfUEwxKQo+ID4gPiA+Cj4g PiA+ID4gIHN0YXRpYyBpbnQgZDcxX2VuYWJsZV9pcnEoc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYp Cj4gPiA+ID4gIHsKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNw bGF5L2tvbWVkYS9rb21lZGFfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tv bWVkYS9rb21lZGFfY3J0Yy5jCj4gPiA+ID4gaW5kZXggZmE5YTQ1OTNiYjM3NS4uNGI5ZjVkMzNl OTk5ZCAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29t ZWRhL2tvbWVkYV9jcnRjLmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3Bs YXkva29tZWRhL2tvbWVkYV9jcnRjLmMKPiA+ID4gPiBAQCAtMjA3LDEwICsyMDcsMTMgQEAgdm9p ZCBrb21lZGFfY3J0Y19oYW5kbGVfZXZlbnQoc3RydWN0IGtvbWVkYV9jcnRjICAgKmtjcnRjLAo+ ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChj cnRjLCBldmVudCk7Cj4gPiA+ID4gICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gPiA+ICAgICAg ICAgICAgICAgICAgICAgICBEUk1fV0FSTigiQ1JUQ1slZF06IEZMSVAgaGFwcGVuIGJ1dCBubyBw ZW5kaW5nIGNvbW1pdC5cbiIsCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRybV9jcnRjX2luZGV4KCZrY3J0Yy0+YmFzZSkpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cj4gPiA+ID4gICAgICAgICAgICAg ICB9Cj4gPiA+ID4gICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5k ZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ID4gPiAgICAgICB9Cj4gPiA+ID4gKwo+ID4gPiA+ ICsgICAgIGlmICgoa2NydGMtPmNyY19lbmFibGVkKSAmJiAoZXZlbnRzICYgS09NRURBX0VWRU5U X0NSQ0RPTkUpKQo+ID4gPiA+ICsgICAgICAgICAgICAgZHJtX2NydGNfYWRkX2NyY19lbnRyeShj cnRjLCBmYWxzZSwgMCwgZXZ0cy0+Y3Jjc1trY3J0Yy0+bWFzdGVyLT5pZF0pOwo+ID4gPiA+ICB9 Cj4gPiA+ID4KPiA+ID4gPiAgc3RhdGljIHZvaWQKPiA+ID4gPiBAQCAtNDg3LDYgKzQ5MCw1OSBA QCBzdGF0aWMgdm9pZCBrb21lZGFfY3J0Y192YmxhbmtfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gPiA+ID4gICAgICAgbWRldi0+ZnVuY3MtPm9uX29mZl92YmxhbmsobWRldiwga2Ny dGMtPm1hc3Rlci0+aWQsIGZhbHNlKTsKPiA+ID4gPiAgfQo+ID4gPiA+Cj4gPiA+ID4gK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3Qga29tZWRhX3BpcGVfY3JjX3NvdXJjZXNbXSA9IHsiYXV0byJ9 Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0ICprb21lZGFfY3J0 Y19nZXRfY3JjX3NvdXJjZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmNvdW50 KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgKmNvdW50ID0gQVJSQVlfU0laRShrb21lZGFfcGlw ZV9jcmNfc291cmNlcyk7Cj4gPiA+ID4gKyAgICAgcmV0dXJuIGtvbWVkYV9waXBlX2NyY19zb3Vy Y2VzOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGtvbWVkYV9jcnRj X3BhcnNlX2NyY19zb3VyY2UoY29uc3QgY2hhciAqc291cmNlKQo+ID4gPiA+ICt7Cj4gPiA+ID4g KyAgICAgaWYgKCFzb3VyY2UpCj4gPiA+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ID4g PiArICAgICBpZiAoc3RyY21wKHNvdXJjZSwgImF1dG8iKSA9PSAwKQo+ID4gPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIDE7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgIHJldHVybiAtRUlOVkFMOwo+ ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGtvbWVkYV9jcnRjX3Zlcmlm eV9jcmNfc291cmNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzb3VyY2VfbmFtZSwKPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnZhbHVlc19j b3VudCkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgIHN0cnVjdCBrb21lZGFfY3J0YyAqa2NydGMg PSB0b19rY3J0YyhjcnRjKTsKPiA+ID4gPiArICAgICBpbnQgc291cmNlID0ga29tZWRhX2NydGNf cGFyc2VfY3JjX3NvdXJjZShzb3VyY2VfbmFtZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgIGlm IChzb3VyY2UgPCAwKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICBEUk1fREVCVUdfRFJJVkVSKCJV bmtub3duIG9yIGludmFsaWQgQ1JDIHNvdXJjZSBmb3IgQ1JUQyVkXG4iLAo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cj4gPiA+ID4g KyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArICAgICB9Cj4gPiA+ID4gKwo+ ID4gPiA+ICsgICAgICp2YWx1ZXNfY291bnQgPSBrY3J0Yy0+bWFzdGVyLT5kdWFsX2xpbmsgPyA0 IDogMjsKPiA+ID4KPiA+ID4gQ2FuIENSQyBnZW5lcmF0aW9uIGNvbnRpbnVlIGFjcm9zcyBhIG1v ZGVzZXQ/IElmIHNvIEkgdGhpbmsgd2UgY291bGQKPiA+ID4gZW5kIHVwIHdpdGggYSBjYXNlIHdo ZXJlIGR1YWxfbGluayBjaGFuZ2VzIHdoaWxlIENSQyBpcyBhY3RpdmUuIE1heWJlCj4gPiA+IHdl IHNob3VsZCBqdXN0IGFsd2F5cyByZXR1cm4gNCB2YWx1ZXMsIGJ1dCBzZXQgdGhlIHRoaXJkIGFu ZCBmb3VydGgKPiA+ID4gdmFsdWVzIHRvIDAgaW4gdGhlIGV2ZW50IGhhbmRsZXIsIGlmIGR1YWwt bGluayBpc24ndCBhY3RpdmUuCj4gPiAKPiA+IE1vZGVzZXQgaXMgYWxsb3dlZCB0byBkZXN0cnkg dGhlIGNyYyBzZXR1cC4gTWF5YmUgbm90IHRoZSBzbWFydGVzdAo+ID4gZGVjaXNpb24gKGl0IHBy ZXZlbnRzIHVzIGZyb20gbWFraW5nIHN1cmUgdGhlIGZpcnN0IGZyYW1lIGlzIHBlcmZlY3QpLAo+ ID4gYnV0IHByZXR0eSBkZWVwbHkgaW4tZ3JhaW5lZCBpbnRvIHRlc3RzIGJ5IG5vdy4gSWYgd2Ug d2FudCB0byBtb3ZlCj4gPiB0aGlzIEkgdGhpbmsgZmlyc3Qgc3RlcCB3b3VsZCBiZSB0byBhZGQg bmV3IGJhc2ljIHRlc3RjYXNlcyB0byBpZ3QgdG8KPiA+IHZhbGlkYXRlIGNyYyBnZW5lcmF0aW9u IGFnYWluc3QgbW9kZXNldHMgKG1heWJlIHN0YXJ0IHdpdGggZHBtcwo+ID4gb2ZmL29uLCB0aGVu IHN1c3BlbmQvcmVzdW1lLCB0aGVuIGZ1bGwgbW9kZXNldHMpLiBSZWFsbHkgbm90IHN1cmUKPiA+ IHRoZXJlJ3MgYSBuZWVkLCBhbmQgSSd2ZSBzZWVuIHRvbyBtYW55IGNhc2VzIGxpa2UgdGhpcyB3 aGVyZSBjcmMKPiA+IGdlbmVyYXRpb24gY2hhbmdlcyBkZXBlbmRpbmcgdXBvbiBtb2Rlc2V0IChi cHAsIHJvdXRpbmcsIC4uLikgdG8KPiA+IGFzc3VtZSB3ZSBjYW4ganVzdCBtYWtlIGl0IHdvcmsu Cj4gPiAKPiA+IEknZCBub3QgYm90aGVyIGFuZCBsZWF2ZSB0aGluZ3MgYXMtaXMuCj4gCj4gT0sg Z29vZCwgZ2xhZCB3ZSdyZSBub3QgYWxvbmUuIERvIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgc3Bl Y2lmaWMgdG8KPiBzdG9wL3JlY29uZmlndXJlIGdlbmVyYXRpb24gb3ZlciBtb2Rlc2V0LCBvciB3 ZSBqdXN0IHJlbHkgb24gdXNlcnNwYWNlCj4gdG8gcmVjb25maWd1cmU/CgpFeHBlY3RhdGlvbiBp czoKLSB1c2Vyc3BhY2UgY29uZmlndXJlcyBtb2RlCi0gdXNlcnNwYWNlIHNlbGVjdHMgY3JjIHNv dXJjZSBhbmQgZW5hYmxlcyBpdCAodGhpcyBtaWdodCBpbnRlcm5hbGx5IGRvIGEKICBmdWxsIG1v ZGVzZXQgdG8gZ2V0IHRoZSBwaXBlbGluZSBiYWNrIGludG8gYSBzaGFwZSB3ZXJlIHdlIGNhbiBj YXB0dXJlCiAgY3JjcyAtIHNvbWUgb2YgdGhlIGxvdyBwb3dlciBtb2RlcyBpbiBpOTE1IGJ5cGFz cyB0aGUgY3JjIGJsb2NrIC4uLgogIHlheSkuCgpTbyBub3RoaW5nIHRvIGRvIGZvciB5b3UuIEkg dGhpbmsgdGhlIHJvdWdoIHJ1bGUgaXMgdGhhdCBjcmMgZ2VuZXJhdGlvbgpzaG91bGQgY29udGlu dWUgd29ya2luZyBhcyBsb25nIGFzIHlvdSBkb24ndCBkbyBhbnl0aGluZyB3aGljaCByZXF1aXJl cyBhbgpBTExPV19NT0RFU0VUIGNvbW1pdC4KCkNhcmUgdG8gdHlwZSBhIGtlcm5lbGRvYyBwYXRj aCB0byBjbGFyaWZ5IHRoaXMsIHNpbmNlIEkgdGhpbmsgY3VycmVudCBkb2NzCmFyZSBsYWNraW5n PwotRGFuaWVsCgo+IAo+IFRoYW5rcywKPiAtQnJpYW4KPiAKPiA+IC1EYW5pZWwKPiA+ID4KPiA+ ID4gQ2hlZXJzLAo+ID4gPiAtQnJpYW4KPiA+ID4KCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJl IEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=