From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 6/7] xen/arm: zynqmp: implement zynqmp_eemi Date: Tue, 11 Dec 2018 15:55:03 +0000 Message-ID: <5d6b9c12-fff1-cf9f-8fb8-e3237c98b47f@arm.com> References: <1543871021-315-6-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1543871021-315-6-git-send-email-sstabellini@kernel.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Stefano Stabellini , xen-devel@lists.xen.org Cc: edgar.iglesias@xilinx.com, Stefano Stabellini , saeed.nowshadi@xilinx.com List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKCk9uIDAzLzEyLzIwMTggMjE6MDMsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90 ZToKPiBGcm9tOiAiRWRnYXIgRS4gSWdsZXNpYXMiIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29t Pgo+IAo+IEZyb206IEVkZ2FyIEUuIElnbGVzaWFzIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29t Pgo+IAo+IHp5bnFtcF9lZW1pIHVzZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3Rz IHRvIGRlY2lkZSB3aGV0aGVyIHRvCj4gbWFrZSBhIGNhbGwgdG8gdGhlIGZpcm13YXJlLCBvciB0 byBzaW1wbHkgcmV0dXJuIGEgcHJlZGVmaW5lZCB2YWx1ZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBF ZGdhciBFLiBJZ2xlc2lhcyA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZhbm9zQHhpbGlueC5jb20+Cj4gLS0tCj4gQ2hh bmdlcyBpbiB2NToKPiAtIHJlbW92ZSBtbWlvX2FjY2VzcyBoYW5kbGluZwo+IAo+IENoYW5nZXMg aW4gdjQ6Cj4gLSBhZGQgI2luY2x1ZGUgYXMgbmVlZGVkCj4gLSBpbXByb3ZlIGNvbW1lbnQKPiAt IGNvZGUgc3R5bGUKPiAtLS0KPiAgIHhlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFt cC1lZW1pLmMgfCAxODEgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+ICAgMSBmaWxlIGNo YW5nZWQsIDEyNSBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxpbngtenlucW1wLWVlbWkuYyBiL3hlbi9hcmNo L2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPiBpbmRleCA5MmEwMmRmLi45ZWNm Mjg2IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1l ZW1pLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vcGxhdGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5j Cj4gQEAgLTc2LDEwICs3NiwxMCBAQAo+ICAgCj4gICAjaW5jbHVkZSA8eGVuL2lvY2FwLmg+Cj4g ICAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4gKyNpbmNsdWRlIDxhc20vc21jY2MuaD4KPiAgICNp bmNsdWRlIDxhc20vcmVncy5oPgo+ICAgI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybXMveGlsaW54LXp5 bnFtcC1lZW1pLmg+Cj4gICAKPiAtI2lmIDAKPiAgIHN0cnVjdCBwbV9hY2Nlc3MKPiAgIHsKPiAg ICAgICBtZm5fdCBtZm47Cj4gQEAgLTMwOSw2NyArMzA5LDEzNiBAQCBzdGF0aWMgYm9vbCBkb21h aW5faGFzX3Jlc2V0X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLCB1aW50MzJfdCByc3QpCj4gICAg ICAgcmV0dXJuIHBtX2NoZWNrX2FjY2VzcyhwbV9yZXNldF9hY2Nlc3MsIGQsIHJzdCk7Cj4gICB9 Cj4gICAKPiAtLyoKPiAtICogQ2hlY2sgaWYgYSBnaXZlbiBkb21haW4gaGFzIGFjY2VzcyB0byBw ZXJmb3JtIGFuIGluZGlyZWN0Cj4gLSAqIE1NSU8gYWNjZXNzLgo+IC0gKgo+IC0gKiBJZiB0aGUg cHJvdmlkZWQgbWFzayBpcyBpbnZhbGlkLCBpdCB3aWxsIGJlIGZpeGVkIHVwLgo+IC0gKi8KPiAt c3RhdGljIGJvb2wgZG9tYWluX2hhc19tbWlvX2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGUsIHBhZGRyX3QgYWRk ciwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbWFzaykK CldoeSBkbyB5b3UgcmVtb3ZlIGNvZGUgdGhhdCB5b3UganVzdCBpbnRyb2R1Y2VkPwoKPiArYm9v bCB6eW5xbXBfZWVtaShzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAgIHsKPiAtICAgIHVu c2lnbmVkIGludCBpOwo+IC0gICAgYm9vbCByZXQgPSBmYWxzZTsKPiAtICAgIHVpbnQzMl90IHBy b3RfbWFzayA9IDA7Cj4gLQo+IC0gICAgLyoKPiAtICAgICAqIFRoZSBoYXJkd2FyZSBkb21haW4g Z2V0cyByZWFkIGFjY2VzcyB0byBldmVyeXRoaW5nLgo+IC0gICAgICogTG93ZXIgbGF5ZXJzIHdp bGwgZG8gZnVydGhlciBmaWx0ZXJpbmcuCj4gLSAgICAgKi8KPiAtICAgIGlmICggIXdyaXRlICYm IGlzX2hhcmR3YXJlX2RvbWFpbihkKSApCj4gLSAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAgICBz dHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7Cj4gKyAgICB1aW50MzJfdCBmaWQgPSBnZXRfdXNlcl9y ZWcocmVncywgMCk7Cj4gKyAgICB1aW50MzJfdCBub2RlaWQgPSBnZXRfdXNlcl9yZWcocmVncywg MSk7CgpZb3UgZGlkbid0IGFkZHJlc3MgbXkgY29uY2VybiByZWdhcmRpbmcgU01DMzIgdnMgU01D NjQgY29udmVudGlvbi4gQXMgSSBzYWlkIAplYXJsaWVyIG9uLCBhdCBsZWFzdCBDQUxMX0NPVU5U LCBVSUQgYW5kIFZFUlNJT04gYXJlIG9ubHkgYWNjZXNzaWJsZSB1c2luZyB0aGUgClNNQzMyIGNv bnZlbnRpb24uCgpJIGNhbid0IHRlbGwgZm9yIHRoZSBvdGhlciBhcyB0aGUgRUVNSSBzcGVjIGRv ZXMgbm90IHNlZW0gdG8gc3BlY2lmeSBpdC4gSSB3b3VsZCAKYmUgc3VycHJpc2VkIHRoYXQgRUVN SSB3b3VsZCAgaWdub3JlIHRvcHMgYml0cyBvZiB0aGUgSUQgZ2l2ZW4gdGhleSBjb252ZXkgCmRp ZmZlcmVudCBpbmZvcm1hdGlvbiAoZS5nICBmYXN0L3lpZWxkaW5nIGNhbGwsIDMyLzY0LWJpdCBj b252ZW50aW9uKS4KCkxvb2tpbmcgYXQgdGhlIGJyYW5jaCB5b3UgbWVudGlvbmVkIGVhcmxpZXIg b24sIHp5bnFtcF9wbV9pbnZva2VfZm4KKGRyaXZlcnMvZmlybXdhcmUveGlsaW54L3p5bnFtcC5j KSBpcyBkZWZpbml0ZWx5IHVzaW5nIHRoZSBTTUM2NCBjYWxsaW5nCmNvbnZlbnRpb24gYXMgZGVz Y3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGFib3ZlIHRoZSBmdW5jdGlvbi4KClNvIHRoaXMg bmVlZHMgdG8gYmUgZml4ZWQgcHJvcGVybHkuCgoKPiArICAgIHVuc2lnbmVkIGludCBwbV9mbiA9 IGZpZCAmIDB4RkZGRjsKPiArICAgIGVudW0gcG1fcmV0X3N0YXR1cyByZXQ7Cj4gICAKPiAtICAg IC8qIFNjYW4gdGhlIEFDTC4gICovCj4gLSAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo cG1fbW1pb19hY2Nlc3MpOyBpKysgKQo+ICsgICAgc3dpdGNoICggcG1fZm4gKQo+ICAgICAgIHsK PiAtICAgICAgICBBU1NFUlQocG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKyBwbV9tbWlvX2FjY2Vz c1tpXS5zaXplID49Cj4gLSAgICAgICAgICAgICAgIHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0KTsK PiAtCj4gLSAgICAgICAgaWYgKCBhZGRyIDwgcG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKQo+IC0g ICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICAgaWYgKCBhZGRyID49IHBtX21taW9f YWNjZXNzW2ldLnN0YXJ0ICsgcG1fbW1pb19hY2Nlc3NbaV0uc2l6ZSApCj4gLSAgICAgICAgICAg IGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICBpZiAoIHdyaXRlICYmIHBtX21taW9fYWNjZXNzW2ld LnJlYWRvbmx5ICkKPiAtICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IC0gICAgICAgIGlmICgg cG1fbW1pb19hY2Nlc3NbaV0uaHdkb21fYWNjZXNzICYmICFpc19oYXJkd2FyZV9kb21haW4oZCkg KQo+IC0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICAgICAgaWYgKCAhZG9tYWluX2hh c19ub2RlX2FjY2VzcyhkLCBwbV9tbWlvX2FjY2Vzc1tpXS5ub2RlKSApCj4gLSAgICAgICAgICAg IHJldHVybiBmYWxzZTsKPiAtCj4gLSAgICAgICAgLyogV2UndmUgZ290IGFjY2VzcyB0byB0aGlz IHJlZyAob3IgcGFydHMgb2YgaXQpLiAgKi8KPiAtICAgICAgICByZXQgPSB0cnVlOwo+IC0KPiAt ICAgICAgICAvKiBQZXJtaXQgd3JpdGUgYWNjZXNzIHRvIHNlbGVjdGVkIGJpdHMuICAqLwo+IC0g ICAgICAgIHByb3RfbWFzayB8PSBwbV9tbWlvX2FjY2Vzc1tpXS5tYXNrID86IEdFTk1BU0soMzEs IDApOwo+IC0gICAgICAgIGJyZWFrOwo+IC0gICAgfQo+IC0KPiAgICAgICAvKgo+IC0gICAgICog TWFza2luZyBvbmx5IGFwcGxpZXMgdG8gd3JpdGVzOiB2YWx1ZXMgYXJlIHNhZmUgdG8gcmVhZCwg YnV0IG5vdAo+IC0gICAgICogYWxsIGJpdHMgYXJlIHdyaXRlYWJsZS4KPiArICAgICAqIFdlIGNh bid0IGFsbG93IENQVXMgdG8gc3VzcGVuZCB3aXRob3V0IFhlbiBrbm93aW5nIGFib3V0IGl0Lgo+ ICsgICAgICogV2UgYWNjZXB0IGJ1dCBpZ25vcmUgdGhlIHJlcXVlc3QgYW5kIHdhaXQgZm9yIHRo ZSBndWVzdCB0byBpc3N1ZQo+ICsgICAgICogYSBXRkkgb3IgUFNDSSBjYWxsIHdoaWNoIFhlbiB3 aWxsIHRyYXAgYW5kIGFjdCBhY2NvcmRpbmdseSB1cG9uLgo+ICAgICAgICAqLwo+IC0gICAgaWYg KCB3cml0ZSApCj4gLSAgICAgICAgKm1hc2sgJj0gcHJvdF9tYXNrOwo+IC0KPiAtICAgIHJldHVy biByZXQ7Cj4gLX0KPiAtI2VuZGlmCj4gKyAgICBjYXNlIFBNX1NFTEZfU1VTUEVORDoKPiArICAg ICAgICByZXQgPSBYU1RfUE1fU1VDQ0VTUzsKPiArICAgICAgICBnb3RvIGRvbmU7Cj4gKwo+ICsg ICAgY2FzZSBQTV9HRVRfTk9ERV9TVEFUVVM6Cj4gKyAgICAvKiBBUEkgZm9yIFBVcy4gICovCj4g KyAgICBjYXNlIFBNX1JFUV9TVVNQRU5EOgo+ICsgICAgY2FzZSBQTV9GT1JDRV9QT1dFUkRPV046 Cj4gKyAgICBjYXNlIFBNX0FCT1JUX1NVU1BFTkQ6Cj4gKyAgICBjYXNlIFBNX1JFUV9XQUtFVVA6 Cj4gKyAgICBjYXNlIFBNX1NFVF9XQUtFVVBfU09VUkNFOgo+ICsgICAgLyogQVBJIGZvciBzbGF2 ZXMuICAqLwo+ICsgICAgY2FzZSBQTV9SRVFfTk9ERToKPiArICAgIGNhc2UgUE1fUkVMRUFTRV9O T0RFOgo+ICsgICAgY2FzZSBQTV9TRVRfUkVRVUlSRU1FTlQ6Cj4gKyAgICBjYXNlIFBNX1NFVF9N QVhfTEFURU5DWToKPiArICAgICAgICBpZiAoICFkb21haW5faGFzX25vZGVfYWNjZXNzKGN1cnJl bnQtPmRvbWFpbiwgbm9kZWlkKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRr KFhFTkxPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAgICAgICJ6eW5xbXAtcG06IGZuPSV1 IE5vIGFjY2VzcyB0byBub2RlICV1XG4iLCBwbV9mbiwgbm9kZWlkKTsKPiArICAgICAgICAgICAg cmV0ID0gWFNUX1BNX05PX0FDQ0VTUzsKPiArICAgICAgICAgICAgZ290byBkb25lOwo+ICsgICAg ICAgIH0KPiArICAgICAgICBnb3RvIGZvcndhcmRfdG9fZnc7Cj4gKwo+ICsgICAgY2FzZSBQTV9S RVNFVF9BU1NFUlQ6Cj4gKyAgICBjYXNlIFBNX1JFU0VUX0dFVF9TVEFUVVM6Cj4gKyAgICAgICAg aWYgKCAhZG9tYWluX2hhc19yZXNldF9hY2Nlc3MoY3VycmVudC0+ZG9tYWluLCBub2RlaWQpICkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4gKyAg ICAgICAgICAgICAgICAgICAgInp5bnFtcC1wbTogZm49JXUgTm8gYWNjZXNzIHRvIHJlc2V0ICV1 XG4iLCBwbV9mbiwgbm9kZWlkKTsKPiArICAgICAgICAgICAgcmV0ID0gWFNUX1BNX05PX0FDQ0VT UzsKPiArICAgICAgICAgICAgZ290byBkb25lOwo+ICsgICAgICAgIH0KPiArICAgICAgICBnb3Rv IGZvcndhcmRfdG9fZnc7Cj4gKwo+ICsgICAgLyogVGhlc2UgY2FsbHMgYXJlIHNhZmUgYW5kIGFs d2F5cyBhbGxvd2VkLiAgKi8KPiArICAgIGNhc2UgWllOUU1QX1NJUF9TVkNfQ0FMTF9DT1VOVDoK PiArICAgIGNhc2UgWllOUU1QX1NJUF9TVkNfVUlEOgo+ICsgICAgY2FzZSBaWU5RTVBfU0lQX1NW Q19WRVJTSU9OOgo+ICsgICAgY2FzZSBQTV9HRVRfVFJVU1RaT05FX1ZFUlNJT046Cj4gKyAgICBj YXNlIFBNX0dFVF9BUElfVkVSU0lPTjoKPiArICAgIGNhc2UgUE1fR0VUX0NISVBJRDoKPiArICAg ICAgICBnb3RvIGZvcndhcmRfdG9fZnc7Cj4gKwo+ICsgICAgLyogTm8gTU1JTyBhY2Nlc3MgaXMg YWxsb3dlZCBmcm9tIG5vbi1zZWN1cmUgZG9tYWlucyAqLwo+ICsgICAgY2FzZSBQTV9NTUlPX1dS SVRFOgo+ICsgICAgY2FzZSBQTV9NTUlPX1JFQUQ6Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0df V0FSTklORywKPiArICAgICAgICAgICAgICAgICJ6eW5xbXAtcG06IGZuPSV1IE5vIE1NSU8gYWNj ZXNzIHRvICV1XG4iLCBwbV9mbiwgbm9kZWlkKTsKPiArICAgICAgICByZXQgPSBYU1RfUE1fTk9f QUNDRVNTOwo+ICsgICAgICAgIGdvdG8gZG9uZTsKPiArCj4gKyAgICAvKiBFeGNsdXNpdmUgdG8g dGhlIGhhcmR3YXJlIGRvbWFpbi4gICovCj4gKyAgICBjYXNlIFBNX0lOSVQ6Cj4gKyAgICBjYXNl IFBNX1NFVF9DT05GSUdVUkFUSU9OOgo+ICsgICAgY2FzZSBQTV9GUEdBX0xPQUQ6Cj4gKyAgICBj YXNlIFBNX0ZQR0FfR0VUX1NUQVRVUzoKPiArICAgIGNhc2UgUE1fU0VDVVJFX1NIQToKPiArICAg IGNhc2UgUE1fU0VDVVJFX1JTQToKPiArICAgIGNhc2UgUE1fUElOQ1RSTF9TRVRfRlVOQ1RJT046 Cj4gKyAgICBjYXNlIFBNX1BJTkNUUkxfUkVRVUVTVDoKPiArICAgIGNhc2UgUE1fUElOQ1RSTF9S RUxFQVNFOgo+ICsgICAgY2FzZSBQTV9QSU5DVFJMX0dFVF9GVU5DVElPTjoKPiArICAgIGNhc2Ug UE1fUElOQ1RSTF9DT05GSUdfUEFSQU1fR0VUOgo+ICsgICAgY2FzZSBQTV9QSU5DVFJMX0NPTkZJ R19QQVJBTV9TRVQ6Cj4gKyAgICBjYXNlIFBNX0lPQ1RMOgo+ICsgICAgY2FzZSBQTV9RVUVSWV9E QVRBOgo+ICsgICAgY2FzZSBQTV9DTE9DS19FTkFCTEU6Cj4gKyAgICBjYXNlIFBNX0NMT0NLX0RJ U0FCTEU6Cj4gKyAgICBjYXNlIFBNX0NMT0NLX0dFVFNUQVRFOgo+ICsgICAgY2FzZSBQTV9DTE9D S19HRVRESVZJREVSOgo+ICsgICAgY2FzZSBQTV9DTE9DS19TRVRESVZJREVSOgo+ICsgICAgY2Fz ZSBQTV9DTE9DS19TRVRSQVRFOgo+ICsgICAgY2FzZSBQTV9DTE9DS19HRVRSQVRFOgo+ICsgICAg Y2FzZSBQTV9DTE9DS19TRVRQQVJFTlQ6Cj4gKyAgICBjYXNlIFBNX0NMT0NLX0dFVFBBUkVOVDoK PiArICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmVudC0+ZG9tYWluKSApCj4g KyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiZWVtaTog Zm49JXUgTm8gYWNjZXNzIiwgcG1fZm4pOwo+ICsgICAgICAgICAgICByZXQgPSBYU1RfUE1fTk9f QUNDRVNTOwo+ICsgICAgICAgICAgICBnb3RvIGRvbmU7Cj4gKyAgICAgICAgfQo+ICsgICAgICAg IGdvdG8gZm9yd2FyZF90b19mdzsKPiArCj4gKyAgICAvKiBUaGVzZSBjYWxscyBhcmUgbmV2ZXIg YWxsb3dlZC4gICovCj4gKyAgICBjYXNlIFBNX1NZU1RFTV9TSFVURE9XTjoKPiArICAgICAgICBy ZXQgPSBYU1RfUE1fTk9fQUNDRVNTOwo+ICsgICAgICAgIGdvdG8gZG9uZTsKPiArCj4gKyAgICBk ZWZhdWx0Ogo+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsICJ6eW5xbXAtcG06IFVu aGFuZGxlZCBQTSBDYWxsOiAldVxuIiwgZmlkKTsKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4g KyAgICB9Cj4gICAKPiAtYm9vbCB6eW5xbXBfZWVtaShzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKPiAtewo+IC0gICAgcmV0dXJuIGZhbHNlOwo+ICtmb3J3YXJkX3RvX2Z3Ogo+ICsgICAgYXJt X3NtY2NjXzFfMV9zbWMoZ2V0X3VzZXJfcmVnKHJlZ3MsIDApLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgZ2V0 X3VzZXJfcmVnKHJlZ3MsIDIpLHZhbHVlIHRvCj4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRf dXNlcl9yZWcocmVncywgMyksCj4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWco cmVncywgNCksCj4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgNSks Cj4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgNiksCj4gKyAgICAg ICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgNyksCj4gKyAgICAgICAgICAgICAg ICAgICAgICAmcmVzKTsKCklmIHlvdSB1c2UgYWx3YXlzIFNNQ0NDIDEuMSwgdGhlbiB5b3Ugc2hv dWxkIGFkZCBjb2RlIHRvIGRlbnkgWGVuIGJvb3Qgb24gCnBsYXRmb3JtIG5vdCBzdXBwb3J0aW5n IFNNQ0NDIDEuMSBvciBsYXRlci4KCkZ1cnRoZXJtb3JlLCB5b3UgYXJlIGZvcndhcmRpbmcgdW5z YW5pdGl6ZWQgdmFsdWVzIHRvIHRoZSBmaXJtd2FyZS4gRm9yIAppbnN0YW5jZSwgd2hhdCB3b3Vs ZCBoYXBwZW4gaWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIG9mIHRoZSBjYWxsIGFyZSAKaW5j cmVhc2VkPyBIb3cgYXJlIHlvdSBzdXJlIHRoaXMgd2lsbCBub3Qgb3BlbiBhIGhvbGU/Cgo+ICsK PiArICAgIHNldF91c2VyX3JlZyhyZWdzLCAwLCByZXMuYTApOwo+ICsgICAgc2V0X3VzZXJfcmVn KHJlZ3MsIDEsIHJlcy5hMSk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMiwgcmVzLmEyKTsK PiArICAgIHNldF91c2VyX3JlZyhyZWdzLCAzLCByZXMuYTMpOwo+ICsgICAgcmV0dXJuIHRydWU7 Cj4gKwo+ICtkb25lOgo+ICsgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIHJldCk7Cj4gKyAgICBy ZXR1cm4gdHJ1ZTsKPiAgIH0KPiAgIAo+ICAgLyoKPiAKCkNoZWVycywKCi0tIApKdWxpZW4gR3Jh bGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=