LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMmwuUyIKCS50ZXh0CiNpZmRlZiBfV0lONjQKCS5hbGlnbiA4CiNlbHNlCgkuYWxpZ24gNAojZW5kaWYKb25lOgkuZG91YmxlIDEuMAoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KbGltaXQ6CS5kb3VibGUgMC4yOQoKLmdsb2JsIF9fTUlOR1dfVVNZTUJPTChsb2cybCkKCS5kZWYJX19NSU5HV19VU1lNQk9MKGxvZzJsKTsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9fTUlOR1dfVVNZTUJPTChsb2cybCk6CiNpZmRlZiBfV0lONjQKCWZsZGwJb25lCglmbGR0CSglcmR4KQkJLy8geCA6IDEKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiAxCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDEKCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiAxCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogMQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IDEKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiAxCglmeWwyeHAxCQkJLy8gbG9nKHgpCgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxCglmeWwyeAkJCS8vIGxvZyh4KQoJbW92cQklcmN4LCVyYXgKCW1vdnEJJDAsOCglcmN4KQoJZnN0cHQJKCVyY3gpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCgltb3ZxCSVyY3gsJXJheAoJbW92cQkkMCw4KCVyY3gpCglmc3RwdAkoJXJjeCkKCXJldAojZWxzZQoJZmxkbAlvbmUKCWZsZHQJNCglZXNwKQkJLy8geCA6IDEKCWZ4YW0KCWZuc3RzdwoJZmxkCSVzdAkJLy8geCA6IHggOiAxCglzYWhmCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mCjQ6CWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDEKCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiAxCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogMQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IDEKCWFuZGIJJDB4NDUsICVhaAoJanoJMmYKCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiAxCglmeWwyeHAxCQkJLy8gbG9nKHgpCglyZXQKCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogMQoJZnlsMngJCQkvLyBsb2coeCkKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCXJldAojZW5kaWYK