LyoqCiAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB3NjQgbWluZ3ctcnVudGltZSBwYWNrYWdlLgogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUi5QRCB3aXRoaW4gdGhpcyBwYWNrYWdlLgogKi8KI2luY2x1ZGUgPF9taW5nd19tYWMuaD4KCgkuZmlsZQkibG9nMmYuUyIKCS50ZXh0CiNpZmRlZiBfV0lONjQKCS5hbGlnbiA4CiNlbHNlCgkuYWxpZ24gNAojZW5kaWYKb25lOgkuZG91YmxlIDEuMAoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkKCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8KbGltaXQ6CS5kb3VibGUgMC4yOQoKLmdsb2JsIF9fTUlOR1dfVVNZTUJPTChsb2cyZikKCS5kZWYJX19NSU5HV19VU1lNQk9MKGxvZzJmKTsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCl9fTUlOR1dfVVNZTUJPTChsb2cyZik6CiNpZmRlZiBfV0lONjQKCW1vdnNzCSV4bW0wLC0xMiglcnNwKQoJZmxkbAlvbmUoJXJpcCkKCWZsZHMJLTEyKCVyc3ApCQkvLyB4IDogMQoJZnhhbQoJZm5zdHN3CglmbGQJJXN0CQkvLyB4IDogeCA6IDEKCXNhaGYKCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYKNDoJZnN1Ygklc3QoMiksICVzdAkvLyB4LTEgOiB4IDogMQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IDEKCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiAxCglmY29tcGwJbGltaXQoJXJpcCkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJZnN0cHMJLTEyKCVyc3ApCgltb3ZzcwktMTIoJXJzcCksJXhtbTAKCXJldAoKMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxCglmeWwyeAkJCS8vIGxvZyh4KQoJZnN0cHMJLTEyKCVyc3ApCgltb3ZzcwktMTIoJXJzcCksJXhtbTAKCXJldAoKMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mCglmc3RwCSVzdCgxKQoJZnN0cAklc3QoMSkKCWZzdHBzCS0xMiglcnNwKQoJbW92c3MJLTEyKCVyc3ApLCV4bW0wCglyZXQKI2Vsc2UKCWZsZGwJb25lCglmbGRzCTQoJWVzcCkJCS8vIHggOiAxCglmeGFtCglmbnN0c3cKCWZsZAklc3QJCS8vIHggOiB4IDogMQoJc2FoZgoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZgo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDEKCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDEKCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxCglhbmRiCSQweDQ1LCAlYWgKCWp6CTJmCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQoJZnlsMnhwMQkJCS8vIGxvZyh4KQoJcmV0CgoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDEKCWZ5bDJ4CQkJLy8gbG9nKHgpCglyZXQKCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZgoJZnN0cAklc3QoMSkKCWZzdHAJJXN0KDEpCglyZXQKI2VuZGlmCg==