From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [RFC PATCH 5/9] x86/HVM/SVM: Add AVIC initialization code Date: Wed, 12 Oct 2016 16:02:42 -0400 Message-ID: <20161012200242.GD6047@char.us.oracle.com> References: <1474264368-4104-1-git-send-email-suravee.suthikulpanit@amd.com> <1474264368-4104-6-git-send-email-suravee.suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1474264368-4104-6-git-send-email-suravee.suthikulpanit@amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Suravee Suthikulpanit , boris.ostrovsky@oracle.com Cc: andrew.cooper3@citrix.com, sherry.hurwitz@amd.com, jbeulich@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBTZXAgMTksIDIwMTYgYXQgMTI6NTI6NDRBTSAtMDUwMCwgU3VyYXZlZSBTdXRoaWt1 bHBhbml0IHdyb3RlOgo+IEludHJvZHVjZSBBVklDIGJhc2UgaW5pdGlhbGl6YXRpb24gY29kZS4g VGhpcyBpbmNsdWRlczoKPiAgICAgKiBTZXR0aW5nIHVwIHBlci1WTSBkYXRhIHN0cnVjdHVyZXMu Cj4gICAgICogU2V0dGluZyB1cCBwZXItdkNQVSBkYXRhIHN0cnVjdHVyZS4KPiAgICAgKiBJbml0 aWFsaXppbmcgQVZJQy1yZWxhdGVkIFZNQ0IgYml0IGZpZWxkcy4KPiAKPiBUaGlzIHBhdGNoIGFs c28gaW50cm9kdWNlcyBhIG5ldyBYZW4gcGFyYW1ldGVyIChzdm0tYXZpYyksCj4gd2hpY2ggY2Fu IGJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgQVZJQyBzdXBwb3J0Lgo+IEN1cnJlbnRseSwgdGhp cyBzdm0tYXZpYyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgoKT2RkbHkgZW5vdWdoIHlvdSBkaWRu J3QgQ0MgdGhlIFNWTSBtYWludGFpbmVyOiBCb3JpcyBPc3Ryb3Zza3kgb24gYWxsCnRoZXNlIHBh dGNoZXMuCgpBZGRpbmcgaGltIGhlcmUuCj4gCj4gU2lnbmVkLW9mZi1ieTogU3VyYXZlZSBTdXRo aWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KPiAtLS0KPiAgeGVuL2Fy Y2gveDg2L2h2bS9zdm0vTWFrZWZpbGUgICAgICB8ICAgMSArCj4gIHhlbi9hcmNoL3g4Ni9odm0v c3ZtL2F2aWMuYyAgICAgICAgfCAyMTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ICB4ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYyAgICAgICAgIHwgIDE3ICsrLQo+ICB4 ZW4vYXJjaC94ODYvaHZtL3N2bS92bWNiLmMgICAgICAgIHwgICAzICsKPiAgeGVuL2luY2x1ZGUv YXNtLXg4Ni9odm0vc3ZtL2F2aWMuaCB8ICA0MCArKysrKysrCj4gIHhlbi9pbmNsdWRlL2FzbS14 ODYvaHZtL3N2bS9zdm0uaCAgfCAgIDIgKwo+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0v dm1jYi5oIHwgIDEwICsrCj4gIDcgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9odm0vc3ZtL2F2 aWMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2F2 aWMuaAo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3N2bS9NYWtlZmlsZSBiL3hl bi9hcmNoL3g4Ni9odm0vc3ZtL01ha2VmaWxlCj4gaW5kZXggNzYwZDI5NS4uZTBlNGE1OSAxMDA2 NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL3N2bS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9hcmNo L3g4Ni9odm0vc3ZtL01ha2VmaWxlCj4gQEAgLTEsNCArMSw1IEBACj4gIG9iai15ICs9IGFzaWQu bwo+ICtvYmoteSArPSBhdmljLm8KPiAgb2JqLXkgKz0gZW11bGF0ZS5vCj4gIG9iai1iaW4teSAr PSBlbnRyeS5vCj4gIG9iai15ICs9IGludHIubwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv aHZtL3N2bS9hdmljLmMgYi94ZW4vYXJjaC94ODYvaHZtL3N2bS9hdmljLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjcwYmFjNjkKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIveGVuL2FyY2gveDg2L2h2bS9zdm0vYXZpYy5jCj4gQEAgLTAsMCArMSwyMTcgQEAKPiArI2lu Y2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgo+ICsjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4gKyNp bmNsdWRlIDx4ZW4vc3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8YXNtL2FjcGkuaD4KPiArI2luY2x1 ZGUgPGFzbS9hcGljZGVmLmg+Cj4gKyNpbmNsdWRlIDxhc20vZXZlbnQuaD4KPiArI2luY2x1ZGUg PGFzbS9wMm0uaD4KPiArI2luY2x1ZGUgPGFzbS9wYWdlLmg+Cj4gKyNpbmNsdWRlIDxhc20vaHZt L25lc3RlZGh2bS5oPgo+ICsjaW5jbHVkZSA8YXNtL2h2bS9zdm0vYXZpYy5oPgo+ICsjaW5jbHVk ZSA8YXNtL2h2bS92bGFwaWMuaD4KPiArI2luY2x1ZGUgPGFzbS9odm0vZW11bGF0ZS5oPgo+ICsj aW5jbHVkZSA8YXNtL2h2bS9zdXBwb3J0Lmg+CgpTaW5jZSB0aGlzIGEgbmV3IGZpbGUgY291bGQg eW91IGtpbmRseSBzb3J0IHRoZXNlPyBBbHNvIGRvIHlvdSBuZWVkIGEgY29weXJpZ2h0CmhlYWRl ciBhdCB0aGUgdG9wPwoKPiArCj4gKy8qIE5PVEU6IEN1cnJlbnQgbWF4IGluZGV4IGFsbG93ZWQg Zm9yIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgaXMgMjU1ICovCj4gKyNkZWZpbmUgQVZJQ19QSFlf QVBJQ19JRF9NQVggICAgMHhGRgo+ICsKPiArI2RlZmluZSBBVklDX0RPT1JCRUxMICAgICAgICAg ICAweGMwMDEwMTFiCj4gKyNkZWZpbmUgQVZJQ19IUEFfTUFTSyAgICAgICAgICAgfigoMHhGRkZV TEwgPDwgNTIpIHx8IDB4RkZGKQo+ICsjZGVmaW5lIEFWSUNfQVBJQ19CQVJfTUFTSyAgICAgIDB4 RkZGRkZGRkZGRjAwMFVMTAo+ICsKPiArYm9vbF90IHN2bV9hdmljID0gMDsKPiArYm9vbGVhbl9w YXJhbSgic3ZtLWF2aWMiLCBzdm1fYXZpYyk7CgpXaHkgZG8geW91IHdhbnQgdG8gaGF2ZSBpdCBk aXNhYmxlZCBieSBkZWZhdWx0PwoKQWxzbyB5b3UgYXJlIG1pc3NpbmcgYW4gcGF0Y2ggdG8gdGhl IGRvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lIHdoZXJlIHlvdSB3b3VsZApkb2N1bWVudCB3aGF0 IHRoaXMgcGFyYW1ldGVyIGRvZXMuCgo+ICsKPiArc3RhdGljIHN0cnVjdCBzdm1fYXZpY19waHlf YWl0X2VudHJ5ICoKPiArYXZpY19nZXRfcGh5X2FpdF9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgaW50 IGluZGV4KQoKQ291bGQgSSBjb252aWVuY2UgeW91IHVzZSAnY29uc3Qgc3RydWN0IHZjcHUgKnYs IHVuc2lnbmVkIGludCBpbmRleCcgPwoKPiArewo+ICsgICAgc3RydWN0IHN2bV9hdmljX3BoeV9h aXRfZW50cnkgKmF2aWNfcGh5X2FpdDsKPiArICAgIHN0cnVjdCBzdm1fZG9tYWluICpkID0gJnYt PmRvbWFpbi0+YXJjaC5odm1fZG9tYWluLnN2bTsKPiArCj4gKyAgICBpZiAoICFkLT5hdmljX3Bo eV9haXRfbWZuICkKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgICAvKioKClRoaXMg JyoqJyBpcyBub3QgdGhlIHN0YW5kYXJkIHN0eWxlLiBDb3VsZCB5b3UgdXNlIG9ubHkgb25lICcq JyBwbGVhc2U/Cgo+ICsgICAgKiBOb3RlOiBBUElDIElEID0gMHhmZiBpcyB1c2VkIGZvciBicm9h ZGNhc3QuCj4gKyAgICAqICAgICAgIEFQSUMgSUQgPiAweGZmIGlzIHJlc2VydmVkLgo+ICsgICAg Ki8KPiArICAgIGlmICggaW5kZXggPj0gMHhmZiApCj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4g Kwo+ICsgICAgYXZpY19waHlfYWl0ID0gbWZuX3RvX3ZpcnQoZC0+YXZpY19waHlfYWl0X21mbik7 Cj4gKwo+ICsgICAgcmV0dXJuICZhdmljX3BoeV9haXRbaW5kZXhdOwo+ICt9Cj4gKwo+ICsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCgpEaXR0bwo+ICsgKiBBVklDIEFQSXMKPiArICovCj4gK2ludCBzdm1fYXZpY19kb21faW5p dChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIHN0cnVj dCBwYWdlX2luZm8gKnBnOwo+ICsgICAgdW5zaWduZWQgbG9uZyBtZm47Cj4gKwo+ICsgICAgaWYg KCAhc3ZtX2F2aWMgKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIC8qKgo+ICsgICAg ICogTm90ZToKPiArICAgICAqIEFWSUMgaGFyZHdhcmUgd2Fsa3MgdGhlIG5lc3RlZCBwYWdlIHRh YmxlIHRvIGNoZWNrIHBlcm1pc3Npb25zLAo+ICsgICAgICogYnV0IGRvZXMgbm90IHVzZSB0aGUg U1BBIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBsZWFmIHBhZ2UKPiArICAgICAqIHRhYmxlIGVu dHJ5IHNpbmNlIGl0IHVzZXMgIGFkZHJlc3MgaW4gdGhlIEFWSUNfQkFDS0lOR19QQUdFIHBvaW50 ZXIKPiArICAgICAqIGZpZWxkIG9mIHRoZSBWTUNCLiBUaGVyZWZvcmUsIHdlIHNldCB1cCBhIGR1 bW15IHBhZ2UgaGVyZSBfbWZuKDApLgo+ICsgICAgICovCj4gKyAgICBpZiAoICFkLT5hcmNoLmh2 bV9kb21haW4uc3ZtLmF2aWNfYWNjZXNzX3BhZ2VfZG9uZSApCj4gKyAgICB7Cj4gKyAgICAgICAg c2V0X21taW9fcDJtX2VudHJ5KGQsIHBhZGRyX3RvX3BmbihBUElDX0RFRkFVTFRfUEhZU19CQVNF KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgX21mbigwKSwgUEFHRV9PUkRFUl80SywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJtX2dldF9ob3N0cDJtKGQpLT5kZWZhdWx0 X2FjY2Vzcyk7Cj4gKyAgICAgICAgZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2FjY2Vzc19w YWdlX2RvbmUgPSB0cnVlOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIEluaXQgQVZJQyBsb2cgQVBJ QyBJRCB0YWJsZSAqLwo+ICsgICAgcGcgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgTUVNRl9ub19v d25lcik7Cj4gKyAgICBpZiAoICFwZyApCj4gKyAgICB7Cj4gKyAgICAgICAgZHByaW50ayhYRU5M T0dfRVJSLCAiYWxsb2MgQVZJQyBsb2dpY2FsIEFQSUMgSUQgdGFibGUgZXJyb3I6ICVkXG4iLAoK SG93IGFib3V0ICIlZDogQVZJQyBsb2dpY2FsIC4uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQiID8K PiArICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7Cj4gKyAgICAgICAgcmV0ID0gLUVOT01F TTsKPiArICAgICAgICBnb3RvIGVycl9vdXQ7Cj4gKyAgICB9Cj4gKyAgICBtZm4gPSBwYWdlX3Rv X21mbihwZyk7Cj4gKyAgICBjbGVhcl9kb21haW5fcGFnZShfbWZuKG1mbikpOwo+ICsgICAgZC0+ YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2xvZ19haXRfbWZuID0gbWZuOwo+ICsKPiArICAgIC8q IEluaXQgQVZJQyBwaHkgQVBJQyBJRCB0YWJsZSAqLwo+ICsgICAgcGcgPSBhbGxvY19kb21oZWFw X3BhZ2UoZCwgTUVNRl9ub19vd25lcik7Cj4gKyAgICBpZiAoICFwZyApCj4gKyAgICB7Cj4gKyAg ICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCAiYWxsb2MgQVZJQyBwaHlzaWNhbCBBUElDIElEIHRh YmxlIGVycm9yOiAlZFxuIiwKPiArICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7CgpEaXR0 by4KCllvdSBjb3VsZCBhbHNvIHVzZSBnZHByaW50ayBpbnN0ZWFkPwoKPiArICAgICAgICByZXQg PSAtRU5PTUVNOwo+ICsgICAgICAgIGdvdG8gZXJyX291dDsKPiArICAgIH0KPiArICAgIG1mbiA9 IHBhZ2VfdG9fbWZuKHBnKTsKPiArICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Cj4g KyAgICBkLT5hcmNoLmh2bV9kb21haW4uc3ZtLmF2aWNfcGh5X2FpdF9tZm4gPSBtZm47Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArZXJyX291dDoKCkFkZCBhbiBleHRyYSBzcGFjZSBpbiBmcm9u dCBvZiB0aGUgbGFiZWwgcGxlYXNlLgoKPiArICAgIHN2bV9hdmljX2RvbV9kZXN0cm95KGQpOwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBzdm1fYXZpY19kb21fZGVzdHJveShz dHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBpZiAoICFzdm1fYXZpYyApCj4gKyAgICAgICAg cmV0dXJuOwo+ICsKPiArICAgIGlmICggZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX3BoeV9h aXRfbWZuICkKPiArICAgIHsKPiArICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZShtZm5fdG9fcGFn ZShkLT5hcmNoLmh2bV9kb21haW4uc3ZtLmF2aWNfcGh5X2FpdF9tZm4pKTsKPiArICAgICAgICBk LT5hcmNoLmh2bV9kb21haW4uc3ZtLmF2aWNfcGh5X2FpdF9tZm4gPSAwOwo+ICsgICAgfQo+ICsK PiArICAgIGlmICggZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2xvZ19haXRfbWZuICkKPiAr ICAgIHsKPiArICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZShtZm5fdG9fcGFnZShkLT5hcmNoLmh2 bV9kb21haW4uc3ZtLmF2aWNfbG9nX2FpdF9tZm4pKTsKPiArICAgICAgICBkLT5hcmNoLmh2bV9k b21haW4uc3ZtLmF2aWNfbG9nX2FpdF9tZm4gPSAwOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICsvKioK PiArICogTm90ZTogQXQgdGhpcyBwb2ludCwgdmxhcGljLT5yZWdzX3BhZ2UgaXMgYWxyZWFkeSBp bml0aWFsaXplZC4KPiArICovCj4gK2ludCBzdm1fYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHUg KnYpCj4gK3sKPiArICAgIHN0cnVjdCB2bGFwaWMgKnZsYXBpYyA9IHZjcHVfdmxhcGljKHYpOwo+ ICsgICAgc3RydWN0IGFyY2hfc3ZtX3N0cnVjdCAqcyA9ICZ2LT5hcmNoLmh2bV9zdm07Cj4gKwo+ ICsgICAgaWYgKCBzdm1fYXZpYyApCj4gKyAgICAgICAgcy0+YXZpY19ia19wZyA9IHZsYXBpYy0+ cmVnc19wYWdlOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgc3ZtX2F2aWNfZGVz dHJveV92Y3B1KHN0cnVjdCB2Y3B1ICp2KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgYXJjaF9zdm1fc3Ry dWN0ICpzID0gJnYtPmFyY2guaHZtX3N2bTsKPiArCj4gKyAgICBpZiAoIHN2bV9hdmljICYmIHMt PmF2aWNfYmtfcGcgKQo+ICsgICAgICAgIHMtPmF2aWNfYmtfcGcgPSBOVUxMOwo+ICt9Cj4gKwo+ ICtib29sX3Qgc3ZtX2F2aWNfdmNwdV9lbmFibGVkKHN0cnVjdCB2Y3B1ICp2KQoKYm9vbCBwbGVh c2UKPiArewo+ICsgICAgc3RydWN0IGFyY2hfc3ZtX3N0cnVjdCAqcyA9ICZ2LT5hcmNoLmh2bV9z dm07Cj4gKyAgICBzdHJ1Y3Qgdm1jYl9zdHJ1Y3QgKnZtY2IgPSBzLT52bWNiOwo+ICsKPiArICAg IHJldHVybiAoIHN2bV9hdmljICYmIHZtY2ItPl92aW50ci5maWVsZHMuYXZpY19lbmFibGUpOwoK Q291bGQgeW91IGRyb3AgdGhlICgpIHBsZWFzZT8KCj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg dTMyICoKPiArYXZpY19nZXRfYmtfcGFnZV9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgdTMyIG9mZnNl dCkKCmNvbnN0IG9uICdzdHJ1Y3QgdmNwdScgcGxlYXNlPwo+ICt7Cj4gKyAgICBzdHJ1Y3QgYXJj aF9zdm1fc3RydWN0ICpzID0gJnYtPmFyY2guaHZtX3N2bTsKPiArICAgIHN0cnVjdCBwYWdlX2lu Zm8gKnBnID0gcy0+YXZpY19ia19wZzsKPiArICAgIGNoYXIgKnRtcDsKPiArCj4gKyAgICBpZiAo ICFwZyApCj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgdG1wID0gKGNoYXIgKikg cGFnZV90b192aXJ0KHBnKTsKCkV4dHJhIHNwYWNlIG5vdCBuZWVkZWQuCj4gKyAgICByZXR1cm4g KHUzMiopKHRtcCtvZmZzZXQpOwoKUGVyaGFwczoKCglyZXR1cm4gKHUzMiAqKSh0bXAgKyBvZmZz ZXQpOwo/Cgo+ICt9Cj4gKwo+ICt2b2lkIHN2bV9hdmljX3VwZGF0ZV92YXBpY19iYXIoc3RydWN0 IHZjcHUgKnYsIHVpbnQ2NF90IGRhdGEpCj4gK3sKPiArICAgIHN0cnVjdCBhcmNoX3N2bV9zdHJ1 Y3QgKnMgPSAmdi0+YXJjaC5odm1fc3ZtOwo+ICsKPiArICAgIHMtPnZtY2ItPmF2aWNfdmFwaWNf YmFyID0gZGF0YSAmIEFWSUNfQVBJQ19CQVJfTUFTSzsKPiArICAgIHMtPnZtY2ItPmNsZWFuYml0 cy5maWVsZHMuYXZpYyA9IDA7Cj4gK30KPiArCj4gK2ludCBzdm1fYXZpY19pbml0X3ZtY2Ioc3Ry dWN0IHZjcHUgKnYpCj4gK3sKPiArICAgIHBhZGRyX3QgbWE7Cj4gKyAgICB1MzIgYXBpY19pZF9y ZWc7Cj4gKyAgICBzdHJ1Y3QgYXJjaF9zdm1fc3RydWN0ICpzID0gJnYtPmFyY2guaHZtX3N2bTsK PiArICAgIHN0cnVjdCB2bWNiX3N0cnVjdCAqdm1jYiA9IHMtPnZtY2I7Cj4gKyAgICBzdHJ1Y3Qg c3ZtX2RvbWFpbiAqZCA9ICZ2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5zdm07Cj4gKyAgICBz dHJ1Y3Qgc3ZtX2F2aWNfcGh5X2FpdF9lbnRyeSBlbnRyeTsKPiArCj4gKyAgICBpZiAoICFzdm1f YXZpYyApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgdm1jYi0+YXZpY19ia19wZ19w YSA9IHBhZ2VfdG9fbWFkZHIocy0+YXZpY19ia19wZykgJiBBVklDX0hQQV9NQVNLOwo+ICsgICAg bWEgPSBkLT5hdmljX2xvZ19haXRfbWZuOwo+ICsgICAgdm1jYi0+YXZpY19sb2dfYXBpY19pZCA9 IChtYSA8PCBQQUdFX1NISUZUKSAmIEFWSUNfSFBBX01BU0s7Cj4gKyAgICBtYSA9IGQtPmF2aWNf cGh5X2FpdF9tZm47Cj4gKyAgICB2bWNiLT5hdmljX3BoeV9hcGljX2lkID0gKG1hIDw8IFBBR0Vf U0hJRlQpICYgQVZJQ19IUEFfTUFTSzsKPiArICAgIHZtY2ItPmF2aWNfcGh5X2FwaWNfaWQgfD0g QVZJQ19QSFlfQVBJQ19JRF9NQVg7Cj4gKwo+ICsgICAgZHByaW50ayhYRU5MT0dfREVCVUcsICJT Vk06ICVzOiBicGE9JSNsbHgsIGxwYT0lI2xseCwgcHBhPSUjbGx4XG4iLAoKSSB0aGluayB5b3Ug Y2FuIGRyb3AgdGhlICdTVk06JyBwYXJ0LiBUaGUgX19mdW5jX18gZ2l2ZXMgZW5vdWdoIGRldGFp bHMuCgo+ICsgICAgICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKXZtY2ItPmF2 aWNfYmtfcGdfcGEsCj4gKyAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdm1jYi0+YXZp Y19sb2dfYXBpY19pZCwKPiArICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2bWNiLT5h dmljX3BoeV9hcGljX2lkKTsKCklzIHRoaXMgYWxzbyBwYXJ0IG9mIHRoZSBrZXlib2FyZCBoYW5k bGVyPyBQZXJoYXBzIHRoYXQgaW5mb3JtYXRpb24gc2hvdWxkCmJlIHByZXNlbnRlZCB0aGVyZT8K PiArCj4gKwo+ICsgICAgYXBpY19pZF9yZWcgPSAqYXZpY19nZXRfYmtfcGFnZV9lbnRyeSh2LCBB UElDX0lEKTsKClVtLCB3aGF0IGlmIGl0IHJldHVybnMgTlVMTD8gWW91IHdvdWxkIGRlcmVmZW5j aW5nIE5VTEwuIFBlcmhhcHMgY2hlY2sgZm9yIHRoYXQgZmlyc3Q/Cgo+ICsgICAgcy0+YXZpY19w aHlfaWRfY2FjaGUgPSBhdmljX2dldF9waHlfYWl0X2VudHJ5KHYsIGFwaWNfaWRfcmVnID4+IDI0 KTsKPiArICAgIGlmICggIXMtPmF2aWNfcGh5X2lkX2NhY2hlICkKPiArICAgICAgICByZXR1cm4g LUVJTlZBTDsKCllvdSBkb24ndCB3YW50IHRvIHVucm9sbCB0aGUgZW50cmllcyB0aGF0IGdvdCBz ZXQgZWFybGllcj8gYXZpY19bYmtfcGdfcGEscGh5X2FwaWNfaWQsbG9nX2FwaWNfaWRdID8KCj4g Kwo+ICsgICAgZW50cnkgPSAqKHMtPmF2aWNfcGh5X2lkX2NhY2hlKTsKPiArICAgIHNtcF9ybWIo KTsKPiArICAgIGVudHJ5LmJrX3BnX3B0ciA9ICh2bWNiLT5hdmljX2JrX3BnX3BhID4+IDEyKSAm IDB4ZmZmZmZmZmZmZjsKClNob3VsZCB0aGUgMHhmZi4uIGhhdmUgc29tZSBzb2Z0IG9mIG1hY3Jv PwoKQWxzbyB0aGUgMTIgbG9va3Mgc3VzcGljaW91cyBsaWtlIHNvbWUgb3RoZXIgbWFjcm8gdmFs dWUuCj4gKyAgICBlbnRyeS5pc19ydW5uaW5nPSAwOwoKTWlzc2luZyBzcGFjZS4KPiArICAgIGVu dHJ5LnZhbGlkID0gMTsKPiArICAgICoocy0+YXZpY19waHlfaWRfY2FjaGUpID0gZW50cnk7Cj4g KyAgICBzbXBfd21iKCk7Cj4gKwo+ICsgICAgc3ZtX2F2aWNfdXBkYXRlX3ZhcGljX2Jhcih2LCBB UElDX0RFRkFVTFRfUEhZU19CQVNFKTsKPiArCj4gKyAgICB2bWNiLT5fdmludHIuZmllbGRzLmF2 aWNfZW5hYmxlID0gMTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQoKUGxlYXNlIGFsc28gYWRk OgoKCi8qCiAqIExvY2FsIHZhcmlhYmxlczoKICogbW9kZTogQwogKiBjLWZpbGUtc3R5bGU6ICJC U0QiCiAqIGMtYmFzaWMtb2Zmc2V0OiA0CiAqIHRhYi13aWR0aDogNAogKiBpbmRlbnQtdGFicy1t b2RlOiBuaWwKICogRW5kOgogKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9zdm0v c3ZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYwo+IGluZGV4IDY3OWU2MTUuLmJjYjdk ZjQgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9zdm0vc3ZtLmMKPiArKysgYi94ZW4v YXJjaC94ODYvaHZtL3N2bS9zdm0uYwo+IEBAIC00OCw2ICs0OCw3IEBACj4gICNpbmNsdWRlIDxh c20vaHZtL3N2bS9hc2lkLmg+Cj4gICNpbmNsdWRlIDxhc20vaHZtL3N2bS9zdm0uaD4KPiAgI2lu Y2x1ZGUgPGFzbS9odm0vc3ZtL3ZtY2IuaD4KPiArI2luY2x1ZGUgPGFzbS9odm0vc3ZtL2F2aWMu aD4KPiAgI2luY2x1ZGUgPGFzbS9odm0vc3ZtL2VtdWxhdGUuaD4KPiAgI2luY2x1ZGUgPGFzbS9o dm0vc3ZtL2ludHIuaD4KPiAgI2luY2x1ZGUgPGFzbS9odm0vc3ZtL3N2bWRlYnVnLmg+Cj4gQEAg LTExNjQsMTEgKzExNjUsMTIgQEAgdm9pZCBzdm1faG9zdF9vc3Z3X2luaXQoKQo+ICAKPiAgc3Rh dGljIGludCBzdm1fZG9tYWluX2luaXRpYWxpc2Uoc3RydWN0IGRvbWFpbiAqZCkKPiAgewo+IC0g ICAgcmV0dXJuIDA7Cj4gKyAgICByZXR1cm4gc3ZtX2F2aWNfZG9tX2luaXQoZCk7Cj4gIH0KPiAg Cj4gIHN0YXRpYyB2b2lkIHN2bV9kb21haW5fZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkKQo+ICB7 Cj4gKyAgICBzdm1fYXZpY19kb21fZGVzdHJveShkKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBz dm1fdmNwdV9pbml0aWFsaXNlKHN0cnVjdCB2Y3B1ICp2KQo+IEBAIC0xMTgxLDYgKzExODMsMTMg QEAgc3RhdGljIGludCBzdm1fdmNwdV9pbml0aWFsaXNlKHN0cnVjdCB2Y3B1ICp2KQo+ICAKPiAg ICAgIHYtPmFyY2guaHZtX3N2bS5sYXVuY2hfY29yZSA9IC0xOwo+ICAKPiArICAgIGlmICggKHJj ID0gc3ZtX2F2aWNfaW5pdF92Y3B1KHYpKSAhPSAwICkKPiArICAgIHsKPiArICAgICAgICBkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbml0aWF6 bGl6ZSBBVklDIHZjcHUuXG4iKTsKPiArICAgICAgICByZXR1cm4gcmM7Cj4gKyAgICB9Cj4gKwo+ ICAgICAgaWYgKCAocmMgPSBzdm1fY3JlYXRlX3ZtY2IodikpICE9IDAgKQo+ICAgICAgewo+ICAg ICAgICAgIGRwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4gQEAgLTEyMDAsNiArMTIwOSw3IEBAIHN0 YXRpYyBpbnQgc3ZtX3ZjcHVfaW5pdGlhbGlzZShzdHJ1Y3QgdmNwdSAqdikKPiAgCj4gIHN0YXRp YyB2b2lkIHN2bV92Y3B1X2Rlc3Ryb3koc3RydWN0IHZjcHUgKnYpCj4gIHsKPiArICAgIHN2bV9h dmljX2Rlc3Ryb3lfdmNwdSh2KTsKPiAgICAgIHZwbXVfZGVzdHJveSh2KTsKPiAgICAgIHN2bV9k ZXN0cm95X3ZtY2Iodik7Cj4gICAgICBwYXNzaXZlX2RvbWFpbl9kZXN0cm95KHYpOwo+IEBAIC0x NDY0LDYgKzE0NzQsNyBAQCBjb25zdCBzdHJ1Y3QgaHZtX2Z1bmN0aW9uX3RhYmxlICogX19pbml0 IHN0YXJ0X3N2bSh2b2lkKQo+ICAgICAgUChjcHVfaGFzX3N2bV9kZWNvZGUsICJEZWNvZGVBc3Np c3RzIik7Cj4gICAgICBQKGNwdV9oYXNfcGF1c2VfZmlsdGVyLCAiUGF1c2UtSW50ZXJjZXB0IEZp bHRlciIpOwo+ICAgICAgUChjcHVfaGFzX3RzY19yYXRpbywgIlRTQyBSYXRlIE1TUiIpOwo+ICsg ICAgUChjcHVfaGFzX3N2bV9hdmljLCAiQVZJQyIpOwo+ICAjdW5kZWYgUAo+ICAKPiAgICAgIGlm ICggIXByaW50ZWQgKQo+IEBAIC0xODA5LDYgKzE4MjAsMTAgQEAgc3RhdGljIGludCBzdm1fbXNy X3dyaXRlX2ludGVyY2VwdCh1bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRfdCBtc3JfY29udGVudCkK PiAgCj4gICAgICBzd2l0Y2ggKCBtc3IgKQo+ICAgICAgewo+ICsgICAgY2FzZSBNU1JfSUEzMl9B UElDQkFTRToKPiArICAgICAgICBpZiAoIHN2bV9hdmljX3ZjcHVfZW5hYmxlZCh2KSApCj4gKyAg ICAgICAgICAgIHN2bV9hdmljX3VwZGF0ZV92YXBpY19iYXIodiwgbXNyX2NvbnRlbnQpOwo+ICsg ICAgICAgIGJyZWFrOwo+ICAgICAgY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9DUzoKPiAgICAgIGNh c2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgo+ICAgICAgY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9F SVA6Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3ZtY2IuYyBiL3hlbi9hcmNo L3g4Ni9odm0vc3ZtL3ZtY2IuYwo+IGluZGV4IDllYTAxNGYuLjllZTdmYzcgMTAwNjQ0Cj4gLS0t IGEveGVuL2FyY2gveDg2L2h2bS9zdm0vdm1jYi5jCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9z dm0vdm1jYi5jCj4gQEAgLTI4LDYgKzI4LDcgQEAKPiAgI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXgu aD4KPiAgI2luY2x1ZGUgPGFzbS9wMm0uaD4KPiAgI2luY2x1ZGUgPGFzbS9odm0vc3VwcG9ydC5o Pgo+ICsjaW5jbHVkZSA8YXNtL2h2bS9zdm0vYXZpYy5oPgo+ICAjaW5jbHVkZSA8YXNtL2h2bS9z dm0vc3ZtLmg+Cj4gICNpbmNsdWRlIDxhc20vaHZtL3N2bS9zdm1kZWJ1Zy5oPgo+ICAKPiBAQCAt MjI1LDYgKzIyNiw4IEBAIHN0YXRpYyBpbnQgY29uc3RydWN0X3ZtY2Ioc3RydWN0IHZjcHUgKnYp Cj4gICAgICAgICAgdm1jYi0+X2dlbmVyYWwxX2ludGVyY2VwdHMgfD0gR0VORVJBTDFfSU5URVJD RVBUX1BBVVNFOwo+ICAgICAgfQo+ICAKPiArICAgIHN2bV9hdmljX2luaXRfdm1jYih2KTsKPiAr Cj4gICAgICB2bWNiLT5jbGVhbmJpdHMuYnl0ZXMgPSAwOwo+ICAKPiAgICAgIHJldHVybiAwOwo+ IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vYXZpYy5oIGIveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2F2aWMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uOTUwODQ4Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L2h2bS9zdm0vYXZpYy5oCj4gQEAgLTAsMCArMSw0MCBAQAo+ICsjaWZuZGVmIF9TVk1f QVZJQ19IXwo+ICsjZGVmaW5lIF9TVk1fQVZJQ19IXwo+ICsKPiArZW51bSBhdmljX2luY21wX2lw aV9lcnJfY29kZSB7Cj4gKyAgICBBVklDX0lOQ01QX0lQSV9FUlJfSU5WQUxJRF9JTlRfVFlQRSwK PiArICAgIEFWSUNfSU5DTVBfSVBJX0VSUl9UQVJHRVRfTk9UX1JVTiwKPiArICAgIEFWSUNfSU5D TVBfSVBJX0VSUl9JTlZfVEFSR0VULAo+ICsgICAgQVZJQ19JTkNNUF9JUElfRVJSX0lOVl9CS19Q QUdFLAo+ICt9Owo+ICsKPiArc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKPiAr c3ZtX2F2aWNfbG9nX2FpdF9lbnRyeSB7Cj4gKyAgICB1MzIgZ3Vlc3RfcGh5X2FwaWNfaWQgOiA4 Owo+ICsgICAgdTMyIHJlcyAgICAgICAgICAgICAgIDogMjM7Cj4gKyAgICB1MzIgdmFsaWQgICAg ICAgICAgICAgOiAxOwo+ICt9Owo+ICsKPiArc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tl ZF9fKSkKPiArc3ZtX2F2aWNfcGh5X2FpdF9lbnRyeSB7Cj4gKyAgICB1NjQgaG9zdF9waHlfYXBp Y19pZCAgOiA4Owo+ICsgICAgdTY0IHJlczEgICAgICAgICAgICAgIDogNDsKPiArICAgIHU2NCBi a19wZ19wdHIgICAgICAgICA6IDQwOwo+ICsgICAgdTY0IHJlczIgICAgICAgICAgICAgIDogMTA7 Cj4gKyAgICB1NjQgaXNfcnVubmluZyAgICAgICAgOiAxOwo+ICsgICAgdTY0IHZhbGlkICAgICAg ICAgICAgIDogMTsKPiArfTsKPiArCj4gK2V4dGVybiBib29sX3Qgc3ZtX2F2aWM7Cj4gKwo+ICtp bnQgc3ZtX2F2aWNfZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCk7Cj4gK3ZvaWQgc3ZtX2F2aWNf ZG9tX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCk7Cj4gKwo+ICtpbnQgc3ZtX2F2aWNfaW5pdF92 Y3B1KHN0cnVjdCB2Y3B1ICp2KTsKPiArdm9pZCBzdm1fYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0 IHZjcHUgKnYpOwo+ICtib29sX3Qgc3ZtX2F2aWNfdmNwdV9lbmFibGVkKHN0cnVjdCB2Y3B1ICp2 KTsKPiArCj4gK3ZvaWQgc3ZtX2F2aWNfdXBkYXRlX3ZhcGljX2JhcihzdHJ1Y3QgdmNwdSAqdix1 aW50NjRfdCBkYXRhKTsKPiAraW50IHN2bV9hdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdSAqdik7 Cj4gKwo+ICsjZW5kaWYgLyogX1NWTV9BVklDX0hfICovCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3N2bS9zdm0uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3N2bS9z dm0uaAo+IGluZGV4IGM5NTRiN2UuLmZlYTYxYmIgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9odm0vc3ZtL3N2bS5oCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3Zt L3N2bS5oCj4gQEAgLTgxLDYgKzgxLDcgQEAgZXh0ZXJuIHUzMiBzdm1fZmVhdHVyZV9mbGFnczsK PiAgI2RlZmluZSBTVk1fRkVBVFVSRV9GTFVTSEJZQVNJRCAgICA2IC8qIFRMQiBmbHVzaCBieSBB U0lEIHN1cHBvcnQgKi8KPiAgI2RlZmluZSBTVk1fRkVBVFVSRV9ERUNPREVBU1NJU1RTICA3IC8q IERlY29kZSBhc3Npc3RzIHN1cHBvcnQgKi8KPiAgI2RlZmluZSBTVk1fRkVBVFVSRV9QQVVTRUZJ TFRFUiAgIDEwIC8qIFBhdXNlIGludGVyY2VwdCBmaWx0ZXIgc3VwcG9ydCAqLwo+ICsjZGVmaW5l IFNWTV9GRUFUVVJFX0FWSUMgICAgICAgICAgMTMgLyogQVZJQyBzdXBwb3J0ICovCj4gIAo+ICAj ZGVmaW5lIGNwdV9oYXNfc3ZtX2ZlYXR1cmUoZikgdGVzdF9iaXQoZiwgJnN2bV9mZWF0dXJlX2Zs YWdzKQo+ICAjZGVmaW5lIGNwdV9oYXNfc3ZtX25wdCAgICAgICBjcHVfaGFzX3N2bV9mZWF0dXJl KFNWTV9GRUFUVVJFX05QVCkKPiBAQCAtOTEsNiArOTIsNyBAQCBleHRlcm4gdTMyIHN2bV9mZWF0 dXJlX2ZsYWdzOwo+ICAjZGVmaW5lIGNwdV9oYXNfc3ZtX2RlY29kZSAgICBjcHVfaGFzX3N2bV9m ZWF0dXJlKFNWTV9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpCj4gICNkZWZpbmUgY3B1X2hhc19wYXVz ZV9maWx0ZXIgIGNwdV9oYXNfc3ZtX2ZlYXR1cmUoU1ZNX0ZFQVRVUkVfUEFVU0VGSUxURVIpCj4g ICNkZWZpbmUgY3B1X2hhc190c2NfcmF0aW8gICAgIGNwdV9oYXNfc3ZtX2ZlYXR1cmUoU1ZNX0ZF QVRVUkVfVFNDUkFURU1TUikKPiArI2RlZmluZSBjcHVfaGFzX3N2bV9hdmljICAgICAgY3B1X2hh c19zdm1fZmVhdHVyZShTVk1fRkVBVFVSRV9BVklDKQo+ICAKPiAgI2RlZmluZSBTVk1fUEFVU0VG SUxURVJfSU5JVCAgICAzMDAwCj4gIAo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2 L2h2bS9zdm0vdm1jYi5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL3ZtY2IuaAo+IGlu ZGV4IDc2OGU5ZmIuLmE0MmMwMzQgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vc3ZtL3ZtY2IuaAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3N2bS92bWNiLmgK PiBAQCAtNDk2LDYgKzQ5NiwxMiBAQCBzdHJ1Y3QgX19wYWNrZWQgdm1jYl9zdHJ1Y3Qgewo+ICB9 Owo+ICAKPiAgc3RydWN0IHN2bV9kb21haW4gewo+ICsgICAgdTMyIGF2aWNfbWF4X3ZjcHVfaWQ7 Cj4gKyAgICBib29sX3QgYXZpY19hY2Nlc3NfcGFnZV9kb25lOwoKYm9vbCBwbHMKPiArICAgIHBh ZGRyX3QgYXZpY19sb2dfYWl0X21mbjsKPiArICAgIHBhZGRyX3QgYXZpY19waHlfYWl0X21mbjsK PiArICAgIHUzMiBsZHJfcmVnOwo+ICsgICAgdTMyIGxkcl9tb2RlOwo+ICB9Owo+ICAKPiAgc3Ry dWN0IGFyY2hfc3ZtX3N0cnVjdCB7Cj4gQEAgLTUyOSw2ICs1MzUsMTAgQEAgc3RydWN0IGFyY2hf c3ZtX3N0cnVjdCB7Cj4gICAgICAgICAgdTY0IGxlbmd0aDsKPiAgICAgICAgICB1NjQgc3RhdHVz Owo+ICAgICAgfSBvc3Z3Owo+ICsKPiArICAgIC8qIEFWSUMgQVBJQyBiYWNraW5nIHBhZ2UgKi8K PiArICAgIHN0cnVjdCBwYWdlX2luZm8gKmF2aWNfYmtfcGc7Cj4gKyAgICBzdHJ1Y3Qgc3ZtX2F2 aWNfcGh5X2FpdF9lbnRyeSAqYXZpY19waHlfaWRfY2FjaGU7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3Qg dm1jYl9zdHJ1Y3QgKmFsbG9jX3ZtY2Iodm9pZCk7Cj4gLS0gCj4gMS45LjEKPiAKPiAKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IFhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKPiBYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwo+IGh0dHBzOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=