LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmc0eHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyRzR4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuCiAgKgogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6CiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0OgogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyRzR4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4KICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMKICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQGF0dGVudGlvbgogICoKICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICoKICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KCi8qKiBAYWRkdG9ncm91cCBDTVNJUwogICogQHsKICAqLwoKLyoqIEBhZGR0b2dyb3VwIHN0bTMyZzR4eAogICogQHsKICAqLwoKI2lmbmRlZiBfX1NUTTMyRzR4eF9ICiNkZWZpbmUgX19TVE0zMkc0eHhfSAoKI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgovKiogQGFkZHRvZ3JvdXAgTGlicmFyeV9jb25maWd1cmF0aW9uX3NlY3Rpb24KICAqIEB7CiAgKi8KCi8qKgogICogQGJyaWVmIFNUTTMyIEZhbWlseQogICovCiNpZiAhZGVmaW5lZCAoU1RNMzJHNCkKI2RlZmluZSBTVE0zMkc0CiNlbmRpZiAvKiBTVE0zMkc0ICovCgovKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgU1RNMzJHNCBkZXZpY2UgdXNlZCBpbiB5b3VyCiAgIGFwcGxpY2F0aW9uCiAgKi8KCiNpZiAhZGVmaW5lZCAoU1RNMzJHNDMxeHgpICYmICFkZWZpbmVkIChTVE0zMkc0NDF4eCkgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyRzQ3MXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJHNDczeHgpICYmICFkZWZpbmVkIChTVE0zMkc0NzR4eCkgJiYgIWRlZmluZWQgKFNUTTMyRzQ4NHh4KSAmJiAhZGVmaW5lZCAoU1RNMzJHQksxQ0IpCiAgLyogI2RlZmluZSBTVE0zMkc0MzF4eCAqLyAgIC8qITwgU1RNMzJHNDMxeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJHNDQxeHggKi8gICAvKiE8IFNUTTMyRzQ0MXh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRzQ3MXh4ICovICAgLyohPCBTVE0zMkc0NzF4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkc0NzN4eCAqLyAgIC8qITwgU1RNMzJHNDczeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJHNDgzeHggKi8gICAvKiE8IFNUTTMyRzQ4M3h4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyRzQ3NHh4ICovICAgLyohPCBTVE0zMkc0NzR4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkc0ODR4eCAqLyAgIC8qITwgU1RNMzJHNDg0eHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJHQksxQ0IgKi8gICAvKiE8IFNUTTMyR0JLMUNCIERldmljZXMgKi8KI2VuZGlmCgovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLgogICovCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQovKioKICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsCiAgIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzCiAgICovCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKLyoqCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyIFYxLjEuMQogICovCiNkZWZpbmUgX19TVE0zMkc0X0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDAxVSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLwojZGVmaW5lIF9fU1RNMzJHNF9DTVNJU19WRVJTSU9OX1NVQjEgICAoMHgwMVUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDFVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkc0X0NNU0lTX1ZFUlNJT05fUkMgICAgICgweDAwVSkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8KI2RlZmluZSBfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDI0KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRzRfQ01TSVNfVkVSU0lPTl9SQykpCgovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBEZXZpY2VfSW5jbHVkZWQKICAqIEB7CiAgKi8KCiNpZiBkZWZpbmVkKFNUTTMyRzQzMXh4KQogICNpbmNsdWRlICJzdG0zMmc0MzF4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogICNpbmNsdWRlICJzdG0zMmc0NDF4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ3MXh4KQogICNpbmNsdWRlICJzdG0zMmc0NzF4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KQogICNpbmNsdWRlICJzdG0zMmc0NzN4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICNpbmNsdWRlICJzdG0zMmc0ODN4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KQogICNpbmNsdWRlICJzdG0zMmc0NzR4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRzQ4NHh4KQogICNpbmNsdWRlICJzdG0zMmc0ODR4eC5oIgojZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKQogICNpbmNsdWRlICJzdG0zMmdiazFjYi5oIgojZWxzZQogICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyRzR4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmc0eHguaCBmaWxlKSIKI2VuZGlmCgovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF90eXBlcwogICogQHsKICAqLwp0eXBlZGVmIGVudW0KewogIFJFU0VUID0gMCwKICBTRVQgPSAhUkVTRVQKfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsKCnR5cGVkZWYgZW51bQp7CiAgRElTQUJMRSA9IDAsCiAgRU5BQkxFID0gIURJU0FCTEUKfSBGdW5jdGlvbmFsU3RhdGU7CiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpCgp0eXBlZGVmIGVudW0KewogIFNVQ0NFU1MgPSAwLAogIEVSUk9SID0gIVNVQ0NFU1MKfSBFcnJvclN0YXR1czsKCi8qKgogICogQH0KICAqLwoKCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNyb3MKICAqIEB7CiAgKi8KI2RlZmluZSBTRVRfQklUKFJFRywgQklUKSAgICAgKChSRUcpIHw9IChCSVQpKQoKI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkKCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQoKI2RlZmluZSBDTEVBUl9SRUcoUkVHKSAgICAgICAgKChSRUcpID0gKDB4MCkpCgojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkKCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkKCiNkZWZpbmUgTU9ESUZZX1JFRyhSRUcsIENMRUFSTUFTSywgU0VUTUFTSykgIFdSSVRFX1JFRygoUkVHKSwgKCgoUkVBRF9SRUcoUkVHKSkgJiAofihDTEVBUk1BU0spKSkgfCAoU0VUTUFTSykpKQoKI2RlZmluZSBQT1NJVElPTl9WQUwoVkFMKSAgICAgKF9fQ0xaKF9fUkJJVChWQUwpKSkKCgovKioKICAqIEB9CiAgKi8KCiNpZiBkZWZpbmVkIChVU0VfSEFMX0RSSVZFUikKICNpbmNsdWRlICJzdG0zMmc0eHhfaGFsLmgiCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgojZW5kaWYgLyogX19TVE0zMkc0eHhfSCAqLwovKioKICAqIEB9CiAgKi8KCi8qKgogICogQH0KICAqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8K