LyoqDQogKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLg0KICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHc2NCBtaW5ndy1ydW50aW1lIHBhY2thZ2UuDQogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLg0KICovDQogI2lmZGVmIF9XSU42NA0KCS5maWxlCSJsb2cyZi5TIg0KCS50ZXh0DQoJLmFsaWduIDQNCm9uZToJLmRvdWJsZSAxLjANCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQ0KCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlDQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovDQpsaW1pdDoJLmRvdWJsZSAwLjI5DQoNCgkudGV4dA0KCS5hbGlnbiA0DQouZ2xvYmwgX2xvZzJmDQoJLmRlZglfbG9nMmY7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZg0KX2xvZzJmOg0KCW1vdnNzCSV4bW0wLC0xMiglcnNwKQ0KCWZsZGwJb25lDQoJZmxkcwktMTIoJXJzcCkJCS8vIHggOiAxDQoJZnhhbQ0KCWZuc3Rzdw0KCWZsZAklc3QJCS8vIHggOiB4IDogMQ0KCXNhaGYNCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mDQo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxDQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IDENCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQ0KCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDENCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogMQ0KCWFuZGIJJDB4NDUsICVhaA0KCWp6CTJmDQoJZnN0cAklc3QoMSkJCS8vIHgtMSA6IDENCglmeWwyeHAxCQkJLy8gbG9nKHgpDQoJZnN0cHMJLTEyKCVyc3ApDQoJbW92c3MJLTEyKCVyc3ApLCV4bW0wDQoJcmV0DQoNCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogMQ0KCWZ5bDJ4CQkJLy8gbG9nKHgpDQoJZnN0cHMJLTEyKCVyc3ApDQoJbW92c3MJLTEyKCVyc3ApLCV4bW0wDQoJcmV0DQoNCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZg0KCWZzdHAJJXN0KDEpDQoJZnN0cAklc3QoMSkNCglmc3RwcwktMTIoJXJzcCkNCgltb3ZzcwktMTIoJXJzcCksJXhtbTANCglyZXQNCiNlbHNlDQoJLmZpbGUJImxvZzJmLlMiDQoJLnRleHQNCgkuYWxpZ24gNA0Kb25lOgkuZG91YmxlIDEuMA0KCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5DQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUNCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8NCmxpbWl0OgkuZG91YmxlIDAuMjkNCg0KCS50ZXh0DQoJLmFsaWduIDQNCi5nbG9ibCBfbG9nMmYNCgkuZGVmCV9sb2cyZjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmDQpfbG9nMmY6DQoJZmxkbAlvbmUNCglmbGRzCTQoJWVzcCkJCS8vIHggOiAxDQoJZnhhbQ0KCWZuc3Rzdw0KCWZsZAklc3QJCS8vIHggOiB4IDogMQ0KCXNhaGYNCglqYwkzZgkJLy8gaW4gY2FzZSB4IGlzIE5hTiBvciCxSW5mDQo0Oglmc3ViCSVzdCgyKSwgJXN0CS8vIHgtMSA6IHggOiAxDQoJZmxkCSVzdAkJLy8geC0xIDogeC0xIDogeCA6IDENCglmYWJzCQkJLy8gfHgtMXwgOiB4LTEgOiB4IDogMQ0KCWZjb21wbAlsaW1pdAkJLy8geC0xIDogeCA6IDENCglmbnN0c3cJCQkvLyB4LTEgOiB4IDogMQ0KCWFuZGIJJDB4NDUsICVhaA0KCWp6CTJmDQoJZnN0cAklc3QoMSkJCS8vIHgtMSA6IDENCglmeWwyeHAxCQkJLy8gbG9nKHgpDQoJcmV0DQoNCjI6CWZzdHAJJXN0KDApCQkvLyB4IDogMQ0KCWZ5bDJ4CQkJLy8gbG9nKHgpDQoJcmV0DQoNCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZg0KCWZzdHAJJXN0KDEpDQoJZnN0cAklc3QoMSkNCglyZXQNCiNlbmRpZg0K