From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: [PATCH i-g-t] igt: add timeline test cases Date: Fri, 7 Dec 2018 18:05:57 +0800 Message-ID: <20181207100557.2536-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Christian.Koenig@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Chunming Zhou List-Id: dri-devel@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KLS0tCiBp bmNsdWRlL2RybS11YXBpL2RybS5oICAgfCAgIDMzICsrCiBsaWIvaWd0X3N5bmNvYmouYyAgICAg ICAgfCAgMjA0ICsrKysrKysKIGxpYi9pZ3Rfc3luY29iai5oICAgICAgICB8ICAgMTkgKwogdGVz dHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAgMSArCiB0ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMg fCAxMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNo YW5nZWQsIDEzNTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3N5bmNv YmpfdGltZWxpbmUuYwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmggYi9pbmNs dWRlL2RybS11YXBpL2RybS5oCmluZGV4IGYwYmQ5MWRlLi4wZjVkZjBiNiAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0tdWFwaS9kcm0uaAorKysgYi9pbmNsdWRlL2RybS11YXBpL2RybS5oCkBAIC03 MTUsNiArNzE1LDggQEAgc3RydWN0IGRybV9zeW5jb2JqX2hhbmRsZSB7CiAKICNkZWZpbmUgRFJN X1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTCAoMSA8PCAwKQogI2RlZmluZSBEUk1fU1lOQ09C Sl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCAoMSA8PCAxKQorLyogd2FpdCBmb3IgdGltZSBw b2ludCB0byBiZWNvbWUgYXZhaWxhYmxlICovCisjZGVmaW5lIERSTV9TWU5DT0JKX1dBSVRfRkxB R1NfV0FJVF9BVkFJTEFCTEUgKDEgPDwgMikKIHN0cnVjdCBkcm1fc3luY29ial93YWl0IHsKIAlf X3U2NCBoYW5kbGVzOwogCS8qIGFic29sdXRlIHRpbWVvdXQgKi8KQEAgLTcyNSwxMSArNzI3LDM3 IEBAIHN0cnVjdCBkcm1fc3luY29ial93YWl0IHsKIAlfX3UzMiBwYWQ7CiB9OwogCitzdHJ1Y3Qg ZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB7CisgICAgICAgIF9fdTY0IGhhbmRsZXM7CisgICAg ICAgIC8qIHdhaXQgb24gc3BlY2lmaWMgdGltZWxpbmUgcG9pbnQgZm9yIGV2ZXJ5IGhhbmRsZXMq LworICAgICAgICBfX3U2NCBwb2ludHM7CisgICAgICAgIC8qIGFic29sdXRlIHRpbWVvdXQgKi8K KyAgICAgICAgX19zNjQgdGltZW91dF9uc2VjOworICAgICAgICBfX3UzMiBjb3VudF9oYW5kbGVz OworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgZmlyc3Rfc2lnbmFsZWQ7IC8q IG9ubHkgdmFsaWQgd2hlbiBub3Qgd2FpdGluZyBhbGwgKi8KKyAgICAgICAgX191MzIgcGFkOwor fTsKKwogc3RydWN0IGRybV9zeW5jb2JqX2FycmF5IHsKIAlfX3U2NCBoYW5kbGVzOwogCV9fdTMy IGNvdW50X2hhbmRsZXM7CiAJX191MzIgcGFkOwogfTsKK3N0cnVjdCBkcm1fc3luY29ial90aW1l bGluZV9hcnJheSB7CisgICAgICAgX191NjQgaGFuZGxlczsKKyAgICAgICBfX3U2NCBwb2ludHM7 CisgICAgICAgX191MzIgY291bnRfaGFuZGxlczsKKyAgICAgICBfX3UzMiBwYWQ7Cit9OworCitz dHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgeworICAgICAgICBfX3UzMiBiaW5hcnlfaGFuZGxl OworICAgICAgICBfX3UzMiB0aW1lbGluZV9oYW5kbGU7CisgICAgICAgIF9fdTY0IHBvaW50Owor ICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgcGFkOworfTsKIAogLyogUXVlcnkg Y3VycmVudCBzY2Fub3V0IHNlcXVlbmNlIG51bWJlciAqLwogc3RydWN0IGRybV9jcnRjX2dldF9z ZXF1ZW5jZSB7CkBAIC04ODYsNiArOTE0LDExIEBAIGV4dGVybiAiQyIgewogI2RlZmluZSBEUk1f SU9DVExfTU9ERV9MSVNUX0xFU1NFRVMJRFJNX0lPV1IoMHhDNywgc3RydWN0IGRybV9tb2RlX2xp c3RfbGVzc2VlcykKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUX0xFQVNFCURSTV9JT1dSKDB4 QzgsIHN0cnVjdCBkcm1fbW9kZV9nZXRfbGVhc2UpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1JF Vk9LRV9MRUFTRQlEUk1fSU9XUigweEM5LCBzdHJ1Y3QgZHJtX21vZGVfcmV2b2tlX2xlYXNlKQor I2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlUIERSTV9JT1dSKDB4Q0EsIHN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0KQorI2RlZmluZSBEUk1fSU9DVExfU1lOQ09C Sl9RVUVSWSAgICAgICAgIERSTV9JT1dSKDB4Q0IsIHN0cnVjdCBkcm1fc3luY29ial90aW1lbGlu ZV9hcnJheSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfQklOQVJZX1RPX1RJTUVMSU5FICAg IERSTV9JT1dSKDB4Q0MsIHN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlcikKKyNkZWZpbmUgRFJN X0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfVE9fQklOQVJZICAgIERSTV9JT1dSKDB4Q0QsIHN0cnVj dCBkcm1fc3luY29ial90cmFuc2ZlcikKKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJ TkVfU0lHTkFMICAgIERSTV9JT1dSKDB4Q0UsIHN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9h cnJheSkKIAogLyoqCiAgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNob3VsZCBvbmx5IGJlIGlu IHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwpkaWZmIC0tZ2l0IGEvbGliL2lndF9zeW5jb2JqLmMg Yi9saWIvaWd0X3N5bmNvYmouYwppbmRleCBkOTExNGNhOC4uYTNiNmE5MGIgMTAwNjQ0Ci0tLSBh L2xpYi9pZ3Rfc3luY29iai5jCisrKyBiL2xpYi9pZ3Rfc3luY29iai5jCkBAIC0yODYsMyArMjg2 LDIwNyBAQCBzeW5jb2JqX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJf dCBjb3VudCkKIHsKIAlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial9zaWduYWwoZmQsIGhhbmRsZXMs IGNvdW50KSwgMCk7CiB9CisKK3N0YXRpYyBpbnQKK19fc3luY29ial90aW1lbGluZV9zaWduYWwo aW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywgdWludDMyX3QgY291 bnQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07 CisJaW50IGVyciA9IDA7CisKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRs ZXMpOworCWFycmF5LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihwb2ludHMpOworCWFycmF5LmNv dW50X2hhbmRsZXMgPSBjb3VudDsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JK X1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KSkKKwkJZXJyID0gLWVycm5vOworCXJldHVybiBlcnI7 Cit9CisKKy8qKgorICogc3luY29ial9zaWduYWw6CisgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNj cmlwdG9yLgorICogQGhhbmRsZXM6IEFycmF5IG9mIHN5bmNvYmogaGFuZGxlcyB0byBzaWduYWwK KyAqIEBwb2ludHM6IExpc3Qgb2YgcG9pbnQgb2YgaGFuZGxlcyB0byBzaWduYWwuCisgKiBAY291 bnQ6IENvdW50IG9mIHN5bmNvYmogaGFuZGxlcy4KKyAqCisgKiBTaWduYWwgYSBzZXQgb2Ygc3lu Y29ianMuCisgKi8KK3ZvaWQKK3N5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGludCBmZCwgdWludDMy X3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsIHVpbnQzMl90IGNvdW50KQoreworCWlndF9h c3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgaGFuZGxlcywgcG9pbnRzLCBj b3VudCksIDApOworfQoraW50CitfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChpbnQgZmQs IHN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0ICphcmdzKQoreworCWludCBlcnIgPSAw OworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfV0FJVCwgYXJn cykpCisJCWVyciA9IC1lcnJubzsKKwlyZXR1cm4gZXJyOworfQorc3RhdGljIGludAorX19zeW5j b2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBv aW50cywKKwkJCXVuc2lnbmVkIG51bV9oYW5kbGVzLAorCQkJaW50NjRfdCB0aW1lb3V0X25zZWMs IHVuc2lnbmVkIGZsYWdzLAorCQkJdWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKQoreworCXN0cnVj dCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IGFyZ3M7CisJaW50IHJldDsKKworCWFyZ3MuaGFu ZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihoYW5kbGVzKTsKKwlhcmdzLnBvaW50cyA9ICh1aW50NjRf dCl0b191c2VyX3BvaW50ZXIocG9pbnRzKTsKKwlhcmdzLnRpbWVvdXRfbnNlYyA9IHRpbWVvdXRf bnNlYzsKKwlhcmdzLmNvdW50X2hhbmRsZXMgPSBudW1faGFuZGxlczsKKwlhcmdzLmZsYWdzID0g ZmxhZ3M7CisJYXJncy5maXJzdF9zaWduYWxlZCA9IDA7CisJYXJncy5wYWQgPSAwOworCisJcmV0 ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQsICZhcmdzKTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCWlmIChmaXJzdF9zaWduYWxlZCkK KwkJKmZpcnN0X3NpZ25hbGVkID0gYXJncy5maXJzdF9zaWduYWxlZDsKKworCXJldHVybiByZXQ7 Cit9CitpbnQKK3N5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFu ZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJCSAgdW5zaWduZWQgbnVtX2hhbmRsZXMsCisJCQkg IGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncykKK3sKKwlyZXR1cm4gX19zeW5j b2JqX3RpbWVsaW5lX3dhaXQoZmQsIGhhbmRsZXMsIHBvaW50cywgbnVtX2hhbmRsZXMsCisJCQkJ ICAgICAgIHRpbWVvdXRfbnNlYywgZmxhZ3MsIE5VTEwpOworfQorCisvKioKKyAqIHN5bmNvYmpf dGltZWxpbmVfd2FpdDoKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5k bGVzOiBMaXN0IG9mIHN5bmNvYmogaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBwb2ludHM6IExp c3Qgb2YgcG9pbnQgb2YgaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBudW1faGFuZGxlczogQ291 bnQgb2YgaGFuZGxlcworICogQHRpbWVvdXRfbnNlYzogQWJzb2x1dGUgd2FpdCB0aW1lb3V0IGlu IG5hbm9zZWNvbmRzLgorICogQGZsYWdzOiBXYWl0IGlvY3RsIGZsYWdzLgorICogQGZpcnN0X3Np Z25hbGVkOiBSZXR1cm5lZCBoYW5kbGUgZm9yIGZpcnN0IHNpZ25hbGVkIHN5bmNvYmouCisgKgor ICogV2FpdHMgaW4gdGhlIGtlcm5lbCBmb3IgYW55L2FsbCB0aGUgcmVxdWVzdGVkIHN5bmNvYmpz IHRpbWVsaW5lIHBvaW50CisgKiB1c2luZyB0aGUgdGltZW91dCBhbmQgZmxhZ3MuCisgKiBSZXR1 cm5zOiBib29sIHZhbHVlIC0gZmFsc2UgPSB0aW1lZG91dCwgdHJ1ZSA9IHNpZ25hbGVkCisgKi8K K2Jvb2wKK3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1 aW50NjRfdCAqcG9pbnRzLAorCQkgICAgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJICAgICAg aW50NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgICB1aW50MzJfdCAq Zmlyc3Rfc2lnbmFsZWQpCit7CisJaW50IHJldDsKKworCXJldCA9IF9fc3luY29ial90aW1lbGlu ZV93YWl0KGZkLCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5kbGVzLAorCQkJCSAgICAgIHRpbWVv dXRfbnNlYywgZmxhZ3MsIGZpcnN0X3NpZ25hbGVkKTsKKwlpZiAocmV0ID09IC1FVElNRSkKKwkJ cmV0dXJuIGZhbHNlOworCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCXJldHVybiB0cnVlOwor Cit9CisKK3N0YXRpYyBpbnQKK19fc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQz Ml90ICpoYW5kbGVzLCB1aW50NjRfdCAqKnBvaW50cywKKwkJCSB1aW50MzJfdCBoYW5kbGVfY291 bnQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3M7CisJaW50IHJl dDsKKworCWFyZ3MuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihoYW5kbGVzKTsKKwlhcmdzLnBv aW50cyA9ICh1aW50NjRfdCl0b191c2VyX3BvaW50ZXIocG9pbnRzKTsKKwlhcmdzLmNvdW50X2hh bmRsZXMgPSBoYW5kbGVfY291bnQ7CisJYXJncy5wYWQgPSAwOworCisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAmYXJncyk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5Ogor ICogQGZkOiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEBoYW5kbGVzOiBBcnJheSBvZiBz eW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnRzOiBBcnJheSBvZiBzeW5jb2JqIHBvaW50cyBxdWVy aWVkLgorICogQGNvdW50OiBDb3VudCBvZiBzeW5jb2JqIGhhbmRsZXMuCisgKgorICogcXVlcnkg YSBzZXQgb2Ygc3luY29ianMuCisgKi8KK3ZvaWQKK3N5bmNvYmpfdGltZWxpbmVfcXVlcnkoaW50 IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKipwb2ludHMsCisJCSAgICAgICB1aW50 MzJfdCBjb3VudCkKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9xdWVyeShm ZCwgaGFuZGxlcywgcG9pbnRzLCBjb3VudCksIDApOworfQorCitzdGF0aWMgaW50CitfX3N5bmNv YmpfYmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAor CQkJICAgICB1aW50NjRfdCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlzdHJ1 Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJnczsKKworCWFyZ3MuYmluYXJ5X2hhbmRsZSA9IGJp bmFyeV9oYW5kbGU7CisJYXJncy50aW1lbGluZV9oYW5kbGUgPSB0aW1lbGluZV9oYW5kbGU7CisJ YXJncy5wb2ludCA9IHBvaW50OworCWFyZ3MuZmxhZ3MgPSAwOworCWFyZ3MucGFkID0gMDsKKwly ZXR1cm4gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX0JJTkFSWV9UT19USU1FTElORSwg JmFyZ3MpOworfQorCisvKioKKyAqIHN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lOgorICogQGZk OiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEB0aW1lbGluZV9oYW5kbGVzOiBBcnJheSBv ZiB0aW1lbGluZSBzeW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnQ6IHN5bmNvYmogcG9pbnQuCisg KiBAYmluYXJ5X2hhbmRsZTogQXJyYXkgb2YgYmluYXJ5IHN5bmNvYmogaGFuZGxlcy4KKyAqCisg KiBxdWVyeSBhIHNldCBvZiBzeW5jb2Jqcy4KKyAqLwordm9pZAorc3luY29ial9iaW5hcnlfdG9f dGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCisJCQkgICB1aW50NjRf dCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3lu Y29ial9iaW5hcnlfdG9fdGltZWxpbmUoZmQsIHRpbWVsaW5lX2hhbmRsZSwgcG9pbnQsCisJCQkJ CQkgICBiaW5hcnlfaGFuZGxlKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK19fc3luY29ial90aW1l bGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlLAorCQkJICAgICB1 aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCisJCQkgICAgIHVpbnQ2NF90IHBvaW50LAorCQkJICAg ICB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJnczsK KworCWFyZ3MuYmluYXJ5X2hhbmRsZSA9IGJpbmFyeV9oYW5kbGU7CisJYXJncy50aW1lbGluZV9o YW5kbGUgPSB0aW1lbGluZV9oYW5kbGU7CisJYXJncy5wb2ludCA9IHBvaW50OworCWFyZ3MuZmxh Z3MgPSBmbGFnczsKKwlhcmdzLnBhZCA9IDA7CisJcmV0dXJuIGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9UT19CSU5BUlksICZhcmdzKTsKK30KKworLyoqCisgKiBzeW5j b2JqX2JpbmFyeV90b190aW1lbGluZToKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3Iu CisgKiBAdGltZWxpbmVfaGFuZGxlczogQXJyYXkgb2YgdGltZWxpbmUgc3luY29iaiBoYW5kbGVz LgorICogQHBvaW50OiBzeW5jb2JqIHBvaW50LgorICogQGJpbmFyeV9oYW5kbGU6IEFycmF5IG9m IGJpbmFyeSBzeW5jb2JqIGhhbmRsZXMuCisgKgorICogcXVlcnkgYSBzZXQgb2Ygc3luY29ianMu CisgKi8KK3ZvaWQKK3N5bmNvYmpfdGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwgdWludDMyX3Qg YmluYXJ5X2hhbmRsZSwKKwkJCSAgIHVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwKKwkJCSAgIHVp bnQ2NF90IHBvaW50LAorCQkJICAgdWludDMyX3QgZmxhZ3MpCit7CisJaWd0X2Fzc2VydF9lcShf X3N5bmNvYmpfdGltZWxpbmVfdG9fYmluYXJ5KGZkLCBiaW5hcnlfaGFuZGxlLAorCQkJCQkJICAg dGltZWxpbmVfaGFuZGxlLCBwb2ludCwKKwkJCQkJCSAgIGZsYWdzKSwgMCk7Cit9CmRpZmYgLS1n aXQgYS9saWIvaWd0X3N5bmNvYmouaCBiL2xpYi9pZ3Rfc3luY29iai5oCmluZGV4IDQ0ZDEzNzhk Li4xNzVlNTAyNyAxMDA2NDQKLS0tIGEvbGliL2lndF9zeW5jb2JqLmgKKysrIGIvbGliL2lndF9z eW5jb2JqLmgKQEAgLTY1LDcgKzY1LDI2IEBAIGludCBzeW5jb2JqX3dhaXRfZXJyKGludCBmZCwg dWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50LAogYm9vbCBzeW5jb2JqX3dhaXQoaW50 IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291bnQsCiAJCSAgdWludDY0X3QgYWJz X3RpbWVvdXRfbnNlYywgdWludDMyX3QgZmxhZ3MsCiAJCSAgdWludDMyX3QgKmZpcnN0X3NpZ25h bGVkKTsKK2ludCBfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChpbnQgZmQsCisJCQkJICBz dHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCAqYXJncyk7Citib29sIHN5bmNvYmpfdGlt ZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAor CQkJICAgdW5zaWduZWQgbnVtX2hhbmRsZXMsCisJCQkgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywg dW5zaWduZWQgZmxhZ3MsCisJCQkgICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOworaW50IHN5 bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0 X3QgKnBvaW50cywKKwkJCSAgICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLAorCQkJICAgICAgaW50 NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzKTsKIHZvaWQgc3luY29ial9yZXNldChp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBjb3VudCk7CiB2b2lkIHN5bmNvYmpf c2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KTsKK3ZvaWQg c3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRf dCAqKnBvaW50cywKKwkJCSAgICB1aW50MzJfdCBjb3VudCk7Cit2b2lkIHN5bmNvYmpfYmluYXJ5 X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJCXVpbnQ2 NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKTsKK3ZvaWQgc3luY29ial90aW1lbGlu ZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlLAorCQkJCXVpbnQzMl90 IHRpbWVsaW5lX2hhbmRsZSwKKwkJCQl1aW50NjRfdCBwb2ludCwKKwkJCQl1aW50MzJfdCBmbGFn cyk7Cit2b2lkIHN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRs ZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgICAgIHVpbnQzMl90IGNvdW50KTsKIAogI2VuZGlm IC8qIElHVF9TWU5DT0JKX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVz dHMvbWVzb24uYnVpbGQKaW5kZXggMzAyMGY3OTguLjhiNWRiNTQxIDEwMDY0NAotLS0gYS90ZXN0 cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtODMsNiArODMsNyBAQCB0 ZXN0X3Byb2dzID0gWwogCSdzd19zeW5jJywKIAknc3luY29ial9iYXNpYycsCiAJJ3N5bmNvYmpf d2FpdCcsCisJJ3N5bmNvYmpfdGltZWxpbmUnLAogCSd0ZW1wbGF0ZScsCiAJJ3Rvb2xzX3Rlc3Qn LAogCSd2YzRfY3JlYXRlX2JvJywKZGlmZiAtLWdpdCBhL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUu YyBiL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMC4uYWFmNThhMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zeW5jb2JqX3RpbWVs aW5lLmMKQEAgLTAsMCArMSwxMTAwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgInN3X3N5bmMuaCIKKyNpbmNsdWRl ICJpZ3Rfc3luY29iai5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4K KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8 c2lnbmFsLmg+CisjaW5jbHVkZSAiZHJtLmgiCisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0 cyBmb3IgdGhlIGRybSB0aW1lbGluZSBzeW5jIG9iamVjdCBBUEkiKTsKKworLyogT25lIHRlbnRo IG9mIGEgc2Vjb25kICovCisjZGVmaW5lIFNIT1JUX1RJTUVfTlNFQyAxMDAwMDAwMDB1bGwKKwor I2RlZmluZSBOU0VDU19QRVJfU0VDIDEwMDAwMDAwMDB1bGwKKworc3RhdGljIHVpbnQ2NF90Citn ZXR0aW1lX25zKHZvaWQpCit7CisJc3RydWN0IHRpbWVzcGVjIGN1cnJlbnQ7CisJY2xvY2tfZ2V0 dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJyZW50KTsKKwlyZXR1cm4gKHVpbnQ2NF90KWN1cnJl bnQudHZfc2VjICogTlNFQ1NfUEVSX1NFQyArIGN1cnJlbnQudHZfbnNlYzsKK30KKworc3RhdGlj IHZvaWQKK3NsZWVwX25zZWModWludDY0X3QgdGltZV9uc2VjKQoreworCXN0cnVjdCB0aW1lc3Bl YyB0OworCXQudHZfc2VjID0gdGltZV9uc2VjIC8gTlNFQ1NfUEVSX1NFQzsKKwl0LnR2X25zZWMg PSB0aW1lX25zZWMgJSBOU0VDU19QRVJfU0VDOworCWlndF9hc3NlcnRfZXEobmFub3NsZWVwKCZ0 LCBOVUxMKSwgMCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorc2hvcnRfdGltZW91dCh2b2lkKQor eworCXJldHVybiBnZXR0aW1lX25zKCkgKyBTSE9SVF9USU1FX05TRUM7Cit9CisKK3N0YXRpYyBp bnQKK3N5bmNvYmpfYXR0YWNoX3N3X3N5bmMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IHBvaW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial9oYW5kbGU7CisJdWludDMyX3Qgc3lu Y29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwlpbnQgdGltZWxpbmUsIGZlbmNlOworCisJ dGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOworCWZlbmNlID0gc3dfc3luY190 aW1lbGluZV9jcmVhdGVfZmVuY2UodGltZWxpbmUsIDEpOworCXN5bmNvYmpfaW1wb3J0X3N5bmNf ZmlsZShmZCwgc3luY29iaiwgZmVuY2UpOworCXN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGZk LCBoYW5kbGUsIHBvaW50LCBzeW5jb2JqKTsKKwljbG9zZShmZW5jZSk7CisKKwlzeW5jb2JqX2Rl c3Ryb3koZmQsIHN5bmNvYmopOworCXJldHVybiB0aW1lbGluZTsKK30KKworc3RhdGljIHZvaWQK K3N5bmNvYmpfdHJpZ2dlcihpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgcG9pbnQp Cit7CisJaW50IHRpbWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgaGFuZGxlLCBw b2ludCk7CisJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOworCWNsb3NlKHRpbWVs aW5lKTsKK30KKworc3RhdGljIHRpbWVyX3QKK3NldF90aW1lcih2b2lkICgqY2IpKHVuaW9uIHNp Z3ZhbCksIHZvaWQgKnB0ciwgaW50IGksIHVpbnQ2NF90IG5zZWMpCit7CisgICAgICAgIHRpbWVy X3QgdGltZXI7CisgICAgICAgIHN0cnVjdCBzaWdldmVudCBzZXY7CisgICAgICAgIHN0cnVjdCBp dGltZXJzcGVjIGl0czsKKworICAgICAgICBtZW1zZXQoJnNldiwgMCwgc2l6ZW9mKHNldikpOwor ICAgICAgICBzZXYuc2lnZXZfbm90aWZ5ID0gU0lHRVZfVEhSRUFEOworCWlmIChwdHIpCisJCXNl di5zaWdldl92YWx1ZS5zaXZhbF9wdHIgPSBwdHI7CisJZWxzZQorCQlzZXYuc2lnZXZfdmFsdWUu c2l2YWxfaW50ID0gaTsKKyAgICAgICAgc2V2LnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IGNiOwor ICAgICAgICBpZ3RfYXNzZXJ0KHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZXYsICZ0 aW1lcikgPT0gMCk7CisKKyAgICAgICAgbWVtc2V0KCZpdHMsIDAsIHNpemVvZihpdHMpKTsKKyAg ICAgICAgaXRzLml0X3ZhbHVlLnR2X3NlYyA9IG5zZWMgLyBOU0VDX1BFUl9TRUM7CisgICAgICAg IGl0cy5pdF92YWx1ZS50dl9uc2VjID0gbnNlYyAlIE5TRUNfUEVSX1NFQzsKKyAgICAgICAgaWd0 X2Fzc2VydCh0aW1lcl9zZXR0aW1lKHRpbWVyLCAwLCAmaXRzLCBOVUxMKSA9PSAwKTsKKworCXJl dHVybiB0aW1lcjsKK30KKworc3RydWN0IGZkX2hhbmRsZV9wYWlyIHsKKwlpbnQgZmQ7CisJdWlu dDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IHBvaW50OworfTsKKworc3RhdGljIHZvaWQKK3RpbWVs aW5lX2luY19mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwpCit7CisJc3dfc3luY190aW1lbGluZV9p bmMoc2lndmFsLnNpdmFsX2ludCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzeW5jb2JqX3RyaWdn ZXJfZnJlZV9wYWlyX2Z1bmModW5pb24gc2lndmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFu ZGxlX3BhaXIgKnBhaXIgPSBzaWd2YWwuc2l2YWxfcHRyOworCXN5bmNvYmpfdHJpZ2dlcihwYWly LT5mZCwgcGFpci0+aGFuZGxlLCBwYWlyLT5wb2ludCk7CisJZnJlZShwYWlyKTsKK30KKworc3Rh dGljIHRpbWVyX3QKK3N5bmNvYmpfdHJpZ2dlcl9kZWxheWVkKGludCBmZCwgdWludDMyX3Qgc3lu Y29iaiwgdWludDY0X3QgcG9pbnQsIHVpbnQ2NF90IG5zZWMpCit7CisJc3RydWN0IGZkX2hhbmRs ZV9wYWlyICpwYWlyID0gbWFsbG9jKHNpemVvZigqcGFpcikpOworCisJcGFpci0+ZmQgPSBmZDsK KwlwYWlyLT5oYW5kbGUgPSBzeW5jb2JqOworCXBhaXItPnBvaW50ID0gc3luY29iajsKKworCXJl dHVybiBzZXRfdGltZXIoc3luY29ial90cmlnZ2VyX2ZyZWVfcGFpcl9mdW5jLCBwYWlyLCAwLCBu c2VjKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2FpdF9iYWRfZmxhZ3MoaW50IGZkKQorewor CXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl3YWl0LmZs YWdzID0gMHhkZWFkYmVlZjsKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0 X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF93YWl0 X3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dh aXQgd2FpdCA9IHsgMCB9OworCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRf aW9jdGwoZmQsICZ3YWl0KSwgLUVJTlZBTCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRf aWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93 YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCisJd2FpdC5jb3VudF9o YW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJ aWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAt RU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfemVyb19oYW5kbGVzKGludCBm ZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9Owor CWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlks ICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSAgRUlOVkFMKTsKK30K Kworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07CisJdWludDMyX3Qg aGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJncy5jb3VudF9oYW5kbGVzID0gMTsKKwlhcmdz LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEg JiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfb25lX2ls bGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJy YXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0 aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0 ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAwOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVh dGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwg JmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29i anNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxp bmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwKKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAw LCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAm c3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOworCisJYXJy YXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihz eW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAm YXJyYXkpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7CisKKwlz eW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5 bmNvYmpzWzJdKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfYmFkX3BhZChpbnQgZmQp Cit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07CisJ dWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJyYXkucGFkID0gMHhkZWFkYmVl ZjsKKwlhcnJheS5jb3VudF9oYW5kbGVzID0gMTsKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9w b2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9R VUVSWSwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwp OworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaWduYWxfemVyb19oYW5kbGVzKGludCBmZCkKK3sK KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9OworCWludCBy ZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lH TkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpZ25hbF9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpCit7 CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3MgPSB7IDAgfTsKKwl1aW50 MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7CisKKwlhcmdzLmNvdW50X2hhbmRsZXMgPSAxOwor CWFyZ3MuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fz c2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfc2lnbmFsX2lsbGVnYWxfcG9pbnQoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90 aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMTsKKwl1aW50 NjRfdCBwb2ludCA9IDA7CisJaW50IHJldDsKKworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJ YXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCWFyZ3MucG9pbnRzID0g dG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9T WU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYm IGVycm5vID09IEVOT0VOVCk7Cit9CitzdGF0aWMgdm9pZAordGVzdF9zaWduYWxfb25lX2lsbGVn YWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkg YXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0aWFs X3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShm ZCwgMCk7CisJc3luY29ianNbMV0gPSAwOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUo ZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwgJmlu aXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNb Ml0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVf d2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwKKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAw KSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3lu Y29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOworCisJYXJyYXku Y291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5j b2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJ R05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQp OworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9kZXN0cm95 KGZkLCBzeW5jb2Jqc1syXSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpZ25hbF9iYWRfcGFk KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7 IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7CisKKwlhcnJheS5wYWQgPSAw eGRlYWRiZWVmOworCWFycmF5LmNvdW50X2hhbmRsZXMgPSAxOworCWFycmF5LmhhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9T WU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAm JiBlcnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9iaW5hcnlfdG9fdGlt ZWxpbmVfaWxsZWdhbF9iaW5hcnlfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNv YmpfdHJhbnNmZXIgYXJncyA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50IHJl dDsKKworCWFyZ3MuYmluYXJ5X2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKKwly ZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfQklOQVJZX1RPX1RJTUVMSU5FLCAm YXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfYmluYXJ5X3RvX3RpbWVsaW5lX2lsbGVnYWxfdGltZWxpbmVfaGFu ZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJncyA9IHsgMCB9 OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZ3MudGltZWxpbmVfaGFu ZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1f SU9DVExfU1lOQ09CSl9CSU5BUllfVE9fVElNRUxJTkUsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJl dCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9iaW5h cnlfdG9fdGltZWxpbmVfaWxsZWdhbF9wb2ludChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5j b2JqX3RyYW5zZmVyIGFyZ3MgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUxID0gMTsKKwl1aW50 MzJfdCBoYW5kbGUyID0gMjsKKwlpbnQgcmV0OworCisJYXJncy5iaW5hcnlfaGFuZGxlID0gdG9f dXNlcl9wb2ludGVyKCZoYW5kbGUxKTsKKwlhcmdzLnRpbWVsaW5lX2hhbmRsZSA9IHRvX3VzZXJf cG9pbnRlcigmaGFuZGxlMik7CisJYXJncy5wb2ludCA9IDA7CisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9TWU5DT0JKX0JJTkFSWV9UT19USU1FTElORSwgJmFyZ3MpOworCWlndF9hc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0 X2JpbmFyeV90b190aW1lbGluZV9iYWRfcGFkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNv YmpfdHJhbnNmZXIgYXJnID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0 OworCisJYXJnLnBhZCA9IDB4ZGVhZGJlZWY7CisJYXJnLmJpbmFyeV9oYW5kbGUgPSB0b191c2Vy X3BvaW50ZXIoJmhhbmRsZSk7CisJYXJnLnRpbWVsaW5lX2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRl cigmaGFuZGxlKTsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfQklOQVJZ X1RPX1RJTUVMSU5FLCAmYXJnKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBF SU5WQUwpOworfQorc3RhdGljIHZvaWQKK3Rlc3RfdGltZWxpbmVfdG9fYmluYXJ5X2lsbGVnYWxf YmluYXJ5X2hhbmRsZShpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFy Z3MgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7CisKKwlhcmdzLmJp bmFyeV9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1RPX0JJTkFSWSwgJmFyZ3MpOworCWlndF9h c3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCit0 ZXN0X3RpbWVsaW5lX3RvX2JpbmFyeV9pbGxlZ2FsX3RpbWVsaW5lX2hhbmRsZShpbnQgZmQpCit7 CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3MgPSB7IDAgfTsKKwl1aW50MzJfdCBo YW5kbGUgPSAwOworCWludCByZXQ7CisKKwlhcmdzLnRpbWVsaW5lX2hhbmRsZSA9IHRvX3VzZXJf cG9pbnRlcigmaGFuZGxlKTsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpf VElNRUxJTkVfVE9fQklOQVJZLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJy bm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfdGltZWxpbmVfdG9fYmluYXJ5 X2lsbGVnYWxfcG9pbnQoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBh cmdzID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlMSA9IDE7CisJdWludDMyX3QgaGFuZGxlMiA9 IDI7CisJaW50IHJldDsKKworCWFyZ3MuYmluYXJ5X2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigm aGFuZGxlMSk7CisJYXJncy50aW1lbGluZV9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRs ZTIpOworCWFyZ3MucG9pbnQgPSAwOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lO Q09CSl9USU1FTElORV9UT19CSU5BUlksICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAm JiBlcnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF90aW1lbGluZV90b19i aW5hcnlfYmFkX3BhZChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFy ZyA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZy5wYWQg PSAweGRlYWRiZWVmOworCWFyZy5iaW5hcnlfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5k bGUpOworCWFyZy50aW1lbGluZV9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1RPX0JJTkFSWSwg JmFyZyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsKK30KKyNk ZWZpbmUgV0FJVF9GT1JfU1VCTUlUCQkoMSA8PCAwKQorI2RlZmluZSBXQUlUX0FMTAkJKDEgPDwg MSkKKyNkZWZpbmUgV0FJVF9BVkFJTEFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIFdBSVRfVU5TVUJN SVRURUQJKDEgPDwgMykKKyNkZWZpbmUgV0FJVF9TVUJNSVRURUQJCSgxIDw8IDQpCisjZGVmaW5l IFdBSVRfU0lHTkFMRUQJCSgxIDw8IDUpCisjZGVmaW5lIFdBSVRfRkxBR1NfTUFYCQkoMSA8PCA2 KSAtIDEKKworc3RhdGljIHVpbnQzMl90CitmbGFnc19mb3JfdGVzdF9mbGFncyh1aW50MzJfdCB0 ZXN0X2ZsYWdzKQoreworCXVpbnQzMl90IGZsYWdzID0gMDsKKworCWlmICh0ZXN0X2ZsYWdzICYg V0FJVF9GT1JfU1VCTUlUKQorCQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRf Rk9SX1NVQk1JVDsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BVkFJTEFCTEUpCisJCWZsYWdz IHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9BVkFJTEFCTEU7CisKKwlpZiAodGVzdF9m bGFncyAmIFdBSVRfQUxMKQorCQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRf QUxMOworCisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaW5nbGVfd2Fp dChpbnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MsIGludCBleHBlY3QpCit7CisJdWludDMyX3Qg c3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50MzJfdCBmbGFncyA9IGZsYWdz X2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKwlpbnQg dGltZWxpbmUgPSAtMTsKKworCWlmICh0ZXN0X2ZsYWdzICYgKFdBSVRfU1VCTUlUVEVEIHwgV0FJ VF9TSUdOQUxFRCkpCisJCXRpbWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3lu Y29iaiwgcG9pbnQpOworCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX1NJR05BTEVEKQorCQlzd19z eW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpf dGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJCQkwLCBmbGFn cyksIGV4cGVjdCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIo ZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJCQlzaG9ydF90aW1lb3V0KCksIGZsYWdzKSwg ZXhwZWN0KTsKKworCWlmIChleHBlY3QgIT0gLUVUSU1FKSB7CisJCWlndF9hc3NlcnRfZXEoc3lu Y29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwKKwkJCQkJCQlV SU5UNjRfTUFYLCBmbGFncyksIGV4cGVjdCk7CisJfQorCisJc3luY29ial9kZXN0cm95KGZkLCBz eW5jb2JqKTsKKwlpZiAodGltZWxpbmUgIT0gLTEpCisJCWNsb3NlKHRpbWVsaW5lKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90IHRl c3RfZmxhZ3MpCit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsK Kwl1aW50MzJfdCBmbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCXVp bnQ2NF90IHBvaW50ID0gMTsKKwlpbnQgdGltZWxpbmUgPSAtMTsKKwl0aW1lcl90IHRpbWVyOwor CisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpIHsKKwkJdGltZXIgPSBzeW5jb2Jq X3RyaWdnZXJfZGVsYXllZChmZCwgc3luY29iaiwgcG9pbnQsIFNIT1JUX1RJTUVfTlNFQyk7CisJ fSBlbHNlIHsKKwkJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jq LCBwb2ludCk7CisJCXRpbWVyID0gc2V0X3RpbWVyKHRpbWVsaW5lX2luY19mdW5jLCBOVUxMLAor CQkJCSAgdGltZWxpbmUsIFNIT1JUX1RJTUVfTlNFQyk7CisJfQorCisJaWd0X2Fzc2VydChzeW5j b2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJZ2V0dGltZV9u cygpICsgU0hPUlRfVElNRV9OU0VDICogMiwKKwkJCQlmbGFncywgTlVMTCkpOworCisJdGltZXJf ZGVsZXRlKHRpbWVyKTsKKworCWlmICh0aW1lbGluZSAhPSAtMSkKKwkJY2xvc2UodGltZWxpbmUp OworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3RfcmVzZXRfdW5zaWduYWxlZChpbnQgZmQpCit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisKKwlpZ3RfYXNzZXJ0X2Vx KHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkx LCAwLCAwKSwgLUVJTlZBTCk7CisKKwlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29iaiwgMSk7CisK KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAm cG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQs IHN5bmNvYmopOworfQorCitzdGF0aWMgdm9pZAordGVzdF9yZXNldF9zaWduYWxlZChpbnQgZmQp Cit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50NjRf dCBwb2ludCA9IDE7CisKKwlzeW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmosIHBvaW50KTsKKwor CWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZw b2ludCwKKwkJCQkJCTEsIDAsIDApLCAwKTsKKworCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jq LCAxKTsKKworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5 bmNvYmosICZwb2ludCwKKwkJCQkJCTEsIDAsIDApLCAtRUlOVkFMKTsKKworCXN5bmNvYmpfZGVz dHJveShmZCwgc3luY29iaik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X211bHRpcGxl X3NpZ25hbGVkKGludCBmZCkKK3sKKwl1aW50NjRfdCBwb2ludHNbM10gPSB7MSwgMSwgMX07CisJ dWludDMyX3Qgc3luY29ianNbM107CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KSB7CisJCXN5bmNvYmpzW2ldID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCQlzeW5jb2JqX3Ry aWdnZXIoZmQsIHN5bmNvYmpzW2ldLCBwb2ludHNbaV0pOworCX0KKworCWlndF9hc3NlcnRfZXEo c3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3luY29ianMsIHBvaW50cywgMywgMCwgMCks IDApOworCisJc3luY29ial9yZXNldChmZCwgc3luY29ianMsIDMpOworCisJZm9yIChpID0gMDsg aSA8IDM7IGkrKykgeworCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIo ZmQsICZzeW5jb2Jqc1tpXSwKKwkJCQkJCQkmcG9pbnRzW2ldLCAxLAorCQkJCQkJCTAsIDApLCAt RUlOVkFMKTsKKwkJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1tpXSk7CisJfQorfQorCitz dGF0aWMgdm9pZAorcmVzZXRfYW5kX3RyaWdnZXJfZnVuYyh1bmlvbiBzaWd2YWwgc2lndmFsKQor eworCXN0cnVjdCBmZF9oYW5kbGVfcGFpciAqcGFpciA9IHNpZ3ZhbC5zaXZhbF9wdHI7CisJc3lu Y29ial9yZXNldChwYWlyLT5mZCwgJnBhaXItPmhhbmRsZSwgMSk7CisJc3luY29ial90cmlnZ2Vy KHBhaXItPmZkLCBwYWlyLT5oYW5kbGUsIHBhaXItPnBvaW50KTsKK30KKworc3RhdGljIHZvaWQK K3Rlc3RfcmVzZXRfZHVyaW5nX3dhaXRfZm9yX3N1Ym1pdChpbnQgZmQpCit7CisJdWludDMyX3Qg c3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50MzJfdCBmbGFncyA9IExPQ0FM X1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7CisJc3RydWN0IGZkX2hhbmRsZV9w YWlyIHBhaXI7CisJdWludDY0X3QgcG9pbnQgPSAxOworCXRpbWVyX3QgdGltZXI7CisKKwlwYWly LmZkID0gZmQ7CisJcGFpci5oYW5kbGUgPSBzeW5jb2JqOworCXRpbWVyID0gc2V0X3RpbWVyKHJl c2V0X2FuZF90cmlnZ2VyX2Z1bmMsICZwYWlyLCAwLCBTSE9SVF9USU1FX05TRUMpOworCisJLyog QSByZXNldCBzaG91bGQgYmUgYSBuby1vcCBldmVuIGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Yg YSB3YWl0ICovCisJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2Jq LCAmcG9pbnQsIDEsCisJCQkJZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDICogMiwKKwkJ CQlmbGFncywgTlVMTCkpOworCisJdGltZXJfZGVsZXRlKHRpbWVyKTsKKworCXN5bmNvYmpfZGVz dHJveShmZCwgc3luY29iaik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpZ25hbChpbnQgZmQp Cit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50MzJf dCBmbGFncyA9IExPQ0FMX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7CisJdWlu dDY0X3QgcG9pbnQgPSAxOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRf ZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOworCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2lu dCwKKwkJCQkJCTEsIDAsIGZsYWdzKSwgLUVUSU1FKTsKKworCXN5bmNvYmpfdGltZWxpbmVfc2ln bmFsKGZkLCAmc3luY29iaiwgJnBvaW50LCAxKTsKKworCWlndF9hc3NlcnQoc3luY29ial90aW1l bGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLCAwLCAwLCBOVUxMKSk7CisJaWd0X2Fz c2VydChzeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsIDAsIGZs YWdzLCBOVUxMKSk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitzdGF0 aWMgdm9pZAordGVzdF9tdWx0aV93YWl0KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncywgaW50 IGV4cGVjdCkKK3sKKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsKKwl1aW50MzJfdCB0ZmxhZywgZmxh Z3M7CisJaW50IGksIGZpZHgsIHRpbWVsaW5lOworCXVpbnQ2NF90IHBvaW50c1szXSA9IHsxLCAx LCAxfTsKKworCXN5bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpz WzFdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVh dGUoZmQsIDApOworCisJZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsK Kwl0ZXN0X2ZsYWdzICY9IH4oV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQgfCBXQUlUX0FWQUlM QUJMRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWZpZHggPSBmZnModGVzdF9m bGFncykgLSAxOworCQl0ZmxhZyA9ICgxIDw8IGZpZHgpOworCisJCWlmICh0ZXN0X2ZsYWdzICYg fnRmbGFnKQorCQkJdGVzdF9mbGFncyAmPSB+dGZsYWc7CisKKwkJaWYgKHRmbGFnICYgKFdBSVRf U1VCTUlUVEVEIHwgV0FJVF9TSUdOQUxFRCkpCisJCQl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNo X3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAgcG9pbnRzW2ldKTsKKwkJaWYgKHRm bGFnICYgV0FJVF9TSUdOQUxFRCkKKwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAx KTsKKwl9CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5 bmNvYmpzLCBwb2ludHMsIDMsIDAsIGZsYWdzKSwgZXhwZWN0KTsKKworCWlndF9hc3NlcnRfZXEo c3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3luY29ianMsIHBvaW50cywgMywgc2hvcnRf dGltZW91dCgpLAorCQkJCSAgICAgICBmbGFncyksIGV4cGVjdCk7CisKKwlpZiAoZXhwZWN0ICE9 IC1FVElNRSkgeworCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs IHN5bmNvYmpzLCBwb2ludHMsIDMsIFVJTlQ2NF9NQVgsCisJCQkJCSAgICAgICBmbGFncyksIGV4 cGVjdCk7CisJfQorCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2Jqc1sxXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jq c1syXSk7Cit9CisKK3N0cnVjdCB3YWl0X3RocmVhZF9kYXRhIHsKKwlpbnQgZmQ7CisJc3RydWN0 IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdDsKK307CisKK3N0YXRpYyB2b2lkICoKK3dh aXRfdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSAq d2FpdCA9IGRhdGE7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0 bCh3YWl0LT5mZCwgJndhaXQtPndhaXQpLCAwKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGlj IHZvaWQKK3Rlc3Rfd2FpdF9zbmFwc2hvdChpbnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7 CisJc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEgd2FpdCA9IHsgMCB9OworCXVpbnQzMl90IHN5bmNv YmpzWzJdOworCXVpbnQ2NF90IHBvaW50c1syXSA9IHsxLCAxfTsKKwlpbnQgdGltZWxpbmVzWzNd ID0geyAtMSwgLTEsIC0xIH07CisJcHRocmVhZF90IHRocmVhZDsKKworCXN5bmNvYmpzWzBdID0g c3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzFdID0gc3luY29ial9jcmVhdGUoZmQs IDApOworCisJaWYgKCEodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpIHsKKwkJdGltZWxp bmVzWzBdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbMF0sIHBvaW50c1sw XSk7CisJCXRpbWVsaW5lc1sxXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpz WzFdLCBwb2ludHNbMV0pOworCX0KKworCXdhaXQuZmQgPSBmZDsKKwl3YWl0LndhaXQuaGFuZGxl cyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJd2FpdC53YWl0LmNvdW50X2hhbmRsZXMg PSAyOworCXdhaXQud2FpdC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsKKwl3YWl0 LndhaXQudGltZW91dF9uc2VjID0gc2hvcnRfdGltZW91dCgpOworCXdhaXQud2FpdC5mbGFncyA9 IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCisJaWd0X2Fzc2VydF9lcShwdGhy ZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCB3YWl0X3RocmVhZF9mdW5jLCAmd2FpdCksIDApOwor CisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1KTsKKworCS8qIFRyeSB0byBmYWtlIHRo ZSBrZXJuZWwgb3V0IGJ5IHRyaWdnZXJpbmcgb3IgcGFydGlhbGx5IHRyaWdnZXJpbmcKKwkgKiB0 aGUgZmlyc3QgZmVuY2UuCisJICovCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkgeworCQkv KiBJZiBpdCdzIFdBSVRfQUxMLCBhY3R1YWxseSB0cmlnZ2VyIGl0ICovCisJCWlmICh0aW1lbGlu ZXNbMF0gPT0gLTEpCisJCQlzeW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNb MF0pOworCQllbHNlCisJCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZXNbMF0sIDEpOwor CX0gZWxzZSBpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgeworCQl0aW1lbGluZXNb MF0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsK Kwl9CisKKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOworCisJLyogVGhlbiByZXNl dCBpdCAqLworCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1swXSwgMSk7CisKKwlzbGVlcF9u c2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOworCisJLyogVGhlbiAic3VibWl0IiBpdCBpbiBhIHdh eSB0aGF0IHdpbGwgbmV2ZXIgdHJpZ2dlci4gIFRoaXMgd2F5LCBpZgorCSAqIHRoZSBrZXJuZWwg cGlja3MgdXAgb24gdGhlIG5ldyBmZW5jZSAoaXQgc2hvdWxkbid0KSwgd2UnbGwgZ2V0IGEKKwkg KiB0aW1lb3V0LgorCSAqLworCXRpbWVsaW5lc1syXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMo ZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0pOworCisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05T RUMgLyA1KTsKKworCS8qIE5vdyB0cmlnZ2VyIHRoZSBzZWNvbmQgZmVuY2UgdG8gY29tcGxldGUg dGhlIHdhaXQgKi8KKworCWlmICh0aW1lbGluZXNbMV0gPT0gLTEpCisJCXN5bmNvYmpfdHJpZ2dl cihmZCwgc3luY29ianNbMV0sIHBvaW50c1sxXSk7CisJZWxzZQorCQlzd19zeW5jX3RpbWVsaW5l X2luYyh0aW1lbGluZXNbMV0sIDEpOworCisJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CisK KwlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpKQorCQlpZ3RfYXNzZXJ0X2VxKHdhaXQud2Fp dC5maXJzdF9zaWduYWxlZCwgMSk7CisKKwljbG9zZSh0aW1lbGluZXNbMF0pOworCWNsb3NlKHRp bWVsaW5lc1sxXSk7CisJY2xvc2UodGltZWxpbmVzWzJdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQs IHN5bmNvYmpzWzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzFdKTsKK30KKwor LyogVGhlIG51bWJlcnMgMC03LCBlYWNoIHJlcGVhdGVkIDV4IGFuZCBzaHVmZmxlZC4gKi8KK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBzaHVmZmxlZF8wXzdfeDRbXSA9IHsKKwkyLCAwLCA2LCAxLCAx LCA0LCA1LCAyLCAwLCA3LCAxLCA3LCA2LCAzLCA0LCA1LAorCTAsIDIsIDcsIDMsIDUsIDQsIDAs IDYsIDcsIDMsIDIsIDUsIDYsIDEsIDQsIDMsCit9OworCitlbnVtIHN5bmNvYmpfc3RhZ2Ugewor CVNUQUdFX1VOU1VCTUlUVEVELAorCVNUQUdFX1NVQk1JVFRFRCwKKwlTVEFHRV9TSUdOQUxFRCwK KwlTVEFHRV9SRVNFVCwKKwlTVEFHRV9SRVNVQk1JVFRFRCwKK307CisKK3N0YXRpYyB2b2lkCit0 ZXN0X3dhaXRfY29tcGxleChpbnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7CisJc3RydWN0 IHdhaXRfdGhyZWFkX2RhdGEgd2FpdCA9IHsgMCB9OworCXVpbnQzMl90IHN5bmNvYmpzWzhdOwor CXVpbnQ2NF90IHBvaW50c1s4XSA9IHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfTsKKwllbnVtIHN5 bmNvYmpfc3RhZ2Ugc3RhZ2VbOF07CisJaW50IGksIGosIHRpbWVsaW5lc1s4XTsKKwl1aW50MzJf dCBmaXJzdF9zaWduYWxlZCA9IC0xLCBudW1fc2lnbmFsZWQgPSAwOworCXB0aHJlYWRfdCB0aHJl YWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXN0YWdlW2ldID0gU1RBR0VfVU5T VUJNSVRURUQ7CisJCXN5bmNvYmpzW2ldID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCX0KKwor CWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7CisJCWZvciAoaSA9IDA7IGkgPCA4 OyBpKyspCisJCQl0aW1lbGluZXNbaV0gPSAtMTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBp IDwgODsgaSsrKQorCQkJdGltZWxpbmVzW2ldID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwg c3luY29ianNbaV0sCisJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsKKwl9CisKKwl3YWl0LmZkID0g ZmQ7CisJd2FpdC53YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3luY29ianMpOworCXdh aXQud2FpdC5jb3VudF9oYW5kbGVzID0gMjsKKwl3YWl0LndhaXQucG9pbnRzID0gdG9fdXNlcl9w b2ludGVyKHBvaW50cyk7CisJd2FpdC53YWl0LnRpbWVvdXRfbnNlYyA9IGdldHRpbWVfbnMoKSAr IE5TRUNTX1BFUl9TRUM7CisJd2FpdC53YWl0LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3Mo dGVzdF9mbGFncyk7CisKKwlpZ3RfYXNzZXJ0X2VxKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5V TEwsIHdhaXRfdGhyZWFkX2Z1bmMsICZ3YWl0KSwgMCk7CisKKwlzbGVlcF9uc2VjKE5TRUNTX1BF Ul9TRUMgLyA1MCk7CisKKwludW1fc2lnbmFsZWQgPSAwOworCWZvciAoaiA9IDA7IGogPCBBUlJB WV9TSVpFKHNodWZmbGVkXzBfN194NCk7IGorKykgeworCQlpID0gc2h1ZmZsZWRfMF83X3g0W2pd OworCQlpZ3RfYXNzZXJ0X2x0KGksIEFSUkFZX1NJWkUoc3luY29ianMpKTsKKworCQlzd2l0Y2gg KHN0YWdlW2ldKyspIHsKKwkJY2FzZSBTVEFHRV9VTlNVQk1JVFRFRDoKKwkJCS8qIFdlIG5lZWQg dG8gc3VibWl0IGF0dGFjaCBhIGZlbmNlICovCisJCQlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9G T1JfU1VCTUlUKSkgeworCQkJCS8qIFdlIGhhZCB0byBhdHRhY2ggb25lIHVwLWZyb250ICovCisJ CQkJaWd0X2Fzc2VydF9uZXEodGltZWxpbmVzW2ldLCAtMSk7CisJCQkJYnJlYWs7CisJCQl9CisJ CQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwK KwkJCQkJCQkgICAgICBwb2ludHNbaV0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFHRV9TVUJN SVRURUQ6CisJCQkvKiBXZSBoYXZlIGEgZmVuY2UsIHRyaWdnZXIgaXQgKi8KKwkJCWlndF9hc3Nl cnRfbmVxKHRpbWVsaW5lc1tpXSwgLTEpOworCQkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxp bmVzW2ldLCAxKTsKKwkJCWNsb3NlKHRpbWVsaW5lc1tpXSk7CisJCQl0aW1lbGluZXNbaV0gPSAt MTsKKwkJCWlmIChudW1fc2lnbmFsZWQgPT0gMCkKKwkJCQlmaXJzdF9zaWduYWxlZCA9IGk7CisJ CQludW1fc2lnbmFsZWQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBR0VfU0lHTkFMRUQ6CisJ CQkvKiBXZSdyZSBhbHJlYWR5IHNpZ25hbGVkLCByZXNldCAqLworCQkJc3luY29ial9yZXNldChm ZCwgJnN5bmNvYmpzW2ldLCAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBR0VfUkVTRVQ6CisJ CQkvKiBXZSdyZSByZXNldCwgc3VibWl0IGFuZCBkb24ndCBzaWduYWwgKi8KKwkJCXRpbWVsaW5l c1tpXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAg ICAgIHBvaW50c1tpXSk7CisJCQlicmVhazsKKworCQljYXNlIFNUQUdFX1JFU1VCTUlUVEVEOgor CQkJaWd0X2Fzc2VydCghIlNob3VsZCBub3QgcmVhY2ggdGhpcyBzdGFnZSIpOworCQkJYnJlYWs7 CisJCX0KKworCQlpZiAodGVzdF9mbGFncyAmIFdBSVRfQUxMKSB7CisJCQlpZiAobnVtX3NpZ25h bGVkID09IEFSUkFZX1NJWkUoc3luY29ianMpKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJ aWYgKG51bV9zaWduYWxlZCA+IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlzbGVlcF9uc2VjKE5T RUNTX1BFUl9TRUMgLyAxMDApOworCX0KKworCXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwor CisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkgeworCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWdu YWxlZCwgQVJSQVlfU0laRShzeW5jb2JqcykpOworCX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEo bnVtX3NpZ25hbGVkLCAxKTsKKwkJaWd0X2Fzc2VydF9lcSh3YWl0LndhaXQuZmlyc3Rfc2lnbmFs ZWQsIGZpcnN0X3NpZ25hbGVkKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJ CWNsb3NlKHRpbWVsaW5lc1tpXSk7CisJCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbaV0p OworCX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2FpdF9pbnRlcnJ1cHRlZChpbnQgZmQsIHVp bnQzMl90IHRlc3RfZmxhZ3MpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQg d2FpdCA9IHsgMCB9OworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7 CisJdWludDY0X3QgcG9pbnQgPSAxOworCWludCB0aW1lbGluZTsKKworCXdhaXQuaGFuZGxlcyA9 IHRvX3VzZXJfcG9pbnRlcigmc3luY29iaik7CisJd2FpdC5wb2ludHMgPSB0b191c2VyX3BvaW50 ZXIoJnBvaW50KTsKKwl3YWl0LmNvdW50X2hhbmRsZXMgPSAxOworCXdhaXQuZmxhZ3MgPSBmbGFn c19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9G T1JfU1VCTUlUKSB7CisJCXdhaXQudGltZW91dF9uc2VjID0gc2hvcnRfdGltZW91dCgpOworCQlp Z3Rfd2hpbGVfaW50ZXJydXB0aWJsZSh0cnVlKQorCQkJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpf dGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRVRJTUUpOworCX0KKworCXRpbWVsaW5l ID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29iaiwgcG9pbnQpOworCisJd2FpdC50 aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7CisJaWd0X3doaWxlX2ludGVycnVwdGlibGUo dHJ1ZSkKKwkJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwg JndhaXQpLCAtRVRJTUUpOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKKwljbG9z ZSh0aW1lbGluZSk7Cit9CisKK3N0YXRpYyBib29sCitoYXNfc3luY29ial90aW1lbGluZV93YWl0 KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAw IH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwl1aW50NjRfdCB2YWx1ZTsKKwlpbnQgcmV0Owor CisJaWYgKGRybUdldENhcChmZCwgRFJNX0NBUF9TWU5DT0JKLCAmdmFsdWUpKQorCQlyZXR1cm4g ZmFsc2U7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVHJ5IHdhaXRpbmcg Zm9yIHplcm8gc3luYyBvYmplY3RzIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMICovCisJd2FpdC5j b3VudF9oYW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRs ZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQs ICZ3YWl0KTsKKwlyZXR1cm4gcmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVDsKK30KKworaWd0 X21haW4KK3sKKwlpbnQgZmQgPSAtMTsKKworCWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Bl bl9kcml2ZXIoRFJJVkVSX0FOWSk7CisJCWlndF9yZXF1aXJlKGhhc19zeW5jb2JqX3RpbWVsaW5l X3dhaXQoZmQpKTsKKwkJaWd0X3JlcXVpcmVfc3dfc3luYygpOworCX0KKworCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLXdhaXQtYmFkLWZsYWdzIikKKwkJdGVzdF93YWl0X2JhZF9mbGFncyhmZCk7CisK KwlpZ3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LXplcm8taGFuZGxlcyIpCisJCXRlc3Rfd2FpdF96 ZXJvX2hhbmRsZXMoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1pbGxlZ2FsLWhh bmRsZSIpCisJCXRlc3Rfd2FpdF9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgi aW52YWxpZC1xdWVyeS16ZXJvLWhhbmRsZXMiKQorCQl0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlcyhm ZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1xdWVyeS1pbGxlZ2FsLWhhbmRsZSIpCisJCXRl c3RfcXVlcnlfaWxsZWdhbF9oYW5kbGUoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVl cnktb25lLWlsbGVnYWwtaGFuZGxlIikKKwkJdGVzdF9xdWVyeV9vbmVfaWxsZWdhbF9oYW5kbGUo ZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnktYmFkLXBhZCIpCisJCXRlc3RfcXVl cnlfYmFkX3BhZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtemVyby1oYW5k bGVzIikKKwkJdGVzdF9zaWduYWxfemVyb19oYW5kbGVzKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXNpZ25hbC1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfaGFu ZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1pbGxlZ2FsLXBvaW50IikK KwkJdGVzdF9zaWduYWxfaWxsZWdhbF9wb2ludChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxp ZC1zaWduYWwtb25lLWlsbGVnYWwtaGFuZGxlIikKKwkJdGVzdF9zaWduYWxfb25lX2lsbGVnYWxf aGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1iYWQtcGFkIikKKwkJ dGVzdF9zaWduYWxfYmFkX3BhZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1iaW5hcnlf dG9fdGltZWxpbmUtaWxsZWdhbC1iaW5hcnktaGFuZGxlIikKKwkJdGVzdF9iaW5hcnlfdG9fdGlt ZWxpbmVfaWxsZWdhbF9iaW5hcnlfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlk LWJpbmFyeV90b190aW1lbGluZS1pbGxlZ2FsLXRpbWVsaW5lLWhhbmRsZSIpCisJCXRlc3RfYmlu YXJ5X3RvX3RpbWVsaW5lX2lsbGVnYWxfdGltZWxpbmVfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0 ZXN0KCJpbnZhbGlkLWJpbmFyeV90b190aW1lbGluZS1pbGxlZ2FsLXBvaW50IikKKwkJdGVzdF9i aW5hcnlfdG9fdGltZWxpbmVfaWxsZWdhbF9wb2ludChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52 YWxpZC1iaWFucnlfdG9fdGltZWxpbmUtYmFkLXBhZCIpCisJCXRlc3RfYmluYXJ5X3RvX3RpbWVs aW5lX2JhZF9wYWQoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdGltZWxpbmVfdG9fYmlu YXJ5LWlsbGVnYWwtYmluYXJ5LWhhbmRsZSIpCisJCXRlc3RfdGltZWxpbmVfdG9fYmluYXJ5X2ls bGVnYWxfYmluYXJ5X2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC10aW1lbGlu ZV90b19iaW5hcnktaWxsZWdhbC10aW1lbGluZS1oYW5kbGUiKQorCQl0ZXN0X3RpbWVsaW5lX3Rv X2JpbmFyeV9pbGxlZ2FsX3RpbWVsaW5lX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52 YWxpZC10aW1lbGluZV90b19iaW5hcnktaWxsZWdhbC1wb2ludCIpCisJCXRlc3RfdGltZWxpbmVf dG9fYmluYXJ5X2lsbGVnYWxfcG9pbnQoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdGlt ZWxpbmVfdG9fYmluYXJ5LWJhZC1wYWQiKQorCQl0ZXN0X3RpbWVsaW5lX3RvX2JpbmFyeV9iYWRf cGFkKGZkKTsKKworCWZvciAodW5zaWduZWQgZmxhZ3MgPSAwOyBmbGFncyA8IFdBSVRfRkxBR1Nf TUFYOyBmbGFncysrKSB7CisJCWludCBlcnI7CisKKwkJLyogT25seSBvbmUgd2FpdCBtb2RlIGZv ciBzaW5nbGUtd2FpdCB0ZXN0cyAqLworCQlpZiAoX19idWlsdGluX3BvcGNvdW50KGZsYWdzICYg KFdBSVRfVU5TVUJNSVRURUQgfAorCQkJCQkJV0FJVF9TVUJNSVRURUQgfAorCQkJCQkJV0FJVF9T SUdOQUxFRCkpICE9IDEpCisJCQljb250aW51ZTsKKworCQlpZiAoKGZsYWdzICYgV0FJVF9VTlNV Qk1JVFRFRCkgJiYgIShmbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpCisJCQllcnIgPSAtRUlOVkFM OworCQllbHNlIGlmICghKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlU X1NVQk1JVFRFRCkgJiYgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKSkKKwkJCWVyciA9IC1FVElN RTsKKwkJZWxzZQorCQkJZXJyID0gMDsKKworCQlpZ3Rfc3VidGVzdF9mKCIlc3NpbmdsZS13YWl0 JXMlcyVzJXMlcyVzIiwKKwkJCSAgICAgIGVyciA9PSAtRUlOVkFMID8gImludmFsaWQtIiA6IGVy ciA9PSAtRVRJTUUgPyAiZXRpbWUtIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9BTEwp ID8gIi1hbGwiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpID8gIi1m b3Itc3VibWl0IiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpID8gIi1h dmFpbGFibGUiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSA/ICIt dW5zdWJtaXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgPyAi LXN1Ym1pdHRlZCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfU0lHTkFMRUQpID8gIi1z aWduYWxlZCIgOiAiIikKKwkJCXRlc3Rfc2luZ2xlX3dhaXQoZmQsIGZsYWdzLCBlcnIpOworCX0K KworCWlndF9zdWJ0ZXN0KCJ3YWl0LWRlbGF5ZWQtc2lnbmFsIikKKwkJdGVzdF93YWl0X2RlbGF5 ZWRfc2lnbmFsKGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtZGVsYXll ZC1zdWJtaXQiKQorCQl0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfRk9SX1NVQk1J VCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtZGVsYXllZC1zaWduYWwiKQorCQl0ZXN0X3dh aXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfQUxMKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFs bC1mb3Itc3VibWl0LWRlbGF5ZWQtc3VibWl0IikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFs KGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rfc3VidGVzdCgicmVzZXQt dW5zaWduYWxlZCIpCisJCXRlc3RfcmVzZXRfdW5zaWduYWxlZChmZCk7CisKKwlpZ3Rfc3VidGVz dCgicmVzZXQtc2lnbmFsZWQiKQorCQl0ZXN0X3Jlc2V0X3NpZ25hbGVkKGZkKTsKKworCWlndF9z dWJ0ZXN0KCJyZXNldC1tdWx0aXBsZS1zaWduYWxlZCIpCisJCXRlc3RfcmVzZXRfbXVsdGlwbGVf c2lnbmFsZWQoZmQpOworCisJaWd0X3N1YnRlc3QoInJlc2V0LWR1cmluZy13YWl0LWZvci1zdWJt aXQiKQorCQl0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQoZmQpOworCisJaWd0X3N1 YnRlc3QoInNpZ25hbCIpCisJCXRlc3Rfc2lnbmFsKGZkKTsKKworCWZvciAodW5zaWduZWQgZmxh Z3MgPSAwOyBmbGFncyA8IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7CisJCWludCBlcnI7CisK KwkJLyogQXQgbGVhc3Qgb25lIHdhaXQgbW9kZSBmb3IgbXVsdGktd2FpdCB0ZXN0cyAqLworCQlp ZiAoIShmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwKKwkJCSAgICAgICBXQUlUX1NVQk1JVFRF RCB8CisJCQkgICAgICAgV0FJVF9TSUdOQUxFRCkpKQorCQkJY29udGludWU7CisKKwkJZXJyID0g MDsKKwkJaWYgKChmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZP Ul9TVUJNSVQpKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQl9IGVsc2UgaWYgKGZsYWdzICYgV0FJ VF9BTEwpIHsKKwkJCWlmIChmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwgV0FJVF9TVUJNSVRU RUQpKQorCQkJCWVyciA9IC1FVElNRTsKKwkJCWlmICghKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRF RCkgJiYgKGZsYWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxF KSkKKwkJCQllcnIgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKCEoZmxhZ3MgJiBXQUlUX1NJR05B TEVEKSAmJiAhKChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxhZ3MgJiBXQUlUX0FWQUlM QUJMRSkpKQorCQkJCWVyciA9IC1FVElNRTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0X2YoIiVzbXVs dGktd2FpdCVzJXMlcyVzJXMlcyIsCisJCQkgICAgICBlcnIgPT0gLUVJTlZBTCA/ICJpbnZhbGlk LSIgOiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdB SVRfQUxMKSA/ICItYWxsIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9GT1JfU1VCTUlU KSA/ICItZm9yLXN1Ym1pdCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQVZBSUxBQkxF KSA/ICItYXZhaWxhYmxlIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRF RCkgPyAiLXVuc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9TVUJNSVRU RUQpID8gIi1zdWJtaXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NJR05BTEVE KSA/ICItc2lnbmFsZWQiIDogIiIpCisJCQl0ZXN0X211bHRpX3dhaXQoZmQsIGZsYWdzLCBlcnIp OworCX0KKwlpZ3Rfc3VidGVzdCgid2FpdC1hbnktc25hcHNob3QiKQorCQl0ZXN0X3dhaXRfc25h cHNob3QoZmQsIDApOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLXNuYXBzaG90IikKKwkJdGVz dF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1mb3It c3VibWl0LXNuYXBzaG90IikKKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0ZPUl9TVUJN SVQpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtc25hcHNob3QiKQorCQl0 ZXN0X3dhaXRfc25hcHNob3QoZmQsIFdBSVRfQUxMIHwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWln dF9zdWJ0ZXN0KCJ3YWl0LWFueS1jb21wbGV4IikKKwkJdGVzdF93YWl0X2NvbXBsZXgoZmQsIDAp OworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWNvbXBsZXgiKQorCQl0ZXN0X3dhaXRfY29tcGxl eChmZCwgV0FJVF9BTEwpOworCisJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1jb21wbGV4 IikKKwkJdGVzdF93YWl0X2NvbXBsZXgoZmQsIFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbGwtZm9yLXN1Ym1pdC1jb21wbGV4IikKKwkJdGVzdF93YWl0X2NvbXBsZXgo ZmQsIFdBSVRfQUxMIHwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFu eS1pbnRlcnJ1cHRlZCIpCisJCXRlc3Rfd2FpdF9pbnRlcnJ1cHRlZChmZCwgMCk7CisKKwlpZ3Rf c3VidGVzdCgid2FpdC1hbGwtaW50ZXJydXB0ZWQiKQorCQl0ZXN0X3dhaXRfaW50ZXJydXB0ZWQo ZmQsIFdBSVRfQUxMKTsKK30KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==