LyoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogIEZpbGUgICAgICAgIDogU1RNMzJMMTUxWENBX0ZMQVNILmxkDQoqKg0KKiogIEFic3RyYWN0ICAgIDogTGlua2VyIHNjcmlwdCBmb3IgU1RNMzJMMTUxWENBIERldmljZSB3aXRoDQoqKiAgICAgICAgICAgICAgICAyNTZLQnl0ZSBGTEFTSCwgMzJLQnl0ZSBSQU0NCioqDQoqKiAgICAgICAgICAgICAgICBTZXQgaGVhcCBzaXplLCBzdGFjayBzaXplIGFuZCBzdGFjayBsb2NhdGlvbiBhY2NvcmRpbmcNCioqICAgICAgICAgICAgICAgIHRvIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4NCioqDQoqKiAgICAgICAgICAgICAgICBTZXQgbWVtb3J5IGJhbmsgYXJlYSBhbmQgc2l6ZSBpZiBleHRlcm5hbCBtZW1vcnkgaXMgdXNlZC4NCioqDQoqKiAgVGFyZ2V0ICAgICAgOiBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzINCioqDQoqKiAgRW52aXJvbm1lbnQgOiBBdG9sbGljIFRydWVTVFVESU8oUikNCioqDQoqKiAgRGlzdHJpYnV0aW9uOiBUaGUgZmlsZSBpcyBkaXN0cmlidXRlZCCTYXMgaXMslCB3aXRob3V0IGFueSB3YXJyYW50eQ0KKiogICAgICAgICAgICAgICAgb2YgYW55IGtpbmQuDQoqKg0KKiogIChjKUNvcHlyaWdodCBBdG9sbGljIEFCLg0KKiogIFlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcy1pcyBvciBtb2RpZnkgaXQgYWNjb3JkaW5nIHRvIHRoZSBuZWVkcyBvZiB5b3VyDQoqKiAgcHJvamVjdC4gVGhpcyBmaWxlIG1heSBvbmx5IGJlIGJ1aWx0IChhc3NlbWJsZWQgb3IgY29tcGlsZWQgYW5kIGxpbmtlZCkNCioqICB1c2luZyB0aGUgQXRvbGxpYyBUcnVlU1RVRElPKFIpIHByb2R1Y3QuIFRoZSB1c2Ugb2YgdGhpcyBmaWxlIHRvZ2V0aGVyDQoqKiAgd2l0aCBvdGhlciB0b29scyB0aGFuIEF0b2xsaWMgVHJ1ZVNUVURJTyhSKSBpcyBub3QgcGVybWl0dGVkLg0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqLw0KDQovKiBFbnRyeSBQb2ludCAqLw0KRU5UUlkoUmVzZXRfSGFuZGxlcikNCg0KLyogSGlnaGVzdCBhZGRyZXNzIG9mIHRoZSB1c2VyIG1vZGUgc3RhY2sgKi8NCl9lc3RhY2sgPSAweDIwMDA3RkZGOyAgICAvKiBlbmQgb2YgUkFNICovDQoNCi8qIEdlbmVyYXRlIGEgbGluayBlcnJvciBpZiBoZWFwIGFuZCBzdGFjayBkb24ndCBmaXQgaW50byBSQU0gKi8NCl9NaW5fSGVhcF9TaXplID0gMHgyMDA7ICAgICAgLyogcmVxdWlyZWQgYW1vdW50IG9mIGhlYXAgICovDQpfTWluX1N0YWNrX1NpemUgPSAweDQwMDsgLyogcmVxdWlyZWQgYW1vdW50IG9mIHN0YWNrICovDQoNCi8qIFNwZWNpZnkgdGhlIG1lbW9yeSBhcmVhcyAqLw0KTUVNT1JZDQp7DQpGTEFTSCAocngpICAgICAgOiBPUklHSU4gPSAweDA4MDAwMDAwLCBMRU5HVEggPSAyNTZLDQpSQU0gKHhydykgICAgICAgOiBPUklHSU4gPSAweDIwMDAwMDAwLCBMRU5HVEggPSAzMksNCn0NCg0KLyogRGVmaW5lIG91dHB1dCBzZWN0aW9ucyAqLw0KU0VDVElPTlMNCnsNCiAgLyogVGhlIHN0YXJ0dXAgY29kZSBnb2VzIGZpcnN0IGludG8gRkxBU0ggKi8NCiAgLmlzcl92ZWN0b3IgOg0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgIEtFRVAoKiguaXNyX3ZlY3RvcikpIC8qIFN0YXJ0dXAgY29kZSAqLw0KICAgIC4gPSBBTElHTig0KTsNCiAgfSA+RkxBU0gNCg0KICAvKiBUaGUgcHJvZ3JhbSBjb2RlIGFuZCBvdGhlciBkYXRhIGdvZXMgaW50byBGTEFTSCAqLw0KICAudGV4dCA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgKigudGV4dCkgICAgICAgICAgIC8qIC50ZXh0IHNlY3Rpb25zIChjb2RlKSAqLw0KICAgICooLnRleHQqKSAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovDQogICAgKiguZ2x1ZV83KSAgICAgICAgIC8qIGdsdWUgYXJtIHRvIHRodW1iIGNvZGUgKi8NCiAgICAqKC5nbHVlXzd0KSAgICAgICAgLyogZ2x1ZSB0aHVtYiB0byBhcm0gY29kZSAqLw0KICAgICooLmVoX2ZyYW1lKQ0KDQogICAgS0VFUCAoKiguaW5pdCkpDQogICAgS0VFUCAoKiguZmluaSkpDQoNCiAgICAuID0gQUxJR04oNCk7DQogICAgX2V0ZXh0ID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2xzIGF0IGVuZCBvZiBjb2RlICovDQogIH0gPkZMQVNIDQoNCiAgLyogQ29uc3RhbnQgZGF0YSBnb2VzIGludG8gRkxBU0ggKi8NCiAgLnJvZGF0YSA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgKigucm9kYXRhKSAgICAgICAgIC8qIC5yb2RhdGEgc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8NCiAgICAqKC5yb2RhdGEqKSAgICAgICAgLyogLnJvZGF0YSogc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8NCiAgICAuID0gQUxJR04oNCk7DQogIH0gPkZMQVNIDQoNCiAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfSA+RkxBU0gNCiAgLkFSTSA6IHsNCiAgICBfX2V4aWR4X3N0YXJ0ID0gLjsNCiAgICAqKC5BUk0uZXhpZHgqKQ0KICAgIF9fZXhpZHhfZW5kID0gLjsNCiAgfSA+RkxBU0gNCg0KICAucHJlaW5pdF9hcnJheSAgICAgOg0KICB7DQogICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOw0KICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkqKSkNCiAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOw0KICB9ID5GTEFTSA0KICAuaW5pdF9hcnJheSA6DQogIHsNCiAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7DQogICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkNCiAgICBLRUVQICgqKC5pbml0X2FycmF5KikpDQogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsNCiAgfSA+RkxBU0gNCiAgLmZpbmlfYXJyYXkgOg0KICB7DQogICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOw0KICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpDQogICAgS0VFUCAoKiguZmluaV9hcnJheSopKQ0KICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7DQogIH0gPkZMQVNIDQoNCiAgLyogdXNlZCBieSB0aGUgc3RhcnR1cCB0byBpbml0aWFsaXplIGRhdGEgKi8NCiAgX3NpZGF0YSA9IExPQURBRERSKC5kYXRhKTsNCg0KICAvKiBJbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zIGdvZXMgaW50byBSQU0sIGxvYWQgTE1BIGNvcHkgYWZ0ZXIgY29kZSAqLw0KICAuZGF0YSA6IA0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9zZGF0YSA9IC47ICAgICAgICAvKiBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgc3RhcnQgKi8NCiAgICAqKC5kYXRhKSAgICAgICAgICAgLyogLmRhdGEgc2VjdGlvbnMgKi8NCiAgICAqKC5kYXRhKikgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovDQoNCiAgICAuID0gQUxJR04oNCk7DQogICAgX2VkYXRhID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8NCiAgfSA+UkFNIEFUPiBGTEFTSA0KDQogIA0KICAvKiBVbmluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiAqLw0KICAuID0gQUxJR04oNCk7DQogIC5ic3MgOg0KICB7DQogICAgLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIC5ic3Mgc2VjaW9uICovDQogICAgX3Nic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIHN0YXJ0ICovDQogICAgX19ic3Nfc3RhcnRfXyA9IF9zYnNzOw0KICAgICooLmJzcykNCiAgICAqKC5ic3MqKQ0KICAgICooQ09NTU9OKQ0KDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9lYnNzID0gLjsgICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGJzcyBlbmQgKi8NCiAgICBfX2Jzc19lbmRfXyA9IF9lYnNzOw0KICB9ID5SQU0NCg0KICAvKiBVc2VyX2hlYXBfc3RhY2sgc2VjdGlvbiwgdXNlZCB0byBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBSQU0gbGVmdCAqLw0KICAuX3VzZXJfaGVhcF9zdGFjayA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgUFJPVklERSAoIGVuZCA9IC4gKTsNCiAgICBQUk9WSURFICggX2VuZCA9IC4gKTsNCiAgICAuID0gLiArIF9NaW5fSGVhcF9TaXplOw0KICAgIC4gPSAuICsgX01pbl9TdGFja19TaXplOw0KICAgIC4gPSBBTElHTig0KTsNCiAgfSA+UkFNDQoNCiAgDQoNCiAgLyogUmVtb3ZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAqLw0KICAvRElTQ0FSRC8gOg0KICB7DQogICAgbGliYy5hICggKiApDQogICAgbGlibS5hICggKiApDQogICAgbGliZ2NjLmEgKCAqICkNCiAgfQ0KDQogIC5BUk0uYXR0cmlidXRlcyAwIDogeyAqKC5BUk0uYXR0cmlidXRlcykgfQ0KfQ0K