ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJzb2Z0YXAvcnRjX3RpbWVyLmMgYi9hcC9saWIvbGlic29mdGFwL3J0Y190aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExYjI1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlic29mdGFwL3J0Y190aW1lci5jCkBAIC0wLDAgKzEsMTU1IEBACisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAjaW5jbHVkZcf4CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICA8c3RkaW8uaD4KKyNpbmNsdWRlICA8c3RkbGliLmg+CisjaW5jbHVkZSAgPHNpZ25hbC5oPgorI2luY2x1ZGUgIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgIDxzeXNsb2cuaD4KKyNpbmNsdWRlICA8ZmNudGwuaD4KKyNpbmNsdWRlICA8cHRocmVhZC5oPgorI2luY2x1ZGUgIDxzdGRsaWIuaD4KKyNpbmNsdWRlICA8c3RyaW5nLmg+CisjaW5jbHVkZSAgPGVycm5vLmg+CisjaW5jbHVkZSAgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlICA8dW5pc3RkLmg+CisjaW5jbHVkZSAgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgIDx0aW1lLmg+CisjaW5jbHVkZSAgPHN5cy9pcGMuaD4KKyNpbmNsdWRlICA8c3lzL21zZy5oPgorI2luY2x1ZGUgICJzb2Z0YXBfYXBpLmgiCisjaW5jbHVkZSAgIm1lc3NhZ2UuaCIKKyNpbmNsdWRlICAicnRjX3RpbWVyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiDK/b7dveG5ubao0uXH+AorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogzeKyv7Hkwb/J+cP3x/gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqILrqtqjS5cf4CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHJ0Y190aW1lcl9hZGQoVUxPTkcgdWxTZWMsIFJUQ19JRCAgcnRjX2lkLCBpbnQgc3JjX2lkKS8vYWRkX3J0Y190aW1lcgoreworCWludCByZXQgPSAtMTsKKwlpbnQgZGF0YV9sZW4gPSAwOworCVJUQ19EQVRBX0JVRiAgYnVmID0gezB9OworCWNoYXIgcnRjX2NwdVsxNl0gPSB7MH07CisJY2hhciBydGNfY3BfcmVhZHlbOF0gPSB7MH07CisKKwkvL7zgv9jT0MTE0KnTptPDyejWw8HLtszKsbzktcRydGMKKwlpZiAodWxTZWMgPCA1OSkKKwkJc2xvZyhNSVNDX1BSSU5ULCBTTE9HX0VSUiwgICAicnRjIHRpbWUgaXMgJWQsIGxlc3MgdGhhbiA2MC4gc3JjOjB4JXgsIGlkOjB4JXggXG4iLCB1bFNlYywgc3JjX2lkLCBydGNfaWQpOworCisJYnVmLnNyY01vZHVsZSA9IHNyY19pZDsKKwlidWYubW9kdWxlID0gcnRjX2lkOworCWJ1Zi51bFNlYyA9IHVsU2VjOworCWJ1Zi53YWtldXAgPSAwOworCWJ1Zi5pc191dGMgPSAwOworCWRhdGFfbGVuID0gc2l6ZW9mKFJUQ19EQVRBX0JVRik7CisJYnVmLnRpbWVfdmFsID0gdGltZSgwKTsKKwlidWYuY3B1ID0gUlRDX0NQVV9BUDsKKworCXJldCA9IGlwY19zZW5kX21lc3NhZ2Uoc3JjX2lkLCBNT0RVTEVfSURfUlRDX1NFUlZJQ0UsIFJUQ19NU0dfQUREX0FMQVJNLCBkYXRhX2xlbiwgKHVuc2lnbmVkIGNoYXIgKikmYnVmLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJc2xvZyhNSVNDX1BSSU5ULCBTTE9HX0VSUiwgICAicnRjOiBzZXQgcnRjIHRpbWVyIHNlbmQgbXNnIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHJ0Y190aW1lcl9hZGRfdXRjKHN0cnVjdCB0bSAqc2VjLCBSVENfSUQgcnRjX2lkLCBpbnQgc3JjX2lkLCBpbnQgd2FrZXVwKS8vYWRkX3J0Y190aW1lcgoreworCWludCByZXQgPSAtMTsKKwl0aW1lX3QgY3VyX3NlYyA9IHRpbWUoMCk7CisJdGltZV90IHNldF9zZWMgPSBta3RpbWUoc2VjKTsKKwljaGFyIHNudHBfcmVzdWx0WzIwXSA9IHswfTsKKwljaGFyIHJ0Y19jcHVbMTZdID0gezB9OworCWNoYXIgcnRjX2NwX3JlYWR5WzhdID0gezB9OworCisJc2xvZyhNSVNDX1BSSU5ULCBTTE9HX0VSUiwgICAicnRjX3RpbWVyX2FkZF91dGMgZW50ZXIgXG4iKTsKKworI2lmIDAKKwkvLyDJ6NbDysC958qx1tO2qMqxxvejrLHY0Ou1yHNudHCzybmmuvMKKwljZmdfZ2V0X2l0ZW0oInNudHBfcHJvY2Vzc19yZXN1bHQiLCBzbnRwX3Jlc3VsdCwgc2l6ZW9mKHNudHBfcmVzdWx0KSk7CisJaWYgKHN0cmNtcCgic3VjY2VzcyIsIHNudHBfcmVzdWx0KSAhPSAwKSB7CisJCXNsb2coTUlTQ19QUklOVCwgU0xPR19FUlIsICAgInJ0Yzogc2V0IHV0YyB0aW1lciBzaG91bGQgYmUgYWZ0ZXIgc250cCBzdWNjZXNzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKKwkvLyDJ6NbDtqjKscb3yrG85LHY0OvN7dPatbHHsMqxvOQKKwlpZiAoY3VyX3NlYyA+PSBzZXRfc2VjKSB7CisJCXNsb2coTUlTQ19QUklOVCwgU0xPR19FUlIsICAgInJ0Yzogc2V0IHRpbWUtJWxkIHNob3VsZCBiZSBhZnRlciB0aGVuIGN1cnJuZXQgdGltZS0lbGRcbiIsIHNldF9zZWMsIGN1cl9zZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCWludCBkYXRhX2xlbiA9IDA7CisJUlRDX0RBVEFfQlVGIGJ1ZiA9IHswfTsKKworCWJ1Zi5zcmNNb2R1bGUgPSBzcmNfaWQ7CisJYnVmLm1vZHVsZSA9IHJ0Y19pZDsKKwlidWYudWxTZWMgPSBzZXRfc2VjIC0gY3VyX3NlYzsKKwlidWYudGltZV92YWwgPSBjdXJfc2VjOworCWJ1Zi53YWtldXAgPSB3YWtldXA7CisJYnVmLmlzX3V0YyA9IDE7CisJYnVmLmNwdSA9IFJUQ19DUFVfQVA7CisJZGF0YV9sZW4gPSBzaXplb2YoUlRDX0RBVEFfQlVGKTsKKworCXNsb2coTUlTQ19QUklOVCwgU0xPR19FUlIsICAgInJ0YyBhZGQgdXRjIHRpbWVyLCBjdXI6JWxkLCBzZXQ6JWxkLCB1bFNlYzolZDsgeWVhcjolZCwgbW9uOiVkLCBkYXk6JWQsIGhvdXI6JWQsIG1pbjolZCwgc2VjOiVkLCB3ZGF5OiVkLCB5ZGF5OiVkIFxuIiwgYnVmLnRpbWVfdmFsLCBzZXRfc2VjLCBidWYudWxTZWMsIHNlYy0+dG1feWVhciwgc2VjLT50bV9tb24sIHNlYy0+dG1fbWRheSwgc2VjLT50bV9ob3VyLCBzZWMtPnRtX21pbiwgc2VjLT50bV9zZWMsIHNlYy0+dG1fd2RheSwgc2VjLT50bV95ZGF5KTsKKwlyZXQgPSAgaXBjX3NlbmRfbWVzc2FnZShzcmNfaWQsIE1PRFVMRV9JRF9SVENfU0VSVklDRSwgUlRDX01TR19BRERfQUxBUk0sIGRhdGFfbGVuLCAodW5zaWduZWQgY2hhciAqKSZidWYsIDApOworCWlmIChyZXQgIT0gMCkgeworCQlzbG9nKE1JU0NfUFJJTlQsIFNMT0dfRVJSLCAgICJydGM6IHNldCBydGMgdXRjIHRpbWVyIHNlbmQgbXNnIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHJ0Y190aW1lcl9kZWwoUlRDX0lEIHJ0Y19pZCwgaW50IHNyY19pZCkKK3sKKwlpbnQgcmV0ID0gLTE7CisJaW50IGRhdGFfbGVuID0gMDsKKwlSVENfREFUQV9CVUYgIGJ1ZiA9IHswfTsKKworCWJ1Zi5zcmNNb2R1bGUgPSBzcmNfaWQ7CisJYnVmLm1vZHVsZSA9IHJ0Y19pZDsKKwlidWYuY3B1ID0gUlRDX0NQVV9BUDsKKwlkYXRhX2xlbiA9IHNpemVvZihSVENfREFUQV9CVUYpOworCisJcmV0ID0gaXBjX3NlbmRfbWVzc2FnZShzcmNfaWQsIE1PRFVMRV9JRF9SVENfU0VSVklDRSwgUlRDX01TR19ERUxfQUxBUk0sIGRhdGFfbGVuLCAodW5zaWduZWQgY2hhciAqKSAmYnVmLCAwKTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitpbnQgcnRjX3RpbWVyX2RlbF9hbGwoaW50IHNyY19pZCwgdW5zaWduZWQgc2hvcnQgcmVxX2NtZCkKK3sKKwlpbnQgcmV0ID0gLTE7CisKKwlyZXQgPSBpcGNfc2VuZF9tZXNzYWdlKHNyY19pZCwgTU9EVUxFX0lEX1JUQ19TRVJWSUNFLCBSVENfTVNHX0RFTF9BTEwsIHNpemVvZih1bnNpZ25lZCBzaG9ydCksICZyZXFfY21kLCAwKTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitpbnQgIHJ0Y19zZXRfdGltZShpbnQgc3JjX2lkKQoreworCWludCByZXQgPSAtMTsKKwl0aW1lX3QgY3VyX3RpbWUgPSB0aW1lKDApOworCisJcmV0ID0gaXBjX3NlbmRfbWVzc2FnZShzcmNfaWQsIE1PRFVMRV9JRF9SVENfU0VSVklDRSwgUlRDX01TR19TRVRfVElNRSwgc2l6ZW9mKHRpbWVfdCksICZjdXJfdGltZSwgMCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworCg==