From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH v2 05/10] x86/SVM: Add AVIC vmexit handlers Date: Wed, 16 May 2018 09:56:50 -0600 Message-ID: <5AFC54C202000078001C35AC@prv1-mh.provo.novell.com> References: <20180507210753.2280-1-Janakarajan.Natarajan@amd.com> <20180507210753.2280-6-Janakarajan.Natarajan@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180507210753.2280-6-Janakarajan.Natarajan@amd.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Janakarajan Natarajan Cc: Tim Deegan , Kevin Tian , Stefano Stabellini , Wei Liu , Jun Nakajima , George Dunlap , Andrew Cooper , Ian Jackson , xen-devel@lists.xen.org, Julien Grall , Suravee Suthikulpanit , Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDA3LjA1LjE4IGF0IDIzOjA3LCA8SmFuYWthcmFqYW4uTmF0YXJhamFuQGFtZC5jb20+ IHdyb3RlOgo+IEBAIC0xODAsNiArMTg1LDI5MyBAQCBpbnQgc3ZtX2F2aWNfaW5pdF92bWNiKHN0 cnVjdCB2Y3B1ICp2KQo+ICB9Cj4gIAo+ICAvKgo+ICsgKiBOb3RlOgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIGhhbmRsZXMgdGhlIEFWSUNfSU5DT01QX0lQSSAjdm1leGl0IHdoZW4gQVZJQyBpcyBlbmFi bGVkLgo+ICsgKiBUaGUgaGFyZHdhcmUgZ2VuZXJhdGVzIHRoaXMgZmF1bHQgd2hlbiBhbiBJUEkg Y291bGQgbm90IGJlIGRlbGl2ZXJlZAo+ICsgKiB0byBhbGwgdGFyZ2V0ZWQgZ3Vlc3QgdmlydHVh bCBwcm9jZXNzb3JzIGJlY2F1c2UgYXQgbGVhc3Qgb25lIGd1ZXN0Cj4gKyAqIHZpcnR1YWwgcHJv Y2Vzc29yIHdhcyBub3QgYWxsb2NhdGVkIHRvIGEgcGh5c2ljYWwgY29yZSBhdCB0aGUgdGltZS4K PiArICovCj4gK3ZvaWQgc3ZtX2F2aWNfdm1leGl0X2RvX2luY29tcF9pcGkoc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCj4gK3sKPiArICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK PiArICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwo+ICsgICAgc3RydWN0 IHZtY2Jfc3RydWN0ICp2bWNiID0gY3Vyci0+YXJjaC5odm1fc3ZtLnZtY2I7Cj4gKyAgICB1MzIg aWNyaCA9IHZtY2ItPmV4aXRpbmZvMSA+PiAzMjsKPiArICAgIHUzMiBpY3JsID0gdm1jYi0+ZXhp dGluZm8xOwo+ICsgICAgdTMyIGlkID0gdm1jYi0+ZXhpdGluZm8yID4+IDMyOwo+ICsgICAgdTMy IGluZGV4ID0gdm1jYi0+ZXhpdGluZm8yICYmIDB4RkY7Cj4gKwo+ICsgICAgc3dpdGNoICggaWQg KQo+ICsgICAgewo+ICsgICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfSU5WQUxJRF9JTlRfVFlQ RToKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIEFWSUMgaGFyZHdhcmUgaGFuZGxlcyB0aGUg ZGVsaXZlcnkgb2YKPiArICAgICAgICAgKiBJUElzIHdoZW4gdGhlIHNwZWNpZmllZCBNZXNzYWdl IFR5cGUgaXMgRml4ZWQKPiArICAgICAgICAgKiAoYWxzbyBrbm93biBhcyBmaXhlZCBkZWxpdmVy eSBtb2RlKSBhbmQKPiArICAgICAgICAgKiB0aGUgVHJpZ2dlciBNb2RlIGlzIGVkZ2UtdHJpZ2dl cmVkLiBUaGUgaGFyZHdhcmUKPiArICAgICAgICAgKiBhbHNvIHN1cHBvcnRzIHNlbGYgYW5kIGJy b2FkY2FzdCBkZWxpdmVyeSBtb2Rlcwo+ICsgICAgICAgICAqIHNwZWNpZmllZCB2aWEgdGhlIERl c3RpbmF0aW9uIFNob3J0aGFuZChEU0gpCj4gKyAgICAgICAgICogZmllbGQgb2YgdGhlIElDUkwu IExvZ2ljYWwgYW5kIHBoeXNpY2FsIEFQSUMgSUQKPiArICAgICAgICAgKiBmb3JtYXRzIGFyZSBz dXBwb3J0ZWQuIEFsbCBvdGhlciBJUEkgdHlwZXMgY2F1c2UKPiArICAgICAgICAgKiBhICNWTUVY SVQsIHdoaWNoIG5lZWRzIHRvIGVtdWxhdGVkLgoKUGxlYXNlIHV0aWxpemUgdGhlIHBlcm1pdHRl ZCBsaW5lIGxlbmd0aCAoYWxzbyBlbHNld2hlcmUpLgoKPiArICAgICAgICAgKi8KPiArICAgICAg ICB2bGFwaWNfcmVnX3dyaXRlKGN1cnIsIEFQSUNfSUNSMiwgaWNyaCk7Cj4gKyAgICAgICAgdmxh cGljX3JlZ193cml0ZShjdXJyLCBBUElDX0lDUiwgaWNybCk7Cj4gKyAgICAgICAgYnJlYWs7Cj4g Kwo+ICsgICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfVEFSR0VUX05PVF9SVU46Cj4gKyAgICB7 Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBBdCB0aGlzIHBvaW50LCB3ZSBleHBlY3QgdGhh dCB0aGUgQVZJQyBIVyBoYXMgYWxyZWFkeQo+ICsgICAgICAgICAqIHNldCB0aGUgYXBwcm9wcmlh dGUgSVJSIGJpdHMgb24gdGhlIHZhbGlkIHRhcmdldAo+ICsgICAgICAgICAqIHZjcHVzLiBTbywg d2UganVzdCBuZWVkIHRvIGtpY2sgdGhlIGFwcHJvcHJpYXRlIHZjcHUuCj4gKyAgICAgICAgICov Cj4gKyAgICAgICAgc3RydWN0IHZjcHUgKnY7Cj4gKyAgICAgICAgdWludDMyX3QgZGVzdCA9IEdF VF94QVBJQ19ERVNUX0ZJRUxEKGljcmgpOwo+ICsgICAgICAgIHVpbnQzMl90IHNob3J0X2hhbmQg PSBpY3JsICYgQVBJQ19TSE9SVF9NQVNLOwo+ICsgICAgICAgIGJvb2wgZGVzdF9tb2RlID0gaWNy bCAmIEFQSUNfREVTVF9NQVNLOwo+ICsKPiArICAgICAgICBmb3JfZWFjaF92Y3B1ICggY3VycmQs ICB2ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGlmICggdiAhPSBjdXJyICYmCj4gKyAg ICAgICAgICAgICAgICAgdmxhcGljX21hdGNoX2Rlc3QodmNwdV92bGFwaWModiksIHZjcHVfdmxh cGljKGN1cnIpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2hh bmQsIGRlc3QsIGRlc3RfbW9kZSkgKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAg ICB2Y3B1X2tpY2sodik7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKCldoeSBkbyB5b3UgYnJl YWsgb3V0IG9mIHRoZSBsb29wIGhlcmU/IFdpdGggYSBzaG9ydGhhbmQgbW9yZSB0aGFuCm9uZSB2 Q1BVIG1pZ2h0IGJlIHRoZSB0YXJnZXQuCgo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIGNhc2UgQVZJQ19JTkNNUF9JUElf RVJSX0lOVl9UQVJHRVQ6Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ICsgICAgICAg ICAgICAgICAgIlNWTTogJXM6IEludmFsaWQgSVBJIHRhcmdldCAoaWNyPSUjMDh4OiUwOHgsIGlk eD0ldSlcbiIsCgolIzA4eCBwcm9kdWNlcyBzb21ldGhpbmcgbGlrZSAweDAxMjM0NSwgcmF0aGVy IHRoYW4gYSBmdWxsIGVpZ2h0IGRpZ2l0cy4KUHJlZmVyYWJseSBkcm9wIHRoZSAjLCBvciBpZiB5 b3UgcmVhbGx5IHRoaW5rIGl0J3MgbmVlZGVkIHJlcGxhY2UgaXQgYmUgYW4KZXhwbGljaXQgMHgu Cgo+ICsgICAgICAgICAgICAgICAgX19mdW5jX18sIGljcmgsIGljcmwsIGluZGV4KTsKClBsZWFz ZSB1c2UgX19mdW5jX18gb25seSB3aGVuIGEgbG9nIG1lc3NhZ2UgcmVhbGx5IGNhbid0IGJlIGRp c2FtYmlndWF0ZWQKYW5vdGhlciB3YXkuCgpGb3IgYm90aCBvZiB0aGVzZSAtIHNhbWUgZnVydGhl ciBkb3duLgoKPiArc3RhdGljIGF2aWNfbG9naWNhbF9pZF9lbnRyeV90ICoKPiArYXZpY19nZXRf bG9naWNhbF9pZF9lbnRyeShzdHJ1Y3Qgc3ZtX2RvbWFpbiAqZCwgdTMyIGxkciwgYm9vbCBmbGF0 KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZGVz dF9pZCA9IEdFVF94QVBJQ19MT0dJQ0FMX0lEKGxkcik7Cj4gKwo+ICsgICAgaWYgKCAhZGVzdF9p ZCApCj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgaWYgKCBmbGF0ICkKPiArICAg IHsKPiArICAgICAgICBpbmRleCA9IGZmcyhkZXN0X2lkKSAtIDE7Cj4gKyAgICAgICAgaWYgKCBp bmRleCA+IDcgKQo+ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgIH0KPiArICAgIGVs c2UKPiArICAgIHsKPiArICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3RlciA9IChkZXN0X2lkICYg MHhmMCkgPj4gNDsKPiArICAgICAgICBpbnQgYXBpYyA9IGZmcyhkZXN0X2lkICYgMHgwZikgLSAx Owo+ICsKPiArICAgICAgICBpZiAoIChhcGljIDwgMCkgfHwgKGFwaWMgPiA3KSB8fCAoY2x1c3Rl ciA+PSAweGYpICkKCkkgY2FuJ3Qgc2VlIGEgd2F5IGZvciBhcGljIHRvIGJlIGxhcmdlciB0aGFu IDMgd2l0aCB0aGUgY2FsY3VsYXRpb24gYWJvdmUuCgo+ICsgICAgICAgICAgICByZXR1cm4gTlVM TDsKPiArICAgICAgICBpbmRleCA9IChjbHVzdGVyIDw8IDIpICsgYXBpYzsKPiArICAgIH0KPiAr Cj4gKyAgICBBU1NFUlQoaW5kZXggPD0gMjU1KTsKCldoaWNoIG9mIHRoZSBtYW55IHBvc3NpYmxl IG1lYW5pbmdzIG9mIDI1NSBpcyB0aGlzPwoKPiArc3RhdGljIGludCBhdmljX2xkcl93cml0ZShz dHJ1Y3QgdmNwdSAqdiwgdTggZ19waHlfaWQsIHUzMiBsZHIsIGJvb2wgdmFsaWQpCj4gK3sKPiAr ICAgIGF2aWNfbG9naWNhbF9pZF9lbnRyeV90ICplbnRyeSwgbmV3X2VudHJ5Owo+ICsgICAgdTMy IGRmciA9IHZsYXBpY19yZWdfcmVhZCh2Y3B1X3ZsYXBpYyh2KSwgQVBJQ19ERlIpOwoKSnVzdCB0 byBnaXZlIGFub3RoZXIgZXhhbXBsZSAtIGxvb2tzIGxpa2UgdGhpcyB0b28gY291bGQgYmUgdmxh cGljX2dldF9yZWcoKS4KCj4gK3N0YXRpYyBpbnQgYXZpY19oYW5kbGVfbGRyX3VwZGF0ZShzdHJ1 Y3QgdmNwdSAqdikKPiArewo+ICsgICAgaW50IHJldCA9IDA7CgpQb2ludGxlc3MgaW5pdGlhbGl6 ZXIuCgo+ICsgICAgdTMyIGxkciA9IHZsYXBpY19yZWdfcmVhZCh2Y3B1X3ZsYXBpYyh2KSwgQVBJ Q19MRFIpOwo+ICsgICAgdTMyIGFwaWNfaWQgPSB2bGFwaWNfcmVnX3JlYWQodmNwdV92bGFwaWMo diksIEFQSUNfSUQpOwo+ICsKPiArICAgIGlmICggIWxkciApCj4gKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsgICAgcmV0ID0gYXZpY19sZHJfd3JpdGUodiwgR0VUX3hBUElDX0lEKGFw aWNfaWQpLCBsZHIsIHRydWUpOwo+ICsgICAgaWYgKCByZXQgJiYgdi0+YXJjaC5odm1fc3ZtLmF2 aWNfbGFzdF9sZHIgKQo+ICsgICAgewo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogTm90ZToK PiArICAgICAgICAgKiBJbiBjYXNlIG9mIGZhaWx1cmUgdG8gdXBkYXRlIExEUiByZWdpc3RlciwK PiArICAgICAgICAgKiB3ZSBzZXQgdGhlIGd1ZXN0IHBoeXNpY2FsIEFQSUMgSUQgdG8gMCwKPiAr ICAgICAgICAgKiBhbmQgc2V0IHRoZSBlbnRyeSBsb2dpY2FsIEFQSUQgSUQgZW50cnkKPiArICAg ICAgICAgKiB0byBpbnZhbGlkIChmYWxzZSkuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgYXZp Y19sZHJfd3JpdGUodiwgMCwgdi0+YXJjaC5odm1fc3ZtLmF2aWNfbGFzdF9sZHIsIGZhbHNlKTsK PiArICAgICAgICB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0X2xkciA9IDA7Cj4gKyAgICB9Cj4g KyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBOb3RlOgo+ICsg ICAgICAgICAqIFRoaXMgc2F2ZXMgdGhlIGxhc3QgdmFsaWQgTERSIHNvIHRoYXQgd2UKPiArICAg ICAgICAgKiBrbm93IHdoaWNoIGVudHJ5IGluIHRoZSBsb2NhbCBBUElDIElECj4gKyAgICAgICAg ICogdG8gY2xlYW4gdXAgd2hlbiB0aGUgTERSIGlzIHVwZGF0ZWQuCj4gKyAgICAgICAgICovCj4g KyAgICAgICAgdi0+YXJjaC5odm1fc3ZtLmF2aWNfbGFzdF9sZHIgPSBsZHI7CgpUaGUgY29tbWVu dCBzYXlzICJsYXN0IHZhbGlkIiwgYnV0IHlvdSBtYXkgZ2V0IGhlcmUgYWxzbyB3aGVuIHRoZQpm aXJzdCBhdmljX2xkcl93cml0ZSgpIGZhaWxlZC4gSSB0aGluayB5b3UgbWVhbgoKICAgIGlmICgg IXJldCApCiAgICAuLi4KICAgIGVsc2UgaWYgKCB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0X2xk ciApCiAgICAuLi4KCj4gK3N0YXRpYyBpbnQgYXZpY191bmFjY2VsX3RyYXBfd3JpdGUoc3RydWN0 IHZjcHUgKnYpCj4gK3sKPiArICAgIHN0cnVjdCB2bWNiX3N0cnVjdCAqdm1jYiA9IHYtPmFyY2gu aHZtX3N2bS52bWNiOwo+ICsgICAgdTMyIG9mZnNldCA9IHZtY2ItPmV4aXRpbmZvMSAmIEFWSUNf VU5BQ0NFTF9BQ0NFU1NfT0ZGU0VUX01BU0s7Cj4gKyAgICB1MzIgcmVnID0gdmxhcGljX3JlZ19y ZWFkKHZjcHVfdmxhcGljKHYpLCBvZmZzZXQpOwo+ICsKPiArICAgIHN3aXRjaCAoIG9mZnNldCAp Cj4gKyAgICB7Cj4gKyAgICBjYXNlIEFQSUNfSUQ6Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAg KiBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IEFQSUNfSUQgdXBkYXRlIHdoaWxlCj4gKyAg ICAgICAgICogdGhlIHZjcHVzIGFyZSBydW5uaW5nLCB3aGljaCBtaWdodCByZXF1aXJlIHVwZGF0 aW5nCj4gKyAgICAgICAgICogQVZJQyBtYXggQVBJQyBJRCBpbiBhbGwgVk1DQnMuIFRoaXMgd291 bGQgcmVxdWlyZQo+ICsgICAgICAgICAqIHN5bmNocm9uaXplIHVwZGF0ZSBvbiBhbGwgcnVubmlu ZyBWQ1BVcy4KPiArICAgICAgICAgKi8KPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRM RUFCTEU7Cj4gKwo+ICsgICAgY2FzZSBBUElDX0xEUjoKPiArICAgICAgICBpZiAoIGF2aWNfaGFu ZGxlX2xkcl91cGRhdGUodikgKQo+ICsgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRM RUFCTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgY2FzZSBBUElDX0RGUjoKPiArICAg ICAgICBpZiAoIGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodikgKQo+ICsgICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgZGVm YXVsdDoKPiArICAgICAgICBicmVhazsKClRoaXMgZGVmYXVsdCBjYXNlIGlzIHVubmVjZXNzYXJ5 LgoKPiArdm9pZCBzdm1fYXZpY192bWV4aXRfZG9fbm9hY2NlbChzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKPiArewo+ICsgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owo+ICsgICAg c3RydWN0IHZtY2Jfc3RydWN0ICp2bWNiID0gY3Vyci0+YXJjaC5odm1fc3ZtLnZtY2I7Cj4gKyAg ICB1MzIgb2Zmc2V0ID0gdm1jYi0+ZXhpdGluZm8xICYgMHhGRjA7Cj4gKyAgICB1MzIgcncgPSAo dm1jYi0+ZXhpdGluZm8xID4+IDMyKSAmIDB4MTsKCmJvb2w/Cgo+ICsgICAgaWYgKCBhdmljX2lz X3RyYXAob2Zmc2V0KSApCj4gKyAgICB7Cj4gKyAgICAgICAgLyogSGFuZGxpbmcgQVZJQyBUcmFw IChpbnRlcmNlcHQgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VzcykuICovCj4gKyAgICAgICAgaWYgKCAh cncgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICogSWYg YSByZWFkIHRyYXAgaGFwcGVucywgdGhlIENQVSBtaWNyb2NvZGUgZG9lcyBub3QKPiArICAgICAg ICAgICAgICogaW1wbGVtZW50IHRoZSBzcGVjLgo+ICsgICAgICAgICAgICAgKi8KPiArICAgICAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiJXM6IEludmFsaWQgI1ZNRVhJVCBkdWUgdG8gdHJh cCByZWFkICglI3gpXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBvZmZzZXQp Owo+ICsgICAgICAgICAgICBkb21haW5fY3Jhc2goY3Vyci0+ZG9tYWluKTsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGlmICggYXZpY191bmFjY2VsX3RyYXBfd3JpdGUoY3VycikgIT0gWDg2 RU1VTF9PS0FZICkKCklUWU0gImVsc2UgaWYiIGhlcmUuCgo+ICsgICAgICAgIHsKPiArICAgICAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiJXM6IEZhaWxlZCB0byBoYW5kbGUgdHJhcCB3cml0 ZSAoJSN4KVxuIiwKPiArICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgb2Zmc2V0KTsKPiAr ICAgICAgICAgICAgZG9tYWluX2NyYXNoKGN1cnItPmRvbWFpbik7Cj4gKyAgICAgICAgfQo+ICsg ICAgfQo+ICsgICAgZWxzZQo+ICsgICAgICAgIC8qIEhhbmRsaW5nIEFWSUMgRmF1bHQgKGludGVy Y2VwdCBiZWZvcmUgdGhlIGFjY2VzcykuICovCj4gKyAgICAgICAgaHZtX2VtdWxhdGVfb25lX3Zt X2V2ZW50KEVNVUxfS0lORF9OT1JNQUwsIFRSQVBfaW52YWxpZF9vcCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgWDg2X0VWRU5UX05PX0VDKTsKCldoYXQncyB0aGUgcmF0aW9u YWxlIGJlaGluZCBoYXZpbmcgY2hvc2VuIHRoaXMgZnVuY3Rpb24/IEkgZG9uJ3QgdGhpbmsgaXQg aXMKc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgVk0gZXZlbnQgY29kZS4K Cj4gKyAgICByZXR1cm47Cj4gK30KClBsZWFzZSBvbWl0IHN1Y2ggcmVkdW5kYW50IHJldHVybiBz dGF0ZW1lbnRzLgoKSmFuCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==