ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMWZmYWMxNS4uZDEzZTYxNSAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwyMCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjQzIiBkYXRlPSIyNi4wNC4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor1yBTU0kuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiB0aGUgU1NJLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy40MiIgZGF0ZT0iMjYuMDQuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBkOGJlMmE3Li45YTA4ZjEzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNDIiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjQzIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9idWYuYyBiL3NyYy9jb3JlL25neF9idWYuYwppbmRleCAzMWQ5OTAzLi45MDFjM2Y1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfYnVmLmMKKysrIGIvc3JjL2NvcmUvbmd4X2J1Zi5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAgICAgfQogCiAgICAgd2hpbGUgKGluKSB7CisKKyAgICAgICAgaWYgKG5neF9idWZfc3luY19vbmx5KGluLT5idWYpKSB7CisgICAgICAgICAgICBpbiA9IGluLT5uZXh0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHBvb2wpOwogICAgICAgICBpZiAoY2wgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBkYmEzNjM5Li44MmVlN2FjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCkBAIC03MzcsNiArNzM3LDggQEAKICNpZiAxCiAgICAgYiA9IE5VTEw7CiAgICAgZm9yIChjbCA9IGN0eC0+b3V0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgInNzaSBvdXQ6ICVwICVwIiwgY2wtPmJ1ZiwgY2wtPmJ1Zi0+cG9zKTsKICAgICAgICAgaWYgKGNsLT5idWYgPT0gYikgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc2FtZSBidWYgd2FzIHVzZWQgaW4gc3NpIik7CkBAIC0xNjg1LDYgKzE2ODcsOSBAQAogCiAgICAgdmFyID0gcGFyYW1zW05HWF9IVFRQX1NTSV9FQ0hPX1ZBUl07CiAKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAic3NpIGVjaG8gXCIlVlwiIiwgdmFyKTsKKwogICAgIGtleSA9IDA7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgdmFyLT5sZW47IGkrKykgewpAQCAtMTc5OCw2ICsxODAzLDkgQEAKICAgICBuYW1lID0gcGFyYW1zW05HWF9IVFRQX1NTSV9TRVRfVkFSXTsKICAgICB2YWx1ZSA9IHBhcmFtc1tOR1hfSFRUUF9TU0lfU0VUX1ZBTFVFXTsKIAorICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJzc2kgc2V0IFwiJVZcIiBcIiVWXCIiLCBuYW1lLCB2YWx1ZSk7CisKICAgICBpZiAobmd4X2h0dHBfc3NpX2V2YWx1YXRlX3N0cmluZyhyLCBjdHgsIHZhbHVlLCAwKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKICAgICB9CkBAIC0xODYxLDYgKzE4NjksOSBAQAogCiAgICAgZXhwciA9IHBhcmFtc1tOR1hfSFRUUF9TU0lfSUZfRVhQUl07CiAKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAic3NpIGlmIGV4cHI9XCIlVlwiIiwgZXhwcik7CisKICAgICBsZWZ0LmRhdGEgPSBleHByLT5kYXRhOwogICAgIGxhc3QgPSBleHByLT5kYXRhICsgZXhwci0+bGVuOwogCkBAIC0yMDI1LDYgKzIwMzYsOSBAQAogbmd4X2h0dHBfc3NpX2Vsc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCwKICAgICBuZ3hfc3RyX3QgKipwYXJhbXMpCiB7CisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgInNzaSBlbHNlIik7CisKICAgICBpZiAoY3R4LT5vdXRwdXRfY2hvc2VuKSB7CiAgICAgICAgIGN0eC0+b3V0cHV0ID0gMDsKICAgICB9IGVsc2UgewpAQCAtMjA0MSw2ICsyMDU1LDkgQEAKIG5neF9odHRwX3NzaV9lbmRpZihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LAogICAgIG5neF9zdHJfdCAqKnBhcmFtcykKIHsKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAic3NpIGVuZGlmIik7CisKICAgICBjdHgtPm91dHB1dCA9IDE7CiAgICAgY3R4LT5vdXRwdXRfY2hvc2VuID0gMDsKICAgICBjdHgtPmNvbmRpdGlvbmFsID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDQ4N2ZkMjYuLjYyNzlmMzQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNzM4LDkgKzczOCwxMSBAQAogICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAgICAgfQogCi0gICAgci0+Y29ubmVjdGlvbi0+bG9nLT5maWxlID0gY2xjZi0+ZXJyX2xvZy0+ZmlsZTsKLSAgICBpZiAoIShyLT5jb25uZWN0aW9uLT5sb2ctPmxvZ19sZXZlbCAmIE5HWF9MT0dfREVCVUdfQ09OTkVDVElPTikpIHsKLSAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgPSBjbGNmLT5lcnJfbG9nLT5sb2dfbGV2ZWw7CisgICAgaWYgKHIgPT0gci0+bWFpbikgeworICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5maWxlID0gY2xjZi0+ZXJyX2xvZy0+ZmlsZTsKKyAgICAgICAgaWYgKCEoci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgJiBOR1hfTE9HX0RFQlVHX0NPTk5FQ1RJT04pKSB7CisgICAgICAgICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmxvZ19sZXZlbCA9IGNsY2YtPmVycl9sb2ctPmxvZ19sZXZlbDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgobmd4X2lvLmZsYWdzICYgTkdYX0lPX1NFTkRGSUxFKSAmJiBjbGNmLT5zZW5kZmlsZSkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCmluZGV4IDc2ZGVhYTQuLmIxMTc3NDggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKQEAgLTk2LDcgKzk2LDggQEAKICAgICAgICAgZm9yIChjbCA9IHByLT5vdXQ7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAoY2wtPmJ1ZiA9PSBiKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHNhbWUgYnVmIHdhcyB1c2VkIGluIHBvc3Rwb25lZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBzYW1lIGJ1ZiB3YXMgdXNlZCBpbiBwb3N0cG9uZWQgJXAgJXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIsIGItPnBvcyk7CiAgICAgICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0K