LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlIFJlY29yZGVyIExpYnJhcnkgZm9yIFRyYWNlYWx5emVyIHYzLjAuMg0KICogUGVyY2VwaW8gQUIsIHd3dy5wZXJjZXBpby5jb20NCiAqDQogKiB0cmNTdHJlYW1Qb3J0LmgNCiAqDQogKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdHJhY2Ugc3RyZWFtaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSANCiAqIFRyYWNlIFJlY29yZGVyIExpYnJhcnkuIEl0IGNvbWVzIHByZWNvbmZpZ3VyZWQgZm9yIHVzZSB3aXRoIFNFR0dFUidzIFJUVCBhbmQNCiAqIGEgVENQL0lQIChuZWVkcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gaW4gdHJjVENQSVBDb25maWcuaCkuDQogKg0KICogVGVybXMgb2YgVXNlDQogKiBUaGlzIHNvZnR3YXJlICh0aGUgIlRyYWNlYWx5emVyIFJlY29yZGVyIExpYnJhcnkiKSBpcyB0aGUgaW50ZWxsZWN0dWFsDQogKiBwcm9wZXJ0eSBvZiBQZXJjZXBpbyBBQiBhbmQgbWF5IG5vdCBiZSBzb2xkIG9yIGluIG90aGVyIHdheXMgY29tbWVyY2lhbGx5DQogKiByZWRpc3RyaWJ1dGVkIHdpdGhvdXQgZXhwbGljaXQgd3JpdHRlbiBwZXJtaXNzaW9uIGJ5IFBlcmNlcGlvIEFCLg0KICoNCiAqIFNlcGFyYXRlIGNvbmRpdGlvbnMgYXBwbGllcyBmb3IgdGhlIFNFR0dFUiBicmFuZGVkIHNvdXJjZSBjb2RlIGluY2x1ZGVkLg0KICoNCiAqIFRoZSByZWNvcmRlciBsaWJyYXJ5IGlzIGZyZWUgZm9yIHVzZSB0b2dldGhlciB3aXRoIFBlcmNlcGlvIHByb2R1Y3RzLg0KICogWW91IG1heSBkaXN0cmlidXRlIHRoZSByZWNvcmRlciBsaWJyYXJ5IGluIGl0cyBvcmlnaW5hbCBmb3JtLCBidXQgcHVibGljDQogKiBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgcmVxdWlyZSBhcHByb3ZhbCBieSBQZXJjZXBpbyBBQi4NCiAqDQogKiBEaXNjbGFpbWVyDQogKiBUaGUgdHJhY2UgdG9vbCBhbmQgcmVjb3JkZXIgbGlicmFyeSBpcyBiZWluZyBkZWxpdmVyZWQgdG8geW91IEFTIElTIGFuZA0KICogUGVyY2VwaW8gQUIgbWFrZXMgbm8gd2FycmFudHkgYXMgdG8gaXRzIHVzZSBvciBwZXJmb3JtYW5jZS4gUGVyY2VwaW8gQUIgZG9lcw0KICogbm90IGFuZCBjYW5ub3Qgd2FycmFudCB0aGUgcGVyZm9ybWFuY2Ugb3IgcmVzdWx0cyB5b3UgbWF5IG9idGFpbiBieSB1c2luZyB0aGUNCiAqIHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24uIFBlcmNlcGlvIEFCIG1ha2Ugbm8gd2FycmFudGllcywgZXhwcmVzcyBvcg0KICogaW1wbGllZCwgYXMgdG8gbm9uaW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cywgbWVyY2hhbnRhYmlsaXR5LCBvcg0KICogZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSW4gbm8gZXZlbnQgd2lsbCBQZXJjZXBpbyBBQiwgaXRzDQogKiB0ZWNobm9sb2d5IHBhcnRuZXJzLCBvciBkaXN0cmlidXRvcnMgYmUgbGlhYmxlIHRvIHlvdSBmb3IgYW55IGNvbnNlcXVlbnRpYWwsDQogKiBpbmNpZGVudGFsIG9yIHNwZWNpYWwgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBsb3N0IHByb2ZpdHMgb3IgbG9zdCBzYXZpbmdzLA0KICogZXZlbiBpZiBhIHJlcHJlc2VudGF0aXZlIG9mIFBlcmNlcGlvIEFCIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5DQogKiBvZiBzdWNoIGRhbWFnZXMsIG9yIGZvciBhbnkgY2xhaW0gYnkgYW55IHRoaXJkIHBhcnR5LiBTb21lIGp1cmlzZGljdGlvbnMgZG8NCiAqIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCBvciBzcGVjaWFsDQogKiBkYW1hZ2VzLCBvciB0aGUgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcyBvciBsaW1pdGF0aW9ucyBvbiBob3cgbG9uZyBhbg0KICogaW1wbGllZCB3YXJyYW50eSBtYXkgbGFzdCwgc28gdGhlIGFib3ZlIGxpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8geW91Lg0KICoNCiAqIFRhYnMgYXJlIHVzZWQgZm9yIGluZGVudCBpbiB0aGlzIGZpbGUgKDEgdGFiID0gNCBzcGFjZXMpDQogKg0KICogQ29weXJpZ2h0IFBlcmNlcGlvIEFCLCAyMDE1Lg0KICogd3d3LnBlcmNlcGlvLmNvbQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmbmRlZiBfVFJDX1NUUkVBTV9QT1JUX0gNCiNkZWZpbmUgX1RSQ19TVFJFQU1fUE9SVF9IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuIJNDlCB7DQojZW5kaWYNCg0KI2lmIChVU0VfVFJBQ0VBTFlaRVJfUkVDT1JERVIgPT0gMSkNCg0KI2RlZmluZSBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0pMSU5LX1JUVF9CTE9DSwkoMHgwMSkNCiNkZWZpbmUgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9KTElOS19SVFRfTk9CTE9DSwkoMHgwMikNCiNkZWZpbmUgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9UQ1BJUAkJKDB4MDMpDQojZGVmaW5lIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfQ1VTVE9NCQkoMHhGRikNCg0KI2RlZmluZSBUUkNfUkVDT1JERVJfQlVGRkVSX0FMTE9DQVRJT05fU1RBVElDICAgKDB4MDApDQojZGVmaW5lIFRSQ19SRUNPUkRFUl9CVUZGRVJfQUxMT0NBVElPTl9EWU5BTUlDICAoMHgwMSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9KTElOS19SVFRfQkxPQ0sgLyBOT0JMT0NLDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2lmIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0QgPT0gVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRF9KTElOS19SVFRfQkxPQ0sgfHwgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCA9PSBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0pMSU5LX1JUVF9OT0JMT0NLDQoNCiNpZiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EID09IFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfSkxJTktfUlRUX0JMT0NLDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9CTE9DS0lOR19UUkFOU0ZFUiAxDQojZGVmaW5lIFJUVF9NT0RFIFNFR0dFUl9SVFRfTU9ERV9CTE9DS19JRl9GSUZPX0ZVTEwNCiNlbHNlDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9CTE9DS0lOR19UUkFOU0ZFUiAwDQojZGVmaW5lIFJUVF9NT0RFIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19TS0lQDQojZW5kaWYNCg0KI2luY2x1ZGUgIlNFR0dFUl9SVFRfQ29uZi5oIg0KI2luY2x1ZGUgIlNFR0dFUl9SVFQuaCINCg0KLyogVXAtYnVmZmVyLiBJZiBpbmRleCBpcyBkZWZpbmVkIGFzIDAsIHRoZSBpbnRlcm5hbCBSVFQgYnVmZmVycyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGlzLiAqLyBcDQojaWYgVFJDX1JUVF9VUF9CVUZGRVJfSU5ERVggPT0gMA0KI2RlZmluZSBUUkNfUlRUX0FMTE9DX1VQKCkgc3RhdGljIGNoYXIqIF9UelRyYWNlRGF0YSA9IE5VTEw7ICAgIC8qIE5vdCBhY3R1YWxseSB1c2VkLiBJZ25vcmUgYWxsb2NhdGlvbiBtZXRob2QuICovDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9NQUxMT0MoKSAvKiBTdGF0aWMgYWxsb2NhdGlvbi4gTm90IHVzZWQuICovDQojZWxzZQ0KI2lmIFRSQ19SRUNPUkRFUl9CVUZGRVJfQUxMT0NBVElPTiA9PSBUUkNfUkVDT1JERVJfQlVGRkVSX0FMTE9DQVRJT05fU1RBVElDDQojZGVmaW5lIFRSQ19SVFRfQUxMT0NfVVAoKSBzdGF0aWMgY2hhciBfVHpUcmFjZURhdGFbQlVGRkVSX1NJWkVfVVBdOyAgICAvKiBTdGF0aWMgYWxsb2NhdGlvbiAqLw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfTUFMTE9DKCkgLyogU3RhdGljIGFsbG9jYXRpb24uIE5vdCB1c2VkLiAqLw0KI2Vsc2UNCiNkZWZpbmUgVFJDX1JUVF9BTExPQ19VUCgpIHN0YXRpYyBjaGFyKiBfVHpUcmFjZURhdGEgPSBOVUxMOyAgICAvKiBEeW5hbWljIGFsbG9jYXRpb24gKi8NCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX01BTExPQygpIF9UelRyYWNlRGF0YSA9IFRSQ19QT1JUX01BTExPQyhCVUZGRVJfU0laRV9VUCk7DQojZW5kaWYNCiNlbmRpZg0KDQovKiBEb3duLWJ1ZmZlci4gSWYgaW5kZXggaXMgZGVmaW5lZCBhcyAwLCB0aGUgaW50ZXJuYWwgUlRUIGJ1ZmZlcnMgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhpcy4gKi8gXA0KI2lmIFRSQ19SVFRfRE9XTl9CVUZGRVJfSU5ERVggPT0gMA0KI2RlZmluZSBUUkNfUlRUX0FMTE9DX0RPV04oKSBzdGF0aWMgY2hhciogX1R6Q3RybERhdGEgPSBOVUxMOyAgICAgICAgICAgLyogTm90IGFjdHVhbGx5IHVzZWQuIElnbm9yZSBhbGxvY2F0aW9uIG1ldGhvZC4gKi8NCiNlbHNlDQojZGVmaW5lIFRSQ19SVFRfQUxMT0NfRE9XTigpIHN0YXRpYyBjaGFyIF9UekN0cmxEYXRhW0JVRkZFUl9TSVpFX0RPV05dOyAvKiBUaGlzIGJ1ZmZlciBzaG91bGQgYmUgfjMyYnl0ZXMuIElnbm9yZSBhbGxvY2F0aW9uIG1ldGhvZC4gKi8NCiNlbmRpZg0KICANCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX0FMTE9DQVRFX0ZJRUxEUygpIFwNCglUUkNfUlRUX0FMTE9DX1VQKCkgLyogTWFjcm8gdGhhdCB3aWxsIHJlc3VsdCBpbiBwcm9wZXIgVVAgYnVmZmVyIGFsbG9jYXRpb24gKi8gXA0KCVRSQ19SVFRfQUxMT0NfRE9XTigpIC8qIE1hY3JvIHRoYXQgd2lsbCByZXN1bHQgaW4gcHJvcGVyIERPV04gYnVmZmVyIGFsbG9jYXRpb24gKi8NCg0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfSU5JVCgpIFwNCiAgICAgICAgVFJDX1NUUkVBTV9QT1JUX01BTExPQygpOyAvKkR5bmFtaWMgYWxsb2NhdGlvbiBvciBlbXB0eSBpZiBzdGF0aWMgKi8gXA0KCVNFR0dFUl9SVFRfQ29uZmlnVXBCdWZmZXIoVFJDX1JUVF9VUF9CVUZGRVJfSU5ERVgsICJUekRhdGEiLCBfVHpUcmFjZURhdGEsIHNpemVvZihfVHpUcmFjZURhdGEpLCBSVFRfTU9ERSApOyBcDQoJU0VHR0VSX1JUVF9Db25maWdEb3duQnVmZmVyKFRSQ19SVFRfRE9XTl9CVUZGRVJfSU5ERVgsICJUekN0cmwiLCBfVHpDdHJsRGF0YSwgc2l6ZW9mKF9UekN0cmxEYXRhKSwgMCk7DQoNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX0FMTE9DQVRFX0VWRU5UKF90eXBlLCBfcHRyRGF0YSwgX3NpemUpIHVpbnQ4X3QgdG1wRXZ0W19zaXplXTsgX3R5cGUqIF9wdHJEYXRhID0gKF90eXBlKil0bXBFdnQ7DQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9DT01NSVRfRVZFTlQoX3B0ckRhdGEsIF9zaXplKSBTRUdHRVJfUlRUX1dyaXRlKFRSQ19SVFRfVVBfQlVGRkVSX0lOREVYLCAoY29uc3QgY2hhciopX3B0ckRhdGEsIF9zaXplKTsNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX1JFQURfREFUQShfcHRyRGF0YSwgX3NpemUsIF9wdHJCeXRlc1JlYWQpICpfcHRyQnl0ZXNSZWFkID0gU0VHR0VSX1JUVF9SZWFkKFRSQ19SVFRfRE9XTl9CVUZGRVJfSU5ERVgsIChjaGFyKilfcHRyRGF0YSwgX3NpemUpOw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfUEVSSU9ESUNfU0VORF9EQVRBKF9wdHJCeXRlc1NlbnQpDQoNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX09OX1RSQUNFX0JFR0lOKCkgLyogRG8gbm90aGluZyAqLw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfT05fVFJBQ0VfRU5EKCkgLyogRG8gbm90aGluZyAqLw0KICAgIA0KI2VuZGlmIC8qVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCA9PSBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0pMSU5LX1JUVF9CTE9DSyB8fCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EID09IFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfSkxJTktfUlRUX05PQkxPQ0sqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX1RDUElQDQogKiANCiAqIFRoaXMgVENQL0lQIGltcGxlbWVudGF0aW9uIGlzIHVzaW5nIGEgc2Vjb25kYXJ5IGJ1ZmZlciBjb25zaXN0aW5nIG9mIG11bHRpcGxlIA0KICogcGFnZXMgdG8gYXZvaWQgdGhlIGVuZGxlc3MgcmVjdXJzaXZlIGNhbGxzIHRoYXQgb2NjdXJyIHdoZW4gInNvY2tldF9zZW5kIiANCiAqIHVzZXMga2VybmVsIG9iamVjdHMgc3VjaCBhcyBtdXRleGVzIGFuZCBzZW1hcGhvcmVzLCB3aGljaCBpbiB0dXJuIG5lZWRzIHRvIGJlDQogKiB0cmFjZWQuIFRvIHVzZSB5b3VyIG93biBUQ1AvSVAgc3RhY2ssIG1vZGlmeSB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGluDQogKiB0cmNUQ1BJUENvbmZpZy5oLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpZiBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EID09IFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfVENQSVANCg0KI2luY2x1ZGUgInRyY1RDUElQLmgiDQojaW5jbHVkZSAidHJjUGFnZWRFdmVudEJ1ZmZlci5oIg0KI2luY2x1ZGUgInRyY1BhZ2VkRXZlbnRCdWZmZXJDb25maWcuaCINCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX0JMT0NLSU5HX1RSQU5TRkVSIDANCg0KI2lmIFRSQ19SRUNPUkRFUl9CVUZGRVJfQUxMT0NBVElPTiA9PSBUUkNfUkVDT1JERVJfQlVGRkVSX0FMTE9DQVRJT05fU1RBVElDDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9BTExPQ0FURV9GSUVMRFMoKSBzdGF0aWMgY2hhciBfVHpUcmFjZURhdGFbVFJDX1BBR0VEX0VWRU5UX0JVRkZFUl9QQUdFX0NPVU5UICogVFJDX1BBR0VEX0VWRU5UX0JVRkZFUl9QQUdFX1NJWkVdOyAgICAgICAvKiBTdGF0aWMgYWxsb2NhdGlvbi4gKi8NCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX01BTExPQygpIC8qIFN0YXRpYyBhbGxvY2F0aW9uLiBOb3QgdXNlZC4gKi8NCiNlbHNlDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9BTExPQ0FURV9GSUVMRFMoKSBzdGF0aWMgY2hhciogX1R6VHJhY2VEYXRhID0gTlVMTDsgICAgIC8qIER5bmFtaWMgYWxsb2NhdGlvbi4gKi8NCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX01BTExPQygpIF9UelRyYWNlRGF0YSA9IFRSQ19QT1JUX01BTExPQyhUUkNfUEFHRURfRVZFTlRfQlVGRkVSX1BBR0VfQ09VTlQgKiBUUkNfUEFHRURfRVZFTlRfQlVGRkVSX1BBR0VfU0laRSk7DQojZW5kaWYNCg0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfSU5JVCgpIFwNCiAgICAgICAgVFJDX1NUUkVBTV9QT1JUX01BTExPQygpOyAvKkR5bmFtaWMgYWxsb2NhdGlvbiBvciBlbXB0eSBpZiBzdGF0aWMgKi8gXA0KICAgICAgICB2UGFnZWRFdmVudEJ1ZmZlckluaXQoX1R6VHJhY2VEYXRhKTsNCg0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfQUxMT0NBVEVfRVZFTlQoX3R5cGUsIF9wdHJEYXRhLCBfc2l6ZSkgX3R5cGUqIF9wdHJEYXRhOyBfcHRyRGF0YSA9IChfdHlwZSopdlBhZ2VkRXZlbnRCdWZmZXJHZXRXcml0ZVBvaW50ZXIoX3NpemUpOw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfQ09NTUlUX0VWRU5UKF9wdHJEYXRhLCBfc2l6ZSkgLyogTm90IG5lZWRlZCBzaW5jZSB3ZSB3cml0ZSBpbW1lZGlhdGVseSBpbnRvIHRoZSBidWZmZXIgcmVjZWl2ZWQgYWJvdmUgYnkgVFJDX1NUUkVBTV9QT1JUX0FMTE9DQVRFX0VWRU5ULCBhbmQgdGhlIFRSQ19TVFJFQU1fUE9SVF9QRVJJT0RJQ19TRU5EX0RBVEEgZGVmaW5lZCBiZWxvdyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgYWN0dWFsIHRyYWNlIHRyYW5zZmVyLiAqLw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfUkVBRF9EQVRBKF9wdHJEYXRhLCBfc2l6ZSwgX3B0ckJ5dGVzUmVhZCkgdHJjVGNwUmVhZChfcHRyRGF0YSwgX3NpemUsIF9wdHJCeXRlc1JlYWQpOw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfUEVSSU9ESUNfU0VORF9EQVRBKF9wdHJCeXRlc1NlbnQpIHZQYWdlZEV2ZW50QnVmZmVyVHJhbnNmZXIodHJjVGNwV3JpdGUsIF9wdHJCeXRlc1NlbnQpOw0KDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9PTl9UUkFDRV9CRUdJTigpIHZQYWdlZEV2ZW50QnVmZmVySW5pdChfVHpUcmFjZURhdGEpOw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfT05fVFJBQ0VfRU5EKCkgLyogRG8gbm90aGluZyAqLw0KDQojZW5kaWYgLypUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EID09IFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0RfVENQSVAqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTQ0KICoNCiAqIEltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1hY3JvcyBpbiB0cmNDb25maWcuaC4gSWYgeW91ciB0cmFuc2ZlciBtZXRob2QgdXNlcw0KICoga2VybmVsIG9iamVjdHMgd2hlbiBzZW5kaW5nIGRhdGEgeW91IHdpbGwgbmVlZCB0byB1c2UgYSBzZWNvbmRhcnkgYnVmZmVyIHRvIA0KICogc3RvcmUgdGhlIHRyYWNlIGRhdGEgYmVmb3JlIHNlbmRpbmcgaXQuIEZvciB0aGlzIHJlYXNvbiB3ZSBwcm92aWRlIA0KICogdHJjUGFnZWRFdmVudEJ1ZmZlci4gTG9vayBhdCB0aGUgVENQL0lQIG1hY3JvcyBhYm92ZSB0byBzZWUgaG93IHRvIHVzZSBpdC4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojaWYgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCA9PSBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTQ0KDQovKiBXaGVuIHVzaW5nIHRoZSBjdXN0b20gdHJhbnNmZXIgbWV0aG9kLCBkZWZpbmUgVFJDX1NUUkVBTV9DVVNUT01fWFhYWFhYWFhYWFhYWCBpbiB0cmNDb25maWcuaCAqLw0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfQkxPQ0tJTkdfVFJBTlNGRVIgVFJDX1NUUkVBTV9DVVNUT01fQkxPQ0tJTkdfVFJBTlNGRVINCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX0FMTE9DQVRFX0ZJRUxEUygpIFRSQ19TVFJFQU1fQ1VTVE9NX0FMTE9DQVRFX0ZJRUxEUygpDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9JTklUKCkgVFJDX1NUUkVBTV9DVVNUT01fSU5JVCgpDQojZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9BTExPQ0FURV9FVkVOVChfdHlwZSwgX3B0ciwgX3NpemUpIFRSQ19TVFJFQU1fQ1VTVE9NX0FMTE9DQVRFX0VWRU5UKF90eXBlLCBfcHRyLCBfc2l6ZSkNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX0NPTU1JVF9FVkVOVChfcHRyLCBfc2l6ZSkgVFJDX1NUUkVBTV9DVVNUT01fQ09NTUlUX0VWRU5UKF9wdHIsIF9zaXplKQ0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfUkVBRF9EQVRBKF9wdHJEYXRhLCBfc2l6ZSwgX3B0ckJ5dGVzUmVhZCkgVFJDX1NUUkVBTV9DVVNUT01fUkVBRF9EQVRBKF9wdHJEYXRhLCBfc2l6ZSwgX3B0ckJ5dGVzUmVhZCkNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX1BFUklPRElDX1NFTkRfREFUQShfcHRyQnl0ZXNTZW50KSBUUkNfU1RSRUFNX0NVU1RPTV9QRVJJT0RJQ19TRU5EX0RBVEEoX3B0ckJ5dGVzU2VudCkNCiNkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX09OX1RSQUNFX0JFR0lOKCkgVFJDX1NUUkVBTV9DVVNUT01fT05fVFJBQ0VfQkVHSU4oKQ0KI2RlZmluZSBUUkNfU1RSRUFNX1BPUlRfT05fVFJBQ0VfRU5EKCkgVFJDX1NUUkVBTV9DVVNUT01fT05fVFJBQ0VfRU5EKCkNCg0KI2VuZGlmIC8qVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCA9PSBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EX0NVU1RPTSovDQoNCiNpZm5kZWYgVFJDX1NUUkVBTV9QT1JUX0FMTE9DQVRFX0ZJRUxEUw0KI2Vycm9yICJTZWxlY3RlZCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EIGRvZXMgbm90IGRlZmluZSBUUkNfU1RSRUFNX1BPUlRfQUxMT0NBVEVfRklFTERTISINCiNlbmRpZg0KDQojaWZuZGVmIFRSQ19TVFJFQU1fUE9SVF9BTExPQ0FURV9FVkVOVA0KI2Vycm9yICJTZWxlY3RlZCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EIGRvZXMgbm90IGRlZmluZSBUUkNfU1RSRUFNX1BPUlRfQUxMT0NBVEVfRVZFTlQhIg0KI2VuZGlmDQoNCiNpZm5kZWYgVFJDX1NUUkVBTV9QT1JUX0NPTU1JVF9FVkVOVA0KI2Vycm9yICJTZWxlY3RlZCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EIGRvZXMgbm90IGRlZmluZSBUUkNfU1RSRUFNX1BPUlRfQ09NTUlUX0VWRU5UISINCiNlbmRpZg0KDQojaWZuZGVmIFRSQ19TVFJFQU1fUE9SVF9JTklUDQojZXJyb3IgIlNlbGVjdGVkIFRSQ19SRUNPUkRFUl9UUkFOU0ZFUl9NRVRIT0QgZG9lcyBub3QgZGVmaW5lIFRSQ19TVFJFQU1fUE9SVF9JTklUISINCiNlbmRpZg0KDQojaWZuZGVmIFRSQ19TVFJFQU1fUE9SVF9CTE9DS0lOR19UUkFOU0ZFUg0KI2Vycm9yICJTZWxlY3RlZCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EIGRvZXMgbm90IGRlZmluZSBUUkNfU1RSRUFNX1BPUlRfQkxPQ0tJTkdfVFJBTlNGRVIhIg0KI2VuZGlmDQoNCiNpZm5kZWYgVFJDX1NUUkVBTV9QT1JUX1JFQURfREFUQQ0KI2Vycm9yICJTZWxlY3RlZCBUUkNfUkVDT1JERVJfVFJBTlNGRVJfTUVUSE9EIGRvZXMgbm90IGRlZmluZSBUUkNfU1RSRUFNX1BPUlRfUkVBRF9EQVRBISINCiNlbmRpZg0KDQojaWZuZGVmIFRSQ19TVFJFQU1fUE9SVF9QRVJJT0RJQ19TRU5EX0RBVEENCiNlcnJvciAiU2VsZWN0ZWQgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCBkb2VzIG5vdCBkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX1BFUklPRElDX1NFTkRfREFUQSEiDQojZW5kaWYNCg0KI2lmbmRlZiBUUkNfU1RSRUFNX1BPUlRfT05fVFJBQ0VfQkVHSU4NCiNlcnJvciAiU2VsZWN0ZWQgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCBkb2VzIG5vdCBkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX09OX1RSQUNFX0JFR0lOISINCiNlbmRpZg0KDQojaWZuZGVmIFRSQ19TVFJFQU1fUE9SVF9PTl9UUkFDRV9FTkQNCiNlcnJvciAiU2VsZWN0ZWQgVFJDX1JFQ09SREVSX1RSQU5TRkVSX01FVEhPRCBkb2VzIG5vdCBkZWZpbmUgVFJDX1NUUkVBTV9QT1JUX09OX1RSQUNFX0VORCEiDQojZW5kaWYNCg0KI2VuZGlmIC8qKFVTRV9UUkFDRUFMWVpFUl9SRUNPUkRFUiA9PSAxKSovDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKiBfVFJDX1NUUkVBTV9QT1JUX0ggKi8NCg==