LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIEBmaWxlDQogKiBTbWFydEZ1c2lvbiBNU1MgRXRoZXJuZXQgTUFDIGhlYWRlciBmaWxlLg0KICoNCiAqIChjKSBDb3B5cmlnaHQgMjAwNyBBY3RlbCBDb3Jwb3JhdGlvbg0KICoNCiAqIFNWTiAkUmV2aXNpb246IDIzNjQgJA0KICogU1ZOICREYXRlOiAyMDEwLTAzLTAxIDE3OjU4OjQxICswMDAwIChNb24sIDAxIE1hciAyMDEwKSAkDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNpZm5kZWYgX19NU1NfRVRIRVJORVRfTUFDX0gNCiNkZWZpbmUgX19NU1NfRVRIRVJORVRfTUFDX0gJMQ0KDQojaW5jbHVkZSA8c3RkaW50Lmg+DQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIiB7DQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvbmZpZ3VyZSB2YWx1ZXMuDQogKi8NCi8qKg0KICogUmVjZWl2ZSBhbGwuDQogKiBXaGVuIHNldCwgYWxsIGluY29taW5nIGZyYW1lcyBhcmUgcmVjZWl2ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZGVzdGluYXRpb24gYWRkcmVzcy4NCiAqIEFuIGFkZHJlc3MgY2hlY2sgaXMgcGVyZm9ybWVkLCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2sgaXMgd3JpdHRlbiBpbnRvIHRoZSByZWNlaXZlDQogKiBkZXNjcmlwdG9yLg0KICovDQojZGVmaW5lIE1TU19NQUNfQ0ZHX1JFQ0VJVkVfQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDF1DQoNCi8qKg0KICogVHJhbnNtaXQgdGhyZXNob2xkIG1vZGUuDQogKiAxIC0gVHJhbnNtaXQgRklGTyB0aHJlc2hvbGQgc2V0IGZvciAxMDAgTWJwcyBtb2RlDQogKiAwIC0gVHJhbnNtaXQgRklGTyB0aHJlc2hvbGQgc2V0IGZvciAxMCBNYnBzIG1vZGUNCiAqIFRoaXMgYml0IGNhbiBiZSBjaGFuZ2VkIG9ubHkgd2hlbiBhIHRyYW5zbWl0IHByb2Nlc3MgaXMgaW4gYSBzdG9wcGVkIHN0YXRlLg0KICovDQojZGVmaW5lIE1TU19NQUNfQ0ZHX1RSQU5TTUlUX1RIUkVTSE9MRF9NT0RFICAgICAgICAgICAgIDB4MDAwMDAwMDJ1DQoNCi8qKg0KICogU3RvcmUgYW5kIGZvcndhcmQuDQogKiBXaGVuIHNldCwgdGhlIHRyYW5zbWlzc2lvbiBzdGFydHMgYWZ0ZXIgYSBmdWxsIHBhY2tldCBpcyB3cml0dGVuIGludG8gdGhlIHRyYW5zbWl0DQogKiBGSUZPLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IEZJRk8gdGhyZXNob2xkIGxldmVsLg0KICogVGhpcyBiaXQgY2FuIGJlIGNoYW5nZWQgb25seSB3aGVuIHRoZSB0cmFuc21pdCBwcm9jZXNzIGlzIGluIHRoZSBzdG9wcGVkIHN0YXRlLg0KICovDQojZGVmaW5lIE1TU19NQUNfQ0ZHX1NUT1JFX0FORF9GT1JXQVJEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDR1DQoNCi8qKg0KICogVGhyZXNob2xkIGNvbnRyb2wgYml0cy4NCiAqIFRoZXNlIGJpdHMsIHRvZ2V0aGVyIHdpdGggVFRNLCBTRiwgYW5kIFBTLCBjb250cm9sIHRoZSB0aHJlc2hvbGQgbGV2ZWwgZm9yIHRoZQ0KICogdHJhbnNtaXQgRklGTy4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF8wMCAgICAgICAgICAgICAgICAweDAwMDAwMDAwdQ0KI2RlZmluZSBNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF8wMSAgICAgICAgICAgICAgICAweDAwMDAwMDA4dQ0KI2RlZmluZSBNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF8xMCAgICAgICAgICAgICAgICAweDAwMDAwMDEwdQ0KI2RlZmluZSBNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF8xMSAgICAgICAgICAgICAgICAweDAwMDAwMDE4dQ0KDQovKioNCiAqIEZ1bGwtZHVwbGV4IG1vZGUuDQogKiAwIC0gSGFsZi1kdXBsZXggbW9kZSA8YnI+DQogKiAxIC0gRm9yY2luZyBmdWxsLWR1cGxleCBtb2RlIDxicj4NCiAqIENoYW5naW5nIG9mIHRoaXMgYml0IGlzIGFsbG93ZWQgb25seSB3aGVuIGJvdGggdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciBwcm9jZXNzZXMNCiAqIGFyZSBpbiB0aGUgc3RvcHBlZCBzdGF0ZS4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX0NGR19GVUxMX0RVUExFWF9NT0RFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwdQ0KDQovKioNCiAqIFBhc3MgYWxsIG11bHRpY2FzdC4NCiAqIFdoZW4gc2V0LCBhbGwgZnJhbWVzIHdpdGggbXVsdGljYXN0IGRlc3RpbmF0aW9uIGFkZHJlc3NlcyB3aWxsIGJlIHJlY2VpdmVkLCByZWdhcmRsZXNzDQogKiBvZiB0aGUgYWRkcmVzcyBjaGVjayByZXN1bHQuDQogKi8NCiNkZWZpbmUgTVNTX01BQ19DRkdfUEFTU19BTExfTVVMVElDQVNUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MHUNCg0KLyoqDQogKiBQcm9taXNjdW91cyBtb2RlLg0KICogV2hlbiBzZXQsIGFsbCBmcmFtZXMgd2lsbCBiZSByZWNlaXZlZCByZWdhcmRsZXNzIG9mIHRoZSBhZGRyZXNzIGNoZWNrIHJlc3VsdC4gQW4NCiAqIGFkZHJlc3MgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX0NGR19QUk9NSVNDVU9VU19NT0RFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwdQ0KDQovKioNCiAqIEludmVyc2UgZmlsdGVyaW5nIChyZWFkLW9ubHkpLg0KICogSWYgdGhpcyBiaXQgaXMgc2V0IHdoZW4gd29ya2luZyBpbiBhIHBlcmZlY3QgZmlsdGVyaW5nIG1vZGUsIHRoZSByZWNlaXZlciBwZXJmb3JtcyBhbg0KICogaW52ZXJzZSBmaWx0ZXJpbmcgZHVyaW5nIHRoZSBhZGRyZXNzIGNoZWNrIHByb2Nlc3MuDQogKiBUaGUgJ2ZpbHRlcmluZyB0eXBlJyBiaXRzIG9mIHRoZSBzZXR1cCBmcmFtZSBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoaXMgYml0Lg0KICovDQojZGVmaW5lIE1TU19NQUNfQ0ZHX0lOVkVSU0VfRklMVEVSSU5HICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDB1DQoNCi8qKg0KICogUGFzcyBiYWQgZnJhbWVzLg0KICogV2hlbiBzZXQsIENvcmUxMC8xMDAgdHJhbnNmZXJzIGFsbCBmcmFtZXMgaW50byB0aGUgZGF0YSBidWZmZXJzLCByZWdhcmRsZXNzIG9mIHRoZQ0KICogcmVjZWl2ZSBlcnJvcnMuIFRoaXMgYWxsb3dzIHRoZSBydW50IGZyYW1lcywgY29sbGlkZWQgZnJhZ21lbnRzLCBhbmQgdHJ1bmNhdGVkIGZyYW1lcw0KICogdG8gYmUgcmVjZWl2ZWQuDQogKi8NCiNkZWZpbmUgTVNTX01BQ19DRkdfUEFTU19CQURfRlJBTUVTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMHUNCg0KLyoqDQogKiBIYXNoLW9ubHkgZmlsdGVyaW5nIG1vZGUgKHJlYWQtb25seSkuDQogKiBXaGVuIHNldCwgQ29yZTEwLzEwMCBwZXJmb3JtcyBhbiBpbXBlcmZlY3QgZmlsdGVyaW5nIG92ZXIgYm90aCB0aGUgbXVsdGljYXN0IGFuZA0KICogcGh5c2ljYWwgYWRkcmVzc2VzLg0KICogVGhlICdmaWx0ZXJpbmcgdHlwZScgYml0cyBvZiB0aGUgc2V0dXAgZnJhbWUgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGlzIGJpdC4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX0NGR19IQVNIX09OTFlfRklMVEVSSU5HX01PREUgICAgICAgICAgICAweDAwMDAwNDAwdQ0KDQovKioNCiAqIEhhc2gvcGVyZmVjdCByZWNlaXZlIGZpbHRlcmluZyBtb2RlIChyZWFkLW9ubHkpLg0KICogMCAtIFBlcmZlY3QgZmlsdGVyaW5nIG9mIHRoZSBpbmNvbWluZyBmcmFtZXMgaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgcGh5c2ljYWwNCiAqIGFkZHJlc3NlcyBzcGVjaWZpZWQgaW4gYSBzZXR1cCBmcmFtZS4gPGJyPg0KICogMSAtIEltcGVyZmVjdCBmaWx0ZXJpbmcgb3ZlciB0aGUgZnJhbWVzIHdpdGggdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMgaXMgcGVyZm9ybWVkDQogKiBhY2NvcmRpbmcgdG8gdGhlIGhhc2ggdGFibGUgc3BlY2lmaWVkIGluIGEgc2V0dXAgZnJhbWUuIDxicj4NCiAqIEEgcGh5c2ljYWwgYWRkcmVzcyBjaGVjayBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBDU1I2LjIgKEhPLCBoYXNoLW9ubHkpIGJpdC4NCiAqIFdoZW4gYm90aCB0aGUgSE8gYW5kIEhQIGJpdHMgYXJlIHNldCwgYW4gaW1wZXJmZWN0IGZpbHRlcmluZyBpcyBwZXJmb3JtZWQgb24gYWxsIG9mDQogKiB0aGUgYWRkcmVzc2VzLg0KICogVGhlICdmaWx0ZXJpbmcgdHlwZScgYml0cyBvZiB0aGUgc2V0dXAgZnJhbWUgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGlzIGJpdC4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX0NGR19IQVNIX1BFUkZFQ1RfUkVDRUlWRV9GSUxURVJJTkdfTU9ERSAweDAwMDAwODAwdQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBMaW5rIHN0YXR1cyB2YWx1ZXMuDQogKi8NCiNkZWZpbmUgTVNTX01BQ19MSU5LX1NUQVRVU19MSU5LICAweDAwMDF1ICAgLyoqPCBMaW5rIHVwL2Rvd24gKi8NCiNkZWZpbmUgTVNTX01BQ19MSU5LX1NUQVRVU18xMDBNQiAweDAwMDJ1ICAgLyoqPCBDb25uZWN0aW9uIGlzIDEwME1iLzEwTWIgKi8NCiNkZWZpbmUgTVNTX01BQ19MSU5LX1NUQVRVU19GRFggICAweDAwMDR1ICAgLyoqPCBDb25uZWN0aW9uIGlzIGZ1bGwvaGFsZiBkdXBsZXggKi8NCg0KDQovKioNCiAqIFNpemUgb2YgdGhlIG1heCBwYWNrZXQgdGhhdCBjYW4gYmUgcmVjZWl2ZWQvdHJhbnNtaXRlZC4NCiAqLw0KI2RlZmluZSBNU1NfTUFYX1BBQ0tFVF9TSVpFICAxNTE0dUwNCg0KLyoqDQogKiBTaXplIG9mIGEgcmVjZWl2ZS90cmFuc21pdCBidWZmZXIuDQogKiBCdWZmZXIgc2l6ZSBtdXN0IGJlIGVub3VnaCBiaWcgdG8gaG9sZCBhIGZ1bGwgZnJhbWUgYW5kIG11c3QgYmUgbXVsdGlwbGUgb2YNCiAqIGZvdXIuIEZvciByeCBidWZmZXIgKzQgYnl0ZXMgYWxsb2NhdGVkIGZvciBjcmMgdmFsdWVzLiBUaGVzZSBieXRlcyBkb2Vzbid0DQogKiBjb3BpZWQgdG8gdGhlIHVzZXIgYnVmZmVyLg0KICovDQojZGVmaW5lIE1TU19UWF9CVUZGX1NJWkUgICgoTVNTX01BWF9QQUNLRVRfU0laRSArIDN1KSAmICh+KHVpbnQzMl90KTMpKQ0KI2RlZmluZSBNU1NfUlhfQlVGRl9TSVpFICAoKE1TU19NQVhfUEFDS0VUX1NJWkUgKyA3dSkgJiAofih1aW50MzJfdCkzKSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRpbWUgb3V0IHZhbHVlcy4NCiAqLw0KI2RlZmluZSBNU1NfTUFDX05PTkJMT0NLSU5HCQkwdQ0KI2RlZmluZSBNU1NfTUFDX0JMT0NLSU5HCQkweEZGRkZGRkZGVUwNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIE1BQyBldmVudHMuDQogKi8NCiNkZWZpbmUgTVNTX01BQ19FVkVOVF9QQUNLRVRfU0VORAkJMXUNCiNkZWZpbmUgTVNTX01BQ19FVkVOVF9QQUNLRVRfUkVDRUlWRUQJMnUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFBIWSBhZGRyZXNzZXMuDQogKi8NCiNkZWZpbmUgTVNTX1BIWV9BRERSRVNTX01JTgkJCQkwdQ0KI2RlZmluZSBNU1NfUEhZX0FERFJFU1NfTUFYCQkJCTMxdQ0KI2RlZmluZSBNU1NfUEhZX0FERFJFU1NfQVVUT19ERVRFQ1QJCTI1NXUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIExpc3RlbmVyIGZ1bmN0aW9uIHR5cGUgZGVmaW5lcyB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHRoYXQgbWlnaHQgYmUgZm9sbG93ZWQNCiAqIGJ5IE1BQ19pc3Igd2hpY2ggaXMgdHJpZ2dlcmVkIHdpdGggZWFjaCByZWNlaXZlIGFuZCB0cmFuc21pdCByZWxhdGVkIGludGVycnVwdHMuDQogKiBMaXN0ZW5lciBmdW5jdGlvbnMgc2hvdWxkIGZvbGxvdyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToNCiAqCQl2b2lkIE1BQ19MaXN0ZW5lciggdWludDMyX3QgZXZlbnRzICk7DQogKiBUaGUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiBhYm91dCB0aGUgdHJpZ2dlcmluZyBldmVudA0KICogb3IgZXZlbnRzLiBFdmVudHMgaW5wdXQgdG8gdGhlIHN5c3RlbSBhcmU6DQogKiAgICAgICNkZWZpbmUgTVNTX01BQ19FVkVOVF9QQUNLRVRfU0VORAkJMQ0KICogICAgICAjZGVmaW5lIE1TU19NQUNfRVZFTlRfUEFDS0VUX1JFQ0VJVkVECTINCiAqIExpc3RlbmVyIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGlzIGRyaXZlciBpZg0KICogbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBhc3NpZ25lZCB0byB0aGUgZHJpdmVyIHVzaW5nIE1BQ19zZXRfY2FsbGJhY2sNCiAqIHJvdXRpbmUgYW5kIG1heSBiZSB1biBhc3NpZ25lZCBhZ2FpbiBieSB1c2luZyB0aGUgc2FtZSByb3V0aW5lIHdpdGggYSBOVUxMIHBvaW50ZXINCiAqIGFzIHRoZSBldmVudCBsaXN0ZW5lciBmdW5jdGlvbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgcHJvcGVydHkgZm9yIGludGVycnVwdA0KICogdHJpZ2dlcmVkIHN5c3RlbXMgYW5kIGl0IGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgcG9sbGluZyBtZWNoYW5pc21zLg0KICovDQp0eXBlZGVmIHZvaWQgKCpNU1NfTUFDX2NhbGxiYWNrX3QpKHVpbnQzMl90IGV2ZW50cyk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBTdGF0aXN0aWNzIGNvdW50ZXIgaWRlbnRpZmllcnMgYXJlIHVzZWQgd2l0aCBNQUNfZ2V0X3N0YXRpc3RpY3Mgcm91dGluZSB0bw0KICogcmVjZWl2ZSB0aGUgY291bnQgb2YgdGhlIHJlcXVlc3RlZCBlcnJvcnMvaW50ZXJydXB0cyBvY2N1cnJlbmNlcy4NCiAqDQogKiBNU1NfTUFDX1JYX0lOVEVSUlVQVFMNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIG9jY3VycmVkLg0KICoNCiAqIE1TU19NQUNfUlhfRklMVEVSSU5HX0ZBSUwNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHdoaWNoIGRpZCBub3QgcGFzcyB0aGUNCiAqICAgICAgYWRkcmVzcyByZWNvZ25pdGlvbiBwcm9jZXNzLg0KICoNCiAqIE1TU19NQUNfUlhfREVTQ1JJUFRPUl9FUlJPUg0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgbm8gcmVjZWl2ZSBidWZmZXIgd2FzDQogKiAgICAgIGF2YWlsYWJsZSB3aGVuIHRyeWluZyB0byBzdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YS4NCiAqDQogKiBNU1NfTUFDX1JYX1JVTlRfRlJBTUUNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Y7IHRoZSBmcmFtZSBpcyBkYW1hZ2VkIGJ5IGENCiAqICAgICAgY29sbGlzaW9uIG9yIGJ5IGEgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIGJlZm9yZSB0aGUgZW5kIG9mIGEgY29sbGlzaW9uDQogKiAgICAgIHdpbmRvdy4NCiAqDQogKiBNU1NfTUFDX1JYX05PVF9GSVJTVA0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgc3RhcnQgb2YgdGhlIGZyYW1lIGlzIG5vdA0KICogICAgICB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiBhIGZyYW1lLg0KICoNCiAqIE1TU19NQUNfUlhfTk9UX0xBU1QNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Y7IGVuZCBvZiB0aGUgZnJhbWUgaXMgbm90DQogKiAgICAgIHRoZSBmaXJzdCBkZXNjcmlwdG9yIG9mIGEgZnJhbWUuDQogKg0KICogTVNTX01BQ19SWF9GUkFNRV9UT09fTE9ORw0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgYSBjdXJyZW50IGZyYW1lIGlzIGxvbmdlcg0KICogICAgICB0aGFuIG1heGltdW0gc2l6ZSBvZiAxLDUxOCBieXRlcywgYXMgc3BlY2lmaWVkIGJ5IDgwMi4zLg0KICoNCiAqIE1TU19NQUNfUlhfQ09MTElTSU9OX1NFRU4NCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Y7IGEgbGF0ZSBjb2xsaXNpb24gd2FzIHNlZW4NCiAqICAgICAgKGNvbGxpc2lvbiBhZnRlciA2NCBieXRlcyBmb2xsb3dpbmcgU0ZEKS4NCiAqDQogKiBNU1NfTUFDX1JYX0NSQ19FUlJPUg0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgYSBDUkMgZXJyb3IgaGFzIG9jY3VycmVkDQogKiAgICAgIGluIHRoZSByZWNlaXZlZCBmcmFtZS4NCiAqDQogKiBNU1NfTUFDX1JYX0ZJRk9fT1ZFUkZMT1cNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgZnJhbWVzIG5vdCBhY2NlcHRlZCBkdWUgdG8gdGhlIHJlY2VpdmUNCiAqICAgICAgRklGTyBvdmVyZmxvdy4NCiAqDQogKiBNU1NfTUFDX1JYX01JU1NFRF9GUkFNRQ0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBmcmFtZXMgbm90IGFjY2VwdGVkIGR1ZSB0byB0aGUNCiAqICAgICAgdW5hdmFpbGFiaWxpdHkgb2YgdGhlIHJlY2VpdmUgZGVzY3JpcHRvci4NCiAqDQogKiBNU1NfTUFDX1RYX0lOVEVSUlVQVFMNCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgaW50ZXJydXB0cyBvY2N1cnJlZC4NCiAqDQogKiBNU1NfTUFDX1RYX0xPU1NfT0ZfQ0FSUklFUg0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgYSBsb3NzIG9mIHRoZSBjYXJyaWVyDQogKiAgICAgIGR1cmluZyBhIHRyYW5zbWlzc2lvbi4NCiAqDQogKiBNU1NfTUFDX1RYX05PX0NBUlJJRVINCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Y7IHRoZSBjYXJyaWVyIHdhcyBub3QgYXNzZXJ0ZWQNCiAqICAgICAgYnkgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgZHVyaW5nIHRoZSB0cmFuc21pc3Npb24uDQogKg0KICogTVNTX01BQ19UWF9MQVRFX0NPTExJU0lPTg0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZjsgYSBjb2xsaXNpb24gd2FzIGRldGVjdGVkDQogKiAgICAgIGFmdGVyIHRyYW5zbWl0dGluZyA2NCBieXRlcy4NCiAqDQogKiBNU1NfTUFDX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04NCiAqICAgICAgVXNlZCB0byByZWNlaXZlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Y7IHRoZSB0cmFuc21pc3Npb24gd2FzIGFib3J0ZWQNCiAqICAgICAgYWZ0ZXIgMTYgcmV0cmllcy4NCiAqDQogKiBNU1NfTUFDX1RYX0NPTExJU0lPTl9DT1VOVA0KICogICAgICBVc2VkIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBjb2xsaXNpb25zIG9jY3VycmVkLg0KICoNCiAqIE1TU19NQUNfVFhfVU5ERVJGTE9XX0VSUk9SDQogKiAgICAgIFVzZWQgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mOyB0aGUgRklGTyB3YXMgZW1wdHkgZHVyaW5nDQogKiAgICAgIHRoZSBmcmFtZSB0cmFuc21pc3Npb24uDQogKi8NCnR5cGVkZWYgZW51bSB7DQoJTVNTX01BQ19SWF9JTlRFUlJVUFRTLA0KCU1TU19NQUNfUlhfRklMVEVSSU5HX0ZBSUwsDQoJTVNTX01BQ19SWF9ERVNDUklQVE9SX0VSUk9SLA0KCU1TU19NQUNfUlhfUlVOVF9GUkFNRSwNCglNU1NfTUFDX1JYX05PVF9GSVJTVCwNCglNU1NfTUFDX1JYX05PVF9MQVNULA0KCU1TU19NQUNfUlhfRlJBTUVfVE9PX0xPTkcsDQoJTVNTX01BQ19SWF9DT0xMSVNJT05fU0VFTiwNCglNU1NfTUFDX1JYX0NSQ19FUlJPUiwNCglNU1NfTUFDX1JYX0ZJRk9fT1ZFUkZMT1csDQoJTVNTX01BQ19SWF9NSVNTRURfRlJBTUUsDQoJDQoJTVNTX01BQ19UWF9JTlRFUlJVUFRTLA0KCU1TU19NQUNfVFhfTE9TU19PRl9DQVJSSUVSLA0KCU1TU19NQUNfVFhfTk9fQ0FSUklFUiwNCglNU1NfTUFDX1RYX0xBVEVfQ09MTElTSU9OLA0KCU1TU19NQUNfVFhfRVhDRVNTSVZFX0NPTExJU0lPTiwNCglNU1NfTUFDX1RYX0NPTExJU0lPTl9DT1VOVCwNCglNU1NfTUFDX1RYX1VOREVSRkxPV19FUlJPUg0KfSBtc3NfbWFjX3N0YXRpc3RpY3NfaWRfdDsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIEluaXRpYWxpemVzIGFuIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIGFuZCBkYXRhIHN0cnVjdHVyZXMuDQogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHJlcGFyZSB0aGUgRXRoZXJuZXQgQ29udHJvbGxlciBmb3IgZmlyc3QgdGltZSB1c2UgaW4gYQ0KICogZ2l2ZW4gaGFyZHdhcmUvc29mdHdhcmUgY29uZmlndXJhdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQ0KICogYW55IG90aGVyIEV0aGVybmV0IEFQSSBmdW5jdGlvbnMgYXJlIGNhbGxlZC4NCiAqDQogKiBJbml0aWFsaXphdGlvbiBvZiByZWdpc3RlcnMgLSBjb25maWcgcmVnaXN0ZXJzLCBlbmFibGUgVHgvUnggaW50ZXJydXB0cywNCiAqIGVuYWJsZSBUeC9SeCwgaW5pdGlhbGl6ZSBNQUMgYWRkciwgaW5pdCBQSFksIGF1dG9uZWdvdGlhdGlvbiwgTUFDIGFkZHJlc3MNCiAqIGZpbHRlciB0YWJsZSAodW5pY2FzdC9tdWx0aWNhc3QpL2hhc2ggaW5pdA0KICoNCiAqLw0Kdm9pZA0KTVNTX01BQ19pbml0DQooDQogICAgdWludDhfdCBwaHlfYWRkcmVzcw0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogU2V0cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgRXRoZXJuZXQgQ29udHJvbGxlci4NCiAqIEFmdGVyIHRoZSBNQUNfaW5pdCBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRoaXMgQVBJIGZ1bmN0aW9uIGNhbiBiZQ0KICogdXNlZCB0byBjb25maWd1cmUgdGhlIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhlIEV0aGVybmV0IENvbnRyb2xsZXIuDQogKg0KICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gVGhlIGxvZ2ljYWwgT1Igb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQogKiAgICAtICNNU1NfTUFDX0NGR19SRUNFSVZFX0FMTA0KICogICAgLSAjTVNTX01BQ19DRkdfVFJBTlNNSVRfVEhSRVNIT0xEX01PREUNCiAqICAgIC0gI01TU19NQUNfQ0ZHX1NUT1JFX0FORF9GT1JXQVJEDQogKiAgICAtICNNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF9bMDAsMDEsMTAsMTFdDQogKiAgICAtICNNU1NfTUFDX0NGR19GVUxMX0RVUExFWF9NT0RFDQogKiAgICAtICNNU1NfTUFDX0NGR19QQVNTX0FMTF9NVUxUSUNBU1QNCiAqICAgIC0gI01TU19NQUNfQ0ZHX1BST01JU0NVT1VTX01PREUNCiAqICAgIC0gI01TU19NQUNfQ0ZHX1BBU1NfQkFEX0ZSQU1FUw0KICogQHNlZSAgIE1BQ19nZXRfY29uZmlndXJhdGlvbigpDQogKi8NCnZvaWQNCk1TU19NQUNfY29uZmlndXJlDQooDQogICAgdWludDMyX3QgY29uZmlndXJhdGlvbg0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgRXRoZXJuZXQgQ29udHJvbGxlci4NCiAqIEFmdGVyIHRoZSBNQUNfaW5pdCBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRoaXMgQVBJIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvDQogKiBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIEV0aGVybmV0IENvbnRyb2xsZXIuDQogKg0KICogQHJldHVybiAgICAgICAgICAgICAgVGhlIGxvZ2ljYWwgT1Igb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQogKiAgICAtICNNU1NfTUFDX0NGR19SRUNFSVZFX0FMTA0KICogICAgLSAjTVNTX01BQ19DRkdfVFJBTlNNSVRfVEhSRVNIT0xEX01PREUNCiAqICAgIC0gI01TU19NQUNfQ0ZHX1NUT1JFX0FORF9GT1JXQVJEDQogKiAgICAtICNNU1NfTUFDX0NGR19USFJFU0hPTERfQ09OVFJPTF9bMDAsMDEsMTAsMTFdDQogKiAgICAtICNNU1NfTUFDX0NGR19GVUxMX0RVUExFWF9NT0RFDQogKiAgICAtICNNU1NfTUFDX0NGR19QQVNTX0FMTF9NVUxUSUNBU1QNCiAqICAgIC0gI01TU19NQUNfQ0ZHX1BST01JU0NVT1VTX01PREUNCiAqICAgIC0gI01TU19NQUNfQ0ZHX0lOVkVSU0VfRklMVEVSSU5HDQogKiAgICAtICNNU1NfTUFDX0NGR19QQVNTX0JBRF9GUkFNRVMNCiAqICAgIC0gI01TU19NQUNfQ0ZHX0hBU0hfT05MWV9GSUxURVJJTkdfTU9ERQ0KICogICAgLSAjTVNTX01BQ19DRkdfSEFTSF9QRVJGRUNUX1JFQ0VJVkVfRklMVEVSSU5HX01PREUNCiAqIEBzZWUgICBNQUNfY29uZmlndXJlKCkNCiAqLw0KaW50MzJfdA0KTVNTX01BQ19nZXRfY29uZmlndXJhdGlvbg0KKA0KICAgIHZvaWQNCik7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgU2VuZHMgYSBwYWNrZXQgZnJvbSB0aGUgdUlQIHN0YWNrIHRvIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLg0KICBUaGUgTVNTX01BQ190eF9wYWNrZXQoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBwYWNrZXQgdG8gdGhlIE1TUyBFdGhlcm5ldA0KICBNQUMuIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHVpcF9sZW4gYnl0ZXMgb2YgdGhlIHBhY2tldCBjb250YWluZWQgaW4gdWlwX2J1ZiBpbnRvDQogIHRoZSB0cmFuc21pdCBGSUZPIGFuZCB0aGVuIGFjdGl2YXRlcyB0aGUgdHJhbnNtaXR0ZXIgZm9yIHRoaXMgcGFja2V0LiBJZiBzcGFjZQ0KICBpcyBhdmFpbGFibGUgaW4gdGhlIEZJRk8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBvbmNlIHBhY19sZW4gYnl0ZXMgb2YgdGhlDQogIHBhY2tldCBoYXZlIGJlZW4gcGxhY2VkIGludG8gdGhlIEZJRk8gYW5kIHRoZSB0cmFuc21pdHRlciBoYXMgYmVlbiBzdGFydGVkLg0KICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHdhaXQgZm9yIHRoZSB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuDQoNCiAgQHJldHVybg0KICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgYSB0aW1lb3V0IG9jY3VycyBvdGhlcndpc2UgaXQgcmV0dXJucyBzaXplIG9mIHRoZSBwYWNrZXQuDQoNCiAgQHNlZSAgIE1BQ19yeF9wYWNrZXQoKQ0KICovDQoNCmludDMyX3QNCk1TU19NQUNfdHhfcGFja2V0DQooDQogICAgdW5zaWduZWQgc2hvcnQgdXNMZW5ndGgNCik7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBSZXR1cm5zIGF2YWlsYWJsZSBwYWNrZXQncyBzaXplLg0KICoNCiAqIEByZXR1cm4gICAgICAgICAgICAgIFNpemUgb2YgcGFja2V0LCBiaWdnZXIgdGhhbiAwLCBpZiBhIHBhY2tldCBpcyBhdmFpbGFibGUsDQogKiAgICAgICAgICAgICAgICAgICAgICBpZiBub3QsIHJldHVybnMgMC4NCiAqIEBzZWUgICBNQUNfcnhfcGFja2V0KCkNCiAqLw0KaW50MzJfdA0KTVNTX01BQ19yeF9wY2t0X3NpemUNCigNCiAgICB2b2lkDQopOw0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFByZXBhcmVzIHRoZSBSWCBkZXNjcmlwdG9yIGZvciByZWNlaXZpbmcgcGFja2V0cy4NCiAqDQogKiBAcmV0dXJuICAgICAgICAgICAgICB2b2lkDQogKiBAc2VlICAgTUFDX3J4X3BhY2tldCgpDQogKi8NCnZvaWQNCk1TU19NQUNfcHJlcGFyZV9yeF9kZXNjcmlwdG9yDQooDQogICAgdm9pZA0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFJlY2VpdmVzIGEgcGFja2V0IGZyb20gdGhlIEV0aGVybmV0IENvbnRyb2xsZXIgaW50byB0aGUgdUlQIHN0YWNrLg0KICogVGhpcyBmdW5jdGlvbiByZWFkcyBhIHBhY2tldCBmcm9tIHRoZSByZWNlaXZlIEZJRk8gb2YgdGhlIGNvbnRyb2xsZXIgYW5kDQogKiBwbGFjZXMgaXQgaW50byB1aXBfYnVmLg0KDQogKiBAcmV0dXJuICAgICAgICAgICAgICBTaXplIG9mIHBhY2tldCBpZiBwYWNrZXQgZml0cyBpbiB1aXBfYnVmLg0KICogCQkJCQkgICAgMCBpZiB0aGVyZSBpcyBubyByZWNlaXZlZCBwYWNrZXQuDQogKiBAc2VlICAgTUFDX3J4X3Bja3Rfc2l6ZSgpDQogKiBAc2VlICAgTUFDX3R4X3BhY2tldCgpDQogKi8NCmludDMyX3QNCk1TU19NQUNfcnhfcGFja2V0DQooDQoJdm9pZA0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBSZWNlaXZlcyBhIHBhY2tldCBmcm9tIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLg0KICBUaGUgTVNTX01BQ19yeF9wYWNrZXRfcHRyc2V0KCkgZnVuY3Rpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBNU1NfTUFDX3J4X3BhY2tldCgpDQogIGZ1bmN0aW9uLCBpbiB0aGF0IGl0IHJlY2VpdmVzIGRhdGEgZnJvbSB0aGUgTVNTIEV0aGVybmV0IE1BQy4gVGhlIGRpZmZlcmVuY2UNCiAgaXMgdGhhdCBpdCBzZXRzIHBhY0RhdGEgdG8gcG9pbnQgdG8gdGhlIG1lbW9yeSBidWZmZXIgd2hlcmUgdGhlIE1TUyBFdGhlcm5ldA0KICBNQUMgY29waWVkIHRoZSByZWNlaXZlZCBwYWNrZXQgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSByZWNlaXZlZCBwYWNrZXQgaW50byBhDQogIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24uIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBkYXRhIGlzDQogIHVzZWQgYnkgdGhlIHVzZXIgYXBwbGljYXRpb24gb3IgY29waWVkIHRvIGFub3RoZXIgYnVmZmVyLCB0aGUNCiAgTVNTX01BQ19wcmVwYXJlX3J4X2Rlc2NyaXB0b3IoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byBmcmVlIHVwIHRoZSByZWNlaXZlDQogIG1lbW9yeSBidWZmZXIgdXNlZCBieSB0aGUgTVNTIEV0aGVybmV0IE1BQw0KDQogIEBwYXJhbSBwYWNEYXRhDQogICBUaGUgcGFjRGF0YSBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJ1ZmZlciBwb2ludGVyLiBUaGUgdWludDhfdA0KICAgcG9pbnRlciBwb2ludGVkIHRvIGJ5IHRoZSBwYWNEYXRhIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlDQogICBtZW1vcnkgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIHBhY2tldCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuIFRoZQ0KICAgdmFsdWUgb2YgcGFjRGF0YSBpcyBvbmx5IHZhbGlkIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gemVybywNCiAgIGluZGljYXRpbmcgdGhhdCBhIHBhY2tldCB3YXMgcmVjZWl2ZWQuDQoNCiAgQHBhcmFtIHRpbWVfb3V0DQogICAgVGhlIHRpbWVfb3V0IHBhcmFtZXRlciBpcyB0aGUgdGltZW91dCB2YWx1ZSBmb3IgdGhlIHRyYW5zbWlzc2lvbiBpbiBtaWxsaXNlY29uZHMuDQogICAgVGhlIHRpbWVfb3V0IHBhcmFtZXRlciB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KICAgICAgICCVIFVuc2lnbmVkIGludGVnZXIgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAweDAxMDAwMDAwDQogICAgICAgIJUgTVNTX01BQ19CTE9DS0lORyCWIHRoZXJlIHdpbGwgYmUgbm8gdGltZW91dC4NCiAgICAgICAglSBNU1NfTUFDX05PTkJMT0NLSU5HIJYgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIG5vIHBhY2tldHMNCiAgICAgICAgICBoYXZlIGJlZW4gcmVjZWl2ZWQuDQoNCiAgQHJldHVybg0KICAJVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHBhY2tldCBpZiB0aGUgcGFja2V0IGZpdHMgaW4gcGFjRGF0YS4NCiAgICBSZXR1cm5zIHplcm8gaWYgdGhlcmUgaXMgbm8gcmVjZWl2ZWQgcGFja2V0Lg0KDQogIEBzZWUgICBNQUNfcnhfcGNrdF9zaXplKCkNCiAgQHNlZSAgIE1BQ190eF9wYWNrZXQoKQ0KICovDQppbnQzMl90DQpNU1NfTUFDX3J4X3BhY2tldF9wdHJzZXQNCigNCiAgICB1aW50OF90ICoqcGFjRGF0YSwNCiAgICB1aW50MzJfdCB0aW1lX291dA0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFJldHVybnMgdGhlIHN0YXR1cyBvZiBjb25uZWN0aW9uIGJ5IHJlYWRpbmcgaXQgZnJvbSB0aGUgUEhZLg0KICoNCiAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBsb2dpY2FsIE9SIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KICogICAgICAjTVNTX01BQ19MSU5LX1NUQVRVU19MSU5LICAgIC0gTGluayB1cC9kb3duDQogKiAgICAgICNNU1NfTUFDX0xJTktfU1RBVFVTXzEwME1CICAgLSBDb25uZWN0aW9uIGlzIDEwME1iLzEwTWINCiAqICAgICAgI01TU19NQUNfTElOS19TVEFUVVNfRkRYICAgICAtIENvbm5lY3Rpb24gaXMgZnVsbC9oYWxmIGR1cGxleA0KICogQHNlZSAgIE1BQ19hdXRvX3NldHVwX2xpbmsoKQ0KICovDQppbnQzMl90DQpNU1NfTUFDX2xpbmtfc3RhdHVzDQooDQogICAgdm9pZA0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogU2V0dXBzIHRoZSBsaW5rIGJldHdlZW4gUEhZIGFuZCBNQUMgYW5kIHJldHVybnMgdGhlIHN0YXR1cyBvZiBjb25uZWN0aW9uLg0KICoNCiAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBsb2dpY2FsIE9SIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KICogICAgICAjTVNTX01BQ19MSU5LX1NUQVRVU19MSU5LICAgIC0gTGluayB1cC9kb3duDQogKiAgICAgICNNU1NfTUFDX0xJTktfU1RBVFVTXzEwME1CICAgLSBDb25uZWN0aW9uIGlzIDEwME1iLzEwTWINCiAqICAgICAgI01TU19NQUNfTElOS19TVEFUVVNfRkRYICAgICAtIENvbm5lY3Rpb24gaXMgZnVsbC9oYWxmIGR1cGxleA0KICogQHNlZSAgIE1BQ19saW5rX3N0YXR1cygpDQogKi8NCmludDMyX3QNCk1TU19NQUNfYXV0b19zZXR1cF9saW5rDQooDQogICAgdm9pZA0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogU2V0cyBtYWMgYWRkcmVzcy4NCiAqDQogKiBAcGFyYW0gbmV3X2FkZHJlc3MgICBQb2ludGVyIHRvIHRoZW4gbmV3IGFkZHJlc3MgdmFsdWUgKDYgYnl0ZXMgb2YgZGF0YSkNCiAqIEBzZWUgICBNQUNfZ2V0X21hY19hZGRyZXNzKCkNCiAqLw0Kdm9pZA0KTVNTX01BQ19zZXRfbWFjX2FkZHJlc3MNCigNCiAgICBjb25zdCB1aW50OF90ICpuZXdfYWRkcmVzcw0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogUmV0dXJucyBtYWMgYWRkcmVzcy4NCiAqDQogKiBAcGFyYW0gYWRkcmVzcyAgICAgICBQb2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgdG8gcmVjZWl2ZSB0aGUgTUFDIGFkZHJlc3MuDQogKiBAc2VlICAgTUFDX3NldF9tYWNfYWRkcmVzcygpDQogKi8NCnZvaWQNCk1TU19NQUNfZ2V0X21hY19hZGRyZXNzDQooDQogICAgdWludDhfdCAqYWRkcmVzcw0KKTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogU2V0cyBtYWMgYWRkcmVzcyBmaWx0ZXJzLg0KICogSWYgbGVzcyB0aGFuIDE1IGFkZHJlc3NlcyBhcmUgc3Vic2NyaWJlZCwgc3lzdGVtIHdvcmtzIG9uIHBlcmZlY3QgZmlsdGVyaW5nIG1vZGUNCiAqIGVsc2Ugc3lzdGVtIHdvcmtzIGluIGhhc2ggdGFibGUgbW9kZQ0KICoNCiAqIEBwYXJhbSBmaWx0ZXJfY291bnQgIG51bWJlciBvZiBhZGRyZXNzZXMNCiAqIEBwYXJhbSBmaWx0ZXJzICAgICAgIFBvaW50ZXIgdG8gYWRkcmVzc2VzIHRvIGJlIGZpbHRlcmVkDQogKi8NCnZvaWQNCk1TU19NQUNfc2V0X21hY19maWx0ZXJzDQooDQogICAgdWludDE2X3QgZmlsdGVyX2NvdW50LA0KCWNvbnN0IHVpbnQ4X3QgKmZpbHRlcnMNCik7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBTZXRzIE1BQyBldmVudCBsaXN0ZW5lci4NCiAqIFNldHMgdGhlIGdpdmVuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIHRyaWdnZXJlZCBpbnNpZGUgTUFDX2lzcigpLg0KICogQXNzaWduaW5nIE5VTEwgcG9pbnRlciBhcyB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIGl0Lg0KICoNCiAqIEBwYXJhbSBsaXN0ZW5lciAgICAgIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYSBNU1NfTUFDX2NhbGxiYWNrX3QgZnVuY3Rpb24NCiAqIEBzZWUgICBNQUNfaXNyKCkNCiAqLw0Kdm9pZA0KTVNTX01BQ19zZXRfY2FsbGJhY2sNCigNCiAgICBNU1NfTUFDX2NhbGxiYWNrX3QgbGlzdGVuZXINCik7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFJldHVybnMgZGVzY3JpcHRpb24gb2YgbGF0ZXN0IGVycm9yIGhhcHBlbmVkLg0KICoNCiAqIEByZXR1cm4gICAgICAgICAgICAgIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiBUaGlzIHN0cmluZyBtdXN0IG5vdCBiZQ0KICogCQkJCQkJbW9kaWZpZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KICovDQpjb25zdCBpbnQ4X3QqDQpNU1NfTUFDX2xhc3RfZXJyb3INCigNCiAgICB2b2lkDQopOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBSZXR1cm5zIHN0YXRpc3RpY3MgY291bnRlciBvZiBzdGF0X2lkIGlkZW50aWZpZXIuDQogKg0KICogQHBhcmFtIHN0YXRfaWQJCUlkZW50aWZpZXIgb2Ygc3RhdGlzdGljcyBjb3VudGVyLg0KICogQHJldHVybgkJCQlTdGF0aXN0aWNzIGNvdW50ZXIgb2Ygc3RhdF9pZCBpZGVudGlmaWVyLg0KICogCQkJCQkJT24gZXJyb3IgcmV0dXJucyAwLg0KICovDQp1aW50MzJfdA0KTVNTX01BQ19nZXRfc3RhdGlzdGljcw0KKA0KCW1zc19tYWNfc3RhdGlzdGljc19pZF90IHN0YXRfaWQNCik7DQoNCi8qDQogKiBUaGUgZG91YmxlIFR4IGhhcyBjb21wbGV0ZWQuICBIYW5kIGJhY2sgdGhlIFR4IGJ1ZmZlciB0byB0aGUgY29udHJvbCBvZg0KICogdGhlIE1BQyBoYXJkd2FyZS4NCiAqLw0Kdm9pZCBNU1NfTUFDX0ZyZWVUeEJ1ZmZlcnMoIHZvaWQgKTsNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZgkvKiBfX01TU19FVEhFUk5FVF9NQUNfSCAqLw0KDQo=