From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 12/39] drm/i915: Allow a context to define its set of engines Date: Thu, 14 Mar 2019 17:58:00 +0000 Message-ID: <9520c079-691c-dc06-49bf-eefeabe426d4@linux.intel.com> References: <20190313144401.17735-1-chris@chris-wilson.co.uk> <20190313144401.17735-12-chris@chris-wilson.co.uk> <155258373009.4168.13341682459434181199@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3F7F86E24C for ; Thu, 14 Mar 2019 17:58:03 +0000 (UTC) In-Reply-To: <155258373009.4168.13341682459434181199@skylake-alporthouse-com> 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 Ck9uIDE0LzAzLzIwMTkgMTc6MTUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTAzLTE0IDE2OjQ3OjA1KQo+Pgo+PiBPbiAxMy8wMy8yMDE5IDE0OjQz LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBPdmVyIHRoZSBsYXN0IGZldyB5ZWFycywgd2UgaGF2 ZSBkZWJhdGVkIGhvdyB0byBleHRlbmQgdGhlIHVzZXIgQVBJIHRvCj4+PiBzdXBwb3J0IGFuIGlu Y3JlYXNlIGluIHRoZSBudW1iZXIgb2YgZW5naW5lcywgdGhhdCBtYXkgYmUgc3BhcnNlIGFuZAo+ Pj4gZXZlbiBiZSBoZXRlcm9nZW5lb3VzIHdpdGhpbiBhIGNsYXNzIChub3QgYWxsIHZpZGVvIGRl Y29kZXJzIGNyZWF0ZWQKPj4+IGVxdWFsKS4gV2Ugc2V0dGxlZCBvbiB1c2luZyAoY2xhc3MsIGlu c3RhbmNlKSB0dXBsZXMgdG8gaWRlbnRpZnkgYQo+Pj4gc3BlY2lmaWMgZW5naW5lLCB3aXRoIGFu IEFQSSBmb3IgdGhlIHVzZXIgdG8gY29uc3RydWN0IGEgbWFwIG9mIGVuZ2luZXMKPj4+IHRvIGNh cGFiaWxpdGllcy4gSW50byB0aGlzIHBpY3R1cmUsIHdlIHRoZW4gYWRkIGEgY2hhbGxlbmdlIG9m IHZpcnR1YWwKPj4+IGVuZ2luZXM7IG9uZSB1c2VyIGVuZ2luZSB0aGF0IG1hcHMgYmVoaW5kIHRo ZSBzY2VuZXMgdG8gYW55IG51bWJlciBvZgo+Pj4gcGh5c2ljYWwgZW5naW5lcy4gVG8ga2VlcCBp dCBnZW5lcmFsLCB3ZSB3YW50IHRoZSB1c2VyIHRvIGhhdmUgZnVsbAo+Pj4gY29udHJvbCBvdmVy IHRoYXQgbWFwcGluZy4gVG8gdGhhdCBlbmQsIHdlIGFsbG93IHRoZSB1c2VyIHRvIGNvbnN0cmFp biBhCj4+PiBjb250ZXh0IHRvIGRlZmluZSB0aGUgc2V0IG9mIGVuZ2luZXMgdGhhdCBpdCBjYW4g YWNjZXNzLCBvcmRlciBmdWxseQo+Pj4gY29udHJvbGxlZCBieSB0aGUgdXNlciB2aWEgKGNsYXNz LCBpbnN0YW5jZSkuIFdpdGggc3VjaCBwcmVjaXNlIGNvbnRyb2wKPj4+IGluIGNvbnRleHQgc2V0 dXAsIHdlIGNhbiBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIGV4ZWNidWYgdUFCSSBvZgo+ Pj4gc3BlY2lmeWluZyBhIHNpbmdsZSBpbmRleDsgb25seSBub3cgaXQgZG9lc24ndCBhdXRvbWFn aWNhbGx5IG1hcCBvbnRvCj4+PiB0aGUgZW5naW5lcywgaXQgdXNlcyB0aGUgdXNlciBkZWZpbmVk IGVuZ2luZSBtYXAgZnJvbSB0aGUgY29udGV4dC4KPj4+Cj4+PiBUaGUgSTkxNV9FWEVDX0RFRkFV TFQgc2xvdCBpcyBsZWZ0IGVtcHR5LCBhbmQgaW52YWxpZCBmb3IgdXNlIGJ5Cj4+PiBleGVjYnVm LiBJdCdzIHVzZSB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBuZXh0IHBhdGNoLgo+Pj4KPj4+IHYy OiBGaXh1cCBmcmVlaW5nIG9mIGxvY2FsIG9uIHN1Y2Nlc3Mgb2YgZ2V0X2VuZ2luZXMoKQo+Pj4g djM6IEFsbG93IGVtcHR5IGVuZ2luZXNbXQo+Pj4KPj4+IFRlc3RjYXNlOiBpZ3QvZ2VtX2N0eF9l bmdpbmVzCj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KPj4+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29t Pgo+Pj4gLS0tCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMg ICAgICAgfCAyMjMgKysrKysrKysrKysrKysrKystCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0X3R5cGVzLmggfCAgIDQgKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgIHwgIDE5ICstCj4+PiAgICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3V0aWxzLmggICAgICAgICAgICAgfCAgMjMgKysKPj4+ICAgIGluY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgICAgICB8ICA0MiArKystCj4+PiAg ICA1IGZpbGVzIGNoYW5nZWQsIDI5OCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPj4+ Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+PiBpbmRleCBiYWM1 NDg1ODQwOTEuLjA3Mzc3Yjc1YjU2MyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5jCj4+PiBAQCAtODYsNyArODYsOSBAQAo+Pj4gICAgICovCj4+PiAgICAK Pj4+ICAgICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Cj4+PiArCj4+PiAgICAjaW5jbHVkZSA8ZHJt L2k5MTVfZHJtLmg+Cj4+PiArCj4+PiAgICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4+ICAgICNp bmNsdWRlICJpOTE1X2dsb2JhbHMuaCIKPj4+ICAgICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4+ PiBAQCAtMTAxLDYgKzEwMywyMSBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ2xvYmFsX2dlbV9jb250 ZXh0IHsKPj4+ICAgICAgICBzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYl9sdXRzOwo+Pj4gICAgfSBn bG9iYWw7Cj4+PiAgICAKPj4+ICtzdGF0aWMgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4+PiAr bG9va3VwX3VzZXJfZW5naW5lKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiArICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHUxNiBjbGFzcywgdTE2IGluc3RhbmNl KQo+Pgo+PiBZb3UgZGlkbid0IGxpa2UgcmVkdWNpbmcgZmxhZ3MgdG8gMzItYml0IGZvciBub3c/ Cj4+Cj4+PiArI2RlZmluZSBMT09LVVBfVVNFUl9JTkRFWCBCSVQoMCkKPiAKPiBObywgaXQncyBq dXN0IGEgcmVnaXN0ZXIgYW5kIF4gaW1wbGllcyB1bnNpZ25lZCBsb25nLgoKWWVzIEkgYWNjZXB0 ZWQgdGhlIGVycm9yIG9mIG15IHdheXMgbGF0ZXIuCgo+IAo+Pj4gK3sKPj4+ICsgICAgIGlmIChm bGFncyAmIExPT0tVUF9VU0VSX0lOREVYKSB7Cj4+PiArICAgICAgICAgICAgIGlmIChpbnN0YW5j ZSA+PSBjdHgtPm5lbmdpbmUpCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7 Cj4+PiArCj4+PiArICAgICAgICAgICAgIHJldHVybiBjdHgtPmVuZ2luZXNbaW5zdGFuY2VdOwo+ Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGludGVsX2VuZ2luZV9sb29rdXBfdXNl cihjdHgtPmk5MTUsIGNsYXNzLCBpbnN0YW5jZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gICAgc3RydWN0 IGk5MTVfbHV0X2hhbmRsZSAqaTkxNV9sdXRfaGFuZGxlX2FsbG9jKHZvaWQpCj4+PiAgICB7Cj4+ PiAgICAgICAgcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoZ2xvYmFsLnNsYWJfbHV0cywgR0ZQX0tF Uk5FTCk7Cj4+PiBAQCAtMjM1LDYgKzI1Miw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX2NvbnRl eHRfZnJlZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+Pj4gICAgICAgIHJlbGVhc2Vf aHdfaWQoY3R4KTsKPj4+ICAgICAgICBpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsKPj4+ICAg IAo+Pj4gKyAgICAga2ZyZWUoY3R4LT5lbmdpbmVzKTsKPj4+ICsKPj4+ICAgICAgICByYnRyZWVf cG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQsIG4sICZjdHgtPmh3X2NvbnRleHRzLCBu b2RlKQo+Pj4gICAgICAgICAgICAgICAgaW50ZWxfY29udGV4dF9wdXQoaXQpOwo+Pj4gICAgCj4+ PiBAQCAtMTM3MSw5ICsxMzkwLDkgQEAgc3RhdGljIGludCBzZXRfc3NldShzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4LAo+Pj4gICAgICAgIGlmICh1c2VyX3NzZXUuZmxhZ3MgfHwgdXNlcl9z c2V1LnJzdmQpCj4+PiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICAgIAo+Pj4g LSAgICAgZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCj4+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zc2V1LmVuZ2luZV9jbGFzcywK Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3NzZXUuZW5n aW5lX2luc3RhbmNlKTsKPj4+ICsgICAgIGVuZ2luZSA9IGxvb2t1cF91c2VyX2VuZ2luZShjdHgs IDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zc2V1LmVuZ2lu ZV9jbGFzcywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3NzZXUu ZW5naW5lX2luc3RhbmNlKTsKPj4+ICAgICAgICBpZiAoIWVuZ2luZSkKPj4+ICAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gICAgCj4+PiBAQCAtMTM5MSw5ICsxNDEwLDE2MyBAQCBz dGF0aWMgaW50IHNldF9zc2V1KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiAgICAK Pj4+ICAgICAgICBhcmdzLT5zaXplID0gc2l6ZW9mKHVzZXJfc3NldSk7Cj4+PiAgICAKPj4+ICsg ICAgIHJldHVybiAwOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHNldF9lbmdpbmVzIHsKPj4+ ICsgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+PiArICAgICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICoqZW5naW5lczsKPj4+ICsgICAgIHVuc2lnbmVkIGludCBuZW5naW5lOwo+ Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IGk5MTVfdXNlcl9leHRlbnNpb25fZm4gc2V0 X2VuZ2luZXNfX2V4dGVuc2lvbnNbXSA9IHsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQK Pj4+ICtzZXRfZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+Pj4gKyAgICAg ICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSAqYXJncykKPj4+ICt7 Cj4+PiArICAgICBzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMgX191c2VyICp1c2Vy Owo+Pj4gKyAgICAgc3RydWN0IHNldF9lbmdpbmVzIHNldCA9IHsgLmN0eCA9IGN0eCB9Owo+Pj4g KyAgICAgdTY0IHNpemUsIGV4dGVuc2lvbnM7Cj4+PiArICAgICB1bnNpZ25lZCBpbnQgbjsKPj4+ ICsgICAgIGludCBlcnI7Cj4+PiArCj4+PiArICAgICB1c2VyID0gdTY0X3RvX3VzZXJfcHRyKGFy Z3MtPnZhbHVlKTsKPj4+ICsgICAgIHNpemUgPSBhcmdzLT5zaXplOwo+Pj4gKyAgICAgaWYgKCFz aXplKQo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPj4+ICsKPj4+ICsgICAgIEJVSUxEX0JV R19PTighSVNfQUxJR05FRChzaXplb2YoKnVzZXIpLCBzaXplb2YoKnVzZXItPmNsYXNzX2luc3Rh bmNlKSkpOwo+Pj4gKyAgICAgaWYgKHNpemUgPCBzaXplb2YoKnVzZXIpIHx8Cj4+PiArICAgICAg ICAgIUlTX0FMSUdORUQoc2l6ZSwgc2l6ZW9mKCp1c2VyLT5jbGFzc19pbnN0YW5jZSkpKQo+Pj4g KyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgIHNldC5uZW5naW5l ID0gKHNpemUgLSBzaXplb2YoKnVzZXIpKSAvIHNpemVvZigqdXNlci0+Y2xhc3NfaW5zdGFuY2Up Owo+Pj4gKyAgICAgaWYgKHNldC5uZW5naW5lID4gSTkxNV9FWEVDX1JJTkdfTUFTSyArIDEpCj4+ PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgc2V0LmVuZ2lu ZXMgPSBrbWFsbG9jX2FycmF5KHNldC5uZW5naW5lLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZigqc2V0LmVuZ2luZXMpLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+Pj4gKyAgICAgaWYgKCFzZXQuZW5naW5lcykK Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArICAgICBmb3IgKG4g PSAwOyBuIDwgc2V0Lm5lbmdpbmU7IG4rKykgewo+Pj4gKyAgICAgICAgICAgICB1MTYgY2xhc3Ms IGluc3Q7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlmIChnZXRfdXNlcihjbGFzcywgJnVzZXIt PmNsYXNzX2luc3RhbmNlW25dLmVuZ2luZV9jbGFzcykgfHwKPj4+ICsgICAgICAgICAgICAgICAg IGdldF91c2VyKGluc3QsICZ1c2VyLT5jbGFzc19pbnN0YW5jZVtuXS5lbmdpbmVfaW5zdGFuY2Up KSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAga2ZyZWUoc2V0LmVuZ2luZXMpOwo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+ PiArCj4+PiArICAgICAgICAgICAgIGlmIChjbGFzcyA9PSAodTE2KUk5MTVfRU5HSU5FX0NMQVNT X0lOVkFMSUQgJiYKPj4+ICsgICAgICAgICAgICAgICAgIGluc3QgPT0gKHUxNilJOTE1X0VOR0lO RV9DTEFTU19JTlZBTElEX05PTkUpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzZXQuZW5n aW5lc1tuXSA9IE5VTEw7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+PiAr ICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICAgc2V0LmVuZ2luZXNbbl0gPSBs b29rdXBfdXNlcl9lbmdpbmUoY3R4LCAwLCBjbGFzcywgaW5zdCk7Cj4+PiArICAgICAgICAgICAg IGlmICghc2V0LmVuZ2luZXNbbl0pIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBrZnJlZShz ZXQuZW5naW5lcyk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4+ PiArICAgICAgICAgICAgIH0KPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGVyciA9IC1FRkFV TFQ7Cj4+PiArICAgICBpZiAoIWdldF91c2VyKGV4dGVuc2lvbnMsICZ1c2VyLT5leHRlbnNpb25z KSkKPj4+ICsgICAgICAgICAgICAgZXJyID0gaTkxNV91c2VyX2V4dGVuc2lvbnModTY0X3RvX3Vz ZXJfcHRyKGV4dGVuc2lvbnMpLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXRfZW5naW5lc19fZXh0ZW5zaW9ucywKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShzZXRfZW5naW5lc19fZXh0ZW5zaW9ucyks Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXQpOwo+Pj4g KyAgICAgaWYgKGVycikgewo+Pj4gKyAgICAgICAgICAgICBrZnJlZShzZXQuZW5naW5lcyk7Cj4+ PiArICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArb3V0Ogo+ Pj4gKyAgICAgbXV0ZXhfbG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ICsg ICAgIGtmcmVlKGN0eC0+ZW5naW5lcyk7Cj4+PiArICAgICBjdHgtPmVuZ2luZXMgPSBzZXQuZW5n aW5lczsKPj4+ICsgICAgIGN0eC0+bmVuZ2luZSA9IHNldC5uZW5naW5lOwo+Pj4gKyAgICAgbXV0 ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKwo+Pj4gICAgICAg IHJldHVybiAwOwo+Pj4gICAgfQo+Pj4gICAgCj4+PiArc3RhdGljIGludAo+Pj4gK2dldF9lbmdp bmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiArICAgICAgICAgc3RydWN0IGRy bV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICphcmdzKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBp OTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqbG9jYWw7Cj4+PiArICAgICBzaXplX3QgbiwgY291 bnQsIHNpemU7Cj4+PiArICAgICBpbnQgZXJyID0gMDsKPj4+ICsKPj4+ICtyZXN0YXJ0Ogo+Pj4g KyAgICAgaWYgKCFSRUFEX09OQ0UoY3R4LT5lbmdpbmVzKSkgewo+Pgo+PiBaRVJPX09SX05VTExf UFRSPwo+IAo+IE5VTEwgPT4gZGVmYXVsdCwgc2l6ZSA9IDA7Cj4gCj4gWkVST19TSVpFX1BUUiA9 PiBuZW5naW5lcyA9PSAwLCBzaXplID0gc2l6ZW9mKGJhc2UpCgpZZXMgaWYgeW91IGNhcmUgYWJv dXQgc3VjaCBsZXZlbCBvZiBpZGVtcG90ZW5jeSAodG8gdXNlIHRoZSBuYW1lIGZyb20gCnlvdXIg SUdUIDopICkuIEkgdGhvdWdodCB0aGF0IHRoZXJlIGlzIG5vIHBvaW50IGluIHJldHVybmluZyBh IHNpemUgb2YgOCAKYmFjayBhbmQgemVyb2VkIGV4dGVuc2lvbnMgcG9pbnRlci4KCj4gCj4+PiAr ICAgICAgICAgICAgIGFyZ3MtPnNpemUgPSAwOwo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsK Pj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGNvdW50ID0gUkVBRF9PTkNFKGN0eC0+bmVuZ2lu ZSk7Cj4+PiArCj4+PiArICAgICAvKiBCZSBwYXJhbm9pZCBpbiBjYXNlIHdlIGhhdmUgYW4gaW1w ZWRhbmNlIG1pc21hdGNoICovCj4+PiArICAgICBpZiAoIWNoZWNrX3N0cnVjdF9zaXplKGxvY2Fs LCBjbGFzc19pbnN0YW5jZSwgY291bnQsICZzaXplKSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4+PiArICAgICBpZiAodW5saWtlbHkob3ZlcmZsb3dzX3R5cGUoc2l6ZSwgYXJn cy0+c2l6ZSkpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4+ICsKPj4+ICsg ICAgIGlmICghYXJncy0+c2l6ZSkgewo+Pj4gKyAgICAgICAgICAgICBhcmdzLT5zaXplID0gc2l6 ZTsKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+PiArICAgICB9Cj4+PiArICAgICBpZiAo YXJncy0+c2l6ZSA8IHNpemUpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pgo+ PiBlbHNlIGlmIHdvdWxkIHJlYWQgbmljZXIgaWYgbm8gYmxhbmsgbGluZS4KPiAKPiBCbGFuayBs aW5lIGl0IGlzLgo+IAo+Pj4gKwo+Pj4gKyAgICAgbG9jYWwgPSBrbWFsbG9jKHNpemUsIEdGUF9L RVJORUwpOwo+Pj4gKyAgICAgaWYgKCFsb2NhbCkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1F Tk9NRU07Cj4+PiArCj4+PiArICAgICBpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgt Pmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpKSB7Cj4+PiArICAgICAgICAgICAgIGVyciA9IC1FSU5U UjsKPj4+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAg ICBpZiAoIWN0eC0+ZW5naW5lcyB8fCBjdHgtPm5lbmdpbmUgIT0gY291bnQpIHsKPj4KPj4gQ291 bnQgY2hlY2sgd291bGQgYmUgc3VmZmljaWVudCBBRkFJQ1QuCj4gCj4gTm90IHF1aXRlLiBXZSBt YXkgaGF2ZSBnb25lIGZyb20gbm8gZW5naW5lcyBiYWNrIHRvIGRlZmF1bHQgY29uZmlnCj4gYmVm b3JlIHRha2luZyB0aGUgbG9jaywgc28gY291bnQgd291bGQgYmUgdGhlIHNhbWUsIGJ1dCBhcmdz LT5zaXplCj4gc2hvdWxkIHJlcG9ydCBkaWZmZXJlbnRseS4KPiAKPj4+ICsgICAgICAgICAgICAg bXV0ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKyAgICAgICAg ICAgICBrZnJlZShsb2NhbCk7Cj4+PiArICAgICAgICAgICAgIGdvdG8gcmVzdGFydDsKPj4+ICsg ICAgIH0KPj4+ICsKPj4+ICsgICAgIGxvY2FsLT5leHRlbnNpb25zID0gMDsKPj4+ICsgICAgIGZv ciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Cj4+PiArICAgICAgICAgICAgIGlmIChjdHgtPmVu Z2luZXNbbl0pIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+Y2xhc3NfaW5zdGFu Y2Vbbl0uZW5naW5lX2NsYXNzID0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0 eC0+ZW5naW5lc1tuXS0+dWFiaV9jbGFzczsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBsb2Nh bC0+Y2xhc3NfaW5zdGFuY2Vbbl0uZW5naW5lX2luc3RhbmNlID0KPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+ZW5naW5lc1tuXS0+aW5zdGFuY2U7Cj4+PiArICAgICAgICAg ICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmNsYXNzX2luc3Rh bmNlW25dLmVuZ2luZV9jbGFzcyA9Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ OTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGxvY2Fs LT5jbGFzc19pbnN0YW5jZVtuXS5lbmdpbmVfaW5zdGFuY2UgPQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FOwo+Pj4gKyAgICAg ICAgICAgICB9Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICBtdXRleF91bmxvY2soJmN0eC0+ aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+PiArCj4+PiArICAgICBpZiAoY29weV90b191c2Vy KHU2NF90b191c2VyX3B0cihhcmdzLT52YWx1ZSksIGxvY2FsLCBzaXplKSkgewo+Pj4gKyAgICAg ICAgICAgICBlcnIgPSAtRUZBVUxUOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPj4+ICsg ICAgIH0KPj4+ICsgICAgIGFyZ3MtPnNpemUgPSBzaXplOwo+Pj4gKwo+Pj4gK291dDoKPj4+ICsg ICAgIGtmcmVlKGxvY2FsKTsKPj4+ICsgICAgIHJldHVybiBlcnI7Cj4+PiArfQo+Pj4gKwo+Pj4g ICAgc3RhdGljIGludCBjdHhfc2V0cGFyYW0oc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtICphcmdzKQo+Pj4gICAgewo+Pj4gQEAgLTE0NjYsNiArMTYzOSwxMCBAQCBzdGF0aWMgaW50 IGN0eF9zZXRwYXJhbShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+Pj4gICAgICAgICAg ICAgICAgcmV0ID0gc2V0X3BwZ3R0KGN0eCwgYXJncyk7Cj4+PiAgICAgICAgICAgICAgICBicmVh azsKPj4+ICAgIAo+Pj4gKyAgICAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUzoKPj4+ ICsgICAgICAgICAgICAgcmV0ID0gc2V0X2VuZ2luZXMoY3R4LCBhcmdzKTsKPj4+ICsgICAgICAg ICAgICAgYnJlYWs7Cj4+PiArCj4+PiAgICAgICAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fQkFO X1BFUklPRDoKPj4+ICAgICAgICBkZWZhdWx0Ogo+Pj4gICAgICAgICAgICAgICAgcmV0ID0gLUVJ TlZBTDsKPj4+IEBAIC0xNTE5LDYgKzE2OTYsMzAgQEAgc3RhdGljIGludCBjbG9uZV9zc2V1KHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCj4+PiAgICAgICAgcmV0dXJuIDA7Cj4+PiAgICB9 Cj4+PiAgICAKPj4+ICtzdGF0aWMgaW50IGNsb25lX2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmRzdCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKnNyYykKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqZW5n aW5lczsKPj4+ICsgICAgIHVuc2lnbmVkIGludCBuZW5naW5lOwo+Pj4gKwo+Pj4gKyAgICAgbXV0 ZXhfbG9jaygmc3JjLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsgLyogc2VyaWFsaXNlIHNyYy0+ ZW5naW5lW10gKi8KPj4+ICsgICAgIG5lbmdpbmUgPSBzcmMtPm5lbmdpbmU7Cj4+PiArICAgICBp ZiAoIVpFUk9fT1JfTlVMTF9QVFIoc3JjLT5lbmdpbmVzKSkKPj4KPj4gQSBjb21tZW50IHRha2lu ZyBub3RlIG9mIHRoZSByZWFzb24gZm9yIHRoZSBaRVJPX1BUUiB0cmljay4KPiAKPiBJIG11c3Qg aGF2ZSBkZWxldGVkIC8qIFhYWCB3aHkga21lbWR1cCwgd2h5PyAqLwoKSW5kZWVkIHdoeSBrbWVt ZHVwPyA6KSBJIHRob3VnaHQgaXQgd2FzIGFib3V0IGFsbG93aW5nIGNvdW50ID0gMCBpbiB0aGUg CnNldF9lbmdpbmVzIGFuZCBzdG9yaW5nIFpFUk9fUFRSIGluIGN0eC0+ZW5naW5lcyBpbiB0aGF0 IGNhc2UuIEluIHdoaWNoIApjYXNlIGl0IGZhbGwgdGhyb3VnaCB0aGUgZWxzZSBicmFuY2ggYW5k IGNvcGllcyBvdmVyIHRoZSBaRVJPX1BUUi4gClVubGVzcyB5b3Ugd2FudGVkIHRvIGNvbXBsYWlu IHRoYXQga21lbWR1cCBkb2VzIG5vdCBoYW5kbGUgWkVST19QVFIgaW4gCnRoZSBzb3VyY2U/Cgo+ IAo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzID0ga21lbWR1cChzcmMtPmVuZ2luZXMsCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqc3JjLT5lbmdpbmVzKSAqIG5l bmdpbmUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+ Pj4gKyAgICAgZWxzZQo+Pj4gKyAgICAgICAgICAgICBlbmdpbmVzID0gc3JjLT5lbmdpbmVzOwo+ Pj4gKyAgICAgbXV0ZXhfdW5sb2NrKCZzcmMtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4g KyAgICAgaWYgKCFlbmdpbmVzICYmIG5lbmdpbmUpCj4+PiArICAgICAgICAgICAgIHJldHVybiAt RU5PTUVNOwo+Pj4gKwo+Pj4gKyAgICAga2ZyZWUoZHN0LT5lbmdpbmVzKTsKPj4+ICsgICAgIGRz dC0+ZW5naW5lcyA9IGVuZ2luZXM7Cj4+PiArICAgICBkc3QtPm5lbmdpbmUgPSBuZW5naW5lOwo+ Pj4gKyAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gICAgc3RhdGljIGludCBjcmVhdGVf Y2xvbmUoc3RydWN0IGk5MTVfdXNlcl9leHRlbnNpb24gX191c2VyICpleHQsIHZvaWQgKmRhdGEp Cj4+PiAgICB7Cj4+PiAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9l eHRfY2xvbmUgbG9jYWw7Cj4+PiBAQCAtMTU4Nyw2ICsxNzg4LDEyIEBAIHN0YXRpYyBpbnQgY3Jl YXRlX2Nsb25lKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNlciAqZXh0LCB2b2lkICpk YXRhKQo+Pj4gICAgICAgICAgICAgICAgfQo+Pj4gICAgICAgIH0KPj4+ICAgIAo+Pj4gKyAgICAg aWYgKGxvY2FsLmZsYWdzICYgSTkxNV9DT05URVhUX0NMT05FX0VOR0lORVMpIHsKPj4+ICsgICAg ICAgICAgICAgZXJyID0gY2xvbmVfZW5naW5lcyhkc3QsIHNyYyk7Cj4+PiArICAgICAgICAgICAg IGlmIChlcnIpCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPj4+ICsgICAg IH0KPj4+ICsKPj4+ICAgICAgICByZXR1cm4gMDsKPj4+ICAgIH0KPj4+ICAgIAo+Pj4gQEAgLTE3 MDUsOSArMTkxMiw5IEBAIHN0YXRpYyBpbnQgZ2V0X3NzZXUoc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCwKPj4+ICAgICAgICBpZiAodXNlcl9zc2V1LmZsYWdzIHx8IHVzZXJfc3NldS5yc3Zk KQo+Pj4gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiAgICAKPj4+IC0gICAgIGVu Z2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihjdHgtPmk5MTUsCj4+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zc2V1LmVuZ2luZV9jbGFzcywKPj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3NzZXUuZW5naW5l X2luc3RhbmNlKTsKPj4+ICsgICAgIGVuZ2luZSA9IGxvb2t1cF91c2VyX2VuZ2luZShjdHgsIDAs Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zc2V1LmVuZ2luZV9j bGFzcywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3NzZXUuZW5n aW5lX2luc3RhbmNlKTsKPj4KPj4gQmVsb25ncyB0byBhIGxhdGVyIHBhdGNoIGJ1dCBPSy4KPiAK PiBIbW0sIHlvdSdkIHJhdGhlciBoYXZlIGl0IGxhdGVyLiBJIGZlbHQgaW50cm9kdWNpbmcgdGhl IGNvbmNlcHQgdGhhdCB3ZQo+IGhhdmUgY3R4LT5lbmdpbmVzW10gaW1wbGllZCB3ZSBzaG91bGQg YWxzbyBiZSBhd2FyZSB3aGVuIGxvb2tpbmcgdXAKPiBlbmdpbmVzIGluIGEgY29udGV4dCByZWxh dGVkIGZhc2hpb24uIEkgZmVsdCB0aGV5IHdlcmUgY29ubmVjdGVkIGVub3VnaAo+IHRoYXQgdGhl IGludGVyZmFjZSBkZXNlcnZlZCB0byBiZSBpbiB0aGlzIHBhdGNoIHdpdGggdXNlIHRocm91Z2gg dGhlCj4gdUFQSSBsYXRlci4KClllYWggbWFrZXMgc2Vuc2UgYXMgd2VsbC4gSXQncyBPSy4KCj4g Cj4+PiBAQCAtMTEwLDYgKzExMiw4IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsKPj4+ICAg ICNkZWZpbmUgQ09OVEVYVF9DTE9TRUQgICAgICAgICAgICAgICAgICAgICAgMQo+Pj4gICAgI2Rl ZmluZSBDT05URVhUX0ZPUkNFX1NJTkdMRV9TVUJNSVNTSU9OICAgICAyCj4+PiAgICAKPj4+ICsg ICAgIHVuc2lnbmVkIGludCBuZW5naW5lOwo+Pgo+PiBDYW4gSSB0ZW1wdCB5b3UgdG8gcGx1cmFs aXNlIHRoaXM/IEkgYXQgbGVhc3QgZmluZCBpdCBtb3JlIG9idmlvdXMgaW4KPj4gcGx1cmFsLgo+ IAo+IEJhaCwgaGlzdG9yaWNhbCBwcmVjZWRlbnQgaXMKPiBpbnQgICBuZW5naW5lOwo+IHZvaWQg KmVuZ2luZXM7CgpOb3QgZXZlcnl0aGluZyBoaXN0b3JpY2FsIGlzIGdvb2QhIDopCgo+IAo+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+Pj4gaW5kZXggZWU2 ZDMwMWE5NjI3Li43MGEyNmYwYTlmMWUgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+Pj4gQEAgLTIwOTAsMTMgKzIwOTAsMjAgQEAgc3RhdGlj IGNvbnN0IGVudW0gaW50ZWxfZW5naW5lX2lkIHVzZXJfcmluZ19tYXBbSTkxNV9VU0VSX1JJTkdT ICsgMV0gPSB7Cj4+PiAgICB9Owo+Pj4gICAgCj4+PiAgICBzdGF0aWMgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqCj4+PiAtZWJfc2VsZWN0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4+PiArZWJfc2VsZWN0X2VuZ2luZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YiwKPj4+ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4+PiAgICAgICAg ICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncykKPj4+ICAgIHsK Pj4+ICAgICAgICB1bnNpZ25lZCBpbnQgdXNlcl9yaW5nX2lkID0gYXJncy0+ZmxhZ3MgJiBJOTE1 X0VYRUNfUklOR19NQVNLOwo+Pj4gICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPj4+ICAgIAo+Pj4gKyAgICAgaWYgKGViLT5jdHgtPmVuZ2luZXMpIHsKPj4+ICsgICAgICAg ICAgICAgaWYgKHVzZXJfcmluZ19pZCA+PSBlYi0+Y3R4LT5uZW5naW5lKQo+Pgo+PiBTbyBlbXB0 eSBlbmdpbmUgYXJyYXkgYmxvY2tzIG9mZiBzdWJtaXNzaW9uLiBJdCdzIHByb2JhYmx5IG9rYXks IGp1c3QKPj4gbmVlZCB0byByZW1lbWJlciB0aHJvdWdob3V0IHRoZSBjb2RlIG5vdCB0byBjaGVj ayAiaWYgKGN0eC0+ZW5naW5lcykiCj4+IG9ubHkuIEkgZ3Vlc3Mgc29tZW9uZSB3aWxsIGdldCBi dXJudCBvbiB0aGF0IHNvb25lciBvciBsYXRlciwgYnV0IEkKPj4gZG9uJ3QgdGhpbmsgaXQncyBh IGJpZyBkZWFsLgo+IAo+IEJ1dCBhcyB5b3Ugc2F5LCBpdCBzaG91bGQgb25seSBtYXR0ZXIgYXQg dGhlIHVBUEkgYm91bmRhcnkuIEFmdGVyIHRoaXMKPiBwb2ludCwgd2UgaGF2ZSBvdXIgaW50ZWxf ZW5naW5lX2NzIGFzc2lnbmVkOyBhbmQgaG9wZWZ1bGx5IHdlIGVuZCB1cAo+IHdpdGggaW50ZWxf Y29udGV4dCBhcyBiZWluZyBvdXIgcHJpbWFyaWx5IHNvdXJjZSBvZiB0cnV0aCBpbnRlcm5hbGx5 Lgo+IAo+IFRoZSBnZW1fY29udGV4dCBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZSBHRU0gYm91 bmRhcnksIHNvIGV4cGVjdCBzb21lCj4gbW9yZSBjbGVhbnVwIQo+IAo+Pj4gK3N0YXRpYyBpbmxp bmUgYm9vbAo+Pj4gK19fY2hlY2tfc3RydWN0X3NpemUoc2l6ZV90IGJhc2UsIHNpemVfdCBhcnIs IHNpemVfdCBjb3VudCwgc2l6ZV90ICpzaXplKQo+Pj4gK3sKPj4+ICsgICAgIHNpemVfdCBzejsK Pj4+ICsKPj4+ICsgICAgIGlmIChjaGVja19tdWxfb3ZlcmZsb3coY291bnQsIGFyciwgJnN6KSkK Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKGNoZWNr X2FkZF9vdmVyZmxvdyhzeiwgYmFzZSwgJnN6KSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+Pj4gKwo+Pj4gKyAgICAgKnNpemUgPSBzejsKPj4+ICsgICAgIHJldHVybiB0cnVlOwo+ Pj4gK30KPj4+ICsKPj4+ICsjZGVmaW5lIGNoZWNrX3N0cnVjdF9zaXplKFQsIEEsIEMsIFNaKSBc Cj4+PiArICAgICBsaWtlbHkoX19jaGVja19zdHJ1Y3Rfc2l6ZShzaXplb2YoKihUKSksIFwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqKFQpLT5BKSArIF9fbXVz dF9iZV9hcnJheSgoVCktPkEpLCBcCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDLCBTWikpCj4+Cj4+IEEgY29tbWVudCBleHBsYWluaW5nIHVzYWdlIHdvdWxkIGJlIG5pY2Uu Cj4gCj4gLyogc2VlIHN0cnVjdF9zaXplKCkgKi8KCkNvbWUgb24sIGEgYml0IG1vcmUgdGhhbiB0 aGF0ISBMb29rIGF0IHRob3NlIHNlbGYtZG9jdW1lbnRpbmcgYXJncywgVCwgCkEsIEMsIFNaISBJ dCBuZWVkcyB0byBzYXkgd2hhdCBpdCB3aWxsIGNhbGN1bGF0ZSwgd2hlcmUgaXQgc3RvcmVzIGl0 IGFuZCAKd2hhdCBpdCByZXR1cm5zLiBJZiB5b3Ugd2FudCB0byBoYXZlIG1vcmUgaG9wZSBwZW9w bGUgd2lsbCBhY3R1YWxseSB1c2UgCnRoZSBoZWxwZXJzIHlvdSBhZGQuCgpSZWdhcmRzLAoKVHZy dGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==