LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIKkgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQoqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCiogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCiogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KKiBPRiBUSEVTRSBURVJNUy4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKiogQGZpbGUgcGxhdGZvcm0uaA0KICpNRUMxNHh4IHBsYXRmb3JtL2NwdSBhYnN0cmFjdGlvbnMNCiAqLw0KLyoqIEBkZWZncm91cCBNRUMxNHh4DQogKi8NCg0KI2lmbmRlZiBfUExBVEZPUk1fSA0KI2RlZmluZSBfUExBVEZPUk1fSA0KDQojaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX21pcHNfXykNCg0KI2lmIGRlZmluZWQoX19YQzMyX18pICAvLyBNaWNyb2NoaXAgWEMzMiBHQ0MNCg0KLyogUHVsbCBpbiBNSVBTMzIgc3BlY2lmaWMgc3BlY2lhbCBpbnN0cnVjdGlvbnMgaW5zdHJpbnNpY3MgZm9yDQogKiBpbnRlcnJ1cHQgY29udHJvbCwgTk9QLCBXYWl0LWZvci1JbnRlcnJ1cHQgYW5kIGFjY2Vzc2luZw0KICogTVNSJ3MuDQogKiBJc3N1ZTogTVBMQUItWCBJREUgZWRpdG9yIGFuZCB0aGUgQ1BVIG1hY3JvcyBpbiB4Yy5oICYgY3AwZGVmcy5oLg0KICogVGhlIElERSBlZGl0b3Igd2lsbCBzaG93IHJlZCAhIG9uIGV2ZXJ5IGxpbmUgb2YgY29kZSB1c2luZyB0aGUgYWJvdmUNCiAqIG1hY3JvcyBkdWUgdG8gYSBidWcgaW4gdGhlIElERSdzIEMgbGFuZ3VhZ2UgcHJlcHJvY2Vzc29yLg0KICovDQojaW5jbHVkZSA8eGMuaD4NCg0KI2RlZmluZSBDUFVfRElTQUJMRV9JTlRFUlJVUFRTKCkgX19idWlsdGluX2Rpc2FibGVfaW50ZXJydXB0cygpDQojZGVmaW5lIENQVV9HRVRfRElTQUJMRV9JTlRFUlJVUFRTKHgpIHsgeD1fQ1AwX0dFVF9TVEFUVVMoKSYweDF1bDsgX19idWlsdGluX2Rpc2FibGVfaW50ZXJydXB0cygpIH0NCiNkZWZpbmUgQ1BVX0VOQUJMRV9JTlRFUlJVUFRTKCkgX19idWlsdGluX2VuYWJsZV9pbnRlcnJ1cHRzKCkNCiNkZWZpbmUgQ1BVX1JFU1RPUkVfSU5URVJSVVBUUyh4KSB7IGlmICh4KSB7IF9fYnVpbHRpbl9lbmFibGVfaW50ZXJydXB0cygpOyB9IH0NCg0KI2RlZmluZSBEaXNhYmxlX0lycSgpICAgQ1BVX0RJU0FCTEVfSU5URVJSVVBUUygpDQojZGVmaW5lIEVuYWJsZV9JcnEoKSAgICBDUFVfRU5BQkxFX0lOVEVSUlVQVFMoKQ0KDQojZGVmaW5lIF9fQ0xaKHgpIF9fYnVpbHRpbl9jbHooeCkNCiNkZWZpbmUgX19DVFooeCkgX19idWlsdGluX2N0eiAoeCkNCiNkZWZpbmUgX19DTE8oeCkgX2Nsbyh4KQ0KDQojZGVmaW5lIF9fSU5TKHRndCx2YWwscG9zLHN6KSBfaW5zKHRndCx2YWwscG9zLHN6KQ0KI2RlZmluZSBfX0VYVCh4LHBvcyxzeikgX2V4dCh4LHBvcyxzeikNCg0KI2RlZmluZSBDUFVfTk9QKCkgX19hc21fXyBfX3ZvbGF0aWxlICgiJShzc25vcCUpIiA6IDopDQoNCiNkZWZpbmUgQ1BVX1dBSVRfRk9SX0lOVFIoKSBfX2FzbV9fIF9fdm9sYXRpbGUgKCJ3YWl0IikNCg0KI2RlZmluZSBfX1JFVih4KSBfYnN3YXB3KHgpDQoNCiNkZWZpbmUgX19FSEIoKSBfZWhiKCkNCg0KI2Vsc2UNCg0KLyogSW5jbHVkZSBNSVBTIHNwZWNpZmljIGlubGluZSBhc3NlbWJseSBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZw0KICogTUlQUyBDUDAgcmVnaXN0ZXJzLCBOT1AsIFdBSVQsIEFTRVQsIEFDTFIsIGJ5dGUtcmV2ZXJzZSwgZXRjLg0KICovDQojaW5jbHVkZSAibWlwc2NwdS5oIg0KDQoNCiNkZWZpbmUgQ1BVX0RJU0FCTEVfSU5URVJSVVBUUygpICAJbWlwczMycjJfZGlzX2ludHIoKQ0KI2RlZmluZSBDUFVfR0VUX0RJU0FCTEVfSU5URVJSVVBUUyh4KSB4PW1pcHMzMnIyX2Rpc19pbnRyKCkNCiNkZWZpbmUgQ1BVX0VOQUJMRV9JTlRFUlJVUFRTKCkgbWlwczMycjJfZW5faW50cigpDQojZGVmaW5lIENQVV9SRVNUT1JFX0lOVEVSUlVQVFMoeCkgbWlwczMycjJfcmVzdG9yZV9pbnRyKHgpDQoNCiNkZWZpbmUgRGlzYWJsZV9JcnEoKSAgIENQVV9ESVNBQkxFX0lOVEVSUlVQVFMoKQ0KI2RlZmluZSBFbmFibGVfSXJxKCkgICAgQ1BVX0VOQUJMRV9JTlRFUlJVUFRTKCkNCg0KI2RlZmluZSBfX0NMWih4KSBfX2J1aWx0aW5fY2x6KHgpDQojZGVmaW5lIF9fQ1RaKHgpIF9fYnVpbHRpbl9jdHogKHgpDQoNCiNkZWZpbmUgX19DTE8oeCkgX19leHRlbnNpb25fXyh7IFwNCiAgICB1bnNpZ25lZCBpbnQgX194ID0gKHgpOyBcDQogICAgdW5zaWduZWQgaW50IF9fdjsgXA0KICAgIF9fYXNtX18gKCJjbG8gJTAsJTEiIDogIj1kIiAoX192KSA6ICJkIiAoX194KSk7IFwNCiAgICBfX3Y7IFwNCn0pDQoNCi8qIE1JUFMzMnIyIGluc2VydCBiaXRzICovDQojZGVmaW5lIF9fSU5TKHRndCx2YWwscG9zLHN6KSBfX2V4dGVuc2lvbl9fKHsgXA0KICAgIHVuc2lnbmVkIGludCBfX3QgPSAodGd0KSwgX192ID0gKHZhbCk7IFwNCiAgICBfX2FzbV9fICgiaW5zICUwLCV6MSwlMiwlMyIgXA0KICAgICAgICAgICAgIDogIitkIiAoX190KSBcDQogICAgICAgICAgICAgOiAiZEoiIChfX3YpLCAiSSIgKHBvcyksICJJIiAoc3opKTsgXA0KICAgIF9fdDsgXA0KfSkNCg0KLyogTUlQUzMycjIgZXh0cmFjdCBiaXRzICovDQojZGVmaW5lIF9fRVhUKHgscG9zLHN6KSBfX2V4dGVuc2lvbl9fKHsgXA0KICAgIHVuc2lnbmVkIGludCBfX3ggPSAoeCksIF9fdjsgXA0KICAgIF9fYXNtX18gKCJleHQgJTAsJXoxLCUyLCUzIiBcDQogICAgICAgICAgICAgOiAiPWQiIChfX3YpIFwNCiAgICAgICAgICAgICA6ICJkSiIgKF9feCksICJJIiAocG9zKSwgIkkiIChzeikpOyBcDQogICAgX192OyBcDQp9KQ0KDQojZGVmaW5lIENQVV9OT1AoKSBfX2FzbV9fIF9fdm9sYXRpbGUgKCIlKHNzbm9wJSkiIDogOikNCg0KI2RlZmluZSBDUFVfV0FJVF9GT1JfSU5UUigpIF9fYXNtX18gX192b2xhdGlsZSAoIndhaXQiKQ0KDQojZGVmaW5lIF9fUkVWKHgpIG1pcHMzMnIyX3Jldl93b3JkKHgpDQoNCiNkZWZpbmUgX19FSEIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiUoZWhiJSkiIDogOikNCg0KI2RlZmluZSBfQ1AwX0dFVF9CQURWQUREUigpIG1pcHMzMnIyX2NwMF9iYWR2YWRkcl9nZXQoKQ0KDQojZGVmaW5lIF9DUDBfR0VUX0NPVU5UKCkgbWlwczMycjJfY3AwX2NvdW50X2dldCgpDQojZGVmaW5lIF9DUDBfU0VUX0NPVU5UKHZhbCkgbWlwczMycjJfY3AwX2NvdW50X3NldCgodW5zaWduZWQgbG9uZyl2YWwpDQoNCiNkZWZpbmUgX0NQMF9HRVRfQ09NUEFSRSgpIG1pcHMzMnIyX2NwMF9jb21wYXJlX2dldCgpDQojZGVmaW5lIF9DUDBfU0VUX0NPTVBBUkUodmFsKSBtaXBzMzJyMl9jcDBfY29tcGFyZV9zZXQoKHVuc2lnbmVkIGxvbmcpdmFsKQ0KDQojZGVmaW5lIF9DUDBfR0VUX1NUQVRVUygpIG1pcHMzMnIyX2NwMF9zdGF0dXNfZ2V0KCkNCiNkZWZpbmUgX0NQMF9TRVRfU1RBVFVTKHZhbCkgbWlwczMycjJfY3AwX3N0YXR1c19zZXQoKHVuc2lnbmVkIGxvbmcpdmFsKQ0KI2RlZmluZSBfQ1AwX0JJQ19TVEFUVVModmFsKSBtaXBzMzJyMl9jcDBfc3RhdHVzX2JpYyh2YWwpDQojZGVmaW5lIF9DUDBfQklTX1NUQVRVUyh2YWwpIG1pcHMzMnIyX2NwMF9zdGF0dXNfYmlzKHZhbCkNCg0KI2RlZmluZSBfQ1AwX0dFVF9JTlRDVEwoKSBtaXBzMzJyMl9jcDBfaW50Y3RsX2dldCgpDQojZGVmaW5lIF9DUDBfU0VUX0lOVENUTCh2YWwpICBtaXBzMzJyMl9jcDBfaW50Y3RsX3NldCgodW5zaWduZWQgbG9uZyl2YWwpDQoNCiNkZWZpbmUgX0NQMF9HRVRfVklFV19JUEwoKSBtaXBzMzJyMl9jcDBfdmlld19pcGxfZ2V0KCkNCiNkZWZpbmUgX0NQMF9TRVRfVklFV19JUEwodmFsKSAgbWlwczMycjJfY3AwX3ZpZXdfaXBsX3NldCgodW5zaWduZWQgbG9uZyl2YWwpDQoNCiNkZWZpbmUgX0NQMF9HRVRfQ0FVU0UoKSBtaXBzMzJyMl9jcDBfY2F1c2VfZ2V0KCkNCiNkZWZpbmUgX0NQMF9TRVRfQ0FVU0UodmFsKSBtaXBzMzJyMl9jcDBfY2F1c2Vfc2V0KCh1bnNpZ25lZCBsb25nKXZhbCkNCiNkZWZpbmUgX0NQMF9CSUNfQ0FVU0UodmFsKSBtaXBzMzJyMl9jcDBfY2F1c2VfYmljKCh1bnNpZ25lZCBsb25nKXZhbCkNCiNkZWZpbmUgX0NQMF9CSVNfQ0FVU0UodmFsKSBtaXBzMzJyMl9jcDBfY2F1c2VfYmlzKCh1bnNpZ25lZCBsb25nKXZhbCkNCg0KI2RlZmluZSBfQ1AwX0dFVF9WSUVXX1JJUEwoKSBtaXBzMzJyMl9jcDBfdmlld19yaXBsX2dldCgpDQojZGVmaW5lIF9DUDBfU0VUX1ZJRVdfUklQTCh2YWwpIG1pcHMzMnIyX2NwMF92aWV3X3JpcGxfc2V0KCh1bnNpZ25lZCBsb25nKXZhbCkNCg0KI2RlZmluZSBfQ1AwX0dFVF9FUEMoKSBtaXBzMzJyMl9jcDBfZXBjX2dldCgpDQojZGVmaW5lIF9DUDBfU0VUX0VQQyh2YWwpIG1pcHMzMnIyX2NwMF9lcGNfc2V0KCh1bnNpZ25lZCBsb25nKXZhbCkNCg0KI2RlZmluZSBfQ1AwX0dFVF9FQkFTRSgpIG1pcHMzMnIyX2NwMF9lYmFzZV9nZXQoKQ0KI2RlZmluZSBfQ1AwX1NFVF9FQkFTRSh2YWwpICBtaXBzMzJyMl9jcDBfZWJhc2Vfc2V0KCh1bnNpZ25lZCBsb25nKXZhbCkNCg0KI2RlZmluZSBfQ1AwX0dFVF9DT05GSUcoKSBtaXBzMzJyMl9jcDBfY29uZmlnX2dldCgpDQojZGVmaW5lIF9DUDBfR0VUX0NPTkZJRzMoKSBtaXBzMzJyMl9jcDBfY29uZmlnM19nZXQoKQ0KDQojZGVmaW5lIF9DUDBfR0VUX0RFUEMoKSBtaXBzMzJyMl9jcDBfZGVwY19nZXQoKQ0KDQojZW5kaWYNCg0KI2Vsc2UgIC8vIEFueSBvdGhlciBjb21waWxlcg0KDQojZXJyb3IgIkZPUkNFRCBCVUlMRCBFUlJPUjogVW5rbm93biBjb21waWxlciINCg0KI2VuZGlmDQoNCi8qDQpOZWVkIHRvIGRlZmluZSBOVUxMDQoqLw0KI2lmbmRlZiBOVUxMDQogICAgI2lmZGVmIF9fQ1BMVVNQTFVTX18NCiAgICAjZGVmaW5lIE5VTEwgICAgICAgICAgICAwDQogICAgI2Vsc2UNCiAgICAjZGVmaW5lIE5VTEwgICAgICAgICAgICAoKHZvaWQgKikwKQ0KICAgICNlbmRpZg0KI2VuZGlmDQoNCiNlbmRpZiAvLyAjaWZuZGVmIF9QTEFURk9STV9IDQovKiogICBAfQ0KICovDQo=