LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBTQU0gU29mdHdhcmUgUGFja2FnZSBMaWNlbnNlDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEF0bWVsIENvcnBvcmF0aW9uDQogKg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICoNCiAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIGJlbG93Lg0KICoNCiAqIEF0bWVsJ3MgbmFtZSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAqDQogKiBESVNDTEFJTUVSOiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0KLyoqIFxhZGR0b2dyb3VwIHNkcmFtX21vZHVsZSANCiAqIFRoZSBTRFJBTUMgZHJpdmVyIHByb3ZpZGVzIHRoZSBJbnRlcmZhY2UgdG8gY29uZmlndXJlIHRoZSBTRFJBTSBDb250cm9sbGVyIA0KICogKFNEUkFNQykuDQogKiAgXHNlY3Rpb24gVXNhZ2UNCiAqIDx1bD4NCiAqICA8bGk+IENvbmZpZ3VyZSBTRFJBTSB1c2luZyBTRFJBTUNfQ29uZmlndXJlKCkuPC9saT4NCiANCiAqIDwvdWw+DQogKiBGb3IgbW9yZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGxvb2sgYXQgdGhlIFNEUkFNQyBzZWN0aW9uIG9mIHRoZSANCiAqIERhdGFzaGVldC4NCiAqIFJlbGF0ZWQgZmlsZXMgOlxuDQogKiBccmVmIHNkcmFtYy5jXG4NCiAqIFxyZWYgc2RyYW1jLmguXG4NCiovDQoNCiAvKioNCiAqICBcZmlsZQ0KICoNCiAqICBcc2VjdGlvbiBQdXJwb3NlDQogKg0KICogIEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5kIHVzaW5nIFNEUkFNIENvbnRyb2xsZXIgKFNEUkFNQykuDQogKg0KICovDQogDQovKioNCiAqIFxmaWxlDQogKg0KICogSW1wbGVtZW50YXRpb24gb2YgbWVtb3JpZXMgY29uZmlndXJhdGlvbiBvbiBib2FyZC4NCiAqDQogKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgIEhlYWRlcnMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQojaW5jbHVkZSAiY2hpcC5oIg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgICBMb2NhbCBmdW5jdGlvbnMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKioNCiAqIFxicmllZiBDYWxjdWxhdGUgdGhlIHNkcmFtIGNvbnRyb2xsZXIgY29uZmlnIHJlZ2lzdGVyIHZhbHVlLg0KICogXHBhcmFtIHBNZW1vcnkgIFBvaW50ZXIgdG8gdGhlIHNkcmFtIHN0cnVjdHVyZS4NCiAqIFxyZXR1cm4gQ29uZmlndXJlIHJlZ2lzdGVyIHZhbHVlLg0KICovDQpzdGF0aWMgdWludDMyX3QgU0RSQU1DX2NvbXB1dGVfQ1JfdmFsdWUoIFNTZHJhbWNfTWVtb3J5KiBwTWVtb3J5ICkNCnsNCgl1aW50MzJfdCBkdz0wIDsNCg0KCWR3IHw9IHBNZW1vcnktPmNmZy5kd0NvbHVtbkJpdHMgOw0KCWR3IHw9IHBNZW1vcnktPmNmZy5kd1Jvd0JpdHMgOw0KCWR3IHw9IHBNZW1vcnktPmNmZy5kd0JhbmtzIDsgIC8vTkIsIG51bWJlciBvZiBiYW5rcw0KCWR3IHw9IHBNZW1vcnktPmNmZy5kd0NBUyA7ICAvL0NBUywgQ0FTIGxhdGVuY3kNCglkdyB8PSBwTWVtb3J5LT5jZmcuZHdEYXRhQnVzV2lkdGggOyAgLy9EQlcsIGRhdGEgYnVzIHdpZHRoDQoJZHcgfD0gU0RSQU1DX0NSX1RXUiggcE1lbW9yeS0+Y2ZnLmR3V3JpdGVSZWNvdmVyeURlbGF5ICkgOyAgDQoJLy9UV1IsIFdyaXRlIFJlY292ZXJ5IERlbGF5DQoJZHcgfD0gU0RSQU1DX0NSX1RSQ19UUkZDKCBwTWVtb3J5LT5jZmcuZHdSb3dDeWNsZURlbGF5X1Jvd1JlZnJlc2hDeWNsZSApIDsNCgkvL1RSQ19UUkZDLFJvdyBDeWNsZSBEZWxheSBhbmQgUm93IFJlZnJlc2ggQ3ljbGUNCglkdyB8PSBTRFJBTUNfQ1JfVFJQKCBwTWVtb3J5LT5jZmcuZHdSb3dQcmVjaGFyZ2VEZWxheSApIDsgIA0KCS8vVFJQLCBSb3cgUHJlY2hhcmdlIERlbGF5DQoJZHcgfD0gU0RSQU1DX0NSX1RSQ0QoIHBNZW1vcnktPmNmZy5kd1Jvd0NvbHVtbkRlbGF5ICkgOw0KCS8vVFJDRCwgUm93IHRvIENvbHVtbiBEZWxheQ0KCWR3IHw9IFNEUkFNQ19DUl9UUkFTKCBwTWVtb3J5LT5jZmcuZHdBY3RpdmVQcmVjaGFyZ2VEZWxheSApIDsgIA0KCS8vVFJBUywgQWN0aXZlIHRvIFByZWNoYXJnZSBEZWxheQ0KCWR3IHw9IFNEUkFNQ19DUl9UWFNSKCBwTWVtb3J5LT5jZmcuZHdFeGl0U2VsZlJlZnJlc2hBY3RpdmVEZWxheSApIDsgDQoJLy9UWFNSLCBFeGl0IFNlbGYgUmVmcmVzaCB0byBBY3RpdmUgRGVsYXkNCglyZXR1cm4gZHcgOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgICBFeHBvcnRlZCBmdW5jdGlvbnMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKioNCiAqIFxicmllZiBDb25maWd1cmUgYW5kIGluaXRpYWxpemUgdGhlIFNEUkFNIGNvbnRyb2xsZXIuDQogKiBccGFyYW0gcE1lbW9yeSAgUG9pbnRlciB0byB0aGUgc2RyYW0gc3RydWN0dXJlLg0KICogXHBhcmFtIGR3Q2xvY2tGcmVxdWVuY3kgIFNEUkFNIGNsb2NrIGZyZXF1ZW5jeS4NCiAqLw0KZXh0ZXJuIHZvaWQgU0RSQU1DX0NvbmZpZ3VyZSggU1NkcmFtY19NZW1vcnkqIHBNZW1vcnksIHVpbnQzMl90IGR3Q2xvY2tGcmVxdWVuY3kgKQ0Kew0KCXZvbGF0aWxlIHVpbnQzMl90IGR3IDsNCg0KCS8qIFNEUkFNIGhhcmR3YXJlIGluaXQgKi8NCgkvKiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KCVBNQ19FbmFibGVQZXJpcGhlcmFsKCBJRF9TTUMgKSA7DQoNCgkvKiBTRFJBTSBkZXZpY2UgY29uZmlndXJlICovDQoJLyogU3RlcCAxLiAqLw0KCS8qIFByb2dyYW0gdGhlIGZlYXR1cmVzIG9mIFNEUkFNIGRldmljZSBpbnRvIHRoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLiovDQoJU0RSQU1DLT5TRFJBTUNfQ1IgPSBTRFJBTUNfY29tcHV0ZV9DUl92YWx1ZSggcE1lbW9yeSApIDsNCg0KCS8qIFN0ZXAgMi4gKi8NCgkvKiBGb3IgbG93LXBvd2VyIFNEUkFNLCB0ZW1wZXJhdHVyZS1jb21wZW5zYXRlZCBzZWxmIHJlZnJlc2ggKFRDU1IpLA0KCSAgIGRyaXZlIHN0cmVuZ3RoIChEUykgYW5kIHBhcnRpYWwgYXJyYXkgc2VsZiByZWZyZXNoIChQQVNSKSBtdXN0IGJlIHNldA0KCSAgIGluIHRoZSBMb3ctcG93ZXIgUmVnaXN0ZXIuKi8NCglTRFJBTUMtPlNEUkFNQ19MUFIgPSAwOw0KDQoJLyogU3RlcCAzLiAqLw0KCS8qIFByb2dyYW0gdGhlIG1lbW9yeSBkZXZpY2UgdHlwZSBpbnRvIHRoZSBNZW1vcnkgRGV2aWNlIFJlZ2lzdGVyICovDQoJU0RSQU1DLT5TRFJBTUNfTURSID0gU0RSQU1DX01EUl9NRF9TRFJBTTsNCg0KCS8qIFN0ZXAgNCAqLw0KCS8qIEEgbWluaW11bSBwYXVzZSBvZiAyMDAgpsxzIGlzIHByb3ZpZGVkIHRvIHByZWNlZGUgYW55IHNpZ25hbCB0b2dnbGUuDQoJICAgKDYgY29yZSBjeWNsZXMgcGVyIGl0ZXJhdGlvbikgKi8NCglmb3IgKCBkdyA9IDA7IGR3IDwgKChkd0Nsb2NrRnJlcXVlbmN5LzEwMDAwMDApKjIwMC82KSA7IGR3KysgKSA7DQoNCgkvKiBTdGVwIDUuICovDQoJLyogQSBOT1AgY29tbWFuZCBpcyBpc3N1ZWQgdG8gdGhlIFNEUi1TRFJBTS4gUHJvZ3JhbSBOT1AgY29tbWFuZCBpbnRvDQoJIE1vZGUgUmVnaXN0ZXIsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHNldCBNb2RlIHRvIDEgaW4gdGhlIE1vZGUgUmVnaXN0ZXIuDQoJUGVyZm9ybSBhIHdyaXRlIGFjY2VzcyB0byBhbnkgU0RSLVNEUkFNIGFkZHJlc3MgdG8gYWNrbm93bGVkZ2UgdGhpcyBjb21tYW5kLg0KCU5vdyB0aGUgY2xvY2sgd2hpY2ggZHJpdmVzIFNEUi1TRFJBTSBkZXZpY2UgaXMgZW5hYmxlZC4qLw0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfTk9QOw0KCSoodWludDE2X3QgKikoRUJJX1NEUkFNQ19BRERSKSA9IDA7DQoNCgkvKiBTdGVwIDYuICovDQoJLyogQW4gYWxsIGJhbmtzIHByZWNoYXJnZSBjb21tYW5kIGlzIGlzc3VlZCB0byB0aGUgU0RSLVNEUkFNLiBQcm9ncmFtIGFsbA0KCSAgIGJhbmtzIHByZWNoYXJnZSBjb21tYW5kIGludG8gTW9kZSBSZWdpc3RlciwgdGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IE1vZGUgdG8NCgkgICAyIGluIHRoZSBNb2RlIFJlZ2lzdGVyIC4gUGVyZm9ybSBhIHdyaXRlIGFjY2VzcyB0byBhbnkgU0RSU0RSQU0gYWRkcmVzcyB0bw0KCSAgIGFja25vd2xlZGdlIHRoaXMgY29tbWFuZC4gKi8NCglTRFJBTUMtPlNEUkFNQ19NUiA9IFNEUkFNQ19NUl9NT0RFX0FMTEJBTktTX1BSRUNIQVJHRTsNCgkqKHVpbnQxNl90ICopKEVCSV9TRFJBTUNfQUREUikgPSAweDA7DQoNCgkvKiBhZGQgc29tZSBkZWxheXMgYWZ0ZXIgcHJlY2hhcmdlICovDQoJZm9yICggZHcgPSAwOyBkdyA8ICgoZHdDbG9ja0ZyZXF1ZW5jeS8xMDAwMDAwKSoyMDAvNikgOyBkdysrICk7DQoNCgkvKiBTdGVwIDcuICovDQoJLyogRWlnaHQgYXV0by1yZWZyZXNoIChDQlIpIGN5Y2xlcyBhcmUgcHJvdmlkZWQuIFByb2dyYW0gdGhlIGF1dG8gcmVmcmVzaA0KCSAgIGNvbW1hbmQgKENCUikgaW50byBNb2RlIFJlZ2lzdGVyLCB0aGUgYXBwbGljYXRpb24gbXVzdCBzZXQgTW9kZSB0byA0IGluDQoJICAgdGhlIE1vZGUgUmVnaXN0ZXIuIE9uY2UgaW4gdGhlIGlkbGUgc3RhdGUsIGVpZ2h0IEFVVE8gUkVGUkVTSCBjeWNsZXMgbXVzdA0KCSAgIGJlIHBlcmZvcm1lZC4gKi8NCglTRFJBTUMtPlNEUkFNQ19NUiA9IFNEUkFNQ19NUl9NT0RFX0FVVE9fUkVGUkVTSDsNCgkqKHVpbnQxNl90ICopKEVCSV9TRFJBTUNfQUREUiArIDAgKSA9IDB4MTsNCg0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfQVVUT19SRUZSRVNIOw0KCSoodWludDE2X3QgKikoRUJJX1NEUkFNQ19BRERSICsgMCkgPSAweDI7DQoNCglTRFJBTUMtPlNEUkFNQ19NUiA9IFNEUkFNQ19NUl9NT0RFX0FVVE9fUkVGUkVTSDsNCgkqKHVpbnQxNl90ICopKEVCSV9TRFJBTUNfQUREUiArIDAgKSA9IDB4MzsNCg0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfQVVUT19SRUZSRVNIOw0KCSoodWludDE2X3QgKikoRUJJX1NEUkFNQ19BRERSICsgMCkgPSAweDQ7DQoNCglTRFJBTUMtPlNEUkFNQ19NUiA9IFNEUkFNQ19NUl9NT0RFX0FVVE9fUkVGUkVTSDsNCgkqKHVpbnQxNl90ICopKEVCSV9TRFJBTUNfQUREUiArIDAgKSA9IDB4NTsNCg0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfQVVUT19SRUZSRVNIOw0KCSoodWludDE2X3QgKikoRUJJX1NEUkFNQ19BRERSICsgMCkgPSAweDY7DQoNCglTRFJBTUMtPlNEUkFNQ19NUiA9IFNEUkFNQ19NUl9NT0RFX0FVVE9fUkVGUkVTSDsNCgkqKHVpbnQxNl90ICopKEVCSV9TRFJBTUNfQUREUiArIDAgKSA9IDB4NzsNCg0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfQVVUT19SRUZSRVNIOw0KCSoodWludDE2X3QgKikoRUJJX1NEUkFNQ19BRERSICsgMCkgPSAweDg7DQoNCgkvKiBTdGVwIDguICovDQoJLyogQSBNb2RlIFJlZ2lzdGVyIHNldCAoTVJTKSBjeWNsZSBpcyBpc3N1ZWQgdG8gcHJvZ3JhbSB0aGUgcGFyYW1ldGVycyBvZg0KCSAgIHRoZSBTRFJBTSBkZXZpY2VzLCBpbiBwYXJ0aWN1bGFyIENBUyBsYXRlbmN5IGFuZCBidXJzdCBsZW5ndGguICovDQoJU0RSQU1DLT5TRFJBTUNfTVIgPSBTRFJBTUNfTVJfTU9ERV9MT0FEX01PREVSRUc7DQoJKih1aW50MTZfdCAqKShFQklfU0RSQU1DX0FERFIgKyAweDIyKSA9IDB4Y2FmZTsNCg0KCS8qIFN0ZXAgOS4gKi8NCgkvKiBGb3IgbG93LXBvd2VyIFNEUi1TRFJBTSBpbml0aWFsaXphdGlvbiwgYW4gRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciBzZXQNCgkgICAoRU1SUykgY3ljbGUgaXMgaXNzdWVkIHRvIHByb2dyYW0gdGhlIFNEUi1TRFJBTSBwYXJhbWV0ZXJzIChUQ1NSLCBQQVNSLCBEUykuDQoJICAgVGhlIHdyaXRlIGFkZHJlc3MgbXVzdCBiZSBjaG9zZW4gc28gdGhhdCBCQVsxXSBpcyBzZXQgdG8gMSBhbmQgQkFbMF0gaXMgc2V0DQoJICAgdG8gMCAqLw0KCVNEUkFNQy0+U0RSQU1DX01SID0gU0RSQU1DX01SX01PREVfRVhUX0xPQURfTU9ERVJFRzsNCgkqKCh1aW50MTZfdCAqKShFQklfU0RSQU1DX0FERFIgKyAoMSA8PCBwTWVtb3J5LT5jZmcuZHdCSzEpKSkgPSAwOw0KDQoJLyogU3RlcCAxMC4gKi8NCgkvKiBUaGUgYXBwbGljYXRpb24gbXVzdCBnbyBpbnRvIE5vcm1hbCBNb2RlLCBzZXR0aW5nIE1vZGUgdG8gMCBpbiB0aGUgTW9kZQ0KCSAgIFJlZ2lzdGVyIGFuZCBwZXJmb3JtIGEgd3JpdGUgYWNjZXNzIGF0IGFueSBsb2NhdGlvbiBpbiB0aGUgU0RSQU0gdG8NCgkgICBhY2tub3dsZWRnZSB0aGlzIGNvbW1hbmQuICovDQoJU0RSQU1DLT5TRFJBTUNfTVIgPSBTRFJBTUNfTVJfTU9ERV9OT1JNQUw7DQoJKih1aW50MTZfdCAqKShFQklfU0RSQU1DX0FERFIgKSA9IDB4MDsNCg0KCS8qIFN0ZXAgMTEuICovDQoJLyogV3JpdGUgdGhlIHJlZnJlc2ggcmF0ZSBpbnRvIHRoZSBjb3VudCBmaWVsZCBpbiB0aGUgU0RSQU1DIFJlZnJlc2gNCgkgICBUaW1lciByZWdpc3Rlci4gU2V0IFJlZnJlc2ggdGltZXIgMTUuNjI1IHVzKi8NCglkdz1kd0Nsb2NrRnJlcXVlbmN5LzEwMDB1IDsNCglkdyo9MTU2MjV1IDsNCglkdy89MTAwMDAwMHUgOw0KCVNEUkFNQy0+U0RSQU1DX1RSID0gU0RSQU1DX1RSX0NPVU5UKCBkdyApIDsNCn0NCg0K