ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKaW5kZXggYTg2ZjUwMy4uZWVjZDkwMSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKQEAgLTg0LDkgKzg0LDkgQEAKICAgICB7CiAgICAgICBjYXJkLT53YXRlcmxpbWl0ID0gZmllbGQudmFsLmludHZhbDsKICAgICB9Ci0gICAgZWxzZSBpZihJU19LRVkoUEtfQklOX0JJTExOTyxmaWVsZC5rZXkpKQorICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9DT0JJTExOTyxmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIE1FTUNQWShjYXJkLT5iaWxsbm8sIGZpZWxkLnZhbC5iaW52YWwsIGZpZWxkLnN0cmxlbik7CisgICAgICBjYXJkLT5jb2JpbGxubyA9IGZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9GRUVBTU9VTlQsZmllbGQua2V5KSkKICAgICB7CkBAIC0yMTUsOSArMjE1LDkgQEAKICAgICB7CiAgICAgICBNRU1DUFkoY2FyZC0+cXJjb2RlLnFyY29kZV91cmwsIGZpZWxkLnZhbC5zdHJ2YWwsIGZpZWxkLnN0cmxlbik7CiAgICAgfQotICAgIGVsc2UgaWYoSVNfS0VZKFBLX0JJTl9CSUxMTk8sIGZpZWxkLmtleSkpCisgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIE1FTUNQWShjYXJkLT5iaWxsbm8sIGZpZWxkLnZhbC5iaW52YWwsIGZpZWxkLnN0cmxlbik7CisgICAgICBjYXJkLT5jb2JpbGxubyA9IGZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9WQUlMRFRJTUUsIGZpZWxkLmtleSkpCiAgICAgewpAQCAtMjcwLDkgKzI3MCw5IEBACiAgIHdoaWxlKHNpemUtLSA+IDApCiAgIHsKICAgICBzcF91bnBhY2tfdmFsdWUoJnVucGFjaywmZmllbGQpOwotICAgIGlmKElTX0tFWShQS19CSU5fQklMTE5PLCBmaWVsZC5rZXkpKQorICAgIGlmKElTX0tFWShQS19JTlRfQ09CSUxMTk8sIGZpZWxkLmtleSkpCiAgICAgewotICAgICAgTUVNQ1BZKGNhcmQtPmJpbGxubywgZmllbGQudmFsLmJpbnZhbCwgZmllbGQuc3RybGVuKTsKKyAgICAgIGNhcmQtPmNvYmlsbG5vID0gZmllbGQudmFsLmludHZhbDsKICAgICB9CiAgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX0FVVEhTVEFUVVMsIGZpZWxkLmtleSkpCiAgICAgewpAQCAtMzEwLDcgKzMxMCw3IEBACiAgIGN3X3BhY2tfbWFwX3NpemUoJnBhY2ssIDIpOwogCiAgIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0RFVlBIWUlELCBwb3MtPmRldnBoeWlkLCA0KTsKLSAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fQklMTE5PLCBjYXJkLT5iaWxsbm8sIHNpemVvZihjYXJkLT5iaWxsbm8pKTsKKyAgc3BfcGFja19wdXRfaW50KCZwYWNrLCBQS19JTlRfQ09CSUxMTk8sIGNhcmQtPmNvYmlsbG5vKTsKIAogICByZXEuZGF0YWxlbiArPSBzcF9wYWNrX2xlbmd0aCgmcGFjayk7CiAgIHNwX3VzYXJ0X3NlbmQocG9zLCAmcmVxKTsKQEAgLTMxOCwxNCArMzE4LDE0IEBACiB9CiAKIC8vwffLrsnPtKsKLXN0YXRpYyB1aW50OCB0cmFuc2R0bF9hY2NvdW50X2JpbExub1sxMF07CitzdGF0aWMgdWludDMyIHRyYW5zZHRsX2FjY291bnRfY29iaWxMbm8gPSAwOwogc3RhdGljIHVpbnQxNiBzcF9hc3luY191cGxvYWRfdHJhbnNkdGwoc3BfcG9zX3QqIHBvcywgc3BfdHJhbnNkdGxfdCogdHJhbnNkdGwpCiB7CiAgIHVpbnQ4IGNyY1syXTsKICAgY3dfcGFja19jb250ZXh0IHBhY2s7CiAgIHNwX3Byb3RvY29sX3JlcXVlc3RfdCByZXE7CiAKLSAgTUVNQ1BZKHRyYW5zZHRsX2FjY291bnRfYmlsTG5vLCB0cmFuc2R0bC0+YmlsbG5vLCBzaXplb2YodHJhbnNkdGwtPmJpbGxubykpOworICB0cmFuc2R0bF9hY2NvdW50X2NvYmlsTG5vID0gdHJhbnNkdGwtPmNvYmlsbG5vOwogICBzcF9wcm90b2NvbF9yZXFfaW5pdCgmcmVxLCBTUF9DTURfVFJBTlNEVExfQUNDT1VOVCk7CiAgIHNwX3BhY2tfaW5pdCgmcGFjayxyZXEuZGF0YSxzaXplb2YocmVxLmRhdGEpKTsKICAgY3dfcGFja19tYXBfc2l6ZSgmcGFjaywxMCk7CkBAIC0zMzMsNyArMzMzLDcgQEAKICAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fREVWUEhZSUQsIHRyYW5zZHRsLT5kZXZwaHlpZCw0KTsKICAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fVFJBTlNEQVRFLCB0cmFuc2R0bC0+dHJhbnNkYXRlLDMpOwogICBzcF9wYWNrX3B1dF9iaW4oJnBhY2ssIFBLX0JJTl9UUkFOU1RJTUUsIHRyYW5zZHRsLT50cmFuc3RpbWUsMyk7Ci0gIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0JJTExOTywgdHJhbnNkdGwtPmJpbGxubywgc2l6ZW9mKHRyYW5zZHRsLT5iaWxsbm8pKTsKKyAgc3BfcGFja19wdXRfaW50KCZwYWNrLCBQS19JTlRfQ09CSUxMTk8sIHRyYW5zZHRsLT5jb2JpbGxubyk7CiAgIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0NBUkRQSFlJRCwgdHJhbnNkdGwtPmNhcmRwaHlpZCwKICAgICAgICAgICAgICAgICAgIHNpemVvZih0cmFuc2R0bC0+Y2FyZHBoeWlkKSk7CiAgIHNwX3BhY2tfcHV0X2ludCgmcGFjaywgUEtfSU5UX1RSQU5TV0FZLCB0cmFuc2R0bC0+dHJhbnN3YXkpOwpAQCAtMzYyLDEwICszNjIsOSBAQAogICAgIHdoaWxlKHNpemUtLSA+IDApCiAgICAgewogICAgICAgc3BfdW5wYWNrX3ZhbHVlKCZ1bnBhY2ssJmZpZWxkKTsKLSAgICAgIGlmKElTX0tFWShQS19CSU5fQklMTE5PLGZpZWxkLmtleSkpCisgICAgICBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLGZpZWxkLmtleSkpCiAgICAgICB7Ci0gICAgICAgIGlmKE1FTUNNUChmaWVsZC52YWwuYmludmFsLCB0cmFuc2R0bF9hY2NvdW50X2JpbExubywKLSAgICAgICAgICAgICAgICAgIHNpemVvZih0cmFuc2R0bF9hY2NvdW50X2JpbExubykpID09IDApCisgICAgICAgIGlmKGZpZWxkLnZhbC5pbnR2YWwgPT0gdHJhbnNkdGxfYWNjb3VudF9jb2JpbExubykKICAgICAgICAgewogICAgICAgICAgIHBvcy0+dW5jb25maXJtX3RyYW5zZHRsLnRyYW5zYWRkcis9IHNpemVvZihzcF90cmFuc2R0bF90KTsKICAgICAgICAgICBpZihBRERSX1RSQU5TRFRMX0VORCA8PSBwb3MtPnVuY29uZmlybV90cmFuc2R0bC50cmFuc2FkZHIpCkBAIC01NTksMTcgKzU1OCwyMyBAQAogICBpZih0aWNrZXIgLSBwb3MtPmxhc3RfY29tbV9zdGF0dXMuc2VuZHRpbWUgPiBDT01NX1dBSVRfVElNRSkKICAgewogICAgIGlmKHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPT0gMCB8fCBwb3MtPmRldmxvZ2luLmxvZ2luX2ZsYWcgPT0gMAotICAgICAgICB8fCAodGlja2VyIC0gcG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlcikgPiBERUxBWV9USU1FNjBzKjYwKjI0KQorCQl8fCB0aWNrZXIgLSBwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID4gREVMQVlfVElNRTE1cyoyKQogICAgIHsKLSAgICAgIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPSB0aWNrZXI7Ci0gICAgICBzcF9hc3luY19lcXVpcG1lbnRfbG9naW4ocG9zKTsKKyAgICAgIGlmKHRpY2tlciAtIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPiBERUxBWV9USU1FMTVzKjIpCisgICAgICB7CisgICAgICAgIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPSB0aWNrZXI7CisgICAgICAgIHNwX2FzeW5jX2VxdWlwbWVudF9sb2dpbihwb3MpOworICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmKHRpY2tlciA8IHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlcgogICAgICAgICAgICAgfHwgcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID09IDAKLSAgICAgICAgICAgIHx8ICh0aWNrZXIgLSBwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIpID4gREVMQVlfVElNRTYwcyoyKQorICAgICAgICAgICAgfHwgdGlja2VyIC0gcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID4gREVMQVlfVElNRTE1cykKICAgICB7Ci0gICAgICBwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIgPSB0aWNrZXI7Ci0gICAgICBzcF9hc3luY19oZWFydGJlYXQocG9zKTsKKyAgICAgIGlmKHRpY2tlciAtIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA+IERFTEFZX1RJTUUxNXMpCisgICAgICB7CisgICAgICAgIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA9IHRpY2tlcjsKKyAgICAgICAgc3BfYXN5bmNfaGVhcnRiZWF0KHBvcyk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuaCBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCmluZGV4IGI4ZGFmNzcuLmRhNDIyZjMgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCkBAIC02NCw3ICs2NCw3IEBACiAjZGVmaW5lIFBLX0lOVF9XQVRFUlNUQVRVUyAgCQkiMSIKICNkZWZpbmUgUEtfSU5UX1dBVEVSTVVDSCAgCQkJIjIiCiAKLSNkZWZpbmUgUEtfQklOX0JJTExOTyAJCQkJIjMiCisjZGVmaW5lIFBLX0lOVF9DT0JJTExOTyAJCQkiMyIKICNkZWZpbmUgUEtfSU5UX1RSQU5TV0FZIAkJCSI0IgogI2RlZmluZSBQS19JTlRfVU5UUkFOU0NPTlNUIAkJIjUiCiAjZGVmaW5lIFBLX0JJTl9ERVZJQ0VLRVkgCQkJIjYiCmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uZmlnLmggYi9zdXB3aXNkb20vc3BfY29uZmlnLmgKaW5kZXggODFmNDE0MC4uYjU3YTA1YiAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbmZpZy5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb25maWcuaApAQCAtMTAxLDE0ICsxMDEsMTQgQEAKICAgdWludDggZGV2cGh5aWRbNF07CS8vyeixuLHgusUKICAgdWludDggdHJhbnNkYXRlWzNdOwkvL1lZRERNTbjxyr3I1cbaCiAgIHVpbnQ4IHRyYW5zdGltZVszXTsKLSAgdWludDggYmlsbG5vWzEwXTsJCS8vvbvS17aptaWx4LrFCisgIHVpbnQzMiBjb2JpbGxubzsJCS8vvbvS17aptaWx4LrFCiAgIHVpbnQ4IGNhcmRwaHlpZFs0XTsJLy+/qM7vwO1pZAogICB1aW50OCB0cmFuc3dheTsJCS8vvbvS17e9yr2jrDAts/XKvKOsMS3Lor+oo6wyLcmowusKICAgdWludDggYW1vdW50OwkJCS8vyrW8ytanuLa98LbuCiAgIHVpbnQ4IHBhaWRBbW91bnQ7CQkvL9LR1qe4tr3wtu6jrLWxysfPyL/bt9HEo8q9z8KjrLzHwrzS0danuLa1xL3wtu4KICAgdWludDggZmxvd3NlbnNvcnM7CS8vyrW8ysq508O8xsG/o6i1pc67o7qw2brByf2jqQogICB1aW50OCB0cmFuc3RhdHVzOwkJLy/B98uu17TMrKOsMC2z9cq8o6wxLbPJuaajrDItyqew3AotICB1aW50OCByZXZlcnNlWzFdOwkJLy/VvM67t/sKKyAgdWludDggcmV2ZXJzZVs3XTsJCS8v1bzOu7f7CiAgIHVpbnQ4IGNyY1syXTsgCQkvL2xlbj0zMgogfSBzcF90cmFuc2R0bF90OwogCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgdWludDggbGlua19zdGF0OwkJCS8vMC0twbTCt7mk1/fW0KOsMS0tLcG0wre/ydPDCiAgIHVpbnQ4IGxvYWRfcGFyYV9zdGF0dXM7CS8vMC0t1f2zo6OsITAtLbTtzvMKICAgdWludDggZGV2aWNlbm87Ci0gIHVpbnQ4IGxvY2FsX2RldmljZW5vOwkJCisgIHVpbnQ4IGxvY2FsX2RldmljZW5vOwogICB1aW50OCBkZXZwaHlpZFs0XTsKIAogICBzcF9jYXJkc3RhdGVfdCBjYXJkU3RhdGU7CkBAIC0yMzMsNyArMjMzLDcgQEAKICAgdWludDggZXhwaXJlZGF0ZVs0XTsKIAogICB1aW50OCB3YXRlcmxpbWl0OwkJLy+1pbTOs/bLrsnPz96jqDEwMG1so6kKLSAgdWludDggYmlsbG5vWzEwXTsJCS8vvbvS17aptaWx4LrFLEJDRMLrCisgIHVpbnQzMiBjb2JpbGxubzsJCS8vvbvS17aptaWx4LrFLEJDRMLrCiAgIHNwX3FyY29kZV90IHFyY29kZTsJLy+2/s6swusKICAgc3BfZmVlcGFyYV90IGZlZXBhcmE7CiB9IHNwX2NhcmRfdDsKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMgYi9zdXB3aXNkb20vc3BfY29uc3VtZS5jCmluZGV4IDcwM2MwMGMuLjQwNTJiZmQgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYwpAQCAtMzIsOCArMzIsOCBAQAogICAgIHBvcy0+cHVyY2hhc2UudXNlZF9udW0gPSAwOwogICAgIHJldHVybiAwOwogICB9Ci0gIC8vdXNlZGNvdW50ID0gc3BfZmxvd3NlbnNvcl9nZXRfY291bnQoKS9wb3MtPnN5c2NvbmYuZmxvd3NlbnNvcl91aW50OwotICB1c2VkY291bnQgPSBjb3VudC9wb3MtPnN5c2NvbmYuZmxvd3NlbnNvcl91bml0OworICB1c2VkY291bnQgPSBzcF9mbG93c2Vuc29yX2dldF9jb3VudCgpL3Bvcy0+c3lzY29uZi5mbG93c2Vuc29yX3VuaXQ7CisgIC8vdXNlZGNvdW50ID0gY291bnQvcG9zLT5zeXNjb25mLmZsb3dzZW5zb3JfdW5pdDsKICAgY291bnQrKzsKICAgaWYodXNlZGNvdW50IDwgcG9zLT5wdXJjaGFzZS5wYWlkX251bSkKICAgewpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2RhdGEuYyBiL3N1cHdpc2RvbS9zcF9kYXRhLmMKaW5kZXggMDIwYjQ3Ni4uYTZiYWQ0NSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2RhdGEuYworKysgYi9zdXB3aXNkb20vc3BfZGF0YS5jCkBAIC00LDggKzQsOCBAQAogI2luY2x1ZGUgInNwX2NvbnN0YW50LmgiCiAjaW5jbHVkZSAic3BfZGlzcGxheS5oIgogCi0jZGVmaW5lIHJlY29yZF9iZWhhbGZfbGVuIDI1Ci0jZGVmaW5lIHJlY29yZF9iZWxvd19sZW4gNworI2RlZmluZSByZWNvcmRfYmVoYWxmX2xlbiAxOQorI2RlZmluZSByZWNvcmRfYmVsb3dfbGVuIDEzCiAKIC8v0a27t7zHwrzDv9K7scrB98uuvMfCvLXEtdjWtwogc3RhdGljIHVpbnQxNiBzcF93cml0ZV9sYXN0X3JlY29yZChzcF9wb3NfdCogcG9zKQpAQCAtODMsNyArODMsNyBAQAogICBtZW1jcHkocmVjb3JkLT5kZXZwaHlpZCwgcG9zLT5kZXZwaHlpZCwgc2l6ZW9mKHBvcy0+ZGV2cGh5aWQpKTsKICAgbWVtY3B5KHJlY29yZC0+dHJhbnNkYXRlLCBjdGltZSwgMyk7CiAgIG1lbWNweShyZWNvcmQtPnRyYW5zdGltZSwgY3RpbWUrMywgMyk7Ci0gIG1lbWNweShyZWNvcmQtPmJpbGxubywgY2FyZC0+YmlsbG5vLCBzaXplb2YoY2FyZC0+YmlsbG5vKSk7CisgIHJlY29yZC0+Y29iaWxsbm8gPSBjYXJkLT5jb2JpbGxubzsKICAgbWVtY3B5KHJlY29yZC0+Y2FyZHBoeWlkLCBjYXJkLT5jYXJkcGh5aWQsIHNpemVvZihjYXJkLT5jYXJkcGh5aWQpKTsKICAgaWYocG9zLT5wYXltb2RlID09IFBBWU1PREVfUVJDT0RFKQogICB7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfZGlzcGxheS5jIGIvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYwppbmRleCBmYjA0MTdjLi42NzZlMjdkIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfZGlzcGxheS5jCisrKyBiL3N1cHdpc2RvbS9zcF9kaXNwbGF5LmMKQEAgLTEwMSwxNSArMTAxLDYgQEAKICAgewogICAgIE1FTUNQWShsYXN0X2N0aW1lLGN0aW1lLDYpOwogICAgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIkaw5rG+IixQUk9fVkVSU0lPTiwwKTsKLQkvKgotICAgIGlmKHBvcy0+c3lzY29uZi5yZWdpc3Rlcl9mbGFnKQotICAgIHsKLSAgICAgIGlmKHBvcy0+ZHluYW1pYy53c19jbGllbnRfc3RhdCkKLSAgICAgIHsKLSAgICAgICAgc2hvd19ob21lX3FyY29kZShwb3MtPmR5bmFtaWMucXJjb2RlX3VybCk7Ci0gICAgICB9Ci0gICAgfQotCSovCiAgIH0KIH0KIAo=