From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/11] drm/i915: Keep timeline HWSP allocated until the system is idle Date: Wed, 30 Jan 2019 17:54:51 +0000 Message-ID: <2550844d-329d-536e-5f86-950a52edf439@linux.intel.com> References: <20190130021906.17933-1-chris@chris-wilson.co.uk> <20190130021906.17933-8-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 5E4886E053 for ; Wed, 30 Jan 2019 17:54:47 +0000 (UTC) In-Reply-To: <20190130021906.17933-8-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 Ck9uIDMwLzAxLzIwMTkgMDI6MTksIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiBwcmVwYXJhdGlv biBmb3IgZW5hYmxpbmcgSFcgc2VtYXBob3Jlcywgd2UgbmVlZCB0byBrZWVwIGluIGZsaWdodAo+ IHRpbWVsaW5lIEhXU1AgYWxpdmUgdW50aWwgdGhlIGVudGlyZSBzeXN0ZW0gaXMgaWRsZSwgYXMg YW55IG90aGVyCj4gdGltZWxpbmUgYWN0aXZlIG9uIHRoZSBHUFUgbWF5IHN0aWxsIHJlZmVyIGJh Y2sgdG8gdGhlIGFscmVhZHkgcmV0aXJlZAo+IHRpbWVsaW5lLiBXZSBib3RoIGhhdmUgdG8gZGVs YXkgcmVjeWNsaW5nIGF2YWlsYWJsZSBjYWNoZWxpbmVzIGFuZAo+IHVucGlubmluZyBvbGQgSFdT UCB1bnRpbCB0aGUgbmV4dCBpZGxlIHBvaW50IChpLmUuIG9uIHBhcmtpbmcpLgo+IAo+IFRoYXQg d2UgaGF2ZSB0byBrZWVwIHRoZSBIV1NQIGFsaXZlIGZvciBleHRlcm5hbCByZWZlcmVuY2VzIG9u IEhXIHJhaXNlcwo+IGFuIGludGVyZXN0aW5nIGNvbnVuZHJ1bS4gT24gYSBidXN5IHN5c3RlbSwg d2UgbWF5IG5ldmVyIHNlZSBhIGdsb2JhbAo+IGlkbGUgcG9pbnQsIGVzc2VudGlhbGx5IG1lYW5p bmcgdGhlIHJlc291cmNlIHdpbGwgYmUgbGVha2luZyB1bnRpbCB3ZQo+IGFyZSBmb3JjZWQgdG8g c2xlZXAuIFdoYXQgd2UgbmVlZCBpcyBhIHNldCBvZiBSQ1UgcHJpbWl0aXZlcyBmb3IgdGhlIEdQ VSEKPiBUaGlzIHNob3VsZCBhbHNvIGhlbHAgbWl0aWdhdGUgdGhlIHJlc291cmNlIHN0YXJ2YXRp b24gaXNzdWVzCj4gcHJvbXVsZ2F0aW5nIGZyb20ga2VlcGluZyBhbGwgbG9naWNhbCBzdGF0ZSBw aW5uZWQgdW50aWwgaWRsZSAoaW5zdGVhZAo+IG9mIGFzIGN1cnJlbnRseSBoYW5kbGVkIHVudGls IHRoZSBuZXh0IGNvbnRleHQgc3dpdGNoKS4KPiAKPiB2MjogVXNlIGlkbGUgYmFycmllcnMgdG8g ZnJlZSBzdGFsZSBIV1NQIGFzIHNvb24gYXMgYWxsIGN1cnJlbnQgcmVxdWVzdHMKPiBhcmUgaWRs ZSwgcmF0aGVyIHRoYW4gcmVseSBvbiB0aGUgc3lzdGVtIHJlYWNoaW5nIGEgZ2xvYmFsIGlkbGUg cG9pbnQuCj4gKFR2cnRrbykKPiB2MzogUmVwbGFjZSB0aGUgaWRsZSBiYXJyaWVyIHdpdGggcmVh ZCBsb2Nrcy4KClRpbWUgdG8gY2hhbmdlIHBhdGNoIHRpdGxlIGFuZCBhY3R1YWxseSBldmVuIHJl d3JpdGUgdGhlIGNvbW1pdCBtZXNzYWdlIApJIHRoaW5rLgoKPiBTaWduZWQtb2ZmLWJ5OiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICB8ICAzMCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3RpbWVsaW5lLmMgfCAyMjkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmggfCAgIDkgKy0KPiAgIDMgZmls ZXMgY2hhbmdlZCwgMjM3IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggYTA5ZjQ3Y2NjNzAzLi4wN2U0YzNjNjhl Y2QgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC0zMjYsMTEgKzMy Niw2IEBAIHZvaWQgaTkxNV9yZXF1ZXN0X3JldGlyZV91cHRvKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxKQo+ICAgCX0gd2hpbGUgKHRtcCAhPSBycSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHUzMiB0 aW1lbGluZV9nZXRfc2Vxbm8oc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsKQo+IC17Cj4gLQlyZXR1 cm4gdGwtPnNlcW5vICs9IDEgKyB0bC0+aGFzX2luaXRpYWxfYnJlYWRjcnVtYjsKPiAtfQo+IC0K PiAgIHN0YXRpYyB2b2lkIG1vdmVfdG9fdGltZWxpbmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCwKPiAgIAkJCSAgICAgc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVsaW5lKQo+ICAgewo+ IEBAIC01MzksOCArNTM0LDEwIEBAIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICAgaTkxNV9yZXF1 ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IGVuZ2luZS0+aTkxNTsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICAgCXN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZTsKPiArCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0bDsKPiArCXN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsJdTMyIHNlcW5vOwo+ICAgCWludCByZXQ7Cj4gICAKPiAg IAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiBAQCAtNjE1 LDI0ICs2MTIsMjYgQEAgaTkxNV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAgIAkJfQo+ICAgCX0KPiAg IAo+IC0JcnEtPnJjdXN0YXRlID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpOwo+IC0KPiAg IAlJTklUX0xJU1RfSEVBRCgmcnEtPmFjdGl2ZV9saXN0KTsKPiArCj4gKwl0bCA9IGNlLT5yaW5n LT50aW1lbGluZTsKPiArCXJldCA9IGk5MTVfdGltZWxpbmVfZ2V0X3NlcW5vKHRsLCBycSwgJnNl cW5vKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZnJlZTsKPiArCj4gICAJcnEtPmk5MTUg PSBpOTE1Owo+ICAgCXJxLT5lbmdpbmUgPSBlbmdpbmU7Cj4gICAJcnEtPmdlbV9jb250ZXh0ID0g Y3R4Owo+ICAgCXJxLT5od19jb250ZXh0ID0gY2U7Cj4gICAJcnEtPnJpbmcgPSBjZS0+cmluZzsK PiAtCXJxLT50aW1lbGluZSA9IGNlLT5yaW5nLT50aW1lbGluZTsKPiArCXJxLT50aW1lbGluZSA9 IHRsOwo+ICAgCUdFTV9CVUdfT04ocnEtPnRpbWVsaW5lID09ICZlbmdpbmUtPnRpbWVsaW5lKTsK PiAtCXJxLT5od3NwX3NlcW5vID0gcnEtPnRpbWVsaW5lLT5od3NwX3NlcW5vOwo+ICsJcnEtPmh3 c3Bfc2Vxbm8gPSB0bC0+aHdzcF9zZXFubzsKPiArCXJxLT5yY3VzdGF0ZSA9IGdldF9zdGF0ZV9z eW5jaHJvbml6ZV9yY3UoKTsgLyogYWN0cyBhcyBzbXBfbWIoKSAqLwo+ICAgCj4gICAJc3Bpbl9s b2NrX2luaXQoJnJxLT5sb2NrKTsKPiAtCWRtYV9mZW5jZV9pbml0KCZycS0+ZmVuY2UsCj4gLQkJ ICAgICAgICZpOTE1X2ZlbmNlX29wcywKPiAtCQkgICAgICAgJnJxLT5sb2NrLAo+IC0JCSAgICAg ICBycS0+dGltZWxpbmUtPmZlbmNlX2NvbnRleHQsCj4gLQkJICAgICAgIHRpbWVsaW5lX2dldF9z ZXFubyhycS0+dGltZWxpbmUpKTsKPiArCWRtYV9mZW5jZV9pbml0KCZycS0+ZmVuY2UsICZpOTE1 X2ZlbmNlX29wcywgJnJxLT5sb2NrLAo+ICsJCSAgICAgICB0bC0+ZmVuY2VfY29udGV4dCwgc2Vx bm8pOwo+ICAgCj4gICAJLyogV2UgYnVtcCB0aGUgcmVmIGZvciB0aGUgZmVuY2UgY2hhaW4gKi8K PiAgIAlpOTE1X3N3X2ZlbmNlX2luaXQoJmk5MTVfcmVxdWVzdF9nZXQocnEpLT5zdWJtaXQsIHN1 Ym1pdF9ub3RpZnkpOwo+IEBAIC02OTMsNiArNjkyLDcgQEAgaTkxNV9yZXF1ZXN0X2FsbG9jKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCkKPiAgIAlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZycS0+c2NoZWQuc2lnbmFsZXJzX2xpc3Qp KTsKPiAgIAlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZycS0+c2NoZWQud2FpdGVyc19saXN0KSk7 Cj4gICAKPiArZXJyX2ZyZWU6Cj4gICAJa21lbV9jYWNoZV9mcmVlKGk5MTUtPnJlcXVlc3RzLCBy cSk7Cj4gICBlcnJfdW5yZXNlcnZlOgo+ICAgCXVucmVzZXJ2ZV9ndChpOTE1KTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jCj4gaW5kZXggYjIyMDJkMmU1OGEyLi5mZDFhOTJhMzY2 M2QgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jCj4gQEAgLTYsMTkgKzYs MjggQEAKPiAgIAo+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICAKPiAtI2luY2x1ZGUgImk5 MTVfdGltZWxpbmUuaCIKPiArI2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCj4gICAjaW5jbHVkZSAi aTkxNV9zeW5jbWFwLmgiCj4gKyNpbmNsdWRlICJpOTE1X3RpbWVsaW5lLmgiCj4gICAKPiAgIHN0 cnVjdCBpOTE1X3RpbWVsaW5lX2h3c3Agewo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwlz dHJ1Y3QgaTkxNV9ndF90aW1lbGluZXMgKmd0OwoKQ29taW5nIGJhY2sgdG8gYSBjb21tZW50IGZy b20gb25lIG9mIHRoZSBwcmV2aW91cyByZXZpZXdzLCB0aGlzIGlzIGFsc28gCmNhbGxlZCBndCBi dXQgaXMgYSBkaWZmZXJlbnQgdGhpbmcgYWx0b2dldGhlci4gSSB3b3VsZCByZWFsbHkgbGlrZSB0 aGF0IAp3ZSBhZmZvcmQgb3Vyc2VsdmVzIGEgZmV3IG1vcmUgY2hhcmFjdGVycyBzbyBpdCBqdXN0 IGVhc2llciB0byByZWFkIHRoZSAKY29kZS4KCj4gICAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xp bms7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAl1NjQgZnJlZV9iaXRtYXA7Cj4gICB9 Owo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfdGltZWxpbmVfaHdzcCAqCj4gLWk5 MTVfdGltZWxpbmVfaHdzcChjb25zdCBzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwpCj4gK3N0cnVj dCBpOTE1X3RpbWVsaW5lX2NhY2hlbGluZSB7Cj4gKwlzdHJ1Y3QgaTkxNV9hY3RpdmUgYWN0aXZl Owo+ICsJc3RydWN0IGk5MTVfdGltZWxpbmVfaHdzcCAqaHdzcDsKPiArCXVuc2lnbmVkIGludCBj YWNoZWxpbmUgOiA2Owo+ICsJdW5zaWduZWQgaW50IGZyZWUgOiAxOwo+ICt9Owo+ICsKPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqCj4gK2h3c3BfdG9faTkxNShzdHJ1 Y3QgaTkxNV90aW1lbGluZV9od3NwICpod3NwKQo+ICAgewo+IC0JcmV0dXJuIHRsLT5od3NwX2dn dHQtPnByaXZhdGU7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGh3c3AtPmd0LCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSwgZ3QudGltZWxpbmVzKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVj dCBpOTE1X3ZtYSAqX19od3NwX2FsbG9jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ IEBAIC03MSw2ICs4MCw3IEBAIGh3c3BfYWxsb2Moc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVs aW5lLCB1bnNpZ25lZCBpbnQgKmNhY2hlbGluZSkKPiAgIAkJdm1hLT5wcml2YXRlID0gaHdzcDsK PiAgIAkJaHdzcC0+dm1hID0gdm1hOwo+ICAgCQlod3NwLT5mcmVlX2JpdG1hcCA9IH4wdWxsOwo+ ICsJCWh3c3AtPmd0ID0gZ3Q7Cj4gICAKPiAgIAkJc3Bpbl9sb2NrKCZndC0+aHdzcF9sb2NrKTsK PiAgIAkJbGlzdF9hZGQoJmh3c3AtPmZyZWVfbGluaywgJmd0LT5od3NwX2ZyZWVfbGlzdCk7Cj4g QEAgLTg4LDE0ICs5OCw5IEBAIGh3c3BfYWxsb2Moc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVs aW5lLCB1bnNpZ25lZCBpbnQgKmNhY2hlbGluZSkKPiAgIAlyZXR1cm4gaHdzcC0+dm1hOwo+ICAg fQo+ICAgCj4gLXN0YXRpYyB2b2lkIGh3c3BfZnJlZShzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGlt ZWxpbmUpCj4gK3N0YXRpYyB2b2lkIF9faWRsZV9od3NwX2ZyZWUoc3RydWN0IGk5MTVfdGltZWxp bmVfaHdzcCAqaHdzcCwgaW50IGNhY2hlbGluZSkKPiAgIHsKPiAtCXN0cnVjdCBpOTE1X2d0X3Rp bWVsaW5lcyAqZ3QgPSAmdGltZWxpbmUtPmk5MTUtPmd0LnRpbWVsaW5lczsKPiAtCXN0cnVjdCBp OTE1X3RpbWVsaW5lX2h3c3AgKmh3c3A7Cj4gLQo+IC0JaHdzcCA9IGk5MTVfdGltZWxpbmVfaHdz cCh0aW1lbGluZSk7Cj4gLQlpZiAoIWh3c3ApIC8qIGxlYXZlIGdsb2JhbCBIV1NQIGFsb25lISAq Lwo+IC0JCXJldHVybjsKPiArCXN0cnVjdCBpOTE1X2d0X3RpbWVsaW5lcyAqZ3QgPSBod3NwLT5n dDsKPiAgIAo+ICAgCXNwaW5fbG9jaygmZ3QtPmh3c3BfbG9jayk7Cj4gICAKPiBAQCAtMTAzLDcg KzEwOCw4IEBAIHN0YXRpYyB2b2lkIGh3c3BfZnJlZShzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGlt ZWxpbmUpCj4gICAJaWYgKCFod3NwLT5mcmVlX2JpdG1hcCkKPiAgIAkJbGlzdF9hZGRfdGFpbCgm aHdzcC0+ZnJlZV9saW5rLCAmZ3QtPmh3c3BfZnJlZV9saXN0KTsKPiAgIAo+IC0JaHdzcC0+ZnJl ZV9iaXRtYXAgfD0gQklUX1VMTCh0aW1lbGluZS0+aHdzcF9vZmZzZXQgLyBDQUNIRUxJTkVfQllU RVMpOwo+ICsJR0VNX0JVR19PTihjYWNoZWxpbmUgPj0gQklUU19QRVJfVFlQRShod3NwLT5mcmVl X2JpdG1hcCkpOwo+ICsJaHdzcC0+ZnJlZV9iaXRtYXAgfD0gQklUX1VMTChjYWNoZWxpbmUpOwo+ ICAgCj4gICAJLyogQW5kIGlmIG5vIG9uZSBpcyBsZWZ0IHVzaW5nIGl0LCBnaXZlIHRoZSBwYWdl IGJhY2sgdG8gdGhlIHN5c3RlbSAqLwo+ICAgCWlmIChod3NwLT5mcmVlX2JpdG1hcCA9PSB+MHVs bCkgewo+IEBAIC0xMTUsNiArMTIxLDgwIEBAIHN0YXRpYyB2b2lkIGh3c3BfZnJlZShzdHJ1Y3Qg aTkxNV90aW1lbGluZSAqdGltZWxpbmUpCj4gICAJc3Bpbl91bmxvY2soJmd0LT5od3NwX2xvY2sp Owo+ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lkIF9faWRsZV9jYWNoZWxpbmVfZnJlZShzdHJ1Y3Qg aTkxNV90aW1lbGluZV9jYWNoZWxpbmUgKmNsKQo+ICt7Cj4gKwlHRU1fQlVHX09OKCFpOTE1X2Fj dGl2ZV9pc19pZGxlKCZjbC0+YWN0aXZlKSk7Cj4gKwo+ICsJaTkxNV92bWFfcHV0KGNsLT5od3Nw LT52bWEpOwo+ICsJX19pZGxlX2h3c3BfZnJlZShjbC0+aHdzcCwgY2wtPmNhY2hlbGluZSk7Cj4g Kwo+ICsJaTkxNV9hY3RpdmVfZmluaSgmY2wtPmFjdGl2ZSk7Cj4gKwlrZnJlZShjbCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIF9faWRsZV9jYWNoZWxpbmVfcGFyayhzdHJ1Y3QgaTkxNV90aW1l bGluZV9jYWNoZWxpbmUgKmNsKQo+ICt7Cj4gKwlpOTE1X2FjdGl2ZV9maW5pKCZjbC0+YWN0aXZl KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19jYWNoZWxpbmVfcmV0aXJlKHN0cnVjdCBpOTE1 X2FjdGl2ZSAqYWN0aXZlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV90aW1lbGluZV9jYWNoZWxpbmUg KmNsID0KPiArCQljb250YWluZXJfb2YoYWN0aXZlLCB0eXBlb2YoKmNsKSwgYWN0aXZlKTsKPiAr Cj4gKwlpOTE1X3ZtYV91bnBpbihjbC0+aHdzcC0+dm1hKTsKPiArCWlmICghY2wtPmZyZWUpCj4g KwkJX19pZGxlX2NhY2hlbGluZV9wYXJrKGNsKTsKPiArCWVsc2UKPiArCQlfX2lkbGVfY2FjaGVs aW5lX2ZyZWUoY2wpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdGltZWxpbmVfY2Fj aGVsaW5lICoKPiArY2FjaGVsaW5lX2FsbG9jKHN0cnVjdCBpOTE1X3RpbWVsaW5lX2h3c3AgKmh3 c3AsIHVuc2lnbmVkIGludCBjYWNoZWxpbmUpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3RpbWVsaW5l X2NhY2hlbGluZSAqY2w7Cj4gKwo+ICsJR0VNX0JVR19PTihjYWNoZWxpbmUgPj0gNjQpOwoKTWF5 YmUgcHVsbCBvdXQgQ0FDSEVMSU5FU19QRVJfUEFHRSBhcyBIV1NQX0NBQ0hFTElORVNfUEVSX1BB R0Ugb3Igc29tZXRoaW5nPwoKPiArCj4gKwljbCA9IGttYWxsb2Moc2l6ZW9mKCpjbCksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFjbCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g KwlpOTE1X3ZtYV9nZXQoaHdzcC0+dm1hKTsKPiArCWNsLT5od3NwID0gaHdzcDsKPiArCWNsLT5j YWNoZWxpbmUgPSBjYWNoZWxpbmU7Cj4gKwljbC0+ZnJlZSA9IGZhbHNlOwo+ICsKPiArCWk5MTVf YWN0aXZlX2luaXQoaTkxNV9ndF9hY3RpdmUoaHdzcF90b19pOTE1KGh3c3ApKSwKPiArCQkJICZj bC0+YWN0aXZlLCBfX2NhY2hlbGluZV9yZXRpcmUpOwo+ICsKPiArCXJldHVybiBjbDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgY2FjaGVsaW5lX2FjcXVpcmUoc3RydWN0IGk5MTVfdGltZWxpbmVf Y2FjaGVsaW5lICpjbCkKPiArewo+ICsJaWYgKGNsICYmIGk5MTVfYWN0aXZlX2FjcXVpcmUoJmNs LT5hY3RpdmUpKQo+ICsJCV9faTkxNV92bWFfcGluKGNsLT5od3NwLT52bWEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjYWNoZWxpbmVfcmVsZWFzZShzdHJ1Y3QgaTkxNV90aW1lbGluZV9jYWNo ZWxpbmUgKmNsKQo+ICt7Cj4gKwlpZiAoY2wpCj4gKwkJaTkxNV9hY3RpdmVfcmVsZWFzZSgmY2wt PmFjdGl2ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNhY2hlbGluZV9mcmVlKHN0cnVjdCBp OTE1X3RpbWVsaW5lX2NhY2hlbGluZSAqY2wpCj4gK3sKPiArCWlmICghY2wpCj4gKwkJcmV0dXJu Owo+ICsKPiArCUdFTV9CVUdfT04oY2wtPmZyZWUpOwo+ICsJY2wtPmZyZWUgPSB0cnVlOwo+ICsK PiArCWlmIChpOTE1X2FjdGl2ZV9pc19pZGxlKCZjbC0+YWN0aXZlKSkKPiArCQlfX2lkbGVfY2Fj aGVsaW5lX2ZyZWUoY2wpOwo+ICt9Cj4gKwo+ICAgaW50IGk5MTVfdGltZWxpbmVfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJICAgICAgIHN0cnVjdCBpOTE1X3RpbWVs aW5lICp0aW1lbGluZSwKPiAgIAkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCj4gQEAgLTEzNiwy MiArMjE2LDMyIEBAIGludCBpOTE1X3RpbWVsaW5lX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gICAJdGltZWxpbmUtPm5hbWUgPSBuYW1lOwo+ICAgCXRpbWVsaW5lLT5waW5f Y291bnQgPSAwOwo+ICAgCXRpbWVsaW5lLT5oYXNfaW5pdGlhbF9icmVhZGNydW1iID0gIWh3c3A7 Cj4gKwl0aW1lbGluZS0+aHdzcF9jYWNoZWxpbmUgPSBOVUxMOwo+ICAgCj4gICAJdGltZWxpbmUt Pmh3c3Bfb2Zmc2V0ID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Cj4gICAJaWYgKCFod3NwKSB7 Cj4gKwkJc3RydWN0IGk5MTVfdGltZWxpbmVfY2FjaGVsaW5lICpjbDsKPiAgIAkJdW5zaWduZWQg aW50IGNhY2hlbGluZTsKPiAgIAo+ICAgCQlod3NwID0gaHdzcF9hbGxvYyh0aW1lbGluZSwgJmNh Y2hlbGluZSk7Cj4gICAJCWlmIChJU19FUlIoaHdzcCkpCj4gICAJCQlyZXR1cm4gUFRSX0VSUiho d3NwKTsKPiAgIAo+ICsJCWNsID0gY2FjaGVsaW5lX2FsbG9jKGh3c3AtPnByaXZhdGUsIGNhY2hl bGluZSk7Cj4gKwkJaWYgKElTX0VSUihjbCkpIHsKPiArCQkJX19pZGxlX2h3c3BfZnJlZShod3Nw LT5wcml2YXRlLCBjYWNoZWxpbmUpOwo+ICsJCQlyZXR1cm4gUFRSX0VSUihjbCk7Cj4gKwkJfQo+ ICsKPiAgIAkJdGltZWxpbmUtPmh3c3Bfb2Zmc2V0ID0gY2FjaGVsaW5lICogQ0FDSEVMSU5FX0JZ VEVTOwo+ICsJCXRpbWVsaW5lLT5od3NwX2NhY2hlbGluZSA9IGNsOwo+ICAgCX0KPiAgIAl0aW1l bGluZS0+aHdzcF9nZ3R0ID0gaTkxNV92bWFfZ2V0KGh3c3ApOwo+ICsJR0VNX0JVR19PTih0aW1l bGluZS0+aHdzcF9vZmZzZXQgPj0gaHdzcC0+c2l6ZSk7Cj4gICAKPiAgIAl2YWRkciA9IGk5MTVf Z2VtX29iamVjdF9waW5fbWFwKGh3c3AtPm9iaiwgSTkxNV9NQVBfV0IpOwo+ICAgCWlmIChJU19F UlIodmFkZHIpKSB7Cj4gLQkJaHdzcF9mcmVlKHRpbWVsaW5lKTsKPiArCQljYWNoZWxpbmVfZnJl ZSh0aW1lbGluZS0+aHdzcF9jYWNoZWxpbmUpOwo+ICAgCQlpOTE1X3ZtYV9wdXQoaHdzcCk7Cj4g ICAJCXJldHVybiBQVFJfRVJSKHZhZGRyKTsKPiAgIAl9Cj4gQEAgLTIzOSw3ICszMjksNyBAQCB2 b2lkIGk5MTVfdGltZWxpbmVfZmluaShzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGltZWxpbmUpCj4g ICAJR0VNX0JVR19PTihpOTE1X2FjdGl2ZV9yZXF1ZXN0X2lzc2V0KCZ0aW1lbGluZS0+YmFycmll cikpOwo+ICAgCj4gICAJaTkxNV9zeW5jbWFwX2ZyZWUoJnRpbWVsaW5lLT5zeW5jKTsKPiAtCWh3 c3BfZnJlZSh0aW1lbGluZSk7Cj4gKwljYWNoZWxpbmVfZnJlZSh0aW1lbGluZS0+aHdzcF9jYWNo ZWxpbmUpOwo+ICAgCj4gICAJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcCh0aW1lbGluZS0+aHdz cF9nZ3R0LT5vYmopOwo+ICAgCWk5MTVfdm1hX3B1dCh0aW1lbGluZS0+aHdzcF9nZ3R0KTsKPiBA QCAtMjg0LDYgKzM3NCw3IEBAIGludCBpOTE1X3RpbWVsaW5lX3BpbihzdHJ1Y3QgaTkxNV90aW1l bGluZSAqdGwpCj4gICAJCWk5MTVfZ2d0dF9vZmZzZXQodGwtPmh3c3BfZ2d0dCkgKwo+ICAgCQlv ZmZzZXRfaW5fcGFnZSh0bC0+aHdzcF9vZmZzZXQpOwo+ICAgCj4gKwljYWNoZWxpbmVfYWNxdWly ZSh0bC0+aHdzcF9jYWNoZWxpbmUpOwo+ICAgCXRpbWVsaW5lX2FkZF90b19hY3RpdmUodGwpOwo+ ICAgCj4gICAJcmV0dXJuIDA7Cj4gQEAgLTI5Myw2ICszODQsMTEzIEBAIGludCBpOTE1X3RpbWVs aW5lX3BpbihzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwpCj4gICAJcmV0dXJuIGVycjsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgdTMyIHRpbWVsaW5lX2FkdmFuY2Uoc3RydWN0IGk5MTVfdGltZWxpbmUg KnRsKQo+ICt7Cj4gKwlHRU1fQlVHX09OKCF0bC0+cGluX2NvdW50KTsKPiArCUdFTV9CVUdfT04o dGwtPnNlcW5vICYgdGwtPmhhc19pbml0aWFsX2JyZWFkY3J1bWIpOwo+ICsKPiArCXJldHVybiB0 bC0+c2Vxbm8gKz0gMSArIHRsLT5oYXNfaW5pdGlhbF9icmVhZGNydW1iOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB0aW1lbGluZV9yb2xsYmFjayhzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwpCj4g K3sKPiArCXRsLT5zZXFubyAtPSAxICsgdGwtPmhhc19pbml0aWFsX2JyZWFkY3J1bWI7Cj4gK30K PiArCj4gK3N0YXRpYyBub2lubGluZSBpbnQKPiArX19pOTE1X3RpbWVsaW5lX2dldF9zZXFubyhz dHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwsCj4gKwkJCSAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJCSAgdTMyICpzZXFubykKPiArewo+ICsJc3RydWN0IGk5MTVfdGltZWxpbmVfY2FjaGVs aW5lICpjbDsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJdW5zaWduZWQgaW50IGNhY2hl bGluZTsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyoKPiArCSAqIElmIHRoZXJlIGlzIGFuIG91dHN0 YW5kaW5nIEdQVSByZWZlcmVuY2UgdG8gdGhpcyBjYWNoZWxpbmUsCj4gKwkgKiBzdWNoIGFzIGl0 IGJlaW5nIHNhbXBsZWQgYnkgYSBIVyBzZW1hcGhvcmUgb24gYW5vdGhlciB0aW1lbGluZSwKPiAr CSAqIHdlIGNhbm5vdCB3cmFwYXJvdW5kIG91ciBzZXFubyB2YWx1ZSAodGhlIEhXIHNlbWFwaG9y ZSBkb2VzCj4gKwkgKiBhIHN0cmljdCBncmVhdGVyLXRoYW4tb3ItZXF1YWxzIGNvbXBhcmUsIG5v dCBpOTE1X3NlcW5vX3Bhc3NlZCkuCj4gKwkgKiBTbyBpZiB0aGUgY2FjaGVsaW5lIGlzIHN0aWxs IGJ1c3ksIHdlIG11c3QgZGV0YWNoZWQgb3Vyc2VsdmVzCj4gKwkgKiBmcm9tIGl0IGFuZCBsZWF2 ZSBpdCBpbmZsaWdodCBhbG9uZ3NpZGUgaXRzIHVzZXJzLgo+ICsJICoKPiArCSAqIEhvd2V2ZXIs IGlmIG5vYm9keSBpcyB3YXRjaGluZyBhbmQgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IG5vYm9keQo+ ICsJICogd2lsbCwgd2UgY291bGQgc2ltcGx5IHJldXNlIHRoZSBzYW1lIGNhY2hlbGluZS4KPiAr CSAqCj4gKwkgKiAvLyB3aGlsZSBsb2NrZWQKPiArCSAqIGlmIChpOTE1X2FjdGl2ZV9yZXF1ZXN0 X2lzX3NpZ25hbGVkKCZ0bC0+bGFzdF9yZXF1ZXN0KSAmJgo+ICsJICogICAgIGk5MTVfYWN0aXZl X2lzX3NpZ25hbGVkKCZ0bC0+aHdzcF9jYWNoZWxpbmUtPmFjdGl2ZSkpCj4gKwkgKglyZXR1cm4g MDsKPiArCSAqCj4gKwkgKiBUaGF0IHNlZW1zIHVubGlrZWx5IGZvciBhIGJ1c3kgdGltZWxpbmUg dGhhdCBuZWVkZWQgdG8gd3JhcCBpbgo+ICsJICogdGhlIGZpcnN0IHBsYWNlLCBzbyBqdXN0IHJl cGxhY2UgdGhlIGNhY2hlbGluZS4KPiArCSAqLwo+ICsKPiArCXZtYSA9IGh3c3BfYWxsb2ModGws ICZjYWNoZWxpbmUpOwo+ICsJaWYgKElTX0VSUih2bWEpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUih2 bWEpOwo+ICsJCWdvdG8gZXJyX3JvbGxiYWNrOwo+ICsJfQo+ICsKPiArCWNsID0gY2FjaGVsaW5l X2FsbG9jKHZtYS0+cHJpdmF0ZSwgY2FjaGVsaW5lKTsKPiArCWlmIChJU19FUlIoY2wpKSB7Cj4g KwkJZXJyID0gUFRSX0VSUihjbCk7Cj4gKwkJZ290byBlcnJfaHdzcDsKPiArCX0KPiArCj4gKwkv Kgo+ICsJICogQXR0YWNoIHRoZSBvbGQgY2FjaGVsaW5lIHRvIHRoZSBjdXJyZW50IHJlcXVlc3Qs IHNvIHRoYXQgd2Ugb25seQo+ICsJICogZnJlZSBpdCBhZnRlciB0aGUgY3VycmVudCByZXF1ZXN0 IGlzIHJldGlyZWQsIHdoaWNoIGVuc3VyZXMgdGhhdAo+ICsJICogYWxsIHdyaXRlcyBpbnRvIHRo ZSBjYWNoZWxpbmUgZnJvbSBwcmV2aW91cyByZXF1ZXN0cyBhcmUgY29tcGxldGUuCj4gKwkgKi8K PiArCWVyciA9IGk5MTVfYWN0aXZlX3JlZigmdGwtPmh3c3BfY2FjaGVsaW5lLT5hY3RpdmUsCj4g KwkJCSAgICAgIHRsLT5mZW5jZV9jb250ZXh0LCBycSk7CgpSaWdodCwgdGhpcyBpcyB0aGUgcnEg KyAxIG1hZ2ljIGFraW4gdG8gdW5waW4gcHJldmlvdXMgY29udGV4dC4gV2FzIApjb25mdXNpbmcg bWUgZm9yIGEgYml0IHdoeSB3ZSB3b3VsZCBiZSBhc3NpZ25pbmcgdGhlIG9sZCBjYWNoZWxpbmUg dG8gCnRoZSBjdXJyZW50IHJxLgoKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfY2FjaGVsaW5l Owo+ICsKPiArCXRsLT5od3NwX2dndHQgPSBpOTE1X3ZtYV9nZXQodm1hKTsKPiArCXRsLT5od3Nw X29mZnNldCA9IGNhY2hlbGluZSAqIENBQ0hFTElORV9CWVRFUzsKPiArCV9faTkxNV92bWFfcGlu KHRsLT5od3NwX2dndHQpOwo+ICsKPiArCWNhY2hlbGluZV9yZWxlYXNlKHRsLT5od3NwX2NhY2hl bGluZSk7IC8qIG93bmVyc2hpcCBub3cgeGZlcmVkIHRvIHJxICovCj4gKwljYWNoZWxpbmVfZnJl ZSh0bC0+aHdzcF9jYWNoZWxpbmUpOwo+ICsKPiArCWNhY2hlbGluZV9hY3F1aXJlKGNsKTsKPiAr CXRsLT5od3NwX2NhY2hlbGluZSA9IGNsOwo+ICsKPiArCSpzZXFubyA9IHRpbWVsaW5lX2FkdmFu Y2UodGwpOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY2FjaGVsaW5lOgoKaTkxNV92bWFfcHV0 IGxvb2tzIHRvIGJlIG1pc3NpbmcgaGVyZSB0byBmdWxseSB1bndpbmQgY2FjaGVsaW5lX2FsbG9j LgoKPiArCWtmcmVlKGNsKTsKPiArZXJyX2h3c3A6Cj4gKwlfX2lkbGVfaHdzcF9mcmVlKHZtYS0+ cHJpdmF0ZSwgY2FjaGVsaW5lKTsKPiArZXJyX3JvbGxiYWNrOgo+ICsJdGltZWxpbmVfcm9sbGJh Y2sodGwpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGk5MTVfdGltZWxpbmVfZ2V0 X3NlcW5vKHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0bCwKPiArCQkJICAgIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLAo+ICsJCQkgICAgdTMyICpzZXFubykKPiArewo+ICsJKnNlcW5vID0gdGltZWxp bmVfYWR2YW5jZSh0bCk7Cj4gKwo+ICsJLyogUmVwbGFjZSB0aGUgSFdTUCBvbiB3cmFwYXJvdW5k IGZvciBIVyBzZW1hcGhvcmVzICovCj4gKwlpZiAodW5saWtlbHkoISpzZXFubyAmJiB0bC0+aHdz cF9jYWNoZWxpbmUpKQo+ICsJCXJldHVybiBfX2k5MTVfdGltZWxpbmVfZ2V0X3NlcW5vKHRsLCBy cSwgc2Vxbm8pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV90aW1lbGlu ZV9yZWFkX2xvY2soc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKPiArewo+ICsJR0VNX0JVR19PTighdGwtPnBpbl9jb3VudCk7Cj4gKwlyZXR1cm4gaTkx NV9hY3RpdmVfcmVmKCZ0bC0+aHdzcF9jYWNoZWxpbmUtPmFjdGl2ZSwKPiArCQkJICAgICAgIHJx LT5mZW5jZS5jb250ZXh0LCBycSk7Cj4gK30KPiArCj4gICB2b2lkIGk5MTVfdGltZWxpbmVfdW5w aW4oc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsKQo+ICAgewo+ICAgCUdFTV9CVUdfT04oIXRsLT5w aW5fY291bnQpOwo+IEBAIC0zMDAsNiArNDk4LDcgQEAgdm9pZCBpOTE1X3RpbWVsaW5lX3VucGlu KHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0bCkKPiAgIAkJcmV0dXJuOwo+ICAgCj4gICAJdGltZWxp bmVfcmVtb3ZlX2Zyb21fYWN0aXZlKHRsKTsKPiArCWNhY2hlbGluZV9yZWxlYXNlKHRsLT5od3Nw X2NhY2hlbGluZSk7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFNpbmNlIHRoaXMgdGltZWxpbmUgaXMg aWRsZSwgYWxsIGJhcmllcnMgdXBvbiB3aGljaCB3ZSB3ZXJlIHdhaXRpbmcKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV90aW1lbGluZS5oCj4gaW5kZXggN2JlYzdkMmU0NWJmLi5kNzhlYzZmYmMwMDAg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5oCj4gQEAgLTM0LDcgKzM0LDcg QEAKPiAgICNpbmNsdWRlICJpOTE1X3V0aWxzLmgiCj4gICAKPiAgIHN0cnVjdCBpOTE1X3ZtYTsK PiAtc3RydWN0IGk5MTVfdGltZWxpbmVfaHdzcDsKPiArc3RydWN0IGk5MTVfdGltZWxpbmVfY2Fj aGVsaW5lOwo+ICAgCj4gICBzdHJ1Y3QgaTkxNV90aW1lbGluZSB7Cj4gICAJdTY0IGZlbmNlX2Nv bnRleHQ7Cj4gQEAgLTQ5LDYgKzQ5LDggQEAgc3RydWN0IGk5MTVfdGltZWxpbmUgewo+ICAgCXN0 cnVjdCBpOTE1X3ZtYSAqaHdzcF9nZ3R0Owo+ICAgCXUzMiBod3NwX29mZnNldDsKPiAgIAo+ICsJ c3RydWN0IGk5MTVfdGltZWxpbmVfY2FjaGVsaW5lICpod3NwX2NhY2hlbGluZTsKPiArCj4gICAJ Ym9vbCBoYXNfaW5pdGlhbF9icmVhZGNydW1iOwo+ICAgCj4gICAJLyoqCj4gQEAgLTE2MCw2ICsx NjIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfdGltZWxpbmVfc3luY19pc19sYXRlcihz dHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwsCj4gICB9Cj4gICAKPiAgIGludCBpOTE1X3RpbWVsaW5l X3BpbihzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwpOwo+ICtpbnQgaTkxNV90aW1lbGluZV9nZXRf c2Vxbm8oc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsLAo+ICsJCQkgICAgc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCj4gKwkJCSAgICB1MzIgKnNlcW5vKTsKPiAraW50IGk5MTVfdGltZWxpbmVfcmVh ZF9sb2NrKHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0bCwKPiArCQkJICAgIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxKTsKPiAgIHZvaWQgaTkxNV90aW1lbGluZV91bnBpbihzdHJ1Y3QgaTkxNV90aW1l bGluZSAqdGwpOwo+ICAgCj4gICB2b2lkIGk5MTVfdGltZWxpbmVzX2luaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpOwo+IAoKSSBsaWtlIGl0ISBUb29rIG1lIHNvbWUgdGltZSB0byBm aWd1cmUgaXQgb3V0IGJ1dCBpdCBsb29rcyBnb29kIGFuZCBpcyAKZGVmaW5pdGVseSBlbGVnYW50 LgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK