ZGlmZiAtLWdpdCBhL3NyYy9jaGFyc2V0LmMgYi9zcmMvY2hhcnNldC5jCmluZGV4IGMxNGJlZjAuLmM3Njk0ODYgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFyc2V0LmMKKysrIGIvc3JjL2NoYXJzZXQuYwpAQCAtMTUzMSw2ICsxNTMxLDEyMiBAQAogCXx8IChjID49ICdBJyAmJiBjIDw9ICdGJyk7CiB9CiAKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogVmltJ3Mgb3duIGNoYXJhY3RlciBjbGFzcyBmdW5jdGlvbnMuICBUaGVzZSBleGlzdCBiZWNhdXNlIG1hbnkgbGlicmFyeQorICogaXNsb3dlcigpL3RvdXBwZXIoKSBldGMuIGRvIG5vdCB3b3JrIHByb3Blcmx5OiB0aGV5IGNyYXNoIHdoZW4gdXNlZCB3aXRoCisgKiBpbnZhbGlkIHZhbHVlcyBvciBjYW4ndCBoYW5kbGUgbGF0aW4xIHdoZW4gdGhlIGxvY2FsZSBpcyBDLgorICogU3BlZWQgaXMgbW9zdCBpbXBvcnRhbnQgaGVyZS4KKyAqLworI2RlZmluZSBMQVRJTjFMT1dFUiAnbCcKKyNkZWZpbmUgTEFUSU4xVVBQRVIgJ1UnCisKKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdJV8nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/ICovCitzdGF0aWMgY2hhcl91IGxhdGluMWZsYWdzWzI1Nl0gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSAgICAgIGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUgVVVVVVVVVWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbCBsbGxsbGxsbCI7CitzdGF0aWMgY2hhcl91IGxhdGluMXVwcGVyWzI1Nl0gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e38DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW99jZ2tvc3d7/IjsKK3N0YXRpYyBjaGFyX3UgbGF0aW4xbG93ZXJbMjU2XSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX21/j5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8iOworCisgICAgaW50Cit2aW1faXNsb3dlcihjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBpZiAoYyA8PSAnQCcpCisJcmV0dXJuIEZBTFNFOworICAgIGlmIChjID49IDB4ODApCisgICAgeworCWlmIChlbmNfdXRmOCkKKwkgICAgcmV0dXJuIHV0Zl9pc2xvd2VyKGMpOworCWlmIChjID49IDB4MTAwKQorCXsKKyNpZmRlZiBIQVZFX0lTV0xPV0VSCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXJldHVybiBpc3dsb3dlcihjKTsKKyNlbmRpZgorCSAgICAvKiBpc2xvd2VyKCkgY2FuJ3QgaGFuZGxlIHRoZXNlIGNoYXJzIGFuZCBtYXkgY3Jhc2ggKi8KKwkgICAgcmV0dXJuIEZBTFNFOworCX0KKwlpZiAoZW5jX2xhdGluMWxpa2UpCisJICAgIHJldHVybiAobGF0aW4xZmxhZ3NbY10gJiBMQVRJTjFMT1dFUikgPT0gTEFUSU4xTE9XRVI7CisgICAgfQorICAgIHJldHVybiBpc2xvd2VyKGMpOworfQorCisgICAgaW50Cit2aW1faXN1cHBlcihjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBpZiAoYyA8PSAnQCcpCisJcmV0dXJuIEZBTFNFOworICAgIGlmIChjID49IDB4ODApCisgICAgeworCWlmIChlbmNfdXRmOCkKKwkgICAgcmV0dXJuIHV0Zl9pc3VwcGVyKGMpOworCWlmIChjID49IDB4MTAwKQorCXsKKyNpZmRlZiBIQVZFX0lTV1VQUEVSCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXJldHVybiBpc3d1cHBlcihjKTsKKyNlbmRpZgorCSAgICAvKiBpc2xvd2VyKCkgY2FuJ3QgaGFuZGxlIHRoZXNlIGNoYXJzIGFuZCBtYXkgY3Jhc2ggKi8KKwkgICAgcmV0dXJuIEZBTFNFOworCX0KKwlpZiAoZW5jX2xhdGluMWxpa2UpCisJICAgIHJldHVybiAobGF0aW4xZmxhZ3NbY10gJiBMQVRJTjFVUFBFUikgPT0gTEFUSU4xVVBQRVI7CisgICAgfQorICAgIHJldHVybiBpc3VwcGVyKGMpOworfQorCisgICAgaW50Cit2aW1fdG91cHBlcihjKQorICAgIGludAkgICAgYzsKK3sKKyAgICBpZiAoYyA8PSAnQCcpCisJcmV0dXJuIGM7CisgICAgaWYgKGMgPj0gMHg4MCkKKyAgICB7CisJaWYgKGVuY191dGY4KQorCSAgICByZXR1cm4gdXRmX3RvdXBwZXIoYyk7CisJaWYgKGMgPj0gMHgxMDApCisJeworI2lmZGVmIEhBVkVfVE9XVVBQRVIKKwkgICAgaWYgKGhhc19tYnl0ZSkKKwkJcmV0dXJuIHRvd3VwcGVyKGMpOworI2VuZGlmCisJICAgIC8qIHRvdXBwZXIoKSBjYW4ndCBoYW5kbGUgdGhlc2UgY2hhcnMgYW5kIG1heSBjcmFzaCAqLworCSAgICByZXR1cm4gYzsKKwl9CisJaWYgKGVuY19sYXRpbjFsaWtlKQorCSAgICByZXR1cm4gbGF0aW4xdXBwZXJbY107CisgICAgfQorICAgIHJldHVybiBUT1VQUEVSX0xPQyhjKTsKK30KKworICAgIGludAordmltX3RvbG93ZXIoYykKKyAgICBpbnQJICAgIGM7Cit7CisgICAgaWYgKGMgPD0gJ0AnKQorCXJldHVybiBjOworICAgIGlmIChjID49IDB4ODApCisgICAgeworCWlmIChlbmNfdXRmOCkKKwkgICAgcmV0dXJuIHV0Zl90b2xvd2VyKGMpOworCWlmIChjID49IDB4MTAwKQorCXsKKyNpZmRlZiBIQVZFX1RPV0xPV0VSCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXJldHVybiB0b3dsb3dlcihjKTsKKyNlbmRpZgorCSAgICAvKiB0b2xvd2VyKCkgY2FuJ3QgaGFuZGxlIHRoZXNlIGNoYXJzIGFuZCBtYXkgY3Jhc2ggKi8KKwkgICAgcmV0dXJuIGM7CisJfQorCWlmIChlbmNfbGF0aW4xbGlrZSkKKwkgICAgcmV0dXJuIGxhdGluMWxvd2VyW2NdOworICAgIH0KKyAgICByZXR1cm4gVE9MT1dFUl9MT0MoYyk7Cit9CisjZW5kaWYKKwogLyoKICAqIHNraXB0b3doaXRlOiBza2lwIG92ZXIgdGV4dCB1bnRpbCAnICcgb3IgJ1x0JyBvciBOVUwuCiAgKi8K