From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C5B46E355 for ; Tue, 11 Sep 2018 11:35:27 +0000 (UTC) Received: by mail-wm0-f65.google.com with SMTP id y139-v6so598436wmc.2 for ; Tue, 11 Sep 2018 04:35:27 -0700 (PDT) From: Tvrtko Ursulin Date: Tue, 11 Sep 2018 12:34:17 +0100 Message-Id: <20180911113417.2757-1-tvrtko.ursulin@linux.intel.com> In-Reply-To: <153622741075.3050.13124952873141040571@skylake-alporthouse-com> References: <153622741075.3050.13124952873141040571@skylake-alporthouse-com> MIME-Version: 1.0 Subject: [igt-dev] [PATH i-g-t v11 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 CiAqIE5ldyB0ZXN0IGNvdmVyYWdlLgoKdjExOgogKiBDaGFuZ2UgcGxhdGZvcm0gc3VwcG9ydCB0 byBqdXN0IEdlbjExLgogKiBTaW1wbGlmeSBhdmFpbGFiaWxpdHkgdGVzdC4gKENocmlzIFdpbHNv bikKICogTW9yZSBpbnZhbGlkIHBvaW50ZXIgdGVzdHMuIChDaHJpcyBXaWxzb24pCgpTaWduZWQt b2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+ ClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ Ci0tLQogdGVzdHMvTWFrZWZpbGUuYW0gICAgICB8ICAgIDEgKwogdGVzdHMvTWFrZWZpbGUuc291 cmNlcyB8ICAgIDEgKwogdGVzdHMvZ2VtX2N0eF9wYXJhbS5jICB8ICAgIDQgKy0KIHRlc3RzL2dl bV9jdHhfc3NldS5jICAgfCAxMDg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgfCAgICA3ICsKIDUgZmlsZXMgY2hhbmdlZCwg MTA5OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMvZ2VtX2N0eF9zc2V1LmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3Rz L01ha2VmaWxlLmFtCmluZGV4IGVlNWE3YzVlODNiOC4uNmI2N2JkMmNjMTdhIDEwMDY0NAotLS0g YS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMTA3LDYgKzEw Nyw3IEBAIGdlbV9jbG9zZV9yYWNlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxB R1MpCiBnZW1fY2xvc2VfcmFjZV9MREFERCA9ICQoTERBREQpIC1scHRocmVhZAogZ2VtX2N0eF90 aHJhc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKIGdlbV9jdHhfdGhy YXNoX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCitnZW1fY3R4X3NzZXVfTERBREQgPSAkKExE QUREKSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmlndF9wZXJmLmxhCiBnZW1fZXhlY19wYXJhbGxl bF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2V4ZWNfcGFyYWxs ZWxfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKIGdlbV9mZW5jZV90aHJhc2hfQ0ZMQUdTID0g JChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGM4NDkzM2YxZDk3MS4uZjhm MmM4ZDY3ZDcyIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKQEAgLTU2LDYgKzU2LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCiAJZ2Vt X2N0eF9leGVjIFwKIAlnZW1fY3R4X2lzb2xhdGlvbiBcCiAJZ2VtX2N0eF9wYXJhbSBcCisJZ2Vt X2N0eF9zc2V1IFwKIAlnZW1fY3R4X3N3aXRjaCBcCiAJZ2VtX2N0eF90aHJhc2ggXAogCWdlbV9k b3VibGVfaXJxX2xvb3AgXApkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2N0eF9wYXJhbS5jIGIvdGVz dHMvZ2VtX2N0eF9wYXJhbS5jCmluZGV4IGM0NmZkNzA5YjBkNy4uYWYxYWZlYWEyZjJmIDEwMDY0 NAotLS0gYS90ZXN0cy9nZW1fY3R4X3BhcmFtLmMKKysrIGIvdGVzdHMvZ2VtX2N0eF9wYXJhbS5j CkBAIC0yOTQsMTEgKzI5NCwxMyBAQCBpZ3RfbWFpbgogCQkJc2V0X3ByaW9yaXR5KGZkKTsKIAl9 CiAKKwkvKiBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSB0ZXN0cyBhcmUgbG9jYXRlZCBpbiBnZW1f Y3R4X3NzZXUuYyAqLworCiAJLyogTk9URTogVGhpcyB0ZXN0Y2FzZSBpbnRlbnRpb25hbGx5IHRl c3RzIGZvciB0aGUgbmV4dCBmcmVlIHBhcmFtZXRlcgogCSAqIHRvIGNhdGNoIEFCSSBleHRlbnNp b25zLiBEb24ndCAiZml4IiB0aGlzIHRlc3RjYXNlIHdpdGhvdXQgYWRkaW5nIGFsbAogCSAqIHRo ZSB0ZXN0cyBmb3IgdGhlIG5ldyBwYXJhbSBmaXJzdC4KIAkgKi8KLQlhcmcucGFyYW0gPSBJOTE1 X0NPTlRFWFRfUEFSQU1fUFJJT1JJVFkgKyAxOworCWFyZy5wYXJhbSA9IEk5MTVfQ09OVEVYVF9Q QVJBTV9TU0VVICsgMTsKIAogCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXBhcmFtLWdldCIpIHsKIAkJ YXJnLmN0eF9pZCA9IGN0eDsKZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9jdHhfc3NldS5jIGIvdGVz dHMvZ2VtX2N0eF9zc2V1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li42Y2FhOWQ5ZjkwZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9nZW1fY3R4X3NzZXUuYwpA QCAtMCwwICsxLDEwODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiAgICBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdl cmxpbkBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL21tYW4u aD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgor I2luY2x1ZGUgImlndF9wZXJmLmgiCisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgY29udGV4dCBy ZW5kZXIgcG93ZXJnYXRpbmcgcHJvZ3JhbW1pbmcuIik7CisKKyNkZWZpbmUgTUlfU1RPUkVfUkVH SVNURVJfTUVNICgweDI0IDw8IDIzKQorCisjZGVmaW5lIE1JX1NFVF9QUkVESUNBVEUgICAgICAo MHgxIDw8IDIzKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9OT09QX05FVkVSICAgICAgICAg KDApCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVTVUxUMl9DTEVBUiAoMSkKKyNk ZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFQyX1NFVCAgICgyKQorI2RlZmluZSAg TUlfU0VUX1BSRURJQ0FURV9OT09QX1JFU1VMVF9DTEVBUiAgKDMpCisjZGVmaW5lICBNSV9TRVRf UFJFRElDQVRFX05PT1BfUkVTVUxUX1NFVCAgICAoNCkKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNB VEVfMV9TTElDRVMgICAgICAgICAgICg1KQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV8yX1NM SUNFUyAgICAgICAgICAgKDYpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFXzNfU0xJQ0VTICAg ICAgICAgICAoNykKKworI2RlZmluZSBHRU44X1JfUFdSX0NMS19TVEFURQkJMHgyMEM4CisjZGVm aW5lICAgR0VOOF9SUENTX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgR0VOOF9SUENTX1Nf Q05UX0VOQUJMRQkoMSA8PCAxOCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfU0hJRlQJCTE1 CisjZGVmaW5lICAgR0VOOF9SUENTX1NfQ05UX01BU0sJCSgweDcgPDwgR0VOOF9SUENTX1NfQ05U X1NISUZUKQorI2RlZmluZSAgIEdFTjExX1JQQ1NfU19DTlRfU0hJRlQJMTIKKyNkZWZpbmUgICBH RU4xMV9SUENTX1NfQ05UX01BU0sJCSgweDNmIDw8IEdFTjExX1JQQ1NfU19DTlRfU0hJRlQpCisj ZGVmaW5lICAgR0VOOF9SUENTX1NTX0NOVF9FTkFCTEUJKDEgPDwgMTEpCisjZGVmaW5lICAgR0VO OF9SUENTX1NTX0NOVF9TSElGVAk4CisjZGVmaW5lICAgR0VOOF9SUENTX1NTX0NOVF9NQVNLCQko MHg3IDw8IEdFTjhfUlBDU19TU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOOF9SUENTX0VVX01B WF9TSElGVAk0CisjZGVmaW5lICAgR0VOOF9SUENTX0VVX01BWF9NQVNLCQkoMHhmIDw8IEdFTjhf UlBDU19FVV9NQVhfU0hJRlQpCisjZGVmaW5lICAgR0VOOF9SUENTX0VVX01JTl9TSElGVAkwCisj ZGVmaW5lICAgR0VOOF9SUENTX0VVX01JTl9NQVNLCQkoMHhmIDw8IEdFTjhfUlBDU19FVV9NSU5f U0hJRlQpCisKKyNkZWZpbmUgUkNTX1RJTUVTVEFNUCAoMHgyMDAwICsgMHgzNTgpCisKK3N0YXRp YyB1bnNpZ25lZCBpbnQgX19pbnRlbF9nZW5fXywgX19pbnRlbF9kZXZpZF9fOworc3RhdGljIHVp bnQ2NF90IF9fc2xpY2VfbWFza19fLCBfX3N1YnNsaWNlX21hc2tfXzsKK3N0YXRpYyB1bnNpZ25l ZCBpbnQgX19zbGljZV9jb3VudF9fLCBfX3N1YnNsaWNlX2NvdW50X187CisKK3N0YXRpYyB1aW50 NjRfdCBtYXNrX21pbnVzX29uZSh1aW50NjRfdCBtYXNrKQoreworCXVuc2lnbmVkIGludCBpOwor CisJZm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykgKiA4IC0gMSk7IGkrKykgeworCQlpZiAo KDFVTEwgPDwgaSkgJiBtYXNrKQorCQkJcmV0dXJuIG1hc2sgJiB+KDFVTEwgPDwgaSk7CisJfQor CisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tf cGx1c19vbmUodWludDY0X3QgbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCAoc2l6ZW9mKG1hc2spICogOCAtIDEpOyBpKyspIHsKKwkJaWYgKCgoMVVMTCA8PCBp KSAmIG1hc2spID09IDApCisJCQlyZXR1cm4gbWFzayB8ICgxVUxMIDw8IGkpOworCX0KKworCWln dF9hc3NlcnQoMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBtYXNrX21pbnVz KHVpbnQ2NF90IG1hc2ssIGludCBuKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0g MDsgaSA8IG47IGkrKykKKwkJbWFzayA9IG1hc2tfbWludXNfb25lKG1hc2spOworCisJcmV0dXJu IG1hc2s7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBtYXNrX3BsdXModWludDY0X3QgbWFzaywgaW50 IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlt YXNrID0gbWFza19wbHVzX29uZShtYXNrKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMg dWludDMyX3QgKgorZmlsbF9yZWxvY2F0aW9uKHVpbnQzMl90ICpiYXRjaCwKKwkJc3RydWN0IGRy bV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKKwkJdWludDMyX3QgZ2VtX2hhbmRs ZSwgdWludDMyX3QgZGVsdGEsIC8qIGluIGJ5dGVzICovCisJCXVpbnQzMl90IG9mZnNldCwgLyog aW4gZHdvcmRzICovCisJCXVpbnQzMl90IHJlYWRfZG9tYWlucywgdWludDMyX3Qgd3JpdGVfZG9t YWlucykKK3sKKwlyZWxvYy0+dGFyZ2V0X2hhbmRsZSA9IGdlbV9oYW5kbGU7CisJcmVsb2MtPmRl bHRhID0gZGVsdGE7CisJcmVsb2MtPm9mZnNldCA9IG9mZnNldCAqIHNpemVvZih1aW50MzJfdCk7 CisJcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7CisJcmVsb2MtPnJlYWRfZG9tYWlucyA9IHJl YWRfZG9tYWluczsKKwlyZWxvYy0+d3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluczsKKworCSpi YXRjaCsrID0gZGVsdGE7CisJKmJhdGNoKysgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisK K3N0YXRpYyB1aW50MzJfdAorcmVhZF9ycGNzX3JlZyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWlu dDMyX3QgZXhwZWN0ZWRfc2xpY2VzLCBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlbG9jYXRpb25fZW50cnkgcmVsb2NzWzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9ialsyXTsKKwl1aW50MzJfdCAqYmF0Y2gsICpiLCBkYXRhWzJdOworCXVuc2lnbmVk IGludCBuX3JlbG9jcyA9IDA7CisJdWludDMyX3QgcnBjczsKKworCW1lbXNldChvYmosIDAsIHNp emVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJb2Jq WzFdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCisJYmF0Y2ggPSBiID0KKwkgICAg ICBnZW1fbW1hcF9fY3B1KGZkLCBvYmpbMV0uaGFuZGxlLCAwLCA0MDk2LCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFKTsKKworCWlmIChleHBlY3RlZF9zbGljZXMgIT0gMCAmJiBfX2ludGVsX2dlbl9f IDwgMTApCisJCSpiKysgPSBNSV9TRVRfUFJFRElDQVRFIHwgKDEgLSAxKSB8CisJCSAgICAgICAo TUlfU0VUX1BSRURJQ0FURV8xX1NMSUNFUyArIGV4cGVjdGVkX3NsaWNlcyAtIDEpOworCisJKmIr KyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisJKmIrKyA9IFJDU19USU1FU1RB TVA7CisJYiA9IGZpbGxfcmVsb2NhdGlvbihiLCAmcmVsb2NzW25fcmVsb2NzKytdLCBvYmpbMF0u aGFuZGxlLAorCQkJICAgIDAsIGIgLSBiYXRjaCwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVO REVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKKworCSpiKysgPSBNSV9TVE9SRV9SRUdJU1RF Ul9NRU0gfCAoNCAtIDIpOworCSpiKysgPSBHRU44X1JfUFdSX0NMS19TVEFURTsKKwliID0gZmls bF9yZWxvY2F0aW9uKGIsICZyZWxvY3Nbbl9yZWxvY3MrK10sIG9ialswXS5oYW5kbGUsCisJCQkg ICAgNCwgYiAtIGJhdGNoLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VN X0RPTUFJTl9SRU5ERVIpOworCisJaWYgKGV4cGVjdGVkX3NsaWNlcyAhPSAwICYmIF9faW50ZWxf Z2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9QUkVESUNBVEUgfCAoMSAtIDEpIHwgTUlfU0VU X1BSRURJQ0FURV9OT09QX05FVkVSOworCisJKmIrKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisK KwlnZW1fbXVubWFwKGJhdGNoLCA0MDk2KTsKKworCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0g bl9yZWxvY3M7CisJb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2NzKTsK KworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwlleGVjYnVm LmJ1ZmZlcl9jb3VudCA9IEFSUkFZX1NJWkUob2JqKTsKKwlpOTE1X2V4ZWNidWZmZXIyX3NldF9j b250ZXh0X2lkKGV4ZWNidWYsIGN0eCk7CisKKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwor CisJaWYgKHNwaW4pCisJCWlndF9zcGluX2JhdGNoX2VuZChzcGluKTsKKworCWdlbV9yZWFkKGZk LCBvYmpbMF0uaGFuZGxlLCAwLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCisJcnBjcyA9IGRhdGFb MV07CisKKwlpZ3RfZGVidWcoInJjc190aW1lc3RhbXA9MHgleCBycGNzPTB4JXhcbiIsIGRhdGFb MF0sIGRhdGFbMV0pOworCisJZ2VtX2Nsb3NlKGZkLCBvYmpbMF0uaGFuZGxlKTsKKwlnZW1fY2xv c2UoZmQsIG9ialsxXS5oYW5kbGUpOworCisJcmV0dXJuIHJwY3M7Cit9CisKK3R5cGVkZWYgdWlu dDMyX3QgKCpyZWFkX3NsaWNlX2NvdW50X2YpKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJf dCBleHBlY3RlZCwKKwkJCQkgICAgICAgaWd0X3NwaW5fdCAqc3Bpbik7CisKK3N0YXRpYyByZWFk X3NsaWNlX2NvdW50X2YgX19yZWFkX3NsaWNlX2NvdW50OworCitzdGF0aWMgdWludDMyX3QKK3Jl YWRfc2xpY2VfY291bnQoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQzMl90IGV4cGVjdGVkX3Ns aWNlX2NvdW50KQoreworCXJldHVybiBfX3JlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgZXhwZWN0 ZWRfc2xpY2VfY291bnQsIE5VTEwpOworfQorCitzdGF0aWMgdWludDMyX3QKK2dlbjhfcmVhZF9z bGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2Vf Y291bnQsCisJCSAgICAgIGlndF9zcGluX3QgKnNwaW4pCit7CisJcmV0dXJuIChyZWFkX3JwY3Nf cmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50LCBzcGluKSAmCisJCUdFTjhfUlBDU19T X0NOVF9NQVNLKSA+PiBHRU44X1JQQ1NfU19DTlRfU0hJRlQ7Cit9CisKK3N0YXRpYyB1aW50MzJf dAorZ2VuMTFfcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3Qg ZXhwZWN0ZWRfc2xpY2VfY291bnQsCisJCSAgICAgICBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXJl dHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCBleHBlY3RlZF9zbGljZV9jb3VudCwgc3Bpbikg JgorCQlHRU4xMV9SUENTX1NfQ05UX01BU0spID4+IEdFTjExX1JQQ1NfU19DTlRfU0hJRlQ7Cit9 CisKK3N0YXRpYyB1aW50MzJfdAorcmVhZF9zdWJzbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90 IGN0eCkKK3sKKwlyZXR1cm4gKHJlYWRfcnBjc19yZWcoZmQsIGN0eCwgMCwgTlVMTCkgJiBHRU44 X1JQQ1NfU1NfQ05UX01BU0spID4+CisJICAgICAgIEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cit9 CisKK3N0YXRpYyBib29sCitrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3NzZXVfc3VwcG9ydChpbnQg ZmQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBh cmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUgfTsKKworCXJldHVybiBfX2dlbV9jb250ZXh0 X2dldF9wYXJhbShmZCwgJmFyZykgPT0gMDsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfZ2V0 X3NzZXVfbWFza3MoaW50IGZkLCB1aW50MzJfdCBjdHgsCisJCSAgICAgICB1aW50NjRfdCAqc2xp Y2VfbWFzaywKKwkJICAgICAgIHVpbnQ2NF90ICpzdWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BB UkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwK KwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9n ZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWYgKHNsaWNlX21hc2spCisJCSpzbGljZV9tYXNrID0g c3NldS5zbGljZV9tYXNrOworCisJaWYgKHN1YnNsaWNlX21hc2spCisJCSpzdWJzbGljZV9tYXNr ID0gc3NldS5zdWJzbGljZV9tYXNrOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9zZXRfc2xp Y2VfbWFzayhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc2xpY2VfbWFzaykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVj dCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09O VEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yo c3NldSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2Nv bnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzc2V1LnNsaWNlX21hc2sgPSBzbGljZV9tYXNr OworCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitj b250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBz dWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1 IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJ CXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwK KwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIo JnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc3Vi c2xpY2VfbWFzayA9IHN1YnNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzbGljZSBj b3VudC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfc2xpY2VfcGcoaW50IGZkLCB1aW50MzJfdCBw Z19zbGljZV9jb3VudCkKK3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51cyhf X3NsaWNlX21hc2tfXywgcGdfc2xpY2VfY291bnQpOworCXVuc2lnbmVkIGludCBzbGljZV9jb3Vu dCA9IF9fc2xpY2VfY291bnRfXyAtIHBnX3NsaWNlX2NvdW50OworCXVpbnQ2NF90IHNsaWNlX21h c2s7CisJdWludDMyX3QgY3R4OworCisJaWd0X2Fzc2VydF9lcShzbGljZV9jb3VudCwgX19idWls dGluX3BvcGNvdW50KHBnX3NsaWNlX21hc2spKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0 ZShmZCk7CisJY29udGV4dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4LCBwZ19zbGljZV9tYXNrKTsK Kwljb250ZXh0X2dldF9zc2V1X21hc2tzKGZkLCBjdHgsICZzbGljZV9tYXNrLCBOVUxMKTsKKwlp Z3RfYXNzZXJ0X2VxKHBnX3NsaWNlX21hc2ssIHNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0 IGZhbHNlIHBvc2l0aXZlcyB3aXRoIHByZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICog YmVmb3JlIEdlbjEwKS4KKwkgKi8KKwlpZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNz ZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgX19zbGljZV9jb3VudF9fKSwgMCk7CisK KwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgMCksIHNsaWNlX2NvdW50 KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKKy8qCisgKiBWZXJpZnkg dGhhdCB3ZSBjYW4gcHJvZ3JhbSB0aGUgc3Vic2xpY2UgY291bnQuCisgKi8KK3N0YXRpYyB2b2lk Cit0ZXN0X3N1YnNsaWNlX3BnKGludCBmZCwgaW50IHBnX3N1YnNsaWNlX2NvdW50KQoreworCXVp bnQ2NF90IHBnX3N1YnNsaWNlX21hc2sgPQorCQltYXNrX21pbnVzKF9fc3Vic2xpY2VfbWFza19f LCBwZ19zdWJzbGljZV9jb3VudCk7CisJdW5zaWduZWQgaW50IHN1YnNsaWNlX2NvdW50ID0gX19z dWJzbGljZV9jb3VudF9fIC0gcGdfc3Vic2xpY2VfY291bnQ7CisJdWludDY0X3Qgc3Vic2xpY2Vf bWFzazsKKwl1aW50MzJfdCBjdHg7CisKKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX2NvdW50LCBf X2J1aWx0aW5fcG9wY291bnQocGdfc3Vic2xpY2VfbWFzaykpOworCisJY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGZkKTsKKwljb250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGZkLCBjdHgsIHBnX3N1 YnNsaWNlX21hc2spOworCWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgTlVMTCwgJnN1 YnNsaWNlX21hc2spOworCWlndF9hc3NlcnRfZXEocGdfc3Vic2xpY2VfbWFzaywgc3Vic2xpY2Vf bWFzayk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eCksIHN1 YnNsaWNlX2NvdW50KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKK3N0 YXRpYyBib29sIGhhc19lbmdpbmUoaW50IGZkLCB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVk IGludCBpbnN0YW5jZSkKK3sKKwlpbnQgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5H SU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSk7CisKKwlpZiAocG11ID49IDApCisJCWNsb3NlKHBt dSk7CisKKwlyZXR1cm4gcG11ID49IDA7Cit9CisKK3N0YXRpYyBib29sCitlbmdpbmVfc3VwcG9y dHNfc3NldShpbnQgZmQsIHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWduZWQgaW50IGluc3RhbmNl KQoreworCXJldHVybiBfX2ludGVsX2dlbl9fID49IDggJiYKKwkgICAgICAgY2xhc3MgPT0gSTkx NV9FTkdJTkVfQ0xBU1NfUkVOREVSICYmIGluc3RhbmNlID09IDAgPworCSAgICAgICB0cnVlIDog ZmFsc2U7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBpbnZhbGlkIGVuZ2luZXMgYXJlIHJlamVj dGVkIGFuZCB2YWxpZCBvbmVzIGFyZSBhY2NlcHRlZC4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9l bmdpbmVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3Nl dSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQor CQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1f Y29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1 ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3Rh bmNlOworCWludCBsYXN0X3dpdGhfZW5naW5lczsKKworCS8qIGdldF9wYXJhbSAqLworCisJc3Nl dS5pbnN0YW5jZSA9IC0xOyAvKiBBc3N1bWVkIGludmFsaWQuICovCisJaWd0X2Fzc2VydF9lcShf X2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJc3NldS5jbGFz cyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7IC8qIEJvdGggaW52YWxpZC4gKi8KKwlpZ3Rf YXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisK Kwlzc2V1Lmluc3RhbmNlID0gMDsgLyogQ2xhc3MgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJc3NldS5jbGFz cyA9IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7 CisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5j ZSA9IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNz ZXUuY2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0 ID0gX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2lu ZShmZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJ CQlsYXN0X3dpdGhfZW5naW5lcyA9IGNsYXNzOworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfYXNzZXJ0 X2VxKHJldCwgLUVJTlZBTCk7CisJCQkJaWYgKGluc3RhbmNlID4gOCkgLyogU2tpcCBvdmVyIHNv bWUgaW5zdGFuY2UgaG9sZXMuICovCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGNs YXNzIC0gbGFzdF93aXRoX2VuZ2luZXMgPiA4KSAvKiBTa2lwIG92ZXIgc29tZSBjbGFzcyBob2xl cy4gKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICogR2V0IHNvbWUgcHJvcGVyIHZhbHVlcyBi ZWZvcmUgdHJ5aW5nIHRvIHJlcHJvZ3JhbSB0aGVtIG9udG8KKwkgKiBhbiBpbnZhbGlkIGVuZ2lu ZS4KKwkgKi8KKwlzc2V1LmNsYXNzID0gMDsKKwlzc2V1Lmluc3RhbmNlID0gMDsKKwlnZW1fY29u dGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJLyogc2V0X3BhcmFtICovCisKKwlzc2V1Lmlu c3RhbmNlID0gLTE7IC8qIEFzc3VtZWQgaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1LmNsYXNzID0g STkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsgLyogQm90aCBpbnZhbGlkLiAqLworCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCXNz ZXUuaW5zdGFuY2UgPSAwOyAvKiBDbGFzcyBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCWxhc3Rfd2l0aF9l bmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJ Zm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKyspIHsKKwkJCWludCBy ZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5j ZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJCQlp ZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWlmIChlbmdpbmVfc3Vw cG9ydHNfc3NldShmZCwgY2xhc3MsIGluc3RhbmNlKSkKKwkJCQkJaWd0X2Fzc2VydF9lcShyZXQs IDApOworCQkJCWVsc2UKKwkJCQkJaWd0X2Fzc2VydF9lcShyZXQsIC1FTk9ERVYpOworCisJCQkJ bGFzdF93aXRoX2VuZ2luZXMgPSBjbGFzczsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2Fzc2VydF9l cShyZXQsIC1FSU5WQUwpOworCQkJCWlmIChpbnN0YW5jZSA+IDgpIC8qIFNraXAgb3ZlciBzb21l IGluc3RhbmNlIGhvbGVzLiAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbGFz cyAtIGxhc3Rfd2l0aF9lbmdpbmVzID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgY2xhc3MgaG9sZXMu ICovCisJCQlicmVhazsKKwl9CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lk KTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGludmFsaWQgYXJndW1lbnRzIGFyZSByZWplY3Rl ZC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfaW52YWxpZF9hcmdzKGludCBmZCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NP TlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwK KwkJfTsKKwl1bnNpZ25lZCBpbnQgc3o7CisJdm9pZCAqcGFnZVsyXTsKKworCS8qIGdldCBwYXJh bSAqLworCisJLyogSW52YWxpZCBzaXplLiAqLworCWFyZy5zaXplID0gMTsKKwlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBR dWVyeSBzaXplLiAqLworCWFyZy5zaXplID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRl eHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgMCk7CisJc3ogPSBhcmcuc2l6ZTsKKworCS8qIEJhZCBw b2ludGVycy4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVGQVVMVCk7CisJYXJnLnZhbHVlID0gLTE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IDE7CisJ aWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQp OworCisJLyogVW5tYXBwZWQuICovCisJcGFnZVswXSA9IG1tYXAoMCwgNDA5NiwgUFJPVF9XUklU RSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAh PSBNQVBfRkFJTEVEKTsKKwltdW5tYXAocGFnZVswXSwgNDA5Nik7CisJYXJnLnZhbHVlID0gdG9f dXNlcl9wb2ludGVyKHBhZ2VbMF0pOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKworCS8qIHNldCBwYXJhbSAqLworCisJLyogSW52 YWxpZCBzaXplcy4gKi8KKwlhcmcuc2l6ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJYXJnLnNpemUgPSAwOworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsK Kwlhcmcuc2l6ZSA9IHN6OworCisJLyogQmFkIHBvaW50ZXJzLiAqLworCWFyZy52YWx1ZSA9IDA7 CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFV TFQpOworCWFyZy52YWx1ZSA9IC0xOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRf cGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwlhcmcudmFsdWUgPSAxOworCWlndF9hc3NlcnRf ZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKworCS8qIFVu bWFwZXBkLiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDQwOTYsIFBST1RfV1JJVEUsIE1BUF9QUklW QVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxF RCk7CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYpOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRl cihwYWdlWzBdKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVGQVVMVCk7CisKKwkvKiBSZWFkLW9ubHkuICovCisJcGFnZVswXSA9IG1tYXAoMCwg NDA5NiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9h c3NlcnQocGFnZVswXSAhPSBNQVBfRkFJTEVEKTsKKwlpZ3RfYXNzZXJ0KG1wcm90ZWN0KHBhZ2Vb MF0sIDQwOTYsIFBST1RfUkVBRCkgPT0gMCk7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVy KHBhZ2VbMF0pOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZh cmcpLCAtRUZBVUxUKTsKKwltdW5tYXAocGFnZVswXSwgNDA5Nik7CisKKwkvKiBTdHJhZGRsZSBp bnRvIHVubWFwcGVkIGFyZWEuICovCisJcGFnZVswXSA9IG1tYXAoMCwgNDA5NiwgUFJPVF9XUklU RSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAh PSBNQVBfRkFJTEVEKTsKKwlwYWdlWzFdID0gbW1hcCgodm9pZCAqKSgodW5zaWduZWQgbG9uZylw YWdlWzBdICsgNDA5NiksIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8 IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzFdICE9IE1B UF9GQUlMRUQpOworCW11bm1hcChwYWdlWzFdLCA0MDk2KTsKKwlhcmcudmFsdWUgPSB0b191c2Vy X3BvaW50ZXIocGFnZVswXSkgLQorCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbV9zc2V1KSAtIDQ7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9w YXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKworCS8q IFN0cmFkZGxlIGludG8gcmVhZC1vbmx5IGFyZWEuICovCisJcGFnZVswXSA9IG1tYXAoMCwgNDA5 NiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWlndF9hc3Nl cnQocGFnZVswXSAhPSBNQVBfRkFJTEVEKTsKKwlwYWdlWzFdID0gbW1hcCgodm9pZCAqKSgodW5z aWduZWQgbG9uZylwYWdlWzBdICsgNDA5NiksIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBN QVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChw YWdlWzFdICE9IE1BUF9GQUlMRUQpOworCWlndF9hc3NlcnQobXByb3RlY3QocGFnZVsxXSwgNDA5 NiwgUFJPVF9SRUFEKSA9PSAwKTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIocGFnZVsw XSkgLQorCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1 KSAtIDQ7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyks IC1FRkFVTFQpOworCW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKwltdW5tYXAocGFnZVsxXSwgNDA5 Nik7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4X2lkKTsKK30KKworLyoKKyAq IFZlcmlmeSB0aGF0IGludmFsaWQgU1NFVSB2YWx1ZXMgYXJlIHJlamVjdGVkLgorICovCitzdGF0 aWMgdm9pZAordGVzdF9pbnZhbGlkX3NzZXUoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fY29udGV4dF9wYXJhbV9zc2V1IGRlZmF1bHRfc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9T U0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0g c2l6ZW9mKHNzZXUpLAorCQl9OworCXVuc2lnbmVkIGludCBpOworCisJLyogRmV0Y2ggdGhlIGRl dmljZSBkZWZhdWx0cy4gKi8KKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmRlZmF1bHRf c3NldSk7CisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWFyZy52YWx1ZSA9 IHRvX3VzZXJfcG9pbnRlcigmc3NldSk7CisKKwkvKiBUcnkgYWxsIHNsaWNlIG1hc2tzIGtub3du IHRvIGJlIGludmFsaWQuICovCisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlmb3IgKGkgPSAxOyBp IDw9ICg4IC0gX19zbGljZV9jb3VudF9fKTsgaSsrKSB7CisJCXNzZXUuc2xpY2VfbWFzayA9IG1h c2tfcGx1cyhfX3NsaWNlX21hc2tfXywgaSk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisKKwkvKiAwIHNsaWNlcy4gKi8K Kwlzc2V1LnNsaWNlX21hc2sgPSAwOworCWlndF9hc3NlcnRfZXEoLUVJTlZBTCwgX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpKTsKKworCS8qIFRyeSBhbGwgc3Vic2xpY2UgbWFza3Mg a25vd24gdG8gYmUgaW52YWxpZC4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCWZvciAoaSA9 IDE7IGkgPD0gKDggLSBfX3N1YnNsaWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zdWJzbGlj ZV9tYXNrID0gbWFza19wbHVzKF9fc3Vic2xpY2VfbWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9l cShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8q IDAgc3Vic2xpY2VzLiAqLworCXNzZXUuc3Vic2xpY2VfbWFzayA9IDA7CisJaWd0X2Fzc2VydF9l cShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogVHJ5 IG51bWJlciBvZiBFVXMgc3VwZXJpb3IgdG8gdGhlIG1heCBhdmFpbGFibGUuICovCisJc3NldSA9 IGRlZmF1bHRfc3NldTsKKwlzc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gZGVmYXVsdF9zc2V1 Lm1heF9ldXNfcGVyX3N1YnNsaWNlICsgMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1ID0gZGVmYXVsdF9zc2V1Owor CXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSBkZWZhdWx0X3NzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgKyAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpLCAtRUlOVkFMKTsKKworCS8qIFRyeSB0byBwcm9ncmFtIDAgbWF4IEVVcy4gKi8KKwlzc2V1 ID0gZGVmYXVsdF9zc2V1OworCXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAwOworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwor CS8qIE1pbiA+IG1heCAqLworCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJc3NldS5taW5fZXVzX3Bl cl9zdWJzbGljZSA9IHNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2U7CisJc3NldS5tYXhfZXVzX3Bl cl9zdWJzbGljZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShm ZCwgJmFyZyksIC1FSU5WQUwpOworCisJaWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpCisJCWdvdG8g b3V0OworCisJLyogU3Vic2V0IG9mIHN1YnNsaWNlcyBidXQgc2xpY2UgbWFzayBncmVhdGVyIHRo YW4gb25lLiAqLworCWlmIChfX3NsaWNlX2NvdW50X18gPiAxKSB7CisJCXNzZXUgPSBkZWZhdWx0 X3NzZXU7CisJCXNzZXUuc3Vic2xpY2VfbWFzayA9IG1hc2tfbWludXNfb25lKHNzZXUuc3Vic2xp Y2VfbWFzayk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpLCAtRUlOVkFMKTsKKwl9CisKKwkvKiBPZGQgc3Vic2xpY2VzIGFib3ZlIGZvdXIuICovCisJ c3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJz bGljZV9tYXNrID0gbWFza19taW51c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkv KiBNb3JlIHRoYW4gaGFsZiBzdWJzbGljZXMgd2l0aCBvbmUgc2xpY2UuICovCisJc3NldSA9IGRl ZmF1bHRfc3NldTsKKwlzc2V1LnNsaWNlX21hc2sgPSAweDE7CisJc3NldS5zdWJzbGljZV9tYXNr ID0gbWFza19taW51cyhzc2V1LnN1YnNsaWNlX21hc2ssCisJCQkJCV9fc3Vic2xpY2VfY291bnRf XyAvIDIgLSAxKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVJTlZBTCk7CisKK291dDoKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBhcmcuY3R4 X2lkKTsKK30KKworLyogVmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCByZXR1cm5zIGEgY29ycmVjdCBl cnJvciB2YWx1ZSBvbiBHZW4gPCA4LiAqLworc3RhdGljIHZvaWQKK2luaXRfY29udGV4dHMoaW50 IGZkLCB1aW50MzJfdCAqY3R4LCB1bnNpZ25lZCBpbnQgbnVtLAorCSAgICAgIHVpbnQ2NF90IG1h c2swLCB1aW50NjRfdCBtYXNrMSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9hc3NlcnRf ZXEobnVtLCAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY3R4W2ldID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGZkKTsKKworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFsw XSwgbWFzazApOworCWNvbnRleHRfc2V0X3NsaWNlX21hc2soZmQsIGN0eFsxXSwgbWFzazEpOwor fQorCisvKgorICogVmVyaWZ5IHRoYXQgcG93ZXJnYXRpbmcgc2V0dGluZ3MgYXJlIHB1dCBvbiBo b2xkIHdoaWxlIGk5MTUvcGVyZiBpcworICogYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAordGVz dF9wZXJmX29hKGludCBmZCkKK3sKKwl1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisJCS8qIElu Y2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1Q TEVfT0EsIHRydWUsCisKKwkJLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisJCURSTV9JOTE1 X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgMSwgLyogdGVzdCBtZXRyaWMgKi8KKwkJRFJNX0k5 MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwgSTkxNV9PQV9GT1JNQVRfQTMydTQwX0E0dTMyX0I4X0M4 LAorCQlEUk1fSTkxNV9QRVJGX1BST1BfT0FfRVhQT05FTlQsIDIwLAorCX07CisJc3RydWN0IGRy bV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKwkJLmZsYWdzID0gSTkxNV9QRVJGX0ZM QUdfRkRfQ0xPRVhFQyB8CisJCUk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NLLAorCQkubnVtX3By b3BlcnRpZXMgPSBBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC8gMiwKKwkJLnByb3BlcnRpZXNfcHRy ID0gdG9fdXNlcl9wb2ludGVyKHByb3BlcnRpZXMpLAorCX07CisJdWludDY0X3QgcGdfc2xpY2Vf bWFzayA9IG1hc2tfbWludXNfb25lKF9fc2xpY2VfbWFza19fKTsKKwl1bnNpZ25lZCBpbnQgc2xp Y2VfY291bnQgPSBfX3NsaWNlX2NvdW50X18gLSAxOworCXVpbnQzMl90IGN0eFsyXTsKKwl1bnNp Z25lZCBpbnQgaTsKKwlpbnQgcGVyZl9mZDsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwgQVJS QVlfU0laRShjdHgpLCBfX3NsaWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgorCSAq IFRlc3QgZmFsc2UgcG9zaXRpdmVzIHdpdGggcHJlZGljYXRlcyAob25seSBhdmFpbGFibGUgb24K KwkgKiBiZWZvcmUgR2VuMTApLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWln dF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18p LAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0 eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2Nv dW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisKKwkvKgorCSAqIE5vdyBvcGVuIGk5 MTUvcGVyZiBhbmQgdmVyaWZ5IHRoYXQgYWxsIGNvbnRleHRzIGhhdmUgYmVlbgorCSAqIHJlY29u ZmlndXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lv Y3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9m ZChwZXJmX2ZkKTsKKworCWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChfX2ludGVs X2dlbl9fIDwgMTApCisJCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsx XSwgc2xpY2VfY291bnQpLAorCQkJCSAgICAgIDApOworCisJCWlndF9hc3NlcnRfZXEocmVhZF9z bGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJaWd0X2Fzc2Vy dF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2NvdW50X18pOwor CX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAw KSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwg MSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4WzBdKSwKKwkJ CSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vi c2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAy KTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xvc2luZyB0aGUg cGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sgdG8gdGhlIHBy b2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTApCisJCWlndF9h c3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2NvdW50X18pLCAw KTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIF9fc2xp Y2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0s IDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgpOyBp KyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7CisKKwkvKgorCSAqIE9wZW4g aTkxNS9wZXJmIGZpcnN0IGFuZCB2ZXJpZnkgdGhhdCBhbGwgY29udGV4dHMgY3JlYXRlZAorCSAq IGFmdGVyd2FyZCBhcmUgY29uZmlndXJlZCB0byB0aGUgZGV2aWNlJ3MgZGVmYXVsdC4KKwkgKi8K KwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJh bSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWluaXRfY29udGV4dHMoZmQsIGN0eCwg QVJSQVlfU0laRShjdHgpLCBfX3NsaWNlX21hc2tfXywgcGdfc2xpY2VfbWFzayk7CisKKwkvKgor CSAqIENoZWNrIHRoZSBkZXZpY2UncyBkZWZhdWx0IHZhbHVlcywgZGVzcGl0ZSBzZXR0aW5nCisJ ICogb3RoZXJ3aXNlLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fICE9IDExKSB7CisJCWlmIChf X2ludGVsX2dlbl9fIDwgMTApCisJCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQs IGN0eFsxXSwKKwkJCQkJCSAgICAgICBzbGljZV9jb3VudCksIDApOworCisJCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwkJ aWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBfX3NsaWNlX2Nv dW50X18pOworCX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwg Y3R4WzBdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4 WzFdLCAwKSwgMSk7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwgY3R4 WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0X2Vx KHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2Nv dW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIgY2xv c2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJhY2sg dG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwgMTAp CisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNlX2Nv dW50X18pLAorCQkJICAgICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQo ZmQsIGN0eFswXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3Ns aWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCBzbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtp XSk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50MzJf dCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkg b3B0cyA9IHsKKwkJLmN0eCA9IGN0eCwKKwkJLmVuZ2luZSA9IGZsYWdzLAorCX07CisKKwlpZiAo Z2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxhZ3MpKQorCQlvcHRzLmZsYWdzIHw9IElHVF9TUElO X1BPTExfUlVOOworCisJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShmZCwgJm9wdHMp OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3NwaW5fd2FpdChpbnQgZmQsIGlndF9zcGlu X3QgKnNwaW4pCit7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0X25zZWNf ZWxhcHNlZCgmc3RhcnQpOworCisJaWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJdW5zaWduZWQgbG9u ZyB0aW1lb3V0ID0gMDsKKworCQl3aGlsZSAoIVJFQURfT05DRSgqc3Bpbi0+cnVubmluZykpIHsK KwkJCXVuc2lnbmVkIGxvbmcgdCA9IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCQkJaWYg KCh0IC0gdGltZW91dCkgPiAyNTBlNikgeworCQkJCXRpbWVvdXQgPSB0OworCQkJCWlndF93YXJu KCJTcGlubmVyIG5vdCBydW5uaW5nIGFmdGVyICUuMmZtc1xuIiwKKwkJCQkJIChkb3VibGUpdCAv IDFlNik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZ3RfZGVidWcoIl9fc3Bpbl93YWl0IC0g dXNsZWVwIG1vZGVcbiIpOworCQl1c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBub3RoaW5n ISAqLworCX0KKworCXJldHVybiBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7Cit9CisKK3N0YXRp YyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCit7CisJaWd0X3NwaW5fdCAqc3BpbiA9IF9fc3Bpbl9wb2xsKGZkLCBjdHgs IGZsYWdzKTsKKworCV9fc3Bpbl93YWl0KGZkLCBzcGluKTsKKworCXJldHVybiBzcGluOworfQor CitzdGF0aWMgdWludDMyX3QKK3JlYWRfc2xpY2VfY291bnRfYnVzeShpbnQgZmQsIHVpbnQzMl90 IGNvbnRleHQsIHVpbnQzMl90IGV4cGVjdGVkLAorCQkgICAgICBpZ3Rfc3Bpbl90ICpzcGluKQor eworCXJldHVybiBfX3JlYWRfc2xpY2VfY291bnQoZmQsIGNvbnRleHQsIGV4cGVjdGVkLCBzcGlu KTsKK30KKworI2RlZmluZSBURVNUX0lETEUgKDEpCisjZGVmaW5lIFRFU1RfQlVTWSAoMikKKwor LyoKKyAqIFRlc3QgY29udGV4dCByZS1jb25maWd1cmF0aW9uIHdpdGggZWl0aGVyIGlkbGUgb3Ig YnVzeSBjb250ZXh0cy4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfZHluYW1pYyhpbnQgZmQsIHVu c2lnbmVkIGludCBmbGFncykKK3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51 c19vbmUoX19zbGljZV9tYXNrX18pOworCXVuc2lnbmVkIGludCBwZ19zbGljZV9jb3VudCA9IF9f c2xpY2VfY291bnRfXyAtIDE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3Nz ZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0K KwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAuY3R4X2lkID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFs dWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisJaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7 CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJLyogRmlyc3Qgc2V0IHRo ZSBkZWZhdWx0IG1hc2sgKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJCXNwaW4gPSBfX3Nw aW5fc3luYyhmZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlzc2V1LnNsaWNl X21hc2sgPSBfX3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcp OworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5jdHhfaWQs IDAsIHNwaW4pLAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOworCWlndF9hc3NlcnRfZXEocmVh ZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisKKwlpZiAoc3Bpbikg eworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9IE5VTEw7CisJfQor CisJaWYgKGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9Q X1JFVElSRSB8IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCS8qIFRoZW4gc2V0IGEgcG93 ZXJnYXRlZCBjb25maWd1cmF0aW9uICovCisJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQorCQlzcGlu ID0gX19zcGluX3N5bmMoZmQsIGFyZy5jdHhfaWQsIEk5MTVfRVhFQ19SRU5ERVIpOworCisJc3Nl dS5zbGljZV9tYXNrID0gcGdfc2xpY2VfbWFzazsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQs ICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQsIGFyZy5j dHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBwZ19zbGljZV9jb3VudCk7CisJaWd0X2Fzc2VydF9l cShyZWFkX3NsaWNlX2NvdW50KGZkLCAwLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKworCWlmIChz cGluKSB7CisJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOworCQlzcGluID0gTlVMTDsK Kwl9CisKKwlpZiAoZmxhZ3MgJiBURVNUX0lETEUpCisJCWlndF9kcm9wX2NhY2hlc19zZXQoZmQs IERST1BfUkVUSVJFIHwgRFJPUF9JRExFIHwgRFJPUF9BQ1RJVkUpOworCisJLyogUHV0IHRoZSBk ZXZpY2UncyBkZWZhdWx0IGJhY2sgYWdhaW4gKi8KKwlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCisJ CXNwaW4gPSBfX3NwaW5fc3luYyhmZCwgYXJnLmN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUik7CisK Kwlzc2V1LnNsaWNlX21hc2sgPSBfX3NsaWNlX21hc2tfXzsKKwlnZW1fY29udGV4dF9zZXRfcGFy YW0oZmQsICZhcmcpOworCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50X2J1c3koZmQs IGFyZy5jdHhfaWQsIDAsIHNwaW4pLAorCQkgICAgICBfX3NsaWNlX2NvdW50X18pOworCWlndF9h c3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2VfY291bnRfXyk7CisK KwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKKwkJc3BpbiA9 IE5VTEw7CisJfQorCisJaWYgKGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNf c2V0KGZkLCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCS8qIE9u ZSBsYXN0IHBvd2VyZ2F0ZWQgY29uZmlnIGZvciB0aGUgcm9hZC4uLiAqLworCWlmIChmbGFncyAm IFRFU1RfQlVTWSkKKwkJc3BpbiA9IF9fc3Bpbl9zeW5jKGZkLCBhcmcuY3R4X2lkLCBJOTE1X0VY RUNfUkVOREVSKTsKKworCXNzZXUuc2xpY2VfbWFzayA9IHBnX3NsaWNlX21hc2s7CisJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9j b3VudF9idXN5KGZkLCBhcmcuY3R4X2lkLCAwLCBzcGluKSwKKwkJICAgICAgcGdfc2xpY2VfY291 bnQpOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2Vf Y291bnRfXyk7CisKKwlpZiAoc3BpbikgeworCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGZkLCBzcGlu KTsKKwkJc3BpbiA9IE5VTEw7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0 eF9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfdW5zdXBwb3J0ZWRfZGV2aWNlKGludCBmZCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSkgfTsKKworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0o ZmQsICZhcmcpLCAtRU5PREVWKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhf aWQpOworfQorCitzdGF0aWMgYm9vbAorcGxhdGZvcm1faGFzX3Blcl9jb250ZXh0X3NzZXVfc3Vw cG9ydCh2b2lkKQoreworCXJldHVybiBfX2ludGVsX2dlbl9fID09IDExOworfQorCitpZ3RfbWFp bgoreworCXVuc2lnbmVkIGludCBtYXhfc2xpY2VzID0gMywgbWF4X3N1YnNsaWNlcyA9IDM7CisJ dW5zaWduZWQgaW50IGk7CisJaW50IGZkOworCisJaWd0X2ZpeHR1cmUgeworCQlmZCA9IGRybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOworCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOworCisJCV9f aW50ZWxfZGV2aWRfXyA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOworCQlfX2ludGVsX2dlbl9f ID0gaW50ZWxfZ2VuKF9faW50ZWxfZGV2aWRfXyk7CisKKwkJaWd0X3JlcXVpcmUoa2VybmVsX2hh c19wZXJfY29udGV4dF9zc2V1X3N1cHBvcnQoZmQpKTsKKworCQlpZiAoX19pbnRlbF9nZW5fXyA+ PSAxMSkKKwkJCV9fcmVhZF9zbGljZV9jb3VudCA9IGdlbjExX3JlYWRfc2xpY2VfY291bnQ7CisJ CWVsc2UKKwkJCV9fcmVhZF9zbGljZV9jb3VudCA9IGdlbjhfcmVhZF9zbGljZV9jb3VudDsKKwl9 CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWlndF9maXh0dXJlIHsKKwkJCWlndF9yZXF1aXJl KCFwbGF0Zm9ybV9oYXNfcGVyX2NvbnRleHRfc3NldV9zdXBwb3J0KCkpOworCQl9CisKKwkJaWd0 X3N1YnRlc3QoInVuc3VwcG9ydGVkLWRldmljZSIpCisJCQl0ZXN0X3Vuc3VwcG9ydGVkX2Rldmlj ZShmZCk7CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQlpZ3RfZml4dHVyZSB7CisJCQlk cm1faTkxNV9nZXRwYXJhbV90IGdwOworCisJCQlpZ3RfcmVxdWlyZShwbGF0Zm9ybV9oYXNfcGVy X2NvbnRleHRfc3NldV9zdXBwb3J0KCkpOworCisJCQlncC5wYXJhbSA9IEk5MTVfUEFSQU1fU0xJ Q0VfTUFTSzsKKwkJCWdwLnZhbHVlID0gKGludCAqKSAmX19zbGljZV9tYXNrX187CisJCQlkb19p b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7CisJCQlfX3NsaWNlX2NvdW50 X18gPSBfX2J1aWx0aW5fcG9wY291bnQoX19zbGljZV9tYXNrX18pOworCisJCQlncC5wYXJhbSA9 IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSzsKKwkJCWdwLnZhbHVlID0gKGludCAqKSAmX19zdWJz bGljZV9tYXNrX187CisJCQlkb19pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZn cCk7CisJCQlfX3N1YnNsaWNlX2NvdW50X18gPQorCQkJCV9fYnVpbHRpbl9wb3Bjb3VudChfX3N1 YnNsaWNlX21hc2tfXyk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiaW52YWxpZC1hcmdzIikKKwkJ CXRlc3RfaW52YWxpZF9hcmdzKGZkKTsKKworCQlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zc2V1IikK KwkJCXRlc3RfaW52YWxpZF9zc2V1KGZkKTsKKworCQlpZ3Rfc3VidGVzdCgiZW5naW5lcyIpCisJ CQl0ZXN0X2VuZ2luZXMoZmQpOworCisJCWZvciAoaSA9IDE7IGkgPCBtYXhfc2xpY2VzOyBpKysp IHsKKwkJCWlndF9zdWJ0ZXN0X2YoInNsaWNlLXBnLSVpIiwgaSkgeworCQkJCWlndF9yZXF1aXJl KF9fc2xpY2VfY291bnRfXyA+IGkpOworCisJCQkJdGVzdF9zbGljZV9wZyhmZCwgaSk7CisJCQl9 CisJCX0KKworCQlmb3IgKGkgPSAxOyBpIDwgbWF4X3N1YnNsaWNlczsgaSsrKSB7CisJCQlpZ3Rf c3VidGVzdF9mKCJzdWJzbGljZS1wZy0laSIsIGkpIHsKKwkJCQlpZ3RfcmVxdWlyZShfX3N1YnNs aWNlX2NvdW50X18gPj0gMik7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgYXZhaWxhYmxlIG9uIHNv bWUgQXRvbSBwbGF0Zm9ybXMgYW5kCisJCQkJICogR2VuMTArLgorCQkJCSAqLworCQkJCWlndF9y ZXF1aXJlKElTX0JST1hUT04oX19pbnRlbF9kZXZpZF9fKSB8fAorCQkJCQkgICAgSVNfR0VNSU5J TEFLRShfX2ludGVsX2RldmlkX18pIHx8CisJCQkJCSAgICBfX2ludGVsX2dlbl9fID49IDEwKTsK KworCQkJCXRlc3Rfc3Vic2xpY2VfcGcoZmQsIGkpOworCQkJfQorCQl9CisKKwkJaWd0X3N1YnRl c3QoInNzZXUtcGVyZi1vYSIpIHsKKwkJCWlndF9yZXF1aXJlKF9fc2xpY2VfY291bnRfXyA+IDEp OworCisJCQl0ZXN0X3BlcmZfb2EoZmQpOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMi KSB7CisJCQlpZ3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiAxKTsKKworCQkJdGVzdF9keW5h bWljKGZkLCAwKTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljLWJ1c3kiKSB7CisJCQlp Z3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiAxKTsKKworCQkJdGVzdF9keW5hbWljKGZkLCBU RVNUX0JVU1kpOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtaWRsZSIpIHsKKwkJCWln dF9yZXF1aXJlKF9fc2xpY2VfY291bnRfXyA+IDEpOworCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRF U1RfSURMRSk7CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWNsb3NlKGZkKTsKKwl9Cit9 CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4 IDE3ZGViOTQ1ZWM5NS4uOTMxOWZhNGUxOWI0IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWls ZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMjQ5LDYgKzI0OSwxMyBAQCBmb3JlYWNoIHBy b2cgOiB0ZXN0X3Byb2dzCiAJCSAgIGluc3RhbGwgOiB0cnVlKQogZW5kZm9yZWFjaAogCit0ZXN0 X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9jdHhfc3NldScsICdnZW1fY3R4X3NzZXUu YycsCisJICAgZGVwZW5kZW5jaWVzIDogdGVzdF9kZXBzICsgWyBsaWJfaWd0X3BlcmYgXSwKKwkg ICBpbnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCisJICAgaW5zdGFsbF9ycGF0aCA6IGxpYmV4ZWNk aXJfcnBhdGhkaXIsCisJICAgaW5zdGFsbCA6IHRydWUpCit0ZXN0X3Byb2dzICs9ICdnZW1fY3R4 X3NzZXUnCisKIHRlc3RfZXhlY3V0YWJsZXMgKz0gZXhlY3V0YWJsZSgnZ2VtX2VpbycsICdnZW1f ZWlvLmMnLAogCSAgIGRlcGVuZGVuY2llcyA6IHRlc3RfZGVwcyArIFsgcmVhbHRpbWUgXSwKIAkg ICBpbnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldgo=