From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATH i-g-t 2/2] tests: add slice power programming test Date: Wed, 5 Sep 2018 15:25:44 +0100 Message-ID: <20180905142544.3381-3-tvrtko.ursulin@linux.intel.com> References: <20180905142544.3381-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by gabe.freedesktop.org (Postfix) with ESMTPS id 805F46E4C5 for ; Wed, 5 Sep 2018 14:25:53 +0000 (UTC) Received: by mail-wr1-x444.google.com with SMTP id 20-v6so7859486wrb.12 for ; Wed, 05 Sep 2018 07:25:53 -0700 (PDT) In-Reply-To: <20180905142544.3381-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZpZXMgdGhhdCB0aGUga2VybmVsIHByb2dyYW1zIHNsaWNlcyBjb3JyZWN0bHkgYmFzZWQg YnkgcmVhZGluZwp0aGUgdmFsdWUgb2YgUFdSX0NMS19TVEFURSByZWdpc3RlciBvciBNSV9TRVRf UFJFRElDQVRFIG9uIHBsYXRmb3JtcwpiZWZvcmUgQ2Fubm9ubGFrZS4KCnYyOiBBZGQgc3Vic2xp Y2UgdGVzdHMgKExpb25lbCkKICAgIFVzZSBNSV9TRVRfUFJFRElDQVRFIGZvciBmdXJ0aGVyIHZl cmlmaWNhdGlvbiB3aGVuIGF2YWlsYWJsZSAoTGlvbmVsKQoKdjM6IFJlbmFtZSB0byBnZW1fY3R4 X3JwY3MgKExpb25lbCkKCnY0OiBVcGRhdGUga2VybmVsIEFQSSAoTGlvbmVsKQogICAgQWRkIDAg dmFsdWUgdGVzdCAoTGlvbmVsKQogICAgRXhlcmNpc2UgaW52YWxpZCB2YWx1ZXMgKExpb25lbCkK CnY1OiBBZGQgcGVyZiB0ZXN0cyAoTGlvbmVsKQoKdjY6IEFkZCBuZXcgc3lzZnMgZW50cnkgdGVz dHMgKExpb25lbCkKCnY3OiBUZXN0IHJzdmQgZmllbGRzCiAgICBVcGRhdGUgZm9yIGtlcm5lbCBz ZXJpZXMgY2hhbmdlcwoKdjg6IERyb3AgdGVzdF9ub19zc2V1X3N1cHBvcnQoKSB0ZXN0IChLZWx2 aW4pCiAgICBEcm9wIGRybV9pbnRlbF8qKCkgYXBpcyAoQ2hyaXMpCgp2OTogYnkgQ2hyaXM6CiAg ICBEcm9wIGFsbCBkb19pb2N0bC9kb19pb2N0bF9lcnIoKQogICAgVXNlIGdlbV9jb250ZXh0X1tn c11ldF9wYXJhbSgpCiAgICBVc2UgZ2VtX3JlYWQoKSBpbnN0ZWFkIG9mIG1hcHBpbmcgbWVtb3J5 CiAgICBieSBMaW9uZWw6CiAgICBUZXN0IGR5bmFtaWMgc3NldSBvbi9vZmYgbW9yZQoKVHZydGtv IFVyc3VsaW46Cgp2MTA6CiAqIFZhcmlvdXMgc3R5bGUgdHdlYWtzIGFuZCByZWZhY3RvcmluZ3Mu CiAqIE5ldyB0ZXN0IGNvdmVyYWdlLgoKU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4g PGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLmFtICAg ICAgfCAgICAxICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgICAxICsKIHRlc3RzL2dlbV9j dHhfcGFyYW0uYyAgfCAgICA0ICstCiB0ZXN0cy9nZW1fY3R4X3NzZXUuYyAgIHwgMTA0MCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgIHwgICAgNyArCiA1IGZpbGVzIGNoYW5nZWQsIDEwNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dlbV9jdHhfc3NldS5jCgpkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBlZTVhN2M1 ZTgzYjguLjZiNjdiZDJjYzE3YSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIv dGVzdHMvTWFrZWZpbGUuYW0KQEAgLTEwNyw2ICsxMDcsNyBAQCBnZW1fY2xvc2VfcmFjZV9DRkxB R1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2Nsb3NlX3JhY2VfTERBREQg PSAkKExEQUREKSAtbHB0aHJlYWQKIGdlbV9jdHhfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdT KSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fY3R4X3RocmFzaF9MREFERCA9ICQoTERBREQpIC1scHRo cmVhZAorZ2VtX2N0eF9zc2V1X0xEQUREID0gJChMREFERCkgJCh0b3BfYnVpbGRkaXIpL2xpYi9s aWJpZ3RfcGVyZi5sYQogZ2VtX2V4ZWNfcGFyYWxsZWxfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQo VEhSRUFEX0NGTEFHUykKIGdlbV9leGVjX3BhcmFsbGVsX0xEQUREID0gJChMREFERCkgLWxwdGhy ZWFkCiBnZW1fZmVuY2VfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxB R1MpCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwppbmRleCBjODQ5MzNmMWQ5NzEuLmY4ZjJjOGQ2N2Q3MiAxMDA2NDQKLS0tIGEvdGVz dHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC01Niw2 ICs1Niw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWdlbV9jdHhfZXhlYyBcCiAJZ2VtX2N0eF9pc29s YXRpb24gXAogCWdlbV9jdHhfcGFyYW0gXAorCWdlbV9jdHhfc3NldSBcCiAJZ2VtX2N0eF9zd2l0 Y2ggXAogCWdlbV9jdHhfdGhyYXNoIFwKIAlnZW1fZG91YmxlX2lycV9sb29wIFwKZGlmZiAtLWdp dCBhL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYyBiL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYwppbmRleCBj NDZmZDcwOWIwZDcuLmFmMWFmZWFhMmYyZiAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX2N0eF9wYXJh bS5jCisrKyBiL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYwpAQCAtMjk0LDExICsyOTQsMTMgQEAgaWd0 X21haW4KIAkJCXNldF9wcmlvcml0eShmZCk7CiAJfQogCisJLyogSTkxNV9DT05URVhUX1BBUkFN X1NTRVUgdGVzdHMgYXJlIGxvY2F0ZWQgaW4gZ2VtX2N0eF9zc2V1LmMgKi8KKwogCS8qIE5PVEU6 IFRoaXMgdGVzdGNhc2UgaW50ZW50aW9uYWxseSB0ZXN0cyBmb3IgdGhlIG5leHQgZnJlZSBwYXJh bWV0ZXIKIAkgKiB0byBjYXRjaCBBQkkgZXh0ZW5zaW9ucy4gRG9uJ3QgImZpeCIgdGhpcyB0ZXN0 Y2FzZSB3aXRob3V0IGFkZGluZyBhbGwKIAkgKiB0aGUgdGVzdHMgZm9yIHRoZSBuZXcgcGFyYW0g Zmlyc3QuCiAJICovCi0JYXJnLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1BSSU9SSVRZICsg MTsKKwlhcmcucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSArIDE7CiAKIAlpZ3Rfc3Vi dGVzdCgiaW52YWxpZC1wYXJhbS1nZXQiKSB7CiAJCWFyZy5jdHhfaWQgPSBjdHg7CmRpZmYgLS1n aXQgYS90ZXN0cy9nZW1fY3R4X3NzZXUuYyBiL3Rlc3RzL2dlbV9jdHhfc3NldS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWY4MTY4MThlM2RlCi0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMvZ2VtX2N0eF9zc2V1LmMKQEAgLTAsMCArMSwxMDQwIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgTGlv bmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgorICoKKyAqLwor CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxm Y250bC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRlICJpZ3RfZHVtbXls b2FkLmgiCisjaW5jbHVkZSAiaWd0X3BlcmYuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBj b250ZXh0IHJlbmRlciBwb3dlcmdhdGluZyBwcm9ncmFtbWluZy4iKTsKKworI2RlZmluZSBNSV9T VE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQgPDwgMjMpCisKKyNkZWZpbmUgTUlfU0VUX1BSRURJQ0FU RSAgICAgICgweDEgPDwgMjMpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVIg ICAgICAgICAoMCkKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFQyX0NMRUFS ICgxKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9OT09QX1JFU1VMVDJfU0VUICAgKDIpCisj ZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVTVUxUX0NMRUFSICAoMykKKyNkZWZpbmUg IE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFRfU0VUICAgICg0KQorI2RlZmluZSAgTUlfU0VU X1BSRURJQ0FURV8xX1NMSUNFUyAgICAgICAgICAgKDUpCisjZGVmaW5lICBNSV9TRVRfUFJFRElD QVRFXzJfU0xJQ0VTICAgICAgICAgICAoNikKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfM19T TElDRVMgICAgICAgICAgICg3KQorCisjZGVmaW5lIEdFTjhfUl9QV1JfQ0xLX1NUQVRFCQkweDIw QzgKKyNkZWZpbmUgICBHRU44X1JQQ1NfRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBHRU44 X1JQQ1NfU19DTlRfRU5BQkxFCSgxIDw8IDE4KQorI2RlZmluZSAgIEdFTjhfUlBDU19TX0NOVF9T SElGVAkJMTUKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfTUFTSwkJKDB4NyA8PCBHRU44X1JQ Q1NfU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOMTFfUlBDU19TX0NOVF9TSElGVAkxMgorI2Rl ZmluZSAgIEdFTjExX1JQQ1NfU19DTlRfTUFTSwkJKDB4M2YgPDwgR0VOMTFfUlBDU19TX0NOVF9T SElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX0VOQUJMRQkoMSA8PCAxMSkKKyNkZWZp bmUgICBHRU44X1JQQ1NfU1NfQ05UX1NISUZUCTgKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05U X01BU0sJCSgweDcgPDwgR0VOOF9SUENTX1NTX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQ Q1NfRVVfTUFYX1NISUZUCTQKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUFYX01BU0sJCSgweGYg PDwgR0VOOF9SUENTX0VVX01BWF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX1NI SUZUCTAKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX01BU0sJCSgweGYgPDwgR0VOOF9SUENT X0VVX01JTl9TSElGVCkKKworI2RlZmluZSBSQ1NfVElNRVNUQU1QICgweDIwMDAgKyAweDM1OCkK Kworc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2dlbl9fLCBfX2ludGVsX2RldmlkX187Citz dGF0aWMgdWludDY0X3QgX19zbGljZV9tYXNrX18sIF9fc3Vic2xpY2VfbWFza19fOworc3RhdGlj IHVuc2lnbmVkIGludCBfX3NsaWNlX2NvdW50X18sIF9fc3Vic2xpY2VfY291bnRfXzsKKworc3Rh dGljIHVpbnQ2NF90IG1hc2tfbWludXNfb25lKHVpbnQ2NF90IG1hc2spCit7CisJdW5zaWduZWQg aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihtYXNrKSAqIDggLSAxKTsgaSsrKSB7 CisJCWlmICgoMVVMTCA8PCBpKSAmIG1hc2spCisJCQlyZXR1cm4gbWFzayAmIH4oMVVMTCA8PCBp KTsKKwl9CisKKwlpZ3RfYXNzZXJ0KDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0 X3QgbWFza19wbHVzX29uZSh1aW50NjRfdCBtYXNrKQoreworCXVuc2lnbmVkIGludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykgKiA4IC0gMSk7IGkrKykgeworCQlpZiAoKCgx VUxMIDw8IGkpICYgbWFzaykgPT0gMCkKKwkJCXJldHVybiBtYXNrIHwgKDFVTEwgPDwgaSk7CisJ fQorCisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IG1h c2tfbWludXModWludDY0X3QgbWFzaywgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQltYXNrID0gbWFza19taW51c19vbmUobWFzayk7CisK KwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tfcGx1cyh1aW50NjRfdCBt YXNrLCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBp KyspCisJCW1hc2sgPSBtYXNrX3BsdXNfb25lKG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisK K3N0YXRpYyB1aW50MzJfdCAqCitmaWxsX3JlbG9jYXRpb24odWludDMyX3QgKmJhdGNoLAorCQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAorCQl1aW50MzJfdCBn ZW1faGFuZGxlLCB1aW50MzJfdCBkZWx0YSwgLyogaW4gYnl0ZXMgKi8KKwkJdWludDMyX3Qgb2Zm c2V0LCAvKiBpbiBkd29yZHMgKi8KKwkJdWludDMyX3QgcmVhZF9kb21haW5zLCB1aW50MzJfdCB3 cml0ZV9kb21haW5zKQoreworCXJlbG9jLT50YXJnZXRfaGFuZGxlID0gZ2VtX2hhbmRsZTsKKwly ZWxvYy0+ZGVsdGEgPSBkZWx0YTsKKwlyZWxvYy0+b2Zmc2V0ID0gb2Zmc2V0ICogc2l6ZW9mKHVp bnQzMl90KTsKKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKKwlyZWxvYy0+cmVhZF9kb21h aW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW5z OworCisJKmJhdGNoKysgPSBkZWx0YTsKKwkqYmF0Y2grKyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7 Cit9CisKKworc3RhdGljIHVpbnQzMl90CityZWFkX3JwY3NfcmVnKGludCBmZCwgdWludDMyX3Qg Y3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZXMsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geyB9OworCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY3NbMl07CisJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgb2JqWzJdOworCXVpbnQzMl90ICpiYXRjaCwgKmIsIGRhdGFbMl07CisJ dW5zaWduZWQgaW50IG5fcmVsb2NzID0gMDsKKwl1aW50MzJfdCBycGNzOworCisJbWVtc2V0KG9i aiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKKwlvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisKKwliYXRjaCA9IGIg PQorCSAgICAgIGdlbV9tbWFwX19jcHUoZmQsIG9ialsxXS5oYW5kbGUsIDAsIDQwOTYsIFBST1Rf UkVBRCB8IFBST1RfV1JJVEUpOworCisJaWYgKGV4cGVjdGVkX3NsaWNlcyAhPSAwICYmIF9faW50 ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9QUkVESUNBVEUgfCAoMSAtIDEpIHwKKwkJ ICAgICAgIChNSV9TRVRfUFJFRElDQVRFXzFfU0xJQ0VTICsgZXhwZWN0ZWRfc2xpY2VzIC0gMSk7 CisKKwkqYisrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKTsKKwkqYisrID0gUkNT X1RJTUVTVEFNUDsKKwliID0gZmlsbF9yZWxvY2F0aW9uKGIsICZyZWxvY3Nbbl9yZWxvY3MrK10s IG9ialswXS5oYW5kbGUsCisJCQkgICAgMCwgYiAtIGJhdGNoLAorCQkJICAgIEk5MTVfR0VNX0RP TUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOworCisJKmIrKyA9IE1JX1NUT1JF X1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisJKmIrKyA9IEdFTjhfUl9QV1JfQ0xLX1NUQVRFOwor CWIgPSBmaWxsX3JlbG9jYXRpb24oYiwgJnJlbG9jc1tuX3JlbG9jcysrXSwgb2JqWzBdLmhhbmRs ZSwKKwkJCSAgICA0LCBiIC0gYmF0Y2gsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwg STkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CisKKwlpZiAoZXhwZWN0ZWRfc2xpY2VzICE9IDAgJiYg X19pbnRlbF9nZW5fXyA8IDEwKQorCQkqYisrID0gTUlfU0VUX1BSRURJQ0FURSB8ICgxIC0gMSkg fCBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVI7CisKKwkqYisrID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKworCWdlbV9tdW5tYXAoYmF0Y2gsIDQwOTYpOworCisJb2JqWzFdLnJlbG9jYXRpb25f Y291bnQgPSBuX3JlbG9jczsKKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihy ZWxvY3MpOworCisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwor CWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gQVJSQVlfU0laRShvYmopOworCWk5MTVfZXhlY2J1ZmZl cjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgY3R4KTsKKworCWdlbV9leGVjYnVmKGZkLCAmZXhl Y2J1Zik7CisKKwlpZiAoc3BpbikKKwkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOworCisJZ2Vt X3JlYWQoZmQsIG9ialswXS5oYW5kbGUsIDAsIGRhdGEsIHNpemVvZihkYXRhKSk7CisKKwlycGNz ID0gZGF0YVsxXTsKKworCWlndF9kZWJ1ZygicmNzX3RpbWVzdGFtcD0weCV4IHJwY3M9MHgleFxu IiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlnZW1fY2xvc2UoZmQsIG9ialswXS5oYW5kbGUpOwor CWdlbV9jbG9zZShmZCwgb2JqWzFdLmhhbmRsZSk7CisKKwlyZXR1cm4gcnBjczsKK30KKwordHlw ZWRlZiB1aW50MzJfdCAoKnJlYWRfc2xpY2VfY291bnRfZikoaW50IGZkLCB1aW50MzJfdCBjdHgs IHVpbnQzMl90IGV4cGVjdGVkLAorCQkJCSAgICAgICBpZ3Rfc3Bpbl90ICpzcGluKTsKKworc3Rh dGljIHJlYWRfc2xpY2VfY291bnRfZiBfX3JlYWRfc2xpY2VfY291bnQ7CisKK3N0YXRpYyB1aW50 MzJfdAorcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhw ZWN0ZWRfc2xpY2VfY291bnQpCit7CisJcmV0dXJuIF9fcmVhZF9zbGljZV9jb3VudChmZCwgY3R4 LCBleHBlY3RlZF9zbGljZV9jb3VudCwgTlVMTCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2Vu OF9yZWFkX3NsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3Rl ZF9zbGljZV9jb3VudCwKKwkJICAgICAgaWd0X3NwaW5fdCAqc3BpbikKK3sKKwlyZXR1cm4gKHJl YWRfcnBjc19yZWcoZmQsIGN0eCwgZXhwZWN0ZWRfc2xpY2VfY291bnQsIHNwaW4pICYKKwkJR0VO OF9SUENTX1NfQ05UX01BU0spID4+IEdFTjhfUlBDU19TX0NOVF9TSElGVDsKK30KKworc3RhdGlj IHVpbnQzMl90CitnZW4xMV9yZWFkX3NsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1 aW50MzJfdCBleHBlY3RlZF9zbGljZV9jb3VudCwKKwkJICAgICAgIGlndF9zcGluX3QgKnNwaW4p Cit7CisJcmV0dXJuIChyZWFkX3JwY3NfcmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50 LCBzcGluKSAmCisJCUdFTjExX1JQQ1NfU19DTlRfTUFTSykgPj4gR0VOMTFfUlBDU19TX0NOVF9T SElGVDsKK30KKworc3RhdGljIHVpbnQzMl90CityZWFkX3N1YnNsaWNlX2NvdW50KGludCBmZCwg dWludDMyX3QgY3R4KQoreworCXJldHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCAwLCBOVUxM KSAmIEdFTjhfUlBDU19TU19DTlRfTUFTSykgPj4KKwkgICAgICAgR0VOOF9SUENTX1NTX0NOVF9T SElGVDsKK30KKworc3RhdGljIGJvb2wKK2tlcm5lbF9oYXNfcGVyX2NvbnRleHRfc3NldV9zdXBw b3J0KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBz c2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7 IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJf cG9pbnRlcigmc3NldSkgfTsKKworCXJldHVybiBfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwg JmFyZykgPT0gMDsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfZ2V0X3NzZXVfbWFza3MoaW50 IGZkLCB1aW50MzJfdCBjdHgsCisJCSAgICAgICB1aW50NjRfdCAqc2xpY2VfbWFzaywKKwkJICAg ICAgIHVpbnQ2NF90ICpzdWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAg LmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0 b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZh cmcpOworCisJaWYgKHNsaWNlX21hc2spCisJCSpzbGljZV9tYXNrID0gc3NldS5zbGljZV9tYXNr OworCisJaWYgKHN1YnNsaWNlX21hc2spCisJCSpzdWJzbGljZV9tYXNrID0gc3NldS5zdWJzbGlj ZV9tYXNrOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9zZXRfc2xpY2VfbWFzayhpbnQgZmQs IHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc2xpY2VfbWFzaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZh bHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKTsKKwlzc2V1LnNsaWNlX21hc2sgPSBzbGljZV9tYXNrOworCWdlbV9jb250ZXh0 X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X3NldF9zdWJz bGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBzdWJzbGljZV9tYXNrKQor eworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkx NV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNp emVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwln ZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc3Vic2xpY2VfbWFzayA9IHN1 YnNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKK30KKworLyoK KyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzbGljZSBjb3VudC4KKyAqLworc3Rh dGljIHZvaWQKK3Rlc3Rfc2xpY2VfcGcoaW50IGZkLCB1aW50MzJfdCBwZ19zbGljZV9jb3VudCkK K3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51cyhfX3NsaWNlX21hc2tfXywg cGdfc2xpY2VfY291bnQpOworCXVuc2lnbmVkIGludCBzbGljZV9jb3VudCA9IF9fc2xpY2VfY291 bnRfXyAtIHBnX3NsaWNlX2NvdW50OworCXVpbnQ2NF90IHNsaWNlX21hc2s7CisJdWludDMyX3Qg Y3R4OworCisJaWd0X2Fzc2VydF9lcShzbGljZV9jb3VudCwgX19idWlsdGluX3BvcGNvdW50KHBn X3NsaWNlX21hc2spKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJY29udGV4 dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4LCBwZ19zbGljZV9tYXNrKTsKKwljb250ZXh0X2dldF9z c2V1X21hc2tzKGZkLCBjdHgsICZzbGljZV9tYXNrLCBOVUxMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBn X3NsaWNlX21hc2ssIHNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0IGZhbHNlIHBvc2l0aXZl cyB3aXRoIHByZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICogYmVmb3JlIEdlbjEwKS4K KwkgKi8KKwlpZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xp Y2VfY291bnQoZmQsIGN0eCwgX19zbGljZV9jb3VudF9fKSwgMCk7CisKKwlpZ3RfYXNzZXJ0X2Vx KHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgMCksIHNsaWNlX2NvdW50KTsKKworCWdlbV9jb250 ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCB3ZSBjYW4gcHJv Z3JhbSB0aGUgc3Vic2xpY2UgY291bnQuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3N1YnNsaWNl X3BnKGludCBmZCwgaW50IHBnX3N1YnNsaWNlX2NvdW50KQoreworCXVpbnQ2NF90IHBnX3N1YnNs aWNlX21hc2sgPQorCQltYXNrX21pbnVzKF9fc3Vic2xpY2VfbWFza19fLCBwZ19zdWJzbGljZV9j b3VudCk7CisJdW5zaWduZWQgaW50IHN1YnNsaWNlX2NvdW50ID0gX19zdWJzbGljZV9jb3VudF9f IC0gcGdfc3Vic2xpY2VfY291bnQ7CisJdWludDY0X3Qgc3Vic2xpY2VfbWFzazsKKwl1aW50MzJf dCBjdHg7CisKKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX2NvdW50LCBfX2J1aWx0aW5fcG9wY291 bnQocGdfc3Vic2xpY2VfbWFzaykpOworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsK Kwljb250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGZkLCBjdHgsIHBnX3N1YnNsaWNlX21hc2spOwor CWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgTlVMTCwgJnN1YnNsaWNlX21hc2spOwor CWlndF9hc3NlcnRfZXEocGdfc3Vic2xpY2VfbWFzaywgc3Vic2xpY2VfbWFzayk7CisKKwlpZ3Rf YXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eCksIHN1YnNsaWNlX2NvdW50KTsK KworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKK3N0YXRpYyBib29sIGhhc19l bmdpbmUoaW50IGZkLCB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBpbnN0YW5jZSkK K3sKKwlpbnQgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3Ms IGluc3RhbmNlKSk7CisKKwlpZiAocG11ID49IDApCisJCWNsb3NlKHBtdSk7CisKKwlyZXR1cm4g cG11ID49IDA7Cit9CisKK3N0YXRpYyBib29sCitlbmdpbmVfc3VwcG9ydHNfc3NldShpbnQgZmQs IHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCXJldHVybiBf X2ludGVsX2dlbl9fID49IDggJiYKKwkgICAgICAgY2xhc3MgPT0gSTkxNV9FTkdJTkVfQ0xBU1Nf UkVOREVSICYmIGluc3RhbmNlID09IDAgPworCSAgICAgICB0cnVlIDogZmFsc2U7Cit9CisKKy8q CisgKiBWZXJpZnkgdGhhdCBpbnZhbGlkIGVuZ2luZXMgYXJlIHJlamVjdGVkIGFuZCB2YWxpZCBv bmVzIGFyZSBhY2NlcHRlZC4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9lbmdpbmVzKGludCBmZCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSkgfTsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3RhbmNlOworCWludCBsYXN0 X3dpdGhfZW5naW5lczsKKworCS8qIGdldF9wYXJhbSAqLworCisJc3NldS5pbnN0YW5jZSA9IC0x OyAvKiBBc3N1bWVkIGludmFsaWQuICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dl dF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSUQ7IC8qIEJvdGggaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1Lmluc3RhbmNl ID0gMDsgLyogQ2xhc3MgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf Z2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5F X0NMQVNTX1JFTkRFUjsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9 IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNl IDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFz czsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4 dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGlu c3RhbmNlKSkgeworCQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCQlsYXN0X3dpdGhfZW5n aW5lcyA9IGNsYXNzOworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZB TCk7CisJCQkJaWYgKGluc3RhbmNlID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgaW5zdGFuY2UgaG9s ZXMuICovCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGNsYXNzIC0gbGFzdF93aXRo X2VuZ2luZXMgPiA4KSAvKiBTa2lwIG92ZXIgc29tZSBjbGFzcyBob2xlcy4gKi8KKwkJCWJyZWFr OworCX0KKworCS8qCisJICogR2V0IHNvbWUgcHJvcGVyIHZhbHVlcyBiZWZvcmUgdHJ5aW5nIHRv IHJlcHJvZ3JhbSB0aGVtIG9udG8KKwkgKiBhbiBpbnZhbGlkIGVuZ2luZS4KKwkgKi8KKwlzc2V1 LmNsYXNzID0gMDsKKwlzc2V1Lmluc3RhbmNlID0gMDsKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0o ZmQsICZhcmcpOworCisJLyogc2V0X3BhcmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8q IEFzc3VtZWQgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3Bh cmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xB U1NfSU5WQUxJRDsgLyogQm90aCBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAw OyAvKiBDbGFzcyBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRf cGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJ Zm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9 IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUu Y2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0g X19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShm ZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWlmIChlbmdpbmVfc3VwcG9ydHNfc3NldShmZCwg Y2xhc3MsIGluc3RhbmNlKSkKKwkJCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQkJCWVsc2UK KwkJCQkJaWd0X2Fzc2VydF9lcShyZXQsIC1FTk9ERVYpOworCisJCQkJbGFzdF93aXRoX2VuZ2lu ZXMgPSBjbGFzczsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2Fzc2VydF9lcShyZXQsIC1FSU5WQUwp OworCQkJCWlmIChpbnN0YW5jZSA+IDgpIC8qIFNraXAgb3ZlciBzb21lIGluc3RhbmNlIGhvbGVz LiAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbGFzcyAtIGxhc3Rfd2l0aF9l bmdpbmVzID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgY2xhc3MgaG9sZXMuICovCisJCQlicmVhazsK Kwl9CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAq IFZlcmlmeSB0aGF0IGludmFsaWQgYXJndW1lbnRzIGFyZSByZWplY3RlZC4KKyAqLworc3RhdGlj IHZvaWQKK3Rlc3RfaW52YWxpZF9hcmdzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW1fc3NldSBkZWZhdWx0X3NzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NF VSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJfTsKKwl1bnNpZ25l ZCBpbnQgc3o7CisKKwkvKiBnZXQgcGFyYW0gKi8KKworCS8qIEludmFsaWQgc2l6ZS4gKi8KKwlh cmcuc2l6ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwg JmFyZyksIC1FSU5WQUwpOworCisJLyogUXVlcnkgc2l6ZS4gKi8KKwlhcmcuc2l6ZSA9IDA7CisJ aWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIDApOworCXN6 ID0gYXJnLnNpemU7CisKKwkvKiBCYWQgcG9pbnRlci4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJYXJnLnZhbHVlID0gdG9f dXNlcl9wb2ludGVyKCZzc2V1KTsKKworCS8qIEZldGNoIHRoZSBkZXZpY2UgZGVmYXVsdHMuICov CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZkZWZhdWx0X3NzZXUpOworCWdlbV9jb250 ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwkvKiBzZXQgcGFyYW0gKi8KKworCS8qIEludmFs aWQgc2l6ZXMuICovCisJYXJnLnNpemUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWFyZy5zaXplID0gMDsKKwlpZ3Rf YXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJ YXJnLnNpemUgPSBzejsKKworCS8qIEJhZCBwb2ludGVyLiAqLworCWFyZy52YWx1ZSA9IDA7CisJ aWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQp OworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSk7CisKKwlnZW1fY29udGV4dF9k ZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQg U1NFVSB2YWx1ZXMgYXJlIHJlamVjdGVkLgorICovCitzdGF0aWMgdm9pZAordGVzdF9pbnZhbGlk X3NzZXUoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1 IGRlZmF1bHRfc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1f c3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcg PQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBn ZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQl9Owor CXVuc2lnbmVkIGludCBpOworCisJLyogRmV0Y2ggdGhlIGRldmljZSBkZWZhdWx0cy4gKi8KKwlh cmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmRlZmF1bHRfc3NldSk7CisJZ2VtX2NvbnRleHRf Z2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3Nl dSk7CisKKwkvKiBUcnkgYWxsIHNsaWNlIG1hc2tzIGtub3duIHRvIGJlIGludmFsaWQuICovCisJ c3NldSA9IGRlZmF1bHRfc3NldTsKKwlmb3IgKGkgPSAxOyBpIDw9ICg4IC0gX19zbGljZV9jb3Vu dF9fKTsgaSsrKSB7CisJCXNzZXUuc2xpY2VfbWFzayA9IG1hc2tfcGx1cyhfX3NsaWNlX21hc2tf XywgaSk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcp LCAtRUlOVkFMKTsKKwl9CisKKwkvKiAwIHNsaWNlcy4gKi8KKwlzc2V1LnNsaWNlX21hc2sgPSAw OworCWlndF9hc3NlcnRfZXEoLUVJTlZBTCwgX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpKTsKKworCS8qIFRyeSBhbGwgc3Vic2xpY2UgbWFza3Mga25vd24gdG8gYmUgaW52YWxpZC4g Ki8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCWZvciAoaSA9IDE7IGkgPD0gKDggLSBfX3N1YnNs aWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19wbHVzKF9f c3Vic2xpY2VfbWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8qIDAgc3Vic2xpY2VzLiAqLworCXNz ZXUuc3Vic2xpY2VfbWFzayA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogVHJ5IG51bWJlciBvZiBFVXMgc3VwZXJp b3IgdG8gdGhlIG1heCBhdmFpbGFibGUuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1 Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gZGVmYXVsdF9zc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNl ICsgMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwg LUVJTlZBTCk7CisKKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSBkZWZhdWx0X3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgKyAxOworCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8q IFRyeSB0byBwcm9ncmFtIDAgbWF4IEVVcy4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNz ZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAwOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIE1pbiA+IG1heCAqLworCXNz ZXUgPSBkZWZhdWx0X3NzZXU7CisJc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA9IHNzZXUubWF4 X2V1c19wZXJfc3Vic2xpY2U7CisJc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDE7CisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOwor CisJaWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpCisJCWdvdG8gb3V0OworCisJLyogU3Vic2V0IG9m IHN1YnNsaWNlcyBidXQgc2xpY2UgbWFzayBncmVhdGVyIHRoYW4gb25lLiAqLworCWlmIChfX3Ns aWNlX2NvdW50X18gPiAxKSB7CisJCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJCXNzZXUuc3Vic2xp Y2VfbWFzayA9IG1hc2tfbWludXNfb25lKHNzZXUuc3Vic2xpY2VfbWFzayk7CisJCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisK KwkvKiBPZGQgc3Vic2xpY2VzIGFib3ZlIGZvdXIuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsK Kwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19taW51 c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBNb3JlIHRoYW4gaGFsZiBzdWJz bGljZXMgd2l0aCBvbmUgc2xpY2UuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1LnNs aWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19taW51cyhzc2V1LnN1 YnNsaWNlX21hc2ssCisJCQkJCV9fc3Vic2xpY2VfY291bnRfXyAvIDIgLSAxKTsKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKK291 dDoKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyogVmVyaWZ5 IHRoYXQgdGhlIGtlcm5lbCByZXR1cm5zIGEgY29ycmVjdCBlcnJvciB2YWx1ZSBvbiBHZW4gPCA4 LiAqLworc3RhdGljIHZvaWQKK2luaXRfY29udGV4dHMoaW50IGZkLCB1aW50MzJfdCAqY3R4LCB1 bnNpZ25lZCBpbnQgbnVtLAorCSAgICAgIHVpbnQ2NF90IG1hc2swLCB1aW50NjRfdCBtYXNrMSkK K3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9hc3NlcnRfZXEobnVtLCAyKTsKKworCWZvciAo aSA9IDA7IGkgPCBudW07IGkrKykKKwkJY3R4W2ldID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsK KworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFswXSwgbWFzazApOworCWNvbnRleHRf c2V0X3NsaWNlX21hc2soZmQsIGN0eFsxXSwgbWFzazEpOworfQorCisvKgorICogVmVyaWZ5IHRo YXQgcG93ZXJnYXRpbmcgc2V0dGluZ3MgYXJlIHB1dCBvbiBob2xkIHdoaWxlIGk5MTUvcGVyZiBp cworICogYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAordGVzdF9wZXJmX29hKGludCBmZCkKK3sK Kwl1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisJCS8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBz YW1wbGVzICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKwkJLyog T0EgdW5pdCBjb25maWd1cmF0aW9uICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNT X1NFVCwgMSwgLyogdGVzdCBtZXRyaWMgKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1B VCwgSTkxNV9PQV9GT1JNQVRfQTMydTQwX0E0dTMyX0I4X0M4LAorCQlEUk1fSTkxNV9QRVJGX1BS T1BfT0FfRVhQT05FTlQsIDIwLAorCX07CisJc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJh bSBwYXJhbSA9IHsKKwkJLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQyB8CisJCUk5 MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NLLAorCQkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpF KHByb3BlcnRpZXMpIC8gMiwKKwkJLnByb3BlcnRpZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHBy b3BlcnRpZXMpLAorCX07CisJdWludDY0X3QgcGdfc2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25l KF9fc2xpY2VfbWFza19fKTsKKwl1bnNpZ25lZCBpbnQgc2xpY2VfY291bnQgPSBfX3NsaWNlX2Nv dW50X18gLSAxOworCXVpbnQzMl90IGN0eFsyXTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcGVy Zl9mZDsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwgQVJSQVlfU0laRShjdHgpLCBfX3NsaWNl X21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVz IHdpdGggcHJlZGljYXRlcyAob25seSBhdmFpbGFibGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgor CSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGlj ZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7CisKKwlp Z3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291 bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBz bGljZV9jb3VudCk7CisKKwkvKgorCSAqIE5vdyBvcGVuIGk5MTUvcGVyZiBhbmQgdmVyaWZ5IHRo YXQgYWxsIGNvbnRleHRzIGhhdmUgYmVlbgorCSAqIHJlY29uZmlndXJlZCB0byB0aGUgZGV2aWNl J3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWlmIChf X2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCQlpZ3Rf YXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwgc2xpY2VfY291bnQpLAorCQkJ CSAgICAgIDApOworCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBd LCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50 KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCX0gZWxzZSB7CisJCWlndF9hc3Nl cnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEo cmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291 bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsx XSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJm X2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3Vy YXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAq LworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9j b3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHJl YWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fz c2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rl c3Ryb3koZmQsIGN0eFtpXSk7CisKKwkvKgorCSAqIE9wZW4gaTkxNS9wZXJmIGZpcnN0IGFuZCB2 ZXJpZnkgdGhhdCBhbGwgY29udGV4dHMgY3JlYXRlZAorCSAqIGFmdGVyd2FyZCBhcmUgY29uZmln dXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChw ZXJmX2ZkKTsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwgQVJSQVlfU0laRShjdHgpLCBfX3Ns aWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgorCSAqIENoZWNrIHRoZSBkZXZpY2Un cyBkZWZhdWx0IHZhbHVlcywgZGVzcGl0ZSBzZXR0aW5nCisJICogb3RoZXJ3aXNlLgorCSAqLwor CWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJ CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwKKwkJCQkJCSAgICAg ICBzbGljZV9jb3VudCksIDApOworCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChm ZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3Ns aWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCX0gZWxzZSB7CisJ CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgMSk7CisJCWln dF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgMSk7CisJCWlndF9h c3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vi c2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQo ZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwlj bG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0s IGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFs dWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVh ZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7 CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xp Y2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0s IDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBp KyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7Cit9CisKK3N0YXRpYyBpZ3Rf c3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcg ZmxhZ3MpCit7CisJc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKKwkJLmN0eCA9IGN0 eCwKKwkJLmVuZ2luZSA9IGZsYWdzLAorCX07CisKKwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChm ZCwgZmxhZ3MpKQorCQlvcHRzLmZsYWdzIHw9IElHVF9TUElOX1BPTExfUlVOOworCisJcmV0dXJu IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwgJm9wdHMpOworfQorCitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBfX3NwaW5fd2FpdChpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0 IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJ aWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKworCQl3 aGlsZSAoIVJFQURfT05DRSgqc3Bpbi0+cnVubmluZykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdCA9 IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCQkJaWYgKCh0IC0gdGltZW91dCkgPiAyNTBl NikgeworCQkJCXRpbWVvdXQgPSB0OworCQkJCWlndF93YXJuKCJTcGlubmVyIG5vdCBydW5uaW5n IGFmdGVyICUuMmZtc1xuIiwKKwkJCQkJIChkb3VibGUpdCAvIDFlNik7CisJCQl9CisJCX0KKwl9 IGVsc2UgeworCQlpZ3RfZGVidWcoIl9fc3Bpbl93YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1 c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBub3RoaW5nISAqLworCX0KKworCXJldHVybiBp Z3RfbnNlY19lbGFwc2VkKCZzdGFydCk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGlu X3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0 X3NwaW5fdCAqc3BpbiA9IF9fc3Bpbl9wb2xsKGZkLCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93 YWl0KGZkLCBzcGluKTsKKworCXJldHVybiBzcGluOworfQorCitzdGF0aWMgdWludDMyX3QKK3Jl YWRfc2xpY2VfY291bnRfYnVzeShpbnQgZmQsIHVpbnQzMl90IGNvbnRleHQsIHVpbnQzMl90IGV4 cGVjdGVkLAorCQkgICAgICBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXJldHVybiBfX3JlYWRfc2xp Y2VfY291bnQoZmQsIGNvbnRleHQsIGV4cGVjdGVkLCBzcGluKTsKK30KKworI2RlZmluZSBURVNU X0lETEUgKDEpCisjZGVmaW5lIFRFU1RfQlVTWSAoMikKKworLyoKKyAqIFRlc3QgY29udGV4dCBy ZS1jb25maWd1cmF0aW9uIHdpdGggZWl0aGVyIGlkbGUgb3IgYnVzeSBjb250ZXh0cy4KKyAqLwor c3RhdGljIHZvaWQKK3Rlc3RfZHluYW1pYyhpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncykKK3sK Kwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51c19vbmUoX19zbGljZV9tYXNrX18p OworCXVuc2lnbmVkIGludCBwZ19zbGljZV9jb3VudCA9IF9fc2xpY2VfY291bnRfXyAtIDE7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NP TlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwK KwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIo JnNzZXUpIH07CisJaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7CisKKwlnZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZhcmcpOworCisJLyogRmlyc3Qgc2V0IHRoZSBkZWZhdWx0IG1hc2sgKi8KKwlp ZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4gPSBfX3NwaW5fc3luYyhmZCwgYXJnLmN0eF9p ZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1LnNsaWNlX21hc2sgPSBfX3NsaWNlX21hc2tf XzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShy ZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBf X3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwg MCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9m cmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJaWYgKGZsYWdzICYgVEVTVF9J RExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8 IERST1BfQUNUSVZFKTsKKworCS8qIFRoZW4gc2V0IGEgcG93ZXJnYXRlZCBjb25maWd1cmF0aW9u ICovCisJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQorCQlzcGluID0gX19zcGluX3N5bmMoZmQsIGFy Zy5jdHhfaWQsIEk5MTVfRVhFQ19SRU5ERVIpOworCisJc3NldS5zbGljZV9tYXNrID0gcGdfc2xp Y2VfbWFzazsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2Vy dF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkg ICAgICBwZ19zbGljZV9jb3VudCk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZk LCAwLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKworCWlmIChzcGluKSB7CisJCWlndF9zcGluX2Jh dGNoX2ZyZWUoZmQsIHNwaW4pOworCQlzcGluID0gTlVMTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBU RVNUX0lETEUpCisJCWlndF9kcm9wX2NhY2hlc19zZXQoZmQsIERST1BfUkVUSVJFIHwgRFJPUF9J RExFIHwgRFJPUF9BQ1RJVkUpOworCisJLyogUHV0IHRoZSBkZXZpY2UncyBkZWZhdWx0IGJhY2sg YWdhaW4gKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4gPSBfX3NwaW5fc3luYyhm ZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1LnNsaWNlX21hc2sgPSBf X3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0 X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4p LAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9j b3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rf c3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJaWYgKGZs YWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8 IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCS8qIE9uZSBsYXN0IHBvd2VyZ2F0ZWQgY29u ZmlnIGZvciB0aGUgcm9hZC4uLiAqLworCWlmIChmbGFncyAmIFRFU1RfQlVTWSkKKwkJc3BpbiA9 IF9fc3Bpbl9zeW5jKGZkLCBhcmcuY3R4X2lkLCBJOTE1X0VYRUNfUkVOREVSKTsKKworCXNzZXUu c2xpY2VfbWFzayA9IHBnX3NsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudF9idXN5KGZkLCBhcmcuY3R4 X2lkLCAwLCBzcGluKSwKKwkJICAgICAgcGdfc2xpY2VfY291bnQpOworCWlndF9hc3NlcnRfZXEo cmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3Bp bikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJ fQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKK3N0YXRpYyB2 b2lkIHRlc3RfdW5zdXBwb3J0ZWRfZGV2aWNlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6 ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRU5PREVWKTsK KworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhfaWQpOworfQorCitzdGF0aWMgYm9v bAorcGxhdGZvcm1faGFzX3Blcl9jb250ZXh0X3NzZXVfc3VwcG9ydCh2b2lkKQoreworCXJldHVy biBfX2ludGVsX2dlbl9fID49IDg7Cit9CisKK2lndF9tYWluCit7CisJdW5zaWduZWQgaW50IG1h eF9zbGljZXMgPSAzLCBtYXhfc3Vic2xpY2VzID0gMzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQg ZmQ7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRF TCk7CisJCWlndF9yZXF1aXJlX2dlbShmZCk7CisKKwkJX19pbnRlbF9kZXZpZF9fID0gaW50ZWxf Z2V0X2RybV9kZXZpZChmZCk7CisJCV9faW50ZWxfZ2VuX18gPSBpbnRlbF9nZW4oX19pbnRlbF9k ZXZpZF9fKTsKKworCQlpZ3RfcmVxdWlyZShrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3NzZXVfc3Vw cG9ydChmZCkpOworCisJCWlmIChfX2ludGVsX2dlbl9fID49IDExKQorCQkJX19yZWFkX3NsaWNl X2NvdW50ID0gZ2VuMTFfcmVhZF9zbGljZV9jb3VudDsKKwkJZWxzZQorCQkJX19yZWFkX3NsaWNl X2NvdW50ID0gZ2VuOF9yZWFkX3NsaWNlX2NvdW50OworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3Vw IHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoIXBsYXRmb3JtX2hhc19wZXJfY29u dGV4dF9zc2V1X3N1cHBvcnQoKSk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgidW5zdXBwb3J0ZWQt ZGV2aWNlIikKKwkJCXRlc3RfdW5zdXBwb3J0ZWRfZGV2aWNlKGZkKTsKKwl9CisKKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7CisJCWlndF9maXh0dXJlIHsKKwkJCWRybV9pOTE1X2dldHBhcmFtX3QgZ3A7 CisKKwkJCWlndF9yZXF1aXJlKHBsYXRmb3JtX2hhc19wZXJfY29udGV4dF9zc2V1X3N1cHBvcnQo KSk7CisKKwkJCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9TTElDRV9NQVNLOworCQkJZ3AudmFsdWUg PSAoaW50ICopICZfX3NsaWNlX21hc2tfXzsKKwkJCWRvX2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwkJCV9fc2xpY2VfY291bnRfXyA9IF9fYnVpbHRpbl9wb3Bjb3Vu dChfX3NsaWNlX21hc2tfXyk7CisKKwkJCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9TVUJTTElDRV9N QVNLOworCQkJZ3AudmFsdWUgPSAoaW50ICopICZfX3N1YnNsaWNlX21hc2tfXzsKKwkJCWRvX2lv Y3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKKwkJCV9fc3Vic2xpY2VfY291 bnRfXyA9CisJCQkJX19idWlsdGluX3BvcGNvdW50KF9fc3Vic2xpY2VfbWFza19fKTsKKwkJfQor CisJCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLWFyZ3MiKQorCQkJdGVzdF9pbnZhbGlkX2FyZ3MoZmQp OworCisJCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNzZXUiKQorCQkJdGVzdF9pbnZhbGlkX3NzZXUo ZmQpOworCisJCWlndF9zdWJ0ZXN0KCJlbmdpbmVzIikKKwkJCXRlc3RfZW5naW5lcyhmZCk7CisK KwkJZm9yIChpID0gMTsgaSA8IG1heF9zbGljZXM7IGkrKykgeworCQkJaWd0X3N1YnRlc3RfZigi c2xpY2UtcGctJWkiLCBpKSB7CisJCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gaSk7 CisKKwkJCQl0ZXN0X3NsaWNlX3BnKGZkLCBpKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDE7 IGkgPCBtYXhfc3Vic2xpY2VzOyBpKyspIHsKKwkJCWlndF9zdWJ0ZXN0X2YoInN1YnNsaWNlLXBn LSVpIiwgaSkgeworCQkJCWlndF9yZXF1aXJlKF9fc3Vic2xpY2VfY291bnRfXyA+PSAyKTsKKwor CQkJCS8qCisJCQkJICogT25seSBhdmFpbGFibGUgb24gc29tZSBBdG9tIHBsYXRmb3JtcyBhbmQK KwkJCQkgKiBHZW4xMCsuCisJCQkJICovCisJCQkJaWd0X3JlcXVpcmUoSVNfQlJPWFRPTihfX2lu dGVsX2RldmlkX18pIHx8CisJCQkJCSAgICBJU19HRU1JTklMQUtFKF9faW50ZWxfZGV2aWRfXykg fHwKKwkJCQkJICAgIF9faW50ZWxfZ2VuX18gPj0gMTApOworCisJCQkJdGVzdF9zdWJzbGljZV9w ZyhmZCwgaSk7CisJCQl9CisJCX0KKworCQlpZ3Rfc3VidGVzdCgic3NldS1wZXJmLW9hIikgewor CQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7CisKKwkJCXRlc3RfcGVyZl9vYShm ZCk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYyIpIHsKKwkJCWlndF9yZXF1aXJlKF9f c2xpY2VfY291bnRfXyA+IDEpOworCisJCQl0ZXN0X2R5bmFtaWMoZmQsIDApOworCQl9CisKKwkJ aWd0X3N1YnRlc3QoImR5bmFtaWMtYnVzeSIpIHsKKwkJCWlndF9yZXF1aXJlKF9fc2xpY2VfY291 bnRfXyA+IDEpOworCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSk7CisJCX0KKworCQlp Z3Rfc3VidGVzdCgiZHluYW1pYy1pZGxlIikgeworCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3Vu dF9fID4gMSk7CisKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9JRExFKTsKKwkJfQorCX0KKwor CWlndF9maXh0dXJlIHsKKwkJY2xvc2UoZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21l c29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggMTdkZWI5NDVlYzk1Li45MzE5ZmE0 ZTE5YjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCkBAIC0yNDksNiArMjQ5LDEzIEBAIGZvcmVhY2ggcHJvZyA6IHRlc3RfcHJvZ3MKIAkJICAg aW5zdGFsbCA6IHRydWUpCiBlbmRmb3JlYWNoCiAKK3Rlc3RfZXhlY3V0YWJsZXMgKz0gZXhlY3V0 YWJsZSgnZ2VtX2N0eF9zc2V1JywgJ2dlbV9jdHhfc3NldS5jJywKKwkgICBkZXBlbmRlbmNpZXMg OiB0ZXN0X2RlcHMgKyBbIGxpYl9pZ3RfcGVyZiBdLAorCSAgIGluc3RhbGxfZGlyIDogbGliZXhl Y2RpciwKKwkgICBpbnN0YWxsX3JwYXRoIDogbGliZXhlY2Rpcl9ycGF0aGRpciwKKwkgICBpbnN0 YWxsIDogdHJ1ZSkKK3Rlc3RfcHJvZ3MgKz0gJ2dlbV9jdHhfc3NldScKKwogdGVzdF9leGVjdXRh YmxlcyArPSBleGVjdXRhYmxlKCdnZW1fZWlvJywgJ2dlbV9laW8uYycsCiAJICAgZGVwZW5kZW5j aWVzIDogdGVzdF9kZXBzICsgWyByZWFsdGltZSBdLAogCSAgIGluc3RhbGxfZGlyIDogbGliZXhl Y2RpciwKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id A44A76E4C6 for ; Wed, 5 Sep 2018 14:25:53 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id a108-v6so7837344wrc.13 for ; Wed, 05 Sep 2018 07:25:53 -0700 (PDT) From: Tvrtko Ursulin Date: Wed, 5 Sep 2018 15:25:44 +0100 Message-Id: <20180905142544.3381-3-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20180905142544.3381-1-tvrtko.ursulin@linux.intel.com> References: <20180905142544.3381-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATH i-g-t 2/2] tests: add slice power programming test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZpZXMgdGhhdCB0aGUga2VybmVsIHByb2dyYW1zIHNsaWNlcyBjb3JyZWN0bHkgYmFzZWQg YnkgcmVhZGluZwp0aGUgdmFsdWUgb2YgUFdSX0NMS19TVEFURSByZWdpc3RlciBvciBNSV9TRVRf UFJFRElDQVRFIG9uIHBsYXRmb3JtcwpiZWZvcmUgQ2Fubm9ubGFrZS4KCnYyOiBBZGQgc3Vic2xp Y2UgdGVzdHMgKExpb25lbCkKICAgIFVzZSBNSV9TRVRfUFJFRElDQVRFIGZvciBmdXJ0aGVyIHZl cmlmaWNhdGlvbiB3aGVuIGF2YWlsYWJsZSAoTGlvbmVsKQoKdjM6IFJlbmFtZSB0byBnZW1fY3R4 X3JwY3MgKExpb25lbCkKCnY0OiBVcGRhdGUga2VybmVsIEFQSSAoTGlvbmVsKQogICAgQWRkIDAg dmFsdWUgdGVzdCAoTGlvbmVsKQogICAgRXhlcmNpc2UgaW52YWxpZCB2YWx1ZXMgKExpb25lbCkK CnY1OiBBZGQgcGVyZiB0ZXN0cyAoTGlvbmVsKQoKdjY6IEFkZCBuZXcgc3lzZnMgZW50cnkgdGVz dHMgKExpb25lbCkKCnY3OiBUZXN0IHJzdmQgZmllbGRzCiAgICBVcGRhdGUgZm9yIGtlcm5lbCBz ZXJpZXMgY2hhbmdlcwoKdjg6IERyb3AgdGVzdF9ub19zc2V1X3N1cHBvcnQoKSB0ZXN0IChLZWx2 aW4pCiAgICBEcm9wIGRybV9pbnRlbF8qKCkgYXBpcyAoQ2hyaXMpCgp2OTogYnkgQ2hyaXM6CiAg ICBEcm9wIGFsbCBkb19pb2N0bC9kb19pb2N0bF9lcnIoKQogICAgVXNlIGdlbV9jb250ZXh0X1tn c11ldF9wYXJhbSgpCiAgICBVc2UgZ2VtX3JlYWQoKSBpbnN0ZWFkIG9mIG1hcHBpbmcgbWVtb3J5 CiAgICBieSBMaW9uZWw6CiAgICBUZXN0IGR5bmFtaWMgc3NldSBvbi9vZmYgbW9yZQoKVHZydGtv IFVyc3VsaW46Cgp2MTA6CiAqIFZhcmlvdXMgc3R5bGUgdHdlYWtzIGFuZCByZWZhY3RvcmluZ3Mu CiAqIE5ldyB0ZXN0IGNvdmVyYWdlLgoKU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4g PGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLmFtICAg ICAgfCAgICAxICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgICAxICsKIHRlc3RzL2dlbV9j dHhfcGFyYW0uYyAgfCAgICA0ICstCiB0ZXN0cy9nZW1fY3R4X3NzZXUuYyAgIHwgMTA0MCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgIHwgICAgNyArCiA1IGZpbGVzIGNoYW5nZWQsIDEwNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dlbV9jdHhfc3NldS5jCgpkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBlZTVhN2M1 ZTgzYjguLjZiNjdiZDJjYzE3YSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIv dGVzdHMvTWFrZWZpbGUuYW0KQEAgLTEwNyw2ICsxMDcsNyBAQCBnZW1fY2xvc2VfcmFjZV9DRkxB R1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2Nsb3NlX3JhY2VfTERBREQg PSAkKExEQUREKSAtbHB0aHJlYWQKIGdlbV9jdHhfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdT KSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fY3R4X3RocmFzaF9MREFERCA9ICQoTERBREQpIC1scHRo cmVhZAorZ2VtX2N0eF9zc2V1X0xEQUREID0gJChMREFERCkgJCh0b3BfYnVpbGRkaXIpL2xpYi9s aWJpZ3RfcGVyZi5sYQogZ2VtX2V4ZWNfcGFyYWxsZWxfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQo VEhSRUFEX0NGTEFHUykKIGdlbV9leGVjX3BhcmFsbGVsX0xEQUREID0gJChMREFERCkgLWxwdGhy ZWFkCiBnZW1fZmVuY2VfdGhyYXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxB R1MpCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwppbmRleCBjODQ5MzNmMWQ5NzEuLmY4ZjJjOGQ2N2Q3MiAxMDA2NDQKLS0tIGEvdGVz dHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC01Niw2 ICs1Niw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWdlbV9jdHhfZXhlYyBcCiAJZ2VtX2N0eF9pc29s YXRpb24gXAogCWdlbV9jdHhfcGFyYW0gXAorCWdlbV9jdHhfc3NldSBcCiAJZ2VtX2N0eF9zd2l0 Y2ggXAogCWdlbV9jdHhfdGhyYXNoIFwKIAlnZW1fZG91YmxlX2lycV9sb29wIFwKZGlmZiAtLWdp dCBhL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYyBiL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYwppbmRleCBj NDZmZDcwOWIwZDcuLmFmMWFmZWFhMmYyZiAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX2N0eF9wYXJh bS5jCisrKyBiL3Rlc3RzL2dlbV9jdHhfcGFyYW0uYwpAQCAtMjk0LDExICsyOTQsMTMgQEAgaWd0 X21haW4KIAkJCXNldF9wcmlvcml0eShmZCk7CiAJfQogCisJLyogSTkxNV9DT05URVhUX1BBUkFN X1NTRVUgdGVzdHMgYXJlIGxvY2F0ZWQgaW4gZ2VtX2N0eF9zc2V1LmMgKi8KKwogCS8qIE5PVEU6 IFRoaXMgdGVzdGNhc2UgaW50ZW50aW9uYWxseSB0ZXN0cyBmb3IgdGhlIG5leHQgZnJlZSBwYXJh bWV0ZXIKIAkgKiB0byBjYXRjaCBBQkkgZXh0ZW5zaW9ucy4gRG9uJ3QgImZpeCIgdGhpcyB0ZXN0 Y2FzZSB3aXRob3V0IGFkZGluZyBhbGwKIAkgKiB0aGUgdGVzdHMgZm9yIHRoZSBuZXcgcGFyYW0g Zmlyc3QuCiAJICovCi0JYXJnLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1BSSU9SSVRZICsg MTsKKwlhcmcucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSArIDE7CiAKIAlpZ3Rfc3Vi dGVzdCgiaW52YWxpZC1wYXJhbS1nZXQiKSB7CiAJCWFyZy5jdHhfaWQgPSBjdHg7CmRpZmYgLS1n aXQgYS90ZXN0cy9nZW1fY3R4X3NzZXUuYyBiL3Rlc3RzL2dlbV9jdHhfc3NldS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWY4MTY4MThlM2RlCi0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMvZ2VtX2N0eF9zc2V1LmMKQEAgLTAsMCArMSwxMDQwIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgTGlv bmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgorICoKKyAqLwor CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxm Y250bC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRlICJpZ3RfZHVtbXls b2FkLmgiCisjaW5jbHVkZSAiaWd0X3BlcmYuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBj b250ZXh0IHJlbmRlciBwb3dlcmdhdGluZyBwcm9ncmFtbWluZy4iKTsKKworI2RlZmluZSBNSV9T VE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQgPDwgMjMpCisKKyNkZWZpbmUgTUlfU0VUX1BSRURJQ0FU RSAgICAgICgweDEgPDwgMjMpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVIg ICAgICAgICAoMCkKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFQyX0NMRUFS ICgxKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9OT09QX1JFU1VMVDJfU0VUICAgKDIpCisj ZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVTVUxUX0NMRUFSICAoMykKKyNkZWZpbmUg IE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFRfU0VUICAgICg0KQorI2RlZmluZSAgTUlfU0VU X1BSRURJQ0FURV8xX1NMSUNFUyAgICAgICAgICAgKDUpCisjZGVmaW5lICBNSV9TRVRfUFJFRElD QVRFXzJfU0xJQ0VTICAgICAgICAgICAoNikKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfM19T TElDRVMgICAgICAgICAgICg3KQorCisjZGVmaW5lIEdFTjhfUl9QV1JfQ0xLX1NUQVRFCQkweDIw QzgKKyNkZWZpbmUgICBHRU44X1JQQ1NfRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBHRU44 X1JQQ1NfU19DTlRfRU5BQkxFCSgxIDw8IDE4KQorI2RlZmluZSAgIEdFTjhfUlBDU19TX0NOVF9T SElGVAkJMTUKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfTUFTSwkJKDB4NyA8PCBHRU44X1JQ Q1NfU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOMTFfUlBDU19TX0NOVF9TSElGVAkxMgorI2Rl ZmluZSAgIEdFTjExX1JQQ1NfU19DTlRfTUFTSwkJKDB4M2YgPDwgR0VOMTFfUlBDU19TX0NOVF9T SElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX0VOQUJMRQkoMSA8PCAxMSkKKyNkZWZp bmUgICBHRU44X1JQQ1NfU1NfQ05UX1NISUZUCTgKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05U X01BU0sJCSgweDcgPDwgR0VOOF9SUENTX1NTX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQ Q1NfRVVfTUFYX1NISUZUCTQKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUFYX01BU0sJCSgweGYg PDwgR0VOOF9SUENTX0VVX01BWF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX1NI SUZUCTAKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlOX01BU0sJCSgweGYgPDwgR0VOOF9SUENT X0VVX01JTl9TSElGVCkKKworI2RlZmluZSBSQ1NfVElNRVNUQU1QICgweDIwMDAgKyAweDM1OCkK Kworc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2dlbl9fLCBfX2ludGVsX2RldmlkX187Citz dGF0aWMgdWludDY0X3QgX19zbGljZV9tYXNrX18sIF9fc3Vic2xpY2VfbWFza19fOworc3RhdGlj IHVuc2lnbmVkIGludCBfX3NsaWNlX2NvdW50X18sIF9fc3Vic2xpY2VfY291bnRfXzsKKworc3Rh dGljIHVpbnQ2NF90IG1hc2tfbWludXNfb25lKHVpbnQ2NF90IG1hc2spCit7CisJdW5zaWduZWQg aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihtYXNrKSAqIDggLSAxKTsgaSsrKSB7 CisJCWlmICgoMVVMTCA8PCBpKSAmIG1hc2spCisJCQlyZXR1cm4gbWFzayAmIH4oMVVMTCA8PCBp KTsKKwl9CisKKwlpZ3RfYXNzZXJ0KDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0 X3QgbWFza19wbHVzX29uZSh1aW50NjRfdCBtYXNrKQoreworCXVuc2lnbmVkIGludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykgKiA4IC0gMSk7IGkrKykgeworCQlpZiAoKCgx VUxMIDw8IGkpICYgbWFzaykgPT0gMCkKKwkJCXJldHVybiBtYXNrIHwgKDFVTEwgPDwgaSk7CisJ fQorCisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IG1h c2tfbWludXModWludDY0X3QgbWFzaywgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQltYXNrID0gbWFza19taW51c19vbmUobWFzayk7CisK KwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tfcGx1cyh1aW50NjRfdCBt YXNrLCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBp KyspCisJCW1hc2sgPSBtYXNrX3BsdXNfb25lKG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisK K3N0YXRpYyB1aW50MzJfdCAqCitmaWxsX3JlbG9jYXRpb24odWludDMyX3QgKmJhdGNoLAorCQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAorCQl1aW50MzJfdCBn ZW1faGFuZGxlLCB1aW50MzJfdCBkZWx0YSwgLyogaW4gYnl0ZXMgKi8KKwkJdWludDMyX3Qgb2Zm c2V0LCAvKiBpbiBkd29yZHMgKi8KKwkJdWludDMyX3QgcmVhZF9kb21haW5zLCB1aW50MzJfdCB3 cml0ZV9kb21haW5zKQoreworCXJlbG9jLT50YXJnZXRfaGFuZGxlID0gZ2VtX2hhbmRsZTsKKwly ZWxvYy0+ZGVsdGEgPSBkZWx0YTsKKwlyZWxvYy0+b2Zmc2V0ID0gb2Zmc2V0ICogc2l6ZW9mKHVp bnQzMl90KTsKKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKKwlyZWxvYy0+cmVhZF9kb21h aW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW5z OworCisJKmJhdGNoKysgPSBkZWx0YTsKKwkqYmF0Y2grKyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7 Cit9CisKKworc3RhdGljIHVpbnQzMl90CityZWFkX3JwY3NfcmVnKGludCBmZCwgdWludDMyX3Qg Y3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZXMsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geyB9OworCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY3NbMl07CisJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgb2JqWzJdOworCXVpbnQzMl90ICpiYXRjaCwgKmIsIGRhdGFbMl07CisJ dW5zaWduZWQgaW50IG5fcmVsb2NzID0gMDsKKwl1aW50MzJfdCBycGNzOworCisJbWVtc2V0KG9i aiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKKwlvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisKKwliYXRjaCA9IGIg PQorCSAgICAgIGdlbV9tbWFwX19jcHUoZmQsIG9ialsxXS5oYW5kbGUsIDAsIDQwOTYsIFBST1Rf UkVBRCB8IFBST1RfV1JJVEUpOworCisJaWYgKGV4cGVjdGVkX3NsaWNlcyAhPSAwICYmIF9faW50 ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9QUkVESUNBVEUgfCAoMSAtIDEpIHwKKwkJ ICAgICAgIChNSV9TRVRfUFJFRElDQVRFXzFfU0xJQ0VTICsgZXhwZWN0ZWRfc2xpY2VzIC0gMSk7 CisKKwkqYisrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKTsKKwkqYisrID0gUkNT X1RJTUVTVEFNUDsKKwliID0gZmlsbF9yZWxvY2F0aW9uKGIsICZyZWxvY3Nbbl9yZWxvY3MrK10s IG9ialswXS5oYW5kbGUsCisJCQkgICAgMCwgYiAtIGJhdGNoLAorCQkJICAgIEk5MTVfR0VNX0RP TUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOworCisJKmIrKyA9IE1JX1NUT1JF X1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisJKmIrKyA9IEdFTjhfUl9QV1JfQ0xLX1NUQVRFOwor CWIgPSBmaWxsX3JlbG9jYXRpb24oYiwgJnJlbG9jc1tuX3JlbG9jcysrXSwgb2JqWzBdLmhhbmRs ZSwKKwkJCSAgICA0LCBiIC0gYmF0Y2gsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwg STkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CisKKwlpZiAoZXhwZWN0ZWRfc2xpY2VzICE9IDAgJiYg X19pbnRlbF9nZW5fXyA8IDEwKQorCQkqYisrID0gTUlfU0VUX1BSRURJQ0FURSB8ICgxIC0gMSkg fCBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVI7CisKKwkqYisrID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKworCWdlbV9tdW5tYXAoYmF0Y2gsIDQwOTYpOworCisJb2JqWzFdLnJlbG9jYXRpb25f Y291bnQgPSBuX3JlbG9jczsKKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihy ZWxvY3MpOworCisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwor CWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gQVJSQVlfU0laRShvYmopOworCWk5MTVfZXhlY2J1ZmZl cjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgY3R4KTsKKworCWdlbV9leGVjYnVmKGZkLCAmZXhl Y2J1Zik7CisKKwlpZiAoc3BpbikKKwkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOworCisJZ2Vt X3JlYWQoZmQsIG9ialswXS5oYW5kbGUsIDAsIGRhdGEsIHNpemVvZihkYXRhKSk7CisKKwlycGNz ID0gZGF0YVsxXTsKKworCWlndF9kZWJ1ZygicmNzX3RpbWVzdGFtcD0weCV4IHJwY3M9MHgleFxu IiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlnZW1fY2xvc2UoZmQsIG9ialswXS5oYW5kbGUpOwor CWdlbV9jbG9zZShmZCwgb2JqWzFdLmhhbmRsZSk7CisKKwlyZXR1cm4gcnBjczsKK30KKwordHlw ZWRlZiB1aW50MzJfdCAoKnJlYWRfc2xpY2VfY291bnRfZikoaW50IGZkLCB1aW50MzJfdCBjdHgs IHVpbnQzMl90IGV4cGVjdGVkLAorCQkJCSAgICAgICBpZ3Rfc3Bpbl90ICpzcGluKTsKKworc3Rh dGljIHJlYWRfc2xpY2VfY291bnRfZiBfX3JlYWRfc2xpY2VfY291bnQ7CisKK3N0YXRpYyB1aW50 MzJfdAorcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhw ZWN0ZWRfc2xpY2VfY291bnQpCit7CisJcmV0dXJuIF9fcmVhZF9zbGljZV9jb3VudChmZCwgY3R4 LCBleHBlY3RlZF9zbGljZV9jb3VudCwgTlVMTCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2Vu OF9yZWFkX3NsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3Rl ZF9zbGljZV9jb3VudCwKKwkJICAgICAgaWd0X3NwaW5fdCAqc3BpbikKK3sKKwlyZXR1cm4gKHJl YWRfcnBjc19yZWcoZmQsIGN0eCwgZXhwZWN0ZWRfc2xpY2VfY291bnQsIHNwaW4pICYKKwkJR0VO OF9SUENTX1NfQ05UX01BU0spID4+IEdFTjhfUlBDU19TX0NOVF9TSElGVDsKK30KKworc3RhdGlj IHVpbnQzMl90CitnZW4xMV9yZWFkX3NsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1 aW50MzJfdCBleHBlY3RlZF9zbGljZV9jb3VudCwKKwkJICAgICAgIGlndF9zcGluX3QgKnNwaW4p Cit7CisJcmV0dXJuIChyZWFkX3JwY3NfcmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50 LCBzcGluKSAmCisJCUdFTjExX1JQQ1NfU19DTlRfTUFTSykgPj4gR0VOMTFfUlBDU19TX0NOVF9T SElGVDsKK30KKworc3RhdGljIHVpbnQzMl90CityZWFkX3N1YnNsaWNlX2NvdW50KGludCBmZCwg dWludDMyX3QgY3R4KQoreworCXJldHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCAwLCBOVUxM KSAmIEdFTjhfUlBDU19TU19DTlRfTUFTSykgPj4KKwkgICAgICAgR0VOOF9SUENTX1NTX0NOVF9T SElGVDsKK30KKworc3RhdGljIGJvb2wKK2tlcm5lbF9oYXNfcGVyX2NvbnRleHRfc3NldV9zdXBw b3J0KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBz c2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7 IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJf cG9pbnRlcigmc3NldSkgfTsKKworCXJldHVybiBfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwg JmFyZykgPT0gMDsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfZ2V0X3NzZXVfbWFza3MoaW50 IGZkLCB1aW50MzJfdCBjdHgsCisJCSAgICAgICB1aW50NjRfdCAqc2xpY2VfbWFzaywKKwkJICAg ICAgIHVpbnQ2NF90ICpzdWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAg LmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0 b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZh cmcpOworCisJaWYgKHNsaWNlX21hc2spCisJCSpzbGljZV9tYXNrID0gc3NldS5zbGljZV9tYXNr OworCisJaWYgKHN1YnNsaWNlX21hc2spCisJCSpzdWJzbGljZV9tYXNrID0gc3NldS5zdWJzbGlj ZV9tYXNrOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9zZXRfc2xpY2VfbWFzayhpbnQgZmQs IHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc2xpY2VfbWFzaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZh bHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKTsKKwlzc2V1LnNsaWNlX21hc2sgPSBzbGljZV9tYXNrOworCWdlbV9jb250ZXh0 X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X3NldF9zdWJz bGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBzdWJzbGljZV9tYXNrKQor eworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkx NV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNp emVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwln ZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc3Vic2xpY2VfbWFzayA9IHN1 YnNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKK30KKworLyoK KyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzbGljZSBjb3VudC4KKyAqLworc3Rh dGljIHZvaWQKK3Rlc3Rfc2xpY2VfcGcoaW50IGZkLCB1aW50MzJfdCBwZ19zbGljZV9jb3VudCkK K3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51cyhfX3NsaWNlX21hc2tfXywg cGdfc2xpY2VfY291bnQpOworCXVuc2lnbmVkIGludCBzbGljZV9jb3VudCA9IF9fc2xpY2VfY291 bnRfXyAtIHBnX3NsaWNlX2NvdW50OworCXVpbnQ2NF90IHNsaWNlX21hc2s7CisJdWludDMyX3Qg Y3R4OworCisJaWd0X2Fzc2VydF9lcShzbGljZV9jb3VudCwgX19idWlsdGluX3BvcGNvdW50KHBn X3NsaWNlX21hc2spKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJY29udGV4 dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4LCBwZ19zbGljZV9tYXNrKTsKKwljb250ZXh0X2dldF9z c2V1X21hc2tzKGZkLCBjdHgsICZzbGljZV9tYXNrLCBOVUxMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBn X3NsaWNlX21hc2ssIHNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0IGZhbHNlIHBvc2l0aXZl cyB3aXRoIHByZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICogYmVmb3JlIEdlbjEwKS4K KwkgKi8KKwlpZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xp Y2VfY291bnQoZmQsIGN0eCwgX19zbGljZV9jb3VudF9fKSwgMCk7CisKKwlpZ3RfYXNzZXJ0X2Vx KHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgMCksIHNsaWNlX2NvdW50KTsKKworCWdlbV9jb250 ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCB3ZSBjYW4gcHJv Z3JhbSB0aGUgc3Vic2xpY2UgY291bnQuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3N1YnNsaWNl X3BnKGludCBmZCwgaW50IHBnX3N1YnNsaWNlX2NvdW50KQoreworCXVpbnQ2NF90IHBnX3N1YnNs aWNlX21hc2sgPQorCQltYXNrX21pbnVzKF9fc3Vic2xpY2VfbWFza19fLCBwZ19zdWJzbGljZV9j b3VudCk7CisJdW5zaWduZWQgaW50IHN1YnNsaWNlX2NvdW50ID0gX19zdWJzbGljZV9jb3VudF9f IC0gcGdfc3Vic2xpY2VfY291bnQ7CisJdWludDY0X3Qgc3Vic2xpY2VfbWFzazsKKwl1aW50MzJf dCBjdHg7CisKKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX2NvdW50LCBfX2J1aWx0aW5fcG9wY291 bnQocGdfc3Vic2xpY2VfbWFzaykpOworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsK Kwljb250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGZkLCBjdHgsIHBnX3N1YnNsaWNlX21hc2spOwor CWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgTlVMTCwgJnN1YnNsaWNlX21hc2spOwor CWlndF9hc3NlcnRfZXEocGdfc3Vic2xpY2VfbWFzaywgc3Vic2xpY2VfbWFzayk7CisKKwlpZ3Rf YXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eCksIHN1YnNsaWNlX2NvdW50KTsK KworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKK3N0YXRpYyBib29sIGhhc19l bmdpbmUoaW50IGZkLCB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBpbnN0YW5jZSkK K3sKKwlpbnQgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3Ms IGluc3RhbmNlKSk7CisKKwlpZiAocG11ID49IDApCisJCWNsb3NlKHBtdSk7CisKKwlyZXR1cm4g cG11ID49IDA7Cit9CisKK3N0YXRpYyBib29sCitlbmdpbmVfc3VwcG9ydHNfc3NldShpbnQgZmQs IHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCXJldHVybiBf X2ludGVsX2dlbl9fID49IDggJiYKKwkgICAgICAgY2xhc3MgPT0gSTkxNV9FTkdJTkVfQ0xBU1Nf UkVOREVSICYmIGluc3RhbmNlID09IDAgPworCSAgICAgICB0cnVlIDogZmFsc2U7Cit9CisKKy8q CisgKiBWZXJpZnkgdGhhdCBpbnZhbGlkIGVuZ2luZXMgYXJlIHJlamVjdGVkIGFuZCB2YWxpZCBv bmVzIGFyZSBhY2NlcHRlZC4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9lbmdpbmVzKGludCBmZCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSkgfTsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3RhbmNlOworCWludCBsYXN0 X3dpdGhfZW5naW5lczsKKworCS8qIGdldF9wYXJhbSAqLworCisJc3NldS5pbnN0YW5jZSA9IC0x OyAvKiBBc3N1bWVkIGludmFsaWQuICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dl dF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSUQ7IC8qIEJvdGggaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1Lmluc3RhbmNl ID0gMDsgLyogQ2xhc3MgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf Z2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5F X0NMQVNTX1JFTkRFUjsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9 IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNl IDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFz czsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4 dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGlu c3RhbmNlKSkgeworCQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCQlsYXN0X3dpdGhfZW5n aW5lcyA9IGNsYXNzOworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZB TCk7CisJCQkJaWYgKGluc3RhbmNlID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgaW5zdGFuY2UgaG9s ZXMuICovCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGNsYXNzIC0gbGFzdF93aXRo X2VuZ2luZXMgPiA4KSAvKiBTa2lwIG92ZXIgc29tZSBjbGFzcyBob2xlcy4gKi8KKwkJCWJyZWFr OworCX0KKworCS8qCisJICogR2V0IHNvbWUgcHJvcGVyIHZhbHVlcyBiZWZvcmUgdHJ5aW5nIHRv IHJlcHJvZ3JhbSB0aGVtIG9udG8KKwkgKiBhbiBpbnZhbGlkIGVuZ2luZS4KKwkgKi8KKwlzc2V1 LmNsYXNzID0gMDsKKwlzc2V1Lmluc3RhbmNlID0gMDsKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0o ZmQsICZhcmcpOworCisJLyogc2V0X3BhcmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8q IEFzc3VtZWQgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3Bh cmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xB U1NfSU5WQUxJRDsgLyogQm90aCBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAw OyAvKiBDbGFzcyBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRf cGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJ Zm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9 IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUu Y2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0g X19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShm ZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWlmIChlbmdpbmVfc3VwcG9ydHNfc3NldShmZCwg Y2xhc3MsIGluc3RhbmNlKSkKKwkJCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQkJCWVsc2UK KwkJCQkJaWd0X2Fzc2VydF9lcShyZXQsIC1FTk9ERVYpOworCisJCQkJbGFzdF93aXRoX2VuZ2lu ZXMgPSBjbGFzczsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2Fzc2VydF9lcShyZXQsIC1FSU5WQUwp OworCQkJCWlmIChpbnN0YW5jZSA+IDgpIC8qIFNraXAgb3ZlciBzb21lIGluc3RhbmNlIGhvbGVz LiAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbGFzcyAtIGxhc3Rfd2l0aF9l bmdpbmVzID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgY2xhc3MgaG9sZXMuICovCisJCQlicmVhazsK Kwl9CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAq IFZlcmlmeSB0aGF0IGludmFsaWQgYXJndW1lbnRzIGFyZSByZWplY3RlZC4KKyAqLworc3RhdGlj IHZvaWQKK3Rlc3RfaW52YWxpZF9hcmdzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW1fc3NldSBkZWZhdWx0X3NzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NF VSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJfTsKKwl1bnNpZ25l ZCBpbnQgc3o7CisKKwkvKiBnZXQgcGFyYW0gKi8KKworCS8qIEludmFsaWQgc2l6ZS4gKi8KKwlh cmcuc2l6ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwg JmFyZyksIC1FSU5WQUwpOworCisJLyogUXVlcnkgc2l6ZS4gKi8KKwlhcmcuc2l6ZSA9IDA7CisJ aWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIDApOworCXN6 ID0gYXJnLnNpemU7CisKKwkvKiBCYWQgcG9pbnRlci4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJYXJnLnZhbHVlID0gdG9f dXNlcl9wb2ludGVyKCZzc2V1KTsKKworCS8qIEZldGNoIHRoZSBkZXZpY2UgZGVmYXVsdHMuICov CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZkZWZhdWx0X3NzZXUpOworCWdlbV9jb250 ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7CisKKwkvKiBzZXQgcGFyYW0gKi8KKworCS8qIEludmFs aWQgc2l6ZXMuICovCisJYXJnLnNpemUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWFyZy5zaXplID0gMDsKKwlpZ3Rf YXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJ YXJnLnNpemUgPSBzejsKKworCS8qIEJhZCBwb2ludGVyLiAqLworCWFyZy52YWx1ZSA9IDA7CisJ aWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQp OworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSk7CisKKwlnZW1fY29udGV4dF9k ZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQg U1NFVSB2YWx1ZXMgYXJlIHJlamVjdGVkLgorICovCitzdGF0aWMgdm9pZAordGVzdF9pbnZhbGlk X3NzZXUoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1 IGRlZmF1bHRfc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1f c3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcg PQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBn ZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQl9Owor CXVuc2lnbmVkIGludCBpOworCisJLyogRmV0Y2ggdGhlIGRldmljZSBkZWZhdWx0cy4gKi8KKwlh cmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmRlZmF1bHRfc3NldSk7CisJZ2VtX2NvbnRleHRf Z2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3Nl dSk7CisKKwkvKiBUcnkgYWxsIHNsaWNlIG1hc2tzIGtub3duIHRvIGJlIGludmFsaWQuICovCisJ c3NldSA9IGRlZmF1bHRfc3NldTsKKwlmb3IgKGkgPSAxOyBpIDw9ICg4IC0gX19zbGljZV9jb3Vu dF9fKTsgaSsrKSB7CisJCXNzZXUuc2xpY2VfbWFzayA9IG1hc2tfcGx1cyhfX3NsaWNlX21hc2tf XywgaSk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcp LCAtRUlOVkFMKTsKKwl9CisKKwkvKiAwIHNsaWNlcy4gKi8KKwlzc2V1LnNsaWNlX21hc2sgPSAw OworCWlndF9hc3NlcnRfZXEoLUVJTlZBTCwgX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpKTsKKworCS8qIFRyeSBhbGwgc3Vic2xpY2UgbWFza3Mga25vd24gdG8gYmUgaW52YWxpZC4g Ki8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCWZvciAoaSA9IDE7IGkgPD0gKDggLSBfX3N1YnNs aWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19wbHVzKF9f c3Vic2xpY2VfbWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8qIDAgc3Vic2xpY2VzLiAqLworCXNz ZXUuc3Vic2xpY2VfbWFzayA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogVHJ5IG51bWJlciBvZiBFVXMgc3VwZXJp b3IgdG8gdGhlIG1heCBhdmFpbGFibGUuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1 Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gZGVmYXVsdF9zc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNl ICsgMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwg LUVJTlZBTCk7CisKKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSBkZWZhdWx0X3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgKyAxOworCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8q IFRyeSB0byBwcm9ncmFtIDAgbWF4IEVVcy4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNz ZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAwOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIE1pbiA+IG1heCAqLworCXNz ZXUgPSBkZWZhdWx0X3NzZXU7CisJc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA9IHNzZXUubWF4 X2V1c19wZXJfc3Vic2xpY2U7CisJc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDE7CisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOwor CisJaWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpCisJCWdvdG8gb3V0OworCisJLyogU3Vic2V0IG9m IHN1YnNsaWNlcyBidXQgc2xpY2UgbWFzayBncmVhdGVyIHRoYW4gb25lLiAqLworCWlmIChfX3Ns aWNlX2NvdW50X18gPiAxKSB7CisJCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJCXNzZXUuc3Vic2xp Y2VfbWFzayA9IG1hc2tfbWludXNfb25lKHNzZXUuc3Vic2xpY2VfbWFzayk7CisJCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisK KwkvKiBPZGQgc3Vic2xpY2VzIGFib3ZlIGZvdXIuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsK Kwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19taW51 c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBNb3JlIHRoYW4gaGFsZiBzdWJz bGljZXMgd2l0aCBvbmUgc2xpY2UuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1LnNs aWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNrID0gbWFza19taW51cyhzc2V1LnN1 YnNsaWNlX21hc2ssCisJCQkJCV9fc3Vic2xpY2VfY291bnRfXyAvIDIgLSAxKTsKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKK291 dDoKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyogVmVyaWZ5 IHRoYXQgdGhlIGtlcm5lbCByZXR1cm5zIGEgY29ycmVjdCBlcnJvciB2YWx1ZSBvbiBHZW4gPCA4 LiAqLworc3RhdGljIHZvaWQKK2luaXRfY29udGV4dHMoaW50IGZkLCB1aW50MzJfdCAqY3R4LCB1 bnNpZ25lZCBpbnQgbnVtLAorCSAgICAgIHVpbnQ2NF90IG1hc2swLCB1aW50NjRfdCBtYXNrMSkK K3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9hc3NlcnRfZXEobnVtLCAyKTsKKworCWZvciAo aSA9IDA7IGkgPCBudW07IGkrKykKKwkJY3R4W2ldID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsK KworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFswXSwgbWFzazApOworCWNvbnRleHRf c2V0X3NsaWNlX21hc2soZmQsIGN0eFsxXSwgbWFzazEpOworfQorCisvKgorICogVmVyaWZ5IHRo YXQgcG93ZXJnYXRpbmcgc2V0dGluZ3MgYXJlIHB1dCBvbiBob2xkIHdoaWxlIGk5MTUvcGVyZiBp cworICogYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAordGVzdF9wZXJmX29hKGludCBmZCkKK3sK Kwl1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisJCS8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBz YW1wbGVzICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKwkJLyog T0EgdW5pdCBjb25maWd1cmF0aW9uICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNT X1NFVCwgMSwgLyogdGVzdCBtZXRyaWMgKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1B VCwgSTkxNV9PQV9GT1JNQVRfQTMydTQwX0E0dTMyX0I4X0M4LAorCQlEUk1fSTkxNV9QRVJGX1BS T1BfT0FfRVhQT05FTlQsIDIwLAorCX07CisJc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJh bSBwYXJhbSA9IHsKKwkJLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQyB8CisJCUk5 MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NLLAorCQkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpF KHByb3BlcnRpZXMpIC8gMiwKKwkJLnByb3BlcnRpZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHBy b3BlcnRpZXMpLAorCX07CisJdWludDY0X3QgcGdfc2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25l KF9fc2xpY2VfbWFza19fKTsKKwl1bnNpZ25lZCBpbnQgc2xpY2VfY291bnQgPSBfX3NsaWNlX2Nv dW50X18gLSAxOworCXVpbnQzMl90IGN0eFsyXTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcGVy Zl9mZDsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwgQVJSQVlfU0laRShjdHgpLCBfX3NsaWNl X21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgorCSAqIFRlc3QgZmFsc2UgcG9zaXRpdmVz IHdpdGggcHJlZGljYXRlcyAob25seSBhdmFpbGFibGUgb24KKwkgKiBiZWZvcmUgR2VuMTApLgor CSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGlj ZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7CisKKwlp Z3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291 bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBz bGljZV9jb3VudCk7CisKKwkvKgorCSAqIE5vdyBvcGVuIGk5MTUvcGVyZiBhbmQgdmVyaWZ5IHRo YXQgYWxsIGNvbnRleHRzIGhhdmUgYmVlbgorCSAqIHJlY29uZmlndXJlZCB0byB0aGUgZGV2aWNl J3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWlmIChf X2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCQlpZ3Rf YXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwgc2xpY2VfY291bnQpLAorCQkJ CSAgICAgIDApOworCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBd LCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50 KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCX0gZWxzZSB7CisJCWlndF9hc3Nl cnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEo cmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291 bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsx XSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJm X2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3Vy YXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAq LworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9j b3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHJl YWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fz c2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rl c3Ryb3koZmQsIGN0eFtpXSk7CisKKwkvKgorCSAqIE9wZW4gaTkxNS9wZXJmIGZpcnN0IGFuZCB2 ZXJpZnkgdGhhdCBhbGwgY29udGV4dHMgY3JlYXRlZAorCSAqIGFmdGVyd2FyZCBhcmUgY29uZmln dXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChw ZXJmX2ZkKTsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwgQVJSQVlfU0laRShjdHgpLCBfX3Ns aWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgorCSAqIENoZWNrIHRoZSBkZXZpY2Un cyBkZWZhdWx0IHZhbHVlcywgZGVzcGl0ZSBzZXR0aW5nCisJICogb3RoZXJ3aXNlLgorCSAqLwor CWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJ CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwKKwkJCQkJCSAgICAg ICBzbGljZV9jb3VudCksIDApOworCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChm ZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3Ns aWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCX0gZWxzZSB7CisJ CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgMSk7CisJCWln dF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgMSk7CisJCWlndF9h c3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vi c2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQo ZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAyKTsKKwl9CisKKwlj bG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2luZyB0aGUgcGVyZiBzdHJlYW0s IGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8gdGhlIHByb2dyYW1tZWQgdmFs dWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9hc3NlcnRfZXEocmVh ZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLAorCQkJICAgICAgMCk7 CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xp Y2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0s IDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBp KyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7Cit9CisKK3N0YXRpYyBpZ3Rf c3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcg ZmxhZ3MpCit7CisJc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKKwkJLmN0eCA9IGN0 eCwKKwkJLmVuZ2luZSA9IGZsYWdzLAorCX07CisKKwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChm ZCwgZmxhZ3MpKQorCQlvcHRzLmZsYWdzIHw9IElHVF9TUElOX1BPTExfUlVOOworCisJcmV0dXJu IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwgJm9wdHMpOworfQorCitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBfX3NwaW5fd2FpdChpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0 IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJ aWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKworCQl3 aGlsZSAoIVJFQURfT05DRSgqc3Bpbi0+cnVubmluZykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdCA9 IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCQkJaWYgKCh0IC0gdGltZW91dCkgPiAyNTBl NikgeworCQkJCXRpbWVvdXQgPSB0OworCQkJCWlndF93YXJuKCJTcGlubmVyIG5vdCBydW5uaW5n IGFmdGVyICUuMmZtc1xuIiwKKwkJCQkJIChkb3VibGUpdCAvIDFlNik7CisJCQl9CisJCX0KKwl9 IGVsc2UgeworCQlpZ3RfZGVidWcoIl9fc3Bpbl93YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1 c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBub3RoaW5nISAqLworCX0KKworCXJldHVybiBp Z3RfbnNlY19lbGFwc2VkKCZzdGFydCk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGlu X3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0 X3NwaW5fdCAqc3BpbiA9IF9fc3Bpbl9wb2xsKGZkLCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93 YWl0KGZkLCBzcGluKTsKKworCXJldHVybiBzcGluOworfQorCitzdGF0aWMgdWludDMyX3QKK3Jl YWRfc2xpY2VfY291bnRfYnVzeShpbnQgZmQsIHVpbnQzMl90IGNvbnRleHQsIHVpbnQzMl90IGV4 cGVjdGVkLAorCQkgICAgICBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXJldHVybiBfX3JlYWRfc2xp Y2VfY291bnQoZmQsIGNvbnRleHQsIGV4cGVjdGVkLCBzcGluKTsKK30KKworI2RlZmluZSBURVNU X0lETEUgKDEpCisjZGVmaW5lIFRFU1RfQlVTWSAoMikKKworLyoKKyAqIFRlc3QgY29udGV4dCBy ZS1jb25maWd1cmF0aW9uIHdpdGggZWl0aGVyIGlkbGUgb3IgYnVzeSBjb250ZXh0cy4KKyAqLwor c3RhdGljIHZvaWQKK3Rlc3RfZHluYW1pYyhpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncykKK3sK Kwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51c19vbmUoX19zbGljZV9tYXNrX18p OworCXVuc2lnbmVkIGludCBwZ19zbGljZV9jb3VudCA9IF9fc2xpY2VfY291bnRfXyAtIDE7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NP TlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwK KwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIo JnNzZXUpIH07CisJaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7CisKKwlnZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZhcmcpOworCisJLyogRmlyc3Qgc2V0IHRoZSBkZWZhdWx0IG1hc2sgKi8KKwlp ZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4gPSBfX3NwaW5fc3luYyhmZCwgYXJnLmN0eF9p ZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1LnNsaWNlX21hc2sgPSBfX3NsaWNlX21hc2tf XzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShy ZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBf X3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwg MCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9m cmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJaWYgKGZsYWdzICYgVEVTVF9J RExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8 IERST1BfQUNUSVZFKTsKKworCS8qIFRoZW4gc2V0IGEgcG93ZXJnYXRlZCBjb25maWd1cmF0aW9u ICovCisJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQorCQlzcGluID0gX19zcGluX3N5bmMoZmQsIGFy Zy5jdHhfaWQsIEk5MTVfRVhFQ19SRU5ERVIpOworCisJc3NldS5zbGljZV9tYXNrID0gcGdfc2xp Y2VfbWFzazsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2Vy dF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkg ICAgICBwZ19zbGljZV9jb3VudCk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZk LCAwLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKworCWlmIChzcGluKSB7CisJCWlndF9zcGluX2Jh dGNoX2ZyZWUoZmQsIHNwaW4pOworCQlzcGluID0gTlVMTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBU RVNUX0lETEUpCisJCWlndF9kcm9wX2NhY2hlc19zZXQoZmQsIERST1BfUkVUSVJFIHwgRFJPUF9J RExFIHwgRFJPUF9BQ1RJVkUpOworCisJLyogUHV0IHRoZSBkZXZpY2UncyBkZWZhdWx0IGJhY2sg YWdhaW4gKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4gPSBfX3NwaW5fc3luYyhm ZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1LnNsaWNlX21hc2sgPSBf X3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0 X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQsIDAsIHNwaW4p LAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9j b3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rf c3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJaWYgKGZs YWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8 IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCS8qIE9uZSBsYXN0IHBvd2VyZ2F0ZWQgY29u ZmlnIGZvciB0aGUgcm9hZC4uLiAqLworCWlmIChmbGFncyAmIFRFU1RfQlVTWSkKKwkJc3BpbiA9 IF9fc3Bpbl9zeW5jKGZkLCBhcmcuY3R4X2lkLCBJOTE1X0VYRUNfUkVOREVSKTsKKworCXNzZXUu c2xpY2VfbWFzayA9IHBnX3NsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudF9idXN5KGZkLCBhcmcuY3R4 X2lkLCAwLCBzcGluKSwKKwkJICAgICAgcGdfc2xpY2VfY291bnQpOworCWlndF9hc3NlcnRfZXEo cmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3Bp bikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJ fQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKK3N0YXRpYyB2 b2lkIHRlc3RfdW5zdXBwb3J0ZWRfZGV2aWNlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6 ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRU5PREVWKTsK KworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhfaWQpOworfQorCitzdGF0aWMgYm9v bAorcGxhdGZvcm1faGFzX3Blcl9jb250ZXh0X3NzZXVfc3VwcG9ydCh2b2lkKQoreworCXJldHVy biBfX2ludGVsX2dlbl9fID49IDg7Cit9CisKK2lndF9tYWluCit7CisJdW5zaWduZWQgaW50IG1h eF9zbGljZXMgPSAzLCBtYXhfc3Vic2xpY2VzID0gMzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQg ZmQ7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRF TCk7CisJCWlndF9yZXF1aXJlX2dlbShmZCk7CisKKwkJX19pbnRlbF9kZXZpZF9fID0gaW50ZWxf Z2V0X2RybV9kZXZpZChmZCk7CisJCV9faW50ZWxfZ2VuX18gPSBpbnRlbF9nZW4oX19pbnRlbF9k ZXZpZF9fKTsKKworCQlpZ3RfcmVxdWlyZShrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3NzZXVfc3Vw cG9ydChmZCkpOworCisJCWlmIChfX2ludGVsX2dlbl9fID49IDExKQorCQkJX19yZWFkX3NsaWNl X2NvdW50ID0gZ2VuMTFfcmVhZF9zbGljZV9jb3VudDsKKwkJZWxzZQorCQkJX19yZWFkX3NsaWNl X2NvdW50ID0gZ2VuOF9yZWFkX3NsaWNlX2NvdW50OworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3Vw IHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoIXBsYXRmb3JtX2hhc19wZXJfY29u dGV4dF9zc2V1X3N1cHBvcnQoKSk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgidW5zdXBwb3J0ZWQt ZGV2aWNlIikKKwkJCXRlc3RfdW5zdXBwb3J0ZWRfZGV2aWNlKGZkKTsKKwl9CisKKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7CisJCWlndF9maXh0dXJlIHsKKwkJCWRybV9pOTE1X2dldHBhcmFtX3QgZ3A7 CisKKwkJCWlndF9yZXF1aXJlKHBsYXRmb3JtX2hhc19wZXJfY29udGV4dF9zc2V1X3N1cHBvcnQo KSk7CisKKwkJCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9TTElDRV9NQVNLOworCQkJZ3AudmFsdWUg PSAoaW50ICopICZfX3NsaWNlX21hc2tfXzsKKwkJCWRvX2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwkJCV9fc2xpY2VfY291bnRfXyA9IF9fYnVpbHRpbl9wb3Bjb3Vu dChfX3NsaWNlX21hc2tfXyk7CisKKwkJCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9TVUJTTElDRV9N QVNLOworCQkJZ3AudmFsdWUgPSAoaW50ICopICZfX3N1YnNsaWNlX21hc2tfXzsKKwkJCWRvX2lv Y3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKKwkJCV9fc3Vic2xpY2VfY291 bnRfXyA9CisJCQkJX19idWlsdGluX3BvcGNvdW50KF9fc3Vic2xpY2VfbWFza19fKTsKKwkJfQor CisJCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLWFyZ3MiKQorCQkJdGVzdF9pbnZhbGlkX2FyZ3MoZmQp OworCisJCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNzZXUiKQorCQkJdGVzdF9pbnZhbGlkX3NzZXUo ZmQpOworCisJCWlndF9zdWJ0ZXN0KCJlbmdpbmVzIikKKwkJCXRlc3RfZW5naW5lcyhmZCk7CisK KwkJZm9yIChpID0gMTsgaSA8IG1heF9zbGljZXM7IGkrKykgeworCQkJaWd0X3N1YnRlc3RfZigi c2xpY2UtcGctJWkiLCBpKSB7CisJCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gaSk7 CisKKwkJCQl0ZXN0X3NsaWNlX3BnKGZkLCBpKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDE7 IGkgPCBtYXhfc3Vic2xpY2VzOyBpKyspIHsKKwkJCWlndF9zdWJ0ZXN0X2YoInN1YnNsaWNlLXBn LSVpIiwgaSkgeworCQkJCWlndF9yZXF1aXJlKF9fc3Vic2xpY2VfY291bnRfXyA+PSAyKTsKKwor CQkJCS8qCisJCQkJICogT25seSBhdmFpbGFibGUgb24gc29tZSBBdG9tIHBsYXRmb3JtcyBhbmQK KwkJCQkgKiBHZW4xMCsuCisJCQkJICovCisJCQkJaWd0X3JlcXVpcmUoSVNfQlJPWFRPTihfX2lu dGVsX2RldmlkX18pIHx8CisJCQkJCSAgICBJU19HRU1JTklMQUtFKF9faW50ZWxfZGV2aWRfXykg fHwKKwkJCQkJICAgIF9faW50ZWxfZ2VuX18gPj0gMTApOworCisJCQkJdGVzdF9zdWJzbGljZV9w ZyhmZCwgaSk7CisJCQl9CisJCX0KKworCQlpZ3Rfc3VidGVzdCgic3NldS1wZXJmLW9hIikgewor CQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7CisKKwkJCXRlc3RfcGVyZl9vYShm ZCk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYyIpIHsKKwkJCWlndF9yZXF1aXJlKF9f c2xpY2VfY291bnRfXyA+IDEpOworCisJCQl0ZXN0X2R5bmFtaWMoZmQsIDApOworCQl9CisKKwkJ aWd0X3N1YnRlc3QoImR5bmFtaWMtYnVzeSIpIHsKKwkJCWlndF9yZXF1aXJlKF9fc2xpY2VfY291 bnRfXyA+IDEpOworCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSk7CisJCX0KKworCQlp Z3Rfc3VidGVzdCgiZHluYW1pYy1pZGxlIikgeworCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3Vu dF9fID4gMSk7CisKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9JRExFKTsKKwkJfQorCX0KKwor CWlndF9maXh0dXJlIHsKKwkJY2xvc2UoZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21l c29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggMTdkZWI5NDVlYzk1Li45MzE5ZmE0 ZTE5YjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCkBAIC0yNDksNiArMjQ5LDEzIEBAIGZvcmVhY2ggcHJvZyA6IHRlc3RfcHJvZ3MKIAkJICAg aW5zdGFsbCA6IHRydWUpCiBlbmRmb3JlYWNoCiAKK3Rlc3RfZXhlY3V0YWJsZXMgKz0gZXhlY3V0 YWJsZSgnZ2VtX2N0eF9zc2V1JywgJ2dlbV9jdHhfc3NldS5jJywKKwkgICBkZXBlbmRlbmNpZXMg OiB0ZXN0X2RlcHMgKyBbIGxpYl9pZ3RfcGVyZiBdLAorCSAgIGluc3RhbGxfZGlyIDogbGliZXhl Y2RpciwKKwkgICBpbnN0YWxsX3JwYXRoIDogbGliZXhlY2Rpcl9ycGF0aGRpciwKKwkgICBpbnN0 YWxsIDogdHJ1ZSkKK3Rlc3RfcHJvZ3MgKz0gJ2dlbV9jdHhfc3NldScKKwogdGVzdF9leGVjdXRh YmxlcyArPSBleGVjdXRhYmxlKCdnZW1fZWlvJywgJ2dlbV9laW8uYycsCiAJICAgZGVwZW5kZW5j aWVzIDogdGVzdF9kZXBzICsgWyByZWFsdGltZSBdLAogCSAgIGluc3RhbGxfZGlyIDogbGliZXhl Y2RpciwKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2 Cg==