LyoqDQogKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLg0KICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHc2NCBtaW5ndy1ydW50aW1lIHBhY2thZ2UuDQogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLg0KICovDQogI2lmZGVmIF9XSU42NA0KCS5maWxlCSJsb2cxcGwuUyINCgkudGV4dA0KCS5hbGlnbiA0DQoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluDQoJICAgLTEgKyBzcXJ0KDIpIC8gMiA8PSB4IDw9IDEgLSBzcXJ0KDIpIC8gMg0KCSAgIDAuMjkgaXMgYSBzYWZlIHZhbHVlLg0KCSAqLw0KbGltaXQ6CS50ZmxvYXQgMC4yOQ0KCS8qIFBsZWFzZSBub3RlOgkgd2UgdXNlIGEgZG91YmxlIHZhbHVlIGhlcmUuICBTaW5jZSAxLjAgaGFzDQoJICAgYW4gZXhhY3QgcmVwcmVzZW50YXRpb24gdGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIGFjY3VyYWN5DQoJICAgYnV0IGl0IGhlbHBzIHRvIG9wdGltaXplIHRoZSBjb2RlLiAgKi8NCm9uZToJLmRvdWJsZSAxLjANCg0KLyoNCiAqIFVzZSB0aGUgZnlsMnhwMSBmdW5jdGlvbiB3aGVuIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgcmFuZ2UgLTAuMjkgdG8gMC4yOSwNCiAqIG90aGVyd2lzZSBmeWwyeCB3aXRoIHRoZSBuZWVkZWQgZXh0cmEgY29tcHV0YXRpb24uDQogKi8NCi5nbG9ibCBfbG9nMXBsOyANCgkuZGVmCV9sb2cxcGw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZg0KX2xvZzFwbDoNCglmbGRsbjINCglmbGR0CSglcmR4KQ0KCWZ4YW0NCglmbnN0c3cNCglmbGQJJXN0DQoJc2FoZg0KCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYNCjQ6DQoJZmFicw0KCWZsZHQJbGltaXQNCglmY29tcHANCglmbnN0c3cNCglzYWhmDQoJam5jCTJmDQoJZmFkZGwJb25lDQoJZnlsMngNCgltb3ZxCSVyY3gsJXJheA0KCWZzdHB0CSglcmN4KQ0KCXJldA0KDQoyOglmeWwyeHAxDQoJbW92cQklcmN4LCVyYXgNCglmc3RwdAkoJXJjeCkNCglyZXQNCg0KMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mDQoJZnN0cAklc3QoMSkNCglmc3RwCSVzdCgxKQ0KCW1vdnEJJXJjeCwlcmF4DQoJZnN0cHQJKCVyY3gpDQoJcmV0DQojZWxzZQ0KCS5maWxlCSJsb2cxcGwuUyINCgkudGV4dA0KCS5hbGlnbiA0DQoJLyogVGhlIGZ5bDJ4cDEgY2FuIG9ubHkgYmUgdXNlZCBmb3IgdmFsdWVzIGluDQoJICAgLTEgKyBzcXJ0KDIpIC8gMiA8PSB4IDw9IDEgLSBzcXJ0KDIpIC8gMg0KCSAgIDAuMjkgaXMgYSBzYWZlIHZhbHVlLg0KCSAqLw0KbGltaXQ6CS50ZmxvYXQgMC4yOQ0KCS8qIFBsZWFzZSBub3RlOgkgd2UgdXNlIGEgZG91YmxlIHZhbHVlIGhlcmUuICBTaW5jZSAxLjAgaGFzDQoJICAgYW4gZXhhY3QgcmVwcmVzZW50YXRpb24gdGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIGFjY3VyYWN5DQoJICAgYnV0IGl0IGhlbHBzIHRvIG9wdGltaXplIHRoZSBjb2RlLiAgKi8NCm9uZToJLmRvdWJsZSAxLjANCg0KLyoNCiAqIFVzZSB0aGUgZnlsMnhwMSBmdW5jdGlvbiB3aGVuIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgcmFuZ2UgLTAuMjkgdG8gMC4yOSwNCiAqIG90aGVyd2lzZSBmeWwyeCB3aXRoIHRoZSBuZWVkZWQgZXh0cmEgY29tcHV0YXRpb24uDQogKi8NCi5nbG9ibCBfbG9nMXBsOyANCgkuZGVmCV9sb2cxcGw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZg0KX2xvZzFwbDoNCglmbGRsbjINCglmbGR0CTQoJWVzcCkNCglmeGFtDQoJZm5zdHN3DQoJZmxkCSVzdA0KCXNhaGYNCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mDQo0Og0KCWZhYnMNCglmbGR0CWxpbWl0DQoJZmNvbXBwDQoJZm5zdHN3DQoJc2FoZg0KCWpuYwkyZg0KCWZhZGRsCW9uZQ0KCWZ5bDJ4DQoJcmV0DQoNCjI6CWZ5bDJ4cDENCglyZXQNCg0KMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mDQoJZnN0cAklc3QoMSkNCglmc3RwCSVzdCgxKQ0KCXJldA0KI2VuZGlm