ZGlmZiAtLWdpdCBhL3N5c19ody9kcnZfYWRjLmMgYi9zeXNfaHcvZHJ2X2FkYy5jCmluZGV4IGFkNTQwOTYuLmVjNDY2NGEgMTAwNjQ0Ci0tLSBhL3N5c19ody9kcnZfYWRjLmMKKysrIGIvc3lzX2h3L2Rydl9hZGMuYwpAQCAtMSwzMjEgKzEsMzY3IEBACi0jaW5jbHVkZSAiZHJ2X2FkYy5oIgotI2luY2x1ZGUgInN0bTMyZjEweC5oIgotI2luY2x1ZGUgImtleXBhZC5oIgotI2luY2x1ZGUgInN0cmluZy5oIgotI2luY2x1ZGUgIi4uL3N1cHdpc2RvbS9zcF91dGlsLmgiCi0jaW5jbHVkZSAiLi4vc3Vwd2lzZG9tL3NwX2ZsYXNoLmgiCi0KLS8vI2luY2x1ZGUgIm1pZmFyZV9vbmVfaHdfbGliLmgiCi0jaW5jbHVkZSAidGltZXIuaCIKLSNpbmNsdWRlICJkYXRhX3Rvb2xzLmgiCi0vLyNpbmNsdWRlICJjcmMuaCIKLS8vI2luY2x1ZGUgImRiZy5oIgotCi0jZGVmaW5lIFBERFRocmVzaG9kX1ZvdGFnZSAgICA4MAotI2RlZmluZSBQRERUaHJlc2hvZF9BRENWYWwgICAgKFBERFRocmVzaG9kX1ZvdGFnZSo0MDk1TC83MTNMKQotCi0jZGVmaW5lIFJlc2V0X1ZvdGFnZSAgICAgICAgICA3NCAgICAgICAvL1RQUzU0MTYwzaPWubmk1/e159G5Ny4xVgotI2RlZmluZSBSZXNldF9BRENWYWwgICAgICAgICAgKFJlc2V0X1ZvdGFnZSo0MDk1TC83MTNMKQotCi0KLXR5cGVkZWYgdm9pZCAoKmFkY190aW1lcl90aWNrX3QpKHZvaWQpOwotCi12b2xhdGlsZSB1aW50OF90ICBhZGNfdGltZXI7Ci12b2xhdGlsZSB1aW50OF90ICBjaF9pZHg7Ci12b2xhdGlsZSB1aW50MTZfdCBhZGNfdmFsX3ZkZD00MDk1Owotdm9sYXRpbGUgdWludDE2X3QgYWRjX3ZhbDsKLWRhY19wYXJhX3QgZGFjX3BhcmEgPSB7ODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDg5MCwgMH07IC8vZGFjyuSz9rXn0bnErMjPMy4zVgotYWRjX3RpbWVyX3RpY2tfdCBwX2FkY190aW1lcl90aWNrID0gMDsKLXZvbGF0aWxlIHVpbnQxNl90IGFkY19idWZmW0FEQ19NQVhfQ0hfTlVNXTsKLXN0YXRpYyBjb25zdCB1aW50OF90IGFkY19jaF90YmxbQURDX01BWF9DSF9OVU1dID0KLXsKLSAgQURDX0NoYW5uZWxfOSwgICAgICAgICAvL2tleV9hZGMxLHBiMQotICBBRENfQ2hhbm5lbF80LCAgICAgICAgIC8va2V5X2FkYzIscGE0Ci0gIEFEQ19DaGFubmVsXzEsICAgICAgICAgLy9rZXlfYWRjMyxwYTEKLSAgQURDX0NoYW5uZWxfOCwgICAgICAgICAvL2tleV9hZGM0LHBiMAotICBBRENfQ2hhbm5lbF8zLCAgICAgICAgIC8va2V5X2FkYzUscGEzCi0gIEFEQ19DaGFubmVsXzAsICAgICAgICAgLy9rZXlfYWRjNixwYTAKLSAgQURDX0NoYW5uZWxfMTUsICAgICAgICAvL2tleV9hZGM3LHBjNQotICBBRENfQ2hhbm5lbF8yLCAgICAgICAgIC8va2V5X2FkYzgscGEyCi0gIEFEQ19DaGFubmVsXzEzLCAgICAgICAgLy9rZXlfYWRjOSxwYzMKLSAgQURDX0NoYW5uZWxfMTEsICAgICAgICAvL2tleV9hZGMxMCxwYzEKLSAgQURDX0NoYW5uZWxfMTAsICAgICAgICAvL2tleV9hZGMxMSxwYzAKLSAgQURDX0NoYW5uZWxfMTIsICAgICAgICAvL2tleV9hZGMxMixwYzIKLSAgQURDX0NoYW5uZWxfNiwgICAgICAgICAvL3ZjY19hZGNfaW4scGE2Ci0gIEFEQ19DaGFubmVsXzE0LCAgICAgICAgLy9mYV9hZGNfaW4scGM0Ci0gIEFEQ19DaGFubmVsXzcgICAgICAgICAgLy9oYWxsX2FkY19pbixwYTcKLX07Ci0KLXZvaWQgYWRjX3RpbWVyX3RpY2sodm9pZCk7Ci1zdGF0aWMgdm9pZCB0aW1lcjRfaW5pdCh2b2lkKTsKLQotc3RhdGljIHZvaWQgYWRjX2dwaW9faW5pdCh2b2lkKQotewotICBHUElPX0luaXRUeXBlRGVmIEdQSU9fSW5pdFN0cnVjdHVyZTsKLQotICBSQ0NfQVBCMlBlcmlwaENsb2NrQ21kKFJDQ19BUEIyUGVyaXBoX0dQSU9BIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfQVBCMlBlcmlwaF9HUElPQiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgUkNDX0FQQjJQZXJpcGhfR1BJT0MsIEVOQUJMRSk7Ci0KLSAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BSU47Ci0KLSAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fUGluID0gR1BJT19QaW5fMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzEgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl8yIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fMyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl82IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fNzsKLSAgR1BJT19Jbml0KEdQSU9BLCAmR1BJT19Jbml0U3RydWN0dXJlKTsKLQotICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19QaW4gPSBHUElPX1Bpbl8wIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fMTsKLSAgR1BJT19Jbml0KEdQSU9CLCAmR1BJT19Jbml0U3RydWN0dXJlKTsKLQotICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19QaW4gPSBHUElPX1Bpbl8wIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fMSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl8zIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fNCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzU7Ci0gIEdQSU9fSW5pdChHUElPQywgJkdQSU9fSW5pdFN0cnVjdHVyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkY19jaGFubmVsc19pbml0KHZvaWQpCi17Ci0gIEFEQ19Jbml0VHlwZURlZiBBRENfSW5pdFN0cnVjdHVyZTsKLQotICBSQ0NfQURDQ0xLQ29uZmlnKFJDQ19QQ0xLMl9EaXY2KTsKLSAgUkNDX0FQQjJQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMlBlcmlwaF9BREMxLCBFTkFCTEUpOwotCi0gIEFEQ19Jbml0U3RydWN0dXJlLkFEQ19Nb2RlID0gQURDX01vZGVfSW5kZXBlbmRlbnQ7Ci0gIEFEQ19Jbml0U3RydWN0dXJlLkFEQ19TY2FuQ29udk1vZGUgPSBESVNBQkxFOwotICBBRENfSW5pdFN0cnVjdHVyZS5BRENfQ29udGludW91c0NvbnZNb2RlID0gRElTQUJMRTsKLSAgQURDX0luaXRTdHJ1Y3R1cmUuQURDX0V4dGVybmFsVHJpZ0NvbnYgPSBBRENfRXh0ZXJuYWxUcmlnQ29udl9Ob25lOwotICBBRENfSW5pdFN0cnVjdHVyZS5BRENfRGF0YUFsaWduID0gQURDX0RhdGFBbGlnbl9SaWdodDsKLSAgQURDX0luaXRTdHJ1Y3R1cmUuQURDX05ick9mQ2hhbm5lbCA9IDE7Ci0gIEFEQ19Jbml0KEFEQzEsICZBRENfSW5pdFN0cnVjdHVyZSk7Ci0gIEFEQzEtPkNSMiB8PSAweDAwMTAwMDA7Ci0KLSAgLy9rZXkgYWRjIDEgLSAxMgotICBjaF9pZHggPSAwOwotICBBRENfUmVndWxhckNoYW5uZWxDb25maWcoQURDMSwgYWRjX2NoX3RibFtjaF9pZHhdLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX1NhbXBsZVRpbWVfMjM5Q3ljbGVzNSk7Ci0gIEFEQ19DbWQoQURDMSwgRU5BQkxFKTsKLQotICBBRENfUmVzZXRDYWxpYnJhdGlvbihBREMxKTsKLSAgd2hpbGUoQURDX0dldFJlc2V0Q2FsaWJyYXRpb25TdGF0dXMoQURDMSkpOwotCi0gIEFEQ19TdGFydENhbGlicmF0aW9uKEFEQzEpOwotICB3aGlsZShBRENfR2V0Q2FsaWJyYXRpb25TdGF0dXMoQURDMSkpOwotICBBRENfU29mdHdhcmVTdGFydENvbnZDbWQoQURDMSwgRU5BQkxFKTsKLSAgcF9hZGNfdGltZXJfdGljayA9IGFkY190aW1lcl90aWNrOwotfQotCi1zdGF0aWMgdm9pZCBhZGNfZG1hX2luaXQodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgYWRjX252aWNfaW5pdCh2b2lkKQotewotCi19Ci0KLXN0YXRpYyB2b2lkIGRhY19pbml0KHZvaWQpCi17Ci0gIEdQSU9fSW5pdFR5cGVEZWYgR1BJT19Jbml0U3RydWN0dXJlOwotCi0gIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfR1BJT0EsIEVOQUJMRSk7Ci0KLSAgREFDX0RlSW5pdCgpOwotCi0gIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX01vZGUgPSBHUElPX01vZGVfQUlOOwotCi0gIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX1BpbiA9IEdQSU9fUGluXzU7Ci0gIEdQSU9fSW5pdChHUElPQSwgJkdQSU9fSW5pdFN0cnVjdHVyZSk7Ci0KLQotICBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX0RBQywgRU5BQkxFKTsKLQotICBEQUMtPkNSIHw9IDB4MDAwMTAwMDA7Ci0gIERBQ19TZXRDaGFubmVsMkRhdGEoREFDX0FsaWduXzEyYl9SLCBkYWNfcGFyYS52YWxbMF0pOwotfQotLyoqCi0qKtCj17ywtLz8Ci0qKi8KLXZvaWQgY2FsaWJyYXRlX2tleSh1aW50OCBjYWNoZV9lbmFibGUpCi17Ci0gIGNvbnN0IHVpbnQ4IGxlbiA9IHNpemVvZihkYWNfcGFyYSkgKzI7Ci0gIHVpbnQ4IGJ1ZltsZW5dOwotICBpZihjYWNoZV9lbmFibGUpCi0gIHsKLSAgICB1aW50OCBjcmNbMl07Ci0gICAgc3BfZmxhc2hfcmVhZChBRERSX0tFWV9QQVJBLGJ1ZixsZW4pOwotICAgIHNwX3Byb3RvY29sX2NyYyhidWYgLGxlbiAtMixjcmMpOwotICAgIGlmKG1lbWNtcChidWYgK2xlbiAtMixjcmMsMikgPT0gMCkKLSAgICB7Ci0gICAgICBtZW1jcHkoKHVpbnQ4KikmZGFjX3BhcmEsYnVmLHNpemVvZihkYWNfcGFyYSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICBkYWNfcGFyYV9hdXRvX3NldCgpOwotICBtZW1jcHkoYnVmLCh1aW50OCopJmRhY19wYXJhLHNpemVvZihkYWNfcGFyYSkpOwotICBzcF9wcm90b2NvbF9jcmMoYnVmLGxlbiAtMixidWYgK2xlbiAtMik7Ci0gIHNwX2ZsYXNoX2VyYXNlKEFERFJfS0VZX1BBUkEpOwotICBzcF9mbGFzaF93cml0ZShBRERSX0tFWV9QQVJBLGJ1ZixsZW4pOwotfQotCi12b2lkIGFkY19pbml0KHZvaWQpCi17Ci0gIHRpbWVyNF9pbml0KCk7Ci0gIGRhY19pbml0KCk7Ci0gIGFkY19ncGlvX2luaXQoKTsKLSAgYWRjX252aWNfaW5pdCgpOwotICBhZGNfZG1hX2luaXQoKTsKLSAgYWRjX2NoYW5uZWxzX2luaXQoKTsKLSAgY2FsaWJyYXRlX2tleSgxKTsKLX0KLQotdWludDE2X3QgYWRjX2dldF92YWwodWludDhfdCBjaCkKLXsKLSAgaWYoY2g8QURDX01BWF9DSF9OVU0pCi0gIHsKLSAgICByZXR1cm4gYWRjX2J1ZmZbY2hdOwotICB9Ci0gIGVsc2UKLSAgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLXZvaWQgYWRjX3RpbWVyX3RpY2sodm9pZCkKLXsKLSAgYWRjX3RpbWVyICsrOwotICBpZihhZGNfdGltZXI+PTgpCi0gIHsKLSAgICBhZGNfdGltZXIgPSAwOwotICB9Ci0gIGlmKGFkY190aW1lcj09MCkKLSAgewotICAgIGFkY19idWZmW2NoX2lkeF0gPSBBRENfR2V0Q29udmVyc2lvblZhbHVlKEFEQzEpOwotICAgIGNoX2lkeCArKzsKLSAgICBpZihjaF9pZHggPj0gQURDX01BWF9DSF9OVU0pCi0gICAgewotICAgICAga2V5cGFkX3NjYW4oKTsKLSAgICAgIGNoX2lkeCA9IDA7Ci0gICAgfQotCi0gICAgaWYoY2hfaWR4IDwgMTIpCi0gICAgewotICAgICAgREFDX1NldENoYW5uZWwyRGF0YShEQUNfQWxpZ25fMTJiX1IsIGRhY19wYXJhLnZhbFtjaF9pZHhdKTsKLSAgICB9Ci0gIH0KLSAgZWxzZSBpZihhZGNfdGltZXIgPT0gNykKLSAgewotICAgIEFEQ19SZWd1bGFyQ2hhbm5lbENvbmZpZyhBREMxLCBhZGNfY2hfdGJsW2NoX2lkeF0sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TYW1wbGVUaW1lXzIzOUN5Y2xlczUpOwotICAgIEFEQ19Tb2Z0d2FyZVN0YXJ0Q29udkNtZChBREMxLCBFTkFCTEUpOwotICB9Ci19Ci0KLXZvaWQgYWRjX3RpbWVyX3Rhc2sodm9pZCkKLXsKLSAgaWYocF9hZGNfdGltZXJfdGljaykKLSAgewotICAgIC8v0tG+rbP1yry7r83qs8kKLSAgICBwX2FkY190aW1lcl90aWNrKCk7Ci0gIH0KLX0KLQotdm9pZCBkYWNfcGFyYV9hdXRvX3NldCh2b2lkKQotewotICB1aW50OF90IGk7Ci0gIHVpbnQxNl90IGRhY192YWwgPSA0MDk1OwotICB1aW50OF90ICBhZGpfZmxhZ3NbMTJdOwotCi0gIHBfYWRjX3RpbWVyX3RpY2sgPSAwOwotICBkZWxheV9tcygxMCk7Ci0gIG1lbXNldChhZGpfZmxhZ3MsIDEsIHNpemVvZihhZGpfZmxhZ3MpKTsKLSAgd2hpbGUoKGRhY192YWwqMzMwMHVsKjY2LzQwOTUwKSA+IDIwMDApICAgICAvL9TLt8XK5LP2sru1zdPaMlYKLSAgewotICAgIGZvcihpPTA7IGk8MTI7IGkrKykKLSAgICB7Ci0gICAgICBpZihhZGpfZmxhZ3NbaV0pCi0gICAgICB7Ci0gICAgICAgIGRhY19wYXJhLnZhbFtpXSA9IGRhY192YWw7Ci0gICAgICB9Ci0gICAgICBEQUNfU2V0Q2hhbm5lbDJEYXRhKERBQ19BbGlnbl8xMmJfUiwgZGFjX3ZhbCk7Ci0gICAgICBkZWxheV9tcyg2KTsKLSAgICAgIEFEQ19SZWd1bGFyQ2hhbm5lbENvbmZpZyhBREMxLCBhZGNfY2hfdGJsW2ldLCAxLCBBRENfU2FtcGxlVGltZV8yMzlDeWNsZXM1KTsKLSAgICAgIEFEQ19Tb2Z0d2FyZVN0YXJ0Q29udkNtZChBREMxLCBFTkFCTEUpOwotICAgICAgZGVsYXlfbXMoMik7Ci0gICAgICBpZihBRENfR2V0Q29udmVyc2lvblZhbHVlKEFEQzEpIDwgMzAwdWwpCi0gICAgICB7Ci0gICAgICAgIGFkal9mbGFnc1tpXSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGFkal9mbGFnc1tpXSA9IDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYobWVtX3Rlc3QoYWRqX2ZsYWdzLCAwLCBzaXplb2YoYWRqX2ZsYWdzKSkgPT0gMCkKLSAgICB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGFjX3ZhbCAtPSAxMjQ7Ci0gIH0KLSAgcF9hZGNfdGltZXJfdGljayA9IGFkY190aW1lcl90aWNrOwotCi19Ci0KLXN0YXRpYyB2b2lkIHRpbWVyNF9pbml0KHZvaWQpCi17Ci0gIHVpbnQxNl90IFByZXNjYWxlclZhbHVlID0gMDsKLSAgVElNX1RpbWVCYXNlSW5pdFR5cGVEZWYgIFRJTV9UaW1lQmFzZVN0cnVjdHVyZTsKLSAgVElNX09DSW5pdFR5cGVEZWYgIFRJTV9PQ0luaXRTdHJ1Y3R1cmU7Ci0KLSAgR1BJT19Jbml0VHlwZURlZiBHUElPX0luaXRTdHJ1Y3R1cmU7Ci0KLSAgLyogVElNNCBjbG9jayBlbmFibGUgKi8KLSAgUkNDX0FQQjFQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMVBlcmlwaF9USU00LCBFTkFCTEUpOwotCi0gIC8qIEdQSU9BIGFuZCBHUElPQiBjbG9jayBlbmFibGUgKi8KLSAgUkNDX0FQQjJQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMlBlcmlwaF9HUElPQnxSQ0NfQVBCMlBlcmlwaF9BRklPLCBFTkFCTEUpOwotCi0gIC8qR1BJT0IgQ29uZmlndXJhdGlvbjogVElNNCBjaGFubmVsMyBhbmQgNCAqLwotICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19QaW4gPSAgR1BJT19QaW5fOCB8IEdQSU9fUGluXzk7Ci0gIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX01vZGUgPSBHUElPX01vZGVfQUZfUFA7Ci0gIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX1NwZWVkID0gR1BJT19TcGVlZF81ME1IejsKLSAgR1BJT19Jbml0KEdQSU9CLCAmR1BJT19Jbml0U3RydWN0dXJlKTsKLQotICBQcmVzY2FsZXJWYWx1ZSA9ICh1aW50MTZfdCkoU3lzdGVtQ29yZUNsb2NrIC8gNzIwMDAwMDApIC0gMTsKLSAgLyogVGltZSBiYXNlIGNvbmZpZ3VyYXRpb24gKi8KLSAgVElNX1RpbWVCYXNlU3RydWN0dXJlLlRJTV9QZXJpb2QgPSA3MTk7Ci0gIFRJTV9UaW1lQmFzZVN0cnVjdHVyZS5USU1fUHJlc2NhbGVyID0gUHJlc2NhbGVyVmFsdWU7Ci0gIFRJTV9UaW1lQmFzZVN0cnVjdHVyZS5USU1fQ2xvY2tEaXZpc2lvbiA9IDA7Ci0gIFRJTV9UaW1lQmFzZVN0cnVjdHVyZS5USU1fQ291bnRlck1vZGUgPSBUSU1fQ291bnRlck1vZGVfVXA7Ci0KLSAgVElNX1RpbWVCYXNlSW5pdChUSU00LCAmVElNX1RpbWVCYXNlU3RydWN0dXJlKTsKLQotICAvKiBQV00xIE1vZGUgY29uZmlndXJhdGlvbjogQ2hhbm5lbDEgKi8KLSAgVElNX09DSW5pdFN0cnVjdHVyZS5USU1fT0NNb2RlID0gVElNX09DTW9kZV9QV00xOwotICBUSU1fT0NJbml0U3RydWN0dXJlLlRJTV9PdXRwdXRTdGF0ZSA9IFRJTV9PdXRwdXRTdGF0ZV9FbmFibGU7Ci0gIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX1B1bHNlID0gMzU5OwotICBUSU1fT0NJbml0U3RydWN0dXJlLlRJTV9PQ1BvbGFyaXR5ID0gVElNX09DUG9sYXJpdHlfSGlnaDsKLSAgVElNX09DM0luaXQoVElNNCwgJlRJTV9PQ0luaXRTdHJ1Y3R1cmUpOwotICBUSU1fT0MzUHJlbG9hZENvbmZpZyhUSU00LCBUSU1fT0NQcmVsb2FkX0VuYWJsZSk7Ci0KLSAgLyogUFdNMSBNb2RlIGNvbmZpZ3VyYXRpb246IENoYW5uZWwyICovCi0gIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX09DTW9kZSA9IFRJTV9PQ01vZGVfUFdNMTsKLSAgVElNX09DSW5pdFN0cnVjdHVyZS5USU1fT3V0cHV0U3RhdGUgPSBUSU1fT3V0cHV0U3RhdGVfRW5hYmxlOwotICBUSU1fT0NJbml0U3RydWN0dXJlLlRJTV9QdWxzZSA9IDM1OTsKLSAgVElNX09DSW5pdFN0cnVjdHVyZS5USU1fT0NQb2xhcml0eSA9IFRJTV9PQ1BvbGFyaXR5X0xvdzsKLSAgVElNX09DNEluaXQoVElNNCwgJlRJTV9PQ0luaXRTdHJ1Y3R1cmUpOwotICBUSU1fT0M0UHJlbG9hZENvbmZpZyhUSU00LCBUSU1fT0NQcmVsb2FkX0VuYWJsZSk7Ci0KLSAgVElNX0FSUlByZWxvYWRDb25maWcoVElNNCwgRU5BQkxFKTsKLQotICAvKiBUSU00IGVuYWJsZSBjb3VudGVyICovCi0gIFRJTV9DbWQoVElNNCwgRU5BQkxFKTsKLX0KKyNpbmNsdWRlICJkcnZfYWRjLmgiDQorI2luY2x1ZGUgInN0bTMyZjEweC5oIg0KKyNpbmNsdWRlICJrZXlwYWQuaCINCisjaW5jbHVkZSAic3RyaW5nLmgiDQorI2luY2x1ZGUgIi4uL3N1cHdpc2RvbS9zcF91dGlsLmgiDQorI2luY2x1ZGUgIi4uL3N1cHdpc2RvbS9zcF9mbGFzaC5oIg0KKw0KKy8vI2luY2x1ZGUgIm1pZmFyZV9vbmVfaHdfbGliLmgiDQorI2luY2x1ZGUgInRpbWVyLmgiDQorI2luY2x1ZGUgImRhdGFfdG9vbHMuaCINCisvLyNpbmNsdWRlICJjcmMuaCINCisvLyNpbmNsdWRlICJkYmcuaCINCisNCisjZGVmaW5lIFBERFRocmVzaG9kX1ZvdGFnZSAgICA4MA0KKyNkZWZpbmUgUEREVGhyZXNob2RfQURDVmFsICAgIChQRERUaHJlc2hvZF9Wb3RhZ2UqNDA5NUwvNzEzTCkNCisNCisjZGVmaW5lIFJlc2V0X1ZvdGFnZSAgICAgICAgICA3NCAgICAgICAvL1RQUzU0MTYwzaPWubmk1/e159G5Ny4xVg0KKyNkZWZpbmUgUmVzZXRfQURDVmFsICAgICAgICAgIChSZXNldF9Wb3RhZ2UqNDA5NUwvNzEzTCkNCisNCisNCit0eXBlZGVmIHZvaWQgKCphZGNfdGltZXJfdGlja190KSh2b2lkKTsNCisNCit2b2xhdGlsZSB1aW50OF90ICBhZGNfdGltZXI7DQordm9sYXRpbGUgdWludDhfdCAgY2hfaWR4Ow0KK3ZvbGF0aWxlIHVpbnQxNl90IGFkY192YWxfdmRkPTQwOTU7DQordm9sYXRpbGUgdWludDE2X3QgYWRjX3ZhbDsNCitkYWNfcGFyYV90IGRhY19wYXJhID0gezg5MCwgODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDg5MCwgODkwLCA4OTAsIDB9OyAvL2RhY8rks/a159G5xKzIzzMuM1YNCithZGNfdGltZXJfdGlja190IHBfYWRjX3RpbWVyX3RpY2sgPSAwOw0KK3ZvbGF0aWxlIHVpbnQxNl90IGFkY19idWZmW0FEQ19NQVhfQ0hfTlVNXTsNCitzdGF0aWMgY29uc3QgdWludDhfdCBhZGNfY2hfdGJsW0FEQ19NQVhfQ0hfTlVNXSA9DQorew0KKyAgQURDX0NoYW5uZWxfOSwNCisgIEFEQ19DaGFubmVsXzQsDQorICBBRENfQ2hhbm5lbF8xLA0KKyAgQURDX0NoYW5uZWxfOCwNCisgIEFEQ19DaGFubmVsXzMsDQorICBBRENfQ2hhbm5lbF8wLA0KKyAgQURDX0NoYW5uZWxfMTUsDQorICBBRENfQ2hhbm5lbF8yLA0KKyAgQURDX0NoYW5uZWxfMTMsDQorICBBRENfQ2hhbm5lbF8xMSwNCisgIEFEQ19DaGFubmVsXzEwLA0KKyAgQURDX0NoYW5uZWxfMTIsDQorICBBRENfQ2hhbm5lbF8xNCwNCisgIEFEQ19DaGFubmVsXzcNCit9Ow0KKw0KK3ZvaWQgYWRjX3RpbWVyX3RpY2sodm9pZCk7DQorc3RhdGljIHZvaWQgYWRjX3BkZF9wcm9jZXNzKHZvaWQpOw0KK3N0YXRpYyB2b2lkIHRpbWVyNF9pbml0KHZvaWQpOw0KKw0KK3N0YXRpYyB2b2lkIGFkY19ncGlvX2luaXQodm9pZCkNCit7DQorICBHUElPX0luaXRUeXBlRGVmIEdQSU9fSW5pdFN0cnVjdHVyZTsNCisNCisgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfR1BJT0EgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfQVBCMlBlcmlwaF9HUElPQiB8DQorICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19BUEIyUGVyaXBoX0dQSU9DLCBFTkFCTEUpOw0KKw0KKyAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BSU47DQorDQorICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19QaW4gPSBHUElPX1Bpbl8wIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzEgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fMiB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl8zIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzQgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fNzsNCisgIEdQSU9fSW5pdChHUElPQSwgJkdQSU9fSW5pdFN0cnVjdHVyZSk7DQorDQorICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19QaW4gPSBHUElPX1Bpbl8wIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzE7DQorICBHUElPX0luaXQoR1BJT0IsICZHUElPX0luaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fUGluID0gR1BJT19QaW5fMCB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl8xIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzIgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QaW5fMyB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1Bpbl80IHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUGluXzU7DQorICBHUElPX0luaXQoR1BJT0MsICZHUElPX0luaXRTdHJ1Y3R1cmUpOw0KK30NCisNCitzdGF0aWMgdm9pZCBhZGNfY2hhbm5lbHNfaW5pdCh2b2lkKQ0KK3sNCisgIEFEQ19Jbml0VHlwZURlZiBBRENfSW5pdFN0cnVjdHVyZTsNCisNCisgIFJDQ19BRENDTEtDb25maWcoUkNDX1BDTEsyX0RpdjYpOw0KKyAgUkNDX0FQQjJQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMlBlcmlwaF9BREMxLCBFTkFCTEUpOw0KKw0KKyAgQURDX0luaXRTdHJ1Y3R1cmUuQURDX01vZGUgPSBBRENfTW9kZV9JbmRlcGVuZGVudDsNCisgIEFEQ19Jbml0U3RydWN0dXJlLkFEQ19TY2FuQ29udk1vZGUgPSBESVNBQkxFOw0KKyAgQURDX0luaXRTdHJ1Y3R1cmUuQURDX0NvbnRpbnVvdXNDb252TW9kZSA9IERJU0FCTEU7DQorICBBRENfSW5pdFN0cnVjdHVyZS5BRENfRXh0ZXJuYWxUcmlnQ29udiA9IEFEQ19FeHRlcm5hbFRyaWdDb252X05vbmU7DQorICBBRENfSW5pdFN0cnVjdHVyZS5BRENfRGF0YUFsaWduID0gQURDX0RhdGFBbGlnbl9SaWdodDsNCisgIEFEQ19Jbml0U3RydWN0dXJlLkFEQ19OYnJPZkNoYW5uZWwgPSAxOw0KKyAgQURDX0luaXQoQURDMSwgJkFEQ19Jbml0U3RydWN0dXJlKTsNCisgIEFEQzEtPkNSMiB8PSAweDAwMTAwMDA7DQorDQorICAvL2tleSBhZGMgMSAtIDEyDQorICBjaF9pZHggPSAwOw0KKyAgQURDX1JlZ3VsYXJDaGFubmVsQ29uZmlnKEFEQzEsIGFkY19jaF90YmxbY2hfaWR4XSwgMSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfU2FtcGxlVGltZV8yMzlDeWNsZXM1KTsNCisgIEFEQ19DbWQoQURDMSwgRU5BQkxFKTsNCisNCisgIEFEQ19SZXNldENhbGlicmF0aW9uKEFEQzEpOw0KKyAgd2hpbGUoQURDX0dldFJlc2V0Q2FsaWJyYXRpb25TdGF0dXMoQURDMSkpOw0KKw0KKyAgQURDX1N0YXJ0Q2FsaWJyYXRpb24oQURDMSk7DQorICB3aGlsZShBRENfR2V0Q2FsaWJyYXRpb25TdGF0dXMoQURDMSkpOw0KKyAgQURDX1NvZnR3YXJlU3RhcnRDb252Q21kKEFEQzEsIEVOQUJMRSk7DQorICBwX2FkY190aW1lcl90aWNrID0gYWRjX3RpbWVyX3RpY2s7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGFkY19kbWFfaW5pdCh2b2lkKQ0KK3sNCit9DQorDQorc3RhdGljIHZvaWQgYWRjX252aWNfaW5pdCh2b2lkKQ0KK3sNCisNCit9DQorDQorc3RhdGljIHZvaWQgZGFjX2luaXQodm9pZCkNCit7DQorICBHUElPX0luaXRUeXBlRGVmIEdQSU9fSW5pdFN0cnVjdHVyZTsNCisNCisgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfR1BJT0EsIEVOQUJMRSk7DQorDQorICBEQUNfRGVJbml0KCk7DQorDQorICBHUElPX0luaXRTdHJ1Y3R1cmUuR1BJT19Nb2RlID0gR1BJT19Nb2RlX0FJTjsNCisNCisgIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX1BpbiA9IEdQSU9fUGluXzU7DQorICBHUElPX0luaXQoR1BJT0EsICZHUElPX0luaXRTdHJ1Y3R1cmUpOw0KKw0KKw0KKyAgUkNDX0FQQjFQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMVBlcmlwaF9EQUMsIEVOQUJMRSk7DQorDQorICBEQUMtPkNSIHw9IDB4MDAwMTAwMDA7DQorICBEQUNfU2V0Q2hhbm5lbDJEYXRhKERBQ19BbGlnbl8xMmJfUiwgZGFjX3BhcmEudmFsWzBdKTsNCit9DQorDQorLyoqDQorKirQo9e8sLS8/A0KKyoqLw0KK3ZvaWQgY2FsaWJyYXRlX2tleSh1aW50OCBjYWNoZV9lbmFibGUpDQorew0KKyAgY29uc3QgdWludDggbGVuID0gc2l6ZW9mKGRhY19wYXJhKSArMjsNCisgIHVpbnQ4IGJ1ZltsZW5dOw0KKyAgaWYoY2FjaGVfZW5hYmxlKQ0KKyAgew0KKyAgICB1aW50OCBjcmNbMl07DQorICAgIHNwX2ZsYXNoX3JlYWQoQUREUl9LRVlfUEFSQSxidWYsbGVuKTsNCisgICAgc3BfcHJvdG9jb2xfY3JjKGJ1ZiAsbGVuIC0yLGNyYyk7DQorICAgIGlmKG1lbWNtcChidWYgK2xlbiAtMixjcmMsMikgPT0gMCkNCisgICAgew0KKyAgICAgIG1lbWNweSgodWludDgqKSZkYWNfcGFyYSxidWYsc2l6ZW9mKGRhY19wYXJhKSk7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorICB9DQorICBkYWNfcGFyYV9hdXRvX3NldCgpOw0KKyAgbWVtY3B5KGJ1ZiwodWludDgqKSZkYWNfcGFyYSxzaXplb2YoZGFjX3BhcmEpKTsNCisgIHNwX3Byb3RvY29sX2NyYyhidWYsbGVuIC0yLGJ1ZiArbGVuIC0yKTsNCisgIHNwX2ZsYXNoX2VyYXNlKEFERFJfS0VZX1BBUkEpOw0KKyAgc3BfZmxhc2hfd3JpdGUoQUREUl9LRVlfUEFSQSxidWYsbGVuKTsNCit9DQorDQordm9pZCBhZGNfaW5pdCh2b2lkKQ0KK3sNCisgIHRpbWVyNF9pbml0KCk7DQorICBkYWNfaW5pdCgpOw0KKyAgYWRjX2dwaW9faW5pdCgpOw0KKyAgYWRjX252aWNfaW5pdCgpOw0KKyAgYWRjX2RtYV9pbml0KCk7DQorICBhZGNfY2hhbm5lbHNfaW5pdCgpOw0KKyAgY2FsaWJyYXRlX2tleSgxKTsNCit9DQorDQordWludDE2X3QgYWRjX2dldF92YWwodWludDhfdCBjaCkNCit7DQorICBpZihjaDxBRENfTUFYX0NIX05VTSkNCisgIHsNCisgICAgcmV0dXJuIGFkY19idWZmW2NoXTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIDA7DQorICB9DQorfQ0KKw0KK3ZvaWQgYWRjX3RpbWVyX3RpY2sodm9pZCkNCit7DQorICBhZGNfdGltZXIgKys7DQorICBpZihhZGNfdGltZXI+PTgpDQorICB7DQorICAgIGFkY190aW1lciA9IDA7DQorICB9DQorICBpZihhZGNfdGltZXI9PTApDQorICB7DQorICAgIGFkY19idWZmW2NoX2lkeF0gPSBBRENfR2V0Q29udmVyc2lvblZhbHVlKEFEQzEpOw0KKyAgICBjaF9pZHggKys7DQorICAgIGlmKGNoX2lkeCA+PSBBRENfTUFYX0NIX05VTSkNCisgICAgew0KKyAgICAgIGtleXBhZF9zY2FuKCk7DQorICAgICAgY2hfaWR4ID0gMDsNCisgICAgICBhZGNfcGRkX3Byb2Nlc3MoKTsgICAvL7zssunKx7fxtfS15w0KKyAgICB9DQorDQorICAgIGlmKGNoX2lkeCA8IDEyKQ0KKyAgICB7DQorICAgICAgREFDX1NldENoYW5uZWwyRGF0YShEQUNfQWxpZ25fMTJiX1IsIGRhY19wYXJhLnZhbFtjaF9pZHhdKTsNCisgICAgfQ0KKyAgfQ0KKyAgZWxzZSBpZihhZGNfdGltZXIgPT0gNykNCisgIHsNCisgICAgQURDX1JlZ3VsYXJDaGFubmVsQ29uZmlnKEFEQzEsIGFkY19jaF90YmxbY2hfaWR4XSwgMSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TYW1wbGVUaW1lXzIzOUN5Y2xlczUpOw0KKyAgICBBRENfU29mdHdhcmVTdGFydENvbnZDbWQoQURDMSwgRU5BQkxFKTsNCisgIH0NCit9DQorDQordm9pZCBhZGNfdGltZXJfdGFzayh2b2lkKQ0KK3sNCisgIGlmKHBfYWRjX3RpbWVyX3RpY2spDQorICB7DQorICAgIC8v0tG+rbP1yry7r83qs8kNCisgICAgcF9hZGNfdGltZXJfdGljaygpOw0KKyAgfQ0KK30NCisNCit2dTggUFZERmlsdGVyQ250ID0gMDsNCitzdGF0aWMgdm9pZCBhZGNfcGRkX3Byb2Nlc3Modm9pZCkNCit7DQorICBzdGF0aWMgdTE2IFByZUFEQ1ZhbHVlID0gUEREVGhyZXNob2RfQURDVmFsOw0KKw0KKyAgYWRjX3ZhbF92ZGQgPSAoYWRjX3ZhbF92ZGQqODB1bCArIGFkY19nZXRfdmFsKDEyKSoyMCkvMTAwOw0KKyAgaWYoYWRjX3ZhbF92ZGQgPCBQcmVBRENWYWx1ZSkNCisgIHsNCisgICAgaWYoUFZERmlsdGVyQ250IDwgMjApDQorICAgIHsNCisgICAgICBQVkRGaWx0ZXJDbnQgKys7DQorICAgIH0NCisgICAgUHJlQURDVmFsdWUgPWFkY192YWxfdmRkOw0KKyAgfQ0KKyAgZWxzZSBpZihhZGNfdmFsX3ZkZCA+IFByZUFEQ1ZhbHVlKQ0KKyAgew0KKyAgICBQVkRGaWx0ZXJDbnQgPSAwOw0KKyAgICBQcmVBRENWYWx1ZSA9IFBERFRocmVzaG9kX0FEQ1ZhbDsNCisgIH0NCisgIC8qIGFkY192YWxfdmRkID0gUHJlQURDVmFsdWUgy7XD92FkY192YWxfdmRkDQorICAgICDOtM3qs8m4/NDCo6y78rXn0bnOtLzM0Pi1+MLko6yyu9f2yM66zrSmwO0NCisgIGVsc2UNCisgIHsNCisNCisgIH0NCisgICovDQorDQorICBpZigoUFZERmlsdGVyQ250ID4gMTApKSAvLyAmJiAoYWRjX3ZhbF92ZGQgPCBSZXNldF9BRENWYWwpKQ0KKyAgew0KKyAgICAvL7nYsdW2wb+oDQorICAgIC8qCQlNMV9IYXJkUHdyRHduKCk7DQorDQorICAgIAkJLy+157avx/K3p7nYt6e0psDtDQorICAgIAkJR1BJT19SZXNldEJpdHMoR1BJT0MsIEdQSU9fUGluXzkpOw0KKyAgICAJCUdQSU9fU2V0Qml0cyhHUElPQSwgR1BJT19QaW5fOSk7DQorDQorICAgIAkJLy+4tM67DQorICAgIAkJSVdER19Xcml0ZUFjY2Vzc0NtZChJV0RHX1dyaXRlQWNjZXNzX0VuYWJsZSkgOw0KKyAgICAJCUlXREdfU2V0UHJlc2NhbGVyKElXREdfUHJlc2NhbGVyXzEyOCkgOw0KKyAgICAJCUlXREdfU2V0UmVsb2FkKDE1MDApIDsgICAgICAgICAgICAgICAvL8no1sO/tMPFube4tM67yrG85DZTo6y157v6t6fE3M3qyKu52LHVDQorICAgIAkJSVdER19SZWxvYWRDb3VudGVyKCk7DQorICAgIAkJSVdER19FbmFibGUoKTsNCisgICAgCQl3aGlsZSgxKTsgICovDQorICB9DQorfQ0KKw0KK3ZvaWQgZGFjX3BhcmFfYXV0b19zZXQodm9pZCkNCit7DQorICB1aW50OF90IGk7DQorICB1aW50MTZfdCBkYWNfdmFsID0gNDA5NTsNCisgIHVpbnQ4X3QgIGFkal9mbGFnc1sxMl07DQorDQorICBwX2FkY190aW1lcl90aWNrID0gMDsNCisgIGRlbGF5X21zKDEwKTsNCisgIG1lbXNldChhZGpfZmxhZ3MsIDEsIHNpemVvZihhZGpfZmxhZ3MpKTsNCisgIHdoaWxlKChkYWNfdmFsKjMzMDB1bCo0Ni80MDk1MCkgPiAyMDAwKSAgICAgLy/Uy7fFyuSz9rK7tc3T2jJWDQorICB7DQorICAgIGZvcihpPTA7IGk8MTI7IGkrKykNCisgICAgew0KKyAgICAgIGlmKGFkal9mbGFnc1tpXSkNCisgICAgICB7DQorICAgICAgICBkYWNfcGFyYS52YWxbaV0gPSBkYWNfdmFsOw0KKyAgICAgIH0NCisgICAgICBEQUNfU2V0Q2hhbm5lbDJEYXRhKERBQ19BbGlnbl8xMmJfUiwgZGFjX3ZhbCk7DQorICAgICAgZGVsYXlfbXMoNik7DQorICAgICAgQURDX1JlZ3VsYXJDaGFubmVsQ29uZmlnKEFEQzEsIGFkY19jaF90YmxbaV0sIDEsIEFEQ19TYW1wbGVUaW1lXzIzOUN5Y2xlczUpOw0KKyAgICAgIEFEQ19Tb2Z0d2FyZVN0YXJ0Q29udkNtZChBREMxLCBFTkFCTEUpOw0KKyAgICAgIGRlbGF5X21zKDIpOw0KKyAgICAgIGlmKEFEQ19HZXRDb252ZXJzaW9uVmFsdWUoQURDMSkgPCAzMDB1bCkNCisgICAgICB7DQorICAgICAgICBhZGpfZmxhZ3NbaV0gPSAwOw0KKyAgICAgIH0NCisgICAgICBlbHNlDQorICAgICAgew0KKyAgICAgICAgYWRqX2ZsYWdzW2ldID0gMTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgaWYobWVtX3Rlc3QoYWRqX2ZsYWdzLCAwLCBzaXplb2YoYWRqX2ZsYWdzKSkgPT0gMCkNCisgICAgew0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIGRhY192YWwgLT0gMTI0Ow0KKyAgfQ0KKyAgcF9hZGNfdGltZXJfdGljayA9IGFkY190aW1lcl90aWNrOw0KK30NCisNCitzdGF0aWMgdm9pZCB0aW1lcjRfaW5pdCh2b2lkKQ0KK3sNCisgIHVpbnQxNl90IFByZXNjYWxlclZhbHVlID0gMDsNCisgIFRJTV9UaW1lQmFzZUluaXRUeXBlRGVmICBUSU1fVGltZUJhc2VTdHJ1Y3R1cmU7DQorICBUSU1fT0NJbml0VHlwZURlZiAgVElNX09DSW5pdFN0cnVjdHVyZTsNCisNCisgIEdQSU9fSW5pdFR5cGVEZWYgR1BJT19Jbml0U3RydWN0dXJlOw0KKw0KKyAgLyogVElNNCBjbG9jayBlbmFibGUgKi8NCisgIFJDQ19BUEIxUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjFQZXJpcGhfVElNNCwgRU5BQkxFKTsNCisNCisgIC8qIEdQSU9BIGFuZCBHUElPQiBjbG9jayBlbmFibGUgKi8NCisgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfR1BJT0J8UkNDX0FQQjJQZXJpcGhfQUZJTywgRU5BQkxFKTsNCisNCisgIC8qR1BJT0IgQ29uZmlndXJhdGlvbjogVElNNCBjaGFubmVsMyBhbmQgNCAqLw0KKyAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fUGluID0gIEdQSU9fUGluXzggfCBHUElPX1Bpbl85Ow0KKyAgR1BJT19Jbml0U3RydWN0dXJlLkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BRl9QUDsNCisgIEdQSU9fSW5pdFN0cnVjdHVyZS5HUElPX1NwZWVkID0gR1BJT19TcGVlZF81ME1IejsNCisgIEdQSU9fSW5pdChHUElPQiwgJkdQSU9fSW5pdFN0cnVjdHVyZSk7DQorDQorICBQcmVzY2FsZXJWYWx1ZSA9ICh1aW50MTZfdCkoU3lzdGVtQ29yZUNsb2NrIC8gNzIwMDAwMDApIC0gMTsNCisgIC8qIFRpbWUgYmFzZSBjb25maWd1cmF0aW9uICovDQorICBUSU1fVGltZUJhc2VTdHJ1Y3R1cmUuVElNX1BlcmlvZCA9IDcxOTsNCisgIFRJTV9UaW1lQmFzZVN0cnVjdHVyZS5USU1fUHJlc2NhbGVyID0gUHJlc2NhbGVyVmFsdWU7DQorICBUSU1fVGltZUJhc2VTdHJ1Y3R1cmUuVElNX0Nsb2NrRGl2aXNpb24gPSAwOw0KKyAgVElNX1RpbWVCYXNlU3RydWN0dXJlLlRJTV9Db3VudGVyTW9kZSA9IFRJTV9Db3VudGVyTW9kZV9VcDsNCisNCisgIFRJTV9UaW1lQmFzZUluaXQoVElNNCwgJlRJTV9UaW1lQmFzZVN0cnVjdHVyZSk7DQorDQorICAvKiBQV00xIE1vZGUgY29uZmlndXJhdGlvbjogQ2hhbm5lbDEgKi8NCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX09DTW9kZSA9IFRJTV9PQ01vZGVfUFdNMTsNCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX091dHB1dFN0YXRlID0gVElNX091dHB1dFN0YXRlX0VuYWJsZTsNCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX1B1bHNlID0gMzU5Ow0KKyAgVElNX09DSW5pdFN0cnVjdHVyZS5USU1fT0NQb2xhcml0eSA9IFRJTV9PQ1BvbGFyaXR5X0hpZ2g7DQorICBUSU1fT0MzSW5pdChUSU00LCAmVElNX09DSW5pdFN0cnVjdHVyZSk7DQorICBUSU1fT0MzUHJlbG9hZENvbmZpZyhUSU00LCBUSU1fT0NQcmVsb2FkX0VuYWJsZSk7DQorDQorICAvKiBQV00xIE1vZGUgY29uZmlndXJhdGlvbjogQ2hhbm5lbDIgKi8NCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX09DTW9kZSA9IFRJTV9PQ01vZGVfUFdNMTsNCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX091dHB1dFN0YXRlID0gVElNX091dHB1dFN0YXRlX0VuYWJsZTsNCisgIFRJTV9PQ0luaXRTdHJ1Y3R1cmUuVElNX1B1bHNlID0gMzU5Ow0KKyAgVElNX09DSW5pdFN0cnVjdHVyZS5USU1fT0NQb2xhcml0eSA9IFRJTV9PQ1BvbGFyaXR5X0xvdzsNCisgIFRJTV9PQzRJbml0KFRJTTQsICZUSU1fT0NJbml0U3RydWN0dXJlKTsNCisgIFRJTV9PQzRQcmVsb2FkQ29uZmlnKFRJTTQsIFRJTV9PQ1ByZWxvYWRfRW5hYmxlKTsNCisNCisgIFRJTV9BUlJQcmVsb2FkQ29uZmlnKFRJTTQsIEVOQUJMRSk7DQorDQorICAvKiBUSU00IGVuYWJsZSBjb3VudGVyICovDQorICBUSU1fQ21kKFRJTTQsIEVOQUJMRSk7DQorfQ0KZGlmZiAtLWdpdCBhL3N5c19ody9kcnZfYWRjLmggYi9zeXNfaHcvZHJ2X2FkYy5oCmluZGV4IDlkZTRjNWQuLmVkYmVjOWIgMTAwNjQ0Ci0tLSBhL3N5c19ody9kcnZfYWRjLmgKKysrIGIvc3lzX2h3L2Rydl9hZGMuaApAQCAtMSwyOSArMSwyNCBAQAotI2lmbmRlZiBfX2FkY19oX18KLSNkZWZpbmUgX19hZGNfaF9fCi0KLSNpbmNsdWRlICJzdG0zMmYxMHguaCIKLQotI2RlZmluZSBBRENfTUFYX0NIX05VTSAgICAgKDE1dSkKLQotI3ByYWdtYSBwYWNrKHB1c2gpCi0jcHJhZ21hIHBhY2soMSkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLQl2b2xhdGlsZSB1aW50MTZfdCB2YWxbMTJdOwotCXVpbnQxNl90IGNyYzsKLX0gZGFjX3BhcmFfdDsKLQotI3ByYWdtYSBwYWNrKHBvcCkKLQotZXh0ZXJuIGRhY19wYXJhX3QgZGFjX3BhcmE7Ci0KLWV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCBhZGNfYnVmZltBRENfTUFYX0NIX05VTV07Ci0KLWV4dGVybiB2b2lkIGFkY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYWRjX3RpbWVyX3Rhc2sodm9pZCk7Ci1leHRlcm4gdWludDE2X3QgYWRjX2dldF92YWwodWludDhfdCBjaCk7Ci1leHRlcm4gdm9pZCBkYWNfcGFyYV9hdXRvX3NldCh2b2lkKTsKLWV4dGVybiB2b2lkIGNhbGlicmF0ZV9rZXkodWludDhfdCBmb3JjZSk7Ci0KLSNlbmRpZgorI2lmbmRlZiBfX2FkY19oX18NCisjZGVmaW5lIF9fYWRjX2hfXw0KKw0KKyNpbmNsdWRlICJzdG0zMmYxMHguaCINCisNCisjZGVmaW5lIEFEQ19NQVhfQ0hfTlVNICAgICAoMTR1KQ0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdm9sYXRpbGUgdWludDE2X3QgdmFsWzEyXTsNCisgIHVpbnQxNl90IGNyYzsNCit9IGRhY19wYXJhX3Q7DQorDQorZXh0ZXJuIGRhY19wYXJhX3QgZGFjX3BhcmE7DQorDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IGFkY19idWZmW0FEQ19NQVhfQ0hfTlVNXTsNCisNCitleHRlcm4gdm9pZCBhZGNfaW5pdCh2b2lkKTsNCitleHRlcm4gdm9pZCBhZGNfdGltZXJfdGFzayh2b2lkKTsNCitleHRlcm4gdWludDE2X3QgYWRjX2dldF92YWwodWludDhfdCBjaCk7DQorZXh0ZXJuIHZvaWQgZGFjX3BhcmFfYXV0b19zZXQodm9pZCk7DQorZXh0ZXJuIHZvaWQgY2FsaWJyYXRlX2tleSh1aW50OF90IGZvcmNlKTsNCisNCisjZW5kaWYNCg==