From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v2] drm/i915: Import the kfence selftests for i915_sw_fence Date: Tue, 16 May 2017 17:49:45 +0300 Message-ID: <87wp9geu0m.fsf@gaia.fi.intel.com> References: <20170511195922.15844-2-chris@chris-wilson.co.uk> <20170515105255.18654-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 757B86E0BE for ; Wed, 17 May 2017 11:17:30 +0000 (UTC) In-Reply-To: <20170515105255.18654-1-chris@chris-wilson.co.uk> 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 Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQSBsb25n IHRpbWUgYWdvLCBJIHdyb3RlIHNvbWUgc2VsZnRlc3RzIGZvciB0aGUgc3RydWN0IGtmZW5jZSBp ZGVhLiBOb3cKPiB0aGF0IHdlIGhhdmUgaW5mcmFzdHJ1Y3R1cmUgaW4gaTkxNS9pZ3QgZm9yIHJ1 bm5pbmcga3NlbGZ0ZXN0cywgaW5jbHVkZQo+IHNvbWUgZm9yIGk5MTVfc3dfZmVuY2UuCj4KPiBT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KCk9u bHkgbWlub3IgdGhpbmcgdGhhdCBjYXVnaHQgbXkgZXllIHdhcyB0aGF0IEkgd291bGQKaGF2ZSBw cmVmZXJyZWQ6CgplcnJfZnJlZV9DOiB0eXBlIG9mIGdvdG9zIGluc3RlYWQgb2YganVzdCBlcnJf Qy4gSW4gaGVyZQp0aG8gZXZlcnl0aGluZyB3YXMgc3RyYWlnaHRmb3dhcmQgdGVhcmRvd24gb2Yg YWxsb2NhdGlvbnMKc28gaXQgd2FzIGNsZWFyLgoKUmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEg PG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv S2NvbmZpZy5kZWJ1ZyAgICAgICAgICAgICAgICAgfCAgMTIgKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3N3X2ZlbmNlLmMgICAgICAgICAgICAgICB8ICAgNyArLQo+ICAuLi4vZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggICB8ICAgMSArCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3N3X2ZlbmNlLmMgICAgIHwgNTc2ICsrKysr KysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDU5NSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9zd19mZW5jZS5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvS2NvbmZpZy5kZWJ1ZyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcuZGVidWcK PiBpbmRleCBiMDBlZGQzYjg4MDAuLjc4YzVjMDQ5YTM0NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9LY29uZmlnLmRlYnVnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv S2NvbmZpZy5kZWJ1Zwo+IEBAIC02MSw2ICs2MSwxOCBAQCBjb25maWcgRFJNX0k5MTVfU1dfRkVO Q0VfREVCVUdfT0JKRUNUUwo+ICAKPiAgICAgICAgICAgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgo+ ICAKPiArY29uZmlnIERSTV9JOTE1X1NXX0ZFTkNFX0NIRUNLX0RBRwo+ICsgICAgICAgIGJvb2wg IkVuYWJsZSBhZGRpdGlvbmFsIGRyaXZlciBkZWJ1Z2dpbmcgZm9yIGRldGVjdGluZyBkZXBlbmRl bmN5IGN5Y2xlcyIKPiArICAgICAgICBkZXBlbmRzIG9uIERSTV9JOTE1Cj4gKyAgICAgICAgZGVm YXVsdCBuCj4gKyAgICAgICAgaGVscAo+ICsgICAgICAgICAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRv IHR1cm4gb24gZXh0cmEgZHJpdmVyIGRlYnVnZ2luZyB0aGF0IG1heSBhZmZlY3QKPiArICAgICAg ICAgIHBlcmZvcm1hbmNlIGJ1dCB3aWxsIGNhdGNoIHNvbWUgaW50ZXJuYWwgaXNzdWVzLgo+ICsK PiArICAgICAgICAgIFJlY29tbWVuZGVkIGZvciBkcml2ZXIgZGV2ZWxvcGVycyBvbmx5Lgo+ICsK PiArICAgICAgICAgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgo+ICsKPiAgY29uZmlnIERSTV9JOTE1 X1NFTEZURVNUCj4gIAlib29sICJFbmFibGUgc2VsZnRlc3RzIHVwb24gZHJpdmVyIGxvYWQiCj4g IAlkZXBlbmRzIG9uIERSTV9JOTE1Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfc3dfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYwo+ IGluZGV4IGEwYTY5MGQ2NjI3ZS4uNDc0ZDIzYzBjMGNlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfc3dfZmVuY2UuYwo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9y ZXNlcnZhdGlvbi5oPgo+ICAKPiAgI2luY2x1ZGUgImk5MTVfc3dfZmVuY2UuaCIKPiArI2luY2x1 ZGUgImk5MTVfc2VsZnRlc3QuaCIKPiAgCj4gICNkZWZpbmUgSTkxNV9TV19GRU5DRV9GTEFHX0FM TE9DIEJJVCgzKSAvKiBhZnRlciBXUV9GTEFHXyogZm9yIHNhZmV0eSAqLwo+ICAKPiBAQCAtMjc0 LDcgKzI3NSw3IEBAIHN0YXRpYyBib29sIGk5MTVfc3dfZmVuY2VfY2hlY2tfaWZfYWZ0ZXIoc3Ry dWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLAo+ICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgCWJv b2wgZXJyOwo+ICAKPiAtCWlmICghSVNfRU5BQkxFRChDT05GSUdfSTkxNV9TV19GRU5DRV9DSEVD S19EQUcpKQo+ICsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TV19GRU5DRV9DSEVD S19EQUcpKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTkx NV9zd19mZW5jZV9sb2NrLCBmbGFncyk7Cj4gQEAgLTQ5MCwzICs0OTEsNyBAQCBpbnQgaTkxNV9z d19mZW5jZV9hd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsCj4g IAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICsKPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9J OTE1X1NFTEZURVNUKQo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfc3dfZmVuY2UuYyIKPiAr I2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9t b2NrX3NlbGZ0ZXN0cy5oCj4gaW5kZXggNzZjMWYxNDlhMGEwLi5mYzc0Njg3NTAxYmEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVz dHMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2Vs ZnRlc3RzLmgKPiBAQCAtOSw2ICs5LDcgQEAKPiAgICogVGVzdHMgYXJlIGV4ZWN1dGVkIGluIG9y ZGVyIGJ5IGlndC9kcnZfc2VsZnRlc3QKPiAgICovCj4gIHNlbGZ0ZXN0KHNhbml0eWNoZWNrLCBp OTE1X21vY2tfc2FuaXR5Y2hlY2spIC8qIGtlZXAgZmlyc3QgKGlndCBzZWxmY2hlY2spICovCj4g K3NlbGZ0ZXN0KGZlbmNlLCBpOTE1X3N3X2ZlbmNlX21vY2tfc2VsZnRlc3RzKQo+ICBzZWxmdGVz dChzY2F0dGVybGlzdCwgc2NhdHRlcmxpc3RfbW9ja19zZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0KHN5 bmNtYXAsIGk5MTVfc3luY21hcF9tb2NrX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QodW5jb3JlLCBp bnRlbF91bmNvcmVfbW9ja19zZWxmdGVzdHMpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3N3X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9zd19mZW5jZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLmM1NTJjMjNlZWNmZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zd19mZW5jZS5jCj4gQEAgLTAsMCArMSw1NzYg QEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPiArICoK PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4g KyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv Y29tcGxldGlvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArCj4gKyNpbmNsdWRl ICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCj4gKwo+ICtzdGF0aWMgaW50IF9faTkxNV9zd19mZW5jZV9j YWxsCj4gK2ZlbmNlX25vdGlmeShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsIGVudW0gaTkx NV9zd19mZW5jZV9ub3RpZnkgc3RhdGUpCj4gK3sKPiArCXN3aXRjaCAoc3RhdGUpIHsKPiArCWNh c2UgRkVOQ0VfQ09NUExFVEU6Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBGRU5DRV9GUkVFOgo+ ICsJCS8qIExlYXZlIHRoZSBmZW5jZSBmb3IgdGhlIGNhbGxlciB0byBmcmVlIGl0IGFmdGVyIHRl c3RpbmcgKi8KPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqYWxsb2NfZmVuY2Uodm9pZCkK PiArewo+ICsJc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlOwo+ICsKPiArCWZlbmNlID0ga21h bGxvYyhzaXplb2YoKmZlbmNlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZlbmNlKQo+ICsJCXJl dHVybiBOVUxMOwo+ICsKPiArCWk5MTVfc3dfZmVuY2VfaW5pdChmZW5jZSwgZmVuY2Vfbm90aWZ5 KTsKPiArCXJldHVybiBmZW5jZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV9mZW5jZShz dHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpCj4gK3sKPiArCWk5MTVfc3dfZmVuY2VfZmluaShm ZW5jZSk7Cj4gKwlrZnJlZShmZW5jZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX190ZXN0X3Nl bGYoc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlpZiAoaTkxNV9zd19mZW5j ZV9kb25lKGZlbmNlKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpOTE1X3N3X2ZlbmNl X2NvbW1pdChmZW5jZSk7Cj4gKwlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZShmZW5jZSkpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaTkxNV9zd19mZW5jZV93YWl0KGZlbmNlKTsKPiArCWlm ICghaTkxNV9zd19mZW5jZV9kb25lKGZlbmNlKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0ZXN0X3NlbGYodm9pZCAqYXJnKQo+ ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2U7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CS8qIFRlc3QgaTkxNV9zd19mZW5jZSBzaWduYWxpbmcgYW5kIGNvbXBsZXRpb24gdGVzdGluZyAq Lwo+ICsJZmVuY2UgPSBhbGxvY19mZW5jZSgpOwo+ICsJaWYgKCFmZW5jZSkKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlyZXQgPSBfX3Rlc3Rfc2VsZihmZW5jZSk7Cj4gKwo+ICsJZnJlZV9m ZW5jZShmZW5jZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRlc3Rf ZGFnKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGk5MTVfc3dfZmVuY2UgKkEsICpCLCAqQzsK PiArCWludCByZXQgPSAtRUlOVkFMOwo+ICsKPiArCS8qIFRlc3QgZGV0ZWN0aW9uIG9mIGN5Y2xl cyB3aXRoaW4gdGhlIGk5MTVfc3dfZmVuY2UgZ3JhcGhzICovCj4gKwlpZiAoIUlTX0VOQUJMRUQo Q09ORklHX0RSTV9JOTE1X1NXX0ZFTkNFX0NIRUNLX0RBRykpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJQSA9IGFsbG9jX2ZlbmNlKCk7Cj4gKwlpZiAoIUEpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwo+ICsJaWYgKGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2VfZ2ZwKEEsIEEsIEdGUF9LRVJO RUwpICE9IC1FSU5WQUwpIHsKPiArCQlwcl9lcnIoInJlY3Vyc2l2ZSBjeWNsZSBub3QgZGV0ZWN0 ZWQgKEFBKVxuIik7Cj4gKwkJZ290byBlcnJfQTsKPiArCX0KPiArCj4gKwlCID0gYWxsb2NfZmVu Y2UoKTsKPiArCWlmICghQikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfQTsK PiArCX0KPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcChBLCBCLCBHRlBf S0VSTkVMKTsKPiArCWlmIChpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcChCLCBBLCBH RlBfS0VSTkVMKSAhPSAtRUlOVkFMKSB7Cj4gKwkJcHJfZXJyKCJzaW5nbGUgZGVwdGggY3ljbGUg bm90IGRldGVjdGVkIChCQUIpXG4iKTsKPiArCQlnb3RvIGVycl9COwo+ICsJfQo+ICsKPiArCUMg PSBhbGxvY19mZW5jZSgpOwo+ICsJaWYgKGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2VfZ2Zw KEIsIEMsIEdGUF9LRVJORUwpID09IC1FSU5WQUwpIHsKPiArCQlwcl9lcnIoImludmFsaWQgY3lj bGUgZGV0ZWN0ZWRcbiIpOwo+ICsJCWdvdG8gZXJyX0M7Cj4gKwl9Cj4gKwlpZiAoaTkxNV9zd19m ZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoQywgQiwgR0ZQX0tFUk5FTCkgIT0gLUVJTlZBTCkgewo+ ICsJCXByX2Vycigic2luZ2xlIGRlcHRoIGN5Y2xlIG5vdCBkZXRlY3RlZCAoQ0JDKVxuIik7Cj4g KwkJZ290byBlcnJfQzsKPiArCX0KPiArCWlmIChpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNl X2dmcChDLCBBLCBHRlBfS0VSTkVMKSAhPSAtRUlOVkFMKSB7Cj4gKwkJcHJfZXJyKCJjeWNsZSBu b3QgZGV0ZWN0ZWQgKEJBLCBDQiwgQUMpXG4iKTsKPiArCQlnb3RvIGVycl9DOwo+ICsJfQo+ICsJ aWYgKGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2VfZ2ZwKEEsIEMsIEdGUF9LRVJORUwpID09 IC1FSU5WQUwpIHsKPiArCQlwcl9lcnIoImludmFsaWQgY3ljbGUgZGV0ZWN0ZWRcbiIpOwo+ICsJ CWdvdG8gZXJyX0M7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9zd19mZW5jZV9jb21taXQoQSk7Cj4gKwlp OTE1X3N3X2ZlbmNlX2NvbW1pdChCKTsKPiArCWk5MTVfc3dfZmVuY2VfY29tbWl0KEMpOwo+ICsK PiArCXJldCA9IDA7Cj4gKwlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZShDKSkgewo+ICsJCXByX2Vy cigiZmVuY2UgQyBub3QgZG9uZVxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCWlm ICghaTkxNV9zd19mZW5jZV9kb25lKEIpKSB7Cj4gKwkJcHJfZXJyKCJmZW5jZSBCIG5vdCBkb25l XG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsJaWYgKCFpOTE1X3N3X2ZlbmNlX2Rv bmUoQSkpIHsKPiArCQlwcl9lcnIoImZlbmNlIEEgbm90IGRvbmVcbiIpOwo+ICsJCXJldCA9IC1F SU5WQUw7Cj4gKwl9Cj4gK2Vycl9DOgo+ICsJZnJlZV9mZW5jZShDKTsKPiArZXJyX0I6Cj4gKwlm cmVlX2ZlbmNlKEIpOwo+ICtlcnJfQToKPiArCWZyZWVfZmVuY2UoQSk7Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRlc3RfQUIodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1 Y3QgaTkxNV9zd19mZW5jZSAqQSwgKkI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIFRlc3QgaTkx NV9zd19mZW5jZSAoQSkgd2FpdGluZyBvbiBhbiBldmVudCBzb3VyY2UgKEIpICovCj4gKwlBID0g YWxsb2NfZmVuY2UoKTsKPiArCWlmICghQSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCUIgPSBh bGxvY19mZW5jZSgpOwo+ICsJaWYgKCFCKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3Rv IGVycl9BOwo+ICsJfQo+ICsKPiArCXJldCA9IGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2Vf Z2ZwKEEsIEIsIEdGUF9LRVJORUwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBlcnJfQjsK PiArCWlmIChyZXQgPT0gMCkgewo+ICsJCXByX2VycigiSW5jb3JyZWN0bHkgcmVwb3J0ZWQgZmVu Y2UgQSB3YXMgY29tcGxldGUgYmVmb3JlIGF3YWl0XG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ ICsJCWdvdG8gZXJyX0I7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gLUVJTlZBTDsKPiArCWk5MTVfc3df ZmVuY2VfY29tbWl0KEEpOwo+ICsJaWYgKGk5MTVfc3dfZmVuY2VfZG9uZShBKSkKPiArCQlnb3Rv IGVycl9COwo+ICsKPiArCWk5MTVfc3dfZmVuY2VfY29tbWl0KEIpOwo+ICsJaWYgKCFpOTE1X3N3 X2ZlbmNlX2RvbmUoQikpIHsKPiArCQlwcl9lcnIoIkZlbmNlIEIgaXMgbm90IGRvbmVcbiIpOwo+ ICsJCWdvdG8gZXJyX0I7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFpOTE1X3N3X2ZlbmNlX2RvbmUoQSkp IHsKPiArCQlwcl9lcnIoIkZlbmNlIEEgaXMgbm90IGRvbmVcbiIpOwo+ICsJCWdvdG8gZXJyX0I7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gMDsKPiArZXJyX0I6Cj4gKwlmcmVlX2ZlbmNlKEIpOwo+ICtl cnJfQToKPiArCWZyZWVfZmVuY2UoQSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHRlc3RfQUJDKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGk5MTVfc3dfZmVuY2Ug KkEsICpCLCAqQzsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogVGVzdCBhIGNoYWluIG9mIGZlbmNl cywgQSB3YWl0cyBvbiBCIHdobyB3YWl0cyBvbiBDICovCj4gKwlBID0gYWxsb2NfZmVuY2UoKTsK PiArCWlmICghQSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlCID0gYWxsb2NfZmVuY2Uo KTsKPiArCWlmICghQikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfQTsKPiAr CX0KPiArCj4gKwlDID0gYWxsb2NfZmVuY2UoKTsKPiArCWlmICghQykgewo+ICsJCXJldCA9IC1F Tk9NRU07Cj4gKwkJZ290byBlcnJfQjsKPiArCX0KPiArCj4gKwlyZXQgPSBpOTE1X3N3X2ZlbmNl X2F3YWl0X3N3X2ZlbmNlX2dmcChBLCBCLCBHRlBfS0VSTkVMKTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCWdvdG8gZXJyX0M7Cj4gKwlpZiAocmV0ID09IDApIHsKPiArCQlwcl9lcnIoIkluY29ycmVj dGx5IHJlcG9ydGVkIGZlbmNlIEIgd2FzIGNvbXBsZXRlIGJlZm9yZSBhd2FpdFxuIik7Cj4gKwkJ Z290byBlcnJfQzsKPiArCX0KPiArCj4gKwlyZXQgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2Zl bmNlX2dmcChCLCBDLCBHRlBfS0VSTkVMKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJy X0M7Cj4gKwlpZiAocmV0ID09IDApIHsKPiArCQlwcl9lcnIoIkluY29ycmVjdGx5IHJlcG9ydGVk IGZlbmNlIEMgd2FzIGNvbXBsZXRlIGJlZm9yZSBhd2FpdFxuIik7Cj4gKwkJZ290byBlcnJfQzsK PiArCX0KPiArCj4gKwlyZXQgPSAtRUlOVkFMOwo+ICsJaTkxNV9zd19mZW5jZV9jb21taXQoQSk7 Cj4gKwlpZiAoaTkxNV9zd19mZW5jZV9kb25lKEEpKSB7Cj4gKwkJcHJfZXJyKCJGZW5jZSBBIGNv bXBsZXRlZCBlYXJseVxuIik7Cj4gKwkJZ290byBlcnJfQzsKPiArCX0KPiArCj4gKwlpOTE1X3N3 X2ZlbmNlX2NvbW1pdChCKTsKPiArCWlmIChpOTE1X3N3X2ZlbmNlX2RvbmUoQikpIHsKPiArCQlw cl9lcnIoIkZlbmNlIEIgY29tcGxldGVkIGVhcmx5XG4iKTsKPiArCQlnb3RvIGVycl9DOwo+ICsJ fQo+ICsKPiArCWlmIChpOTE1X3N3X2ZlbmNlX2RvbmUoQSkpIHsKPiArCQlwcl9lcnIoIkZlbmNl IEEgY29tcGxldGVkIGVhcmx5IChhZnRlciBzaWduYWxpbmcgQilcbiIpOwo+ICsJCWdvdG8gZXJy X0M7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9zd19mZW5jZV9jb21taXQoQyk7Cj4gKwo+ICsJcmV0ID0g MDsKPiArCWlmICghaTkxNV9zd19mZW5jZV9kb25lKEMpKSB7Cj4gKwkJcHJfZXJyKCJGZW5jZSBD IG5vdCBkb25lXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsJaWYgKCFpOTE1X3N3 X2ZlbmNlX2RvbmUoQikpIHsKPiArCQlwcl9lcnIoIkZlbmNlIEIgbm90IGRvbmVcbiIpOwo+ICsJ CXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZShBKSkgewo+ ICsJCXByX2VycigiRmVuY2UgQSBub3QgZG9uZVxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiAr CX0KPiArZXJyX0M6Cj4gKwlmcmVlX2ZlbmNlKEMpOwo+ICtlcnJfQjoKPiArCWZyZWVfZmVuY2Uo Qik7Cj4gK2Vycl9BOgo+ICsJZnJlZV9mZW5jZShBKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdGVzdF9BQl9DKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGk5MTVf c3dfZmVuY2UgKkEsICpCLCAqQzsKPiArCWludCByZXQgPSAtRUlOVkFMOwo+ICsKPiArCS8qIFRl c3QgbXVsdGlwbGUgZmVuY2VzIChBQikgd2FpdGluZyBvbiBhIHNpbmdsZSBldmVudCAoQykgKi8K PiArCUEgPSBhbGxvY19mZW5jZSgpOwo+ICsJaWYgKCFBKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCUIgPSBhbGxvY19mZW5jZSgpOwo+ICsJaWYgKCFCKSB7Cj4gKwkJcmV0ID0gLUVOT01F TTsKPiArCQlnb3RvIGVycl9BOwo+ICsJfQo+ICsKPiArCUMgPSBhbGxvY19mZW5jZSgpOwo+ICsJ aWYgKCFCKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9COwo+ICsJfQo+ICsK PiArCXJldCA9IGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2VfZ2ZwKEEsIEMsIEdGUF9LRVJO RUwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBlcnJfQzsKPiArCWlmIChyZXQgPT0gMCkg ewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJfQzsKPiArCX0KPiArCj4gKwlyZXQg PSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcChCLCBDLCBHRlBfS0VSTkVMKTsKPiAr CWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX0M7Cj4gKwlpZiAocmV0ID09IDApIHsKPiArCQly ZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyX0M7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9zd19mZW5j ZV9jb21taXQoQSk7Cj4gKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdChCKTsKPiArCj4gKwlyZXQgPSAw Owo+ICsJaWYgKGk5MTVfc3dfZmVuY2VfZG9uZShBKSkgewo+ICsJCXByX2VycigiRmVuY2UgQSBj b21wbGV0ZWQgZWFybHlcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYg KGk5MTVfc3dfZmVuY2VfZG9uZShCKSkgewo+ICsJCXByX2VycigiRmVuY2UgQiBjb21wbGV0ZWQg ZWFybHlcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9zd19mZW5j ZV9jb21taXQoQyk7Cj4gKwlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZShDKSkgewo+ICsJCXByX2Vy cigiRmVuY2UgQyBub3QgZG9uZVxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZShCKSkgewo+ICsJCXByX2VycigiRmVuY2UgQiBub3Qg ZG9uZVxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAoIWk5MTVfc3df ZmVuY2VfZG9uZShBKSkgewo+ICsJCXByX2VycigiRmVuY2UgQSBub3QgZG9uZVxuIik7Cj4gKwkJ cmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gK2Vycl9DOgo+ICsJZnJlZV9mZW5jZShDKTsKPiAr ZXJyX0I6Cj4gKwlmcmVlX2ZlbmNlKEIpOwo+ICtlcnJfQToKPiArCWZyZWVfZmVuY2UoQSk7Cj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRlc3RfQ19BQih2b2lkICphcmcp Cj4gK3sKPiArCXN0cnVjdCBpOTE1X3N3X2ZlbmNlICpBLCAqQiwgKkM7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCS8qIFRlc3QgbXVsdGlwbGUgZXZlbnQgc291cmNlcyAoQSxCKSBmb3IgYSBzaW5nbGUg ZmVuY2UgKEMpICovCj4gKwlBID0gYWxsb2NfZmVuY2UoKTsKPiArCWlmICghQSkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwlCID0gYWxsb2NfZmVuY2UoKTsKPiArCWlmICghQikgewo+ICsJ CXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfQTsKPiArCX0KPiArCj4gKwlDID0gYWxsb2Nf ZmVuY2UoKTsKPiArCWlmICghQikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJf QjsKPiArCX0KPiArCj4gKwlyZXQgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcChD LCBBLCBHRlBfS0VSTkVMKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX0M7Cj4gKwlp ZiAocmV0ID09IDApIHsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyX0M7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gaTkxNV9zd19mZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoQywgQiwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9DOwo+ICsJaWYgKHJldCA9 PSAwKSB7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl9DOwo+ICsJfQo+ICsKPiAr CXJldCA9IDA7Cj4gKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdChDKTsKPiArCWlmIChpOTE1X3N3X2Zl bmNlX2RvbmUoQykpCj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2Nv bW1pdChBKTsKPiArCWk5MTVfc3dfZmVuY2VfY29tbWl0KEIpOwo+ICsKPiArCWlmICghaTkxNV9z d19mZW5jZV9kb25lKEEpKSB7Cj4gKwkJcHJfZXJyKCJGZW5jZSBBIG5vdCBkb25lXG4iKTsKPiAr CQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmICghaTkxNV9zd19mZW5jZV9kb25lKEIp KSB7Cj4gKwkJcHJfZXJyKCJGZW5jZSBCIG5vdCBkb25lXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWlmICghaTkxNV9zd19mZW5jZV9kb25lKEMpKSB7Cj4gKwkJcHJfZXJy KCJGZW5jZSBDIG5vdCBkb25lXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr ZXJyX0M6Cj4gKwlmcmVlX2ZlbmNlKEMpOwo+ICtlcnJfQjoKPiArCWZyZWVfZmVuY2UoQik7Cj4g K2Vycl9BOgo+ICsJZnJlZV9mZW5jZShBKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdGVzdF9jaGFpbih2b2lkICphcmcpCj4gK3sKPiArCWludCBuZmVuY2VzID0gNDA5 NjsKPiArCXN0cnVjdCBpOTE1X3N3X2ZlbmNlICoqZmVuY2VzOwo+ICsJaW50IHJldCwgaTsKPiAr Cj4gKwkvKiBUZXN0IGEgbG9uZyBjaGFpbiBvZiBmZW5jZXMgKi8KPiArCWZlbmNlcyA9IGttYWxs b2NfYXJyYXkobmZlbmNlcywgc2l6ZW9mKCpmZW5jZXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh ZmVuY2VzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBuZmVu Y2VzOyBpKyspIHsKPiArCQlmZW5jZXNbaV0gPSBhbGxvY19mZW5jZSgpOwo+ICsJCWlmICghZmVu Y2VzW2ldKSB7Cj4gKwkJCW5mZW5jZXMgPSBpOwo+ICsJCQlyZXQgPSAtRU5PTUVNOwo+ICsJCQln b3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCWlmIChpID4gMCkgewo+ICsJCQlyZXQgPSBpOTE1X3N3 X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcChmZW5jZXNbaV0sCj4gKwkJCQkJCQkgICAgICAgZmVu Y2VzW2kgLSAxXSwKPiArCQkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKPiArCQkJaWYgKHJldCA8 IDApIHsKPiArCQkJCW5mZW5jZXMgPSBpICsgMTsKPiArCQkJCWdvdG8gZXJyOwo+ICsJCQl9Cj4g Kwo+ICsJCQlpOTE1X3N3X2ZlbmNlX2NvbW1pdChmZW5jZXNbaV0pOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlyZXQgPSAwOwo+ICsJZm9yIChpID0gbmZlbmNlczsgLS1pOyApIHsKPiArCQlpZiAoaTkx NV9zd19mZW5jZV9kb25lKGZlbmNlc1tpXSkpIHsKPiArCQkJaWYgKHJldCA9PSAwKQo+ICsJCQkJ cHJfZXJyKCJGZW5jZVslZF0gY29tcGxldGVkIGVhcmx5XG4iLCBpKTsKPiArCQkJcmV0ID0gLUVJ TlZBTDsKPiArCQl9Cj4gKwl9Cj4gKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdChmZW5jZXNbMF0pOwo+ ICsJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG5mZW5jZXM7IGkrKykgewo+ICsJCWlmICgh aTkxNV9zd19mZW5jZV9kb25lKGZlbmNlc1tpXSkpIHsKPiArCQkJcHJfZXJyKCJGZW5jZVslZF0g aXMgbm90IGRvbmVcbiIsIGkpOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiAr Cj4gK2VycjoKPiArCWZvciAoaSA9IDA7IGkgPCBuZmVuY2VzOyBpKyspCj4gKwkJZnJlZV9mZW5j ZShmZW5jZXNbaV0pOwo+ICsJa2ZyZWUoZmVuY2VzKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0cnVjdCB0YXNrX2lwYyB7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiArCXN0 cnVjdCBjb21wbGV0aW9uIHN0YXJ0ZWQ7Cj4gKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqaW4sICpv dXQ7Cj4gKwlpbnQgdmFsdWU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB0YXNrX2lwYyhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCB0YXNrX2lwYyAqaXBjID0gY29u dGFpbmVyX29mKHdvcmssIHR5cGVvZigqaXBjKSwgd29yayk7Cj4gKwo+ICsJY29tcGxldGUoJmlw Yy0+c3RhcnRlZCk7Cj4gKwo+ICsJaTkxNV9zd19mZW5jZV93YWl0KGlwYy0+aW4pOwo+ICsJc21w X3N0b3JlX21iKGlwYy0+dmFsdWUsIDEpOwo+ICsJaTkxNV9zd19mZW5jZV9jb21taXQoaXBjLT5v dXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRlc3RfaXBjKHZvaWQgKmFyZykKPiArewo+ICsJ c3RydWN0IHRhc2tfaXBjIGlwYzsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCS8qIFRlc3QgdXNl IG9mIGk5MTVfc3dfZmVuY2UgYXMgYW4gaW50ZXJwcm9jZXNzIHNpZ25hbGluZyBtZWNoYW5pc20g Ki8KPiArCWlwYy5pbiA9IGFsbG9jX2ZlbmNlKCk7Cj4gKwlpZiAoIWlwYy5pbikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCWlwYy5vdXQgPSBhbGxvY19mZW5jZSgpOwo+ICsJaWYgKCFpcGMub3V0 KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9pbjsKPiArCX0KPiArCj4gKwkv KiB1c2UgYSBjb21wbGV0aW9uIHRvIGF2b2lkIGNoaWNrZW4tYW5kLWVnZyB0ZXN0aW5nICovCj4g Kwlpbml0X2NvbXBsZXRpb24oJmlwYy5zdGFydGVkKTsKPiArCj4gKwlpcGMudmFsdWUgPSAwOwo+ ICsJSU5JVF9XT1JLKCZpcGMud29yaywgdGFza19pcGMpOwo+ICsJc2NoZWR1bGVfd29yaygmaXBj LndvcmspOwo+ICsKPiArCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlwYy5zdGFydGVkKTsKPiArCj4g Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwlpZiAoUkVBRF9PTkNFKGlwYy52YWx1ZSkp IHsKPiArCQlwcl9lcnIoIndvcmtlciB1cGRhdGVkIHZhbHVlIGJlZm9yZSBpOTE1X3N3X2ZlbmNl IHdhcyBzaWduYWxlZFxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpOTE1 X3N3X2ZlbmNlX2NvbW1pdChpcGMuaW4pOwo+ICsJaTkxNV9zd19mZW5jZV93YWl0KGlwYy5vdXQp Owo+ICsKPiArCWlmICghUkVBRF9PTkNFKGlwYy52YWx1ZSkpIHsKPiArCQlwcl9lcnIoIndvcmtl ciBzaWduYWxlZCBpOTE1X3N3X2ZlbmNlIGJlZm9yZSB2YWx1ZSB3YXMgcG9zdGVkXG4iKTsKPiAr CQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWZsdXNoX3dvcmsoJmlwYy53b3JrKTsKPiAr CWZyZWVfZmVuY2UoaXBjLm91dCk7Cj4gK2Vycl9pbjoKPiArCWZyZWVfZmVuY2UoaXBjLmluKTsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCBpOTE1X3N3X2ZlbmNlX21vY2tfc2VsZnRl c3RzKHZvaWQpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3Rz W10gPSB7Cj4gKwkJU1VCVEVTVCh0ZXN0X3NlbGYpLAo+ICsJCVNVQlRFU1QodGVzdF9kYWcpLAo+ ICsJCVNVQlRFU1QodGVzdF9BQiksCj4gKwkJU1VCVEVTVCh0ZXN0X0FCQyksCj4gKwkJU1VCVEVT VCh0ZXN0X0FCX0MpLAo+ICsJCVNVQlRFU1QodGVzdF9DX0FCKSwKPiArCQlTVUJURVNUKHRlc3Rf Y2hhaW4pLAo+ICsJCVNVQlRFU1QodGVzdF9pcGMpLAo+ICsJfTsKPiArCj4gKwlyZXR1cm4gaTkx NV9zdWJ0ZXN0cyh0ZXN0cywgTlVMTCk7Cj4gK30KPiAtLSAKPiAyLjExLjAKPgo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK