ZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9zY3JpcHQuYyBiL2ZzL2JpbmZtdF9zY3JpcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRiY2NhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvYmluZm10X3NjcmlwdC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIGxpbnV4L2ZzL2JpbmZtdF9zY3JpcHQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgIE1hcnRpbiB2b24gTPZ3aXMKKyAqICBvcmlnaW5hbCAjIS1jaGVja2luZyBpbXBsZW1lbnRlZCBieSB0eXRzby4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK3N0YXRpYyBpbnQgbG9hZF9zY3JpcHQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljaGFyICpjcCwgKmlfbmFtZSwgKmlfYXJnOworCXN0cnVjdCBmaWxlICpmaWxlOworCWNoYXIgaW50ZXJwW0JJTlBSTV9CVUZfU0laRV07CisJaW50IHJldHZhbDsKKworCWlmICgoYnBybS0+YnVmWzBdICE9ICcjJykgfHwgKGJwcm0tPmJ1ZlsxXSAhPSAnIScpIHx8IChicHJtLT5zaF9iYW5nKSkgCisJCXJldHVybiAtRU5PRVhFQzsKKwkvKgorCSAqIFRoaXMgc2VjdGlvbiBkb2VzIHRoZSAjISBpbnRlcnByZXRhdGlvbi4KKwkgKiBTb3J0YSBjb21wbGljYXRlZCwgYnV0IGhvcGVmdWxseSBpdCB3aWxsIHdvcmsuICAtVFlUCisJICovCisKKwlicHJtLT5zaF9iYW5nKys7CisJYWxsb3dfd3JpdGVfYWNjZXNzKGJwcm0tPmZpbGUpOworCWZwdXQoYnBybS0+ZmlsZSk7CisJYnBybS0+ZmlsZSA9IE5VTEw7CisKKwlicHJtLT5idWZbQklOUFJNX0JVRl9TSVpFIC0gMV0gPSAnXDAnOworCWlmICgoY3AgPSBzdHJjaHIoYnBybS0+YnVmLCAnXG4nKSkgPT0gTlVMTCkKKwkJY3AgPSBicHJtLT5idWYrQklOUFJNX0JVRl9TSVpFLTE7CisJKmNwID0gJ1wwJzsKKwl3aGlsZSAoY3AgPiBicHJtLT5idWYpIHsKKwkJY3AtLTsKKwkJaWYgKCgqY3AgPT0gJyAnKSB8fCAoKmNwID09ICdcdCcpKQorCQkJKmNwID0gJ1wwJzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCWZvciAoY3AgPSBicHJtLT5idWYrMjsgKCpjcCA9PSAnICcpIHx8ICgqY3AgPT0gJ1x0Jyk7IGNwKyspOworCWlmICgqY3AgPT0gJ1wwJykgCisJCXJldHVybiAtRU5PRVhFQzsgLyogTm8gaW50ZXJwcmV0ZXIgbmFtZSBmb3VuZCAqLworCWlfbmFtZSA9IGNwOworCWlfYXJnID0gTlVMTDsKKwlmb3IgKCA7ICpjcCAmJiAoKmNwICE9ICcgJykgJiYgKCpjcCAhPSAnXHQnKTsgY3ArKykKKwkJLyogbm90aGluZyAqLyA7CisJd2hpbGUgKCgqY3AgPT0gJyAnKSB8fCAoKmNwID09ICdcdCcpKQorCQkqY3ArKyA9ICdcMCc7CisJaWYgKCpjcCkKKwkJaV9hcmcgPSBjcDsKKwlzdHJjcHkgKGludGVycCwgaV9uYW1lKTsKKwkvKgorCSAqIE9LLCB3ZSd2ZSBwYXJzZWQgb3V0IHRoZSBpbnRlcnByZXRlciBuYW1lIGFuZAorCSAqIChvcHRpb25hbCkgYXJndW1lbnQuCisJICogU3BsaWNlIGluICgxKSB0aGUgaW50ZXJwcmV0ZXIncyBuYW1lIGZvciBhcmd2WzBdCisJICogICAgICAgICAgICgyKSAob3B0aW9uYWwpIGFyZ3VtZW50IHRvIGludGVycHJldGVyCisJICogICAgICAgICAgICgzKSBmaWxlbmFtZSBvZiBzaGVsbCBzY3JpcHQgKHJlcGxhY2UgYXJndlswXSkKKwkgKgorCSAqIFRoaXMgaXMgZG9uZSBpbiByZXZlcnNlIG9yZGVyLCBiZWNhdXNlIG9mIGhvdyB0aGUKKwkgKiB1c2VyIGVudmlyb25tZW50IGFuZCBhcmd1bWVudHMgYXJlIHN0b3JlZC4KKwkgKi8KKwlyZW1vdmVfYXJnX3plcm8oYnBybSk7CisJcmV0dmFsID0gY29weV9zdHJpbmdzX2tlcm5lbCgxLCAmYnBybS0+aW50ZXJwLCBicHJtKTsKKwlpZiAocmV0dmFsIDwgMCkgcmV0dXJuIHJldHZhbDsgCisJYnBybS0+YXJnYysrOworCWlmIChpX2FyZykgeworCQlyZXR2YWwgPSBjb3B5X3N0cmluZ3Nfa2VybmVsKDEsICZpX2FyZywgYnBybSk7CisJCWlmIChyZXR2YWwgPCAwKSByZXR1cm4gcmV0dmFsOyAKKwkJYnBybS0+YXJnYysrOworCX0KKwlyZXR2YWwgPSBjb3B5X3N0cmluZ3Nfa2VybmVsKDEsICZpX25hbWUsIGJwcm0pOworCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7IAorCWJwcm0tPmFyZ2MrKzsKKwlicHJtLT5pbnRlcnAgPSBpbnRlcnA7CisKKwkvKgorCSAqIE9LLCBub3cgcmVzdGFydCB0aGUgcHJvY2VzcyB3aXRoIHRoZSBpbnRlcnByZXRlcidzIGRlbnRyeS4KKwkgKi8KKwlmaWxlID0gb3Blbl9leGVjKGludGVycCk7CisJaWYgKElTX0VSUihmaWxlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CisKKwlicHJtLT5maWxlID0gZmlsZTsKKwlyZXR2YWwgPSBwcmVwYXJlX2JpbnBybShicHJtKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gc2VhcmNoX2JpbmFyeV9oYW5kbGVyKGJwcm0scmVncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IHNjcmlwdF9mb3JtYXQgPSB7CisJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkubG9hZF9iaW5hcnkJPSBsb2FkX3NjcmlwdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc2NyaXB0X2JpbmZtdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9iaW5mbXQoJnNjcmlwdF9mb3JtYXQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9zY3JpcHRfYmluZm10KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9iaW5mbXQoJnNjcmlwdF9mb3JtYXQpOworfQorCitjb3JlX2luaXRjYWxsKGluaXRfc2NyaXB0X2JpbmZtdCk7Cittb2R1bGVfZXhpdChleGl0X3NjcmlwdF9iaW5mbXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=