From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deepak S Subject: Re: [PATCH 5/8] drm/i915: Consolidate forcewake code Date: Fri, 12 Dec 2014 18:43:49 +0530 Message-ID: <548AEA0D.9000308@linux.intel.com> References: <1418063262-32256-1-git-send-email-mika.kuoppala@intel.com> <1418063262-32256-5-git-send-email-mika.kuoppala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 0D7E86E828 for ; Thu, 11 Dec 2014 05:17:33 -0800 (PST) In-Reply-To: <1418063262-32256-5-git-send-email-mika.kuoppala@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIE1vbmRheSAwOCBEZWNlbWJlciAyMDE0IDExOjU3IFBNLCBNaWthIEt1b3BwYWxhIHdyb3Rl Ogo+IEFzIHdlIG5vdyBoYXZlIGZvcmNld2FrZSBkb21haW5zLCB0YWtlIGFkdmFudGFnZSBvZiBp dAo+IGJ5IHB1dHRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIGdlbiBmdyBoYW5kbGluZyBpbiBkYXRh IHJhdGhlcgo+IHRoYW4gaW4gY29kZS4KPgo+IEluIHBhc3Qgd2UgaGF2ZSBvcGVuY29kZWQgdGhp cyBxdWl0ZSBleHRlbnNpdmVseSBhcyB0aGUgZncgaGFuZGxpbmcKPiBpcyBpbiB0aGUgZmFzdCBw YXRoLiBUaGVyZSBoYXMgYWxzbyBiZWVuIGEgbG90IG9mIGNhcmdvLWN1bHRlZAo+IGNvcHknbidw YXN0aW5nIGZyb20gb2xkZXIgZ2VucyB0byBuZXdlciBvbmVzLgo+Cj4gTm93IHdoZW4gdGhlIHJl bGVhc2luZyBvZiB0aGUgZm9yY2V3YWtlIGlzIGRvbmUgYnkgZGVmZXJyZWQgdGltZXIsCj4gaXQg Z2l2ZXMgY2hhbmNlIHRvIGNvbnNvbGlkYXRlIG1vcmUuIER1ZSB0byB0aGUgZnJlcXVlbmN5IG9m IGFjdHVhbCBodwo+IGFjY2VzcyBiZWluZyBzaWduaWZpY2FudGx5IGxlc3MuCj4KPiBUYWtlIGFk dmFudGFnZSBvZiB0aGlzIGFuZCBnZW5lcmFsaXplIHRoZSBmdyBoYW5kbGluZyBjb2RlCj4gYXMg bXVjaCBhcyBwb3NzaWJsZS4gQnV0IHdlIHN0aWxsIGFpbSB0byBrZWVwIHRoZSBmb3JjZXdha2Ug c2VxdWVuY2UKPiBwYXJ0aWN1bGFyaXRpZXMgZm9yIGVhY2ggZ2VuIGludGFjdC4gU28gdGhlIGFj Y2VzcyBwYXR0ZXJuCj4gdG8gZncgZW5naW5lcyBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgo+Cj4g djI6IC0gcy9vbGRfYWNrL2NsZWFyX2FjayAoQ2hyaXMpCj4gICAgICAtIHMvcG9zdF9yZWFkL3Bv c3RpbmdfcmVhZCAoQ2hyaXMpCj4gICAgICAtIGxlc3MgcG9saXRlIGNvbW1pdCBtc2cgKENocmlz KQo+Cj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5j b20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyB8ICAgNyAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgfCAgIDcgKwo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgfCA0NjkgKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gICAzIGZpbGVzIGNoYW5nZWQsIDIxMiBpbnNlcnRpb25zKCsp LCAyNzEgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGlu ZGV4IDVjYzgzOGIuLjkzMzkwYzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu Ywo+IEBAIC0xMjQxLDE3ICsxMjQxLDEyIEBAIHN0YXRpYyBpbnQgaTkxNV9nZW42X2ZvcmNld2Fr ZV9jb3VudF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXN0cnVjdCBpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZndfZG9tYWluOwo+IC0JY29uc3QgY2hhciAqZG9tYWlu X25hbWVzW10gPSB7Cj4gLQkJInJlbmRlciIsCj4gLQkJImJsaXR0ZXIiLAo+IC0JCSJtZWRpYSIs Cj4gLQl9Owo+ICAgCWludCBpOwo+ICAgCj4gICAJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrKTsKPiAgIAlmb3JfZWFjaF9md19kb21haW4oZndfZG9tYWluLCBkZXZfcHJpdiwg aSkgewo+ICAgCQlzZXFfcHJpbnRmKG0sICIlcy53YWtlX2NvdW50ID0gJXVcbiIsCj4gLQkJCSAg IGRvbWFpbl9uYW1lc1tpXSwKPiArCQkJICAgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW5f dG9fc3RyKGkpLAo+ICAgCQkJICAgZndfZG9tYWluLT53YWtlX2NvdW50KTsKPiAgIAl9Cj4gICAJ c3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+IGluZGV4IDQxMDU1OGEuLjQyNjMwODQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiBAQCAtNTc1LDYgKzU3NSwxMiBAQCBzdHJ1Y3QgaW50ZWxfdW5jb3JlIHsKPiAgIAkJ aW50IGlkOwo+ICAgCQl1bnNpZ25lZCB3YWtlX2NvdW50Owo+ICAgCQlzdHJ1Y3QgdGltZXJfbGlz dCB0aW1lcjsKPiArCQl1MzIgcmVnX3NldDsKPiArCQl1MzIgdmFsX3NldDsKPiArCQl1MzIgdmFs X2NsZWFyOwo+ICsJCXUzMiByZWdfYWNrOwo+ICsJCXUzMiByZWdfcG9zdDsKPiArCQl1MzIgdmFs X3Jlc2V0Owo+ICAgCX0gZndfZG9tYWluW0ZXX0RPTUFJTl9JRF9DT1VOVF07Cj4gICAjZGVmaW5l IEZPUkNFV0FLRV9SRU5ERVIJKDEgPDwgRldfRE9NQUlOX0lEX1JFTkRFUikKPiAgICNkZWZpbmUg Rk9SQ0VXQUtFX0JMSVRURVIJKDEgPDwgRldfRE9NQUlOX0lEX0JMSVRURVIpCj4gQEAgLTI0NDMs NiArMjQ0OSw3IEBAIGV4dGVybiB2b2lkIGludGVsX3VuY29yZV9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICAgZXh0ZXJuIHZvaWQgaW50ZWxfdW5jb3JlX2NoZWNrX2Vycm9ycyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIGV4dGVybiB2b2lkIGludGVsX3VuY29yZV9maW5pKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICAgZXh0ZXJuIHZvaWQgaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHJlc3RvcmUpOwo+ICtjb25z dCBjaGFyICppbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbl90b19zdHIoY29uc3QgaW50IGRv bWFpbl9pZCk7Cj4gICAKPiAgIHZvaWQKPiAgIGk5MTVfZW5hYmxlX3BpcGVzdGF0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdW5jb3JlLmMKPiBpbmRleCA4NWU0NmIwLi5lODgzNzkwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKPiBAQCAtNDIsNiArNDIsMjYgQEAKPiAgIAo+ICAgI2Rl ZmluZSBfX3Jhd19wb3N0aW5nX3JlYWQoZGV2X3ByaXZfXywgcmVnX18pICh2b2lkKV9fcmF3X2k5 MTVfcmVhZDMyKGRldl9wcml2X18sIHJlZ19fKQo+ICAgCj4gK3N0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgZm9yY2V3YWtlX2RvbWFpbl9uYW1lc1tdID0gewo+ICsJInJlbmRlciIsCj4gKwkiYmxp dHRlciIsCj4gKwkibWVkaWEiLAo+ICt9Owo+ICsKPiArY29uc3QgY2hhciAqCj4gK2ludGVsX3Vu Y29yZV9mb3JjZXdha2VfZG9tYWluX3RvX3N0cihjb25zdCBpbnQgaWQpCj4gK3sKPiArCUJVSUxE X0JVR19PTigoc2l6ZW9mKGZvcmNld2FrZV9kb21haW5fbmFtZXMpL3NpemVvZihjb25zdCBjaGFy ICopKSAhPQo+ICsJCSAgICAgRldfRE9NQUlOX0lEX0NPVU5UKTsKPiArCj4gKwlpZiAoaWQgPj0g MCAmJiBpZCA8IEZXX0RPTUFJTl9JRF9DT1VOVCkKPiArCQlyZXR1cm4gZm9yY2V3YWtlX2RvbWFp bl9uYW1lc1tpZF07Cj4gKwo+ICsJV0FSTl9PTihpZCk7Cj4gKwo+ICsJcmV0dXJuICJ1bmtub3du IjsKPiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkCj4gICBhc3NlcnRfZGV2aWNlX25vdF9zdXNwZW5k ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+IEBAIC00OSw3MyAr NjksMTIzIEBAIGFzc2VydF9kZXZpY2Vfbm90X3N1c3BlbmRlZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gICAJCSAgIkRldmljZSBzdXNwZW5kZWRcbiIpOwo+ICAgfQo+ICAg Cj4gLXN0YXRpYyB2b2lkIF9fZ2VuNl9ndF93YWl0X2Zvcl90aHJlYWRfYzAoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArZndfZG9tYWlu X3Jlc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZCkKPiAg IHsKPiAtCS8qIHcvYSBmb3IgYSBzcG9yYWRpYyByZWFkIHJldHVybmluZyAwIGJ5IHdhaXRpbmcg Zm9yIHRoZSBHVAo+IC0JICogdGhyZWFkIHRvIHdha2UgdXAuCj4gLQkgKi8KPiAtCWlmICh3YWl0 X2Zvcl9hdG9taWNfdXMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LCBHRU42X0dUX1RIUkVB RF9TVEFUVVNfUkVHKSAmCj4gLQkJCQlHRU42X0dUX1RIUkVBRF9TVEFUVVNfQ09SRV9NQVNLKSA9 PSAwLCA1MDApKQo+IC0JCURSTV9FUlJPUigiR1QgdGhyZWFkIHN0YXR1cyB3YWl0IHRpbWVkIG91 dFxuIik7Cj4gKwlfX3Jhd19pOTE1X3dyaXRlMzIoZC0+aTkxNSwgZC0+cmVnX3NldCwgZC0+dmFs X3Jlc2V0KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBpbmxpbmUg dm9pZAo+ICtmd19kb21haW5fYXJtX3RpbWVyKHN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2RvbWFpbiAqZCkKPiAgIHsKPiAtCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgRk9SQ0VX QUtFLCAwKTsKPiAtCS8qIHNvbWV0aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNF V0FLRSAqLwo+IC0JX19yYXdfcG9zdGluZ19yZWFkKGRldl9wcml2LCBFQ09CVVMpOwo+ICsJbW9k X3RpbWVyX3Bpbm5lZCgmZC0+dGltZXIsIGppZmZpZXMgKyAxKTsKPiAgIH0KPiAgIAo+IC1zdGF0 aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IC0JCQkJICAgICBpbnQgZndfZW5naW5lKQo+ICtzdGF0aWMgaW5saW5lIHZv aWQKPiArZndfZG9tYWluX3dhaXRfYWNrX2NsZWFyKGNvbnN0IHN0cnVjdCBpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX2RvbWFpbiAqZCkKPiAgIHsKPiAtCWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3 X2k5MTVfcmVhZDMyKGRldl9wcml2LCBGT1JDRVdBS0VfQUNLKSAmIDEpID09IDAsCj4gKwlpZiAo d2FpdF9mb3JfYXRvbWljKChfX3Jhd19pOTE1X3JlYWQzMihkLT5pOTE1LCBkLT5yZWdfYWNrKSAm Cj4gKwkJCSAgICAgRk9SQ0VXQUtFX0tFUk5FTCkgPT0gMCwKPiAgIAkJCSAgICBGT1JDRVdBS0Vf QUNLX1RJTUVPVVRfTVMpKQo+IC0JCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGZv cmNld2FrZSBvbGQgYWNrIHRvIGNsZWFyLlxuIik7Cj4gKwkJRFJNX0VSUk9SKCIlczogdGltZWQg b3V0IHdhaXRpbmcgZm9yIGZvcmNld2FrZSBhY2sgdG8gY2xlYXIuXG4iLAo+ICsJCQkgIGludGVs X3VuY29yZV9mb3JjZXdha2VfZG9tYWluX3RvX3N0cihkLT5pZCkpOwo+ICt9Cj4gICAKPiAtCV9f cmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgRk9SQ0VXQUtFLCAxKTsKPiAtCS8qIHNvbWV0aGlu ZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+IC0JX19yYXdfcG9zdGlu Z19yZWFkKGRldl9wcml2LCBFQ09CVVMpOwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArZndfZG9t YWluX2dldChjb25zdCBzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmQpCj4g K3sKPiArCV9fcmF3X2k5MTVfd3JpdGUzMihkLT5pOTE1LCBkLT5yZWdfc2V0LCBkLT52YWxfc2V0 KTsKPiArfQo+ICAgCj4gLQlpZiAod2FpdF9mb3JfYXRvbWljKChfX3Jhd19pOTE1X3JlYWQzMihk ZXZfcHJpdiwgRk9SQ0VXQUtFX0FDSykgJiAxKSwKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2Z3 X2RvbWFpbl93YWl0X2Fjayhjb25zdCBzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21h aW4gKmQpCj4gK3sKPiArCWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGQt Pmk5MTUsIGQtPnJlZ19hY2spICYKPiArCQkJICAgICBGT1JDRVdBS0VfS0VSTkVMKSwKPiAgIAkJ CSAgICBGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+IC0JCURSTV9FUlJPUigiVGltZWQgb3V0 IHdhaXRpbmcgZm9yIGZvcmNld2FrZSB0byBhY2sgcmVxdWVzdC5cbiIpOwo+ICsJCURSTV9FUlJP UigiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBmb3JjZXdha2UgYWNrIHJlcXVlc3QuXG4iLAo+ ICsJCQkgIGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluX3RvX3N0cihkLT5pZCkpOwo+ICt9 Cj4gICAKPiAtCS8qIFdhUnNGb3JjZXdha2VXYWl0VEMwOnNuYiAqLwo+IC0JX19nZW42X2d0X3dh aXRfZm9yX3RocmVhZF9jMChkZXZfcHJpdik7Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtmd19k b21haW5fcHV0KGNvbnN0IHN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZCkK PiArewo+ICsJX19yYXdfaTkxNV93cml0ZTMyKGQtPmk5MTUsIGQtPnJlZ19zZXQsIGQtPnZhbF9j bGVhcik7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgX19nZW43X2d0X2ZvcmNlX3dha2VfbXRf cmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgaW5saW5l IHZvaWQKPiArZndfZG9tYWluX3Bvc3RpbmdfcmVhZChjb25zdCBzdHJ1Y3QgaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9kb21haW4gKmQpCj4gICB7Cj4gLQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3By aXYsIEZPUkNFV0FLRV9NVCwgX01BU0tFRF9CSVRfRElTQUJMRSgweGZmZmYpKTsKPiAtCS8qIHNv bWV0aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRV9NVCAqLwo+IC0JX19y YXdfcG9zdGluZ19yZWFkKGRldl9wcml2LCBFQ09CVVMpOwo+ICsJLyogc29tZXRoaW5nIGZyb20g c2FtZSBjYWNoZWxpbmUsIGJ1dCBub3QgZnJvbSB0aGUgc2V0IHJlZ2lzdGVyICovCj4gKwlpZiAo ZC0+cmVnX3Bvc3QpCj4gKwkJX19yYXdfcG9zdGluZ19yZWFkKGQtPmk5MTUsIGQtPnJlZ19wb3N0 KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBfX2dlbjdfZ3RfZm9yY2Vfd2FrZV9tdF9nZXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCWludCBmd19lbmdpbmUp Cj4gK3N0YXRpYyB2b2lkCj4gK2Z3X2RvbWFpbnNfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgaW50IGZ3X2RvbWFpbnMpCj4gICB7Cj4gLQl1MzIgZm9yY2V3YWtlX2FjazsK PiArCXN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZDsKPiArCWludCBpZDsK PiAgIAo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYtPmRldikgfHwgSVNfQlJPQURXRUxMKGRl dl9wcml2LT5kZXYpKQo+IC0JCWZvcmNld2FrZV9hY2sgPSBGT1JDRVdBS0VfQUNLX0hTVzsKPiAt CWVsc2UKPiAtCQlmb3JjZXdha2VfYWNrID0gRk9SQ0VXQUtFX01UX0FDSzsKPiArCWZvcl9lYWNo X2Z3X2RvbWFpbl9tYXNrKGQsIGZ3X2RvbWFpbnMsIGRldl9wcml2LCBpZCkgewo+ICsJCWZ3X2Rv bWFpbl93YWl0X2Fja19jbGVhcihkKTsKPiArCQlmd19kb21haW5fZ2V0KGQpOwo+ICsJCWZ3X2Rv bWFpbl9wb3N0aW5nX3JlYWQoZCk7Cj4gKwkJZndfZG9tYWluX3dhaXRfYWNrKGQpOwo+ICsJfQo+ ICt9Cj4gICAKPiAtCWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9w cml2LCBmb3JjZXdha2VfYWNrKSAmIEZPUkNFV0FLRV9LRVJORUwpID09IDAsCj4gLQkJCSAgICBG T1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+IC0JCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRp bmcgZm9yIGZvcmNld2FrZSBvbGQgYWNrIHRvIGNsZWFyLlxuIik7Cj4gK3N0YXRpYyB2b2lkCj4g K2Z3X2RvbWFpbnNfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3 X2RvbWFpbnMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAq ZDsKPiArCWludCBpZDsKPiAgIAo+IC0JX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JD RVdBS0VfTVQsCj4gLQkJCSAgIF9NQVNLRURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7 Cj4gLQkvKiBzb21ldGhpbmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0VfTVQg Ki8KPiAtCV9fcmF3X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRUNPQlVTKTsKPiArCWZvcl9lYWNo X2Z3X2RvbWFpbl9tYXNrKGQsIGZ3X2RvbWFpbnMsIGRldl9wcml2LCBpZCkKPiArCQlmd19kb21h aW5fcHV0KGQpOwo+ICt9Cj4gICAKPiAtCWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVf cmVhZDMyKGRldl9wcml2LCBmb3JjZXdha2VfYWNrKSAmIEZPUkNFV0FLRV9LRVJORUwpLAo+IC0J CQkgICAgRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiAtCQlEUk1fRVJST1IoIlRpbWVkIG91 dCB3YWl0aW5nIGZvciBmb3JjZXdha2UgdG8gYWNrIHJlcXVlc3QuXG4iKTsKPiArc3RhdGljIHZv aWQKPiArZndfZG9tYWluc19wb3N0aW5nX3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmQ7 Cj4gKwlpbnQgaWQ7Cj4gKwo+ICsJLyogTm8gbmVlZCB0byBkbyBmb3IgYWxsLCBqdXN0IGRvIGZv ciBmaXJzdCBmb3VuZCAqLwo+ICsJZm9yX2VhY2hfZndfZG9tYWluKGQsIGRldl9wcml2LCBpZCkg ewo+ICsJCWZ3X2RvbWFpbl9wb3N0aW5nX3JlYWQoZCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK2Z3X2RvbWFpbnNfcmVzZXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBjb25zdCB1bnNpZ25lZCBmd19kb21haW5zKQo+ICt7Cj4gKwlzdHJ1 Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmQ7Cj4gKwlpbnQgaWQ7Cj4gKwo+ICsJ Zm9yX2VhY2hfZndfZG9tYWluX21hc2soZCwgZndfZG9tYWlucywgZGV2X3ByaXYsIGlkKQo+ICsJ CWZ3X2RvbWFpbl9yZXNldChkKTsKPiArCj4gKwlmd19kb21haW5zX3Bvc3RpbmdfcmVhZChkZXZf cHJpdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZ2VuNl9ndF93YWl0X2Zvcl90aHJlYWRf YzAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwkvKiB3L2EgZm9y IGEgc3BvcmFkaWMgcmVhZCByZXR1cm5pbmcgMCBieSB3YWl0aW5nIGZvciB0aGUgR1QKPiArCSAq IHRocmVhZCB0byB3YWtlIHVwLgo+ICsJICovCj4gKwlpZiAod2FpdF9mb3JfYXRvbWljX3VzKChf X3Jhd19pOTE1X3JlYWQzMihkZXZfcHJpdiwgR0VONl9HVF9USFJFQURfU1RBVFVTX1JFRykgJgo+ ICsJCQkJR0VONl9HVF9USFJFQURfU1RBVFVTX0NPUkVfTUFTSykgPT0gMCwgNTAwKSkKPiArCQlE Uk1fRVJST1IoIkdUIHRocmVhZCBzdGF0dXMgd2FpdCB0aW1lZCBvdXRcbiIpOwo+ICt9Cj4gICAK PiAtCS8qIFdhUnNGb3JjZXdha2VXYWl0VEMwOml2Yixoc3cgKi8KPiArc3RhdGljIHZvaWQgZndf ZG9tYWluc19nZXRfd2l0aF90aHJlYWRfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJCQkgICAgICBpbnQgZndfZG9tYWlucykKPiArewo+ICsJZndfZG9tYWlu c19nZXQoZGV2X3ByaXYsIGZ3X2RvbWFpbnMpOwo+ICsKPiArCS8qIFdhUnNGb3JjZXdha2VXYWl0 VEMwOnNuYixpdmIsaHN3LGJkdyx2bHYgKi8KPiAgIAlfX2dlbjZfZ3Rfd2FpdF9mb3JfdGhyZWFk X2MwKGRldl9wcml2KTsKPiAgIH0KPiAgIAo+IEBAIC0xMjgsMjcgKzE5OCwxMyBAQCBzdGF0aWMg dm9pZCBnZW42X2d0X2NoZWNrX2ZpZm9kYmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICAgCQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEdURklGT0RCRywgZ3RmaWZv ZGJnKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgICBpbnQgZndfZW5n aW5lKQo+ICtzdGF0aWMgdm9pZCBmd19kb21haW5zX3B1dF93aXRoX2ZpZm8oc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJICAgICBpbnQgZndfZG9tYWlucykKPiAgIHsK PiAtCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgRk9SQ0VXQUtFLCAwKTsKPiAtCS8qIHNv bWV0aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+IC0JX19yYXdf cG9zdGluZ19yZWFkKGRldl9wcml2LCBFQ09CVVMpOwo+ICsJZndfZG9tYWluc19wdXQoZGV2X3By aXYsIGZ3X2RvbWFpbnMpOwo+ICAgCWdlbjZfZ3RfY2hlY2tfZmlmb2RiZyhkZXZfcHJpdik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfcHV0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQlpbnQgZndfZW5naW5lKQo+IC17 Cj4gLQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRV9NVCwKPiAtCQkJICAg X01BU0tFRF9CSVRfRElTQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gLQkvKiBzb21ldGhpbmcg ZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0VfTVQgKi8KPiAtCV9fcmF3X3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgRUNPQlVTKTsKPiAtCj4gLQlpZiAoSVNfR0VONyhkZXZfcHJpdi0+ ZGV2KSkKPiAtCQlnZW42X2d0X2NoZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOwo+IC19Cj4gLQo+ICAg c3RhdGljIGludCBfX2dlbjZfZ3Rfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gICB7Cj4gICAJaW50IHJldCA9IDA7Cj4gQEAgLTE3NiwxNjUgKzIzMiwx NiBAQCBzdGF0aWMgaW50IF9fZ2VuNl9ndF93YWl0X2Zvcl9maWZvKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2 b2lkIHZsdl9mb3JjZV93YWtlX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAtewo+IC0JX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfVkxWLAo+ IC0JCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKDB4ZmZmZikpOwo+IC0JX19yYXdfaTkxNV93cml0 ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUFfVkxWLAo+IC0JCQkgICBfTUFTS0VEX0JJVF9E SVNBQkxFKDB4ZmZmZikpOwo+IC0JLyogc29tZXRoaW5nIGZyb20gc2FtZSBjYWNoZWxpbmUsIGJ1 dCAhRk9SQ0VXQUtFX1ZMViAqLwo+IC0JX19yYXdfcG9zdGluZ19yZWFkKGRldl9wcml2LCBGT1JD RVdBS0VfQUNLX1ZMVik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9fdmx2X2ZvcmNlX3dha2Vf Z2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCSBpbnQgZndfZW5n aW5lKQo+IC17Cj4gLQkvKiBDaGVjayBmb3IgUmVuZGVyIEVuZ2luZSAqLwo+IC0JaWYgKEZPUkNF V0FLRV9SRU5ERVIgJiBmd19lbmdpbmUpIHsKPiAtCQlpZiAod2FpdF9mb3JfYXRvbWljKChfX3Jh d19pOTE1X3JlYWQzMihkZXZfcHJpdiwKPiAtCQkJCQkJRk9SQ0VXQUtFX0FDS19WTFYpICYKPiAt CQkJCQkJRk9SQ0VXQUtFX0tFUk5FTCkgPT0gMCwKPiAtCQkJCQlGT1JDRVdBS0VfQUNLX1RJTUVP VVRfTVMpKQo+IC0JCQlEUk1fRVJST1IoIlRpbWVkIG91dDogUmVuZGVyIGZvcmNld2FrZSBvbGQg YWNrIHRvIGNsZWFyLlxuIik7Cj4gLQo+IC0JCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwg Rk9SQ0VXQUtFX1ZMViwKPiAtCQkJCSAgIF9NQVNLRURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VS TkVMKSk7Cj4gLQo+IC0JCWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRl dl9wcml2LAo+IC0JCQkJCQlGT1JDRVdBS0VfQUNLX1ZMVikgJgo+IC0JCQkJCQlGT1JDRVdBS0Vf S0VSTkVMKSwKPiAtCQkJCQlGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+IC0JCQlEUk1fRVJS T1IoIlRpbWVkIG91dDogd2FpdGluZyBmb3IgUmVuZGVyIHRvIGFjay5cbiIpOwo+IC0JfQo+IC0K PiAtCS8qIENoZWNrIGZvciBNZWRpYSBFbmdpbmUgKi8KPiAtCWlmIChGT1JDRVdBS0VfTUVESUEg JiBmd19lbmdpbmUpIHsKPiAtCQlpZiAod2FpdF9mb3JfYXRvbWljKChfX3Jhd19pOTE1X3JlYWQz MihkZXZfcHJpdiwKPiAtCQkJCQkJRk9SQ0VXQUtFX0FDS19NRURJQV9WTFYpICYKPiAtCQkJCQkJ Rk9SQ0VXQUtFX0tFUk5FTCkgPT0gMCwKPiAtCQkJCQlGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMp KQo+IC0JCQlEUk1fRVJST1IoIlRpbWVkIG91dDogTWVkaWEgZm9yY2V3YWtlIG9sZCBhY2sgdG8g Y2xlYXIuXG4iKTsKPiAtCj4gLQkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdB S0VfTUVESUFfVkxWLAo+IC0JCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEZPUkNFV0FLRV9LRVJO RUwpKTsKPiAtCj4gLQkJaWYgKHdhaXRfZm9yX2F0b21pYygoX19yYXdfaTkxNV9yZWFkMzIoZGV2 X3ByaXYsCj4gLQkJCQkJCUZPUkNFV0FLRV9BQ0tfTUVESUFfVkxWKSAmCj4gLQkJCQkJCUZPUkNF V0FLRV9LRVJORUwpLAo+IC0JCQkJCUZPUkNFV0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJCURS TV9FUlJPUigiVGltZWQgb3V0OiB3YWl0aW5nIGZvciBtZWRpYSB0byBhY2suXG4iKTsKPiAtCX0K PiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIF9fdmx2X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCQkgaW50IGZ3X2VuZ2luZSkKPiAgIHsKPiAt CS8qIENoZWNrIGZvciBSZW5kZXIgRW5naW5lICovCj4gLQlpZiAoRk9SQ0VXQUtFX1JFTkRFUiAm IGZ3X2VuZ2luZSkKPiAtCQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRV9W TFYsCj4gLQkJCQkJX01BU0tFRF9CSVRfRElTQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gKwlm d19kb21haW5zX3B1dChkZXZfcHJpdiwgZndfZW5naW5lKTsKPiArCWZ3X2RvbWFpbnNfcG9zdGlu Z19yZWFkKGRldl9wcml2KTsKPiAgIAo+IC0KPiAtCS8qIENoZWNrIGZvciBNZWRpYSBFbmdpbmUg Ki8KPiAtCWlmIChGT1JDRVdBS0VfTUVESUEgJiBmd19lbmdpbmUpCj4gLQkJX19yYXdfaTkxNV93 cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUFfVkxWLAo+IC0JCQkJX01BU0tFRF9CSVRf RElTQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gLQo+IC0JLyogc29tZXRoaW5nIGZyb20gc2Ft ZSBjYWNoZWxpbmUsIGJ1dCAhRk9SQ0VXQUtFX1ZMViAqLwo+IC0JX19yYXdfcG9zdGluZ19yZWFk KGRldl9wcml2LCBGT1JDRVdBS0VfQUNLX1ZMVik7Cj4gICAJaWYgKCFJU19DSEVSUllWSUVXKGRl dl9wcml2LT5kZXYpKQo+ICAgCQlnZW42X2d0X2NoZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOwo+ICAg fQo+ICAgCj4gLXN0YXRpYyB2b2lkIF9fZ2VuOV9ndF9mb3JjZV93YWtlX210X3Jlc2V0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JX19yYXdfaTkxNV93cml0ZTMy KGRldl9wcml2LCBGT1JDRVdBS0VfUkVOREVSX0dFTjksCj4gLQkJCV9NQVNLRURfQklUX0RJU0FC TEUoMHhmZmZmKSk7Cj4gLQo+IC0JX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdB S0VfTUVESUFfR0VOOSwKPiAtCQkJX01BU0tFRF9CSVRfRElTQUJMRSgweGZmZmYpKTsKPiAtCj4g LQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRV9CTElUVEVSX0dFTjksCj4g LQkJCV9NQVNLRURfQklUX0RJU0FCTEUoMHhmZmZmKSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk Cj4gLV9fZ2VuOV9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIGludCBmd19lbmdpbmUpCj4gLXsKPiAtCS8qIENoZWNrIGZvciBSZW5kZXIgRW5naW5lICov Cj4gLQlpZiAoRk9SQ0VXQUtFX1JFTkRFUiAmIGZ3X2VuZ2luZSkgewo+IC0JCWlmICh3YWl0X2Zv cl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LAo+IC0JCQkJCQlGT1JDRVdBS0Vf QUNLX1JFTkRFUl9HRU45KSAmCj4gLQkJCQkJCUZPUkNFV0FLRV9LRVJORUwpID09IDAsCj4gLQkJ CQkJRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiAtCQkJRFJNX0VSUk9SKCJUaW1lZCBvdXQ6 IFJlbmRlciBmb3JjZXdha2Ugb2xkIGFjayB0byBjbGVhci5cbiIpOwo+IC0KPiAtCQlfX3Jhd19p OTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVJfR0VOOSwKPiAtCQkJCSAgIF9N QVNLRURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gLQo+IC0JCWlmICh3YWl0X2Zv cl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LAo+IC0JCQkJCQlGT1JDRVdBS0Vf QUNLX1JFTkRFUl9HRU45KSAmCj4gLQkJCQkJCUZPUkNFV0FLRV9LRVJORUwpLAo+IC0JCQkJCUZP UkNFV0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJCURSTV9FUlJPUigiVGltZWQgb3V0OiB3YWl0 aW5nIGZvciBSZW5kZXIgdG8gYWNrLlxuIik7Cj4gLQl9Cj4gLQo+IC0JLyogQ2hlY2sgZm9yIE1l ZGlhIEVuZ2luZSAqLwo+IC0JaWYgKEZPUkNFV0FLRV9NRURJQSAmIGZ3X2VuZ2luZSkgewo+IC0J CWlmICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LAo+IC0JCQkJ CQlGT1JDRVdBS0VfQUNLX01FRElBX0dFTjkpICYKPiAtCQkJCQkJRk9SQ0VXQUtFX0tFUk5FTCkg PT0gMCwKPiAtCQkJCQlGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+IC0JCQlEUk1fRVJST1Io IlRpbWVkIG91dDogTWVkaWEgZm9yY2V3YWtlIG9sZCBhY2sgdG8gY2xlYXIuXG4iKTsKPiAtCj4g LQkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUFfR0VOOSwKPiAt CQkJCSAgIF9NQVNLRURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gLQo+IC0JCWlm ICh3YWl0X2Zvcl9hdG9taWMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LAo+IC0JCQkJCQlG T1JDRVdBS0VfQUNLX01FRElBX0dFTjkpICYKPiAtCQkJCQkJRk9SQ0VXQUtFX0tFUk5FTCksCj4g LQkJCQkJRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiAtCQkJRFJNX0VSUk9SKCJUaW1lZCBv dXQ6IHdhaXRpbmcgZm9yIE1lZGlhIHRvIGFjay5cbiIpOwo+IC0JfQo+IC0KPiAtCS8qIENoZWNr IGZvciBCbGl0dGVyIEVuZ2luZSAqLwo+IC0JaWYgKEZPUkNFV0FLRV9CTElUVEVSICYgZndfZW5n aW5lKSB7Cj4gLQkJaWYgKHdhaXRfZm9yX2F0b21pYygoX19yYXdfaTkxNV9yZWFkMzIoZGV2X3By aXYsCj4gLQkJCQkJCUZPUkNFV0FLRV9BQ0tfQkxJVFRFUl9HRU45KSAmCj4gLQkJCQkJCUZPUkNF V0FLRV9LRVJORUwpID09IDAsCj4gLQkJCQkJRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiAt CQkJRFJNX0VSUk9SKCJUaW1lZCBvdXQ6IEJsaXR0ZXIgZm9yY2V3YWtlIG9sZCBhY2sgdG8gY2xl YXIuXG4iKTsKPiAtCj4gLQkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0Vf QkxJVFRFUl9HRU45LAo+IC0JCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEZPUkNFV0FLRV9LRVJO RUwpKTsKPiAtCj4gLQkJaWYgKHdhaXRfZm9yX2F0b21pYygoX19yYXdfaTkxNV9yZWFkMzIoZGV2 X3ByaXYsCj4gLQkJCQkJCUZPUkNFV0FLRV9BQ0tfQkxJVFRFUl9HRU45KSAmCj4gLQkJCQkJCUZP UkNFV0FLRV9LRVJORUwpLAo+IC0JCQkJCUZPUkNFV0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJ CURSTV9FUlJPUigiVGltZWQgb3V0OiB3YWl0aW5nIGZvciBCbGl0dGVyIHRvIGFjay5cbiIpOwo+ IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1fX2dlbjlfZm9yY2Vfd2FrZV9wdXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgZndfZW5naW5lKQo+IC17Cj4gLQkv KiBDaGVjayBmb3IgUmVuZGVyIEVuZ2luZSAqLwo+IC0JaWYgKEZPUkNFV0FLRV9SRU5ERVIgJiBm d19lbmdpbmUpCj4gLQkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfUkVO REVSX0dFTjksCj4gLQkJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNFV0FLRV9LRVJORUwpKTsK PiAtCj4gLQkvKiBDaGVjayBmb3IgTWVkaWEgRW5naW5lICovCj4gLQlpZiAoRk9SQ0VXQUtFX01F RElBICYgZndfZW5naW5lKQo+IC0JCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgRk9SQ0VX QUtFX01FRElBX0dFTjksCj4gLQkJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNFV0FLRV9LRVJO RUwpKTsKPiAtCj4gLQkvKiBDaGVjayBmb3IgQmxpdHRlciBFbmdpbmUgKi8KPiAtCWlmIChGT1JD RVdBS0VfQkxJVFRFUiAmIGZ3X2VuZ2luZSkKPiAtCQlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3By aXYsIEZPUkNFV0FLRV9CTElUVEVSX0dFTjksCj4gLQkJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEZP UkNFV0FLRV9LRVJORUwpKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGdlbjZfZm9yY2Vfd2Fr ZV90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbiA9ICh2b2lkICopYXJnOwo+IEBAIC0zNTgsMjggKzI2 NSwyMCBAQCB2b2lkIGludGVsX3VuY29yZV9mb3JjZXdha2VfcmVzZXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgYm9vbCByZXN0b3JlKQo+ICAgCXN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2RvbWFpbiAqZG9tYWluOwo+ICAgCWludCBpZDsKPiAgIAo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICAgCS8qIEhvbGQgdW5jb3JlLmxv Y2sgYWNyb3NzIHJlc2V0IHRvIHByZXZlbnQgYW55IHJlZ2lzdGVyIGFjY2Vzcwo+ICAgCSAqIHdp dGggZm9yY2V3YWtlIG5vdCBzZXQgY29ycmVjdGx5Cj4gICAJICovCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gICAKPiAgIAlmb3JfZWFj aF9md19kb21haW4oZG9tYWluLCBkZXZfcHJpdiwgaWQpCj4gICAJCWlmIChkb21haW4tPndha2Vf Y291bnQpCj4gICAJCQlmdyB8PSAxIDw8IGlkOwo+ICAgCj4gKwkvKiBEb24ndCBzdG9wIHRoZSB0 aW1lciwganVzdCB0dXJuIGRvbWFpbnMgb2ZmIGZvciByZXNldCAqLwo+ICAgCWlmIChmdykKPiAg IAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwgZncpOwo+ ICAgCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpKQo+IC0JCXZsdl9mb3JjZV93YWtlX3Jlc2V0 KGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElTX0dFTjYoZGV2KSB8fCBJU19HRU43KGRldikpCj4g LQkJX19nZW42X2d0X2ZvcmNlX3dha2VfcmVzZXQoZGV2X3ByaXYpOwo+IC0KPiAtCWlmIChJU19J VllCUklER0UoZGV2KSB8fCBJU19IQVNXRUxMKGRldikgfHwgSVNfQlJPQURXRUxMKGRldikpCj4g LQkJX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfcmVzZXQoZGV2X3ByaXYpOwo+IC0KPiAtCWlmIChJ U19HRU45KGRldikpCj4gLQkJX19nZW45X2d0X2ZvcmNlX3dha2VfbXRfcmVzZXQoZGV2X3ByaXYp Owo+ICsJZndfZG9tYWluc19yZXNldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gICAKPiAg IAlpZiAocmVzdG9yZSkgeyAvKiBJZiByZXNldCB3aXRoIGEgdXNlciBmb3JjZXdha2UsIHRyeSB0 byByZXN0b3JlICovCj4gICAJCWlmIChmdykKPiBAQCAtNDg4LDcgKzM4Nyw3IEBAIHZvaWQgZ2Vu Nl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g ICAJCQljb250aW51ZTsKPiAgIAo+ICAgCQlkb21haW4tPndha2VfY291bnQrKzsKPiAtCQltb2Rf dGltZXJfcGlubmVkKCZkb21haW4tPnRpbWVyLCBqaWZmaWVzICsgMSk7Cj4gKwkJZndfZG9tYWlu X2FybV90aW1lcihkb21haW4pOwo+ICAgCX0KPiAgIAo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+IEBAIC00OTcsMTIgKzM5Niwx MiBAQCB2b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAgdm9pZCBhc3NlcnRfZm9yY2Vfd2FrZV9pbmFjdGl2ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX3VuY29yZV9m b3JjZXdha2VfZG9tYWluICpkb21haW47Cj4gLQlpbnQgaTsKPiArCWludCBpZDsKPiAgIAo+ICAg CWlmICghZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCkKPiAgIAkJcmV0dXJu Owo+ICAgCj4gLQlmb3JfZWFjaF9md19kb21haW4oZG9tYWluLCBkZXZfcHJpdiwgaSkKPiArCWZv cl9lYWNoX2Z3X2RvbWFpbihkb21haW4sIGRldl9wcml2LCBpZCkKPiAgIAkJV0FSTl9PTihkb21h aW4tPndha2VfY291bnQpOwo+ICAgfQo+ICAgCj4gQEAgLTY3MywxOSArNTcyLDE5IEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBfX2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAgIAkJCQkgICAgdW5zaWduZWQgZndfZG9tYWlucykKPiAgIHsKPiAgIAlzdHJ1 Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPiAtCWludCBpOwo+ICsJ aW50IGlkOwo+ICAgCj4gICAJaWYgKFdBUk5fT04oIWZ3X2RvbWFpbnMpKQo+ICAgCQlyZXR1cm47 Cj4gICAKPiAgIAkvKiBJZGVhbGx5IEdDQyB3b3VsZCBiZSBjb25zdGFudC1mb2xkIGFuZCBlbGlt aW5hdGUgdGhpcyBsb29wICovCj4gLQlmb3JfZWFjaF9md19kb21haW5fbWFzayhkb21haW4sIGZ3 X2RvbWFpbnMsIGRldl9wcml2LCBpKSB7Cj4gKwlmb3JfZWFjaF9md19kb21haW5fbWFzayhkb21h aW4sIGZ3X2RvbWFpbnMsIGRldl9wcml2LCBpZCkgewo+ICAgCQlpZiAoZG9tYWluLT53YWtlX2Nv dW50KQo+IC0JCQlmd19kb21haW5zICY9IH4oMSA8PCBpKTsKPiArCQkJZndfZG9tYWlucyAmPSB+ KDEgPDwgaWQpOwo+ICAgCQllbHNlCj4gICAJCQlkb21haW4tPndha2VfY291bnQrKzsKPiAgIAo+ IC0JCW1vZF90aW1lcl9waW5uZWQoJmRvbWFpbi0+dGltZXIsIGppZmZpZXMgKyAxKTsKPiArCQlm d19kb21haW5fYXJtX3RpbWVyKGRvbWFpbik7Cj4gICAJfQo+ICAgCj4gICAJaWYgKGZ3X2RvbWFp bnMpCj4gQEAgLTEwMDEsMjcgKzkwMCw3NSBAQCBkbyB7IFwKPiAgIAlkZXZfcHJpdi0+dW5jb3Jl LmZ1bmNzLm1taW9fcmVhZHEgPSB4IyNfcmVhZDY0OyBcCj4gICB9IHdoaWxlICgwKQo+ICAgCj4g Kwo+ICtzdGF0aWMgdm9pZCBmd19kb21haW5faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gKwkJCSAgIHUzMiBkb21haW5faWQsIHUzMiByZWdfc2V0LCB1MzIgcmVnX2Fj aykKPiArewo+ICsJc3RydWN0IGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluICpkOwo+ICsK PiArCWlmIChXQVJOX09OKGRvbWFpbl9pZCA+PSBGV19ET01BSU5fSURfQ09VTlQpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlkID0gJmRldl9wcml2LT51bmNvcmUuZndfZG9tYWluW2RvbWFpbl9pZF07 Cj4gKwo+ICsJZC0+cmVnX3NldCA9IHJlZ19zZXQ7Cj4gKwlkLT5yZWdfYWNrID0gcmVnX2FjazsK PiArCj4gKwlpZiAoSVNfR0VONihkZXZfcHJpdikpIHsKPiArCQlkLT52YWxfcmVzZXQgPSAwOwo+ ICsJCWQtPnZhbF9zZXQgPSBGT1JDRVdBS0VfS0VSTkVMOwo+ICsJCWQtPnZhbF9jbGVhciA9IDA7 Cj4gKwl9IGVsc2Ugewo+ICsJCWQtPnZhbF9yZXNldCA9IF9NQVNLRURfQklUX0RJU0FCTEUoMHhm ZmZmKTsKPiArCQlkLT52YWxfc2V0ID0gX01BU0tFRF9CSVRfRU5BQkxFKEZPUkNFV0FLRV9LRVJO RUwpOwo+ICsJCWQtPnZhbF9jbGVhciA9IF9NQVNLRURfQklUX0RJU0FCTEUoRk9SQ0VXQUtFX0tF Uk5FTCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+ICsJCWQt PnJlZ19wb3N0ID0gRk9SQ0VXQUtFX0FDS19WTFY7Cj4gKwllbHNlIGlmIChJU19HRU42KGRldl9w cml2KSB8fCBJU19HRU43KGRldl9wcml2KSkKPiArCQlkLT5yZWdfcG9zdCA9IEVDT0JVUzsKPiAr CWVsc2UKPiArCQlkLT5yZWdfcG9zdCA9IDA7Cj4gKwo+ICsJZC0+aTkxNSA9IGRldl9wcml2Owo+ ICsJZC0+aWQgPSBkb21haW5faWQ7Cj4gKwo+ICsJc2V0dXBfdGltZXIoJmQtPnRpbWVyLCBnZW42 X2ZvcmNlX3dha2VfdGltZXIsICh1bnNpZ25lZCBsb25nKWQpOwo+ICsKPiArCWRldl9wcml2LT51 bmNvcmUuZndfZG9tYWlucyB8PSAoMSA8PCBkb21haW5faWQpOwo+ICt9Cj4gKwo+ICAgdm9pZCBp bnRlbF91bmNvcmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1 Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPiAtCWludCBpOwo+ICAg Cj4gICAJX19pbnRlbF91bmNvcmVfZWFybHlfc2FuaXRpemUoZGV2LCBmYWxzZSk7Cj4gICAKPiAg IAlpZiAoSVNfR0VOOShkZXYpKSB7Cj4gLQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93 YWtlX2dldCA9IF9fZ2VuOV9mb3JjZV93YWtlX2dldDsKPiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1 bmNzLmZvcmNlX3dha2VfcHV0ID0gX19nZW45X2ZvcmNlX3dha2VfcHV0Owo+IC0JCWRldl9wcml2 LT51bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9SRU5ERVIgfAo+IC0JCQlGT1JDRVdBS0Vf QkxJVFRFUiB8IEZPUkNFV0FLRV9NRURJQTsKPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZv cmNlX3dha2VfZ2V0ID0gZndfZG9tYWluc19nZXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5j cy5mb3JjZV93YWtlX3B1dCA9IGZ3X2RvbWFpbnNfcHV0Owo+ICsJCWZ3X2RvbWFpbl9pbml0KGRl dl9wcml2LCBGV19ET01BSU5fSURfUkVOREVSLAo+ICsJCQkgICAgICAgRk9SQ0VXQUtFX1JFTkRF Ul9HRU45LAo+ICsJCQkgICAgICAgRk9SQ0VXQUtFX0FDS19SRU5ERVJfR0VOOSk7Cj4gKwkJZndf ZG9tYWluX2luaXQoZGV2X3ByaXYsIEZXX0RPTUFJTl9JRF9CTElUVEVSLAo+ICsJCQkgICAgICAg Rk9SQ0VXQUtFX0JMSVRURVJfR0VOOSwKPiArCQkJICAgICAgIEZPUkNFV0FLRV9BQ0tfQkxJVFRF Ul9HRU45KTsKPiArCQlmd19kb21haW5faW5pdChkZXZfcHJpdiwgRldfRE9NQUlOX0lEX01FRElB LAo+ICsJCQkgICAgICAgRk9SQ0VXQUtFX01FRElBX0dFTjksIEZPUkNFV0FLRV9BQ0tfTUVESUFf R0VOOSk7Cj4gICAJfSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKPiAtCQlkZXZfcHJp di0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0ID0gX192bHZfZm9yY2Vfd2FrZV9nZXQ7Cj4g KwkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9IGZ3X2RvbWFpbnNfZ2V0 Owo+ICAgCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gX192bHZfZm9y Y2Vfd2FrZV9wdXQ7Cj4gLQkJZGV2X3ByaXYtPnVuY29yZS5md19kb21haW5zID0gRk9SQ0VXQUtF X1JFTkRFUiB8IEZPUkNFV0FLRV9NRURJQTsKPiArCQlmd19kb21haW5faW5pdChkZXZfcHJpdiwg RldfRE9NQUlOX0lEX1JFTkRFUiwKPiArCQkJICAgICAgIEZPUkNFV0FLRV9WTFYsIEZPUkNFV0FL RV9BQ0tfVkxWKTsKPiArCQlmd19kb21haW5faW5pdChkZXZfcHJpdiwgRldfRE9NQUlOX0lEX01F RElBLAo+ICsJCQkgICAgICAgRk9SQ0VXQUtFX01FRElBX1ZMViwgRk9SQ0VXQUtFX0FDS19NRURJ QV9WTFYpOwo+ICAgCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChk ZXYpKSB7Cj4gLQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9IF9fZ2Vu N19ndF9mb3JjZV93YWtlX210X2dldDsKPiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNl X3dha2VfcHV0ID0gX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfcHV0Owo+IC0JCWRldl9wcml2LT51 bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9SRU5ERVI7Cj4gKwkJZGV2X3ByaXYtPnVuY29y ZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9Cj4gKwkJCWZ3X2RvbWFpbnNfZ2V0X3dpdGhfdGhyZWFk X3N0YXR1czsKPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gZndf ZG9tYWluc19wdXQ7Cj4gKwkJZndfZG9tYWluX2luaXQoZGV2X3ByaXYsIEZXX0RPTUFJTl9JRF9S RU5ERVIsCj4gKwkJCSAgICAgICBGT1JDRVdBS0VfTVQsIEZPUkNFV0FLRV9BQ0tfSFNXKTsKPiAg IAl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXYpKSB7Cj4gICAJCXUzMiBlY29idXM7Cj4gICAK PiBAQCAtMTAzNCw0MCArOTgxLDMyIEBAIHZvaWQgaW50ZWxfdW5jb3JlX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiAgIAkJICogKGNvcnJlY3RseSkgaW50ZXJwcmV0ZWQgYnkgdGhlIHRl c3QgYmVsb3cgYXMgTVQKPiAgIAkJICogZm9yY2V3YWtlIGJlaW5nIGRpc2FibGVkLgo+ICAgCQkg Ki8KPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0ID0KPiArCQkJZndf ZG9tYWluc19nZXRfd2l0aF90aHJlYWRfc3RhdHVzOwo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVu Y3MuZm9yY2Vfd2FrZV9wdXQgPQo+ICsJCQlmd19kb21haW5zX3B1dF93aXRoX2ZpZm87Cj4gKwo+ ICsJCWZ3X2RvbWFpbl9pbml0KGRldl9wcml2LCBGV19ET01BSU5fSURfUkVOREVSLAo+ICsJCQkg ICAgICAgRk9SQ0VXQUtFX01ULCBGT1JDRVdBS0VfTVRfQUNLKTsKPiAgIAkJbXV0ZXhfbG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JCV9fZ2VuN19ndF9mb3JjZV93YWtlX210X2dldChkZXZf cHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwkJZndfZG9tYWluc19nZXRfd2l0aF90aHJlYWRfc3Rh dHVzKGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiAgIAkJZWNvYnVzID0gX19yYXdfaTkxNV9y ZWFkMzIoZGV2X3ByaXYsIEVDT0JVUyk7Cj4gLQkJX19nZW43X2d0X2ZvcmNlX3dha2VfbXRfcHV0 KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCQlmd19kb21haW5zX3B1dF93aXRoX2ZpZm8o ZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICAgCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiAgIAo+IC0JCWlmIChlY29idXMgJiBGT1JDRVdBS0VfTVRfRU5BQkxFKSB7Cj4g LQkJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPQo+IC0JCQkJX19nZW43 X2d0X2ZvcmNlX3dha2VfbXRfZ2V0Owo+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNl X3dha2VfcHV0ID0KPiAtCQkJCV9fZ2VuN19ndF9mb3JjZV93YWtlX210X3B1dDsKPiAtCQl9IGVs c2Ugewo+ICsJCWlmICghKGVjb2J1cyAmIEZPUkNFV0FLRV9NVF9FTkFCTEUpKSB7Cj4gICAJCQlE Uk1fSU5GTygiTm8gTVQgZm9yY2V3YWtlIGF2YWlsYWJsZSBvbiBJdnlicmlkZ2UsIHRoaXMgY2Fu IHJlc3VsdCBpbiBpc3N1ZXNcbiIpOwo+ICAgCQkJRFJNX0lORk8oIndoZW4gdXNpbmcgdmJsYW5r LXN5bmNlZCBwYXJ0aWFsIHNjcmVlbiB1cGRhdGVzLlxuIik7Cj4gLQkJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPQo+IC0JCQkJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0 Owo+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0KPiAtCQkJCV9f Z2VuNl9ndF9mb3JjZV93YWtlX3B1dDsKPiArCQkJZndfZG9tYWluX2luaXQoZGV2X3ByaXYsIEZX X0RPTUFJTl9JRF9SRU5ERVIsCj4gKwkJCQkgICAgICAgRk9SQ0VXQUtFLCBGT1JDRVdBS0VfQUNL KTsKPiAgIAkJfQo+IC0JCWRldl9wcml2LT51bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9S RU5ERVI7Cj4gICAJfSBlbHNlIGlmIChJU19HRU42KGRldikpIHsKPiAgIAkJZGV2X3ByaXYtPnVu Y29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9Cj4gLQkJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX2dl dDsKPiArCQkJZndfZG9tYWluc19nZXRfd2l0aF90aHJlYWRfc3RhdHVzOwo+ICAgCQlkZXZfcHJp di0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0KPiAtCQkJX19nZW42X2d0X2ZvcmNlX3dh a2VfcHV0Owo+IC0JCWRldl9wcml2LT51bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9SRU5E RVI7Cj4gLQl9Cj4gLQo+IC0JZm9yX2VhY2hfZndfZG9tYWluKGRvbWFpbiwgZGV2X3ByaXYsIGkp IHsKPiAtCQlkb21haW4tPmk5MTUgPSBkZXZfcHJpdjsKPiAtCQlkb21haW4tPmlkID0gaTsKPiAt Cj4gLQkJc2V0dXBfdGltZXIoJmRvbWFpbi0+dGltZXIsIGdlbjZfZm9yY2Vfd2FrZV90aW1lciwK PiAtCQkJICAgICh1bnNpZ25lZCBsb25nKWRvbWFpbik7Cj4gKwkJCWZ3X2RvbWFpbnNfcHV0X3dp dGhfZmlmbzsKPiArCQlmd19kb21haW5faW5pdChkZXZfcHJpdiwgRldfRE9NQUlOX0lEX1JFTkRF UiwKPiArCQkJICAgICAgIEZPUkNFV0FLRSwgRk9SQ0VXQUtFX0FDSyk7Cj4gICAJfQo+ICAgCj4g ICAJc3dpdGNoIChJTlRFTF9JTkZPKGRldiktPmdlbikgewo+CgpMb29rcyBmaW5lClJldmlld2Vk LWJ5OiBEZWVwYWsgUyA8ZGVlcGFrLnNAbGludXguaW50ZWwuY29tPgoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==