LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMybDR4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAdmVyc2lvbiBWMS4yLjANCiAgKiBAZGF0ZSAgICAyOC1PY3RvYmVyLTIwMTYNCiAgKiBAYnJpZWYgICBDTVNJUyBTVE0zMkw0eHggRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlLg0KICAqDQogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcg0KICAqICAgICAgICAgIGlzIHVzaW5nIGluIHRoZSBDIHNvdXJjZSBjb2RlLCB1c3VhbGx5IGluIG1haW4uYy4gVGhpcyBmaWxlIGNvbnRhaW5zOg0KICAqICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6DQogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uDQogICogICAgICAgICAgICAgIC0gVG8gdXNlIG9yIG5vdCB0aGUgcGVyaXBoZXJhbJJzIGRyaXZlcnMgaW4gYXBwbGljYXRpb24gY29kZShpLmUuDQogICogICAgICAgICAgICAgICAgY29kZSB3aWxsIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbJJzIHJlZ2lzdGVycw0KICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQ0KICAqICAgICAgICAgICAgICAgICIjZGVmaW5lIFVTRV9IQUxfRFJJVkVSIg0KICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBhdHRlbnRpb24NCiAgKg0KICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KICAqDQogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCiAgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KICAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNUTWljcm9lbGVjdHJvbmljcyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCiAgKiAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KICAqICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICoNCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQogICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQogICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCiAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KICAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQogICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgQ01TSVMNCiAgKiBAew0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgc3RtMzJsNHh4DQogICogQHsNCiAgKi8NCg0KI2lmbmRlZiBfX1NUTTMyTDR4eF9IDQojZGVmaW5lIF9fU1RNMzJMNHh4X0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQogZXh0ZXJuICJDIiB7DQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uDQogICogQHsNCiAgKi8NCg0KLyoqDQogICogQGJyaWVmIFNUTTMyIEZhbWlseQ0KICAqLw0KI2lmICFkZWZpbmVkIChTVE0zMkw0KQ0KI2RlZmluZSBTVE0zMkw0DQojZW5kaWYgLyogU1RNMzJMNCAqLw0KDQovKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgU1RNMzJMNCBkZXZpY2UgdXNlZCBpbiB5b3VyDQogICBhcHBsaWNhdGlvbg0KICAqLw0KDQojaWYgIWRlZmluZWQgKFNUTTMyTDQzMXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDMyeHgpICYmICFkZWZpbmVkIChTVE0zMkw0MzN4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ0Mnh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDQzeHgpICYmIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJMNDUxeHgpICYmICFkZWZpbmVkIChTVE0zMkw0NTJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ2Mnh4KSAmJiBcDQogICAgIWRlZmluZWQgKFNUTTMyTDQ3MXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDc1eHgpICYmICFkZWZpbmVkIChTVE0zMkw0NzZ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ4NXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDg2eHgpDQogIC8qICNkZWZpbmUgU1RNMzJMNDMxeHggKi8gICAvKiE8IFNUTTMyTDQzMXh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0MzJ4eCAqLyAgIC8qITwgU1RNMzJMNDMyeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQzM3h4ICovICAgLyohPCBTVE0zMkw0MzN4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDQyeHggKi8gICAvKiE8IFNUTTMyTDQ0Mnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0NDN4eCAqLyAgIC8qITwgU1RNMzJMNDQzeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ1MXh4ICovICAgLyohPCBTVE0zMkw0NTF4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDUyeHggKi8gICAvKiE8IFNUTTMyTDQ1Mnh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0NjJ4eCAqLyAgIC8qITwgU1RNMzJMNDYyeHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ3MXh4ICovICAgLyohPCBTVE0zMkw0NzF4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDc1eHggKi8gICAvKiE8IFNUTTMyTDQ3NXh4IERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkw0NzZ4eCAqLyAgIC8qITwgU1RNMzJMNDc2eHggRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyTDQ4NXh4ICovICAgLyohPCBTVE0zMkw0ODV4eCBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJMNDg2eHggKi8gICAvKiE8IFNUTTMyTDQ4Nnh4IERldmljZXMgKi8NCiNlbmRpZg0KDQovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQ0KICAgICAgICBkZXZpY2VzLCB5b3UgY2FuIGRlZmluZSB0aGUgZGV2aWNlIGluIHlvdXIgdG9vbGNoYWluIGNvbXBpbGVyIHByZXByb2Nlc3Nvci4NCiAgKi8NCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQ0KLyoqDQogKiBAYnJpZWYgQ29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2lsbCBub3QgdXNlIHRoZSBwZXJpcGhlcmFscyBkcml2ZXJzLg0KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsDQogICBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIHJlZ2lzdGVycw0KICAgKi8NCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovDQojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8NCg0KLyoqDQogICogQGJyaWVmIENNU0lTIERldmljZSB2ZXJzaW9uIG51bWJlciBWMS4yLjANCiAgKi8NCiNkZWZpbmUgX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDAxKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJMNF9DTVNJU19WRVJTSU9OX1NVQjEgICAoMHgwMikgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDApIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fUkMgICAgICgweDAwKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLw0KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDI0KVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fU1VCMSA8PCAxNilcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJMNF9DTVNJU19WRVJTSU9OX1NVQjIgPDwgOCApXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9SQykpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBEZXZpY2VfSW5jbHVkZWQNCiAgKiBAew0KICAqLw0KDQojaWYgZGVmaW5lZChTVE0zMkw0MzF4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQzMXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQzMnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDMyeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDMzeHgpDQogICNpbmNsdWRlICJzdG0zMmw0MzN4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0NDJ4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ0Mnh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ0M3h4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDQzeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDUxeHgpDQogICNpbmNsdWRlICJzdG0zMmw0NTF4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0NTJ4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ1Mnh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ2Mnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDYyeHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDcxeHgpDQogICNpbmNsdWRlICJzdG0zMmw0NzF4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0NzV4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ3NXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyTDQ3Nnh4KQ0KICAjaW5jbHVkZSAic3RtMzJsNDc2eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJMNDg1eHgpDQogICNpbmNsdWRlICJzdG0zMmw0ODV4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkw0ODZ4eCkNCiAgI2luY2x1ZGUgInN0bTMybDQ4Nnh4LmgiDQojZWxzZQ0KICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmw0eHguaCBmaWxlKSINCiNlbmRpZg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMNCiAgKiBAew0KICAqLw0KdHlwZWRlZiBlbnVtDQp7DQogIFJFU0VUID0gMCwNCiAgU0VUID0gIVJFU0VUDQp9IEZsYWdTdGF0dXMsIElUU3RhdHVzOw0KDQp0eXBlZGVmIGVudW0NCnsNCiAgRElTQUJMRSA9IDAsDQogIEVOQUJMRSA9ICFESVNBQkxFDQp9IEZ1bmN0aW9uYWxTdGF0ZTsNCiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpDQoNCnR5cGVkZWYgZW51bQ0Kew0KICBFUlJPUiA9IDAsDQogIFNVQ0NFU1MgPSAhRVJST1INCn0gRXJyb3JTdGF0dXM7DQoNCi8qKg0KICAqIEB9DQogICovDQoNCg0KLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX21hY3Jvcw0KICAqIEB7DQogICovDQojZGVmaW5lIFNFVF9CSVQoUkVHLCBCSVQpICAgICAoKFJFRykgfD0gKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfQklUKFJFRywgQklUKSAgICgoUkVHKSAmPSB+KEJJVCkpDQoNCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQ0KDQojZGVmaW5lIENMRUFSX1JFRyhSRUcpICAgICAgICAoKFJFRykgPSAoMHgwKSkNCg0KI2RlZmluZSBXUklURV9SRUcoUkVHLCBWQUwpICAgKChSRUcpID0gKFZBTCkpDQoNCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkNCg0KI2RlZmluZSBNT0RJRllfUkVHKFJFRywgQ0xFQVJNQVNLLCBTRVRNQVNLKSAgV1JJVEVfUkVHKChSRUcpLCAoKChSRUFEX1JFRyhSRUcpKSAmICh+KENMRUFSTUFTSykpKSB8IChTRVRNQVNLKSkpDQoNCiNkZWZpbmUgUE9TSVRJT05fVkFMKFZBTCkgICAgIChfX0NMWihfX1JCSVQoVkFMKSkpDQoNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KI2lmIGRlZmluZWQgKFVTRV9IQUxfRFJJVkVSKQ0KICNpbmNsdWRlICJzdG0zMmw0eHhfaGFsLmgiDQojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8NCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCg0KI2VuZGlmIC8qIF9fU1RNMzJMNHh4X0ggKi8NCi8qKg0KICAqIEB9DQogICovDQoNCi8qKg0KICAqIEB9DQogICovDQoNCg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=