ZGlmZiAtLWdpdCBhL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2suYyBiL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDhhNDYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2JlaXNwaWVsZS9tYXN0ZXIvb3BmZXJzdG9jay5jCkBAIC0wLDAgKzEsMTQyIEBACisjaW5jbHVkZSA8ZGVmaW5lcy5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKy8vCisvLyBCeSBSdW1hdGFATW9yZ2VuR3JhdWVuIDMvOTkKKy8vCisvLyBCZWlzcGllbGRhdGVpIGZ1ZXIgZGllIEJlbnV0enVuZyB2b24gTWFzdGVybiB1bmQgS2xpZW50ZW4uCisvLworLy8gSWNoIGdlaGUgaGllciBuaWNodCBhdWYgZGllICJub3JtYWxlbiIgRnVua3Rpb25lbiBlaW4uCisKK2luaGVyaXQgIi9zdGQvdGhpbmciOworCisjZGVmaW5lIE9TX01BU1RFUiAiL2RvYy9iZWlzcGllbGUvbWFzdGVyL29wZmVyc3RvY2ttYXN0ZXIiCisKK3ZvaWQgY3JlYXRlKCkKK3sKKwlpZihJU19CTFVFKE1FKSkgcmV0dXJuOworCTo6Y3JlYXRlKCk7CisJU2V0UHJvcCggUF9OQU1FLCAiT3BmZXJzdG9jayIgKTsKKwlTZXRQcm9wKCBQX0dFTkRFUiwgTUFMRSApOworCVNldFByb3AoIFBfVkFMVUUsIDEwMDAgKyByYW5kb20oMjAwMCkgKTsKKwlBZGRJZCggKHsic3RvY2siLCJpbnNjaHJpZnQiLCJvcGZlcnN0b2NrIn0pICk7CisJU2V0UHJvcCggUF9TSE9SVCwgIkluIGVpbmVyIEVja2Ugc3RlaHQgZWluIE9wZmVyc3RvY2siICk7CisJU2V0UHJvcCggUF9MT05HLAorCQkiRGVyIE9wZmVyc3RvY2sgYmVzdGVodCBhdXMgc29saWRlbSBIb2x6LiBWb3JuZSBhdWYgZGVtIEthc3RlbiBpc3QgZWluZVxuIgorCSsJIkluc2NocmlmdCB6dSBzZWhlbiwgZGllIER1IGxlc2VuIGthbm5zdC5cbiIKKwkrCSJAQGNvbnRlbnRzQEAiCisJKTsKKwlTZXRQcm9wKCBQX1JFQURfTVNHLAorCQkiPj4+Pj4+Pj4+Pj4+IEZ1ZXIgZGVuIEF1ZmJhdSBlaW5lcyBPcmt3YWlzZW5oYXVzZXMgPDw8PDw8PDw8PDw8XG4iCisJKwkiSW4gZGVuIGxldHp0ZW4gSmFocmVuIHd1cmRlbiBpbW1lciB3aWVkZXIgdW5zY2h1bGRpZ2UgT3Jra2luZGVyXG4iCisJKwkiZHVyY2ggYnJ1dGFsZSBBYmVudGV1cmVyIGlocmVyIEVsdGVybiBiZXJhdWJ0LiBCaXR0ZSB1bnRlci1cbiIKKwkrCSJzdHVldHplbiBTaWUgbWl0IGVpbmVyIGtsZWluZW4gU3BlbmRlIGRlbiBBdWZiYXUgZWluZXMgV2Fpc2VuLVxuIgorCSsJImhhdXNlcyBmdWVyIGRpZXNlIGJlbWl0bGVpZGVuc3dlcnRlbiBLcmVhdHVyZW4uXG4iCisJKTsKKwlBZGREZXRhaWwoICJob2x6IiwgIlNvbGlkZSB1bmQgc28gZ3V0IHdpZSB1bnplcmJyZWNobGljaC5cbiIgKTsKKwlTZXRQcm9wKCBQX05PR0VULAorCQkiRGVyIE9wZmVyc3RvY2sgaXN0IG5pY2h0IG9obmUgR3J1bmQgYW0gQm9kZW4gZmVzdGdlbmFnZWx0LlxuIiApOworCUFkZENtZCggInNwZW5kZSIsInNwZW5kZSIgKTsKKwlBZGRDbWQoICh7InN0ZWNrZSIsInN0ZWNrIn0pLCAic3RlY2tlbiIgKTsKKwlBZGRDbWQoICJvZWZmbmUiLCJvZWZmbmUiICk7CisJQWRkQ21kKCAoeyJicmljaCIsImJyZWNoZSJ9KSwiYnJlY2hlIiApOworfQorCitjb250ZW50cygpCit7CisJc3dpdGNoKFF1ZXJ5UHJvcChQX1ZBTFVFKSkKKwl7CisJY2FzZSAwOgorCQlyZXR1cm4gIkVyIGlzdCBsZWVyLlxuIjsKKwljYXNlIDE6CisJCXJldHVybiAiRXIgZW50aGFlbHQ6XG5FaW5lIE11ZW56ZS5cbiI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJFciBlbnRoYWVsdDpcbiIrUXVlcnlQcm9wKFBfVkFMVUUpKyIgTXVlbnplbi5cbiI7CisJfQorfQorCitzdGVja2VuKCBzdHIgKQoreworCXN0cmluZyB3YXMsIHdvcmVpbjsKKwlpZiggIXN0ciB8fCBzc2NhbmYoc3RyLCIlcyBpbiAlcyIsd2FzLHdvcmVpbikhPTIgfHwgIWlkKHdvcmVpbikgKSByZXR1cm4gMDsKKwlyZXR1cm4gc3BlbmRlKCBzdHIgKTsKK30KKworc3BlbmRlKCBzdHIgKQoreworCWludCBhbnosIG5ld0FsOworCXN0cmluZyBhcmc7CisJCisJbm90aWZ5X2ZhaWwoICJXaWV2aWVsZSBNdWVuemVuIHdpbGxzdCBEdSBkZW5uIHNwZW5kZW4/XG4iICk7CisJaWYoICFzdHIgfHwgc3RyPT0iIiApCisJCXJldHVybiAwOworCWlmKCBzc2NhbmYoc3RyLCIlZCAlcyIsYW56LGFyZyk9PSAyICkKKwkJc3RyID0gYXJnOworCWVsc2UKKwl7CisJCWlmKCBzdHI9PSJlaW5lIG11ZW56ZSIgfHwgc3RyPT0iZWluIGdvbGRzdHVlY2siICkKKwkJeworCQkJYW56ID0gMTsKKwkJCXN0ciA9ICJtdWVuemUiOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwlpZiggYW56PD0wIHx8IAorCQltZW1iZXIoKHsibXVlbnplIiwiZ29sZHN0dWVjayIsIm11ZW56ZW4iLCJnb2xkc3R1ZWNrZSJ9KSwgc3RyKT09LTEKKwkpCisJCXJldHVybiAwOworCWlmKCBhbno+UEwtPlF1ZXJ5TW9uZXkoKSApCisJeworCQl3cml0ZSggIlNvIHZpZWwgR2VsZCBoYXN0IER1IG5pY2h0LlxuIiApOworCQlyZXR1cm4gMTsKKwl9CisJUEwtPkFkZE1vbmV5KC1hbnopOworCVNldFByb3AoUF9WQUxVRSxRdWVyeVByb3AoUF9WQUxVRSkrYW56KTsKKworCS8vIEhpZXIgd2lyZCBkZXIgTWFzdGVyIGF1ZmdlcnVmZW4sIGRlciBkYXMgQWxpZ25tZW50IGRlciBTcGllbGVyCisJLy8gZGFubiBhZW5kZXJ0LgorCWlmKCBPU19NQVNURVItPmFkZEFsaWdubWVudCggUEwsIGFuei8zICkgPiAwICkgeworCQkvLyBFaWdlbnRsaWNoIGv2bm50ZSBtYW4gaGllciBhdWNoIGRpZSBNZWxkdW5nIGF1c2dlYmVuLCBhYmVyCisJCS8vIGRlciBTcGllbGVyIHNvbGwgZGVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIEFsaWdubWVudCBnZWFlbmRlcnQKKwkJLy8gdW50IEFsaWdubWVudCBuaWNodCBnZWFlbmRlcnQgc2VoZW4ga29lbm5lbi4KKwl9CisJd3JpdGUoICJEdSBoYXN0IHdhaHJoYWZ0IGRhcyBHZWZ1ZWhsLCBldHdhcyBHdXRlcyBnZXRhbiB6dSBoYWJlbi5cbiIgKTsKKworCXNheSggY2FwaXRhbGl6ZShQTC0+bmFtZShXRVIpKSsiIHNwZW5kZXQgIithbnoKKwkJKyAoKGFuej09MSk/IiBNdWVuemUuXG4iOiIgTXVlbnplbi5cbiIpICk7CisJcmV0dXJuIDE7Cit9CisKK29lZmZuZSggc3RyICkKK3sKKwlpbnQgbmV3QWw7CisJCisJbm90aWZ5X2ZhaWwoICJXQVMgd2lsbHN0IER1IG9lZmZuZW4/XG4iICk7CisJaWYoICFpZChzdHIpICkKKwkJcmV0dXJuIDA7CisJT1NfTUFTVEVSLT5hZGRBbGlnbm1lbnQoIFBMLCAtMzAgKTsKKwl3cml0ZSggIkFsbGVpbiBzY2hvbiBkZXIgR2VkYW5rZS4uLi5cbiIgKTsKKwlyZXR1cm4gMTsKK30KKworYnJlY2hlKCBzdHIgKQoreworCXN0cmluZyBhcmc7CisJbm90aWZ5X2ZhaWwoICJXQVMgd2lsbHN0IER1IGF1ZmJyZWNoZW4/XG4iICk7CisJaWYoICFzdHIgKQorCQlyZXR1cm4gMDsKKwlpZiggc3NjYW5mKHN0ciwiJXMgYXVmIixhcmcpPT0xICkKKwkJc3RyID0gYXJnOworCWlmKCAhaWQoc3RyKSApCisJCXJldHVybiAwOworCXdyaXRlKCAiRGVpbiBsYXV0ZXMgR2V0b2VzZSBydWZ0IGVpbmVuIFRldWZlbCBoZXJiZWksIGRlciBEaWNoIGdsZWljaFxuIgorCSsJIm1pdCBpbiBkaWUgSG9lbGxlIG5pbW10LlxuIgorCSk7CisJc2F5KCBjYXBpdGFsaXplKFBMLT5uYW1lKFdFUikpKyIgdmVyc3VjaHQsIGRlbiBPcGZlcnN0b2NrIGF1Znp1YnJlY2hlbi5cbiIKKwkrICJHbGVpY2ggZXJzY2hlaW50IGVpbiBUZXVmZWwsIHVtICIrUEwtPlF1ZXJ5UHJvbm91bihXRU4pCisJKwkiIGluIGRpZSBIb2VsbGUgenUgcmVpc3Nlbi5cbiIgKTsKKwlQTC0+bW92ZSgiL2QvdW50ZXJ3ZWx0L3JhZXVtZS9xdWFsZW5yYXVtIixNX0dPLCJ6dXIgSG9lbGxlIiwiZmFlaHJ0Iik7CisJT1NfTUFTVEVSLT5hZGRBbGlnbm1lbnQoIFBMLCAtMjAwICk7CisJcmV0dXJuIDE7Cit9Cg==