LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKiCw5sioy/nT0CAoQykyMDE1LCDW0NDLzajRtrnJt93T0M/euavLvqGjDQoqKiANCioqIM7EvP7D+7PGOiBtaXguYw0KKiogzsS8/rHqyrY6ICAgICANCioqIMTayN3VqtKqOiAgICANCioqIMq508O3vbeoOiAgICAgDQoqKiANCioqINDeuMTI1cbaICAgICAgICCw5rG+usUgICAgICDQ3rjEseq8xyAgICAgICAg0N64xMjLICAgICAgICAgINDeuMTE2sjdDQoqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiogMjAxOS8wOS8yNSAgICAgVjEuMCAgICAgICAgQ3JlYXRlICAgICAgICAgIHh4cSAgICAgICAgtLS9qA0KKiogDQoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQogDQojaW5jbHVkZSA8c3RkaW50Lmg+DQojaW5jbHVkZSA8bGludXgvdm9sdGVfZHJ2Lmg+DQojaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQojaW5jbHVkZSA8ZmNudGwuaD4NCg0KI2RlZmluZSBNSVhfREVWX0lOVkFMSURfSUQgKC0xKQ0KI2RlZmluZSBEUlZfU1VDQ0VTUyAwDQojZGVmaW5lIERSVl9FUlJPUiAoLTEpDQojZGVmaW5lIEFVRElPX01JWF9ERVZfTkFNRSAiL2Rldi9hdWRpb19taXhfZGV2aWNlIg0KIA0KaW50IGF1ZGlvX21peF9kZXZmZCA9IE1JWF9ERVZfSU5WQUxJRF9JRDsNCg0KaW50IHpEcnZBdWRpb01peF9Xcml0ZSh1bnNpZ25lZCBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgdWlMZW4pIA0KeyANCglpZihhdWRpb19taXhfZGV2ZmQgPT0gTUlYX0RFVl9JTlZBTElEX0lEKQ0KCXsNCiAgICAgICAgcHJpbnRmKCJ6dGUgYXVkaW8gL2Rldi9hdWRpb19taXhfZGV2aWNlIHpEcnZBdWRpb01peF9Xcml0ZU9uZUZyYW1lIGludmFsaWQgZGV2IVxuIik7DQogICAgICAgIHJldHVybiBEUlZfRVJST1I7DQoJfSANCiAgICANCglpZih3cml0ZShhdWRpb19taXhfZGV2ZmQsIHBCdWYsIHVpTGVuKSA8PSAwKQ0KCXsNCiAgICAgICAgcHJpbnRmKCJ6dGUgYXVkaW8gL2Rldi9hdWRpb19taXhfZGV2aWNlIHpEcnZBdWRpb01peF9Xcml0ZU9uZUZyYW1lIHdyaXRlIGZhaWxlZCFcbiIpOw0KCQlyZXR1cm4gRFJWX0VSUk9SOw0KCX0gDQoNCglyZXR1cm4gRFJWX1NVQ0NFU1M7DQp9ICANCg0KaW50IHpEcnZBdWRpb01peF9PcGVuKFRfWkRydkF1ZGlvTWl4X0NmZyAqY2ZnUGFyYW0pIA0Kew0KCWF1ZGlvX21peF9kZXZmZCA9IG9wZW4oQVVESU9fTUlYX0RFVl9OQU1FLCBPX1JEV1IpOw0KICAgIHByaW50Zigib3BlbiBlbmQhIGF1ZGlvX21peF9kZXZmZD0lZCwgYXVkaW9UeXBlPSVkLCBzYW1wbGVfcmF0ZT0lZFxuIiwgYXVkaW9fbWl4X2RldmZkLCBjZmdQYXJhbS0+YXVkaW9UeXBlLCBjZmdQYXJhbS0+c2FtcGxlX3JhdGUpOw0KCWlmKGF1ZGlvX21peF9kZXZmZCA8IDApDQoJew0KICAgICAgICBwcmludGYoInp0ZSBhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2UgekRydkF1ZGlvTWl4X09wZW4gZmFpbGVkIVxuIik7DQoJCXJldHVybiBEUlZfRVJST1I7DQoJfSAgDQogICAgIA0KCWlmKGlvY3RsKGF1ZGlvX21peF9kZXZmZCwgQVVESU9NSVhfSU9DVExfU0VUX0NGRywgY2ZnUGFyYW0pIDwgMCkNCgl7IA0KICAgICAgICBwcmludGYoInp0ZSBhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2Ugc2V0IGNmZyBmYWlsZWQhXG4iKTsNCgkJZ290byBlcnI7DQoJfQ0KICAgIA0KCXJldHVybiBEUlZfU1VDQ0VTUzsNCmVycjogDQoJY2xvc2UoYXVkaW9fbWl4X2RldmZkKTsNCglhdWRpb19taXhfZGV2ZmQgPSBNSVhfREVWX0lOVkFMSURfSUQ7DQogICAgcHJpbnRmKCJ6dGUgYXVkaW8gL2Rldi9hdWRpb19taXhfZGV2aWNlIHpEcnZBdWRpb01peF9PcGVuIGZhaWxlZCFcbiIpOw0KCXJldHVybiBEUlZfRVJST1I7DQoNCn0NCg0KaW50IHpEcnZBdWRpb01peF9DbG9zZSh2b2lkKSAgIA0Kew0KCWlmKGF1ZGlvX21peF9kZXZmZCA9PSBNSVhfREVWX0lOVkFMSURfSUQpDQoJew0KICAgICAgICBwcmludGYoInp0ZSBhdWRpbyAvZGV2L2F1ZGlvX21peF9kZXZpY2UgekRydkF1ZGlvTWl4X0Nsb3NlIGludmFsaWQgZGV2IVxuIik7DQoJCXJldHVybiBEUlZfRVJST1I7DQoJfQ0KCWNsb3NlKGF1ZGlvX21peF9kZXZmZCk7IA0KCWF1ZGlvX21peF9kZXZmZCA9IE1JWF9ERVZfSU5WQUxJRF9JRDsNCiAgICANCglyZXR1cm4gRFJWX1NVQ0NFU1M7DQp9DQoNCg==