ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA1MzdkZDJlLi5hYWI5N2NjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogY29uZmlnIEFSQ0hfT01BUDI0MjAKIAlib29sICJPTUFQMjQyMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWAorCXNlbGVjdCBPTUFQX0RNX1RJTUVSCiAKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCAxZDJmNWFjLi4zMzU4YzBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgogICogICAgICAgICBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogT01BUCBEdWFsLW1vZGUgdGltZXIgZnJhbWV3b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcwogICoKICAqIFNvbWUgcGFydHMgYmFzZWQgb2ZmIG9mIFRJJ3MgMjR4eCBjb2RlOgogICoKQEAgLTIyLDU0ICsyMywxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG10aW1lci5oPgogCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSMV9CQVNFCTB4NDgwMjgwMDAKLSNkZWZpbmUgT01BUDJfR1BfVElNRVIyX0JBU0UJMHg0ODAyYTAwMAotI2RlZmluZSBPTUFQMl9HUF9USU1FUjNfQkFTRQkweDQ4MDc4MDAwCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSNF9CQVNFCTB4NDgwN2EwMDAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0aW1lcjsKIAotI2RlZmluZSBHUF9USU1FUl9USURSCQkweDAwCi0jZGVmaW5lIEdQX1RJTUVSX1RJU1IJCTB4MTgKLSNkZWZpbmUgR1BfVElNRVJfVElFUgkJMHgxYwotI2RlZmluZSBHUF9USU1FUl9UQ0xSCQkweDI0Ci0jZGVmaW5lIEdQX1RJTUVSX1RDUlIJCTB4MjgKLSNkZWZpbmUgR1BfVElNRVJfVExEUgkJMHgyYwotI2RlZmluZSBHUF9USU1FUl9UU0lDUgkJMHg0MAotCi0jZGVmaW5lIE9TX1RJTUVSX05SCQkxICAvKiBHUCB0aW1lciAyICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2VbXSA9IHsKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMV9CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMl9CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSM19CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSNF9CQVNFKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRpbWVyX3JlYWRfcmVnKGludCBuciwgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQogewotCXJldHVybiBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlW25yXSArIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl93cml0ZV9yZWcoaW50IG5yLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQotewotCV9fcmF3X3dyaXRlbCh2YWwsIHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKLX0KLQotLyogTm90ZSB0aGF0IHdlIGFsd2F5cyBlbmFibGUgdGhlIGNsb2NrIHByZXNjYWxlIGRpdmlkZXIgYml0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfZ3BfdGltZXJfc3RhcnQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQl0bXAgPSAweGZmZmZmZmZmIC0gbG9hZF92YWw7Ci0KLQl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RMRFIsIHRtcCk7Ci0JdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9UQ1JSLCB0bXApOwotCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVElFUiwgMSA8PCAxKTsKLQl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDTFIsICgxIDw8IDUpIHwgKDEgPDwgMSkgfCAxKTsKKwlvbWFwX2RtX3RpbWVyX3NldF9sb2FkKGdwdGltZXIsIDEsIDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbCk7CisJb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShncHRpbWVyLCBPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVyk7CisJb21hcF9kbV90aW1lcl9zdGFydChncHRpbWVyKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG9tYXAyX2dwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCkBAIC03Nyw3ICs0Miw3IEBACiB7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJU1IsIDEgPDwgMSk7CisJb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoZ3B0aW1lciwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpOwogCXRpbWVyX3RpY2socmVncyk7CiAKIAl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwpAQCAtODcsNDEgKzUyLDI2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyX2dwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiZ3AgdGltZXIiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAogCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICogc3lzX2NrOwotCXUzMiB0aWNrX3BlcmlvZCA9IDEyMDAwMDsKLQl1MzIgbDsKKwl1MzIgdGlja19wZXJpb2Q7CiAKLQkvKiBSZXNldCBjbG9jayBhbmQgcHJlc2NhbGUgdmFsdWUgKi8KLQl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RDTFIsIDApOworCW9tYXBfZG1fdGltZXJfaW5pdCgpOworCWdwdGltZXIgPSBvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoMik7CisJQlVHX09OKGdwdGltZXIgPT0gTlVMTCk7CiAKLQlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlpZiAoSVNfRVJSKHN5c19jaykpCi0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBzeXNfY2tcbiIpOwotCWVsc2UgewotCQljbGtfZW5hYmxlKHN5c19jayk7Ci0JCXRpY2tfcGVyaW9kID0gY2xrX2dldF9yYXRlKHN5c19jaykgLyAxMDA7Ci0JCWNsa19wdXQoc3lzX2NrKTsKLQl9Ci0KLQl0aWNrX3BlcmlvZCAvPSAyOwkvKiBNaW5pbXVtIHByZXNjYWxlIGRpdmlkZXIgaXMgMiAqLworCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShncHRpbWVyLCBPTUFQX1RJTUVSX1NSQ19TWVNfQ0xLKTsKKwl0aWNrX3BlcmlvZCA9IGNsa19nZXRfcmF0ZShvbWFwX2RtX3RpbWVyX2dldF9mY2xrKGdwdGltZXIpKSAvIDEwMDsKIAl0aWNrX3BlcmlvZCAtPSAxOwogCi0JbCA9IHRpbWVyX3JlYWRfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USURSKTsKLQlwcmludGsoS0VSTl9JTkZPICJPTUFQMiBHUCB0aW1lciAoSFcgdmVyc2lvbiAlZC4lZClcbiIsCi0JICAgICAgIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOwotCi0Jc2V0dXBfaXJxKDM4LCAmb21hcDJfZ3BfdGltZXJfaXJxKTsKLQotCW9tYXAyX2dwX3RpbWVyX3N0YXJ0KE9TX1RJTUVSX05SLCB0aWNrX3BlcmlvZCk7CisJc2V0dXBfaXJxKG9tYXBfZG1fdGltZXJfZ2V0X2lycShncHRpbWVyKSwgJm9tYXAyX2dwX3RpbWVyX2lycSk7CisJb21hcDJfZ3BfdGltZXJfc3RhcnQodGlja19wZXJpb2QpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CiAJLmluaXQJPSBvbWFwMl9ncF90aW1lcl9pbml0LAogfTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCBlYzQ5NDk1Li5lYzc1MmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtOTEsNyArOTEsNyBAQAogCiBjb25maWcgT01BUF9ETV9USU1FUgogCWJvb2wgIlVzZSBkdWFsLW1vZGUgdGltZXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFgKIAloZWxwCiAJIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBEdWFsLU1vZGUgdGltZXJzLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCBlYmEzY2I1Li5jMjVhMWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTQsNyArNCw4IEBACiAgKiBPTUFQIER1YWwtTW9kZSBUaW1lcnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPgorICogT01BUDIgc3VwcG9ydCBieSBKdWhhIFlyam9sYQorICogQVBJIGltcHJvdmVtZW50cyBhbmQgT01BUDIgY2xvY2sgZnJhbWV3b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTI2LDE1ICsyNywxNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtdGltZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKLSNkZWZpbmUgT01BUF9USU1FUl9DT1VOVAkJOAotCisvKiByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVBfVElNRVJfSURfUkVHCQkweDAwCiAjZGVmaW5lIE9NQVBfVElNRVJfT0NQX0NGR19SRUcJCTB4MTAKICNkZWZpbmUgT01BUF9USU1FUl9TWVNfU1RBVF9SRUcJCTB4MTQKQEAgLTUwLDUyICs1MywxODQgQEAKICNkZWZpbmUgT01BUF9USU1FUl9DQVBUVVJFX1JFRwkJMHgzYwogI2RlZmluZSBPTUFQX1RJTUVSX0lGX0NUUkxfUkVHCQkweDQwCiAKKy8qIHRpbWVyIGNvbnRyb2wgcmVnIGJpdHMgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX0dQT0NGRwkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9DQVBUTU9ERQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RDTV9MT1dUT0hJR0gJKDB4MSA8PCA4KQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVENNX0hJR0hUT0xPVwkoMHgyIDw8IDgpCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9UQ01fQk9USEVER0VTCSgweDMgPDwgOCkKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1NDUFdNCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfQ0UJCSgxIDw8IDYpCS8qIGNvbXBhcmUgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9QUkUJCSgxIDw8IDUpCS8qIHByZXNjYWxlciBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUVl9TSElGVAkyCQkvKiBob3cgbXVjaCB0byBzaGlmdCB0aGUgcHJlc2NhbGVyIHZhbHVlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9BUgkJKDEgPDwgMSkJLyogYXV0by1yZWxvYWQgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9TVAkJKDEgPDwgMCkJLyogc3RhcnQgdGltZXIgKi8KIAotc3RhdGljIHN0cnVjdCBkbXRpbWVyX2luZm9fc3RydWN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXVudXNlZF90aW1lcnM7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXNlcnZlZF90aW1lcnM7Ci19IGRtX3RpbWVyX2luZm87Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciBkbV90aW1lcnNbXSA9IHsKLQl7IC5iYXNlPTB4ZmZmYjE0MDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjEgfSwKLQl7IC5iYXNlPTB4ZmZmYjFjMDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjIgfSwKLQl7IC5iYXNlPTB4ZmZmYjI0MDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjMgfSwKLQl7IC5iYXNlPTB4ZmZmYjJjMDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjQgfSwKLQl7IC5iYXNlPTB4ZmZmYjM0MDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjUgfSwKLQl7IC5iYXNlPTB4ZmZmYjNjMDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjYgfSwKLQl7IC5iYXNlPTB4ZmZmYjQ0MDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjcgfSwKLQl7IC5iYXNlPTB4ZmZmYjRjMDAsIC5pcnE9SU5UXzE2MTBfR1BUSU1FUjggfSwKLQl7IC5iYXNlPTB4MCB9LAorc3RydWN0IG9tYXBfZG1fdGltZXIgeworCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworCWludCBpcnE7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwlzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKKyNlbmRpZgorCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKKwl1bnNpZ25lZCByZXNlcnZlZDoxOwogfTsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciBkbV90aW1lcnNbXSA9IHsKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIxNDAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjEgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIxYzAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjIgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIyNDAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjMgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIyYzAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjQgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIzNDAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjUgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmIzYzAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjYgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmI0NDAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjcgfSwKKwl7IC5waHlzX2Jhc2UgPSAweGZmZmI0YzAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjggfSwKK307CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciBkbV90aW1lcnNbXSA9IHsKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDI4MDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjEgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDJhMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjIgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDc4MDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjMgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDdhMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjQgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDdjMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjUgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDdlMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjYgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDgwMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjcgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDgyMDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjggfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDg0MDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjkgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDg2MDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjEwIH0sCisJeyAucGh5c19iYXNlID0gMHg0ODA4ODAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIxMSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwOGEwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMTIgfSwKK307CisKKyNlbHNlCisKKyNlcnJvciBPTUFQIGFyY2hpdGVjdHVyZSBub3Qgc3VwcG9ydGVkIQorCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGludCBkbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUoZG1fdGltZXJzKTsKIAogc3RhdGljIHNwaW5sb2NrX3QgZG1fdGltZXJfbG9jazsKIAotCi1pbmxpbmUgdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcsIHUzMiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXBfZG1fdGltZXJfcmVhZF9yZWcoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcmVnKQogewotCW9tYXBfd3JpdGVsKHZhbHVlLCB0aW1lci0+YmFzZSArIHJlZyk7CisJcmV0dXJuIHJlYWRsKHRpbWVyLT5pb19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9yZWcoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcmVnLCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCB0aW1lci0+aW9fYmFzZSArIHJlZyk7CiAJd2hpbGUgKG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfV1JJVEVfUEVORF9SRUcpKQogCQk7CiB9CiAKLXUzMiBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHJlZykKK3N0YXRpYyB2b2lkIG9tYXBfZG1fdGltZXJfd2FpdF9mb3JfcmVzZXQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewotCXJldHVybiBvbWFwX3JlYWRsKHRpbWVyLT5iYXNlICsgcmVnKTsKKwlpbnQgYzsKKworCWMgPSAwOworCXdoaWxlICghKG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfU1lTX1NUQVRfUkVHKSAmIDEpKSB7CisJCWMrKzsKKwkJaWYgKGMgPiAxMDAwMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVGltZXIgZmFpbGVkIHRvIHJlc2V0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIH0KIAotaW50IG9tYXBfZG1fdGltZXJzX2FjdGl2ZSh2b2lkKQorc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl9yZXNldChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJdTMyIGw7CisKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JRl9DVFJMX1JFRywgMHgwNik7CisJb21hcF9kbV90aW1lcl93YWl0X2Zvcl9yZXNldCh0aW1lcik7CisKKwlvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UodGltZXIsIE9NQVBfVElNRVJfU1JDX1NZU19DTEspOworCisJLyogU2V0IHRvIHNtYXJ0LWlkbGUgbW9kZSAqLworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX09DUF9DRkdfUkVHKTsKKwlsIHw9IDB4MDIgPDwgMzsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9PQ1BfQ0ZHX1JFRywgbCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfZG1fdGltZXJfcmVzZXJ2ZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJdGltZXItPnJlc2VydmVkID0gMTsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCWNsa19lbmFibGUodGltZXItPmljbGspOworCWNsa19lbmFibGUodGltZXItPmZjbGspOworI2VuZGlmCisJb21hcF9kbV90aW1lcl9yZXNldCh0aW1lcik7Cit9CisKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Qodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkbV90aW1lcl9jb3VudDsgaSsrKSB7CisJCWlmIChkbV90aW1lcnNbaV0ucmVzZXJ2ZWQpCisJCQljb250aW51ZTsKKworCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisJCW9tYXBfZG1fdGltZXJfcmVzZXJ2ZSh0aW1lcik7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGltZXI7Cit9CisKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoaW50IGlkKQogewogCXN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yICh0aW1lciA9ICZkbV90aW1lcnNbMF07IHRpbWVyLT5iYXNlOyArK3RpbWVyKQotCQlpZiAob21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRykgJgotCQkgICAgT01BUF9USU1FUl9DVFJMX1NUKQotCQkJcmV0dXJuIDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlpZiAoaWQgPD0gMCB8fCBpZCA+IGRtX3RpbWVyX2NvdW50IHx8IGRtX3RpbWVyc1tpZC0xXS5yZXNlcnZlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisJCXByaW50aygiQlVHOiB3YXJuaW5nIGF0ICVzOiVkLyVzKCk6IHVuYWJsZSB0byBnZXQgdGltZXIgJWRcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgaWQpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJldHVybiAwOworCXRpbWVyID0gJmRtX3RpbWVyc1tpZC0xXTsKKwlvbWFwX2RtX3RpbWVyX3Jlc2VydmUodGltZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0aW1lcjsKIH0KIAordm9pZCBvbWFwX2RtX3RpbWVyX2ZyZWUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCW9tYXBfZG1fdGltZXJfcmVzZXQodGltZXIpOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJY2xrX2Rpc2FibGUodGltZXItPmljbGspOworCWNsa19kaXNhYmxlKHRpbWVyLT5mY2xrKTsKKyNlbmRpZgorCVdBUk5fT04oIXRpbWVyLT5yZXNlcnZlZCk7CisJdGltZXItPnJlc2VydmVkID0gMDsKK30KKworaW50IG9tYXBfZG1fdGltZXJfZ2V0X2lycShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJcmV0dXJuIHRpbWVyLT5pcnE7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQorCitzdHJ1Y3QgY2xrICpvbWFwX2RtX3RpbWVyX2dldF9mY2xrKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlCVUcoKTsKK30KIAogLyoqCiAgKiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayAtIENoZWNrIGlmIGFueSBydW5uaW5nIHRpbWVycyB1c2UgQVJNWE9SCkBAIC0xMDMsMjUgKzIzOCw3MCBAQAogICovCiBfX3UzMiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayhfX3UzMiBpbnB1dG1hc2spCiB7Ci0JaW50IG47CisJaW50IGk7CiAKIAkvKiBJZiBBUk1YT1IgY2Fubm90IGJlIGlkbGVkIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1bm5lY2Vzc2FyeSAqLwogCWlmICghKGlucHV0bWFzayAmICgxIDw8IDEpKSkKIAkJcmV0dXJuIGlucHV0bWFzazsKIAogCS8qIElmIGFueSBhY3RpdmUgdGltZXIgaXMgdXNpbmcgQVJNWE9SIHJldHVybiBtb2RpZmllZCBtYXNrICovCi0JZm9yIChuID0gMDsgZG1fdGltZXJzW25dLmJhc2U7ICsrbikKLQkJaWYgKG9tYXBfZG1fdGltZXJfcmVhZF9yZWcoJmRtX3RpbWVyc1tuXSwgT01BUF9USU1FUl9DVFJMX1JFRykmCi0JCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKLQkJCWlmICgoKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKT4+KG4qMikpICYgMHgwMykgPT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgZG1fdGltZXJfY291bnQ7IGkrKykgeworCQl1MzIgbDsKKworCQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZygmZG1fdGltZXJzW25dLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwkJaWYgKGwgJiBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKKwkJCWlmICgoKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKSA+PiAoaSAqIDIpKSAmIDB4MDMpID09IDApCiAJCQkJaW5wdXRtYXNrICY9IH4oMSA8PCAxKTsKIAkJCWVsc2UKIAkJCQlpbnB1dG1hc2sgJj0gfigxIDw8IDIpOwogCQl9CisJfQogCiAJcmV0dXJuIGlucHV0bWFzazsKIH0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKworc3RydWN0IGNsayAqb21hcF9kbV90aW1lcl9nZXRfZmNsayhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisgICAgICAgIHJldHVybiB0aW1lci0+ZmNsazsKK30KKworX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQoreworCUJVRygpOworfQorCisjZW5kaWYKKwordm9pZCBvbWFwX2RtX3RpbWVyX3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1RSSUdHRVJfUkVHLCAwKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwl1MzIgbDsKKworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwlpZiAoIShsICYgT01BUF9USU1FUl9DVFJMX1NUKSkgeworCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9TVDsKKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworCX0KK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCXUzMiBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworCWlmIChsICYgT01BUF9USU1FUl9DVFJMX1NUKSB7CisJCWwgJj0gfjB4MTsKKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworCX0KK30KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfc291cmNlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHNvdXJjZSkKIHsKQEAgLTEzMyw0OSArMzEzLDk0IEBACiAJb21hcF93cml0ZWwobCwgTU9EX0NPTkZfQ1RSTF8xKTsKIH0KIAorI2Vsc2UKIAotc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl9yZXNldChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpCiB7Ci0JLyogUmVzZXQgYW5kIHNldCBwb3N0ZWQgbW9kZSAqLwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lGX0NUUkxfUkVHLCAweDA2KTsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9PQ1BfQ0ZHX1JFRywgMHgwMik7CisJc3RhdGljIGNvbnN0IGNoYXIgKnNvdXJjZV90aW1lcnNbXSA9IHsKKwkJInN5c19jayIsCisJCSJmdW5jXzMya19jayIsCisJCSJhbHRfY2siCisJfTsKKwlzdHJ1Y3QgY2xrICpwYXJlbnQ7CiAKLQlvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UodGltZXIsIE9NQVBfVElNRVJfU1JDX0FSTVhPUik7CisJaWYgKHNvdXJjZSA8IDAgfHwgc291cmNlID49IDMpCisJCXJldHVybjsKKworCXBhcmVudCA9IGNsa19nZXQoTlVMTCwgc291cmNlX3RpbWVyc1tzb3VyY2VdKTsKKwljbGtfZGlzYWJsZSh0aW1lci0+ZmNsayk7CisJY2xrX3NldF9wYXJlbnQodGltZXItPmZjbGssIHBhcmVudCk7CisJY2xrX2VuYWJsZSh0aW1lci0+ZmNsayk7CisJY2xrX3B1dChwYXJlbnQpOworCisJLyogV2hlbiB0aGUgZnVuY3Rpb25hbCBjbG9jayBkaXNhcHBlYXJzLCB0b28gcXVpY2sgd3JpdGVzIHNlZW0gdG8KKwkgKiBjYXVzZSBhbiBhYm9ydC4gKi8KKwl1ZGVsYXkoNTApOworfQorCisjZW5kaWYKKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGF1dG9yZWxvYWQsCisJCQkgICAgdW5zaWduZWQgaW50IGxvYWQpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJaWYgKGF1dG9yZWxvYWQpCisJCWwgfD0gT01BUF9USU1FUl9DVFJMX0FSOworCWVsc2UKKwkJbCAmPSB+T01BUF9USU1FUl9DVFJMX0FSOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9MT0FEX1JFRywgbG9hZCk7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDApOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGVuYWJsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hdGNoKQoreworCXUzMiBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworICAgICAgICBpZiAoZW5hYmxlKQorCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9DRTsKKwllbHNlCisJCWwgJj0gfk9NQVBfVElNRVJfQ1RSTF9DRTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTUFUQ0hfUkVHLCBtYXRjaCk7CiB9CiAKIAotCi1zdHJ1Y3Qgb21hcF9kbV90aW1lciAqIG9tYXBfZG1fdGltZXJfcmVxdWVzdCh2b2lkKQordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wd20oc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgZGVmX29uLAorCQkJICAgaW50IHRvZ2dsZSwgaW50IHRyaWdnZXIpCiB7Ci0Jc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmRtX3RpbWVyX2luZm8udW51c2VkX3RpbWVycykpIHsKLQkJdGltZXIgPSAoc3RydWN0IG9tYXBfZG1fdGltZXIgKikKLQkJCQlkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMubmV4dDsKLQkJbGlzdF9tb3ZlX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil0aW1lciwKLQkJCQkmZG1fdGltZXJfaW5mby5yZXNlcnZlZF90aW1lcnMpOworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwlsICY9IH4oT01BUF9USU1FUl9DVFJMX0dQT0NGRyB8IE9NQVBfVElNRVJfQ1RSTF9TQ1BXTSB8CisJICAgICAgIE9NQVBfVElNRVJfQ1RSTF9QVCB8ICgweDAzIDw8IDEwKSk7CisJaWYgKGRlZl9vbikKKwkJbCB8PSBPTUFQX1RJTUVSX0NUUkxfU0NQV007CisJaWYgKHRvZ2dsZSkKKwkJbCB8PSBPTUFQX1RJTUVSX0NUUkxfUFQ7CisJbCB8PSB0cmlnZ2VyIDw8IDEwOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wcmVzY2FsZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcHJlc2NhbGVyKQoreworCXUzMiBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworCWwgJj0gfihPTUFQX1RJTUVSX0NUUkxfUFJFIHwgKDB4MDcgPDwgMikpOworCWlmIChwcmVzY2FsZXIgPj0gMHgwMCAmJiBwcmVzY2FsZXIgPD0gMHgwNykgeworCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9QUkU7CisJCWwgfD0gcHJlc2NhbGVyIDw8IDI7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB0aW1lcjsKLX0KLQotCi12b2lkIG9tYXBfZG1fdGltZXJfZnJlZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW9tYXBfZG1fdGltZXJfcmVzZXQodGltZXIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKLQlsaXN0X21vdmVfdGFpbCgoc3RydWN0IGxpc3RfaGVhZCAqKXRpbWVyLCAmZG1fdGltZXJfaW5mby51bnVzZWRfdGltZXJzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogfQogCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLAotCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKKwkJCQkgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JTlRfRU5fUkVHLCB2YWx1ZSk7CiB9CkBAIC0xOTAsOTcgKzQxNSw0OSBAQAogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1NUQVRfUkVHLCB2YWx1ZSk7CiB9CiAKLXZvaWQgb21hcF9kbV90aW1lcl9lbmFibGVfYXV0b3JlbG9hZChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCi17Ci0JdTMyIGw7Ci0JbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWwgfD0gT01BUF9USU1FUl9DVFJMX0FSOwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKLX0KLQotdm9pZCBvbWFwX2RtX3RpbWVyX3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQotewotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1RSSUdHRVJfUkVHLCAxKTsKLX0KLQotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF90cmlnZ2VyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUzMiBsOwotCi0JbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWwgfD0gdmFsdWUgJiAweDM7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwotfQotCi12b2lkIG9tYXBfZG1fdGltZXJfc3RhcnQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQotewotCXUzMiBsOwotCi0JbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWwgfD0gT01BUF9USU1FUl9DVFJMX1NUOwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKLX0KLQotdm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQotewotCXUzMiBsOwotCi0JbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWwgJj0gfjB4MTsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Ci19Ci0KIHVuc2lnbmVkIGludCBvbWFwX2RtX3RpbWVyX3JlYWRfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CiAJcmV0dXJuIG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcpOwogfQogCi12b2lkIG9tYXBfZG1fdGltZXJfcmVzZXRfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCitpbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCiB7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcsIDApOwotfQorCWludCBpOwogCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X2xvYWQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgbG9hZCkKLXsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9MT0FEX1JFRywgbG9hZCk7Ci19CisJZm9yIChpID0gMDsgaSA8IGRtX3RpbWVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyOwogCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IG1hdGNoKQotewotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX01BVENIX1JFRywgbWF0Y2gpOwotfQotCi12b2lkIG9tYXBfZG1fdGltZXJfZW5hYmxlX2NvbXBhcmUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQotewotCXUzMiBsOwotCi0JbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWwgfD0gT01BUF9USU1FUl9DVFJMX0NFOwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kbV90aW1lcl9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmRtX3RpbWVyX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMpOwotCUlOSVRfTElTVF9IRUFEKCZkbV90aW1lcl9pbmZvLnJlc2VydmVkX3RpbWVycyk7Ci0KLQl0aW1lciA9ICZkbV90aW1lcnNbMF07Ci0Jd2hpbGUgKHRpbWVyLT5iYXNlKSB7Ci0JCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil0aW1lciwgJmRtX3RpbWVyX2luZm8udW51c2VkX3RpbWVycyk7Ci0JCW9tYXBfZG1fdGltZXJfcmVzZXQodGltZXIpOwotCQl0aW1lcisrOworCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisJCWlmIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKSAmCisJCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpCisJCQlyZXR1cm4gMTsKIAl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfZG1fdGltZXJfaW5pdCh2b2lkKQotewotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJX19kbV90aW1lcl9pbml0KCk7CiAJcmV0dXJuIDA7CiB9CiAKLWFyY2hfaW5pdGNhbGwob21hcF9kbV90aW1lcl9pbml0KTsKK2ludCBvbWFwX2RtX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXI7CisJaW50IGk7CisKKwlpZiAoIShjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDI0eHgoKSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2luaXQoJmRtX3RpbWVyX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBkbV90aW1lcl9jb3VudDsgaSsrKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwkJY2hhciBjbGtfbmFtZVsxNl07CisjZW5kaWYKKworCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisJCXRpbWVyLT5pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKSBpb19wMnYodGltZXItPnBoeXNfYmFzZSk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwkJc3ByaW50ZihjbGtfbmFtZSwgImdwdCVkX2ljayIsIGkgKyAxKTsKKwkJdGltZXItPmljbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKwkJc3ByaW50ZihjbGtfbmFtZSwgImdwdCVkX2ZjayIsIGkgKyAxKTsKKwkJdGltZXItPmZjbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKyNlbmRpZgorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYwppbmRleCAzNDYxYTZjLi5mMDI4ZTE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYwpAQCAtNyw2ICs3LDcgQEAKICAqIFBhcnRpYWwgdGltZXIgcmV3cml0ZSBhbmQgYWRkaXRpb25hbCBkeW5hbWljIHRpY2sgdGltZXIgc3VwcG9ydCBieQogICogVG9ueSBMaW5kZ2VuIDx0b255QGF0b21pZGUuY29tPiBhbmQKICAqIFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogT01BUCBEdWFsLW1vZGUgdGltZXIgZnJhbWV3b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcwogICoKICAqIE1QVSB0aW1lciBjb2RlIGJhc2VkIG9uIHRoZSBvbGRlciBNUFUgdGltZXIgY29kZSBmb3IgT01BUAogICogQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCkBAIC03OSwxOCArODAsNiBAQAogI2RlZmluZSBPTUFQMV8zMktfVElNRVJfVFZSCQkweDAwCiAjZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UQ1IJCTB4MDQKIAotLyogMjR4eCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSX0JBU0UJCTB4NDgwMjgwMDAKLSNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCQkweDQ4MDA4NDQwCi0jZGVmaW5lIEdQX1RJTUVSX1RJRFIJCQkweDAwCi0jZGVmaW5lIEdQX1RJTUVSX1RJU1IJCQkweDE4Ci0jZGVmaW5lIEdQX1RJTUVSX1RJRVIJCQkweDFjCi0jZGVmaW5lIEdQX1RJTUVSX1RDTFIJCQkweDI0Ci0jZGVmaW5lIEdQX1RJTUVSX1RDUlIJCQkweDI4Ci0jZGVmaW5lIEdQX1RJTUVSX1RMRFIJCQkweDJjCi0jZGVmaW5lIEdQX1RJTUVSX1RUR1IJCQkweDMwCi0jZGVmaW5lIEdQX1RJTUVSX1RTSUNSCQkJMHg0MAotCiAjZGVmaW5lIE9NQVBfMzJLX1RJQ0tTX1BFUl9IWgkJKDMyNzY4IC8gSFopCiAKIC8qCkBAIC0xMDIsMjQgKzkxLDU3IEBACiAjZGVmaW5lIEpJRkZJRVNfVE9fSFdfVElDS1MobnJfamlmZmllcywgY2xvY2tfcmF0ZSkJCQlcCiAJCQkJKCgobnJfamlmZmllcykgKiAoY2xvY2tfcmF0ZSkpIC8gSFopCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfd3JpdGUoaW50IHZhbCwgaW50IHJlZykKIHsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCW9tYXBfd3JpdGV3KHZhbCwgT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpOwotCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVAyX0dQX1RJTUVSX0JBU0UgKyByZWcpOworCW9tYXBfd3JpdGV3KHZhbCwgT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQogewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpICYgMHhmZmZmZmY7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybiBvbWFwX3JlYWRsKE9NQVAyX0dQX1RJTUVSX0JBU0UgKyByZWcpOworCXJldHVybiBvbWFwX3JlYWRsKE9NQVAxXzMyS19USU1FUl9CQVNFICsgcmVnKSAmIDB4ZmZmZmZmOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfc3RhcnQodW5zaWduZWQgbG9uZyBsb2FkX3ZhbCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZShsb2FkX3ZhbCwgT01BUDFfMzJLX1RJTUVSX1RWUik7CisJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwZiwgT01BUDFfMzJLX1RJTUVSX0NSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVAxXzMyS19USU1FUl9DUik7Cit9CisKKyNkZWZpbmUgb21hcF8zMmtfdGltZXJfYWNrX2lycSgpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisKKyNpbmNsdWRlIDxhc20vYXJjaC9kbXRpbWVyLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0aW1lcjsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0YXJ0KHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCit7CisJb21hcF9kbV90aW1lcl9zZXRfbG9hZChncHRpbWVyLCAxLCAweGZmZmZmZmZmIC0gbG9hZF92YWwpOworCW9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoZ3B0aW1lciwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpOworCW9tYXBfZG1fdGltZXJfc3RhcnQoZ3B0aW1lcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdG9wKHZvaWQpCit7CisJb21hcF9kbV90aW1lcl9zdG9wKGdwdGltZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfYWNrX2lycSh2b2lkKQoreworCXUzMiBzdGF0dXMgPSBvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKGdwdGltZXIpOworCW9tYXBfZG1fdGltZXJfd3JpdGVfc3RhdHVzKGdwdGltZXIsIHN0YXR1cyk7Cit9CisKKyNlbmRpZgorCiAvKgogICogVGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lciBpcyBhbiBhZGRpdGlvbmFsIHRpbWVyIG9uIDE2eHguCiAgKiBJdCBpcyBhbHdheXMgcnVubmluZy4KQEAgLTEyOSwyOSArMTUxLDYgQEAKIAlyZXR1cm4gb21hcF9yZWFkbChUSU1FUl8zMktfU1lOQ0hST05JWkVEKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0YXJ0KHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCi17Ci0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQMV8zMktfVElNRVJfVFZSKTsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwZiwgT01BUDFfMzJLX1RJTUVSX0NSKTsKLQl9Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHhmZmZmZmZmZiAtIGxvYWRfdmFsLCBHUF9USU1FUl9UQ1JSKTsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoKDEgPDwgMSksIEdQX1RJTUVSX1RJRVIpOwotCQlvbWFwXzMya190aW1lcl93cml0ZSgoMSA8PCAxKSB8IDEsIEdQX1RJTUVSX1RDTFIpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKLXsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MCwgT01BUDFfMzJLX1RJTUVSX0NSKTsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwLCBHUF9USU1FUl9UQ0xSKTsKLX0KLQogLyoKICAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgdXNlYy4gTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVyZmxvdyBmb3IgbGFyZ2VyIHZhbHVlcy4KICAqLwpAQCAtMjAzLDExICsyMDIsNyBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJdTMyIHN0YXR1cyA9IG9tYXBfMzJrX3RpbWVyX3JlYWQoR1BfVElNRVJfVElTUik7Ci0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKHN0YXR1cywgR1BfVElNRVJfVElTUik7Ci0JfQotCisJb21hcF8zMmtfdGltZXJfYWNrX2lycSgpOwogCW5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwogCiAJd2hpbGUgKChzaWduZWQgbG9uZykobm93IC0gb21hcF8zMmtfbGFzdF90aWNrKQpAQCAtMjY5LDkgKzI2NCw2IEBACiAJLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayAqIGdwdDFfaWNrOwotc3RhdGljIHN0cnVjdCBjbGsgKiBncHQxX2ZjazsKLQogc3RhdGljIF9faW5pdCB2b2lkIG9tYXBfaW5pdF8zMmtfdGltZXIodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgpAQCAtMjgwLDMxICsyNzIsMTkgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKIAkJc2V0dXBfaXJxKElOVF9PU19USU1FUiwgJm9tYXBfMzJrX3RpbWVyX2lycSk7Ci0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlzZXR1cF9pcnEoMzcsICZvbWFwXzMya190aW1lcl9pcnEpOwogCW9tYXBfdGltZXIub2Zmc2V0ICA9IG9tYXBfMzJrX3RpbWVyX2dldHRpbWVvZmZzZXQ7CiAJb21hcF8zMmtfbGFzdF90aWNrID0gb21hcF8zMmtfc3luY190aW1lcl9yZWFkKCk7CiAKIAkvKiBSRVZJU0lUOiBDaGVjayAyNHh4IFRJT0NQX0NGRyBzZXR0aW5ncyBhZnRlciBpZGxlIHdvcmtzICovCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDAsIEdQX1RJTUVSX1RDTFIpOwotCQlvbWFwX3dyaXRlbCgwLCBDTV9DTEtTRUxfV0tVUCk7CQkvKiAzMktIeiBjbG9jayBzb3VyY2UgKi8KKwkJZ3B0aW1lciA9IG9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYygxKTsKKwkJQlVHX09OKGdwdGltZXIgPT0gTlVMTCk7CiAKLQkJZ3B0MV9pY2sgPSBjbGtfZ2V0KE5VTEwsICJncHQxX2ljayIpOwotCQlpZiAoSVNfRVJSKGdwdDFfaWNrKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBncHQxX2lja1xuIik7Ci0JCWVsc2UKLQkJCWNsa19lbmFibGUoZ3B0MV9pY2spOwotCi0JCWdwdDFfZmNrID0gY2xrX2dldChOVUxMLCAiZ3B0MV9mY2siKTsKLQkJaWYgKElTX0VSUihncHQxX2ZjaykpCi0JCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgZ3B0MV9mY2tcbiIpOwotCQllbHNlCi0JCQljbGtfZW5hYmxlKGdwdDFfZmNrKTsKLQotCQltZGVsYXkoMTAwKTsJCS8qIFdhaXQgZm9yIGNsb2NrcyB0byBzdGFiaWxpemUgKi8KLQotCQlvbWFwXzMya190aW1lcl93cml0ZSgweDcsIEdQX1RJTUVSX1RJU1IpOworCQlvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UoZ3B0aW1lciwgT01BUF9USU1FUl9TUkNfMzJfS0haKTsKKwkJc2V0dXBfaXJxKG9tYXBfZG1fdGltZXJfZ2V0X2lycShncHRpbWVyKSwgJm9tYXBfMzJrX3RpbWVyX2lycSk7CisJCW9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoZ3B0aW1lciwKKwkJCU9NQVBfVElNRVJfSU5UX0NBUFRVUkUgfCBPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVyB8CisJCQlPTUFQX1RJTUVSX0lOVF9NQVRDSCk7CiAJfQogCiAJb21hcF8zMmtfdGltZXJfc3RhcnQoT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QpOwpAQCAtMzE3LDYgKzI5Nyw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgorCW9tYXBfZG1fdGltZXJfaW5pdCgpOworI2VuZGlmCiAJb21hcF9pbml0XzMya190aW1lcigpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCmluZGV4IGU2NTIyZTYuLjViNThlM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCkBAIC01LDYgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICogQXV0aG9yOiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+CisgKiBQV00gYW5kIGNsb2NrIGZyYW13b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yNSw2OSArMjYsNTUgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9USU1FUl9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVJfSAorI2lmbmRlZiBfX0FTTV9BUkNIX0RNVElNRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNVElNRVJfSAogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jZGVmaW5lIE9NQVBfVElNRVJfU1JDX0FSTVhPUgkJMHgwMAotI2RlZmluZSBPTUFQX1RJTUVSX1NSQ18zMl9LSFoJCTB4MDEKLSNkZWZpbmUgT01BUF9USU1FUl9TUkNfRVhUX0NMSwkJMHgwMgotCi0vKiB0aW1lciBjb250cm9sIHJlZyBiaXRzICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9DQVBUTU9ERQkoMSA8PCAxMykKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RSR19PVkVSRkxPVwkoMHgxIDw8IDEwKQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVFJHX09GQU5ETUFUQ0gJKDB4MiA8PCAxMCkKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RDTV9MT1dUT0hJR0gJKDB4MSA8PCA4KQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVENNX0hJR0hUT0xPVwkoMHgyIDw8IDgpCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9UQ01fQk9USEVER0VTCSgweDMgPDwgOCkKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1NDUFdNCQkoMSA8PCA3KQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfQ0UJCSgxIDw8IDYpCS8qIGNvbXBhcmUgZW5hYmxlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9QUkUJCSgxIDw8IDUpCS8qIHByZXNjYWxlciBlbmFibGUgKi8KLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUVl9TSElGVAkyCQkvKiBob3cgbXVjaCB0byBzaGlmdCB0aGUgcHJlc2NhbGVyIHZhbHVlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9BUgkJKDEgPDwgMSkJLyogYXV0by1yZWxvYWQgZW5hYmxlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9TVAkJKDEgPDwgMCkJLyogc3RhcnQgdGltZXIgKi8KKy8qIGNsb2NrIHNvdXJjZXMgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9TUkNfU1lTX0NMSwkJCTB4MDAKKyNkZWZpbmUgT01BUF9USU1FUl9TUkNfMzJfS0haCQkJMHgwMQorI2RlZmluZSBPTUFQX1RJTUVSX1NSQ19FWFRfQ0xLCQkJMHgwMgogCiAvKiB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLSNkZWZpbmUgT01BUF9USU1FUl9JTlRfQ0FQVFVSRQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVBfVElNRVJfSU5UX01BVENICQkoMSA8PCAwKQorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9DQVBUVVJFCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9NQVRDSAkJCSgxIDw8IDApCiAKKy8qIHRyaWdnZXIgdHlwZXMgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9UUklHR0VSX05PTkUJCQkweDAwCisjZGVmaW5lIE9NQVBfVElNRVJfVFJJR0dFUl9PVkVSRkxPVwkJMHgwMQorI2RlZmluZSBPTUFQX1RJTUVSX1RSSUdHRVJfT1ZFUkZMT1dfQU5EX0NPTVBBUkUJMHgwMgogCi1zdHJ1Y3Qgb21hcF9kbV90aW1lciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0Oworc3RydWN0IG9tYXBfZG1fdGltZXI7CitzdHJ1Y3QgY2xrOwogCi0JdTMyIGJhc2U7Ci0JdW5zaWduZWQgaW50IGlycTsKLX07CitpbnQgb21hcF9kbV90aW1lcl9pbml0KHZvaWQpOwogCi11MzIgb21hcF9kbV90aW1lcl9yZWFkX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcsIHUzMiB2YWx1ZSk7Ci0KLXN0cnVjdCBvbWFwX2RtX3RpbWVyICogb21hcF9kbV90aW1lcl9yZXF1ZXN0KHZvaWQpOworc3RydWN0IG9tYXBfZG1fdGltZXIgKm9tYXBfZG1fdGltZXJfcmVxdWVzdCh2b2lkKTsKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoaW50IHRpbWVyX2lkKTsKIHZvaWQgb21hcF9kbV90aW1lcl9mcmVlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Ci12b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpOwogCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF90cmlnZ2VyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKTsKLXZvaWQgb21hcF9kbV90aW1lcl9lbmFibGVfY29tcGFyZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwotdm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9hdXRvcmVsb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CitpbnQgb21hcF9kbV90aW1lcl9nZXRfaXJxKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CisKK3UzMiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayh1MzIgaW5wdXRtYXNrKTsKK3N0cnVjdCBjbGsgKm9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIHZvaWQgb21hcF9kbV90aW1lcl9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwogdm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIAotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IGxvYWQpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9tYXRjaChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCBtYXRjaCk7Cit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpOwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGF1dG9yZWxvYWQsIHVuc2lnbmVkIGludCB2YWx1ZSk7Cit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGVuYWJsZSwgdW5zaWduZWQgaW50IG1hdGNoKTsKK3ZvaWQgb21hcF9kbV90aW1lcl9zZXRfcHdtKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGRlZl9vbiwgaW50IHRvZ2dsZSwgaW50IHRyaWdnZXIpOwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wcmVzY2FsZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcHJlc2NhbGVyKTsKKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKTsKIAogdW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwotCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKLXZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CiAKIGludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCk7Ci11MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodTMyIGlucHV0bWFzayk7CiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVSX0ggKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCmluZGV4IDQyMDk4ZDkuLjQ2ZjJmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCkBAIC0yNDIsNiArMjQyLDE4IEBACiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzIJMzAKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMwkzMQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTks0CTMyCisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxCTM3CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIyCTM4CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIzCTM5CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI0CTQwCisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI1CTQxCisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI2CTQyCisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI3CTQzCisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI4CTQ0CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI5CTQ1CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMAk0NgorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTEJNDcKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEyCTQ4CiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMV9JUlFfVFgJNTkKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9SWAk2MAogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1RYCTYyCg==