From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/13] drm/i915: Allow a context to define its set of engines Date: Fri, 8 Mar 2019 16:27:22 +0000 Message-ID: References: <20190308141244.16837-1-chris@chris-wilson.co.uk> <20190308141244.16837-9-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 26AF86E3F1 for ; Fri, 8 Mar 2019 16:27:25 +0000 (UTC) In-Reply-To: <20190308141244.16837-9-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzAzLzIwMTkgMTQ6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPdmVyIHRoZSBsYXN0 IGZldyB5ZWFycywgd2UgaGF2ZSBkZWJhdGVkIGhvdyB0byBleHRlbmQgdGhlIHVzZXIgQVBJIHRv Cj4gc3VwcG9ydCBhbiBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIG9mIGVuZ2luZXMsIHRoYXQgbWF5 IGJlIHNwYXJzZSBhbmQKPiBldmVuIGJlIGhldGVyb2dlbmVvdXMgd2l0aGluIGEgY2xhc3MgKG5v dCBhbGwgdmlkZW8gZGVjb2RlcnMgY3JlYXRlZAo+IGVxdWFsKS4gV2Ugc2V0dGxlZCBvbiB1c2lu ZyAoY2xhc3MsIGluc3RhbmNlKSB0dXBsZXMgdG8gaWRlbnRpZnkgYQo+IHNwZWNpZmljIGVuZ2lu ZSwgd2l0aCBhbiBBUEkgZm9yIHRoZSB1c2VyIHRvIGNvbnN0cnVjdCBhIG1hcCBvZiBlbmdpbmVz Cj4gdG8gY2FwYWJpbGl0aWVzLiBJbnRvIHRoaXMgcGljdHVyZSwgd2UgdGhlbiBhZGQgYSBjaGFs bGVuZ2Ugb2YgdmlydHVhbAo+IGVuZ2luZXM7IG9uZSB1c2VyIGVuZ2luZSB0aGF0IG1hcHMgYmVo aW5kIHRoZSBzY2VuZXMgdG8gYW55IG51bWJlciBvZgo+IHBoeXNpY2FsIGVuZ2luZXMuIFRvIGtl ZXAgaXQgZ2VuZXJhbCwgd2Ugd2FudCB0aGUgdXNlciB0byBoYXZlIGZ1bGwKPiBjb250cm9sIG92 ZXIgdGhhdCBtYXBwaW5nLiBUbyB0aGF0IGVuZCwgd2UgYWxsb3cgdGhlIHVzZXIgdG8gY29uc3Ry YWluIGEKPiBjb250ZXh0IHRvIGRlZmluZSB0aGUgc2V0IG9mIGVuZ2luZXMgdGhhdCBpdCBjYW4g YWNjZXNzLCBvcmRlciBmdWxseQo+IGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIgdmlhIChjbGFzcywg aW5zdGFuY2UpLiBXaXRoIHN1Y2ggcHJlY2lzZSBjb250cm9sCj4gaW4gY29udGV4dCBzZXR1cCwg d2UgY2FuIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgZXhlY2J1ZiB1QUJJIG9mCj4gc3Bl Y2lmeWluZyBhIHNpbmdsZSBpbmRleDsgb25seSBub3cgaXQgZG9lc24ndCBhdXRvbWFnaWNhbGx5 IG1hcCBvbnRvCj4gdGhlIGVuZ2luZXMsIGl0IHVzZXMgdGhlIHVzZXIgZGVmaW5lZCBlbmdpbmUg bWFwIGZyb20gdGhlIGNvbnRleHQuCj4gCj4gVGhlIEk5MTVfRVhFQ19ERUZBVUxUIHNsb3QgaXMg bGVmdCBlbXB0eSwgYW5kIGludmFsaWQgZm9yIHVzZSBieQo+IGV4ZWNidWYuIEl0J3MgdXNlIHdp bGwgYmUgcmV2ZWFsZWQgaW4gdGhlIG5leHQgcGF0Y2guCj4gCj4gdjI6IEZpeHVwIGZyZWVpbmcg b2YgbG9jYWwgb24gc3VjY2VzcyBvZiBnZXRfZW5naW5lcygpCj4gCj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgICAgICAgfCAyMDQgKysrKysrKysrKysrKysrKystCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0X3R5cGVzLmggfCAgIDQgKwo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgIHwgIDIyICst Cj4gICBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgICAgICAgfCAgNDIg KysrLQo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAyNTkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDJj ZmM2OGI2Njk0NC4uODZkOWJlYTZmMjc1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYwo+IEBAIC0xMDEsNiArMTAxLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9n bG9iYWxfZ2VtX2NvbnRleHQgewo+ICAgCXN0cnVjdCBrbWVtX2NhY2hlICpzbGFiX2x1dHM7Cj4g ICB9IGdsb2JhbDsKPiAgIAo+ICtzdGF0aWMgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4gK2xv b2t1cF91c2VyX2VuZ2luZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCSAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MsIHUxNiBjbGFzcywgdTE2IGluc3RhbmNlKQo+ICsjZGVmaW5lIExP T0tVUF9VU0VSX0lOREVYIEJJVCgwKQo+ICt7Cj4gKwlpZiAoZmxhZ3MgJiBMT09LVVBfVVNFUl9J TkRFWCkgewo+ICsJCWlmIChpbnN0YW5jZSA+PSBjdHgtPm5lbmdpbmUpCj4gKwkJCXJldHVybiBO VUxMOwo+ICsKPiArCQlyZXR1cm4gY3R4LT5lbmdpbmVzW2luc3RhbmNlXTsKPiArCX0KPiArCj4g KwlyZXR1cm4gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGN0eC0+aTkxNSwgY2xhc3MsIGluc3Rh bmNlKTsKPiArfQo+ICsKPiAgIHN0cnVjdCBpOTE1X2x1dF9oYW5kbGUgKmk5MTVfbHV0X2hhbmRs ZV9hbGxvYyh2b2lkKQo+ICAgewo+ICAgCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGdsb2JhbC5z bGFiX2x1dHMsIEdGUF9LRVJORUwpOwo+IEBAIC0yMzQsNiArMjQ5LDggQEAgc3RhdGljIHZvaWQg aTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJ cmVsZWFzZV9od19pZChjdHgpOwo+ICAgCWk5MTVfcHBndHRfcHV0KGN0eC0+cHBndHQpOwo+ICAg Cj4gKwlrZnJlZShjdHgtPmVuZ2luZXMpOwo+ICsKPiAgIAlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9l YWNoX2VudHJ5X3NhZmUoaXQsIG4sICZjdHgtPmh3X2NvbnRleHRzLCBub2RlKQo+ICAgCQlpdC0+ b3BzLT5kZXN0cm95KGl0KTsKPiAgIAo+IEBAIC0xMzExLDkgKzEzMjgsOSBAQCBzdGF0aWMgaW50 IHNldF9zc2V1KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJaWYgKHVzZXJfc3Nl dS5mbGFncyB8fCB1c2VyX3NzZXUucnN2ZCkKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAt CWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAo+IC0JCQkJCSAgdXNlcl9z c2V1LmVuZ2luZV9jbGFzcywKPiAtCQkJCQkgIHVzZXJfc3NldS5lbmdpbmVfaW5zdGFuY2UpOwo+ ICsJZW5naW5lID0gbG9va3VwX3VzZXJfZW5naW5lKGN0eCwgMCwKPiArCQkJCSAgICB1c2VyX3Nz ZXUuZW5naW5lX2NsYXNzLAo+ICsJCQkJICAgIHVzZXJfc3NldS5lbmdpbmVfaW5zdGFuY2UpOwo+ ICAgCWlmICghZW5naW5lKQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAo+IEBAIC0xMzMxLDkg KzEzNDgsMTU0IEBAIHN0YXRpYyBpbnQgc2V0X3NzZXUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eCwKPiAgIAo+ICAgCWFyZ3MtPnNpemUgPSBzaXplb2YodXNlcl9zc2V1KTsKPiAgIAo+ICsJ cmV0dXJuIDA7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qgc2V0X2VuZ2luZXMgewo+ICsJc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiplbmdpbmVz Owo+ICsJdW5zaWduZWQgaW50IG5lbmdpbmU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgaTkx NV91c2VyX2V4dGVuc2lvbl9mbiBzZXRfZW5naW5lc19fZXh0ZW5zaW9uc1tdID0gewo+ICt9Owo+ ICsKPiArc3RhdGljIGludAo+ICtzZXRfZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4LAo+ICsJICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSAqYXJn cykKPiArewo+ICsJc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzIF9fdXNlciAqdXNl cjsKPiArCXN0cnVjdCBzZXRfZW5naW5lcyBzZXQgPSB7IC5jdHggPSBjdHggfTsKPiArCXU2NCBz aXplLCBleHRlbnNpb25zOwo+ICsJdW5zaWduZWQgaW50IG47Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CXVzZXIgPSB1NjRfdG9fdXNlcl9wdHIoYXJncy0+dmFsdWUpOwo+ICsJc2l6ZSA9IGFyZ3MtPnNp emU7Cj4gKwlpZiAoIXNpemUpCj4gKwkJZ290byBvdXQ7CgpUaGlzIHByZXZlbnRzIGEgaHlwb3Ro ZXRpY2FsIGV4dGVuc2lvbiB3aXRoIGVtcHR5IG1hcCBkYXRhLgoKPiArCj4gKwlCVUlMRF9CVUdf T04oIUlTX0FMSUdORUQoc2l6ZW9mKCp1c2VyKSwgc2l6ZW9mKCp1c2VyLT5jbGFzc19pbnN0YW5j ZSkpKTsKPiArCWlmIChzaXplIDwgc2l6ZW9mKCp1c2VyKSB8fCBzaXplICUgc2l6ZW9mKCp1c2Vy LT5jbGFzc19pbnN0YW5jZSkpCgpJU19BTElHTkVEIGZvciB0aGUgc2Vjb25kIGNvbmRpdGlvbiBm b3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgQlVJTERfQlVHX09OPwoKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlzZXQubmVuZ2luZSA9IChzaXplIC0gc2l6ZW9mKCp1c2VyKSkgLyBzaXplb2Yo KnVzZXItPmNsYXNzX2luc3RhbmNlKTsKPiArCWlmIChzZXQubmVuZ2luZSA9PSAwIHx8IHNldC5u ZW5naW5lID4gSTkxNV9FWEVDX1JJTkdfTUFTSyArIDEpCgpJIHdvdWxkIHByZWZlciB3ZSBkcm9w IHRoZSBzaXplIHJlc3RyaWN0aW9uIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgdG8gCnRoZSBlbmdp bmUgbWFwIHBlciBzZS4KCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJc2V0LmVuZ2luZXMg PSBrbWFsbG9jX2FycmF5KHNldC5uZW5naW5lLAo+ICsJCQkJICAgIHNpemVvZigqc2V0LmVuZ2lu ZXMpLAo+ICsJCQkJICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzZXQuZW5naW5lcykKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKG4gPSAwOyBuIDwgc2V0Lm5lbmdpbmU7IG4rKykg ewo+ICsJCXUxNiBjbGFzcywgaW5zdDsKPiArCj4gKwkJaWYgKGdldF91c2VyKGNsYXNzLCAmdXNl ci0+Y2xhc3NfaW5zdGFuY2Vbbl0uZW5naW5lX2NsYXNzKSB8fAo+ICsJCSAgICBnZXRfdXNlcihp bnN0LCAmdXNlci0+Y2xhc3NfaW5zdGFuY2Vbbl0uZW5naW5lX2luc3RhbmNlKSkgewo+ICsJCQlr ZnJlZShzZXQuZW5naW5lcyk7Cj4gKwkJCXJldHVybiAtRUZBVUxUOwo+ICsJCX0KPiArCj4gKwkJ aWYgKGNsYXNzID09ICh1MTYpSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRCAmJgo+ICsJCSAgICBp bnN0ID09ICh1MTYpSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FKSB7Cj4gKwkJCXNldC5l bmdpbmVzW25dID0gTlVMTDsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlzZXQuZW5n aW5lc1tuXSA9IGxvb2t1cF91c2VyX2VuZ2luZShjdHgsIDAsIGNsYXNzLCBpbnN0KTsKPiArCQlp ZiAoIXNldC5lbmdpbmVzW25dKSB7Cj4gKwkJCWtmcmVlKHNldC5lbmdpbmVzKTsKPiArCQkJcmV0 dXJuIC1FTk9FTlQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWVyciA9IC1FRkFVTFQ7Cj4gKwlpZiAo IWdldF91c2VyKGV4dGVuc2lvbnMsICZ1c2VyLT5leHRlbnNpb25zKSkKPiArCQllcnIgPSBpOTE1 X3VzZXJfZXh0ZW5zaW9ucyh1NjRfdG9fdXNlcl9wdHIoZXh0ZW5zaW9ucyksCj4gKwkJCQkJICAg c2V0X2VuZ2luZXNfX2V4dGVuc2lvbnMsCj4gKwkJCQkJICAgQVJSQVlfU0laRShzZXRfZW5naW5l c19fZXh0ZW5zaW9ucyksCj4gKwkJCQkJICAgJnNldCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJa2Zy ZWUoc2V0LmVuZ2luZXMpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlt dXRleF9sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJa2ZyZWUoY3R4LT5l bmdpbmVzKTsKPiArCWN0eC0+ZW5naW5lcyA9IHNldC5lbmdpbmVzOwo+ICsJY3R4LT5uZW5naW5l ID0gc2V0Lm5lbmdpbmU7Cj4gKwltdXRleF91bmxvY2soJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQKPiArZ2V0 X2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiArCSAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKmFyZ3MpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2NvbnRl eHRfcGFyYW1fZW5naW5lcyAqbG9jYWw7Cj4gKwl1bnNpZ25lZCBpbnQgbiwgY291bnQsIHNpemU7 Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gK3Jlc3RhcnQ6Cj4gKwljb3VudCA9IFJFQURfT05DRShj dHgtPm5lbmdpbmUpOwo+ICsJaWYgKGNvdW50ID4gKElOVF9NQVggLSBzaXplb2YoKmxvY2FsKSkg LyBzaXplb2YoKmxvY2FsLT5jbGFzc19pbnN0YW5jZSkpCj4gKwkJcmV0dXJuIC1FTk9NRU07IC8q IHVucmVwcmVzZW50YWJsZSEgKi8KClByb2JhYmx5IG92ZXJseSBwYXJhbm9pZCBzaW5jZSB3ZSBj YW4ndCBlbmQgdXAgd2l0aCB0aGlzIHN0YXRlIHNldC4KCj4gKwo+ICsJc2l6ZSA9IHNpemVvZigq bG9jYWwpICsgY291bnQgKiBzaXplb2YoKmxvY2FsLT5jbGFzc19pbnN0YW5jZSk7Cj4gKwlpZiAo IWFyZ3MtPnNpemUpIHsKPiArCQlhcmdzLT5zaXplID0gc2l6ZTsKPiArCQlyZXR1cm4gMDsKPiAr CX0KPiArCWlmIChhcmdzLT5zaXplIDwgc2l6ZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g Kwlsb2NhbCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWxvY2FsKQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN0 eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkpIHsKPiArCQllcnIgPSAtRUlOVFI7Cj4gKwkJZ290 byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKFJFQURfT05DRShjdHgtPm5lbmdpbmUpICE9IGNvdW50 KSB7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ CWtmcmVlKGxvY2FsKTsKPiArCQlnb3RvIHJlc3RhcnQ7Cj4gKwl9Cj4gKwo+ICsJbG9jYWwtPmV4 dGVuc2lvbnMgPSAwOwo+ICsJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiArCQlpZiAo Y3R4LT5lbmdpbmVzW25dKSB7Cj4gKwkJCWxvY2FsLT5jbGFzc19pbnN0YW5jZVtuXS5lbmdpbmVf Y2xhc3MgPQo+ICsJCQkJY3R4LT5lbmdpbmVzW25dLT51YWJpX2NsYXNzOwo+ICsJCQlsb2NhbC0+ Y2xhc3NfaW5zdGFuY2Vbbl0uZW5naW5lX2luc3RhbmNlID0KPiArCQkJCWN0eC0+ZW5naW5lc1tu XS0+aW5zdGFuY2U7Cj4gKwkJfSBlbHNlIHsKPiArCQkJbG9jYWwtPmNsYXNzX2luc3RhbmNlW25d LmVuZ2luZV9jbGFzcyA9Cj4gKwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJCQls b2NhbC0+Y2xhc3NfaW5zdGFuY2Vbbl0uZW5naW5lX2luc3RhbmNlID0KPiArCQkJCUk5MTVfRU5H SU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWlmIChjb3B5X3RvX3VzZXIo dTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZhbHVlKSwgbG9jYWwsIHNpemUpKSB7Cj4gKwkJZXJyID0g LUVGQVVMVDsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCWFyZ3MtPnNpemUgPSBzaXplOwo+ICsK PiArb3V0Ogo+ICsJa2ZyZWUobG9jYWwpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAgIHN0 YXRpYyBpbnQgY3R4X3NldHBhcmFtKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJ CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKmFyZ3MpCj4gICB7Cj4gQEAgLTE0 MDYsNiArMTU2OCwxMCBAQCBzdGF0aWMgaW50IGN0eF9zZXRwYXJhbShzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAo+ICAgCQlyZXQgPSBzZXRfcHBndHQoY3R4LCBhcmdzKTsKPiAgIAkJYnJl YWs7Cj4gICAKPiArCWNhc2UgSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVM6Cj4gKwkJcmV0ID0g c2V0X2VuZ2luZXMoY3R4LCBhcmdzKTsKPiArCQlicmVhazsKPiArCj4gICAJY2FzZSBJOTE1X0NP TlRFWFRfUEFSQU1fQkFOX1BFUklPRDoKPiAgIAlkZWZhdWx0Ogo+ICAgCQlyZXQgPSAtRUlOVkFM Owo+IEBAIC0xNDU5LDYgKzE2MjUsMjIgQEAgc3RhdGljIGludCBjbG9uZV9zc2V1KHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpkc3QsCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiArc3RhdGlj IGludCBjbG9uZV9lbmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCj4gKwkJCSBz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqc3JjKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICoqZW5naW5lczsKPiArCj4gKwllbmdpbmVzID0ga21lbWR1cChzcmMtPmVuZ2luZXMsCj4g KwkJCSAgc2l6ZW9mKCpzcmMtPmVuZ2luZXMpICogc3JjLT5uZW5naW5lLAo+ICsJCQkgIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFlbmdpbmVzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRz dC0+ZW5naW5lcyA9IGVuZ2luZXM7Cj4gKwlkc3QtPm5lbmdpbmUgPSBzcmMtPm5lbmdpbmU7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgY3JlYXRlX2Nsb25lKHN0cnVjdCBp OTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNlciAqZXh0LCB2b2lkICpkYXRhKQo+ICAgewo+ICAgCXN0 cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0X2Nsb25lIGxvY2FsOwo+IEBAIC0x NTE0LDYgKzE2OTYsMTIgQEAgc3RhdGljIGludCBjcmVhdGVfY2xvbmUoc3RydWN0IGk5MTVfdXNl cl9leHRlbnNpb24gX191c2VyICpleHQsIHZvaWQgKmRhdGEpCj4gICAJCWk5MTVfcHBndHRfb3Bl bihkc3QtPnBwZ3R0KTsKPiAgIAl9Cj4gICAKPiArCWlmIChsb2NhbC5mbGFncyAmIEk5MTVfQ09O VEVYVF9DTE9ORV9FTkdJTkVTICYmIHNyYy0+bmVuZ2luZSkgewo+ICsJCWVyciA9IGNsb25lX2Vu Z2luZXMoZHN0LCBzcmMpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9Cj4g Kwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gQEAgLTE2MzIsOSArMTgyMCw5IEBAIHN0YXRp YyBpbnQgZ2V0X3NzZXUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAlpZiAodXNl cl9zc2V1LmZsYWdzIHx8IHVzZXJfc3NldS5yc3ZkKQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAg IAo+IC0JZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGN0eC0+aTkxNSwKPiAtCQkJ CQkgIHVzZXJfc3NldS5lbmdpbmVfY2xhc3MsCj4gLQkJCQkJICB1c2VyX3NzZXUuZW5naW5lX2lu c3RhbmNlKTsKPiArCWVuZ2luZSA9IGxvb2t1cF91c2VyX2VuZ2luZShjdHgsIDAsCj4gKwkJCQkg ICAgdXNlcl9zc2V1LmVuZ2luZV9jbGFzcywKPiArCQkJCSAgICB1c2VyX3NzZXUuZW5naW5lX2lu c3RhbmNlKTsKPiAgIAlpZiAoIWVuZ2luZSkKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiBA QCAtMTcxNSw2ICsxOTAzLDEwIEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFtX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCXJldCA9IGdldF9wcGd0 dChjdHgsIGFyZ3MpOwo+ICAgCQlicmVhazsKPiAgIAo+ICsJY2FzZSBJOTE1X0NPTlRFWFRfUEFS QU1fRU5HSU5FUzoKPiArCQlyZXQgPSBnZXRfZW5naW5lcyhjdHgsIGFyZ3MpOwo+ICsJCWJyZWFr Owo+ICsKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5fUEVSSU9EOgo+ICAgCWRlZmF1 bHQ6Cj4gICAJCXJldCA9IC1FSU5WQUw7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHRfdHlwZXMuaAo+IGluZGV4IGY4ZjZlNmM5NjBhNy4uOGE4OWYzMDUzZjczIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaAo+ IEBAIC00MSw2ICs0MSw4IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsKPiAgIAkvKiogZmls ZV9wcml2OiBvd25pbmcgZmlsZSBkZXNjcmlwdG9yICovCj4gICAJc3RydWN0IGRybV9pOTE1X2Zp bGVfcHJpdmF0ZSAqZmlsZV9wcml2Owo+ICAgCj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoq ZW5naW5lczsKPiArCj4gICAJc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVsaW5lOwo+ICAgCj4g ICAJLyoqCj4gQEAgLTExMCw2ICsxMTIsOCBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCB7Cj4g ICAjZGVmaW5lIENPTlRFWFRfQ0xPU0VECQkJMQo+ICAgI2RlZmluZSBDT05URVhUX0ZPUkNFX1NJ TkdMRV9TVUJNSVNTSU9OCTIKPiAgIAo+ICsJdW5zaWduZWQgaW50IG5lbmdpbmU7Cj4gKwo+ICAg CS8qKgo+ICAgCSAqIEBod19pZDogLSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnRleHQK PiAgIAkgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBp bmRleCBlZTZkMzAxYTk2MjcuLjY3ZTRhMGMyZWJmZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBAQCAtMjA5MCwxMyArMjA5MCwyMyBAQCBzdGF0 aWMgY29uc3QgZW51bSBpbnRlbF9lbmdpbmVfaWQgdXNlcl9yaW5nX21hcFtJOTE1X1VTRVJfUklO R1MgKyAxXSA9IHsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICoKPiAtZWJfc2VsZWN0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gK2ViX3NlbGVjdF9lbmdpbmUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4gICAJCSBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gICAJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyICphcmdzKQo+ICAgewo+ICAgCXVuc2lnbmVkIGludCB1c2VyX3JpbmdfaWQgPSBhcmdzLT5m bGFncyAmIEk5MTVfRVhFQ19SSU5HX01BU0s7Cj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOwo+ICAgCj4gKwlpZiAoZWItPmN0eC0+ZW5naW5lcykgewo+ICsJCWlmICh1c2VyX3Jp bmdfaWQgPj0gZWItPmN0eC0+bmVuZ2luZSkgewo+ICsJCQlEUk1fREVCVUcoImV4ZWNidWYgd2l0 aCB1bmtub3duIHJpbmc6ICV1XG4iLAo+ICsJCQkJICB1c2VyX3JpbmdfaWQpOwo+ICsJCQlyZXR1 cm4gTlVMTDsKPiArCQl9Cj4gKwo+ICsJCXJldHVybiBlYi0+Y3R4LT5lbmdpbmVzW3VzZXJfcmlu Z19pZF07Cj4gKwl9Cj4gKwo+ICAgCWlmICh1c2VyX3JpbmdfaWQgPiBJOTE1X1VTRVJfUklOR1Mp IHsKPiAgIAkJRFJNX0RFQlVHKCJleGVjYnVmIHdpdGggdW5rbm93biByaW5nOiAldVxuIiwgdXNl cl9yaW5nX2lkKTsKPiAgIAkJcmV0dXJuIE5VTEw7Cj4gQEAgLTIxMDksMTEgKzIxMTksMTEgQEAg ZWJfc2VsZWN0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJ CXJldHVybiBOVUxMOwo+ICAgCX0KPiAgIAo+IC0JaWYgKHVzZXJfcmluZ19pZCA9PSBJOTE1X0VY RUNfQlNEICYmIEhBU19FTkdJTkUoZGV2X3ByaXYsIFZDUzEpKSB7Cj4gKwlpZiAodXNlcl9yaW5n X2lkID09IEk5MTVfRVhFQ19CU0QgJiYgSEFTX0VOR0lORShlYi0+aTkxNSwgVkNTMSkpIHsKPiAg IAkJdW5zaWduZWQgaW50IGJzZF9pZHggPSBhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19CU0RfTUFT SzsKPiAgIAo+ICAgCQlpZiAoYnNkX2lkeCA9PSBJOTE1X0VYRUNfQlNEX0RFRkFVTFQpIHsKPiAt CQkJYnNkX2lkeCA9IGdlbjhfZGlzcGF0Y2hfYnNkX2VuZ2luZShkZXZfcHJpdiwgZmlsZSk7Cj4g KwkJCWJzZF9pZHggPSBnZW44X2Rpc3BhdGNoX2JzZF9lbmdpbmUoZWItPmk5MTUsIGZpbGUpOwo+ ICAgCQl9IGVsc2UgaWYgKGJzZF9pZHggPj0gSTkxNV9FWEVDX0JTRF9SSU5HMSAmJgo+ICAgCQkJ ICAgYnNkX2lkeCA8PSBJOTE1X0VYRUNfQlNEX1JJTkcyKSB7Cj4gICAJCQlic2RfaWR4ID4+PSBJ OTE1X0VYRUNfQlNEX1NISUZUOwo+IEBAIC0yMTI0LDkgKzIxMzQsOSBAQCBlYl9zZWxlY3RfZW5n aW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCXJldHVybiBOVUxM Owo+ICAgCQl9Cj4gICAKPiAtCQllbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW19WQ1MoYnNkX2lk eCldOwo+ICsJCWVuZ2luZSA9IGViLT5pOTE1LT5lbmdpbmVbX1ZDUyhic2RfaWR4KV07Cj4gICAJ fSBlbHNlIHsKPiAtCQllbmdpbmUgPSBkZXZfcHJpdi0+ZW5naW5lW3VzZXJfcmluZ19tYXBbdXNl cl9yaW5nX2lkXV07Cj4gKwkJZW5naW5lID0gZWItPmk5MTUtPmVuZ2luZVt1c2VyX3JpbmdfbWFw W3VzZXJfcmluZ19pZF1dOwo+ICAgCX0KPiAgIAo+ICAgCWlmICghZW5naW5lKSB7Cj4gQEAgLTIz MzYsNyArMjM0Niw3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiAgIAlpZiAodW5saWtlbHkoZXJyKSkKPiAgIAkJZ290byBlcnJfZGVzdHJveTsKPiAg IAo+IC0JZWIuZW5naW5lID0gZWJfc2VsZWN0X2VuZ2luZShlYi5pOTE1LCBmaWxlLCBhcmdzKTsK PiArCWViLmVuZ2luZSA9IGViX3NlbGVjdF9lbmdpbmUoJmViLCBmaWxlLCBhcmdzKTsKPiAgIAlp ZiAoIWViLmVuZ2luZSkgewo+ICAgCQllcnIgPSAtRUlOVkFMOwo+ICAgCQlnb3RvIGVycl9lbmdp bmU7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaAo+IGluZGV4IDUwZDE1NDk1NGQ1Zi4uMDAxNDdiOTkwZTYzIDEw MDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ICsrKyBiL2luY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaAo+IEBAIC0xMjQsNiArMTI0LDggQEAgZW51bSBkcm1faTkxNV9n ZW1fZW5naW5lX2NsYXNzIHsKPiAgIAlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElECT0gLTEKPiAg IH07Cj4gICAKPiArI2RlZmluZSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkUgLTEKPiAr Cj4gICAvKioKPiAgICAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2gg L3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKPiAgICAqCj4gQEAgLTE1MDksNiAr MTUxMSwyNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gewo+ICAgCSAqIFNl ZSBEUk1fSTkxNV9HRU1fVk1fQ1JFQVRFIGFuZCBEUk1fSTkxNV9HRU1fVk1fREVTVFJPWS4KPiAg IAkgKi8KPiAgICNkZWZpbmUgSTkxNV9DT05URVhUX1BBUkFNX1ZNCQkweDkKPiArCj4gKy8qCj4g KyAqIEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTOgo+ICsgKgo+ICsgKiBCaW5kIHRoaXMgY29u dGV4dCB0byBvcGVyYXRlIG9uIHRoaXMgc3Vic2V0IG9mIGF2YWlsYWJsZSBlbmdpbmVzLiBIZW5j ZWZvcnRoLAo+ICsgKiB0aGUgSTkxNV9FWEVDX1JJTkcgc2VsZWN0b3IgZm9yIERSTV9JT0NUTF9J OTE1X0dFTV9FWEVDQlVGRkVSMiBvcGVyYXRlcyBhcwo+ICsgKiBhbiBpbmRleCBpbnRvIHRoaXMg YXJyYXkgb2YgZW5naW5lczsgSTkxNV9FWEVDX0RFRkFVTFQgc2VsZWN0aW5nIGVuZ2luZVswXQo+ ICsgKiBhbmQgdXB3YXJkcy4gU2xvdHMgMC4uLk4gYXJlIGZpbGxlZCBpbiB1c2luZyB0aGUgc3Bl Y2lmaWVkIChjbGFzcywgaW5zdGFuY2UpLgo+ICsgKiBVc2UKPiArICoJZW5naW5lX2NsYXNzOiBJ OTE1X0VOR0lORV9DTEFTU19JTlZBTElELAo+ICsgKgllbmdpbmVfaW5zdGFuY2U6IEk5MTVfRU5H SU5FX0NMQVNTX0lOVkFMSURfTk9ORQo+ICsgKiB0byBzcGVjaWZ5IGEgZ2FwIGluIHRoZSBhcnJh eSB0aGF0IGNhbiBiZSBmaWxsZWQgaW4gbGF0ZXIsIGUuZy4gYnkgYQo+ICsgKiB2aXJ0dWFsIGVu Z2luZSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZy4KPiArICoKPiArICogU2V0dGluZyB0aGUgbnVt YmVyIG9mIGVuZ2luZXMgYm91bmQgdG8gdGhlIGNvbnRleHQgdG8gMCwgYnkgcGFzc2luZyBhIHpl cm8KPiArICogc2l6ZWQgYXJndW1lbnQsIHdpbGwgcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzZXR0 aW5ncy4KPiArICoKPiArICogU2VlIHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcy4K PiArICovCj4gKyNkZWZpbmUgSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVMJMHhhCj4gICAvKiBN dXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBob2xlcyBhbmQgd2VsbCBkb2N1bWVudGVkICovCj4g ICAKPiAgIAlfX3U2NCB2YWx1ZTsKPiBAQCAtMTU3Myw2ICsxNTk1LDIzIEBAIHN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHsKPiAgIAlfX3UzMiByc3ZkOwo+ICAgfTsKPiAg IAo+ICtzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMgewo+ICsJX191NjQgZXh0ZW5z aW9uczsgLyogbGlua2VkIGNoYWluIG9mIGV4dGVuc2lvbiBibG9ja3MsIDAgdGVybWluYXRlcyAq Lwo+ICsKPiArCXN0cnVjdCB7Cj4gKwkJX191MTYgZW5naW5lX2NsYXNzOyAvKiBzZWUgZW51bSBk cm1faTkxNV9nZW1fZW5naW5lX2NsYXNzICovCj4gKwkJX191MTYgZW5naW5lX2luc3RhbmNlOwo+ ICsJfSBjbGFzc19pbnN0YW5jZVswXTsKPiArfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKPiAr Cj4gKyNkZWZpbmUgSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTKG5hbWVfXywgTl9f KSBzdHJ1Y3QgeyBcCj4gKwlfX3U2NCBleHRlbnNpb25zOyBcCj4gKwlzdHJ1Y3QgeyBcCj4gKwkJ X191MTYgZW5naW5lX2NsYXNzOyBcCj4gKwkJX191MTYgZW5naW5lX2luc3RhbmNlOyBcCj4gKwl9 IGNsYXNzX2luc3RhbmNlW05fX107IFwKPiArfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBuYW1l X18KPiArCj4gICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dF9zZXRwYXJh bSB7Cj4gICAjZGVmaW5lIEk5MTVfQ09OVEVYVF9DUkVBVEVfRVhUX1NFVFBBUkFNIDAKPiAgIAlz dHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBiYXNlOwo+IEBAIC0xNTg5LDcgKzE2MjgsOCBAQCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dF9jbG9uZSB7Cj4gICAjZGVmaW5l IEk5MTVfQ09OVEVYVF9DTE9ORV9TU0VVCQkoMXUgPDwgMikKPiAgICNkZWZpbmUgSTkxNV9DT05U RVhUX0NMT05FX1RJTUVMSU5FCSgxdSA8PCAzKQo+ICAgI2RlZmluZSBJOTE1X0NPTlRFWFRfQ0xP TkVfVk0JCSgxdSA8PCA0KQo+IC0jZGVmaW5lIEk5MTVfQ09OVEVYVF9DTE9ORV9VTktOT1dOIC0o STkxNV9DT05URVhUX0NMT05FX1ZNIDw8IDEpCj4gKyNkZWZpbmUgSTkxNV9DT05URVhUX0NMT05F X0VOR0lORVMJKDF1IDw8IDUpCj4gKyNkZWZpbmUgSTkxNV9DT05URVhUX0NMT05FX1VOS05PV04g LShJOTE1X0NPTlRFWFRfQ0xPTkVfRU5HSU5FUyA8PCAxKQo+ICAgCV9fdTY0IHJzdmQ7Cj4gICB9 Owo+ICAgCj4gCgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeA==