From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH 4/9] x86/pv: Implement pv_hypercall() in C Date: Thu, 11 Aug 2016 12:57:30 +0100 Message-ID: References: <1468835505-7278-1-git-send-email-andrew.cooper3@citrix.com> <1468835505-7278-5-git-send-email-andrew.cooper3@citrix.com> <57A0B8750200007800101C92@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <57A0B8750200007800101C92@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Xen-devel List-Id: xen-devel@lists.xenproject.org T24gMDIvMDgvMTYgMTQ6MTIsIEphbiBCZXVsaWNoIHdyb3RlOgo+Pj4+IE9uIDE4LjA3LjE2IGF0 IDExOjUxLCA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4gd3JvdGU6Cj4+ICtsb25nIHB2X2h5 cGVyY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gKyAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQ7Cj4+ICsjaWZuZGVmIE5ERUJVRwo+PiArICAgIHVuc2lnbmVk IGxvbmcgb2xkX3JpcCA9IHJlZ3MtPnJpcDsKPj4gKyNlbmRpZgo+PiArICAgIGxvbmcgcmV0Owo+ PiArICAgIHVpbnQzMl90IGVheCA9IHJlZ3MtPmVheDsKPj4gKwo+PiArICAgIEFTU0VSVChjdXJy LT5hcmNoLmZsYWdzICYgVEZfa2VybmVsX21vZGUpOwo+IEknbSBhZnJhaWQgVEZfa2VybmVsX21v ZGUgY2FuJ3QgYmUgcmVsaWVkIG9uIGZvciAzMi1iaXQgZ3Vlc3RzLCBzbwo+IHRoaXMgbmVlZHMg dG8gbW92ZSBpbnRvIHRoZSBpZigpIGJlbG93Lgo+Cj4+ICsgICAgaWYgKCAoZWF4ID49IE5SX2h5 cGVyY2FsbHMpIHx8ICFoeXBlcmNhbGxfdGFibGVbZWF4XSApCj4+ICsgICAgICAgICByZXR1cm4g LUVOT1NZUzsKPj4gKwo+PiArICAgIGlmICggIWlzX3B2XzMyYml0X3ZjcHUoY3VycikgKQo+PiAr ICAgIHsKPj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyByZGkgPSByZWdzLT5yZGk7Cj4+ICsgICAg ICAgIHVuc2lnbmVkIGxvbmcgcnNpID0gcmVncy0+cnNpOwo+PiArICAgICAgICB1bnNpZ25lZCBs b25nIHJkeCA9IHJlZ3MtPnJkeDsKPj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyByMTAgPSByZWdz LT5yMTA7Cj4+ICsgICAgICAgIHVuc2lnbmVkIGxvbmcgcjggPSByZWdzLT5yODsKPj4gKyAgICAg ICAgdW5zaWduZWQgbG9uZyByOSA9IHJlZ3MtPnI5Owo+PiArCj4+ICsjaWZuZGVmIE5ERUJVRwo+ PiArICAgICAgICAvKiBEZWxpYmVyYXRlbHkgY29ycnVwdCBwYXJhbWV0ZXIgcmVncyBub3QgdXNl ZCBieSB0aGlzIGh5cGVyY2FsbC4gKi8KPj4gKyAgICAgICAgc3dpdGNoICggaHlwZXJjYWxsX2Fy Z3NfdGFibGVbZWF4XSApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgY2FzZSAwOiByZGkgPSAw eGRlYWRiZWVmZGVhZGYwMGRVTDsKPj4gKyAgICAgICAgY2FzZSAxOiByc2kgPSAweGRlYWRiZWVm ZGVhZGYwMGRVTDsKPj4gKyAgICAgICAgY2FzZSAyOiByZHggPSAweGRlYWRiZWVmZGVhZGYwMGRV TDsKPj4gKyAgICAgICAgY2FzZSAzOiByMTAgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKPj4gKyAg ICAgICAgY2FzZSA0OiByOCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwo+PiArICAgICAgICBjYXNl IDU6IHI5ID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7Cj4gV2l0aG91dCBjb21tZW50cywgYXJlbid0 IHRoZXNlIGdvaW5nIHRvIGJlY29tZSA1IG5ldyBDb3Zlcml0eQo+IGlzc3Vlcz8KPgo+PiArICAg ICAgICB9Cj4+ICsjZW5kaWYKPj4gKyAgICAgICAgaWYgKCB1bmxpa2VseSh0Yl9pbml0X2RvbmUp ICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmdzWzZdID0g eyByZGksIHJzaSwgcmR4LCByMTAsIHI4LCByOSB9Owo+PiArCj4+ICsgICAgICAgICAgICBfX3Ry YWNlX2h5cGVyY2FsbChUUkNfUFZfSFlQRVJDQUxMX1YyLCBlYXgsIGFyZ3MpOwo+PiArICAgICAg ICB9Cj4+ICsKPj4gKyAgICAgICAgcmV0ID0gaHlwZXJjYWxsX3RhYmxlW2VheF0ocmRpLCByc2ks IHJkeCwgcjEwLCByOCwgcjkpOwo+PiArCj4+ICsjaWZuZGVmIE5ERUJVRwo+PiArICAgICAgICBp ZiAoIHJlZ3MtPnJpcCA9PSBvbGRfcmlwICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAg LyogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQgcGFyYW1ldGVyIHJlZ3MgdXNlZCBieSB0aGlzIGh5cGVy Y2FsbC4gKi8KPj4gKyAgICAgICAgICAgIHN3aXRjaCAoIGh5cGVyY2FsbF9hcmdzX3RhYmxlW2Vh eF0gKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgY2FzZSA2OiByZWdzLT5yOSAg PSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKPj4gKyAgICAgICAgICAgIGNhc2UgNTogcmVncy0+cjgg ID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7Cj4+ICsgICAgICAgICAgICBjYXNlIDQ6IHJlZ3MtPnIx MCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwo+PiArICAgICAgICAgICAgY2FzZSAzOiByZWdzLT5l ZHggPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKPj4gKyAgICAgICAgICAgIGNhc2UgMjogcmVncy0+ ZXNpID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7Cj4+ICsgICAgICAgICAgICBjYXNlIDE6IHJlZ3Mt PmVkaSA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwo+IEZvciBjb25zaXN0ZW5jeSB3aXRoIGVhcmxp ZXIgY29kZSwgbGVhc2UgdXNlIHJkeCwgcnNpLCBhbmQgcmRpIGhlcmUuCj4KPj4gKyNpZm5kZWYg TkRFQlVHCj4+ICsgICAgICAgIGlmICggcmVncy0+cmlwID09IG9sZF9yaXAgKQo+PiArICAgICAg ICB7Cj4+ICsgICAgICAgICAgICAvKiBEZWxpYmVyYXRlbHkgY29ycnVwdCBwYXJhbWV0ZXIgcmVn cyB1c2VkIGJ5IHRoaXMgaHlwZXJjYWxsLiAqLwo+PiArICAgICAgICAgICAgc3dpdGNoICggY29t cGF0X2h5cGVyY2FsbF9hcmdzX3RhYmxlW2VheF0gKQo+PiArICAgICAgICAgICAgewo+PiArICAg ICAgICAgICAgY2FzZSA2OiByZWdzLT5lYnAgPSAweGRlYWRmMDBkOwo+PiArICAgICAgICAgICAg Y2FzZSA1OiByZWdzLT5lZGkgPSAweGRlYWRmMDBkOwo+PiArICAgICAgICAgICAgY2FzZSA0OiBy ZWdzLT5lc2kgPSAweGRlYWRmMDBkOwo+PiArICAgICAgICAgICAgY2FzZSAzOiByZWdzLT5lZHgg PSAweGRlYWRmMDBkOwo+PiArICAgICAgICAgICAgY2FzZSAyOiByZWdzLT5lY3ggPSAweGRlYWRm MDBkOwo+PiArICAgICAgICAgICAgY2FzZSAxOiByZWdzLT5lYnggPSAweGRlYWRmMDBkOwo+IFBs ZWFzZSB1c2UgMzItYml0IHN0b3JlcyBoZXJlLgo+Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni94ODZf NjQvY29tcGF0L2VudHJ5LlMKPj4gKysrIGIveGVuL2FyY2gveDg2L3g4Nl82NC9jb21wYXQvZW50 cnkuUwo+PiBAQCAtMjUsNzAgKzI1LDEwIEBAIFVOTElLRUxZX1NUQVJUKG5lLCBtc2lfY2hlY2sp Cj4+ICAgICAgICAgIExPQURfQ19DTE9CQkVSRUQgY29tcGF0PTEgYXg9MAo+PiAgVU5MSUtFTFlf RU5EKG1zaV9jaGVjaykKPj4gIAo+PiAtICAgICAgICBtb3ZsICBVUkVHU19yYXgoJXJzcCksJWVh eAo+PiAgICAgICAgICBHRVRfQ1VSUkVOVChieCkKPj4gIAo+PiAtICAgICAgICBjbXBsICAkTlJf aHlwZXJjYWxscywlZWF4Cj4+IC0gICAgICAgIGphZSAgIGNvbXBhdF9iYWRfaHlwZXJjYWxsCj4+ IC0jaWZuZGVmIE5ERUJVRwo+PiAtICAgICAgICAvKiBEZWxpYmVyYXRlbHkgY29ycnVwdCBwYXJh bWV0ZXIgcmVncyBub3QgdXNlZCBieSB0aGlzIGh5cGVyY2FsbC4gKi8KPj4gLSAgICAgICAgcHVz aHEgVVJFR1NfcmJ4KCVyc3ApOyBwdXNocSAlcmN4OyBwdXNocSAlcmR4OyBwdXNocSAlcnNpOyBw dXNocSAlcmRpCj4+IC0gICAgICAgIHB1c2hxIFVSRUdTX3JicCs1KjgoJXJzcCkKPj4gLSAgICAg ICAgbGVhcSAgY29tcGF0X2h5cGVyY2FsbF9hcmdzX3RhYmxlKCVyaXApLCVyMTAKPj4gLSAgICAg ICAgbW92bCAgJDYsJWVjeAo+PiAtICAgICAgICBzdWJiICAoJXIxMCwlcmF4LDEpLCVjbAo+PiAt ICAgICAgICBtb3ZxICAlcnNwLCVyZGkKPj4gLSAgICAgICAgbW92bCAgJDB4REVBREJFRUYsJWVh eAo+PiAtICAgICAgICByZXAgICBzdG9zcQo+PiAtICAgICAgICBwb3BxICAlcjggOyBwb3BxICAl cjkgOyB4Y2hnbCAlcjhkLCVyOWQgLyogQXJncyA1JjY6IHplcm8gZXh0ZW5kICovCj4+IC0gICAg ICAgIHBvcHEgICVyZHg7IHBvcHEgICVyY3g7IHhjaGdsICVlZHgsJWVjeCAvKiBBcmdzIDMmNDog emVybyBleHRlbmQgKi8KPj4gLSAgICAgICAgcG9wcSAgJXJkaTsgcG9wcSAgJXJzaTsgeGNoZ2wg JWVkaSwlZXNpIC8qIEFyZ3MgMSYyOiB6ZXJvIGV4dGVuZCAqLwo+PiAtICAgICAgICBtb3ZsICBV UkVHU19yYXgoJXJzcCksJWVheAo+PiAtICAgICAgICBwdXNocSAlcmF4Cj4+IC0gICAgICAgIHB1 c2hxIFVSRUdTX3JpcCs4KCVyc3ApCj4+IC0jZGVmaW5lIFNIQURPV19CWVRFUyAxNiAvKiBTaGFk b3cgRUlQICsgc2hhZG93IGh5cGVyY2FsbCAjICovCj4+IC0jZWxzZQo+PiAtICAgICAgICAvKiBS ZWxvY2F0ZSBhcmd1bWVudCByZWdpc3RlcnMgYW5kIHplcm8tZXh0ZW5kIHRvIDY0IGJpdHMuICov Cj4+IC0gICAgICAgIHhjaGdsICVlY3gsJWVzaSAgICAgICAgICAgICAgLyogQXJnIDIsIEFyZyA0 ICovCj4+IC0gICAgICAgIG1vdmwgICVlZHgsJWVkeCAgICAgICAgICAgICAgLyogQXJnIDMgICAg ICAgICovCj4+IC0gICAgICAgIG1vdmwgICVlZGksJXI4ZCAgICAgICAgICAgICAgLyogQXJnIDUg ICAgICAgICovCj4+IC0gICAgICAgIG1vdmwgICVlYnAsJXI5ZCAgICAgICAgICAgICAgLyogQXJn IDYgICAgICAgICovCj4+IC0gICAgICAgIG1vdmwgIFVSRUdTX3JieCglcnNwKSwlZWRpICAgLyog QXJnIDEgICAgICAgICovCj4+IC0jZGVmaW5lIFNIQURPV19CWVRFUyAwICAvKiBObyBvbi1zdGFj ayBzaGFkb3cgc3RhdGUgKi8KPj4gLSNlbmRpZgo+PiAtICAgICAgICBjbXBiICAkMCx0Yl9pbml0 X2RvbmUoJXJpcCkKPj4gLVVOTElLRUxZX1NUQVJUKG5lLCBjb21wYXRfdHJhY2UpCj4+IC0gICAg ICAgIGNhbGwgIF9fdHJhY2VfaHlwZXJjYWxsX2VudHJ5Cj4+IC0gICAgICAgIC8qIFJlc3RvcmUg dGhlIHJlZ2lzdGVycyB0aGF0IF9fdHJhY2VfaHlwZXJjYWxsX2VudHJ5IGNsb2JiZXJlZC4gKi8K Pj4gLSAgICAgICAgbW92bCAgVVJFR1NfcmF4K1NIQURPV19CWVRFUyglcnNwKSwlZWF4ICAgLyog SHlwZXJjYWxsICMgICovCj4+IC0gICAgICAgIG1vdmwgIFVSRUdTX3JieCtTSEFET1dfQllURVMo JXJzcCksJWVkaSAgIC8qIEFyZyAxICAgICAgICAqLwo+PiAtICAgICAgICBtb3ZsICBVUkVHU19y Y3grU0hBRE9XX0JZVEVTKCVyc3ApLCVlc2kgICAvKiBBcmcgMiAgICAgICAgKi8KPj4gLSAgICAg ICAgbW92bCAgVVJFR1NfcmR4K1NIQURPV19CWVRFUyglcnNwKSwlZWR4ICAgLyogQXJnIDMgICAg ICAgICovCj4+IC0gICAgICAgIG1vdmwgIFVSRUdTX3JzaStTSEFET1dfQllURVMoJXJzcCksJWVj eCAgIC8qIEFyZyA0ICAgICAgICAqLwo+PiAtICAgICAgICBtb3ZsICBVUkVHU19yZGkrU0hBRE9X X0JZVEVTKCVyc3ApLCVyOGQgICAvKiBBcmcgNSAgICAgICAgKi8KPj4gLSAgICAgICAgbW92bCAg VVJFR1NfcmJwK1NIQURPV19CWVRFUyglcnNwKSwlcjlkICAgLyogQXJnIDYgICAgICAgICovCj4+ IC0jdW5kZWYgU0hBRE9XX0JZVEVTCj4+IC1VTkxJS0VMWV9FTkQoY29tcGF0X3RyYWNlKQo+PiAt ICAgICAgICBsZWFxICBjb21wYXRfaHlwZXJjYWxsX3RhYmxlKCVyaXApLCVyMTAKPj4gLSAgICAg ICAgUEVSRkNfSU5DUihoeXBlcmNhbGxzLCAlcmF4LCAlcmJ4KQo+PiAtICAgICAgICBjYWxscSAq KCVyMTAsJXJheCw4KQo+PiAtI2lmbmRlZiBOREVCVUcKPj4gLSAgICAgICAgLyogRGVsaWJlcmF0 ZWx5IGNvcnJ1cHQgcGFyYW1ldGVyIHJlZ3MgdXNlZCBieSB0aGlzIGh5cGVyY2FsbC4gKi8KPj4g LSAgICAgICAgcG9wcSAgJXIxMCAgICAgICAgICMgU2hhZG93IFJJUAo+PiAtICAgICAgICBjbXBx ICAlcjEwLFVSRUdTX3JpcCs4KCVyc3ApCj4+IC0gICAgICAgIHBvcHEgICVyY3ggICAgICAgICAj IFNoYWRvdyBoeXBlcmNhbGwgaW5kZXgKPj4gLSAgICAgICAgam5lICAgY29tcGF0X3NraXBfY2xv YmJlciAvKiBJZiBSSVAgaGFzIGNoYW5nZWQgdGhlbiBkb24ndCBjbG9iYmVyLiAqLwo+PiAtICAg ICAgICBsZWFxICBjb21wYXRfaHlwZXJjYWxsX2FyZ3NfdGFibGUoJXJpcCksJXIxMAo+PiAtICAg ICAgICBtb3ZiICAoJXIxMCwlcmN4LDEpLCVjbAo+PiAtICAgICAgICBtb3ZsICAkMHhERUFEQkVF RiwlcjEwZAo+PiAtICAgICAgICB0ZXN0YiAlY2wsJWNsOyBqeiBjb21wYXRfc2tpcF9jbG9iYmVy OyBtb3ZsICVyMTBkLFVSRUdTX3JieCglcnNwKQo+PiAtICAgICAgICBjbXBiICAkMiwgJWNsOyBq YiBjb21wYXRfc2tpcF9jbG9iYmVyOyBtb3ZsICVyMTBkLFVSRUdTX3JjeCglcnNwKQo+PiAtICAg ICAgICBjbXBiICAkMywgJWNsOyBqYiBjb21wYXRfc2tpcF9jbG9iYmVyOyBtb3ZsICVyMTBkLFVS RUdTX3JkeCglcnNwKQo+PiAtICAgICAgICBjbXBiICAkNCwgJWNsOyBqYiBjb21wYXRfc2tpcF9j bG9iYmVyOyBtb3ZsICVyMTBkLFVSRUdTX3JzaSglcnNwKQo+PiAtICAgICAgICBjbXBiICAkNSwg JWNsOyBqYiBjb21wYXRfc2tpcF9jbG9iYmVyOyBtb3ZsICVyMTBkLFVSRUdTX3JkaSglcnNwKQo+ PiAtICAgICAgICBjbXBiICAkNiwgJWNsOyBqYiBjb21wYXRfc2tpcF9jbG9iYmVyOyBtb3ZsICVy MTBkLFVSRUdTX3JicCglcnNwKQo+PiAtY29tcGF0X3NraXBfY2xvYmJlcjoKPj4gLSNlbmRpZgo+ PiArICAgICAgICBtb3YgICAlcnNwLCAlcmRpCj4+ICsgICAgICAgIGNhbGwgIHB2X2h5cGVyY2Fs bAo+PiAgICAgICAgICBtb3ZsICAlZWF4LFVSRUdTX3JheCglcnNwKSAgICAgICAjIHNhdmUgdGhl IHJldHVybiB2YWx1ZQo+IFRvIGZvbGxvdyB0aGUgSFZNIG1vZGVsLCB0aGlzIHNob3VsZCBhbHNv IG1vdmUgaW50byBDLgoKSGF2aW5nIHRyaWVkIHRoaXMsIEkgY2FuJ3QuCgpVc2luZyByZWdzLT5l YXggPSAtRU5PU1lTOyBpbiBDIHJlc3VsdHMgaW4gdGhlIHVwcGVyIDMyYml0cyBvZiBVUkVHU19y YXgKc2V0IG9uIHRoZSBzdGFjaywgYW5kIG5vdGhpbmcgZWxzZSByZS1jbG9iYmVycyB0aGlzLgoK SXQgaGlnaGxpZ2h0cyBhIHNlY29uZCBidWcgcHJlc2VudCBpbiB0aGUgaHZtIHNpZGUsIGFuZCBw cm9wYWdhdGVkIHRvCnRoZSBwdiBzaWRlLgoKQ3VycmVudGx5LCBlYXggZ2V0cyB0cnVuY2F0ZWQg d2hlbiByZWFkaW5nIG91dCBvZiB0aGUgcmVnaXN0ZXJzLCBiZWZvcmUKaXQgaXMgYm91bmRzLWNo ZWNrZWQgYWdhaW5zdCBOUl9oeXBlcmNhbGxzLiAgRm9yIHRoZSBIVk0gc2lkZSwgYWxsIHRoaXMK ZG9lcyBpcyByaXNrIGFsaWFzaW5nIGlmIHVwcGVyIGJpdHMgYXJlIHNldCwgYnV0IGZvciB0aGUg UFYgc2lkZSwgaXQKd2lsbCBjYXVzZSBhIGZhaWx1cmUgZm9yIGEgY29tcGF0IGd1ZXN0IGlzc3Vp bmcgYSBoeXBlcmNhbGwgYWZ0ZXIKcHJldmlvdXNseSByZWNlaXZpbmcgYW4gZXJyb3IuCgpJIGFt IHByb3Bvc2luZyB0aGUgZm9sbG93aW5nIGNoYW5nZSB0byB0aGUgSFZNIHNpZGUgdG8gY29tcGVu c2F0ZSwgYW5kCnRvIGxlYXZlIHRoZSBhc20gYWRqdXN0bWVudCBvZiBVUkVHU19yYXggaW4gcGxh Y2UuCgp+QW5kcmV3CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9odm0uYyBiL3hlbi9h cmNoL3g4Ni9odm0vaHZtLmMKaW5kZXggZTJiYjU4YS4uNjkzMTVkMSAxMDA2NDQKLS0tIGEveGVu L2FyY2gveDg2L2h2bS9odm0uYworKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCkBAIC00MTMy LDExICs0MTMyLDExIEBAIGludCBodm1fZG9faHlwZXJjYWxsKHN0cnVjdCBjcHVfdXNlcl9yZWdz ICpyZWdzKQogICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwogICAgIHN0 cnVjdCBzZWdtZW50X3JlZ2lzdGVyIHNyZWc7CiAgICAgaW50IG1vZGUgPSBodm1fZ3Vlc3RfeDg2 X21vZGUoY3Vycik7Ci0gICAgdWludDMyX3QgZWF4ID0gcmVncy0+ZWF4OworICAgIHVuc2lnbmVk IGxvbmcgZWF4ID0gcmVncy0+ZWF4OwogCiAgICAgc3dpdGNoICggbW9kZSApCiAgICAgewoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=