LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIChjKSBDb3B5cmlnaHQgMjAwNy0yMDE1IE1pY3Jvc2VtaSBTb0MgUHJvZHVjdHMgR3JvdXAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKiANCiAqIENvcmVUaW1lciBwdWJsaWMgQVBJLg0KICogDQogKiBTVk4gJFJldmlzaW9uOiA3OTY3ICQNCiAqIFNWTiAkRGF0ZTogMjAxNS0xMC0wOSAxODo0ODoyNiArMDUzMCAoRnJpLCAwOSBPY3QgMjAxNSkgJA0KICovDQojaWZuZGVmIENPUkVfVElNRVJfSF8NCiNkZWZpbmUgQ09SRV9USU1FUl9IXw0KDQojaW5jbHVkZSAiY3B1X3R5cGVzLmgiDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgQ29yZVRpbWVyIGRyaXZlciBvcGVyYXRpbmcNCiAqIG1vZGUuIFRoZXkgYWxsb3cgc2VsZWN0aW5nIGNvbnRpbnVvdXMgb3Igb25lLXNob3QgbW9kZS4NCiAqIDEuIENvbnRpbnVvdXMgTW9kZQ0KICogSW4gY29udGludW91cyBtb2RlIHRoZSB0aW1lcidzIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQgZnJvbSB0aGUgbG9hZCB2YWx1ZSANCiAqIHVudGlsIGl0IHJlYWNoZXMgemVyby4gVGhlIHRpbWVyIGNvdW50ZXIgaXMgYXV0b21hdGljYWxseSByZWxvYWRlZCwgd2l0aCB0aGUNCiAqIGxvYWQgdmFsdWUsIHVwb24gcmVhY2hpbmcgemVyby4gQW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBldmVyeSB0aW1lIHRoZQ0KICogY291bnRlciByZWFjaGVzIHplcm8gaWYgaW50ZXJydXB0IGlzIGVuYWJsZWQuDQogKiBUaGlzIG1vZGUgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGF0IGNvbnN0YW50IHRpbWUNCiAqIGludGVydmFscy4NCiAqIDIuIE9uZS1zaG90IG1vZGU6IA0KICogSW4gb25lLXNob3QgbW9kZSwgdGhlIGNvdW50ZXIgZGVjcmVtZW50cyBmcm9tIHRoZSBsb2FkIHZhbHVlIGFuZCB1bnRpbCBpdA0KICogcmVhY2hlcyB6ZXJvLiBBbiBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZCwgaWYgZW5hYmxlZCwgd2hlbiB0aGUgY291bnRlcg0KICogcmVhY2hlcyB6ZXJvLiBUaGUgdGltZXIncyBjb3VudGVyIG11c3QgYmUgcmVsb2FkZWQgdG8gYmVnaW4gY291bnRpbmcgZG93bg0KICogYWdhaW4uDQogKi8NCiNkZWZpbmUgVE1SX0NPTlRJTlVPVVNfTU9ERQkJMA0KI2RlZmluZSBUTVJfT05FX1NIT1RfTU9ERQkJMQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIENvcmVUaW1lciBwcmVzY2FsZXIuDQogKiBUaGUgcHJlc2NhbGVyIGlzIHVzZWQgdG8gZGl2aWRlIGRvd24gdGhlIGNsb2NrIHVzZWQgdG8gZGVjcmVtZW50IHRoZQ0KICogQ29yZVRpbWVyIGNvdW50ZXIuIEl0IGNhbiBiZSBjb25maWd1cmUgdG8gZGl2aWRlIHRoZSBjbG9jayBieSAyLCA0LCA4LA0KICogMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgb3IgMTAyNC4NCiAqLw0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzIJCQkwDQojZGVmaW5lIFBSRVNDQUxFUl9ESVZfNAkJCTENCiNkZWZpbmUgUFJFU0NBTEVSX0RJVl84CQkJMg0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzE2CQkzDQojZGVmaW5lIFBSRVNDQUxFUl9ESVZfMzIJCTQNCiNkZWZpbmUgUFJFU0NBTEVSX0RJVl82NAkJNQ0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzEyOAkJNg0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzI1NgkJNw0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzUxMgkJOA0KI2RlZmluZSBQUkVTQ0FMRVJfRElWXzEwMjQJCTkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZXJlIHNob3VsZCBiZSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgQ29yZVRpbWVyDQogKiBpbiB5b3VyIHN5c3RlbS4gVGhlIGZ1bmN0aW9uIFRNUl9pbml0KCkgaW5pdGlhbGl6ZXMgdGhpcyBzdHJ1Y3R1cmUuIEl0IGlzDQogKiB1c2VkIHRvIGlkZW50aWZ5IHRoZSB2YXJpb3VzIENvcmVUaW1lciBoYXJkd2FyZSBpbnN0YW5jZXMgaW4geW91ciBzeXN0ZW0uDQogKiBBbiBpbml0aWFsaXplZCB0aW1lciBpbnN0YW5jZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHBhc3NlZCBhcyBmaXJzdCBwYXJhbWV0ZXIgdG8NCiAqIENvcmVUaW1lciBkcml2ZXIgZnVuY3Rpb25zIHRvIGlkZW50aWZ5IHdoaWNoIENvcmVUaW1lciBpbnN0YW5jZSBzaG91bGQgcGVyZm9ybQ0KICogdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24uDQogKiBTb2Z0d2FyZSB1c2luZyB0aGlzIGRyaXZlciBzaG91bGQgb25seSBuZWVkIHRvIGNyZWF0ZSBvbmUgc2luZ2xlIGluc3RhbmNlIG9mIA0KICogdGhpcyBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBoYXJkd2FyZSB0aW1lciBpbnN0YW5jZSBpbiB0aGUgc3lzdGVtLg0KICovDQp0eXBlZGVmIHN0cnVjdCBfX3RpbWVyX2luc3RhbmNlX3QNCnsNCglhZGRyX3QgYmFzZV9hZGRyZXNzOw0KfSB0aW1lcl9pbnN0YW5jZV90Ow0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIGZ1bmN0aW9uIFRNUl9pbml0KCkgaW5pdGlhbGl6ZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc2V0cyByZWxldmFudA0KICogQ29yZVRpbWVyIHJlZ2lzdGVycy4gVGhpcyBmdW5jdGlvbiB3aWxsIHByZXBhcmUgdGhlIFRpbWVyIGZvciB1c2UgaW4gYSBnaXZlbg0KICogaGFyZHdhcmUvc29mdHdhcmUgY29uZmlndXJhdGlvbi4gSXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIFRpbWVyDQogKiBBUEkgZnVuY3Rpb25zLg0KICogVGhlIHRpbWVyIHdpbGwgbm90IHN0YXJ0IGNvdW50aW5nIGRvd24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcw0KICogY2FsbGVkLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBUTVJfc3RhcnQoKSB0byBzdGFydCB0aGUgdGltZXIgZGVjcmVtZW50aW5nLg0KICogVGhlIENvcmVUaW1lciBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgYXMgcGFydCBvZiB0aGlzIGZ1bmN0aW9uLg0KICoNCiAqIEBwYXJhbSB0aGlzX3RpbWVyICAgIFBvaW50ZXIgdG8gYSB0aW1lcl9pbnN0YW5jZV90IHN0cnVjdHVyZSBob2xkaW5nIGFsbCANCiAqICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgdGltZXIgaGFyZHdhcmUNCiAqIAkJCQkJCWluc3RhbmNlLiBUaGlzIHBvaW50ZXIgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZQ0KICogCQkJCQkJdGFyZ2V0IENvcmVUaW1lciBoYXJkd2FyZSBpbnN0YW5jZSBpbiBzdWJzZXF1ZW50IGNhbGxzDQogKiAJCQkJCQl0byB0aGUgQ29yZVRpbWVyIGZ1bmN0aW9ucy4NCiAqIEBwYXJhbSBhZGRyZXNzICAgICAgIEJhc2UgYWRkcmVzcyBpbiB0aGUgcHJvY2Vzc29yJ3MgbWVtb3J5IG1hcCBvZiB0aGUgDQogKiAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnMgb2YgdGhlIENvcmVUaW1lciBpbnN0YW5jZSBiZWluZyBpbml0aWFsaXplZC4NCiAqIEBwYXJhbSBtb2RlICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBvcGVyYXRpbmcgbW9kZSBvZg0KICogCQkJCQkJdGhlIHRpbWVyIGRyaXZlci4gVGhpcyBjYW4gYmUgZWl0aGVyIFRNUl9DT05USU5VT1VTX01PREUNCiAqIAkJCQkJCW9yIFRNUl9PTkVfU0hPVF9NT0RFLg0KICogQHBhcmFtIHByZXNjYWxlICAgIAlUaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcHJlc2NhbGVyIGRpdmlkZXINCiAqIAkJCQkJCXVzZWQgdG8gZGl2aWRlIGRvd24gdGhlIGNsb2NrIHVzZWQgdG8gZGVjcmVtZW50IHRoZQ0KICogCQkJCQkJdGltZXKScyBjb3VudGVyLiBUaGlzIGNhbiBiZSBzZXQgdXNpbmcgb25lIG9mIHRoZSANCiAqIAkJCQkJCVBSRVNDQUxFUl9ESVZfPG4+IGRlZmluaXRpb25zLCB3aGVyZSA8bj4gaXMgdGhlDQogKiAJCQkJCQlkaXZpZGVyknMgdmFsdWUuICANCiAqIEBwYXJhbSBsb2FkX3ZhbHVlCVRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSB0aW1lcpJzIGxvYWQgdmFsdWUNCiAqIAkJCQkJCWZyb20gd2hpY2ggdGhlIENvcmVUaW1lciBjb3VudGVyIHdpbGwgZGVjcmVtZW50Lg0KICogCQkJCQkJSW4gQ29udGludW91cyBtb2RlLCB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byByZWxvYWQgDQogKiAJCQkJCQl0aGUgdGltZXKScyBjb3VudGVyIHdoZW5ldmVyIGl0IHJlYWNoZXMgemVyby4NCiAqLw0Kdm9pZA0KVE1SX2luaXQNCigNCgl0aW1lcl9pbnN0YW5jZV90ICogdGhpc190aW1lciwNCglhZGRyX3QgYWRkcmVzcywNCgl1aW50OF90IG1vZGUsDQoJdWludDMyX3QgcHJlc2NhbGUsDQoJdWludDMyX3QgbG9hZF92YWx1ZQ0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBmdW5jdGlvbiBUTVJfc3RhcnQoKSBlbmFibGVzIHRoZSB0aW1lciB0byBzdGFydCBjb3VudGluZyBkb3duLg0KICogVGhpcyBmdW5jdGlvbiBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBvbmNlIGFmdGVyIHRoZSB0aW1lciBoYXMgYmVlbg0KICogaW5pdGlhbGl6ZWQgdGhyb3VnaCBhIGNhbGwgdG8gVE1SX2luaXQoKS4gSXQgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXINCiAqIGVhY2ggY2FsbCB0byBUTVJfcmVsb2FkKCkgd2hlbiB0aGUgdGltZXIgaXMgdXNlZCBpbiBvbmUtc2hvdCBtb2RlLg0KICoNCiAqIEBwYXJhbSB0aGlzX3RpbWVyICAgIFBvaW50ZXIgdG8gYSB0aW1lcl9pbnN0YW5jZV90IHN0cnVjdHVyZSBob2xkaW5nIGFsbCANCiAqICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgdGltZXIgaGFyZHdhcmUNCiAqIAkJCQkJCWluc3RhbmNlLiBUaGlzIHBvaW50ZXIgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0DQogKiAJCQkJCQlDb3JlVGltZXIgaGFyZHdhcmUgaW5zdGFuY2UuDQogKi8NCnZvaWQNClRNUl9zdGFydA0KKA0KICAgIHRpbWVyX2luc3RhbmNlX3QgKiB0aGlzX3RpbWVyDQopOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIGZ1bmN0aW9uIFRNUl9zdG9wKCkgc3RvcHMgdGhlIHRpbWVyIGNvdW50aW5nIGRvd24uIEl0IGNhbiBiZSB1c2VkIHRvIA0KICogc3RvcCBpbnRlcnJ1cHRzIGZyb20gYmVpbmcgZ2VuZXJhdGVkIHdoZW4gY29udGludW91cyBtb2RlIGlzIHVzZWQgYW5kDQogKiBpbnRlcnJ1cHRzIG11c3QgYmUgcGF1c2VkIGZyb20gYmVpbmcgZ2VuZXJhdGVkLg0KICoNCiAqIEBwYXJhbSB0aGlzX3RpbWVyICAgIFBvaW50ZXIgdG8gYSB0aW1lcl9pbnN0YW5jZV90IHN0cnVjdHVyZSBob2xkaW5nIGFsbCANCiAqICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgdGltZXIgaGFyZHdhcmUNCiAqIAkJCQkJCWluc3RhbmNlLiBUaGlzIHBvaW50ZXIgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0DQogKiAJCQkJCQlDb3JlVGltZXIgaGFyZHdhcmUgaW5zdGFuY2UuDQogKi8NCnZvaWQNClRNUl9zdG9wDQooDQogICAgdGltZXJfaW5zdGFuY2VfdCAqIHRoaXNfdGltZXINCik7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogKiBUaGUgZnVuY3Rpb24gVE1SX2VuYWJsZV9pbnQoKSBlbmFibGVzIHRoZSB0aW1lciBpbnRlcnJ1cHQuIEEgY2FsbCB0byB0aGlzDQogKiBmdW5jdGlvbiB3aWxsIGFsbG93IHRoZSBpbnRlcnJ1cHQgc2lnbmFsIGNvbWluZyBvdXQgb2YgQ29yZVRpbWVyIHRvIGJlDQogKiBhc3NlcnRlZC4gDQogKg0KICogQHBhcmFtIHRoaXNfdGltZXIgICAgUG9pbnRlciB0byBhIHRpbWVyX2luc3RhbmNlX3Qgc3RydWN0dXJlIGhvbGRpbmcgYWxsIA0KICogICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCB0aW1lciBoYXJkd2FyZQ0KICogCQkJCQkJaW5zdGFuY2UuIFRoaXMgcG9pbnRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXQNCiAqIAkJCQkJCUNvcmVUaW1lciBoYXJkd2FyZSBpbnN0YW5jZS4NCiAqLw0Kdm9pZA0KVE1SX2VuYWJsZV9pbnQNCigNCiAgICB0aW1lcl9pbnN0YW5jZV90ICogdGhpc190aW1lcg0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBmdW5jdGlvbiBUTVJfY2xlYXJfaW50KCkgY2xlYXJzIHRoZSB0aW1lciBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkDQogKiBiZSBjYWxsZWQgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzZXJ2aWNpbmcgaW50ZXJydXB0cyBmcm9tIHRoZSB0aW1lci4NCiAqIEZhaWx1cmUgdG8gY2xlYXIgdGhlIHRpbWVyIGludGVycnVwdCB3aWxsIHJlc3VsdCBpbiB0aGUgaW50ZXJydXB0IHNpZ25hbA0KICogZ2VuZXJhdGluZyBmcm9tIENvcmVUaW1lciB0byByZW1haW4gYXNzZXJ0ZWQuIFRoaXMgYXNzZXJ0aW9uIG1heSBjYXVzZSB0aGUNCiAqIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdG8gYmUgY29udGludW91c2x5IGNhbGxlZCwgY2F1c2luZyB0aGUgc3lzdGVtIHRvDQogKiBsb2NrIHVwLg0KICoNCiAqIEBwYXJhbSB0aGlzX3RpbWVyICAgIFBvaW50ZXIgdG8gYSB0aW1lcl9pbnN0YW5jZV90IHN0cnVjdHVyZSBob2xkaW5nIGFsbCANCiAqICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgdGltZXIgaGFyZHdhcmUNCiAqIAkJCQkJCWluc3RhbmNlLiBUaGlzIHBvaW50ZXIgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0DQogKiAJCQkJCQlDb3JlVGltZXIgaGFyZHdhcmUgaW5zdGFuY2UuDQogKi8NCnZvaWQNClRNUl9jbGVhcl9pbnQNCigNCiAgICB0aW1lcl9pbnN0YW5jZV90ICogdGhpc190aW1lcg0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBUTVJfY3VycmVudF92YWx1ZSgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvdW50ZXIuDQogKg0KICogQHBhcmFtIHRoaXNfdGltZXIgICAgUG9pbnRlciB0byBhIHRpbWVyX2luc3RhbmNlX3Qgc3RydWN0dXJlIGhvbGRpbmcgYWxsIA0KICogICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCB0aW1lciBoYXJkd2FyZQ0KICogCQkJCQkJaW5zdGFuY2UuIFRoaXMgcG9pbnRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXQNCiAqIAkJCQkJCUNvcmVUaW1lciBoYXJkd2FyZSBpbnN0YW5jZS4NCiAqDQogKiBAcmV0dXJuICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB0aW1lciBjb3VudGVyIHZhbHVlLg0KICovDQp1aW50MzJfdA0KVE1SX2N1cnJlbnRfdmFsdWUNCigNCiAgICB0aW1lcl9pbnN0YW5jZV90ICogdGhpc190aW1lcg0KKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBUTVJfcmVsb2FkKCkgZnVuY3Rpb24gaXMgdXNlZCBpbiBvbmUtc2hvdCBtb2RlLiBJdCByZWxvYWRzIHRoZSB0aW1lcg0KICogY291bnRlciB3aXRoIHRoZSB2YWx1ZXMgcGFzc2VkIGFzIHBhcmFtZXRlci4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBpbnRlcnJ1cHQNCiAqIGJlaW5nIGdlbmVyYXRlZCB3aGVuIHRoZSB0aW1lciBjb3VudGVyIHJlYWNoZXMgMCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4NCiAqIA0KICogQHBhcmFtIHRoaXNfdGltZXIgICAgUG9pbnRlciB0byBhIHRpbWVyX2luc3RhbmNlX3Qgc3RydWN0dXJlIGhvbGRpbmcgYWxsIA0KICogICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCB0aW1lciBoYXJkd2FyZQ0KICogCQkJCQkJaW5zdGFuY2UuIFRoaXMgcG9pbnRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXQNCiAqIAkJCQkJCUNvcmVUaW1lciBoYXJkd2FyZSBpbnN0YW5jZS4NCiAqIEBwYXJhbSBsb2FkX3ZhbHVlCVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIHZhbHVlIGZyb20gd2hpY2ggdGhlIENvcmVUaW1lcg0KICogCQkJCQkJY291bnRlciB3aWxsIGRlY3JlbWVudC4gDQogKi8NCnZvaWQgVE1SX3JlbG9hZA0KKA0KCXRpbWVyX2luc3RhbmNlX3QgKiB0aGlzX3RpbWVyLA0KCXVpbnQzMl90IGxvYWRfdmFsdWUNCik7DQoJDQojZW5kaWYgLyogQ09SRV9USU1FUl9IXyAqLw0K