LyoKICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KICogUHVibGljIGRvbWFpbi4KICovCgojaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KClJDU0lEKCIkTmV0QlNEOiBzX2xvZzFwZi5TLHYgMS40IDE5OTUvMDUvMDkgMDA6MTM6MDUganRjIEV4cCAkIikKCiNpZmRlZiBfX0VMRl9fCgkuc2VjdGlvbiAucm9kYXRhCiNlbHNlCgkudGV4dAojZW5kaWYKCS5hbGlnbiBBTElHTkFSRyg0KQoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluCgkJLTEgKyBzcXJ0KDIpIC8gMiA8PSB4IDw9IDEgLSBzcXJ0KDIpIC8gMgoJICAgMC4yOSBpcyBhIHNhZmUgdmFsdWUuCgkqLwpsaW1pdDoJLmZsb2F0IDAuMjkKb25lOgkuZmxvYXQgMS4wCgovKgogKiBVc2UgdGhlIGZ5bDJ4cDEgZnVuY3Rpb24gd2hlbiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIHJhbmdlIC0wLjI5IHRvIDAuMjksCiAqIG90aGVyd2lzZSBmeWwyeCB3aXRoIHRoZSBuZWVkZWQgZXh0cmEgY29tcHV0YXRpb24uCiAqLwoJLnRleHQKRU5UUlkoX19sb2cxcGYpCglmbGRsbjIKCglmbGRzCTQoJWVzcCkKCiNpZmRlZglQSUMKCUxPQURfUElDX1JFRyAoZHgpCiNlbmRpZgoKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0OglmYWJzCiNpZmRlZiBQSUMKCWZjb21wcwlsaW1pdEBHT1RPRkYoJWVkeCkKI2Vsc2UKCWZjb21wcwlsaW1pdAojZW5kaWYKCWZuc3RzdwoJc2FoZgoJamMJMmYKCiNpZmRlZiBQSUMKCWZhZGRzCW9uZUBHT1RPRkYoJWVkeCkKI2Vsc2UKCWZhZGRzCW9uZQojZW5kaWYKCWZ5bDJ4CglyZXQKCjI6CWZ5bDJ4cDEKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAoKRU5EIChfX2xvZzFwZikKd2Vha19hbGlhcyAoX19sb2cxcGYsIGxvZzFwZikK