ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKaW5kZXggMjhkZmU4My4uMDgwYTYxZCAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKQEAgLTk4LDggKzk4LDcgQEAKICAgcmV0ID0gc3BfdXNhcnRfcmVjdihwb3MsICZyZXNwLCBDT01NX1dBSVRfVElNRSk7CiAgIGlmKHJldCkKICAgewotICAgIHJldCA9IFJDX0NBUkRfQVVUSEVOVElDQVRJT047Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gUkNfQ0FSRF9BVVRIRU5USUNBVElPTjsKICAgfQogCiAgIHNwX3VucGFja19pbml0KCZ1bnBhY2sscmVzcC5kYXRhLHJlc3AuZGF0YWxlbik7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYwppbmRleCBkOGU2YmIxLi5jZmE3NWI3IDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jCisrKyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlICJzcF9jb25zdW1lLmgiCiAjaW5jbHVkZSAic3BfY29tbXVuaWNhdGUuaCIKIAotc3RhdGljIHVpbnQzMiBjb3VudCA9IDA7CiBzdGF0aWMgdWludDggbWVudV9jbnQgPSAwOwogc3RhdGljIHVpbnQxNiBzcF9jYWxjX3BheWFtdF9ieV9mbG93c2Vuc29yKHNwX3Bvc190KiBwb3MsIHNwX2NhcmRfdCogY2FyZCkKIHsKQEAgLTM0LDggKzMzLDYgQEAKICAgICByZXR1cm4gMDsKICAgfQogICB1c2VkY291bnQgPSBzcF9mbG93c2Vuc29yX2dldF9jb3VudCgpL3Bvcy0+c3lzY29uZi5mbG93c2Vuc29yX3VuaXQ7Ci0gIC8vdXNlZGNvdW50ID0gY291bnQvcG9zLT5zeXNjb25mLmZsb3dzZW5zb3JfdW5pdDsKLSAgY291bnQrKzsKICAgaWYodXNlZGNvdW50IDwgcG9zLT5wdXJjaGFzZS5wYWlkX251bSkKICAgewogICAgIC8vw7vT0LTvtb2/27fRwffBvwpAQCAtMTc4LDIzICsxNzUsNiBAQAogICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVpbnQxNiBzcF9jYXJkX3ZhbGlkX2NoZWNrKGNvbnN0IHNwX2NhcmRfdCogY2FyZCkKLXsKLSAgdWludDggY3RpbWVbNl07Ci0gIC8qCi0gIGlmKGNhcmQtPmNhcmRubyA8IDEpCi0gIHsKLSAgICByZXR1cm4gUkNfQ0FSRE5PX0VYQ0VQVDsKLSAgfQotICAqLwotICBzcF9nZXRfYmNkdGltZShjdGltZSk7Ci0gIGlmKG1lbWNtcChjYXJkLT5leHBpcmVkYXRlICsxLCBjdGltZSwgMykgPCAwKQotICB7Ci0gICAgcmV0dXJuIFJDX0NBUkRfRVhQSVJFRDsKLSAgfQotICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHVpbnQxNiBzcF9jaGVja19kZXYoY29uc3Qgc3BfcG9zX3QqIHBvcykKIHsKICAgdWludDE2IHJldDsKQEAgLTIzOCw4ICsyMTgsNyBAQAogICByZXQgPSBzcF9jYXJkX3JlYWQoY2FyZCk7CiAgIGlmKHJldCkKICAgewotICAgIHJldCA9IFJDX0NBUkRfSU5WQUxJRDsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBSQ19DQVJEX0lOVkFMSUQ7CiAgIH0KICAgaWYocG9zLT5sb2FkX3BhcmFfc3RhdHVzKQogICB7CkBAIC0yNTYsMTYgKzIzNSwxMCBAQAogICAgIHJldHVybiByZXQ7CiAgIH0KIAotICByZXQgPSBzcF9jYXJkX3ZhbGlkX2NoZWNrKGNhcmQpOwotICBpZihyZXQpCi0gIHsKLSAgICByZXR1cm4gcmV0OwotICB9CiAgIHJldCA9IHNwX2NhcmRfYXV0aGVudGljYXRpb24ocG9zLCBjYXJkKTsKICAgaWYocmV0KQogICB7Ci0gICAgcmV0ID0gUkNfQ0FSRF9BVVRIRU5USUNBVElPTjsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBSQ19DQVJEX0FVVEhFTlRJQ0FUSU9OOwogICB9CiAgIHJldCA9IHNwX3ByZXBhcmVfYmVoYWxmX3RyYW5zZHRsKHBvcywgY2FyZCwgJnJlY29yZCk7CiAgIGlmKHJldCkKQEAgLTI5MCw3ICsyNjMsNiBAQAogc3RhdGljIHVpbnQxNiBkb193b3JrKHNwX3Bvc190KiBwb3MsIHNwX2NhcmRfdCogY2FyZCkKIHsKICAgdWludDE2IHJldDsKLSAgc3BfdmFsdmVfb24oKTsKICAgLy+8xsvjz/u30b3wtu4KICAgcmV0ID0gc3BfY2FsY19wYXlhbXRfYnlfZmxvd3NlbnNvcihwb3MsIGNhcmQpOwogICBpZihyZXQpCkBAIC0zMzUsNyArMzA3LDYgQEAKICAgfQogICBwb3MtPnBheW1vZGUgPSBQQVlNT0RFX0lOSVQ7CiAgIHBvcy0+c3lzY29uZi53b3JrX21vZGUgPSAwOwotICBjb3VudCA9IDA7CiAgIE1FTUNMRUFSKCZwb3MtPnB1cmNoYXNlLCBzaXplb2Yoc3BfcHVyY2hhc2VfdCkpOwogICBNRU1DTEVBUihjYXJkLCBzaXplb2Yoc3BfY2FyZF90KSk7CiAgIHJldHVybiAwOwpAQCAtMzY0LDcgKzMzNSw2IEBACiAgICAgc2hvd19lcnJvcihwb3MsIrLZ1/fKp7DcOiIsZXJyY29kZSk7CiAgICAgcG9zLT5wYXltb2RlID0gUEFZTU9ERV9JTklUOwogICAgIHBvcy0+c3lzY29uZi53b3JrX21vZGUgPSAwOwotICAgIGNvdW50ID0gMDsKICAgICBNRU1DTEVBUigmcG9zLT5wdXJjaGFzZSwgc2l6ZW9mKHNwX3B1cmNoYXNlX3QpKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2RhdGEuYyBiL3N1cHdpc2RvbS9zcF9kYXRhLmMKaW5kZXggYjA3NmMxNC4uZDhkNDBhNyAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2RhdGEuYworKysgYi9zdXB3aXNkb20vc3BfZGF0YS5jCkBAIC03NSw3ICs3NSw2IEBACiAvL8/7t9Gz9cq8u6+687TmtKLJz7Drsr+31sH3y66jrLfA1rnP+7fRyqew3M7ewffLrtDFz6IKIHVpbnQxNiBzcF9wcmVwYXJlX2JlaGFsZl90cmFuc2R0bChzcF9wb3NfdCogcG9zLCBzcF9jYXJkX3QqIGNhcmQsIHNwX3RyYW5zZHRsX3QqIHJlY29yZCkKIHsKLSAgdWludDggcmV0ID0gMDsKICAgdWludDggY3RpbWVbNl07CiAgIE1FTUNMRUFSKGN0aW1lLCBzaXplb2YoY3RpbWUpKTsKIApAQCAtOTMsOSArOTIsNyBAQAogICB7CiAgICAgcmVjb3JkLT50cmFuc3dheSA9IDE7CiAgIH0KLSAgcmV0ID0gc3Bfd3JpdGVfYmVoYWxmX3JlY29yZChwb3MsIHJlY29yZCk7Ci0gIGlmKHJldCkKLSAgICByZXR1cm4gcmV0OworICBzcF93cml0ZV9iZWhhbGZfcmVjb3JkKHBvcywgcmVjb3JkKTsKICAgcmV0dXJuIHNwX3dyaXRlX2xhc3RfcmVjb3JkKHBvcyk7CiB9CiAK