From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandru-Cosmin Gheorghe Subject: Re: [PATCH hwc v2 04/18] drm_hwcomposer: Add resource manager class Date: Wed, 18 Apr 2018 11:12:09 +0100 Message-ID: <20180418101209.GA10633@e114479-lin.cambridge.arm.com> References: <1523460149-1740-1-git-send-email-alexandru-cosmin.gheorghe@arm.com> <1523460149-1740-5-git-send-email-alexandru-cosmin.gheorghe@arm.com> <20180417153305.GD73214@art_vandelay> <4e0c3384-ff0e-ab9a-1034-bc6297a0eda5@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0061.outbound.protection.outlook.com [104.47.1.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id B3C506E3F8 for ; Wed, 18 Apr 2018 10:12:15 +0000 (UTC) Content-Disposition: inline In-Reply-To: <4e0c3384-ff0e-ab9a-1034-bc6297a0eda5@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Robert Foss Cc: liviu.dudau@arm.com, nd@arm.com, ayan.halder@arm.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBBcHIgMTcsIDIwMTggYXQgMDY6MDg6MDZQTSArMDIwMCwgUm9iZXJ0IEZvc3Mgd3Jv dGU6Cj4gSGV5LAo+IAo+IE9uIDA0LzE3LzIwMTggMDU6MzMgUE0sIFNlYW4gUGF1bCB3cm90ZToK PiA+T24gV2VkLCBBcHIgMTEsIDIwMTggYXQgMDQ6MjI6MTVQTSArMDEwMCwgQWxleGFuZHJ1IEdo ZW9yZ2hlIHdyb3RlOgo+ID4+QWRkIGEgcmVzb3VyY2UgbWFuYWdlciBvYmplY3QgdGhhdCBpcyBy ZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIGFsbAo+ID4+a21zIGRldmljZXMgYW5kIGFsbG9jYXRl cyB1bmlxdWUgZGlzcGxheSBudW1iZXJzIGZvciBldmVyeSBkZXRlY3RlZAo+ID4+ZGlzcGxheS4K PiA+Pgo+ID4+VGhpcyBpcyBjb250cm9sbGVkIGJ5IHRoZSB2YWx1ZSBvZiBod2MuZHJtLmRldmlj ZSBwcm9wZXJ0eSwgaWYgaXQgZW5kcwo+ID4+d2l0aCBhICUsIGl0IHdpbGwgdHJ5IHRvIG9wZW4g bWlub3IgZGV2aWNlcyB1bnRpbCBhbmQgZXJyb3IgaXMgZGV0ZWN0ZWQuCj4gPj5FLmc6IC9kZXYv ZHJpL2NhcmQlCj4gPgo+ID5JJ20gYSBiaXQgb24gdGhlIGZlbmNlIGFzIHRvIHdoZXRoZXIgdG8g dXNlIHRoZSAlLCBvciBhZGQgYSBuZXcKPiA+aHdjLmRybS5zY2FuX2RldmljZXMgcHJvcGVydHku IEkgZ3Vlc3Mgc2luY2Ugd2UgbmVlZCB0byBjb252ZXkgdGhlIHBhdGggYW55d2F5cwo+ID50aGlz IGlzIGZpbmUsIGJ1dCBpdCByZWFsbHkgbmVlZHMgdG8gYmUgYmV0dGVyIGRvY3VtZW50ZWQuCj4g Cj4gSSdtIGxvb2tpbmcgYXQgdGhpcyBzdHVmZiBpbiBhbm90aGVyIHNlcmllcyBhYm91dCBEUk0g Tm9kZSBwcm9iaW5nWzFdLAo+IGFuZCBJJ2xsIGxvb2sgaW50byB1c2luZyBwcm9wZXJ0aWVzIHRv IGRlZmluZSB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KPiAKPiBCdXQgdGhvc2UgcHJvcGVydGll cyB3b24ndCBiZSBwYXRocywgYnV0IHJhdGhlciBQQ0kgSURzIGFuZCBkcml2ZXIgdmVuZG9yIG5h bWVzLgo+IAo+IEFzIGZvciB3aGF0IHRvIGRvIGluIHRoZSBzZXJpZXMsIEkgZG9uJ3QgaGF2ZSBt dWNoIG9mIGFuIG9waW5pb24uIEJ1dCBJJ20KPiBsaWtlbHkgdG8gdHJ5IHRvIGNoYW5nZSBpdCBp biB0aGUgbm90IHRvbyBkaXN0YW50IGZ1dHVyZS4KPiAKPiAKPiBbMV0gaHR0cHM6Ly93d3cuc3Bp bmljcy5uZXQvbGlzdHMvZHJpLWRldmVsL21zZzE3MjQ5Ni5odG1sCgpBcmVuJ3QgdGhpcyB0d28g Y29tcGxlbWVudGFyeT8gClRoaXMgc2VyaWVzIHRyeSB0byBnbyB0aHJvdWdoIGFsbCBhdmFpbGFi bGUgbm9kZXMgYW5kIHlvdXJzIHByb3ZpZGVzIGEKbWVjaGFuaXNtIHRvIGNoZWNrIGlmIGZpbGUg ZGVzY3JpcHRvciBtYXRjaCBzb21lIGV4cGVjdGF0aW9ucy4KWW91IHN0aWxsIGhhdmUgdG8gb3Bl biB0aGVtIHNvbWVob3cuCgo+IAo+ID4KPiA+Pgo+ID4+QWRkaXRpb25hbGx5LCB0aGlzIHdpbGwg YmUgdXNlZCBmb3IgZmluZGluZyBhbiBhdmFpbGFibGUgd3JpdGViYWNrCj4gPj5jb25uZWN0b3Ig dGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSBjdXJyZW50bHkKPiA+ PmRpc3BsYXllZCBzY2VuZS4KPiA+Pgo+ID4+U2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1IEdoZW9y Z2hlIDxhbGV4YW5kcnUtY29zbWluLmdoZW9yZ2hlQGFybS5jb20+Cj4gPj4tLS0KPiA+PiAgQW5k cm9pZC5tayAgICAgICAgICB8ICAxICsKPiA+PiAgcmVzb3VyY2VtYW5hZ2VyLmNwcCB8IDcxICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4g IHJlc291cmNlbWFuYWdlci5oICAgfCAyOSArKysrKysrKysrKysrKysrKysrKysrCj4gPj4gIDMg ZmlsZXMgY2hhbmdlZCwgMTAxIGluc2VydGlvbnMoKykKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHJlc291cmNlbWFuYWdlci5jcHAKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHJlc291cmNlbWFu YWdlci5oCj4gPj4KPiA+PmRpZmYgLS1naXQgYS9BbmRyb2lkLm1rIGIvQW5kcm9pZC5tawo+ID4+ aW5kZXggMWFkZDI4Ni4uNzM2ZmUyNCAxMDA2NDQKPiA+Pi0tLSBhL0FuZHJvaWQubWsKPiA+Pisr KyBiL0FuZHJvaWQubWsKPiA+PkBAIC01Miw2ICs1Miw3IEBAIExPQ0FMX0NfSU5DTFVERVMgOj0g XAo+ID4+ICBMT0NBTF9TUkNfRklMRVMgOj0gXAo+ID4+ICAJYXV0b2xvY2suY3BwIFwKPiA+PisJ cmVzb3VyY2VtYW5hZ2VyLmNwcCBcCj4gPj4gIAlkcm1yZXNvdXJjZXMuY3BwIFwKPiA+PiAgCWRy bWNvbm5lY3Rvci5jcHAgXAo+ID4+ICAJZHJtY3J0Yy5jcHAgXAo+ID4+ZGlmZiAtLWdpdCBhL3Jl c291cmNlbWFuYWdlci5jcHAgYi9yZXNvdXJjZW1hbmFnZXIuY3BwCj4gPj5uZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4+aW5kZXggMDAwMDAwMC4uZTdiNjU0ZQo+ID4+LS0tIC9kZXYvbnVsbAo+ID4+ KysrIGIvcmVzb3VyY2VtYW5hZ2VyLmNwcAo+ID4+QEAgLTAsMCArMSw3MSBAQAo+ID4+KyNpbmNs dWRlICJyZXNvdXJjZW1hbmFnZXIuaCIKPiA+PisjaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgo+ID4+ KyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgo+ID4+Kwo+ID4+K25hbWVzcGFjZSBhbmRy b2lkIHsKPiA+PisKPiA+PitSZXNvdXJjZU1hbmFnZXI6OlJlc291cmNlTWFuYWdlcigpIDogZ3Jh bGxvY18oTlVMTCkgewo+ID4+K30KPiA+PisKPiA+PitpbnQgUmVzb3VyY2VNYW5hZ2VyOjpJbml0 KCkgewo+ID4+KyAgY2hhciBwYXRoX3BhdHRlcm5bUFJPUEVSVFlfVkFMVUVfTUFYXTsKPiA+Pisg IHByb3BlcnR5X2dldCgiaHdjLmRybS5kZXZpY2UiLCBwYXRoX3BhdHRlcm4sICIvZGV2L2RyaS9j YXJkJSIpOwo+ID4KPiA+V2UgcHJvYmFibHkgYWxzbyBkb24ndCB3YW50IHRvIGRlZmF1bHQgdG8g c2Nhbm5pbmcsIHNpbmNlIHRoYXQgbWlnaHQgY2hhbmdlCj4gPmJlaGF2aW9yIGluIGV4aXN0aW5n IGJvYXJkcy4KPiA+Cj4gPj4rCj4gPj4rICB1aW50OF90IG1pbm9yID0gMDsKPiA+Cj4gPlBsZWFz ZSB1c2UgdW5zaWduZWQvaW50IGluc3RlYWQgb2YgZml4ZWQtc2l6ZSB0eXBlcy4gVW5sZXNzIHRo ZSBudW1iZXIgb2YgYml0cwo+ID5pcyByZWxldmFudCB0byB1c2Ugb2YgdGhlIHZhcmlhYmxlLCBs ZXQgdGhlIGNvbXBpbGVyIGhhbmRsZSBpdC4KPiA+Cj4gPj4rICBpbnQgbGFzdF9kaXNwbGF5X2lu ZGV4ID0gMDsKPiA+Cj4gPkNvdWxkIHdlIGp1c3QgY2FsbCB0aGlzIG51bV9kaXNwbGF5cz8gSXQg d2FzIGtpbmQgb2YgaGFyZCBmb3IgbWUgdG8gcmVhc29uCj4gPnRocm91Z2ggdGhpcywgZXNwZWNp YWxseSB3aGVuIGl0J3MgY2FsbCAic3RhcnRfZGlzcGxheV9pbmRleCIgd2hlbiB5b3UganVtcCBp bnRvCj4gPmRybTo6SW5pdCgpLiBJIGFsc28gdGhpbmsgZHJtLT5Jbml0J3MgcmV0dXJuIHBhaXIg c2hvdWxkIHJldHVybgo+ID48cmV0LCBkaXNwbGF5c19hZGRlZD4gaW5zdGVhZCBvZiA8cmV0LCBk aXNwbGF5X2luZGV4Piwgc28gZWFjaCB0aW1lIHlvdSBjYWxsCj4gPkluaXQoKSwgeW91J3JlIGFk ZGluZyB0byBudW1fZGlzcGxheXMuCj4gPgo+ID4+KyAgaW50IGxhc3RfY2hhciA9IHN0cmxlbihw YXRoX3BhdHRlcm4pIC0gMTsKPiA+PisgIGRvIHsKPiA+PisgICAgY2hhciBwYXRoW1BST1BFUlRZ X1ZBTFVFX01BWF07Cj4gPgo+ID5QbGVhc2UgdXNlIHN0cmluZwo+ID4KPiA+PisgICAgaWYgKHBh dGhfcGF0dGVybltsYXN0X2NoYXJdID09ICclJykgewo+ID4+KyAgICAgIHBhdGhfcGF0dGVyblts YXN0X2NoYXJdID0gJ1wwJzsKPiA+PisgICAgICBzbnByaW50ZihwYXRoLCBQUk9QRVJUWV9WQUxV RV9NQVgsICIlcyVkIiwgcGF0aF9wYXR0ZXJuLCBtaW5vcik7Cj4gPj4rICAgICAgcGF0aF9wYXR0 ZXJuW2xhc3RfY2hhcl0gPSAnJSc7Cj4gPgo+ID5UaGlzIGRvZXNuJ3Qgd29yayBmb3IgbWlub3Ig PiAxMC4KPiA+Cj4gPj4rICAgIH0gZWxzZSB7Cj4gPj4rICAgICAgc25wcmludGYocGF0aCwgUFJP UEVSVFlfVkFMVUVfTUFYLCAiJXMiLCBwYXRoX3BhdHRlcm4pOwo+ID4+KyAgICB9Cj4gPj4rICAg IHN0ZDo6dW5pcXVlX3B0cjxEcm1SZXNvdXJjZXM+IGRybSA9IHN0ZDo6bWFrZV91bmlxdWU8RHJt UmVzb3VyY2VzPigpOwo+ID4+KyAgICBsYXN0X2Rpc3BsYXlfaW5kZXggPSBkcm0tPkluaXQodGhp cywgcGF0aCwgbGFzdF9kaXNwbGF5X2luZGV4KTsKPiA+PisgICAgaWYgKGxhc3RfZGlzcGxheV9p bmRleCA8IDApIHsKPiA+PisgICAgICBicmVhazsKPiA+PisgICAgfQo+ID4+KyAgICBzdGQ6OnNo YXJlZF9wdHI8SW1wb3J0ZXI+IGltcG9ydGVyOwo+ID4+KyAgICBpbXBvcnRlci5yZXNldChJbXBv cnRlcjo6Q3JlYXRlSW5zdGFuY2UoZHJtLmdldCgpKSk7Cj4gPj4rICAgIGlmICghaW1wb3J0ZXIp IHsKPiA+PisgICAgICBBTE9HRSgiRmFpbGVkIHRvIGNyZWF0ZSBpbXBvcnRlciBpbnN0YW5jZSIp Owo+ID4+KyAgICAgIGJyZWFrOwo+ID4+KyAgICB9Cj4gPj4rICAgIGltcG9ydGVyc18ucHVzaF9i YWNrKGltcG9ydGVyKTsKPiA+PisgICAgZHJtc18ucHVzaF9iYWNrKHN0ZDo6bW92ZShkcm0pKTsK PiA+PisgICAgbWlub3IrKzsKPiA+PisgICAgbGFzdF9kaXNwbGF5X2luZGV4Kys7Cj4gPj4rICB9 IHdoaWxlIChwYXRoX3BhdHRlcm5bbGFzdF9jaGFyXSA9PSAnJScpOwo+ID4+Kwo+ID4+KyAgaWYg KCFkcm1zXy5zaXplKCkpIHsKPiA+PisgICAgQUxPR0UoIkZhaWxlZCB0byBmaW5kIGFueSB3b3Jr aW5nIGRybSBkZXZpY2UiKTsKPiA+PisgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4rICB9Cj4gPj4r Cj4gPj4rICByZXR1cm4gaHdfZ2V0X21vZHVsZShHUkFMTE9DX0hBUkRXQVJFX01PRFVMRV9JRCwK PiA+PisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBod19tb2R1bGVfdCAqKikmZ3JhbGxv Y18pOwo+ID4+K30KPiA+Cj4gPkNvbnNpZGVyIHRoZSBmb2xsb3dpbmc6Cj4gPgo+ID5pbnQgUmVz b3VyY2VNYW5hZ2VyOjpBZGREcm1EZXZpY2Uoc3RkOjpzdHJpbmcgcGF0aCkgewo+ID4gICBzdGQ6 OnVuaXF1ZV9wdHI8RHJtRGV2aWNlPiBkcm0gPSBzdGQ6Om1ha2VfdW5pcXVlPERybURldmljZT4o KTsKPiA+ICAgaW50IGRpc3BsYXlzX2FkZGVkLCByZXQ7Cj4gPiAgIHN0ZDo6dGllKGRpc3BsYXlz X2FkZGVkLCByZXQpID0gZHJtLT5Jbml0KHBhdGguY19zdHIoKSwgbnVtX2Rpc3BsYXlzXyk7Cj4g PiAgIGlmIChyZXQpCj4gPiAgICAgcmV0dXJuIHJldDsKPiA+Cj4gPiAgIHN0ZDo6c2hhcmVkX3B0 cjxJbXBvcnRlcj4gaW1wb3J0ZXI7Cj4gPiAgIGltcG9ydGVyLnJlc2V0KEltcG9ydGVyOjpDcmVh dGVJbnN0YW5jZShkcm0uZ2V0KCkpKTsKPiA+ICAgaWYgKCFpbXBvcnRlcikgewo+ID4gICAgIEFM T0dFKCJGYWlsZWQgdG8gY3JlYXRlIGltcG9ydGVyIGluc3RhbmNlIik7Cj4gPiAgICAgcmV0dXJu IC1FTk9ERVY7Cj4gPiAgIH0KPiA+Cj4gPiAgIGltcG9ydGVyc18ucHVzaF9iYWNrKGltcG9ydGVy KTsKPiA+ICAgZHJtc18ucHVzaF9iYWNrKHN0ZDo6bW92ZShkcm0pKTsKPiA+ICAgbnVtX2Rpc3Bs YXlzXyArPSBkaXNwbGF5c19hZGRlZDsKPiA+ICAgcmV0dXJuIDA7Cj4gPn0KPiA+Cj4gPmludCBS ZXNvdXJjZU1hbmFnZXI6OkluaXQoKSB7Cj4gPiAgIGNoYXIgcGF0aF9wYXR0ZXJuW1BST1BFUlRZ X1ZBTFVFX01BWF07Cj4gPiAgIGludCBwYXRoX2xlbiA9IHByb3BlcnR5X2dldCgiaHdjLmRybS5k ZXZpY2UiLCBwYXRoX3BhdHRlcm4sICIvZGV2L2RyaS9jYXJkJSIpOwo+ID4KPiA+ICAgaWYgKHBh dGhfcGF0dGVybltwYXRoX2xlbiAtIDFdICE9ICclJykKPiA+ICAgICByZXR1cm4gQWRkRHJtRGV2 aWNlKHN0ZDo6c3RyaW5nKHBhdGhfcGF0dGVybik7Cj4gPgo+ID4gICBwYXRoX3BhdHRlcm5bcGF0 aF9sZW4gLSAxXSA9ICdcMCc7Cj4gPiAgIGZvciAoaW50IHJldCA9IDAsIGlkeCA9IDA7ICFyZXQ7 ICsraWR4KSB7Cj4gPiAgICAgb3N0cmluZ3N0cmVhbSBwYXRoOwo+ID4gICAgIHBhdGggPDwgcGF0 aF9wYXR0ZXJuIDw8IGlkeDsKPiA+ICAgICByZXQgPSBBZGREcm1EZXZpY2UocGF0aC5zdHIoKSk7 Cj4gPiAgIH0KPiA+ICAgaWYgKCFudW1fZGlzcGxheXNfKSB7Cj4gPiAgICAgQUxPR0UoIkZhaWxl ZCB0byBpbml0aWFsaXplIGFueSBkaXNwbGF5cyIpOwo+ID4gICAgIHJldHVybiAtRUlOVkFMOwo+ ID4gICB9Cj4gPgo+ID4gICByZXR1cm4gaHdfZ2V0X21vZHVsZShHUkFMTE9DX0hBUkRXQVJFX01P RFVMRV9JRCwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGh3X21vZHVsZV90ICoq KSZncmFsbG9jXyk7Cj4gPn0KPiA+Cj4gPkkgdGhpbmsgcmVzb2x2ZXMgdGhlIGlzc3VlcyBmcm9t IHRoZSBvcmlnaW5hbCBwYXRjaGVzIGFuZCBpbmNvcnBvcmF0ZXMgdGhlCj4gPnN1Z2dlc3Rpb25z IG9mIGRybS0+SW5pdCgpIHJldHVybmluZyB0aGUgdHVwbGUgb2YgYWRkZWQgZGlzcGxheXMsIGFz IHdlbGwgYXMKPiA+ZWxpbWluYXRpbmcgdGhlIGJhY2twb2ludGVyLgo+ID4KPiA+Cj4gPj4rCj4g Pj4rRHJtUmVzb3VyY2VzICpSZXNvdXJjZU1hbmFnZXI6OkdldERybVJlc291cmNlcyhpbnQgZGlz cGxheSkgewo+ID4+KyAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRybXNfLnNpemUoKTsgaSsr KSB7Cj4gPgo+ID5mb3IgKGF1dG8gJmRybV86IGRybXNfKSB7Cj4gPgo+ID4+KyAgICBpZiAoZHJt c19baV0tPkhhbmRsZXNEaXNwbGF5KGRpc3BsYXkpKQo+ID4+KyAgICAgIHJldHVybiBkcm1zX1tp XS5nZXQoKTsKPiA+PisgIH0KPiA+PisgIHJldHVybiBOVUxMOwo+ID4+K30KPiA+PisKPiA+Pitz dGQ6OnNoYXJlZF9wdHI8SW1wb3J0ZXI+IFJlc291cmNlTWFuYWdlcjo6R2V0SW1wb3J0ZXIoaW50 IGRpc3BsYXkpIHsKPiA+PisgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkcm1zXy5zaXplKCk7 IGkrKykgewo+ID4KPiA+U2FtZSBoZXJlCj4gPgo+ID4+KyAgICBpZiAoZHJtc19baV0tPkhhbmRs ZXNEaXNwbGF5KGRpc3BsYXkpKQo+ID4+KyAgICAgIHJldHVybiBpbXBvcnRlcnNfW2ldOwo+ID4+ KyAgfQo+ID4+KyAgcmV0dXJuIE5VTEw7Cj4gPj4rfQo+ID4+Kwo+ID4+K2NvbnN0IGdyYWxsb2Nf bW9kdWxlX3QgKlJlc291cmNlTWFuYWdlcjo6R2V0R3JhbGxvYygpIHsKPiA+Cj4gPkkgdGhpbmsg dGhpcyBzaG91bGQgYmUgY2FsbGVkIGdyYWxsb2MoKQo+ID4KPiA+PisgIHJldHVybiBncmFsbG9j XzsKPiA+Pit9Cj4gPj4rfQo+ID4+ZGlmZiAtLWdpdCBhL3Jlc291cmNlbWFuYWdlci5oIGIvcmVz b3VyY2VtYW5hZ2VyLmgKPiA+Pm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj5pbmRleCAwMDAwMDAw Li5iOGNhYTlhCj4gPj4tLS0gL2Rldi9udWxsCj4gPj4rKysgYi9yZXNvdXJjZW1hbmFnZXIuaAo+ ID4+QEAgLTAsMCArMSwyOSBAQAo+ID4+KyNpZm5kZWYgUkVTT1VSQ0VNQU5BR0VSX0gKPiA+Pisj ZGVmaW5lIFJFU09VUkNFTUFOQUdFUl9ICj4gPj4rCj4gPj4rI2luY2x1ZGUgImRybXJlc291cmNl cy5oIgo+ID4+KyNpbmNsdWRlICJwbGF0Zm9ybS5oIgo+ID4+Kwo+ID4+K25hbWVzcGFjZSBhbmRy b2lkIHsKPiA+PisKPiA+PitjbGFzcyBEcm1SZXNvdXJjZXM7Cj4gPj4rY2xhc3MgSW1wb3J0ZXI7 Cj4gPgo+ID5JIHRoaW5rIHlvdSBuZWVkIGVpdGhlciB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMg b3IgdGhlIGluY2x1ZGVzLCBidXQgbm90IGJvdGg/Cj4gPgo+ID4+Kwo+ID4+K2NsYXNzIFJlc291 cmNlTWFuYWdlciB7Cj4gPj4rIHB1YmxpYzoKPiA+PisgIFJlc291cmNlTWFuYWdlcigpOwo+ID4+ KyAgUmVzb3VyY2VNYW5hZ2VyKGNvbnN0IFJlc291cmNlTWFuYWdlciAmKSA9IGRlbGV0ZTsKPiA+ PisgIFJlc291cmNlTWFuYWdlciAmb3BlcmF0b3I9KGNvbnN0IFJlc291cmNlTWFuYWdlciAmKSA9 IGRlbGV0ZTsKPiA+PisgIGludCBJbml0KCk7Cj4gPj4rICBEcm1SZXNvdXJjZXMgKkdldERybVJl c291cmNlcyhpbnQgZGlzcGxheSk7Cj4gPj4rICBzdGQ6OnNoYXJlZF9wdHI8SW1wb3J0ZXI+IEdl dEltcG9ydGVyKGludCBkaXNwbGF5KTsKPiA+PisgIGNvbnN0IGdyYWxsb2NfbW9kdWxlX3QgKkdl dEdyYWxsb2MoKTsKPiA+PisKPiA+PisgcHJpdmF0ZToKPiA+PisgIHN0ZDo6dmVjdG9yPHN0ZDo6 dW5pcXVlX3B0cjxEcm1SZXNvdXJjZXM+PiBkcm1zXzsKPiA+PisgIHN0ZDo6dmVjdG9yPHN0ZDo6 c2hhcmVkX3B0cjxJbXBvcnRlcj4+IGltcG9ydGVyc187Cj4gPj4rICBjb25zdCBncmFsbG9jX21v ZHVsZV90ICpncmFsbG9jXzsKPiA+Pit9Owo+ID4+K30KPiA+PisKPiA+PisjZW5kaWYgIC8vIFJF U09VUkNFTUFOQUdFUl9ICj4gPj4tLSAKPiA+PjIuNy40Cj4gPj4KPiA+CgotLSAKQ2hlZXJzLApB bGV4IEcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==