From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v4 3/3] x86/ioreq server: Add HVMOP to map guest ram with p2m_ioreq_server to an ioreq server. Date: Tue, 14 Jun 2016 14:14:04 +0100 Message-ID: <5760031C.1070000@citrix.com> References: <1463648711-26595-1-git-send-email-yu.c.zhang@linux.intel.com> <1463648711-26595-4-git-send-email-yu.c.zhang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1463648711-26595-4-git-send-email-yu.c.zhang@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Yu Zhang , xen-devel@lists.xen.org Cc: Kevin Tian , Jun Nakajima , George Dunlap , Andrew Cooper , Tim Deegan , Paul.Durrant@citrix.com, zhiyuan.lv@intel.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMTkvMDUvMTYgMTA6MDUsIFl1IFpoYW5nIHdyb3RlOgo+IEEgbmV3IEhWTU9QIC0gSFZNT1Bf bWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlciwgaXMgYWRkZWQgdG8KPiBsZXQgb25lIGlvcmVx IHNlcnZlciBjbGFpbS9kaXNjbGFpbSBpdHMgcmVzcG9uc2liaWxpdHkgZm9yIHRoZQo+IGhhbmRs aW5nIG9mIGd1ZXN0IHBhZ2VzIHdpdGggcDJtIHR5cGUgcDJtX2lvcmVxX3NlcnZlci4gVXNlcnMK PiBvZiB0aGlzIEhWTU9QIGNhbiBzcGVjaWZ5IHdoaWNoIGtpbmQgb2Ygb3BlcmF0aW9uIGlzIHN1 cHBvc2VkCj4gdG8gYmUgZW11bGF0ZWQgaW4gYSBwYXJhbWV0ZXIgbmFtZWQgZmxhZ3MuIEN1cnJl bnRseSwgdGhpcyBIVk1PUAo+IG9ubHkgc3VwcG9ydCB0aGUgZW11bGF0aW9uIG9mIHdyaXRlIG9w ZXJhdGlvbnMuIEFuZCBpdCBjYW4gYmUKPiBlYXNpbHkgZXh0ZW5kZWQgdG8gc3VwcG9ydCB0aGUg ZW11bGF0aW9uIG9mIHJlYWQgb25lcyBpZiBhbgo+IGlvcmVxIHNlcnZlciBoYXMgc3VjaCByZXF1 aXJlbWVudCBpbiB0aGUgZnV0dXJlLgo+IAo+IEZvciBub3csIHdlIG9ubHkgc3VwcG9ydCBvbmUg aW9yZXEgc2VydmVyIGZvciB0aGlzIHAybSB0eXBlLCBzbwo+IG9uY2UgYW4gaW9yZXEgc2VydmVy IGhhcyBjbGFpbWVkIGl0cyBvd25lcnNoaXAsIHN1YnNlcXVlbnQgY2FsbHMKPiBvZiB0aGUgSFZN T1BfbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlciB3aWxsIGZhaWwuIFVzZXJzIGNhbiBhbHNv Cj4gZGlzY2xhaW0gdGhlIG93bmVyc2hpcCBvZiBndWVzdCByYW0gcGFnZXMgd2l0aCBwMm1faW9y ZXFfc2VydmVyLCBieQo+IHRyaWdnZXJpbmcgdGhpcyBuZXcgSFZNT1AsIHdpdGggaW9yZXEgc2Vy dmVyIGlkIHNldCB0byB0aGUgY3VycmVudAo+IG93bmVyJ3MgYW5kIGZsYWdzIHBhcmFtZXRlciBz ZXQgdG8gMC4KPiAKPiBOb3RlIGJvdGggSFZNT1BfbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZl ciBhbmQgcDJtX2lvcmVxX3NlcnZlcgo+IGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgSFZNcyB3aXRo IEhBUCBlbmFibGVkLgo+IAo+IEFsc28gbm90ZSB0aGF0IG9ubHkgYWZ0ZXIgb25lIGlvcmVxIHNl cnZlciBjbGFpbXMgaXRzIG93bmVyc2hpcAo+IG9mIHAybV9pb3JlcV9zZXJ2ZXIsIHdpbGwgdGhl IHAybSB0eXBlIGNoYW5nZSB0byBwMm1faW9yZXFfc2VydmVyCj4gYmUgYWxsb3dlZC4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+IFNp Z25lZC1vZmYtYnk6IFl1IFpoYW5nIDx5dS5jLnpoYW5nQGxpbnV4LmludGVsLmNvbT4KPiBBY2tl ZC1ieTogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+CgpMb29rcyBPSyB0byBtZToKCkFja2VkLWJ5 OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+Cgo+IC0tLQo+IENjOiBQ YXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+IENjOiBKYW4gQmV1bGljaCA8 amJldWxpY2hAc3VzZS5jb20+Cj4gQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNp dHJpeC5jb20+Cj4gQ2M6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAZXUuY2l0cml4LmNv bT4KPiBDYzogSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgo+IENjOiBLZXZp biBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KPiBDYzogVGltIERlZWdhbiA8dGltQHhlbi5v cmc+Cj4gCj4gY2hhbmdlcyBpbiB2NDoKPiAgIC0gQWNjb3JkaW5nIHRvIFBhdWwncyBhZHZpY2Us IGFkZCBjb21tZW50cyBhcm91bmQgdGhlIGRlZmluaXRpb24KPiAgICAgb2YgSFZNTUVNX2lvcmVf c2VydmVyIGluIGh2bV9vcC5oLgo+ICAgLSBBY2NvcmRpbmcgdG8gV2VpIExpdSdzIGNvbW1lbnRz LCBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgY29tbWl0Cj4gICAgIG1lc3NhZ2UuCj4gCj4gY2hh bmdlcyBpbiB2MzoKPiAgIC0gT25seSBzdXBwb3J0IHdyaXRlIGVtdWxhdGlvbiBpbiB0aGlzIHBh dGNoOwo+ICAgLSBSZW1vdmUgdGhlIGNvZGUgdG8gaGFuZGxlIHJhY2UgY29uZGl0aW9uIGluIGh2 bWVtdWxfZG9faW8oKSwKPiAgIC0gTm8gbmVlZCB0byByZXNldCB0aGUgcDJtIHR5cGUgYWZ0ZXIg YW4gaW9yZXEgc2VydmVyIGhhcyBkaXNjbGFpbWVkCj4gICAgIGl0cyBvd25lcnNoaXAgb2YgcDJt X2lvcmVxX3NlcnZlcjsKPiAgIC0gT25seSBhbGxvdyBwMm0gdHlwZSBjaGFuZ2UgdG8gcDJtX2lv cmVxX3NlcnZlciBhZnRlciBhbiBpb3JlcQo+ICAgICBzZXJ2ZXIgaGFzIGNsYWltZWQgaXRzIG93 bmVyc2hpcCBvZiBwMm1faW9yZXFfc2VydmVyOwo+ICAgLSBPbmx5IGFsbG93IHAybSB0eXBlIGNo YW5nZSB0byBwMm1faW9yZXFfc2VydmVyIGZyb20gcGFnZXMgd2l0aCB0eXBlCj4gICAgIHAybV9y YW1fcncsIGFuZCB2aWNlIHZlcnNhOwo+ICAgLSBIVk1PUF9tYXBfbWVtX3R5cGVfdG9faW9yZXFf c2VydmVyIGludGVyZmFjZSBjaGFuZ2UgLSB1c2UgdWludDE2LAo+ICAgICBpbnN0ZWFkIG9mIGVu dW0gdG8gc3BlY2lmeSB0aGUgbWVtb3J5IHR5cGU7Cj4gICAtIEZ1bmN0aW9uIHByb3RvdHlwZSBj aGFuZ2UgdG8gcDJtX2dldF9pb3JlcV9zZXJ2ZXIoKTsKPiAgIC0gQ29kaW5nIHN0eWxlIGNoYW5n ZXM7Cj4gICAtIENvbW1pdCBtZXNzYWdlIGNoYW5nZXM7Cj4gICAtIEFkZCBUaW0ncyBBY2tlZC1i eS4KPiAKPiBjaGFuZ2VzIGluIHYyOiAKPiAgIC0gT25seSBzdXBwb3J0IEhBUCBlbmFibGVkIEhW TXM7Cj4gICAtIFJlcGxhY2UgcDJtX21lbV90eXBlX2NoYW5nZWQoKSB3aXRoIHAybV9jaGFuZ2Vf ZW50cnlfdHlwZV9nbG9iYWwoKQo+ICAgICB0byByZXNldCB0aGUgcDJtIHR5cGUsIHdoZW4gYW4g aW9yZXEgc2VydmVyIHRyaWVzIHRvIGNsYWltL2Rpc2NsYWltCj4gICAgIGl0cyBvd25lcnNoaXAg b2YgcDJtX2lvcmVxX3NlcnZlcjsKPiAgIC0gQ29tbWVudHMgY2hhbmdlcy4KPiAtLS0KPiAgeGVu L2FyY2gveDg2L2h2bS9lbXVsYXRlLmMgICAgICAgfCAzMiArKysrKysrKysrKysrKysrLS0KPiAg eGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAgICAgfCA2MyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0KPiAgeGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jICAgICAgICAgfCA0 MSArKysrKysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vYXJjaC94ODYvbW0vaGFwL25lc3RlZF9o YXAuYyB8ICAyICstCj4gIHhlbi9hcmNoL3g4Ni9tbS9wMm0tZXB0LmMgICAgICAgIHwgIDcgKysr LQo+ICB4ZW4vYXJjaC94ODYvbW0vcDJtLXB0LmMgICAgICAgICB8IDIzICsrKysrKysrKy0tLS0K PiAgeGVuL2FyY2gveDg2L21tL3AybS5jICAgICAgICAgICAgfCA3MCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGku YyAgIHwgIDMgKy0KPiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW9yZXEuaCAgfCAgMiArKwo+ ICB4ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oICAgICAgICB8IDMwICsrKysrKysrKysrKysrKy0t Cj4gIHhlbi9pbmNsdWRlL3B1YmxpYy9odm0vaHZtX29wLmggIHwgMzUgKysrKysrKysrKysrKysr KysrKy0KPiAgMTEgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9u cygtKQo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYyBiL3hlbi9h cmNoL3g4Ni9odm0vZW11bGF0ZS5jCj4gaW5kZXggYjljYWM4ZS4uNDU3MTI5NCAxMDA2NDQKPiAt LS0gYS94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0v ZW11bGF0ZS5jCj4gQEAgLTEwMCw2ICsxMDAsNyBAQCBzdGF0aWMgaW50IGh2bWVtdWxfZG9faW8o Cj4gICAgICB1aW50OF90IGRpciwgYm9vbF90IGRmLCBib29sX3QgZGF0YV9pc19hZGRyLCB1aW50 cHRyX3QgZGF0YSkKPiAgewo+ICAgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owo+ICsg ICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47Cj4gICAgICBzdHJ1Y3QgaHZt X3ZjcHVfaW8gKnZpbyA9ICZjdXJyLT5hcmNoLmh2bV92Y3B1Lmh2bV9pbzsKPiAgICAgIGlvcmVx X3QgcCA9IHsKPiAgICAgICAgICAudHlwZSA9IGlzX21taW8gPyBJT1JFUV9UWVBFX0NPUFkgOiBJ T1JFUV9UWVBFX1BJTywKPiBAQCAtMTQxLDcgKzE0Miw3IEBAIHN0YXRpYyBpbnQgaHZtZW11bF9k b19pbygKPiAgICAgICAgICAgICAgIChwLmRpciAhPSBkaXIpIHx8Cj4gICAgICAgICAgICAgICAo cC5kZiAhPSBkZikgfHwKPiAgICAgICAgICAgICAgIChwLmRhdGFfaXNfcHRyICE9IGRhdGFfaXNf YWRkcikgKQo+IC0gICAgICAgICAgICBkb21haW5fY3Jhc2goY3Vyci0+ZG9tYWluKTsKPiArICAg ICAgICAgICAgZG9tYWluX2NyYXNoKGN1cnJkKTsKPiAgCj4gICAgICAgICAgaWYgKCBkYXRhX2lz X2FkZHIgKQo+ICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gQEAg LTE3OCw4ICsxNzksMzMgQEAgc3RhdGljIGludCBodm1lbXVsX2RvX2lvKAo+ICAgICAgICAgIGJy ZWFrOwo+ICAgICAgY2FzZSBYODZFTVVMX1VOSEFORExFQUJMRToKPiAgICAgIHsKPiAtICAgICAg ICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcyA9Cj4gLSAgICAgICAgICAgIGh2bV9zZWxlY3Rf aW9yZXFfc2VydmVyKGN1cnItPmRvbWFpbiwgJnApOwo+ICsgICAgICAgIHN0cnVjdCBodm1faW9y ZXFfc2VydmVyICpzOwo+ICsgICAgICAgIHAybV90eXBlX3QgcDJtdDsKPiArCj4gKyAgICAgICAg aWYgKCBpc19tbWlvICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg Z21mbiA9IHBhZGRyX3RvX3BmbihhZGRyKTsKPiArCj4gKyAgICAgICAgICAgICh2b2lkKSBnZXRf Z2ZuX3F1ZXJ5X3VubG9ja2VkKGN1cnJkLCBnbWZuLCAmcDJtdCk7Cj4gKwo+ICsgICAgICAgICAg ICBpZiAoIHAybXQgPT0gcDJtX2lvcmVxX3NlcnZlciApCj4gKyAgICAgICAgICAgIHsKPiArICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsgICAgICAgICAgICAgICAg cyA9IHAybV9nZXRfaW9yZXFfc2VydmVyKGN1cnJkLCAmZmxhZ3MpOwo+ICsKPiArICAgICAgICAg ICAgICAgIGlmICggZGlyID09IElPUkVRX1dSSVRFICYmCj4gKyAgICAgICAgICAgICAgICAgICAg ICEoZmxhZ3MgJiBQMk1fSU9SRVFfSEFORExFX1dSSVRFX0FDQ0VTUykgKQo+ICsgICAgICAgICAg ICAgICAgICAgIHMgPSBOVUxMOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGVsc2UK PiArICAgICAgICAgICAgICAgIHMgPSBodm1fc2VsZWN0X2lvcmVxX3NlcnZlcihjdXJyZCwgJnAp Owo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICBwMm10ID0gcDJtX2ludmFsaWQ7Cj4gKyAgICAgICAgICAgIHMgPSBodm1fc2VsZWN0X2lvcmVx X3NlcnZlcihjdXJyZCwgJnApOwo+ICsgICAgICAgIH0KPiAgCj4gICAgICAgICAgLyogSWYgdGhl cmUgaXMgbm8gc3VpdGFibGUgYmFja2luZyBETSwganVzdCBpZ25vcmUgYWNjZXNzZXMgKi8KPiAg ICAgICAgICBpZiAoICFzICkKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9odm0uYyBi L3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKPiBpbmRleCAzNDZkYTk3Li4yM2FiZWIyIDEwMDY0NAo+ IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2 bS5jCj4gQEAgLTQ3MTksNiArNDcxOSw0MCBAQCBzdGF0aWMgaW50IGh2bW9wX3VubWFwX2lvX3Jh bmdlX2Zyb21faW9yZXFfc2VydmVyKAo+ICAgICAgcmV0dXJuIHJjOwo+ICB9Cj4gIAo+ICtzdGF0 aWMgaW50IGh2bW9wX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXIoCj4gKyAgICBYRU5fR1VF U1RfSEFORExFX1BBUkFNKHhlbl9odm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcl90KSB1 b3ApCj4gK3sKPiArICAgIHhlbl9odm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcl90IG9w Owo+ICsgICAgc3RydWN0IGRvbWFpbiAqZDsKPiArICAgIGludCByYzsKPiArCj4gKyAgICBpZiAo IGNvcHlfZnJvbV9ndWVzdCgmb3AsIHVvcCwgMSkgKQo+ICsgICAgICAgIHJldHVybiAtRUZBVUxU Owo+ICsKPiArICAgIHJjID0gcmN1X2xvY2tfcmVtb3RlX2RvbWFpbl9ieV9pZChvcC5kb21pZCwg JmQpOwo+ICsgICAgaWYgKCByYyAhPSAwICkKPiArICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICsg ICAgcmMgPSAtRUlOVkFMOwo+ICsgICAgaWYgKCAhaXNfaHZtX2RvbWFpbihkKSApCj4gKyAgICAg ICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgLyogT25seSBzdXBwb3J0IGZvciBIQVAgZW5hYmxlZCBo dm0gKi8KPiArICAgIGlmICggIWhhcF9lbmFibGVkKGQpICkKPiArICAgICAgICBnb3RvIG91dDsK PiArCj4gKyAgICByYyA9IHhzbV9odm1faW9yZXFfc2VydmVyKFhTTV9ETV9QUklWLCBkLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVk1PUF9tYXBfbWVtX3R5cGVfdG9faW9yZXFf c2VydmVyKTsKPiArICAgIGlmICggcmMgIT0gMCApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ ICsgICAgcmMgPSBodm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcihkLCBvcC5pZCwgb3Au dHlwZSwgb3AuZmxhZ3MpOwo+ICsKPiArIG91dDoKPiArICAgIHJjdV91bmxvY2tfZG9tYWluKGQp Owo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGh2bW9wX3NldF9pb3Jl cV9zZXJ2ZXJfc3RhdGUoCj4gICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9odm1fc2V0 X2lvcmVxX3NlcnZlcl9zdGF0ZV90KSB1b3ApCj4gIHsKPiBAQCAtNTM1Miw5ICs1Mzg2LDE0IEBA IHN0YXRpYyBpbnQgaHZtb3BfZ2V0X21lbV90eXBlKAo+ICAKPiAgc3RhdGljIGJvb2xfdCBodm1f YWxsb3dfcDJtX3R5cGVfY2hhbmdlKHAybV90eXBlX3Qgb2xkLCBwMm1fdHlwZV90IG5ldykKPiAg ewo+ICsgICAgaWYgKCBuZXcgPT0gcDJtX2lvcmVxX3NlcnZlciApCj4gKyAgICAgICAgcmV0dXJu IG9sZCA9PSBwMm1fcmFtX3J3Owo+ICsKPiArICAgIGlmICggb2xkID09IHAybV9pb3JlcV9zZXJ2 ZXIgKQo+ICsgICAgICAgIHJldHVybiBuZXcgPT0gcDJtX3JhbV9ydzsKPiArCj4gICAgICBpZiAo IHAybV9pc19yYW0ob2xkKSB8fAo+IC0gICAgICAgICAocDJtX2lzX2hvbGUob2xkKSAmJiBuZXcg PT0gcDJtX21taW9fZG0pIHx8Cj4gLSAgICAgICAgIChvbGQgPT0gcDJtX2lvcmVxX3NlcnZlciAm JiBuZXcgPT0gcDJtX3JhbV9ydykgKQo+ICsgICAgICAgICAocDJtX2lzX2hvbGUob2xkKSAmJiBu ZXcgPT0gcDJtX21taW9fZG0pICkKPiAgICAgICAgICByZXR1cm4gMTsKPiAgCj4gICAgICByZXR1 cm4gMDsKPiBAQCAtNTM4OSw2ICs1NDI4LDIxIEBAIHN0YXRpYyBpbnQgaHZtb3Bfc2V0X21lbV90 eXBlKAo+ICAgICAgaWYgKCAhaXNfaHZtX2RvbWFpbihkKSApCj4gICAgICAgICAgZ290byBvdXQ7 Cj4gIAo+ICsgICAgaWYgKCBhLmh2bW1lbV90eXBlID09IEhWTU1FTV9pb3JlcV9zZXJ2ZXIgKQo+ ICsgICAgewo+ICsgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKyAgICAgICAgc3RydWN0 IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4gKwo+ICsgICAgICAgIC8qIEhWTU1FTV9pb3JlcV9zZXJ2 ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIEhBUCBlbmFibGVkIGh2bS4gKi8KPiArICAgICAgICBp ZiAoICFoYXBfZW5hYmxlZChkKSApCj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAg ICAgICAvKiBEbyBub3QgY2hhbmdlIHRvIEhWTU1FTV9pb3JlcV9zZXJ2ZXIgaWYgbm8gaW9yZXEg c2VydmVyIG1hcHBlZC4gKi8KPiArICAgICAgICBzID0gcDJtX2dldF9pb3JlcV9zZXJ2ZXIoZCwg JmZsYWdzKTsKPiArICAgICAgICBpZiAoIHMgPT0gTlVMTCApCj4gKyAgICAgICAgICAgIGdvdG8g b3V0Owo+ICsgICAgfQo+ICsKPiAgICAgIHJjID0geHNtX2h2bV9jb250cm9sKFhTTV9ETV9QUklW LCBkLCBIVk1PUF9zZXRfbWVtX3R5cGUpOwo+ICAgICAgaWYgKCByYyApCj4gICAgICAgICAgZ290 byBvdXQ7Cj4gQEAgLTU0OTAsNiArNTU0NCwxMSBAQCBsb25nIGRvX2h2bV9vcCh1bnNpZ25lZCBs b25nIG9wLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKPiAgICAgICAgICAgICAg Z3Vlc3RfaGFuZGxlX2Nhc3QoYXJnLCB4ZW5faHZtX2lvX3JhbmdlX3QpKTsKPiAgICAgICAgICBi cmVhazsKPiAgCj4gKyAgICBjYXNlIEhWTU9QX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXI6 Cj4gKyAgICAgICAgcmMgPSBodm1vcF9tYXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyKAo+ICsg ICAgICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcsIHhlbl9odm1fbWFwX21lbV90eXBlX3Rv X2lvcmVxX3NlcnZlcl90KSk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICAgICAgY2FzZSBIVk1P UF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlOgo+ICAgICAgICAgIHJjID0gaHZtb3Bfc2V0X2lvcmVx X3NlcnZlcl9zdGF0ZSgKPiAgICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnLCB4ZW5f aHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGVfdCkpOwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvaHZtL2lvcmVxLmMgYi94ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMKPiBpbmRleCAzMzNjZTE0 Li5kMjRlMTA4IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYwo+ICsrKyBi L3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYwo+IEBAIC03NTMsNiArNzUzLDggQEAgaW50IGh2bV9k ZXN0cm95X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkKQo+ICAK PiAgICAgICAgICBkb21haW5fcGF1c2UoZCk7Cj4gIAo+ICsgICAgICAgIHAybV9kZXN0cm95X2lv cmVxX3NlcnZlcihkLCBzKTsKPiArCj4gICAgICAgICAgaHZtX2lvcmVxX3NlcnZlcl9kaXNhYmxl KHMsIDApOwo+ICAKPiAgICAgICAgICBsaXN0X2RlbCgmcy0+bGlzdF9lbnRyeSk7Cj4gQEAgLTkx NCw2ICs5MTYsNDUgQEAgaW50IGh2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcihz dHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAo+ICAgICAgcmV0dXJuIHJjOwo+ICB9Cj4g IAo+ICtpbnQgaHZtX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAq ZCwgaW9zZXJ2aWRfdCBpZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQxNl90IHR5cGUsIHVpbnQzMl90IGZsYWdzKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaHZtX2lv cmVxX3NlcnZlciAqczsKPiArICAgIGludCByYzsKPiArCj4gKyAgICAvKiBGb3Igbm93LCBvbmx5 IEhWTU1FTV9pb3JlcV9zZXJ2ZXIgaXMgc3VwcG9ydGVkLiAqLwo+ICsgICAgaWYgKCB0eXBlICE9 IEhWTU1FTV9pb3JlcV9zZXJ2ZXIgKQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiAr ICAgIC8qIEZvciBub3csIG9ubHkgd3JpdGUgZW11bGF0aW9uIGlzIHN1cHBvcnRlZC4gKi8KPiAr ICAgIGlmICggZmxhZ3MgJiB+KEhWTU9QX0lPUkVRX01FTV9BQ0NFU1NfV1JJVEUpICkKPiArICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICBzcGluX2xvY2soJmQtPmFyY2guaHZtX2Rv bWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Cj4gKwo+ICsgICAgcmMgPSAtRU5PRU5UOwo+ICsgICAg bGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmQt PmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlzdCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBsaXN0X2VudHJ5ICkKPiArICAgIHsKPiArICAgICAgICBpZiAoIHMgPT0gZC0+YXJj aC5odm1fZG9tYWluLmRlZmF1bHRfaW9yZXFfc2VydmVyICkKPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gKwo+ICsgICAgICAgIGlmICggcy0+aWQgPT0gaWQgKQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgcmMgPSBwMm1fc2V0X2lvcmVxX3NlcnZlcihkLCBmbGFncywgcyk7Cj4gKyAgICAg ICAgICAgIGlmICggcmMgPT0gMCApCj4gKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19E RUJVRywgIiV1ICVzIHR5cGUgSFZNTUVNX2lvcmVxX3NlcnZlci5cbiIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICBzLT5pZCwgKGZsYWdzICE9IDApID8gIm1hcHBlZCB0byIgOiAidW5tYXBw ZWQgZnJvbSIpOwo+ICsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAg fQo+ICsKPiArICAgIHNwaW5fdW5sb2NrKCZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfc2VydmVy LmxvY2spOwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICBpbnQgaHZtX3NldF9pb3JlcV9z ZXJ2ZXJfc3RhdGUoc3RydWN0IGRvbWFpbiAqZCwgaW9zZXJ2aWRfdCBpZCwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBlbmFibGVkKQo+ICB7Cj4gZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2hhcC5jIGIveGVuL2FyY2gveDg2L21tL2hhcC9u ZXN0ZWRfaGFwLmMKPiBpbmRleCBkNDFiYjA5Li5hYTkwYTYyIDEwMDY0NAo+IC0tLSBhL3hlbi9h cmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2hhcC5jCj4gKysrIGIveGVuL2FyY2gveDg2L21tL2hhcC9u ZXN0ZWRfaGFwLmMKPiBAQCAtMTc0LDcgKzE3NCw3IEBAIG5lc3RlZGhhcF93YWxrX0wwX3AybShz dHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBwYWRkcl90IEwxX2dwYSwgcGFkZHJfdCAqTDBfZ3BhLAo+ ICAgICAgaWYgKCAqcDJtdCA9PSBwMm1fbW1pb19kaXJlY3QgKQo+ICAgICAgICAgIGdvdG8gZGly ZWN0X21taW9fb3V0Owo+ICAgICAgcmMgPSBORVNURURIVk1fUEFHRUZBVUxUX01NSU87Cj4gLSAg ICBpZiAoICpwMm10ID09IHAybV9tbWlvX2RtICkKPiArICAgIGlmICggKnAybXQgPT0gcDJtX21t aW9fZG0gfHwgKnAybXQgPT0gcDJtX2lvcmVxX3NlcnZlciApCj4gICAgICAgICAgZ290byBvdXQ7 Cj4gIAo+ICAgICAgcmMgPSBORVNURURIVk1fUEFHRUZBVUxUX0wwX0VSUk9SOwo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLWVwdC5jIGIveGVuL2FyY2gveDg2L21tL3AybS1lcHQu Ywo+IGluZGV4IGE0NWE1NzMuLmM1ZDEzMDUgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L21t L3AybS1lcHQuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tZXB0LmMKPiBAQCAtMTMyLDYg KzEzMiwxMiBAQCBzdGF0aWMgdm9pZCBlcHRfcDJtX3R5cGVfdG9fZmxhZ3Moc3RydWN0IHAybV9k b21haW4gKnAybSwgZXB0X2VudHJ5X3QgKmVudHJ5LAo+ICAgICAgICAgICAgICBlbnRyeS0+ciA9 IGVudHJ5LT53ID0gZW50cnktPnggPSAxOwo+ICAgICAgICAgICAgICBlbnRyeS0+YSA9IGVudHJ5 LT5kID0gISFjcHVfaGFzX3ZteF9lcHRfYWQ7Cj4gICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIGNhc2UgcDJtX2lvcmVxX3NlcnZlcjoKPiArICAgICAgICAgICAgZW50cnktPnIgPSBlbnRy eS0+eCA9IDE7Cj4gKyAgICAgICAgICAgIGVudHJ5LT53ID0gIShwMm0tPmlvcmVxLmZsYWdzICYg UDJNX0lPUkVRX0hBTkRMRV9XUklURV9BQ0NFU1MpOwo+ICsgICAgICAgICAgICBlbnRyeS0+YSA9 ICEhY3B1X2hhc192bXhfZXB0X2FkOwo+ICsgICAgICAgICAgICBlbnRyeS0+ZCA9IGVudHJ5LT53 ICYmIGNwdV9oYXNfdm14X2VwdF9hZDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICAg Y2FzZSBwMm1fbW1pb19kaXJlY3Q6Cj4gICAgICAgICAgICAgIGVudHJ5LT5yID0gZW50cnktPngg PSAxOwo+ICAgICAgICAgICAgICBlbnRyeS0+dyA9ICFyYW5nZXNldF9jb250YWluc19zaW5nbGV0 b24obW1pb19yb19yYW5nZXMsCj4gQEAgLTE3MSw3ICsxNzcsNiBAQCBzdGF0aWMgdm9pZCBlcHRf cDJtX3R5cGVfdG9fZmxhZ3Moc3RydWN0IHAybV9kb21haW4gKnAybSwgZXB0X2VudHJ5X3QgKmVu dHJ5LAo+ICAgICAgICAgICAgICBlbnRyeS0+YSA9IGVudHJ5LT5kID0gISFjcHVfaGFzX3ZteF9l cHRfYWQ7Cj4gICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgIGNhc2UgcDJtX2dyYW50X21h cF9ybzoKPiAtICAgICAgICBjYXNlIHAybV9pb3JlcV9zZXJ2ZXI6Cj4gICAgICAgICAgICAgIGVu dHJ5LT5yID0gMTsKPiAgICAgICAgICAgICAgZW50cnktPncgPSBlbnRyeS0+eCA9IDA7Cj4gICAg ICAgICAgICAgIGVudHJ5LT5hID0gISFjcHVfaGFzX3ZteF9lcHRfYWQ7Cj4gZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9tbS9wMm0tcHQuYyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tcHQuYwo+IGlu ZGV4IGVhYmQyZTMuLmJmNzVhZmEgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS1w dC5jCj4gKysrIGIveGVuL2FyY2gveDg2L21tL3AybS1wdC5jCj4gQEAgLTcyLDcgKzcyLDkgQEAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGd0W10gPSB7Cj4gICAgICBQR1RfbDNfcGFnZV90 YWJsZQo+ICB9Owo+ICAKPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgcDJtX3R5cGVfdG9fZmxhZ3Mo cDJtX3R5cGVfdCB0LCBtZm5fdCBtZm4sCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHAybV90eXBl X3RvX2ZsYWdzKGNvbnN0IHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3QgdCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWZuX3QgbWZuLAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGV2ZWwpCj4gIHsKPiAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gQEAgLTk0LDggKzk2LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25n IHAybV90eXBlX3RvX2ZsYWdzKHAybV90eXBlX3QgdCwgbWZuX3QgbWZuLAo+ICAgICAgZGVmYXVs dDoKPiAgICAgICAgICByZXR1cm4gZmxhZ3MgfCBfUEFHRV9OWF9CSVQ7Cj4gICAgICBjYXNlIHAy bV9ncmFudF9tYXBfcm86Cj4gLSAgICBjYXNlIHAybV9pb3JlcV9zZXJ2ZXI6Cj4gICAgICAgICAg cmV0dXJuIGZsYWdzIHwgUDJNX0JBU0VfRkxBR1MgfCBfUEFHRV9OWF9CSVQ7Cj4gKyAgICBjYXNl IHAybV9pb3JlcV9zZXJ2ZXI6Cj4gKyAgICB7Cj4gKyAgICAgICAgZmxhZ3MgfD0gUDJNX0JBU0Vf RkxBR1MgfCBfUEFHRV9SVzsKPiArCj4gKyAgICAgICAgaWYgKCBwMm0tPmlvcmVxLmZsYWdzICYg UDJNX0lPUkVRX0hBTkRMRV9XUklURV9BQ0NFU1MgKQo+ICsgICAgICAgICAgICByZXR1cm4gZmxh Z3MgJiB+X1BBR0VfUlc7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICByZXR1cm4gZmxh Z3M7Cj4gKyAgICB9Cj4gICAgICBjYXNlIHAybV9yYW1fcm86Cj4gICAgICBjYXNlIHAybV9yYW1f bG9nZGlydHk6Cj4gICAgICBjYXNlIHAybV9yYW1fc2hhcmVkOgo+IEBAIC00NDIsNyArNDUyLDgg QEAgc3RhdGljIGludCBkb19yZWNhbGMoc3RydWN0IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQg bG9uZyBnZm4pCj4gICAgICAgICAgICAgIHAybV90eXBlX3QgcDJtdCA9IHAybV9pc19sb2dkaXJ0 eV9yYW5nZShwMm0sIGdmbiAmIG1hc2ssIGdmbiB8IH5tYXNrKQo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IHAybV9yYW1fbG9nZGlydHkgOiBwMm1fcmFtX3J3Owo+ICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIG1mbiA9IGwxZV9nZXRfcGZuKGUpOwo+IC0gICAgICAgICAgICB1 bnNpZ25lZCBsb25nIGZsYWdzID0gcDJtX3R5cGVfdG9fZmxhZ3MocDJtdCwgX21mbihtZm4pLCBs ZXZlbCk7Cj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBwMm1fdHlwZV90b19m bGFncyhwMm0sIHAybXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfbWZuKG1mbiksIGxldmVsKTsKPiAgCj4gICAgICAgICAgICAgIGlmICgg bGV2ZWwgKQo+ICAgICAgICAgICAgICB7Cj4gQEAgLTU3OSw3ICs1OTAsNyBAQCBwMm1fcHRfc2V0 X2VudHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sIHVuc2lnbmVkIGxvbmcgZ2ZuLCBtZm5fdCBt Zm4sCj4gICAgICAgICAgQVNTRVJUKCFtZm5fdmFsaWQobWZuKSB8fCBwMm10ICE9IHAybV9tbWlv X2RpcmVjdCk7Cj4gICAgICAgICAgbDNlX2NvbnRlbnQgPSBtZm5fdmFsaWQobWZuKSB8fCBwMm1f YWxsb3dzX2ludmFsaWRfbWZuKHAybXQpCj4gICAgICAgICAgICAgID8gbDNlX2Zyb21fcGZuKG1m bl94KG1mbiksCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3RvX2ZsYWdz KHAybXQsIG1mbiwgMikgfCBfUEFHRV9QU0UpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHAybV90eXBlX3RvX2ZsYWdzKHAybSwgcDJtdCwgbWZuLCAyKSB8IF9QQUdFX1BTRSkKPiAgICAg ICAgICAgICAgOiBsM2VfZW1wdHkoKTsKPiAgICAgICAgICBlbnRyeV9jb250ZW50LmwxID0gbDNl X2NvbnRlbnQubDM7Cj4gIAo+IEBAIC02MTUsNyArNjI2LDcgQEAgcDJtX3B0X3NldF9lbnRyeShz dHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCB1bnNpZ25lZCBsb25nIGdmbiwgbWZuX3QgbWZuLAo+ICAK PiAgICAgICAgICBpZiAoIG1mbl92YWxpZChtZm4pIHx8IHAybV9hbGxvd3NfaW52YWxpZF9tZm4o cDJtdCkgKQo+ICAgICAgICAgICAgICBlbnRyeV9jb250ZW50ID0gcDJtX2wxZV9mcm9tX3Bmbiht Zm5feChtZm4pLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwMm1fdHlwZV90b19mbGFncyhwMm10LCBtZm4sIDApKTsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwMm1fdHlwZV90b19mbGFncyhwMm0sIHAybXQsIG1mbiwg MCkpOwo+ICAgICAgICAgIGVsc2UKPiAgICAgICAgICAgICAgZW50cnlfY29udGVudCA9IGwxZV9l bXB0eSgpOwo+ICAKPiBAQCAtNjUxLDcgKzY2Miw3IEBAIHAybV9wdF9zZXRfZW50cnkoc3RydWN0 IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbiwKPiAgICAgICAg ICBBU1NFUlQoIW1mbl92YWxpZChtZm4pIHx8IHAybXQgIT0gcDJtX21taW9fZGlyZWN0KTsKPiAg ICAgICAgICBpZiAoIG1mbl92YWxpZChtZm4pIHx8IHAybV9hbGxvd3NfaW52YWxpZF9tZm4ocDJt dCkgKQo+ICAgICAgICAgICAgICBsMmVfY29udGVudCA9IGwyZV9mcm9tX3BmbihtZm5feChtZm4p LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fdHlwZV90b19m bGFncyhwMm10LCBtZm4sIDEpIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcDJtX3R5cGVfdG9fZmxhZ3MocDJtLCBwMm10LCBtZm4sIDEpIHwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfUFNFKTsKPiAgICAgICAgICBlbHNl Cj4gICAgICAgICAgICAgIGwyZV9jb250ZW50ID0gbDJlX2VtcHR5KCk7Cj4gZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9tbS9wMm0uYyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+IGluZGV4IDli MTk3NjkuLjU5YWZhMmMgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS5jCj4gKysr IGIveGVuL2FyY2gveDg2L21tL3AybS5jCj4gQEAgLTgzLDYgKzgzLDggQEAgc3RhdGljIGludCBw Mm1faW5pdGlhbGlzZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtKQo+ ICAgICAgZWxzZQo+ICAgICAgICAgIHAybV9wdF9pbml0KHAybSk7Cj4gIAo+ICsgICAgc3Bpbl9s b2NrX2luaXQoJnAybS0+aW9yZXEubG9jayk7Cj4gKwo+ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+ ICAKPiBAQCAtMjg5LDYgKzI5MSw3NCBAQCB2b2lkIHAybV9tZW1vcnlfdHlwZV9jaGFuZ2VkKHN0 cnVjdCBkb21haW4gKmQpCj4gICAgICB9Cj4gIH0KPiAgCj4gK2ludCBwMm1fc2V0X2lvcmVxX3Nl cnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFncywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBodm1faW9y ZXFfc2VydmVyICpzKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtID0gcDJtX2dl dF9ob3N0cDJtKGQpOwo+ICsgICAgaW50IHJjOwo+ICsKPiArICAgIHNwaW5fbG9jaygmcDJtLT5p b3JlcS5sb2NrKTsKPiArCj4gKyAgICBpZiAoIGZsYWdzID09IDAgKQo+ICsgICAgewo+ICsgICAg ICAgIHJjID0gLUVJTlZBTDsKPiArICAgICAgICBpZiAoIHAybS0+aW9yZXEuc2VydmVyICE9IHMg KQo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgLyogVW5tYXAgaW9yZXEg c2VydmVyIGZyb20gcDJtIHR5cGUgYnkgcGFzc2luZyBmbGFncyB3aXRoIDAuICovCj4gKyAgICAg ICAgcDJtLT5pb3JlcS5zZXJ2ZXIgPSBOVUxMOwo+ICsgICAgICAgIHAybS0+aW9yZXEuZmxhZ3Mg PSAwOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAgIHJjID0gLUVCVVNZ Owo+ICsgICAgICAgIGlmICggcDJtLT5pb3JlcS5zZXJ2ZXIgIT0gTlVMTCApCj4gKyAgICAgICAg ICAgIGdvdG8gb3V0Owo+ICsKPiArICAgICAgICBwMm0tPmlvcmVxLnNlcnZlciA9IHM7Cj4gKyAg ICAgICAgcDJtLT5pb3JlcS5mbGFncyA9IGZsYWdzOwo+ICsgICAgfQo+ICsKPiArICAgIHJjID0g MDsKPiArCj4gKyBvdXQ6Cj4gKyAgICBzcGluX3VubG9jaygmcDJtLT5pb3JlcS5sb2NrKTsKPiAr Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0cnVjdCBodm1faW9yZXFfc2VydmVyICpw Mm1fZ2V0X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCj4gK3sK PiArICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSBwMm1fZ2V0X2hvc3RwMm0oZCk7Cj4gKyAg ICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsKPiArCj4gKyAgICBzcGluX2xvY2soJnAybS0+ aW9yZXEubG9jayk7Cj4gKwo+ICsgICAgcyA9IHAybS0+aW9yZXEuc2VydmVyOwo+ICsgICAgKmZs YWdzID0gcDJtLT5pb3JlcS5mbGFnczsKPiArCj4gKyAgICBzcGluX3VubG9jaygmcDJtLT5pb3Jl cS5sb2NrKTsKPiArICAgIHJldHVybiBzOwo+ICt9Cj4gKwo+ICt2b2lkIHAybV9kZXN0cm95X2lv cmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcykKPiArewo+ICsgICAgc3RydWN0IHAybV9k b21haW4gKnAybSA9IHAybV9nZXRfaG9zdHAybShkKTsKPiArCj4gKyAgICBzcGluX2xvY2soJnAy bS0+aW9yZXEubG9jayk7Cj4gKwo+ICsgICAgaWYgKCBwMm0tPmlvcmVxLnNlcnZlciA9PSBzICkK PiArICAgIHsKPiArICAgICAgICBwMm0tPmlvcmVxLnNlcnZlciA9IE5VTEw7Cj4gKyAgICAgICAg cDJtLT5pb3JlcS5mbGFncyA9IDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3Bpbl91bmxvY2soJnAy bS0+aW9yZXEubG9jayk7Cj4gK30KPiArCj4gIHZvaWQgcDJtX2VuYWJsZV9oYXJkd2FyZV9sb2df ZGlydHkoc3RydWN0IGRvbWFpbiAqZCkKPiAgewo+ICAgICAgc3RydWN0IHAybV9kb21haW4gKnAy bSA9IHAybV9nZXRfaG9zdHAybShkKTsKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL3No YWRvdy9tdWx0aS5jIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jCj4gaW5kZXggYjMy MjI5My4uYWU4NDVkMiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRp LmMKPiArKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMKPiBAQCAtMzIyNSw4ICsz MjI1LDcgQEAgc3RhdGljIGludCBzaF9wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICp2LAo+ICAgICAg fQo+ICAKPiAgICAgIC8qIE5lZWQgdG8gaGFuZCBvZmYgZGV2aWNlLW1vZGVsIE1NSU8gdG8gdGhl IGRldmljZSBtb2RlbCAqLwo+IC0gICAgaWYgKCBwMm10ID09IHAybV9tbWlvX2RtCj4gLSAgICAg ICAgIHx8IChwMm10ID09IHAybV9pb3JlcV9zZXJ2ZXIgJiYgZnQgPT0gZnRfZGVtYW5kX3dyaXRl KSApCj4gKyAgICBpZiAoIHAybXQgPT0gcDJtX21taW9fZG0gKQo+ICAgICAgewo+ICAgICAgICAg IGdwYSA9IGd1ZXN0X3dhbGtfdG9fZ3BhKCZndyk7Cj4gICAgICAgICAgZ290byBtbWlvOwo+IGRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pb3JlcS5oIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni9odm0vaW9yZXEuaAo+IGluZGV4IGZiZjJjNzQuLjM0MGFlM2UgMTAwNjQ0Cj4gLS0t IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW9yZXEuaAo+ICsrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvaHZtL2lvcmVxLmgKPiBAQCAtMzcsNiArMzcsOCBAQCBpbnQgaHZtX21hcF9pb19yYW5n ZV90b19pb3JlcV9zZXJ2ZXIoc3RydWN0IGRvbWFpbiAqZCwgaW9zZXJ2aWRfdCBpZCwKPiAgaW50 IGh2bV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBp b3NlcnZpZF90IGlkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IHN0YXJ0LAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGVuZCk7Cj4gK2ludCBodm1fbWFwX21lbV90eXBl X3RvX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBpb3NlcnZpZF90IGlkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgdHlwZSwgdWludDMyX3Qg ZmxhZ3MpOwo+ICBpbnQgaHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoc3RydWN0IGRvbWFpbiAq ZCwgaW9zZXJ2aWRfdCBpZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xf dCBlbmFibGVkKTsKPiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcDJtLmgg Yi94ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oCj4gaW5kZXggZjNlODdkNi4uM2FhMGRkNyAxMDA2 NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oCj4gKysrIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni9wMm0uaAo+IEBAIC04OSw3ICs4OSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IHAy bV9xdWVyeV90Owo+ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcDJtX3RvX21hc2socDJtX3Jh bV9wYWdpbmdfb3V0KSAgICAgIFwKPiAgICAgICAgICAgICAgICAgICAgICAgICB8IHAybV90b19t YXNrKHAybV9yYW1fcGFnZWQpICAgICAgICAgICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAg fCBwMm1fdG9fbWFzayhwMm1fcmFtX3BhZ2luZ19pbikgICAgICAgXAo+IC0gICAgICAgICAgICAg ICAgICAgICAgIHwgcDJtX3RvX21hc2socDJtX3JhbV9zaGFyZWQpKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHwgcDJtX3RvX21hc2socDJtX3JhbV9zaGFyZWQpICAgICAgICAgIFwKPiArICAg ICAgICAgICAgICAgICAgICAgICB8IHAybV90b19tYXNrKHAybV9pb3JlcV9zZXJ2ZXIpKQo+ICAK PiAgLyogVHlwZXMgdGhhdCByZXByZXNlbnQgYSBwaHlzbWFwIGhvbGUgdGhhdCBpcyBvayB0byBy ZXBsYWNlIHdpdGggYSBzaGFyZWQKPiAgICogZW50cnkgKi8KPiBAQCAtMTExLDggKzExMiw3IEBA IHR5cGVkZWYgdW5zaWduZWQgaW50IHAybV9xdWVyeV90Owo+ICAjZGVmaW5lIFAyTV9ST19UWVBF UyAocDJtX3RvX21hc2socDJtX3JhbV9sb2dkaXJ0eSkgICAgIFwKPiAgICAgICAgICAgICAgICAg ICAgICAgIHwgcDJtX3RvX21hc2socDJtX3JhbV9ybykgICAgICAgICBcCj4gICAgICAgICAgICAg ICAgICAgICAgICB8IHAybV90b19tYXNrKHAybV9ncmFudF9tYXBfcm8pICAgXAo+IC0gICAgICAg ICAgICAgICAgICAgICAgfCBwMm1fdG9fbWFzayhwMm1fcmFtX3NoYXJlZCkgICAgIFwKPiAtICAg ICAgICAgICAgICAgICAgICAgIHwgcDJtX3RvX21hc2socDJtX2lvcmVxX3NlcnZlcikpCj4gKyAg ICAgICAgICAgICAgICAgICAgICB8IHAybV90b19tYXNrKHAybV9yYW1fc2hhcmVkKSkKPiAgCj4g IC8qIFdyaXRlLWRpc2NhcmQgdHlwZXMsIHdoaWNoIHNob3VsZCBkaXNjYXJkIHRoZSB3cml0ZSBv cGVyYXRpb25zICovCj4gICNkZWZpbmUgUDJNX0RJU0NBUkRfV1JJVEVfVFlQRVMgKHAybV90b19t YXNrKHAybV9yYW1fcm8pICAgICBcCj4gQEAgLTMzNiw2ICszMzYsMjQgQEAgc3RydWN0IHAybV9k b21haW4gewo+ICAgICAgICAgIHN0cnVjdCBlcHRfZGF0YSBlcHQ7Cj4gICAgICAgICAgLyogTlBU LWVxdWl2YWxlbnQgc3RydWN0dXJlIGNvdWxkIGJlIGFkZGVkIGhlcmUuICovCj4gICAgICB9Owo+ ICsKPiArICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwo+ICsgICAgICAg IC8qCj4gKyAgICAgICAgICogaW9yZXEgc2VydmVyIHdobydzIHJlc3BvbnNpYmxlIGZvciB0aGUg ZW11bGF0aW9uIG9mCj4gKyAgICAgICAgICogZ2ZucyB3aXRoIHNwZWNpZmljIHAybSB0eXBlKGZv ciBub3csIHAybV9pb3JlcV9zZXJ2ZXIpLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHN0cnVj dCBodm1faW9yZXFfc2VydmVyICpzZXJ2ZXI7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBm bGFncyBzcGVjaWZpZXMgd2hldGhlciByZWFkLCB3cml0ZSBvciBib3RoIG9wZXJhdGlvbnMKPiAr ICAgICAgICAgKiBhcmUgdG8gYmUgZW11bGF0ZWQgYnkgYW4gaW9yZXEgc2VydmVyLgo+ICsgICAg ICAgICAqLwo+ICsgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKPiArCj4gKyNkZWZpbmUgUDJN X0lPUkVRX0hBTkRMRV9XUklURV9BQ0NFU1MgSFZNT1BfSU9SRVFfTUVNX0FDQ0VTU19XUklURQo+ ICsjZGVmaW5lIFAyTV9JT1JFUV9IQU5ETEVfUkVBRF9BQ0NFU1MgIEhWTU9QX0lPUkVRX01FTV9B Q0NFU1NfUkVBRAo+ICsKPiArICAgIH0gaW9yZXE7Cj4gIH07Cj4gIAo+ICAvKiBnZXQgaG9zdCBw Mm0gdGFibGUgKi8KPiBAQCAtODQzLDYgKzg2MSwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBwMm1fZ2V0X2lvbW11X2ZsYWdzKHAybV90eXBlX3QgcDJtdCkKPiAgICAgIHJldHVybiBm bGFnczsKPiAgfQo+ICAKPiAraW50IHAybV9zZXRfaW9yZXFfc2VydmVyKHN0cnVjdCBkb21haW4g KmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaHZtX2lvcmVxX3NlcnZlciAqcyk7Cj4gK3N0cnVjdCBodm1faW9yZXFfc2VydmVyICpwMm1f Z2V0X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpOwo+ICt2b2lk IHAybV9kZXN0cm95X2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgaHZtX2lv cmVxX3NlcnZlciAqcyk7Cj4gKwo+ICAjZW5kaWYgLyogX1hFTl9QMk1fSCAqLwo+ICAKPiAgLyoK PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2h2bS9odm1fb3AuaCBiL3hlbi9pbmNs dWRlL3B1YmxpYy9odm0vaHZtX29wLmgKPiBpbmRleCBiM2U0NWNmLi4yMmMxNWE3IDEwMDY0NAo+ IC0tLSBhL3hlbi9pbmNsdWRlL3B1YmxpYy9odm0vaHZtX29wLmgKPiArKysgYi94ZW4vaW5jbHVk ZS9wdWJsaWMvaHZtL2h2bV9vcC5oCj4gQEAgLTg5LDcgKzg5LDkgQEAgdHlwZWRlZiBlbnVtIHsK PiAgICAgIEhWTU1FTV91bnVzZWQsICAgICAgICAgICAgIC8qIFBsYWNlaG9sZGVyOyBzZXR0aW5n IG1lbW9yeSB0byB0aGlzIHR5cGUKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdpbGwgZmFpbCBmb3IgY29kZSBhZnRlciA0LjcuMCAqLwo+ICAjZW5kaWYKPiAtICAgIEhWTU1F TV9pb3JlcV9zZXJ2ZXIKPiArICAgIEhWTU1FTV9pb3JlcV9zZXJ2ZXIgICAgICAgIC8qIE1lbW9y eSB0eXBlIGNsYWltZWQgYnkgYW4gaW9yZXEgc2VydmVyOyB0eXBlCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoaXMgdmFsdWUgYXJlIG9ubHkgYWxsb3dl ZCBhZnRlcgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW9yZXEgc2Vy dmVyIGhhcyBjbGFpbWVkIGl0cyBvd25lcnNoaXAgKi8KPiAgfSBodm1tZW1fdHlwZV90Owo+ICAK PiAgLyogRm9sbG93aW5nIHRvb2xzLW9ubHkgaW50ZXJmYWNlcyBtYXkgY2hhbmdlIGluIGZ1dHVy ZS4gKi8KPiBAQCAtMzgzLDYgKzM4NSwzNyBAQCBzdHJ1Y3QgeGVuX2h2bV9zZXRfaW9yZXFfc2Vy dmVyX3N0YXRlIHsKPiAgdHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9zZXRfaW9yZXFfc2VydmVyX3N0 YXRlIHhlbl9odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZV90Owo+ICBERUZJTkVfWEVOX0dVRVNU X0hBTkRMRSh4ZW5faHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGVfdCk7Cj4gIAo+ICsvKgo+ICsg KiBIVk1PUF9tYXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyIDogbWFwIG9yIHVubWFwIHRoZSBJ T1JFUSBTZXJ2ZXIgPGlkPgo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG8gc3BlY2lmaWMgbWVtcm95IHR5cGUgPHR5cGU+Cj4gKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3Igc3BlY2lmaWMgYWNjZXNzZXMgPGZsYWdzPgo+ICsgKgo+ ICsgKiBGb3Igbm93LCBmbGFncyBvbmx5IGFjY2VwdCB0aGUgdmFsdWUgb2YgSFZNT1BfSU9SRVFf TUVNX0FDQ0VTU19XUklURSwKPiArICogd2hpY2ggbWVhbnMgb25seSB3cml0ZSBvcGVyYXRpb25z IGFyZSB0byBiZSBmb3J3YXJkZWQgdG8gYW4gaW9yZXEgc2VydmVyLgo+ICsgKiBTdXBwb3J0IGZv ciB0aGUgZW11bGF0aW9uIG9mIHJlYWQgb3BlcmF0aW9ucyBjYW4gYmUgYWRkZWQgd2hlbiBhbiBp b3JlcQo+ICsgKiBzZXJ2ZXIgaGFzIHN1Y2ggcmVxdWlyZW1lbnQgaW4gZnV0dXJlLgo+ICsgKi8K PiArI2RlZmluZSBIVk1PUF9tYXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyIDI2Cj4gK3N0cnVj dCB4ZW5faHZtX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXIgewo+ICsgICAgZG9taWRfdCBk b21pZDsgICAgICAvKiBJTiAtIGRvbWFpbiB0byBiZSBzZXJ2aWNlZCAqLwo+ICsgICAgaW9zZXJ2 aWRfdCBpZDsgICAgICAvKiBJTiAtIGlvcmVxIHNlcnZlciBpZCAqLwo+ICsgICAgdWludDE2X3Qg dHlwZTsgICAgICAvKiBJTiAtIG1lbW9yeSB0eXBlICovCj4gKyAgICB1aW50MTZfdCBwYWQ7Cj4g KyAgICB1aW50MzJfdCBmbGFnczsgICAgIC8qIElOIC0gdHlwZXMgb2YgYWNjZXNzZXMgdG8gYmUg Zm9yd2FyZGVkIHRvIHRoZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlcSBzZXJ2 ZXIuIGZsYWdzIHdpdGggMCBtZWFucyB0byB1bm1hcCB0aGUKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW9yZXEgc2VydmVyICovCj4gKyNkZWZpbmUgX0hWTU9QX0lPUkVRX01FTV9BQ0NF U1NfUkVBRCAwCj4gKyNkZWZpbmUgSFZNT1BfSU9SRVFfTUVNX0FDQ0VTU19SRUFEIFwKPiArICAg ICgxdSA8PCBfSFZNT1BfSU9SRVFfTUVNX0FDQ0VTU19SRUFEKQo+ICsKPiArI2RlZmluZSBfSFZN T1BfSU9SRVFfTUVNX0FDQ0VTU19XUklURSAxCj4gKyNkZWZpbmUgSFZNT1BfSU9SRVFfTUVNX0FD Q0VTU19XUklURSBcCj4gKyAgICAoMXUgPDwgX0hWTU9QX0lPUkVRX01FTV9BQ0NFU1NfV1JJVEUp Cj4gK307Cj4gK3R5cGVkZWYgc3RydWN0IHhlbl9odm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3Nl cnZlcgo+ICsgICAgeGVuX2h2bV9tYXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyX3Q7Cj4gK0RF RklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9odm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZl cl90KTsKPiArCj4gICNlbmRpZiAvKiBkZWZpbmVkKF9fWEVOX18pIHx8IGRlZmluZWQoX19YRU5f VE9PTFNfXykgKi8KPiAgCj4gICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2 XzY0X18pCj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK