From: Date: July 3 2009 1:14pm Subject: bzr commit into mysql-5.1-telco-7.1 branch (magnus.blaudd:2929) List-Archive: http://lists.mysql.com/commits/77889 Message-Id: <20090703111415.8D32913405D@pilot> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_aAkSySYKDepTUus5gQc2dA)" --Boundary_(ID_aAkSySYKDepTUus5gQc2dA) MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: BASE64 Content-disposition: inline I0F0IGZpbGU6Ly8vaG9tZS9tc3ZlbnNzb24vbXlzcWwvdG1wLzdhbGxUNThZajgv Ny4xLW5kYmluZm8vIGJhc2VkIG9uIHJldmlkOmpvbmFzQG15c3FsLmNvbS0yMDA5 MDcwMjE0MDMwNS1qajAwZzZzajBsb2oweXR6DQoNCiAyOTI5IE1hZ251cyBCbMOl dWRkCTIwMDktMDctMDMgW21lcmdlXQ0KICAgICAgTWVyZ2UNCg0KICAgIHJlbW92 ZWQ6DQogICAgICBzdG9yYWdlL25kYi9pbmNsdWRlL25kYmluZm8uaA0KICAgICAg c3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3BwDQogICAgICBz dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19oZWxw ZXJzLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJp bmZvL25kYmluZm9fdGFibGVpZHMuaA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgNCiAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9tZ21zcnYvbWdtX25kYmluZm8uY3BwDQogICAgYWRkZWQ6DQog ICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uY3BwDQogICAg ICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uaHBwDQogICAgbW9k aWZpZWQ6DQogICAgICBteXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYl9iYXNpYy5y ZXN1bHQNCiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvbmRiL3IvbmRiaW5mby5yZXN1 bHQNCiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvbmRiL3QvbmRiX2Jhc2ljLnRlc3QN CiAgICAgIG15c3FsLXRlc3Qvc3VpdGUvbmRiL3QvbmRiaW5mby50ZXN0DQogICAg ICBzcWwvaGFfbmRiY2x1c3Rlci5jYw0KICAgICAgc3FsL2hhX25kYmluZm8uY2MN CiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUuYW0NCiAgICAgIHN0 b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5o cHANCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEv RHVtcFN0YXRlT3JkLmhwcA0KICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJu ZWwvc2lnbmFsZGF0YS9TaWduYWxEYXRhLmhwcA0KICAgICAgc3RvcmFnZS9uZGIv c3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL0RiaW5mb1NjYW4uY3BwDQog ICAgICBzdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEv U2lnbmFsRGF0YVByaW50LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2NvbW1v bi91dGlsL01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy9Mb2NhbFByb3h5LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvTG9jYWxQcm94eS5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9iYWNrdXAvQmFja3VwLmNwcA0KICAgICAgc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJhY2MvRGJhY2NNYWluLmNwcA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJkaWN0L0RiZGljdC5j cHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9D TWFrZUxpc3RzLnR4dA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJpbmZvL0RiaW5mby5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uaHBwDQogICAgICBzdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcA0KICAgICAgc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXAvRGJ0dXBEZWJ1Zy5jcHANCiAg ICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHV4L0RidHV4RGVi dWcuY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnV0 aWwvRGJVdGlsLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3Mvc3VtYS9TdW1hLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9i bG9ja3MvdHJpeC9Ucml4LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5l bC92bS9NYWtlZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92 bS9TaW11bGF0ZWRCbG9jay5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvdm0vU2ltdWxhdGVkQmxvY2suaHBwDQogICAgICBzdG9yYWdlL25kYi9zcmMv bWdtc3J2L01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdlL25kYi9zcmMvbmRiYXBp L05kYkluZm8uY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYklu Zm8uaHBwDQogICAgICBzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm9TY2Fu T3BlcmF0aW9uLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJ bmZvU2Nhbk9wZXJhdGlvbi5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL3Rlc3QvbmRi YXBpL3Rlc3ROZGJpbmZvLmNwcA0KPT09IG1vZGlmaWVkIGZpbGUgJ215c3FsLXRl c3Qvc3VpdGUvbmRiL3IvbmRiX2Jhc2ljLnJlc3VsdCcNCi0tLSBhL215c3FsLXRl c3Qvc3VpdGUvbmRiL3IvbmRiX2Jhc2ljLnJlc3VsdAkyMDA5LTA2LTA0IDEzOjE0 OjE0ICswMDAwDQorKysgYi9teXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYl9iYXNp Yy5yZXN1bHQJMjAwOS0wNy0wMyAxMToxMjozMyArMDAwMA0KQEAgLTcsNyArNyw3 IEBAIGF0dHIyIElOVCwNCiBhdHRyMyBWQVJDSEFSKDEwKQ0KICkgRU5HSU5FPW5k YmNsdXN0ZXI7DQogZHJvcCB0YWJsZSB0MTsNCi1TSE9XIEdMT0JBTCBTVEFUVVMg TElLRSAnbmRiJSc7DQorU0hPVyBHTE9CQUwgU1RBVFVTIExJS0UgJ25kYlxfJSc7 DQogVmFyaWFibGVfbmFtZQlWYWx1ZQ0KIE5kYl9jbHVzdGVyX25vZGVfaWQJIw0K IE5kYl9jb25maWdfZnJvbV9ob3N0CSMNCkBAIC0yMSw3ICsyMSw3IEBAIE5kYl9w cnVuZWRfc2Nhbl9jb3VudAkjDQogTmRiX2NsdXN0ZXJfY29ubmVjdGlvbl9wb29s CSMNCiBOZGJfY29uZmxpY3RfZm5fbWF4CSMNCiBOZGJfY29uZmxpY3RfZm5fb2xk CSMNCi1TSE9XIEdMT0JBTCBWQVJJQUJMRVMgTElLRSAnbmRiJSc7DQorU0hPVyBH TE9CQUwgVkFSSUFCTEVTIExJS0UgJ25kYlxfJSc7DQogVmFyaWFibGVfbmFtZQlW YWx1ZQ0KIG5kYl9hdXRvaW5jcmVtZW50X3ByZWZldGNoX3N6CSMNCiBuZGJfYmF0 Y2hfc2l6ZQkjDQoNCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L3N1aXRl L25kYi9yL25kYmluZm8ucmVzdWx0Jw0KLS0tIGEvbXlzcWwtdGVzdC9zdWl0ZS9u ZGIvci9uZGJpbmZvLnJlc3VsdAkyMDA5LTA2LTIzIDE0OjA3OjU4ICswMDAwDQor KysgYi9teXNxbC10ZXN0L3N1aXRlL25kYi9yL25kYmluZm8ucmVzdWx0CTIwMDkt MDctMDMgMTE6MTI6MzMgKzAwMDANCkBAIC03Myw5ICs3MywxNSBAQCBUQUJMRV9J RAlUQUJMRV9OQU1FCUNSRUFURV9TUUwNCiAJYEZSRUVgIElOVCBVTlNJR05FRCwN CiAJYFNJWkVgIElOVCBVTlNJR05FRA0KICkgRU5HSU5FPU5EQklORk87DQorNwlU RVNUCUNSRUFURSBUQUJMRSBgVEVTVGAgKA0KKwlgTk9ERV9JRGAgSU5UIFVOU0lH TkVELA0KKwlgQkxPQ0tfTlVNQkVSYCBJTlQgVU5TSUdORUQsDQorCWBCTE9DS19J TlNUQU5DRWAgSU5UIFVOU0lHTkVELA0KKwlgQ09VTlRFUmAgSU5UIFVOU0lHTkVE DQorKSBFTkdJTkU9TkRCSU5GTzsNCiBzZWxlY3QgY291bnQoKikgZnJvbSBUQUJM RVM7DQogY291bnQoKikNCi03DQorOA0KIHNlbGVjdCAqIGZyb20gVEFCTEVTIHdo ZXJlIFRBQkxFX0lEID0gMjsNCiBUQUJMRV9JRAlUQUJMRV9OQU1FCUNSRUFURV9T UUwNCiAyCU1FTVVTQUdFCUNSRUFURSBUQUJMRSBgTUVNVVNBR0VgICgNCkBAIC05 Nyw2ICsxMDMsMTIgQEAgVEFCTEVfSUQJVEFCTEVfTkFNRQlDUkVBVEVfU1FMDQog CWBGUkVFYCBJTlQgVU5TSUdORUQsDQogCWBTSVpFYCBJTlQgVU5TSUdORUQNCiAp IEVOR0lORT1OREJJTkZPOw0KKzcJVEVTVAlDUkVBVEUgVEFCTEUgYFRFU1RgICgN CisJYE5PREVfSURgIElOVCBVTlNJR05FRCwNCisJYEJMT0NLX05VTUJFUmAgSU5U IFVOU0lHTkVELA0KKwlgQkxPQ0tfSU5TVEFOQ0VgIElOVCBVTlNJR05FRCwNCisJ YENPVU5URVJgIElOVCBVTlNJR05FRA0KKykgRU5HSU5FPU5EQklORk87DQogc2Vs ZWN0ICogZnJvbSBUQUJMRVMgd2hlcmUgVEFCTEVfTkFNRSA9ICdMT0dERVNUSU5B VElPTic7DQogVEFCTEVfSUQJVEFCTEVfTkFNRQlDUkVBVEVfU1FMDQogMwlMT0dE RVNUSU5BVElPTglDUkVBVEUgVEFCTEUgYExPR0RFU1RJTkFUSU9OYCAoDQpAQCAt MTA4LDcgKzEyMCw3IEBAIFRBQkxFX0lECVRBQkxFX05BTUUJQ1JFQVRFX1NRTA0K ICkgRU5HSU5FPU5EQklORk87DQogc2VsZWN0IGNvdW50KCopIGZyb20gVEFCTEVT IHQxLCBUQUJMRVMgdDIgV0hFUkUgdDEuVEFCTEVfSUQgPSB0MS5UQUJMRV9JRDsN CiBjb3VudCgqKQ0KLTQ5DQorNjQNCiB1cGRhdGUgVEFCTEVTIHNldCBUQUJMRV9J RD0yIHdoZXJlIFRBQkxFX0lEPTM7DQogRVJST1IgSFkwMDA6IFRhYmxlIHN0b3Jh Z2UgZW5naW5lIGZvciAnVEFCTEVTJyBkb2Vzbid0IGhhdmUgdGhpcyBvcHRpb24N CiBGTFVTSCAgVEFCTEVTOw0KQEAgLTEyMSw1ICsxMzMsMTIgQEAgVEFCTEVfSUQN CiA0DQogNQ0KIDYNCis3DQorU0hPVyBHTE9CQUwgU1RBVFVTIExJS0UgJ25kYmlu Zm9cXyUnOw0KK1ZhcmlhYmxlX25hbWUJVmFsdWUNCitTSE9XIEdMT0JBTCBWQVJJ QUJMRVMgTElLRSAnbmRiaW5mb1xfJSc7DQorVmFyaWFibGVfbmFtZQlWYWx1ZQ0K K25kYmluZm9fbWF4X2J5dGVzCTANCituZGJpbmZvX21heF9yb3dzCTEwDQogZHJv cCB0YWJsZSBUQUJMRVM7DQogRFJPUCBEQVRBQkFTRSBuZGIkaW5mbzsNCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ215c3FsLXRlc3Qvc3VpdGUvbmRiL3QvbmRiX2Jhc2lj LnRlc3QnDQotLS0gYS9teXNxbC10ZXN0L3N1aXRlL25kYi90L25kYl9iYXNpYy50 ZXN0CTIwMDgtMTAtMDYgMTE6MDM6MzIgKzAwMDANCisrKyBiL215c3FsLXRlc3Qv c3VpdGUvbmRiL3QvbmRiX2Jhc2ljLnRlc3QJMjAwOS0wNy0wMyAxMToxMjozMyAr MDAwMA0KQEAgLTI1LDkgKzI1LDkgQEAgZHJvcCB0YWJsZSB0MTsNCiAjIFNob3cg c3RhdHVzIGFuZCB2YXJpYWJsZXMNCiAjDQogLS1yZXBsYWNlX2NvbHVtbiAyICMN Ci1TSE9XIEdMT0JBTCBTVEFUVVMgTElLRSAnbmRiJSc7DQorU0hPVyBHTE9CQUwg U1RBVFVTIExJS0UgJ25kYlxfJSc7DQogLS1yZXBsYWNlX2NvbHVtbiAyICMNCi1T SE9XIEdMT0JBTCBWQVJJQUJMRVMgTElLRSAnbmRiJSc7DQorU0hPVyBHTE9CQUwg VkFSSUFCTEVTIExJS0UgJ25kYlxfJSc7DQogDQogIw0KICMgQ3JlYXRlIGEgbm9y bWFsIHRhYmxlIHdpdGggcHJpbWFyeSBrZXkNCg0KPT09IG1vZGlmaWVkIGZpbGUg J215c3FsLXRlc3Qvc3VpdGUvbmRiL3QvbmRiaW5mby50ZXN0Jw0KLS0tIGEvbXlz cWwtdGVzdC9zdWl0ZS9uZGIvdC9uZGJpbmZvLnRlc3QJMjAwOS0wNi0yNCAxNDoz MjoxOSArMDAwMA0KKysrIGIvbXlzcWwtdGVzdC9zdWl0ZS9uZGIvdC9uZGJpbmZv LnRlc3QJMjAwOS0wNy0wMyAxMToxMjozMyArMDAwMA0KQEAgLTI1LDUgKzI1LDkg QEAgdXBkYXRlIFRBQkxFUyBzZXQgVEFCTEVfSUQ9MiB3aGVyZSBUQUJMRQ0KIA0K IEZMVVNIICBUQUJMRVM7DQogU0VMRUNUIFRBQkxFX0lEIGZyb20gVEFCTEVTOw0K Kw0KK1NIT1cgR0xPQkFMIFNUQVRVUyBMSUtFICduZGJpbmZvXF8lJzsNCitTSE9X IEdMT0JBTCBWQVJJQUJMRVMgTElLRSAnbmRiaW5mb1xfJSc7DQorDQogZHJvcCB0 YWJsZSBUQUJMRVM7DQogRFJPUCBEQVRBQkFTRSBuZGIkaW5mbzsNCg0KPT09IG1v ZGlmaWVkIGZpbGUgJ3NxbC9oYV9uZGJjbHVzdGVyLmNjJw0KLS0tIGEvc3FsL2hh X25kYmNsdXN0ZXIuY2MJMjAwOS0wNi0xNSAxNDowMTowMSArMDAwMA0KKysrIGIv c3FsL2hhX25kYmNsdXN0ZXIuY2MJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0K QEAgLTEzOTg1LDYgKzEzOTg1LDggQEAgc3RydWN0IHN0X215c3FsX3N0b3JhZ2Vf ZW5naW5lIG5kYmNsdXN0ZQ0KIA0KICNpbmNsdWRlICJoYV9uZGJpbmZvLmgiDQog DQorZXh0ZXJuIHN0cnVjdCBzdF9teXNxbF9zeXNfdmFyKiBuZGJpbmZvX3N5c3Rl bV92YXJpYWJsZXNbXTsNCisNCiBzdHJ1Y3Qgc3RfbXlzcWxfc3RvcmFnZV9lbmdp bmUgbmRiaW5mb19zdG9yYWdlX2VuZ2luZT0NCiB7IE1ZU1FMX0hBTkRMRVJUT05f SU5URVJGQUNFX1ZFUlNJT04gfTsNCiANCkBAIC0xNDAxNCw3ICsxNDAxNiw3IEBA IG15c3FsX2RlY2xhcmVfcGx1Z2luKG5kYmNsdXN0ZXIpDQogICBuZGJpbmZvX2Rl aW5pdCwgICAgICAgICAgICAgLyogcGx1Z2luIGRlaW5pdCAqLw0KICAgMHgwMDAx LCAgICAgICAgICAgICAgICAgICAgIC8qIHBsdWdpbiB2ZXJzaW9uICovDQogICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzIHZhcmlhYmxlcyAq Lw0KLSAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHN5c3RlbSB2YXJp YWJsZXMgKi8NCisgIG5kYmluZm9fc3lzdGVtX3ZhcmlhYmxlcywgICAvKiBzeXN0 ZW0gdmFyaWFibGVzICovDQogICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg LyogY29uZmlnIG9wdGlvbnMgKi8NCiB9DQogbXlzcWxfZGVjbGFyZV9wbHVnaW5f ZW5kOw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL2hhX25kYmluZm8uY2MnDQot LS0gYS9zcWwvaGFfbmRiaW5mby5jYwkyMDA5LTA2LTI0IDA4OjM5OjA5ICswMDAw DQorKysgYi9zcWwvaGFfbmRiaW5mby5jYwkyMDA5LTA3LTAzIDEwOjMxOjMwICsw MDAwDQpAQCAtMjAsNiArMjAsMzIgQEANCiAjaW5jbHVkZSAiaGFfbmRiaW5mby5o Ig0KICNpbmNsdWRlICIuLi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8u aHBwIg0KIA0KKw0KK3N0YXRpYyBNWVNRTF9USERWQVJfVUlOVCgNCisgIG1heF9y b3dzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLw0KKyAgUExV R0lOX1ZBUl9SUUNNREFSRywNCisgICJTcGVjaWZ5IG1heCBudW1iZXIgb2Ygcm93 cyB0byBmZXRjaCBwZXIgcm91bmR0cmlwIHRvIGNsdXN0ZXIiLA0KKyAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBmdW5jLiAqLw0K KyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUg ZnVuYy4gKi8NCisgIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLw0KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBtaW4gKi8NCisgIDI1NiwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogbWF4ICovDQorICAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGJsb2NrICovDQorKTsNCisNCitzdGF0aWMgTVlTUUxfVEhEVkFS X1VJTlQoDQorICBtYXhfYnl0ZXMsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IG5hbWUgKi8NCisgIFBMVUdJTl9WQVJfUlFDTURBUkcsDQorICAiU3BlY2lmeSBh cHByb3guIG1heCBudW1iZXIgb2YgYnl0ZXMgdG8gZmV0Y2ggcGVyIHJvdW5kdHJp cCB0byBjbHVzdGVyIiwNCisgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogY2hlY2sgZnVuYy4gKi8NCisgIE5VTEwsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdXBkYXRlIGZ1bmMuICovDQorICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8NCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWluICovDQorICA2NTUz NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1heCAqLw0KKyAgMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayAqLw0KKyk7 DQorDQorDQogc3RhdGljIE5kYkluZm8qIGdfbmRiaW5mbzsNCiANCiBleHRlcm4g TmRiX2NsdXN0ZXJfY29ubmVjdGlvbiogZ19uZGJfY2x1c3Rlcl9jb25uZWN0aW9u Ow0KQEAgLTkyLDYgKzExOCwxNiBAQCBpbnQgaGFfbmRiaW5mbzo6b3Blbihjb25z dCBjaGFyICpuYW1lLCBpDQogew0KICAgREJVR19FTlRFUigiaGFfbmRiaW5mbzo6 b3BlbiIpOw0KICAgREJVR19QUklOVCgiZW50ZXIiLCAoIm5hbWU6ICVzLCBtb2Rl OiAlZCIsIG5hbWUsIG1vZGUpKTsNCisNCisgIGlmICghZ19uZGJpbmZvKQ0KKyAg ew0KKyAgICBwdXNoX3dhcm5pbmcoY3VycmVudF90aGQsIE1ZU1FMX0VSUk9SOjpX QVJOX0xFVkVMX05PVEUsIDEsDQorICAgICAgICAgICAgICAgICAiQ2FuJ3Qgb3Bl biB0YWJsZSAtICduZGJpbmZvJyBoYXMgYmVlbiBzdGFydGVkICINCisgICAgICAg ICAgICAgICAgICJpbiBsaW1pdGVkIG1vZGUgYmVjYXVzZSB0aGUgJ25kYmNsdXN0 ZXInICINCisgICAgICAgICAgICAgICAgICJlbmdpbmUgaXMgZGlzYWJsZWQiKTsN CisgICAgREJVR19SRVRVUk4oSEFfRVJSX1dST05HX0NPTU1BTkQpOw0KKyAgfQ0K Kw0KICAgYXNzZXJ0KGlzX2Nsb3NlZCgpKTsNCiANCiAgIGludCBlcnIgPSBnX25k YmluZm8tPm9wZW5UYWJsZShuYW1lLCAmbV9pbXBsLm1fdGFibGUpOw0KQEAgLTEy MywxMCArMTU5LDE0IEBAIGludCBoYV9uZGJpbmZvOjpybmRfaW5pdChib29sIHNj YW4pDQogICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJzY2FuOiAlZCIsIHNjYW4pKTsN CiAgIGFzc2VydChpc19vcGVuKCkpOw0KICAgYXNzZXJ0KG1faW1wbC5tX3NjYW5f b3AgPT0gTlVMTCk7IC8vIE5vIHNjYW4gYWxyZWFkeSBvbmdvaW5nDQorICBUSEQq IHRoZCA9IGN1cnJlbnRfdGhkOw0KIA0KICAgaW50IGVycjsNCiAgIE5kYkluZm9T Y2FuT3BlcmF0aW9uKiBzY2FuX29wID0gTlVMTDsNCi0gIGlmICgoZXJyID0gZ19u ZGJpbmZvLT5jcmVhdGVTY2FuT3BlcmF0aW9uKG1faW1wbC5tX3RhYmxlLCAmc2Nh bl9vcCkpICE9IDApDQorICBpZiAoKGVyciA9IGdfbmRiaW5mby0+Y3JlYXRlU2Nh bk9wZXJhdGlvbihtX2ltcGwubV90YWJsZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX29wLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhEVkFSKHRoZCwgbWF4 X3Jvd3MpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVEhEVkFSKHRoZCwgbWF4X2J5dGVzKSkpICE9IDApDQogICAgIERCVUdf UkVUVVJOKGVycjJteXNxbChlcnIpKTsNCiANCiAgIGlmICgoZXJyID0gc2Nhbl9v cC0+cmVhZFR1cGxlcygpKSAhPSAwKQ0KQEAgLTI3OCwxMiArMzE4LDEwIEBAIGlu dCBuZGJpbmZvX2luaXQodm9pZCAqcGx1Z2luKQ0KICAgLyogQ2hlY2sgaWYgJ25k YmNsdXN0ZXJfaW5pdCcgaGFzIGJlZW4gcnVuIGFuZCBjb25uZWN0ZWQgdG8gY2x1 c3RlciAqLw0KICAgaWYgKCFnX25kYl9jbHVzdGVyX2Nvbm5lY3Rpb24pDQogICB7 DQotICAgIHNxbF9wcmludF93YXJuaW5nKCJEaXNhYmxpbmcgJ25kYmluZm8nIGJl Y2F1c2UgJ25kYmNsdXN0ZXInIGlzICINCi0gICAgICAgICAgICAgICAgICAgICAg Im5vdCBzdGFydGVkIik7DQotICAgIC8vIGh0b24tPnN0YXRlID0gU0hPV19PUFRJ T05fRElTQUJMRUQ7DQotICAgIC8vIFRPRE8gXiB0aGlzIGRvZXMgbm90IG1hcmsg dGhlIGVuZ2luZSBhcyBkaXNhYmxlZA0KLSAgICAvLyBXcml0ZSBzbWFsbCBwYXRj aCBmb3IgTXlTUUwgU2VydmVyIGFsbG93aW5nIGFuIGVuZ2luZSB0byBkaXNhYmxl IGl0c2VsZj8NCi0gICAgREJVR19SRVRVUk4oMSk7DQorICAgIHNxbF9wcmludF93 YXJuaW5nKCJTdGFydGluZyAnbmRiaW5mbycgaW4gbGltaXRlZCBtb2RlICINCisg ICAgICAgICAgICAgICAgICAgICAgImJlY2F1c2UgJ25kYmNsdXN0ZXInIGVuZ2lu ZSBpcyBkaXNhYmxlZCIpOw0KKw0KKyAgICBEQlVHX1JFVFVSTigwKTsNCiAgIH0N CiANCiAgIGJvb2wgdXNlX2xvd2VyX2Nhc2UgPSAobG93ZXJfY2FzZV90YWJsZV9u YW1lcyAhPSAwKTsNCkBAIC0zMjYsNCArMzY0LDExIEBAIGludCBuZGJpbmZvX2Rl aW5pdCh2b2lkICpwbHVnaW4pDQogICBEQlVHX1JFVFVSTigwKTsNCiB9DQogDQor c3RydWN0IHN0X215c3FsX3N5c192YXIqIG5kYmluZm9fc3lzdGVtX3ZhcmlhYmxl c1tdPSB7DQorICBNWVNRTF9TWVNWQVIobWF4X3Jvd3MpLA0KKyAgTVlTUUxfU1lT VkFSKG1heF9ieXRlcyksDQorDQorICBOVUxMDQorfTsNCisNCiB0ZW1wbGF0ZSBj bGFzcyBWZWN0b3I8Y29uc3QgTmRiSW5mb1JlY0F0dHIqPjsNCg0KPT09IG1vZGlm aWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUuYW0nDQotLS0g YS9zdG9yYWdlL25kYi9pbmNsdWRlL01ha2VmaWxlLmFtCTIwMDktMDUtMjcgMTU6 MjE6NDUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUu YW0JMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTIwLDggKzIwLDcgQEAg bmRiaW5jbHVkZV9IRUFERVJTID0gXA0KIG5kYl9jb25zdGFudHMuaCBcDQogbmRi X2luaXQuaCBcDQogbmRiX3R5cGVzLmggXA0KLW5kYl92ZXJzaW9uLmggXA0KLW5k YmluZm8uaA0KK25kYl92ZXJzaW9uLmgNCiANCiBuZGJhcGlpbmNsdWRlX0hFQURF UlMgPSBcDQogbmRiYXBpL25kYmFwaV9saW1pdHMuaCBcDQoNCj09PSBtb2RpZmll ZCBmaWxlICdzdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL0Ri aW5mb1NjYW4uaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwv c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcAkyMDA5LTA2LTIzIDExOjQyOjU3ICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRh L0RiaW5mb1NjYW4uaHBwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0y MCwxMzYgKzIwLDU2IEBADQogDQogc3RydWN0IERiaW5mb1NjYW5DdXJzb3INCiB7 DQotICBVaW50MzIgY3VyX3JlcXVlc3RJbmZvOw0KLSAgVWludDMyIGN1cl9ub2Rl Ow0KLSAgVWludDMyIGN1cl9ibG9jazsNCi0gIFVpbnQzMiBjdXJfaXRlbTsNCisg IFVpbnQzMiBkYXRhWzExXTsNCiB9Ow0KIA0KLXN0cnVjdCBEYmluZm9TY2FuUmVx Ow0KLWV4dGVybiAiQyIgdm9pZCBkYmluZm9fcmF0ZWxpbWl0X2luaXQoc3RydWN0 IGRiaW5mb19yYXRlbGltaXQgKnJsLA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IERiaW5mb1NjYW5SZXEgKik7DQotDQotc3Ry dWN0IERiaW5mb1NjYW5SZXENCitzdHJ1Y3QgRGJpbmZvU2Nhbg0KIHsNCi0gIC8q IFJlY2l2ZXIocykgKi8NCi0gIGZyaWVuZCBjbGFzcyBCYWNrdXA7DQotICBmcmll bmQgY2xhc3MgRGJhY2M7DQotICBmcmllbmQgY2xhc3MgRGJkaWN0Ow0KLSAgZnJp ZW5kIGNsYXNzIERiaW5mbzsNCi0gIGZyaWVuZCBjbGFzcyBEYnRjOw0KLSAgZnJp ZW5kIGNsYXNzIERidHVwOw0KLSAgZnJpZW5kIGNsYXNzIERidHV4Ow0KLSAgZnJp ZW5kIGNsYXNzIERiVXRpbDsNCi0gIGZyaWVuZCBjbGFzcyBRbWdyOw0KLSAgZnJp ZW5kIGNsYXNzIFN1bWE7DQotICBmcmllbmQgY2xhc3MgVHJpeDsNCi0NCi0gIGZy aWVuZCB2b2lkIGRiaW5mb19yYXRlbGltaXRfaW5pdChzdHJ1Y3QgZGJpbmZvX3Jh dGVsaW1pdCAqcmwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IERiaW5mb1NjYW5SZXEgKnIpOw0KLQ0KLSAgLyogU2VuZGVyKHMp ICovDQotICBmcmllbmQgY2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb247DQotDQot ICBmcmllbmQgYm9vbCBwcmludERCSU5GT19TQ0FOX1JFUShGSUxFICogb3V0cHV0 LCBjb25zdCBVaW50MzIgKiB0aGVEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVWludDMyIGxlbiwgVWludDE2IHJlY2VpdmVyQmxvY2tO byk7DQotDQogICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aCA9IDEyICk7DQot ICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aFdpdGhDdXJzb3IgPSAxNiApOw0K IA0KLSAgVWludDMyIHRhYmxlSWQ7ICAgICAgICAgLy8gREJJTkZPIHRhYmxlIElE DQotICBVaW50MzIgYXBpUmVmOyAgICAgICAgICAvLyBBUEkgZG9pbmcgc2Nhbg0K LSAgVWludDMyIGFwaVR4bklkOyAgICAgICAgLy8gSUQgdW5pcXVlIHRvIEFQSS4N Ci0gIFVpbnQzMiBzZW5kZXJSZWY7ICAgICAgIC8vIFNlbmRlciwgREJJTkZPIG9y IHByb3h5IGZvciBtdWx0aS10aHJlYWRlZCBibG9jaw0KLSAgVWludDMyIGluc3Rh bmNlOyAgICAgICAgLy8gQmxvY2sgaW5zdGFuY2UgZm9yIG11bHRpLXRocmVhZGVk IGJsb2NrDQotICBVaW50MzIgY29sQml0bWFwTG87ICAgICAvLyBiaXRtYXAgb2Yg d2hhdCBjb2x1bW5zIHlvdSB3YW50LiAoNjRiaXQpDQotICBVaW50MzIgY29sQml0 bWFwSGk7DQotICBVaW50MzIgcmVxdWVzdEluZm87ICAgICAvLyBzdGFydCwgZW5k b2ZkYXRhDQotDQotICBTVEFUSUNfQ09OU1QoIFN0YXJ0U2NhbiAgPSAweDEgKTsN Ci0gIFNUQVRJQ19DT05TVCggQWxsQ29sdW1ucyA9IDB4MiApOw0KLQ0KLSAgVWlu dDMyIG1heFJvd3M7DQotICBVaW50MzIgbWF4Qnl0ZXM7DQotICBVaW50MzIgcm93 c190b3RhbDsNCi0gIFVpbnQzMiB3b3JkX3RvdGFsOw0KLQ0KLSAgdW5pb24NCi0g IHsNCi0gICAgVWludDMyIGN1cnNvcmRhdGFbMV07DQotICAgIHN0cnVjdCBEYmlu Zm9TY2FuQ3Vyc29yIGN1cnNvcjsNCi0gIH07DQotfTsNCi0NCi0NCi1jbGFzcyBE YmluZm9TY2FuQ29uZiB7DQotICAvKiBSZWNpdmVyKHMpICovDQotICBmcmllbmQg Y2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb247DQotDQotICAvKiBTZW5kZXIocykg Ki8NCi0gIGZyaWVuZCBjbGFzcyBCYWNrdXA7DQotICBmcmllbmQgY2xhc3MgRGJh Y2M7DQotICBmcmllbmQgY2xhc3MgRGJkaWN0Ow0KLSAgZnJpZW5kIGNsYXNzIERi aW5mbzsNCi0gIGZyaWVuZCBjbGFzcyBEYnRjOw0KLSAgZnJpZW5kIGNsYXNzIERi dHVwOw0KLSAgZnJpZW5kIGNsYXNzIERidHV4Ow0KLSAgZnJpZW5kIGNsYXNzIERi VXRpbDsNCi0gIGZyaWVuZCBjbGFzcyBMb2NhbFByb3h5Ow0KLSAgZnJpZW5kIGNs YXNzIFFtZ3I7DQotICBmcmllbmQgY2xhc3MgU3VtYTsNCi0gIGZyaWVuZCBjbGFz cyBUcml4Ow0KLQ0KLSAgZnJpZW5kIGJvb2wgcHJpbnREQklORk9fU0NBTl9DT05G KEZJTEUgKiBvdXRwdXQsIGNvbnN0IFVpbnQzMiAqIHRoZURhdGEsDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIGxlbiwgVWludDE2 IHJlY2VpdmVyQmxvY2tObyk7DQotDQotICBTVEFUSUNfQ09OU1QoIERvbmVMZW5n dGggPSAzICk7DQotICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aCA9IDEyICk7 DQotICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0aFdpdGhDdXJzb3IgPSAxNiAp Ow0KKyAgLy8gQVBJIGlkZW50aWZpZXJzDQorICBVaW50MzIgcmVzdWx0RGF0YTsg ICAgICAvLyBXaWxsIGJlIHJldHVybmVkIGluIFRyYW5zSWRBSTo6Y29ubmVjdFB0 cg0KKyAgVWludDMyIHRyYW5zSWRbMl07ICAgICAgLy8gSUQgdW5pcXVlIHRvIEFQ SQ0KKyAgVWludDMyIHJlc3VsdFJlZjsgICAgICAgLy8gV2hlcmUgdG8gc2VuZCBy ZXN1bHQgcm93cw0KIA0KKyAgLy8gUGFyYW1ldGVycyBmb3IgdGhlIHNjYW4NCiAg IFVpbnQzMiB0YWJsZUlkOyAgICAgICAgIC8vIERCSU5GTyB0YWJsZSBJRA0KLSAg VWludDMyIGFwaVJlZjsgICAgICAgICAgLy8gQVBJIGRvaW5nIHNjYW4NCi0gIFVp bnQzMiBhcGlUeG5JZDsgICAgICAgIC8vIElEIHVuaXF1ZSB0byBBUEkuDQotICBV aW50MzIgc2VuZGVyUmVmOyAgICAgICAvLyBTZW5kZXIgb2YgREJJTkZPX1NDQU5S RVENCi0gIFVpbnQzMiBpbnN0YW5jZTsgICAgICAgIC8vIEJsb2NrIGluc3RhbmNl IGZvciBtdWx0aS10aHJlYWRlZCBibG9jaw0KLSAgVWludDMyIGNvbEJpdG1hcExv OyAgICAgLy8gYml0bWFwIG9mIHdoYXQgY29sdW1ucyB5b3Ugd2FudC4gKDY0Yml0 KQ0KLSAgVWludDMyIGNvbEJpdG1hcEhpOw0KLSAgVWludDMyIHJlcXVlc3RJbmZv OyAgICAgLy8gc3RhcnQsIGVuZG9mZGF0YQ0KLQ0KLSAgU1RBVElDX0NPTlNUKCBN b3JlRGF0YSAgPSAweDEgKTsNCi0gIFNUQVRJQ19DT05TVCggQWxsQ29sdW1ucyA9 IDB4MiApOw0KLQ0KLSAgVWludDMyIG1heFJvd3M7DQotICBVaW50MzIgbWF4Qnl0 ZXM7DQotICBVaW50MzIgcm93c190b3RhbDsNCi0gIFVpbnQzMiB3b3JkX3RvdGFs Ow0KKyAgVWludDMyIGNvbEJpdG1hcFsyXTsgICAgIC8vIGJpdG1hcCBvZiB3aGF0 IGNvbHVtbnMgeW91IHdhbnQuICg2NGJpdCkNCisgIFVpbnQzMiByZXF1ZXN0SW5m bzsgICAgIC8vIGZsYWdzDQorICBVaW50MzIgbWF4Um93czsgICAgICAgICAvLyBN YXggbnVtYmVyIG9mIHJvd3MgdG8gcmV0dXJuIHBlciBSRVENCisgIFVpbnQzMiBt YXhCeXRlczsgICAgICAgIC8vIE1heCBudW1iZXIgb2YgYnl0ZXMgdG8gcmV0dXJu IHBlciBSRVENCisNCisgIC8vIFJlc3VsdCBmcm9tIHRoZSBzY2FuDQorICBVaW50 MzIgcmV0dXJuZWRSb3dzOyAgICAvLyBOdW1iZXIgb2Ygcm93cyByZXR1cm5lZCBm b3IgdGhpcyBDT05GDQorDQorICAvLyBDdXJzb3IgdGhhdCBjb250YWlucyBkYXRh IHVzZWQgYnkgdGhlIGtlcm5lbCBmb3Iga2VlcGluZyB0cmFjaw0KKyAgLy8gb2Yg d2hlcmUgaXQgaXMsIGhvdyBtYW55IGJ5dGVzIG9yIHJvd3MgaXQgaGFzIHNlbnQg ZXRjLg0KKyAgLy8gU2V0IHRvIHplcm8gaW4gbGFzdCBDT05GIHRvIGluZGljYXRl IHRoYXQgc2NhbiBpcyBmaW5pc2hlZA0KKyAgVWludDMyIGN1cnNvcl9zejsNCisg IC8vIEN1cnNvciBkYXRhIG9mIGN1cnNvcl9zeiBzaXplIGZvbGxvd3MNCisgIERi aW5mb1NjYW5DdXJzb3IgY3Vyc29yOw0KKw0KKyAgc3RhdGljIGNvbnN0IFVpbnQz MiogZ2V0Q3Vyc29yUHRyKGNvbnN0IERiaW5mb1NjYW4qIHNpZykgew0KKyAgICBy ZXR1cm4gc2lnLT5jdXJzb3IuZGF0YTsNCisgIH0NCisgIHN0YXRpYyBVaW50MzIq IGdldEN1cnNvclB0clNlbmQoRGJpbmZvU2Nhbiogc2lnKSB7DQorICAgIHJldHVy biBzaWctPmN1cnNvci5kYXRhOw0KKyAgfQ0KIA0KLSAgdW5pb24NCi0gIHsNCi0g ICAgVWludDMyIGN1cnNvcmRhdGFbMV07DQotICAgIHN0cnVjdCBEYmluZm9TY2Fu Q3Vyc29yIGN1cnNvcjsNCi0gIH07DQogfTsNCiANCi0vKioNCi0gKiBTRU5ERVI6 ICBEQklORk8NCi0gKiBSRUNJVkVSOiBBUEksTUdNDQotICovDQotY2xhc3MgRGJp bmZvU2NhblJlZiB7DQotICAvKiBSZWNpdmVyKHMpICovDQotICBmcmllbmQgY2xh c3MgTmRiSW5mb1NjYW5PcGVyYXRpb247DQotDQotICAvKiBTZW5kZXIocykgKi8N Ci0gIGZyaWVuZCBjbGFzcyBEYmluZm87DQotICBmcmllbmQgY2xhc3MgTG9jYWxQ cm94eTsNCit0eXBlZGVmIERiaW5mb1NjYW4gRGJpbmZvU2NhblJlcTsNCit0eXBl ZGVmIERiaW5mb1NjYW4gRGJpbmZvU2NhbkNvbmY7DQogDQotICBmcmllbmQgYm9v bCBwcmludERCSU5GT19TQ0FOX1JFRihGSUxFICogb3V0cHV0LCBjb25zdCBVaW50 MzIgKiB0aGVEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVWludDMyIGxlbiwgVWludDE2IHJlY2VpdmVyQmxvY2tObyk7DQorc3RydWN0 IERiaW5mb1NjYW5SZWYNCit7DQorICBTVEFUSUNfQ09OU1QoIFNpZ25hbExlbmd0 aCA9IDUgKTsNCiANCi0gIFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoID0gMyAp Ow0KKyAgLy8gQVBJIGlkZW50aWZpZXJzDQorICBVaW50MzIgcmVzdWx0RGF0YTsg ICAgICAvLyBXaWxsIGJlIHJldHVybmVkIGluIFRyYW5zSWRBSTo6Y29ubmVjdFB0 cg0KKyAgVWludDMyIHRyYW5zSWRbMl07ICAgICAgLy8gSUQgdW5pcXVlIHRvIEFQ SQ0KKyAgVWludDMyIHJlc3VsdFJlZjsgICAgICAgLy8gV2hlcmUgdG8gc2VuZCBy ZXN1bHQgcm93cw0KIA0KLSAgVWludDMyIHRhYmxlSWQ7ICAgICAgICAgLy8gREJJ TkZPIHRhYmxlIElEDQotICBVaW50MzIgYXBpVHhuSWQ7ICAgICAgICAvLyBJRCB1 bmlxdWUgdG8gQVBJLg0KICAgVWludDMyIGVycm9yQ29kZTsgICAgICAgLy8gRXJy b3IgQ29kZQ0KICAgZW51bSBFcnJvckNvZGUNCiAgIHsNCg0KPT09IG1vZGlmaWVk IGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRHVt cFN0YXRlT3JkLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVs L3NpZ25hbGRhdGEvRHVtcFN0YXRlT3JkLmhwcAkyMDA5LTA1LTI3IDE1OjIxOjQ1 ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxk YXRhL0R1bXBTdGF0ZU9yZC5ocHAJMjAwOS0wNi0yNCAyMDo1Njo1MSArMDAwMA0K QEAgLTE3Niw3ICsxNzYsNiBAQCBwdWJsaWM6DQogICAgIER1bXBEYmluZm8gPSAx NDAwMCwNCiAgICAgRGJpbmZvTGlzdFRhYmxlcyA9IDE0MDAxLA0KICAgICBEYmlu Zm9MaXN0Q29sdW1ucyA9IDE0MDAyLA0KLSAgICBEYmluZm9TY2FuVGFibGUgPSAx NDAwMywNCiANCiAgICAgU2NoZW1hUmVzb3VyY2VTbmFwc2hvdCA9IDQwMDAsIC8v IFNhdmUgcmVzb3VyY2UgY29uc3VtcHRpb24NCiAgICAgU2NoZW1hUmVzb3VyY2VD aGVja0xlYWsgPSA0MDAxIC8vIGNoZWNrIHNhbWUgYXMgc25hcHNob3QNCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25h bGRhdGEvU2lnbmFsRGF0YS5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9pbmNsdWRl L2tlcm5lbC9zaWduYWxkYXRhL1NpZ25hbERhdGEuaHBwCTIwMDktMDYtMTUgMTM6 MTI6MTkgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3Np Z25hbGRhdGEvU2lnbmFsRGF0YS5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAw MA0KQEAgLTI3OSw4ICsyNzksNyBAQCBHU05fUFJJTlRfU0lHTkFUVVJFKHByaW50 QlVJTERfSU5EWF9JTVBMDQogR1NOX1BSSU5UX1NJR05BVFVSRShwcmludEFQSV9W RVJTSU9OX1JFUSk7DQogR1NOX1BSSU5UX1NJR05BVFVSRShwcmludEFQSV9WRVJT SU9OX0NPTkYpOw0KIA0KLUdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9f U0NBTl9SRVEpOw0KLUdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9fU0NB Tl9DT05GKTsNCitHU05fUFJJTlRfU0lHTkFUVVJFKHByaW50REJJTkZPX1NDQU4p Ow0KIEdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9fU0NBTl9SRUYpOw0K IA0KICNlbmRpZg0KDQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9pbmNs dWRlL25kYmluZm8uaCcNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1ZGUvbmRiaW5m by5oCTIwMDktMDYtMjMgMTQ6MDc6NTggKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRi L2luY2x1ZGUvbmRiaW5mby5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDANCkBA IC0xLDEzOSArMCwwIEBADQotLyogQ29weXJpZ2h0IChDKSAyMDA3IE15U1FMIEFC DQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZS4NCi0NCi0gICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCi0g ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0gICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLQ0KLSAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0gICBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBICovDQotDQotI2luY2x1ZGUgPG5kYl90eXBlcy5oPg0K LQ0KLSNpZm5kZWYgX19OREJJTkZPX0hfXw0KLSNkZWZpbmUgX19OREJJTkZPX0hf Xw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRp Zg0KLQ0KLSNkZWZpbmUgTkRCSU5GT19UWVBFX1NUUklORyAxDQotI2RlZmluZSBO REJJTkZPX1RZUEVfTlVNQkVSIDINCi0NCi1zdHJ1Y3QgbmRiaW5mb19jb2x1bW4g ew0KLSAgY2hhciBuYW1lWzUwXTsNCi0gIGludCBjb2x0eXBlOw0KLX07DQotDQot I2RlZmluZSBOREJJTkZPX1RBQkxFX01FTUJFUlMgXA0KLSAgY2hhciBuYW1lWzUw XTsgXA0KLSAgaW50IG5jb2xzOyBcDQotICBpbnQgZmxhZ3M7DQotDQotc3RydWN0 IG5kYmluZm9fdGFibGUgew0KLSAgTkRCSU5GT19UQUJMRV9NRU1CRVJTDQotICBz dHJ1Y3QgbmRiaW5mb19jb2x1bW4gY29sWzFdOw0KLX07DQotDQotI2RlZmluZSBE RUNMQVJFX05EQklORk9fVEFCTEUodmFyLCBudW0pICAgICAgICAgXA0KLXN0cnVj dCBuZGJpbmZvc3RydWN0IyN2YXIgeyAgICAgICAgICAgICAgICAgICAgIFwNCi0g IE5EQklORk9fVEFCTEVfTUVNQkVSUyAgICAgICAgICAgICAgICAgICAgICAgICBc DQotICBzdHJ1Y3QgbmRiaW5mb19jb2x1bW4gY29sW251bV07ICAgICAgICAgICAg ICAgXA0KLX0gdmFyDQotDQotaW50IG5kYmluZm9fY3JlYXRlX3NxbChzdHJ1Y3Qg bmRiaW5mb190YWJsZSAqdCwgY2hhciogc3FsLCBpbnQgbGVuKTsNCi0NCi1zdGF0 aWMgaW5saW5lIGNvbnN0IGNoYXIqIG5kYmluZm9fY29sdHlwZV90b19zdHJpbmco aW50IGNvbHR5cGUpDQotew0KLSAgc3RhdGljIGNvbnN0IGNoYXIqIG5kYmluZm9f dHlwZV9zdHJpbmdbXT0geyJOT05FIiwNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVkFSQ0hBUig1MTIpIiwNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5UIFVOU0lH TkVEIg0KLSAgfTsNCi0NCi0gIGlmKGNvbHR5cGU+MykNCi0gICAgY29sdHlwZT0g MDsNCi0NCi0gIHJldHVybiBuZGJpbmZvX3R5cGVfc3RyaW5nW2NvbHR5cGVdOw0K LX0NCi0NCi1zdHJ1Y3QgZGJpbmZvX3JvdyB7DQotICBVaW50MzIqIGJ1ZjsgICAg ICAvLyBTdGFydCBvZiByb3cgYnVmZmVyDQotICBVaW50MzIqIGN1cnI7ICAgICAv LyBDdXJyZW50IHBvc2l0aW9uIGluIHJvdyBidWZmZXINCi0gIFVpbnQzMiogZW5k OyAgICAgIC8vIExhc3QgcG9zaXRpb24gaW4gYnVmZmVyDQotICBpbnQgY29sX2Nv dW50OyAgICAvLyBDdXJyZW50IGNvbHVtbiBjb3VudGVyDQotDQotICBVaW50MzIg c2l6ZSh2b2lkKSBjb25zdCB7DQotICAgIHJldHVybiAoVWludDMyKShjdXJyIC0g YnVmKTsNCi0gIH07DQotfTsNCi0NCi12b2lkIGRiaW5mb193cml0ZV9yb3dfaW5p dChzdHJ1Y3QgZGJpbmZvX3JvdyAqciwgY2hhciogYnVmLCBpbnQgbGVuKTsNCi0N Ci1pbnQgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oc3RydWN0IGRiaW5mb19yb3cg KnIsIGNvbnN0IGNoYXIqIGNvbCwgaW50IGNsZW4pOw0KLQ0KLWludCBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoc3RydWN0IGRiaW5mb19yb3cgKnIsIFVp bnQzMiB2YWx1ZSk7DQotDQotLyoNCi0gKiBXZSBuZWVkIHRvIGNhbGwgcHJvdGVj dGVkIGZ1bmN0aW9uIG9mIFNpbXVsYXRlZEJsb2NrIChzZW5kU2lnbmFsKQ0KLSAq IHNvIGVhc2llciB0byBpbXBsZW1lbnQgYXMgbWFjcm8uLi4NCi0gKi8NCi0jZGVm aW5lIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCBhcGlUeG5JZCwgc2Vu ZGVyUmVmKSAgICAgICAgICAgICBcDQotICBkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KLSAgVHJhbnNJZEFJICp0aWRhaT0gKFRyYW5zSWRBSSopc2lnbmFsLT5nZXRE YXRhUHRyU2VuZCgpOyAgICAgICAgICAgICAgIFwNCi0gIHRpZGFpLT5jb25uZWN0 UHRyPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQotICB0aWRhaS0+dHJhbnNJZFswXT0gYXBpVHhuSWQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgdGlkYWkt PnRyYW5zSWRbMV09IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCi0gIExpbmVhclNlY3Rpb25QdHIgcHRyWzNdOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQot ICBwdHJbMF0ucCA9IHIuYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgcHRyWzBdLnN6ID0gci5zaXpl KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCi0gIHJsLnJvd3MrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBybC5ieXRlcyAr PSByLnNpemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KLSAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdTTl9EQklO Rk9fVFJBTlNJRF9BSSwgc2lnbmFsLCAzLCBKQkIsIHB0ciwgMSk7IFwNCi19IHdo aWxlICgwKQ0KLQ0KLSNkZWZpbmUgZGJpbmZvX3JhdGVsaW1pdF9zZW5kY29uZihz aWduYWwsIHJlcSwgcmwsIGl0ZW1udW1iZXIpICAgICAgICAgIFwNCi0gIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQotICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERi aW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7ICAgICAgXA0K LSAgY29uZi0+dGFibGVJZD0gKHJlcSkudGFibGVJZDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPnNlbmRlclJlZj0g KHJlcSkuc2VuZGVyUmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcDQotICBjb25mLT5hcGlUeG5JZD0gKHJlcSkuYXBpVHhuSWQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+Y29s Qml0bWFwTG89IChyZXEpLmNvbEJpdG1hcExvOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCi0gIGNvbmYtPmNvbEJpdG1hcEhpPSAocmVxKS5jb2xC aXRtYXBIaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBj b25mLT5yZXF1ZXN0SW5mbz0gKHJlcSkucmVxdWVzdEluZm8gfCBEYmluZm9TY2Fu Q29uZjo6TW9yZURhdGE7ICAgICAgXA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9yZXF1 ZXN0SW5mbz0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCi0gIGNvbmYtPmN1cnNvci5jdXJfbm9kZT0gZ2V0T3duTm9kZUlkKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5jdXJzb3Iu Y3VyX2Jsb2NrPSBudW1iZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9pdGVtPSAoaXRlbW51bWJl cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYt Pm1heFJvd3M9IChybCkubWF4Um93czsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5tYXhCeXRlcz0gKHJsKS5tYXhC eXRlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K LSAgY29uZi0+cm93c190b3RhbD0gKHJsKS5yb3dzX3RvdGFsICsgKHJsKS5yb3dz OyAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPndvcmRfdG90YWw9 IChybCkuYnl0ZXNfdG90YWwrIChybCkuYnl0ZXM7ICAgICAgICAgICAgICAgICAg ICAgICBcDQotICBzZW5kU2lnbmFsKChyZXEpLnNlbmRlclJlZiwgR1NOX0RCSU5G T19TQ0FOQ09ORiwgc2lnbmFsLCAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAg ICBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsg ICAgICAgICAgICAgIFwNCi19IHdoaWxlICgwKQ0KLQ0KLQ0KLXN0cnVjdCBkYmlu Zm9fcmF0ZWxpbWl0IHsNCi0gIFVpbnQzMiBtYXhSb3dzOw0KLSAgVWludDMyIG1h eEJ5dGVzOw0KLSAgVWludDMyIHJvd3NfdG90YWw7DQotICBVaW50MzIgYnl0ZXNf dG90YWw7DQotICBVaW50MzIgcm93czsNCi0gIFVpbnQzMiBieXRlczsNCi19Ow0K LQ0KLXN0cnVjdCBEYmluZm9TY2FuUmVxOw0KLXZvaWQgZGJpbmZvX3JhdGVsaW1p dF9pbml0KHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0ICpybCwgc3RydWN0IERiaW5m b1NjYW5SZXEgKik7DQotDQotaW50IGRiaW5mb19yYXRlbGltaXRfY29udGludWUo c3RydWN0IGRiaW5mb19yYXRlbGltaXQgKnJsKTsNCi0NCi0jaWZkZWYgX19jcGx1 c3BsdXMNCi19DQotI2VuZGlmDQotDQotI2VuZGlmDQoNCj09PSBtb2RpZmllZCBm aWxlICdzdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEv RGJpbmZvU2Nhbi5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMvY29tbW9uL2Rl YnVnZ2VyL3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5jcHAJMjAwOS0wNi0xNSAxMzox MjoxOSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dl ci9zaWduYWxkYXRhL0RiaW5mb1NjYW4uY3BwCTIwMDktMDctMDMgMTA6MzE6MzAg KzAwMDANCkBAIC0xOSw1MiArMTksNDMgQEANCiAjaW5jbHVkZSA8c2lnbmFsZGF0 YS9EYmluZm9TY2FuLmhwcD4NCiANCiBib29sDQotcHJpbnREQklORk9fU0NBTl9S RVEoRklMRSogb3V0cHV0LCBjb25zdCBVaW50MzIqIHRoZURhdGEsIFVpbnQzMiBs ZW4sIFVpbnQxNikNCitwcmludERCSU5GT19TQ0FOKEZJTEUqIG91dHB1dCwgY29u c3QgVWludDMyKiB0aGVEYXRhLCBVaW50MzIgbGVuLCBVaW50MTYpDQogew0KLSAg Y29uc3QgRGJpbmZvU2NhblJlcSogc2lnID0gKGNvbnN0IERiaW5mb1NjYW5SZXEq KXRoZURhdGE7DQotICBmcHJpbnRmKG91dHB1dCwgIiB0YWJsZUlkOiAldSIsIHNp Zy0+dGFibGVJZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBhcGlSZWY6IDB4JXgi LCBzaWctPmFwaVJlZik7DQotICBmcHJpbnRmKG91dHB1dCwgIiBhcGlUeG5JZDog JXUiLCBzaWctPmFwaVR4bklkKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHNlbmRl clJlZjogMHgleCIsIHNpZy0+c2VuZGVyUmVmKTsNCi0gIGZwcmludGYob3V0cHV0 LCAiIGluc3RhbmNlOiAldSIsIHNpZy0+aW5zdGFuY2UpOw0KLSAgZnByaW50Zihv dXRwdXQsICIgY29sQml0bWFwTG86IDB4JXgiLCBzaWctPmNvbEJpdG1hcExvKTsN Ci0gIGZwcmludGYob3V0cHV0LCAiIGNvbEJpdG1hcEhpOiAweCV4Iiwgc2lnLT5j b2xCaXRtYXBIaSk7DQotICBmcHJpbnRmKG91dHB1dCwgIiByZXF1ZXN0SW5mbzog JXUiLCBzaWctPnJlcXVlc3RJbmZvKTsNCi0gIGZwcmludGYob3V0cHV0LCAiXG4i KTsNCi0gIGZwcmludGYob3V0cHV0LCAiIG1heFJvd3M6ICV1Iiwgc2lnLT5tYXhS b3dzKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIG1heEJ5dGVzOiAldSIsIHNpZy0+ bWF4Qnl0ZXMpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgcm93c190b3RhbDogJXUi LCBzaWctPnJvd3NfdG90YWwpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgd29yZF90 b3RhbDogJXUiLCBzaWctPndvcmRfdG90YWwpOw0KKyAgY29uc3QgRGJpbmZvU2Nh biogc2lnID0gKGNvbnN0IERiaW5mb1NjYW4qKXRoZURhdGE7DQorICBmcHJpbnRm KG91dHB1dCwgIiByZXN1bHREYXRhOiAweCV4Iiwgc2lnLT5yZXN1bHREYXRhKTsN CisgIGZwcmludGYob3V0cHV0LCAiIHRyYW5zaWQ6IHsgMHgleCwgMHgleH0iLCBz aWctPnRyYW5zSWRbMF0sIHNpZy0+dHJhbnNJZFsxXSk7DQorICBmcHJpbnRmKG91 dHB1dCwgIiByZXN1bHRSZWY6IDB4JXgiLCBzaWctPnJlc3VsdFJlZik7DQogICBm cHJpbnRmKG91dHB1dCwgIlxuIik7DQotICByZXR1cm4gdHJ1ZTsNCi19DQotDQot Ym9vbA0KLXByaW50REJJTkZPX1NDQU5fQ09ORihGSUxFKiBvdXRwdXQsIGNvbnN0 IFVpbnQzMiogdGhlRGF0YSwgVWludDMyIGxlbiwgVWludDE2KQ0KLXsNCi0gIGNv bnN0IERiaW5mb1NjYW5Db25mKiBzaWcgPSAoY29uc3QgRGJpbmZvU2NhbkNvbmYq KXRoZURhdGE7DQogICBmcHJpbnRmKG91dHB1dCwgIiB0YWJsZUlkOiAldSIsIHNp Zy0+dGFibGVJZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBhcGlSZWY6IDB4JXgi LCBzaWctPmFwaVJlZik7DQotICBmcHJpbnRmKG91dHB1dCwgIiBhcGlUeG5JZDog JXUiLCBzaWctPmFwaVR4bklkKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHNlbmRl clJlZjogMHgleCIsIHNpZy0+c2VuZGVyUmVmKTsNCi0gIGZwcmludGYob3V0cHV0 LCAiIGluc3RhbmNlOiAldSIsIHNpZy0+aW5zdGFuY2UpOw0KLSAgZnByaW50Zihv dXRwdXQsICIgY29sQml0bWFwTG86IDB4JXgiLCBzaWctPmNvbEJpdG1hcExvKTsN Ci0gIGZwcmludGYob3V0cHV0LCAiIGNvbEJpdG1hcEhpOiAweCV4Iiwgc2lnLT5j b2xCaXRtYXBIaSk7DQotICBmcHJpbnRmKG91dHB1dCwgIiByZXF1ZXN0SW5mbzog JXUiLCBzaWctPnJlcXVlc3RJbmZvKTsNCisgIGZwcmludGYob3V0cHV0LCAiIGNv bEJpdG1hcDogeyAweCV4LCAweCV4IH0iLA0KKyAgICAgICAgICBzaWctPmNvbEJp dG1hcFswXSwgc2lnLT5jb2xCaXRtYXBbMV0pOw0KKyAgZnByaW50ZihvdXRwdXQs ICIgcmVxdWVzdEluZm86IDB4JXgiLCBzaWctPnJlcXVlc3RJbmZvKTsNCiAgIGZw cmludGYob3V0cHV0LCAiXG4iKTsNCiAgIGZwcmludGYob3V0cHV0LCAiIG1heFJv d3M6ICV1Iiwgc2lnLT5tYXhSb3dzKTsNCiAgIGZwcmludGYob3V0cHV0LCAiIG1h eEJ5dGVzOiAldSIsIHNpZy0+bWF4Qnl0ZXMpOw0KLSAgZnByaW50ZihvdXRwdXQs ICIgcm93c190b3RhbDogJXUiLCBzaWctPnJvd3NfdG90YWwpOw0KLSAgZnByaW50 ZihvdXRwdXQsICIgd29yZF90b3RhbDogJXUiLCBzaWctPndvcmRfdG90YWwpOw0K ICAgZnByaW50ZihvdXRwdXQsICJcbiIpOw0KKyAgZnByaW50ZihvdXRwdXQsICIg cmV0dXJuZWRSb3dzOiAldSIsIHNpZy0+cmV0dXJuZWRSb3dzKTsNCisgIGZwcmlu dGYob3V0cHV0LCAiXG4iKTsNCisgIGZwcmludGYob3V0cHV0LCAiIGN1cnNvcl9z ejogJXVcbiIsIHNpZy0+Y3Vyc29yX3N6KTsNCisgIGNvbnN0IFVpbnQzMiogY3Vy c29yX2RhdGEgPSBEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoc2lnKTsNCisgIGZw cmludGYob3V0cHV0LCAiIHNlbmRlclJlZjogMHgleCBzYXZlU2VuZGVyUmVmOiAw eCV4XG4iLA0KKyAgICAgICAgICBjdXJzb3JfZGF0YVswXSwgY3Vyc29yX2RhdGFb MV0pOw0KKyAgZnByaW50ZihvdXRwdXQsICIgY3VyclJlZjogMHgleCBzYXZlQ3Vy clJlZjogMHgleCBmbGFnczogMHgleFxuIiwNCisgICAgICAgICAgY3Vyc29yX2Rh dGFbMl0sIGN1cnNvcl9kYXRhWzNdLCBjdXJzb3JfZGF0YVs0XSk7DQorICBmcHJp bnRmKG91dHB1dCwgIiBkYXRhOiBbIDB4JXgsIDB4JXgsIDB4JXgsIDB4JXggXVxu IiwNCisgICAgICAgICAgY3Vyc29yX2RhdGFbNV0sIGN1cnNvcl9kYXRhWzZdLCBj dXJzb3JfZGF0YVs3XSwgY3Vyc29yX2RhdGFbOF0pOw0KKyAgZnByaW50ZihvdXRw dXQsICIgdG90YWxSb3dzOiAldSB0b3RhbEJ5dGVzOiAldVxuIiwNCisgICAgICAg ICAgY3Vyc29yX2RhdGFbOV0sIGN1cnNvcl9kYXRhWzEwXSk7DQogICByZXR1cm4g dHJ1ZTsNCiB9DQogDQogYm9vbCBwcmludERCSU5GT19TQ0FOX1JFRihGSUxFKiBv dXRwdXQsIGNvbnN0IFVpbnQzMiogdGhlRGF0YSwgVWludDMyIGxlbiwgVWludDE2 KQ0KIHsNCiAgIGNvbnN0IERiaW5mb1NjYW5SZWYqIHNpZyA9IChjb25zdCBEYmlu Zm9TY2FuUmVmKil0aGVEYXRhOw0KLSAgZnByaW50ZihvdXRwdXQsICIgdGFibGVJ ZDogJXUiLCBzaWctPnRhYmxlSWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgYXBp VHhuSWQ6ICV1Iiwgc2lnLT5hcGlUeG5JZCk7DQorICBmcHJpbnRmKG91dHB1dCwg IiByZXN1bHREYXRhOiAweCV4Iiwgc2lnLT5yZXN1bHREYXRhKTsNCisgIGZwcmlu dGYob3V0cHV0LCAiIHRyYW5zaWQ6IHsgMHgleCwgMHgleH0iLCBzaWctPnRyYW5z SWRbMF0sIHNpZy0+dHJhbnNJZFsxXSk7DQorICBmcHJpbnRmKG91dHB1dCwgIiBy ZXN1bHRSZWY6IDB4JXgiLCBzaWctPnJlc3VsdFJlZik7DQorICBmcHJpbnRmKG91 dHB1dCwgIlxuIik7DQogICBmcHJpbnRmKG91dHB1dCwgIiBlcnJvckNvZGU6ICV1 Iiwgc2lnLT5lcnJvckNvZGUpOw0KICAgZnByaW50ZihvdXRwdXQsICJcbiIpOw0K ICAgcmV0dXJuIHRydWU7DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25k Yi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEvU2lnbmFsRGF0YVByaW50 LmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVidWdnZXIvc2ln bmFsZGF0YS9TaWduYWxEYXRhUHJpbnQuY3BwCTIwMDktMDYtMTUgMTM6MTI6MTkg KzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVidWdnZXIvc2ln bmFsZGF0YS9TaWduYWxEYXRhUHJpbnQuY3BwCTIwMDktMDctMDMgMTA6MzE6MzAg KzAwMDANCkBAIC0yNTEsOCArMjUxLDggQEAgU2lnbmFsRGF0YVByaW50RnVuY3Rp b25zW10gPSB7DQogICAseyBHU05fQVBJX1ZFUlNJT05fUkVRLCBwcmludEFQSV9W RVJTSU9OX1JFUSB9DQogICAseyBHU05fQVBJX1ZFUlNJT05fQ09ORiwgcHJpbnRB UElfVkVSU0lPTl9DT05GIH0NCiANCi0gICx7IEdTTl9EQklORk9fU0NBTlJFUSwg cHJpbnREQklORk9fU0NBTl9SRVEgfQ0KLSAgLHsgR1NOX0RCSU5GT19TQ0FOQ09O RiwgcHJpbnREQklORk9fU0NBTl9DT05GIH0NCisgICx7IEdTTl9EQklORk9fU0NB TlJFUSwgcHJpbnREQklORk9fU0NBTiB9DQorICAseyBHU05fREJJTkZPX1NDQU5D T05GLCBwcmludERCSU5GT19TQ0FOIH0NCiAgICx7IEdTTl9EQklORk9fU0NBTlJF RiwgcHJpbnREQklORk9fU0NBTl9SRUYgfQ0KIA0KICAgLHsgMCwgMCB9DQoNCj09 PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvTWFr ZWZpbGUuYW0nDQotLS0gYS9zdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvTWFr ZWZpbGUuYW0JMjAwOS0wNi0yMyAxMTo1NTo0MSArMDAwMA0KKysrIGIvc3RvcmFn ZS9uZGIvc3JjL2NvbW1vbi91dGlsL01ha2VmaWxlLmFtCTIwMDktMDctMDMgMTA6 MzE6MzAgKzAwMDANCkBAIC0yOCw4ICsyOCw3IEBAIGxpYmdlbmVyYWxfbGFfU09V UkNFUyA9IFwNCiAgICAgICAgICAgICBzdHJkdXAuYyBcDQogICAgICAgICAgICAg Q29uZmlnVmFsdWVzLmNwcCBuZGJfaW5pdC5jcHAgYmFzZXN0cmluZ192c25wcmlu dGYuYyBcDQogICAgICAgICAgICAgQml0bWFzay5jcHAgXA0KLQkgICAgbmRiX3Jh bmQuYyBcDQotCSAgICBuZGJpbmZvLmNwcA0KKwkgICAgbmRiX3JhbmQuYyANCiAN CiBJTkNMVURFU19MT0MgPSBAWkxJQl9JTkNMVURFU0ANCiANCg0KPT09IHJlbW92 ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3Bw Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3Bw CTIwMDktMDYtMjMgMTE6NTU6NDEgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9jb21tb24vdXRpbC9uZGJpbmZvLmNwcAkxOTcwLTAxLTAxIDAwOjAwOjAwICsw MDAwDQpAQCAtMSw1NCArMCwwIEBADQotLyogQ29weXJpZ2h0IChDKSAyMDA3IE15 U1FMIEFCDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCi0NCi0gICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwNCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0gICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLQ0K LSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0gICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAgMDIxMTEtMTMwNyAgVVNBICovDQotDQotI2luY2x1ZGUgPHN0ZGlvLmg+ DQotI2luY2x1ZGUgPHN0cmluZy5oPg0KLSNpbmNsdWRlIDxlcnJuby5oPg0KLQ0K LSNpbmNsdWRlIDxuZGJfZ2xvYmFsLmg+DQotI2luY2x1ZGUgPG15X2Jhc2UuaD4N Ci0jaW5jbHVkZSA8bV9zdHJpbmcuaD4gLyogZm9yIG15X3NucHJpbnRmICovDQot DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0NCi1pbnQgbmRiaW5mb19jcmVhdGVf c3FsKHN0cnVjdCBuZGJpbmZvX3RhYmxlICp0LCBjaGFyKiBzcWwsIGludCBsZW4p DQotew0KLSAgaW50IGk7DQotDQotICBteV9zbnByaW50ZihzcWwsbGVuLCJDUkVB VEUgVEFCTEUgYCVzYCAoIiwgdC0+bmFtZSk7DQotDQotICBsZW4tPXN0cmxlbihz cWwpOw0KLSAgc3FsKz1zdHJsZW4oc3FsKTsNCi0gIGlmKGxlbjwwKQ0KLSAgICBy ZXR1cm4gRU5PTUVNOw0KLQ0KLSAgZm9yKGk9MDtpPHQtPm5jb2xzO2krKykNCi0g IHsNCi0gICAgbXlfc25wcmludGYoc3FsLGxlbiwiXG5cdGAlc2AgJXMsIiwNCi0g ICAgICAgICAgICAgdC0+Y29sW2ldLm5hbWUsIG5kYmluZm9fY29sdHlwZV90b19z dHJpbmcodC0+Y29sW2ldLmNvbHR5cGUpKTsNCi0gICAgbGVuLT1zdHJsZW4oc3Fs KTsNCi0gICAgc3FsKz1zdHJsZW4oc3FsKTsNCi0gICAgaWYobGVuPDApDQotICAg ICAgcmV0dXJuIEVOT01FTTsNCi0gIH0NCi0gICooLS1zcWwpPSdcMCc7DQotICBt eV9zbnByaW50ZihzcWwsbGVuLCJcbikgRU5HSU5FPU5EQklORk87Iik7DQotICBs ZW4tPXN0cmxlbihzcWwpOw0KLSAgc3FsKz1zdHJsZW4oc3FsKTsNCi0gIGlmKGxl bjwwKQ0KLSAgICByZXR1cm4gRU5PTUVNOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvTG9jYWxQcm94eS5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy9Mb2NhbFByb3h5LmNwcAkyMDA5LTA2LTE1IDEzOjMxOjM3ICswMDAw DQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9Mb2NhbFByb3h5 LmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtOTc3LDY4ICs5Nzcs MTQxIEBAIExvY2FsUHJveHk6OnNlbmREUk9QX1RSSUdfSU1QTF9DT05GKFNpZ24N CiANCiAvLyBHU05fREJJTkZPX1NDQU5SRVENCiANCi12b2lkDQotTG9jYWxQcm94 eTo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCogc2lnbmFsKQ0KK2Jvb2wNCitM b2NhbFByb3h5OjpmaW5kX25leHQoTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29y KSBjb25zdA0KIHsNCi0gIFNzX0RCSU5GT19TQ0FOUkVRJiBzcyA9IHNzU2VpemU8 U3NfREJJTkZPX1NDQU5SRVE+KDEpOw0KKyAgamFtKCk7DQorICBjb25zdCBVaW50 MzIgbm9kZSA9IHJlZlRvTm9kZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgY29uc3Qg VWludDMyIGJsb2NrID0gcmVmVG9NYWluKGN1cnNvci0+Y3VyclJlZik7DQorICBV aW50MzIgaW5zdGFuY2UgPSByZWZUb0luc3RhbmNlKGN1cnNvci0+Y3VyclJlZik7 DQogDQotICBjb25zdCBEYmluZm9TY2FuUmVxKiByZXEgPSAoY29uc3QgRGJpbmZv U2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyKCk7DQotICBzcy5tX3JlcSA9ICpy ZXE7DQotICBuZGJyZXF1aXJlKHNpZ25hbC0+Z2V0TGVuZ3RoKCkgPT0gRGJpbmZv U2NhblJlcTo6U2lnbmFsTGVuZ3RoIHx8DQotICAgICAgICAgICAgIHNpZ25hbC0+ Z2V0TGVuZ3RoKCkgPT0gRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1 cnNvcik7DQotICBzcy5tX2xlbiA9IHNpZ25hbC0+Z2V0TGVuZ3RoKCk7DQotICBz ZW5kUkVRKHNpZ25hbCwgc3MpOw0KLX0NCisgIG5kYnJlcXVpcmUobm9kZSA9PSBn ZXRPd25Ob2RlSWQoKSk7DQorICBuZGJyZXF1aXJlKGJsb2NrID09IG51bWJlcigp KTsNCiANCi12b2lkDQotTG9jYWxQcm94eTo6ZXhlY0RCSU5GT19TQ0FOQ09ORihT aWduYWwqIHNpZ25hbCkNCi17DQotICBTc19EQklORk9fU0NBTlJFUSYgc3MgPSBz c0ZpbmQ8U3NfREJJTkZPX1NDQU5SRVE+KDEpOw0KLSAgcmVjdkNPTkYoc2lnbmFs LCBzcyk7DQorICBpZiAoaW5zdGFuY2UrKyA8IGNfd29ya2VycykNCisgIHsNCisg ICAgY3Vyc29yLT5jdXJyUmVmID0gbnVtYmVyVG9SZWYoYmxvY2ssIGluc3RhbmNl LCBub2RlKTsNCisgICAgcmV0dXJuIHRydWU7DQorICB9DQorDQorICBjdXJzb3It PmN1cnJSZWYgPSBudW1iZXJUb1JlZihibG9jaywgbm9kZSk7DQorICByZXR1cm4g ZmFsc2U7DQogfQ0KIA0KKw0KKw0KIHZvaWQNCi1Mb2NhbFByb3h5OjpzZW5kREJJ TkZPX1NDQU5SRVEoU2lnbmFsKiBzaWduYWwsIFVpbnQzMiBzc0lkKQ0KK0xvY2Fs UHJveHk6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwqIHNpZ25hbCkNCiB7DQot ICBTc19EQklORk9fU0NBTlJFUSYgc3MgPSBzc0ZpbmQ8U3NfREJJTkZPX1NDQU5S RVE+KHNzSWQpOw0KKyAgamFtRW50cnkoKTsNCisgIGNvbnN0IERiaW5mb1NjYW5S ZXEqIHJlcSA9IChjb25zdCBEYmluZm9TY2FuUmVxKikgc2lnbmFsLT5nZXREYXRh UHRyKCk7DQorICBVaW50MzIgc2lnbmFsX2xlbmd0aCA9IHNpZ25hbC0+Z2V0TGVu Z3RoKCk7DQorICBuZGJyZXF1aXJlKHNpZ25hbF9sZW5ndGggPT0gRGJpbmZvU2Nh blJlcTo6U2lnbmFsTGVuZ3RoK3JlcS0+Y3Vyc29yX3N6KTsNCisNCisgIE5kYmlu Zm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vy c29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIocmVxKTsNCisNCisgIGlmIChO ZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3JlRGF0YShjdXJzb3ItPmZsYWdz KSAmJg0KKyAgICAgIGN1cnNvci0+c2F2ZUN1cnJSZWYpDQorICB7DQorICAgIC8q IENvbnRpbnVlIGluIHRoZSBzYXZlZCBibG9jayByZWYgKi8NCisgICAgY3Vyc29y LT5jdXJyUmVmID0gY3Vyc29yLT5zYXZlQ3VyclJlZjsNCisgICAgY3Vyc29yLT5z YXZlQ3VyclJlZiA9IDA7DQorDQorICAgIC8vIFNldCB0aGlzIGJsb2NrIGFzIHNl bmRlciBhbmQgcmVtZW1iZXIgb3JpZ2luYWwgc2VuZGVyDQorICAgIGN1cnNvci0+ c2F2ZVNlbmRlclJlZiA9IGN1cnNvci0+c2VuZGVyUmVmOw0KKyAgICBjdXJzb3It PnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KKw0KKyAgICBzZW5kU2lnbmFsKGN1 cnNvci0+Y3VyclJlZiwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KKyAgICAgICAgICAg ICAgIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0K KyAgfQ0KKw0KKyAgTmRiaW5mbzo6U2NhbkN1cnNvcjo6c2V0SGFzTW9yZURhdGEo Y3Vyc29yLT5mbGFncywgZmFsc2UpOw0KIA0KLSAgRGJpbmZvU2NhblJlcSogcmVx ID0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0g ICpyZXEgPSBzcy5tX3JlcTsNCi0gIHJlcS0+c2VuZGVyUmVmID0gcmVmZXJlbmNl KCk7DQotICByZXEtPmluc3RhbmNlID0gc3MubV93b3JrZXI7DQotICBzZW5kU2ln bmFsKHdvcmtlclJlZihzcy5tX3dvcmtlciksIEdTTl9EQklORk9fU0NBTlJFUSwN Ci0gICAgICAgICAgICAgc2lnbmFsLCBzcy5tX2xlbiwgSkJCKTsNCisgIGlmIChm aW5kX25leHQoY3Vyc29yKSkNCisgIHsNCisgICAgamFtKCk7DQorICAgIG5kYnJl cXVpcmUoY3Vyc29yLT5jdXJyUmVmKTsNCisgICAgbmRicmVxdWlyZShjdXJzb3It PnNhdmVDdXJyUmVmID09IDApOw0KKw0KKyAgICAvLyBTZXQgdGhpcyBibG9jayBh cyBzZW5kZXIgYW5kIHJlbWVtYmVyIG9yaWdpbmFsIHNlbmRlcg0KKyAgICBjdXJz b3ItPnNhdmVTZW5kZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZjsNCisgICAgY3Vy c29yLT5zZW5kZXJSZWYgPSByZWZlcmVuY2UoKTsNCisNCisgICAgc2VuZFNpZ25h bChjdXJzb3ItPmN1cnJSZWYsIEdTTl9EQklORk9fU0NBTlJFUSwNCisgICAgICAg ICAgICAgICBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorICAgIHJldHVy bjsNCisgIH0NCisNCisgIC8qIFNjYW4gaXMgZG9uZSwgc2VuZCBTQ0FOQ09ORiBi YWNrIHRvIGNhbGxlciAgKi8NCisNCisgIC8qIFN3YXAgYmFjayBzYXZlZCBzZW5k ZXJSZWYgKi8NCisgIGNvbnN0IFVpbnQzMiBzZW5kZXJSZWYgPSBjdXJzb3ItPnNl bmRlclJlZiA9IGN1cnNvci0+c2F2ZVNlbmRlclJlZjsNCisgIGN1cnNvci0+c2F2 ZVNlbmRlclJlZiA9IDA7DQorDQorICBuZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJl Zik7DQorICBuZGJyZXF1aXJlKGN1cnNvci0+c2F2ZUN1cnJSZWYgPT0gMCk7DQor DQorICBuZGJyZXF1aXJlKHJlZlRvSW5zdGFuY2UoY3Vyc29yLT5jdXJyUmVmKSA9 PSAwKTsNCisgIHNlbmRTaWduYWwoY3Vyc29yLT5zZW5kZXJSZWYsIEdTTl9EQklO Rk9fU0NBTkNPTkYsIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgIHJl dHVybjsNCiB9DQogDQogdm9pZA0KLUxvY2FsUHJveHk6OnNlbmREQklORk9fU0NB TkNPTkYoU2lnbmFsKiBzaWduYWwsIFVpbnQzMiBzc0lkKQ0KK0xvY2FsUHJveHk6 OmV4ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFsKiBzaWduYWwpDQogew0KLSAgU3Nf REJJTkZPX1NDQU5SRVEmIHNzID0gc3NGaW5kPFNzX0RCSU5GT19TQ0FOUkVRPihz c0lkKTsNCisgIGphbUVudHJ5KCk7DQogICBjb25zdCBEYmluZm9TY2FuQ29uZiog Y29uZiA9IChjb25zdCBEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRy KCk7DQotICBjb25zdCBVaW50MzIgcmVxbGVuZ3RoID0gc2lnbmFsLT5nZXRMZW5n dGgoKTsNCi0gIGlmICghbGFzdFJlcGx5KHNzKSkNCi0gICAgcmV0dXJuOw0KKyAg VWludDMyIHNpZ25hbF9sZW5ndGggPSBzaWduYWwtPmdldExlbmd0aCgpOw0KKyAg bmRicmVxdWlyZShzaWduYWxfbGVuZ3RoID09IERiaW5mb1NjYW5Db25mOjpTaWdu YWxMZW5ndGgrY29uZi0+Y3Vyc29yX3N6KTsNCiANCi0gIGlmIChzcy5tX2Vycm9y ID09IDApDQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAo TmRiaW5mbzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKGNv bmYpOw0KKw0KKyAgaWYgKE5kYmluZm86OlNjYW5DdXJzb3I6OmdldEhhc01vcmVE YXRhKGN1cnNvci0+ZmxhZ3MpKQ0KICAgew0KKyAgICAvKiBUaGUgdW5kZXJseWlu ZyBibG9jayB3YW50IHRvIGNvbnRpbnVlICovDQogICAgIGphbSgpOw0KLSAgICBE YmluZm9TY2FuQ29uZiAqY29uZiA9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5n ZXREYXRhUHRyU2VuZCgpOw0KLSAgICBtZW1jcHkoY29uZiwmc3MubV9yZXEsIHJl cWxlbmd0aCAqIHNpemVvZihVaW50MzIpKTsNCi0gICAgY29uZi0+cmVxdWVzdElu Zm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgICBzZW5kU2ln bmFsKHNzLm1fcmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0g ICAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5n dGhXaXRoQ3Vyc29yLCBKQkIpOw0KLSAgfQ0KLSAgZWxzZQ0KKyAgICANCisgICAg LyogU3dhcCBiYWNrIHNhdmVkIHNlbmRlclJlZiAqLw0KKyAgICBjb25zdCBVaW50 MzIgc2VuZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWYgPSBjdXJzb3ItPnNhdmVT ZW5kZXJSZWY7DQorICAgIGN1cnNvci0+c2F2ZVNlbmRlclJlZiA9IDA7DQorDQor ICAgIC8qIFNhdmUgY3VyclJlZiB0byBjb250aW51ZSB3aXRoIHNhbWUgaW5zdGFu Y2UgYWdhaW4gKi8NCisgICAgY3Vyc29yLT5zYXZlQ3VyclJlZiA9IGN1cnNvci0+ Y3VyclJlZjsNCisgICAgY3Vyc29yLT5jdXJyUmVmID0gcmVmZXJlbmNlKCk7DQor DQorICAgIHNlbmRTaWduYWwoc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05G LCBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorICAgIHJldHVybjsNCisg IH0gDQorICANCisgIC8qIFRoZSB1bmRlcmx5aW5nIGJsb2NrIHJlcG9ydGVkIGNv bXBsZXRlZCwgZmluZCBuZXh0IGlmIGFueSAqLw0KKyAgaWYgKGZpbmRfbmV4dChj dXJzb3IpKQ0KICAgew0KICAgICBqYW0oKTsNCi0gICAgRGJpbmZvU2NhblJlZiAq cmVmID0gKERiaW5mb1NjYW5SZWYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsN Ci0gICAgcmVmLT50YWJsZUlkID0gY29uZi0+dGFibGVJZDsNCi0gICAgcmVmLT5h cGlUeG5JZCA9IGNvbmYtPmFwaVR4bklkOw0KLSAgICByZWYtPmVycm9yQ29kZSA9 IHNzLm1fZXJyb3I7DQotICAgIHNlbmRTaWduYWwoc3MubV9yZXEuc2VuZGVyUmVm LCBHU05fREJJTkZPX1NDQU5SRUYsIHNpZ25hbCwNCi0gICAgICAgICAgICAgICBE YmluZm9TY2FuUmVmOjpTaWduYWxMZW5ndGgsIEpCQik7DQorDQorICAgIG5kYnJl cXVpcmUoY3Vyc29yLT5zZW5kZXJSZWYgPT0gcmVmZXJlbmNlKCkpOw0KKyAgICBu ZGJyZXF1aXJlKGN1cnNvci0+c2F2ZVNlbmRlclJlZik7IC8vIFNob3VsZCBhbHJl YWR5IGJlIHNldA0KKw0KKyAgICBuZGJyZXF1aXJlKGN1cnNvci0+c2F2ZUN1cnJS ZWYgPT0gMCk7DQorDQorICAgIHNlbmRTaWduYWwoY3Vyc29yLT5jdXJyUmVmLCBH U05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAgc2lnbmFsLCBzaWdu YWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQogICB9DQotICBzc1JlbGVh c2U8U3NfREJJTkZPX1NDQU5SRVE+KHNzSWQpOw0KKw0KKyAgLyogU2NhbiBpbiB0 aGlzIGJsb2NrIGFuZCBpdHMgaW5zdGFuY2VzIGFyZSBjb21wbGV0ZWQgKi8NCisN CisgIC8qIFN3YXAgYmFjayBzYXZlZCBzZW5kZXJSZWYgKi8NCisgIGNvbnN0IFVp bnQzMiBzZW5kZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZiA9IGN1cnNvci0+c2F2 ZVNlbmRlclJlZjsNCisgIGN1cnNvci0+c2F2ZVNlbmRlclJlZiA9IDA7DQorDQor ICBuZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJlZik7DQorICBuZGJyZXF1aXJlKGN1 cnNvci0+c2F2ZUN1cnJSZWYgPT0gMCk7DQorDQorICBzZW5kU2lnbmFsKHNlbmRl clJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLCBzaWduYWxfbGVuZ3Ro LCBKQkIpOw0KKyAgcmV0dXJuOw0KIH0NCiANCiBCTE9DS19GVU5DVElPTlMoTG9j YWxQcm94eSkNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL0xvY2FsUHJveHkuaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvTG9jYWxQcm94eS5ocHAJMjAwOS0wNi0xNSAxMzoz MTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv TG9jYWxQcm94eS5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTU1 NiwyMyArNTU2LDkgQEAgcHJvdGVjdGVkOg0KICAgdm9pZCBzZW5kRFJPUF9UUklH X0lNUExfQ09ORihTaWduYWwqLCBVaW50MzIgc3NJZCk7DQogDQogICAvLyBHU05f REJJTkZPX1NDQU5SRVENCi0gIHN0cnVjdCBTc19EQklORk9fU0NBTlJFUSA6IFNz U2VxdWVudGlhbCB7DQotICAgIERiaW5mb1NjYW5SZXEgbV9yZXE7DQotICAgIFVp bnQzMiBtX2xlbjsNCi0gICAgU3NfREJJTkZPX1NDQU5SRVEoKSB7DQotICAgICAg bV9zZW5kUkVRID0gJkxvY2FsUHJveHk6OnNlbmREQklORk9fU0NBTlJFUTsNCi0g ICAgICBtX3NlbmRDT05GID0gJkxvY2FsUHJveHk6OnNlbmREQklORk9fU0NBTkNP TkY7DQotICAgIH0NCi0gICAgZW51bSB7IHBvb2xTaXplID0gMyB9Ow0KLSAgICBz dGF0aWMgU3NQb29sPFNzX0RCSU5GT19TQ0FOUkVRPiYgcG9vbChMb2NhbFByb3h5 KiBwcm94eSkgew0KLSAgICAgIHJldHVybiBwcm94eS0+Y19zc19EQklORk9fU0NB TlJFUTsNCi0gICAgfQ0KLSAgfTsNCi0gIFNzUG9vbDxTc19EQklORk9fU0NBTlJF UT4gY19zc19EQklORk9fU0NBTlJFUTsNCisgIGJvb2wgZmluZF9uZXh0KE5kYmlu Zm86OlNjYW5DdXJzb3IqIGN1cnNvcikgY29uc3Q7DQogICB2b2lkIGV4ZWNEQklO Rk9fU0NBTlJFUShTaWduYWwqKTsNCi0gIHZvaWQgc2VuZERCSU5GT19TQ0FOUkVR KFNpZ25hbCosIFVpbnQzMiBzc0lkKTsNCiAgIHZvaWQgZXhlY0RCSU5GT19TQ0FO Q09ORihTaWduYWwqKTsNCi0gIHZvaWQgc2VuZERCSU5GT19TQ0FOQ09ORihTaWdu YWwqLCBVaW50MzIgc3NJZCk7DQogfTsNCiANCiAjZW5kaWYNCg0KPT09IG1vZGlm aWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL01ha2VmaWxl LmFtJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTWFrZWZp bGUuYW0JMjAwOS0wNS0yNyAxNToyMTo0NSArMDAwMA0KKysrIGIvc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvTWFrZWZpbGUuYW0JMjAwOS0wNy0wMyAxMDoz MTozMCArMDAwMA0KQEAgLTY1LDcgKzY1LDYgQEAgbGliYmxvY2tzX2FfU09VUkNF UyA9IHRzbWFuLmNwcCBsZ21hbi5jcA0KICAgYmFja3VwL0JhY2t1cFByb3h5LmNw cCBcDQogICBSZXN0b3JlUHJveHkuY3BwIFwNCiAgIGRiaW5mby9EYmluZm8uY3Bw IFwNCi0gIGRiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwIFwNCiAgIGRibHFoL0Ri bHFoQ29tbW9uLmNwcCBcDQogICBQZ21hblByb3h5LmNwcCBcDQogICBkYnR1cC9E YnR1cENsaWVudC5jcHANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2JhY2t1cC9CYWNrdXAuY3BwJw0KLS0tIGEvc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5jcHAJMjAw OS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5jcHAJMjAwOS0wNy0wMyAxMDozMToz MCArMDAwMA0KQEAgLTYzLDggKzYzLDYgQEANCiANCiAjaW5jbHVkZSA8c2lnbmFs ZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFu c0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRi aW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogI2luY2x1ZGUgPE5kYlRpY2su aD4NCiAjaW5jbHVkZSA8ZGJ0dXAvRGJ0dXAuaHBwPg0KQEAgLTY2MCw1MyArNjU4 LDYyIEBAIHZvaWQgQmFja3VwOjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICoN CiB7DQogICBqYW1FbnRyeSgpOw0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJp bmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KKyAgY29uc3QgTmRiaW5mbzo6 U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJzb3Iq KURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCiANCi0gIGNoYXIgYnVm WzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0gIHN0cnVj dCBkYmluZm9fcm93IHI7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQot ICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gIGlmKHJl cS50YWJsZUlkID09IE5EQklORk9fQkFDS1VQX1JFQ09SRFNfVEFCTEVJRCkNCisg IGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OkJBQ0tVUF9SRUNPUkRTX1RBQkxF SUQpDQogICB7DQorI2lmIDANCisvLyBUT0RPDQogICAgIEJhY2t1cFJlY29yZFB0 ciBwdHIgTElOVF9TRVRfUFRSOw0KLSAgICBmb3IoY19iYWNrdXBzLmZpcnN0KHB0 cik7IHB0ci5pICE9IFJOSUw7IGNfYmFja3Vwcy5uZXh0KHB0cikpDQorICAgIHB0 ci5pID0gY3Vyc29yLT5kYXRhWzBdOw0KKyAgICB3aGlsZShjX2JhY2t1cHMuZ2V0 KHB0cikpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIs IGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLmkpOw0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLnAtPmJhY2t1cElkKTsN Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHB0ci5w LT5tYXN0ZXJSZWYpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgcHRyLnAtPmNsaWVudFJlZik7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIucC0+c2xhdmVTdGF0ZS5nZXRTdGF0 ZSgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIs IChVaW50MzIpcHRyLnAtPm5vT2ZCeXRlcyk7IC8vIFRPRE8NCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIChVaW50MzIpcHRyLnAtPm5v T2ZSZWNvcmRzKTsgLy8gVE9ETw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgKFVpbnQzMilwdHIucC0+bm9PZkxvZ0J5dGVzKTsgLy8g VE9ETw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg KFVpbnQzMilwdHIucC0+bm9PZkxvZ1JlY29yZHMpOyAvL1RPRE8NCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHB0ci5wLT5lcnJvckNv ZGUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEu YXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KLSAgICB9DQotICB9DQotICBlbHNlIGlm KCByZXEudGFibGVJZCA9PSBOREJJTkZPX0JBQ0tVUF9QQVJBTUVURVJTX1RBQkxF SUQgKQ0KLSAgew0KLSAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwg c2l6ZW9mKGJ1ZikpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW5fdWludDMyKCZyLCBtX2N1cnJfZGlza193cml0ZV9zcGVlZCk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgNCptX3dvcmRzX3dy aXR0ZW5fdGhpc19wZXJpb2QpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVt bl91aW50MzIoJnIsIG1fb3ZlcmZsb3dfZGlza193cml0ZSk7DQotICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgbV9yZXNldF9kZWxheV91c2Vk KTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCAwKTsg Ly8gVW5pbnRlcmVzdGluZyBtX3Jlc2V0X2Rpc2tfc3BlZWRfdGltZSk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19iYWNrdXBQb29s LmdldFNpemUoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgY19iYWNrdXBGaWxlUG9vbC5nZXRTaXplKCkpOw0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNfdGFibGVQb29sLmdldFNpemUo KSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY190 cmlnZ2VyUG9vbC5nZXRTaXplKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2Nv bHVtbl91aW50MzIoJnIsIGNfZnJhZ21lbnRQb29sLmdldFNpemUoKSk7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19wYWdlUG9vbC5n ZXRTaXplKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIo JnIsIGNfZGVmYXVsdHMubV9jb21wcmVzc2VkX2JhY2t1cCk7DQotICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY19kZWZhdWx0cy5tX2NvbXBy ZXNzZWRfbGNwKTsNCi0gICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmws IHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgTmRiaW5mbzo6Um93 IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRP d25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwdHIuaSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihwdHIucC0+YmFja3VwSWQpOw0KKyAgICAg IHJvdy53cml0ZV91aW50MzIocHRyLnAtPm1hc3RlclJlZik7DQorICAgICAgcm93 LndyaXRlX3VpbnQzMihwdHIucC0+Y2xpZW50UmVmKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKHB0ci5wLT5zbGF2ZVN0YXRlLmdldFN0YXRlKCkpOw0KKyAgICAg IHJvdy53cml0ZV91aW50MzIoKFVpbnQzMilwdHIucC0+bm9PZkJ5dGVzKTsgLy8g VE9ETw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoKFVpbnQzMilwdHIucC0+bm9P ZlJlY29yZHMpOyAvLyBUT0RPDQorICAgICAgcm93LndyaXRlX3VpbnQzMigoVWlu dDMyKXB0ci5wLT5ub09mTG9nQnl0ZXMpOyAvLyBUT0RPDQorICAgICAgcm93Lndy aXRlX3VpbnQzMigoVWludDMyKXB0ci5wLT5ub09mTG9nUmVjb3Jkcyk7IC8vVE9E Tw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocHRyLnAtPmVycm9yQ29kZSk7DQor ICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQor ICAgICAgY19iYWNrdXBzLm5leHQocHRyKTsNCisgICAgICBpZiAocmwubmVlZF9i cmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAg bmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsN CisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorICAgIH0NCisjZW5kaWYNCisg IH0NCisgIGVsc2UgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6QkFDS1VQX1BB UkFNRVRFUlNfVEFCTEVJRCkNCisgIHsNCisgICAgTmRiaW5mbzo6Um93IHJvdyhz aWduYWwsIHJlcSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlk KCkpOw0KKyAgICByb3cud3JpdGVfdWludDMyKG1fY3Vycl9kaXNrX3dyaXRlX3Nw ZWVkKTsNCisgICAgcm93LndyaXRlX3VpbnQzMig0Km1fd29yZHNfd3JpdHRlbl90 aGlzX3BlcmlvZCk7DQorICAgIHJvdy53cml0ZV91aW50MzIobV9vdmVyZmxvd19k aXNrX3dyaXRlKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihtX3Jlc2V0X2RlbGF5 X3VzZWQpOw0KKyAgICByb3cud3JpdGVfdWludDMyKDApOyAvLyBVbmludGVyZXN0 aW5nIG1fcmVzZXRfZGlza19zcGVlZF90aW1lKTsNCisgICAgcm93LndyaXRlX3Vp bnQzMihjX2JhY2t1cFBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93LndyaXRlX3Vp bnQzMihjX2JhY2t1cEZpbGVQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0 ZV91aW50MzIoY190YWJsZVBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93LndyaXRl X3VpbnQzMihjX3RyaWdnZXJQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0 ZV91aW50MzIoY19mcmFnbWVudFBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93Lndy aXRlX3VpbnQzMihjX3BhZ2VQb29sLmdldFNpemUoKSk7DQorICAgIHJvdy53cml0 ZV91aW50MzIoY19kZWZhdWx0cy5tX2NvbXByZXNzZWRfYmFja3VwKTsNCisgICAg cm93LndyaXRlX3VpbnQzMihjX2RlZmF1bHRzLm1fY29tcHJlc3NlZF9sY3ApOw0K KyAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCiAg IH0NCi0gIGVsc2UgaWYoIHJlcS50YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFC TEVJRCApDQorICBlbHNlIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OlBPT0xT X1RBQkxFSUQpDQogICB7DQogICAgIHN0cnVjdCB7DQogICAgICAgY29uc3QgY2hh ciogcG9vbG5hbWU7DQpAQCAtNzM1LDI1ICs3NDIsMzAgQEAgdm9pZCBCYWNrdXA6 OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKg0KICAgICAgICAgICB7IE5VTEws IDAsIDB9DQogICAgICAgICB9Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNv ci0+ZGF0YVswXTsNCiAgICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihu dW1iZXIoKSk7DQotICAgIGZvcihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsg aSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29sXS5wb29sbmFtZSkNCiAgICAgew0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVm KSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBn ZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCBibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5j ZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0ucG9v bG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIo JnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZvX3Nl bmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7 DQorICAgICAgamFtKCk7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWws IHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7 DQorICAgICAgcm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9j ayBudW1iZXINCisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAv LyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNb cG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNb cG9vbF0uZnJlZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29s XS5zaXplKTsNCisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCBy b3csIHJsKTsNCisgICAgICBwb29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJl YWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5k YmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQor ICAgICAgICByZXR1cm47DQorICAgICAgfQ0KICAgICB9DQogICB9DQogDQotICBE YmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdl dERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9TY2Fu UmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikpOw0K LSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURh dGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1ND QU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpT aWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgbmRiaW5mb19zZW5kX3Nj YW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiBib29sDQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmFj Yy9EYmFjY01haW4uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9i bG9ja3MvZGJhY2MvRGJhY2NNYWluLmNwcAkyMDA5LTA2LTE1IDEzOjMxOjM3ICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmFjYy9E YmFjY01haW4uY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0zNiwx MiArMzYsNiBAQA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+ DQogI2luY2x1ZGUgPEtleURlc2NyaXB0b3IuaHBwPg0KIA0KLSNpbmNsdWRlIDxu ZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+ DQotDQotLy8gVE9fRE9fUk9OTSBpcyBhIGxhYmVsIGZvciBjb21tZW50cyBvbiB3 aGF0IG5lZWRzIHRvIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucw0KLS8v IHdoZW4gbW9yZSB0aW1lIGlzIGdpdmVuLg0KLQ0KICNpZmRlZiBWTV9UUkFDRQ0K ICNkZWZpbmUgREVCVUcoeCkgbmRib3V0IDw8ICJEQkFDQzogIjw8IHggPDwgZW5k bDsNCiAjZWxzZQ0KQEAgLTgyMjYsMzIgKzgyMjAsMjMgQEAgdm9pZCBEYmFjYzo6 ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqcw0KICAgamFtRW50cnkoKTsNCiAg IERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhl RGF0YTsNCiANCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3Jh dGVsaW1pdCBybDsNCi0gIHN0cnVjdCBkYmluZm9fcm93IHI7DQotDQotICBkYmlu Zm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gIGlmKHJlcS50YWJs ZUlkID09IE5EQklORk9fTUVNVVNBR0VfVEFCTEVJRCkNCi0gIHsNCi0gICAgamFt KCk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2Yo YnVmKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg Z2V0T3duTm9kZUlkKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGJsb2NrVG9NYWluKG51bWJlcigpKSk7Ly8gYmxvY2sgbnVtYmVy DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVxLmlu c3RhbmNlKTsgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbigmciwgIkluZGV4TWVtb3J5IiwgMTEpOw0KLSAgICBV aW50MzIgcGFnZV9zaXplX2tiPSBzaXplb2YoKnJwUGFnZXB0ci5wKTs7DQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCAoY2hhciopJnBhZ2Vfc2l6ZV9r YiwgNCk7IC8vIDhrYg0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGNub09mQWxsb2NhdGVkUGFnZXMpOyAvLyBhbGxvY2VkIHBhZ2VzDQot ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY3BhZ2VzaXpl KTsgLy8gbnVtYmVyIG9mIHBhZ2VzDQotICAgIGRiaW5mb19zZW5kX3JvdyhzaWdu YWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KLSAgfQ0KLQ0K LSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFs LT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZv U2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50MzIp KTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1v cmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5G T19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29u Zjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIE5kYmluZm86OlJh dGVsaW1pdCBybDsNCisNCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86Ok1F TVVTQUdFX1RBQkxFSUQpDQorICB7DQorICAgIGphbSgpOw0KKyAgICBOZGJpbmZv OjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihn ZXRPd25Ob2RlSWQoKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoYmxvY2tUb01h aW4obnVtYmVyKCkpKTsgLy8gYmxvY2sgbnVtYmVyDQorICAgIHJvdy53cml0ZV91 aW50MzIoaW5zdGFuY2UoKSk7ICAgICAgICAgICAgLy8gYmxvY2sgaW5zdGFuY2UN CisgICAgcm93LndyaXRlX3N0cmluZygiSW5kZXhNZW1vcnkiKTsNCisgICAgcm93 LndyaXRlX3VpbnQzMihzaXplb2YoKnJwUGFnZXB0ci5wKSk7DQorICAgIHJvdy53 cml0ZV91aW50MzIoY25vT2ZBbGxvY2F0ZWRQYWdlcyk7ICAgLy8gYWxsb2NlZCBw YWdlcw0KKyAgICByb3cud3JpdGVfdWludDMyKGNwYWdlc2l6ZSk7ICAgICAgICAg ICAgIC8vIG51bWJlciBvZiBwYWdlcw0KKyAgICBuZGJpbmZvX3NlbmRfcm93KHNp Z25hbCwgcmVxLCByb3csIHJsKTsNCisgIH0NCisNCisgIG5kYmluZm9fc2VuZF9z Y2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogdm9pZA0KDQo9PT0g bW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJk aWN0L0RiZGljdC5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYmRpY3QvRGJkaWN0LmNwcAkyMDA5LTA2LTE2IDEyOjI1OjE4ICswMDAw DQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmRpY3QvRGJk aWN0LmNwcAkyMDA5LTA3LTAzIDExOjEzOjU5ICswMDAwDQpAQCAtOTksOCArOTks NiBAQCBleHRlcm4gRXZlbnRMb2dnZXIgKiBnX2V2ZW50TG9nZ2VyOw0KIA0KICNp bmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxz aWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4N Ci0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCiANCiAjZGVm aW5lIFpOT1RfRk9VTkQgNjI2DQogI2RlZmluZSBaQUxSRUFEWUVYSVNUIDYzMA0K QEAgLTI3NywxNSArMjc1LDEzIEBAIERiZGljdDo6ZXhlY0RVTVBfU1RBVEVfT1JE KFNpZ25hbCogc2lnbmENCiB2b2lkIERiZGljdDo6ZXhlY0RCSU5GT19TQ0FOUkVR KFNpZ25hbCAqc2lnbmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERi aW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07 DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRl bGltaXQgcmw7DQotDQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVx KTsNCisgIGNvbnN0IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAg IChOZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIo JnJlcSk7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRy eSgpOw0KIA0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJM RUlEKQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJ RCkNCiAgIHsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29s bmFtZTsNCkBAIC0zNjgsMjUgKzM2NCwzMCBAQCB2b2lkIERiZGljdDo6ZXhlY0RC SU5GT19TQ0FOUkVRKFNpZ25hbCAqDQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0N CiAgICAgICAgIH07DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRh WzBdOw0KICAgICBCbG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigp KTsNCi0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQor ICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5v ZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIo JnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNlKTsgLy8g YmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigm ciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkp Ow0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9v bHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3co c2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAg ICBqYW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsN CisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJl cg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2Nr IGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5w b29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5m cmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUp Ow0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwp Ow0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhyZXEp KQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19z ZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisgICAgICAg IHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERiaW5mb1Nj YW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0 clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5SZXE6OlNp Z25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQotICBjb25m LT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQot ICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYs DQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExl bmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25m KHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIA0KDQo9PT0gbW9kaWZpZWQgZmls ZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0NNYWtlTGlz dHMudHh0Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJp bmZvL0NNYWtlTGlzdHMudHh0CTIwMDgtMTAtMDggMDg6MTI6MTggKzAwMDANCisr KyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9DTWFrZUxp c3RzLnR4dAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMTgsNyArMTgs NiBAQCBJTkNMVURFX0RJUkVDVE9SSUVTKCR7Q01BS0VfU09VUkNFX0RJUn0vDQog SU5DTFVERSgke0NNQUtFX1NPVVJDRV9ESVJ9L3N0b3JhZ2UvbmRiL2NvbmZpZy90 eXBlX2tlcm5lbC5jbWFrZSkNCiANCiBBRERfTElCUkFSWShuZGJkYmluZm8gU1RB VElDDQotCQkgICAgICBEYmluZm8uY3BwDQotCQkgICAgICBuZGJpbmZvX2hlbHBl cnMuY3BwDQorCURiaW5mby5jcHANCiApDQogDQoNCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmNw cCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9E YmluZm8uY3BwCTIwMDktMDYtMjMgMTQ6MDc6NTggKzAwMDANCisrKyBiL3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uY3BwCTIwMDkt MDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xLDQgKzEsNSBAQA0KLS8qIENvcHly aWdodCAoQykgMjAwNyBNeVNRTCBBQg0KKy8qIENvcHlyaWdodCAoQykgMjAwNy0y MDA4IE15U1FMIEFCLCAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLg0KKyAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVy bXMuDQogDQogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KQEAgLTE0LDcgKzE1LDYgQEANCiAgICBGb3VuZGF0aW9uLCBJ bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx MTEtMTMwNyAgVVNBICovDQogDQogI2luY2x1ZGUgIkRiaW5mby5ocHAiDQotI2lu Y2x1ZGUgPG5kYmluZm8uaD4NCiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9Ob2Rl RmFpbFJlcC5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvUmVhZE5vZGVzQ29u Zi5ocHA+DQpAQCAtMjIsOSArMjIsNiBAQA0KICNpbmNsdWRlIDxzaWduYWxkYXRh L0R1bXBTdGF0ZU9yZC5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZv U2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4N Ci0jaW5jbHVkZSAibmRiaW5mb190YWJsZXMuaCINCi0jaW5jbHVkZSAibmRiaW5m b190YWJsZWlkcy5oIg0KLSNpbmNsdWRlIDxBdHRyaWJ1dGVIZWFkZXIuaHBwPg0K IA0KIFVpbnQzMiBkYmluZm9fYmxvY2tzW10gPSB7IERCQUNDLCBEQlRVUCwgQkFD S1VQLCBEQlRDLCBTVU1BLCBEQlVUSUwsIFRSSVgsIERCVFVYLCBEQkRJQ1QsIDB9 Ow0KIA0KQEAgLTM0LDYgKzMxLDggQEAgRGJpbmZvOjpEYmluZm8oQmxvY2tfY29u dGV4dCYgY3R4KSA6DQogew0KICAgQkxPQ0tfQ09OU1RSVUNUT1IoRGJpbmZvKTsN CiANCisgIFNUQVRJQ19BU1NFUlQoc2l6ZW9mKERiaW5mb1NjYW5DdXJzb3IpID09 IHNpemVvZihOZGJpbmZvOjpTY2FuQ3Vyc29yKSk7DQorDQogICBjX25vZGVQb29s LnNldFNpemUoTUFYX05EQl9OT0RFUyk7DQogDQogICAvKiBBZGQgUmVjZWl2ZWQg U2lnbmFscyAqLw0KQEAgLTQ0LDggKzQzLDYgQEAgRGJpbmZvOjpEYmluZm8oQmxv Y2tfY29udGV4dCYgY3R4KSA6DQogICBhZGRSZWNTaWduYWwoR1NOX0RCSU5GT19T Q0FOUkVRLCAmRGJpbmZvOjpleGVjREJJTkZPX1NDQU5SRVEpOw0KICAgYWRkUmVj U2lnbmFsKEdTTl9EQklORk9fU0NBTkNPTkYsICZEYmluZm86OmV4ZWNEQklORk9f U0NBTkNPTkYpOw0KIA0KLSAgYWRkUmVjU2lnbmFsKEdTTl9EQklORk9fVFJBTlNJ RF9BSSwgJkRiaW5mbzo6ZXhlY0RCSU5GT19UUkFOU0lEX0FJKTsNCi0NCiAgIGFk ZFJlY1NpZ25hbChHU05fUkVBRF9OT0RFU0NPTkYsICZEYmluZm86OmV4ZWNSRUFE X05PREVTQ09ORik7DQogICBhZGRSZWNTaWduYWwoR1NOX05PREVfRkFJTFJFUCwg JkRiaW5mbzo6ZXhlY05PREVfRkFJTFJFUCk7DQogICBhZGRSZWNTaWduYWwoR1NO X0lOQ0xfTk9ERVJFUSwgJkRiaW5mbzo6ZXhlY0lOQ0xfTk9ERVJFUSk7DQpAQCAt MTAyLDY4ICs5OSw2IEBAIHZvaWQgRGJpbmZvOjpzZW5kU1RUT1JSWShTaWduYWwq IHNpZ25hbCkNCiAgIHNlbmRTaWduYWwoTkRCQ05UUl9SRUYsIEdTTl9TVFRPUlJZ LCBzaWduYWwsIDYsIEpCQik7DQogfQ0KIA0KLS8qDQotICogRXhlY3V0aW5nIERC SU5GT19UUkFOU0lEX0FJIGlzIG9ubHkgZm9yIGRlYnVnZ2luZw0KLSAqIFdlIHVz ZSB0aGlzIGFzIHBhcnQgb2YgdGhlIERVTVAgaW50ZXJmYWNlDQotICogYW5kIGR1 cmluZyBkZWJ1Z2dpbmcuDQotICovDQotdm9pZCBEYmluZm86OmV4ZWNEQklORk9f VFJBTlNJRF9BSShTaWduYWwqIHNpZ25hbCkNCi17DQotICBqYW1FbnRyeSgpOw0K LSAgVHJhbnNJZEFJICp0aWRhaT0gKFRyYW5zSWRBSSopc2lnbmFsLT50aGVEYXRh Ow0KLQ0KLSAgaWYoIWFzc2VtYmxlRnJhZ21lbnRzKHNpZ25hbCkpew0KLSAgICBy ZXR1cm47DQotICB9DQotDQotICBjb25zdCBVaW50MzIgdGFibGVJZD0gdGlkYWkt PnRyYW5zSWRbMF07DQotICBjb25zdCBpbnQgbmNvbHMgPSBuZGJpbmZvX3RhYmxl c1t0YWJsZUlkXS0+bmNvbHM7DQotDQotICBTZWN0aW9uSGFuZGxlIGhhbmRsZSh0 aGlzLCBzaWduYWwpOw0KLSAgU2VnbWVudGVkU2VjdGlvblB0ciBwdHI7DQotICBo YW5kbGUuZ2V0U2VjdGlvbihwdHIsIDApOw0KLQ0KLSAgY2hhciByb3didWZbMTAy NF07DQotICBjaGFyICpyb3c9IHJvd2J1ZjsNCi0gIGNvcHkoKFVpbnQzMiopcm93 YnVmLCBwdHIpOw0KLQ0KLSAgLy9VaW50MzIgcm93c3o9IHB0ci5zejsNCi0gIGlu dCBsZW47DQotDQotICBmb3IoaW50IGk9MDsgaTxuY29sczsgaSsrKQ0KLSAgew0K LSAgICBqYW0oKTsNCi0gICAgQXR0cmlidXRlSGVhZGVyIGFoKCooVWludDMyKily b3cpOw0KLSAgICByb3crPWFoLmdldEhlYWRlclNpemUoKSpzaXplb2YoVWludDMy KTsNCi0NCi0gICAgbmRib3V0IDw8ICJBSSAiIDw8IGFoLmdldEF0dHJpYnV0ZUlk KCkgPDwgIiAiOw0KLSAgICBsZW49IGFoLmdldEJ5dGVTaXplKCk7DQotICAgIG5k Ym91dCA8PCAifHwiIDw8IGxlbiA8PCAifHwiIDw8ICIgIjsNCi0gICAgbmRib3V0 IDw8ICJUYWJsZSAiIDw8IHRhYmxlSWQgPDwgIiA6OjogIjsNCi0gICAgc3dpdGNo KG5kYmluZm9fdGFibGVzW3RhYmxlSWRdLT5jb2xbaV0uY29sdHlwZSkNCi0gICAg ew0KLSAgICBjYXNlIE5EQklORk9fVFlQRV9OVU1CRVI6DQotICAgICAgamFtKCk7 DQotICAgICAgbmRib3V0IDw8ICooVWludDMyKilyb3c7DQotICAgICAgcm93Kz0g bGVuOw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIE5EQklORk9fVFlQRV9TVFJJ Tkc6DQotICAgICAgamFtKCk7DQotICAgICAgY2hhciBiWzUxMl07DQotICAgICAg bWVtY3B5KGIscm93LGxlbik7DQotICAgICAgYltsZW5dPTA7DQotICAgICAgbmRi b3V0IDw8IGI7DQotICAgICAgcm93Kz0gbGVuOw0KLSAgICAgIGJyZWFrOw0KLSAg ICBkZWZhdWx0Og0KLSAgICAgIG5kYmFzc2VydChmYWxzZSk7DQotICAgICAgYnJl YWs7DQotICAgIH07DQotICAgIG5kYm91dCA8PCBlbmRsOw0KLSAgfQ0KLSAgcmVs ZWFzZVNlY3Rpb25zKGhhbmRsZSk7DQotfQ0KLQ0KIHZvaWQgRGJpbmZvOjpleGVj RFVNUF9TVEFURV9PUkQoU2lnbmFsKiBzaWduYWwpDQogew0KICAgamFtRW50cnko KTsNCkBAIC0xNzQsMTEgKzEwOSwxMSBAQCB2b2lkIERiaW5mbzo6ZXhlY0RVTVBf U1RBVEVfT1JEKFNpZ25hbCogDQogICAgIGphbSgpOw0KICAgICBuZGJvdXRfYygi LS0tIEJFR0lOIE5EQiRJTkZPLlRBQkxFUyAtLS0iKTsNCiAgICAgY2hhciBjcmVh dGVfc3FsWzUxMl07DQotICAgIGZvcihVaW50MzIgaT0wO2k8bnVtYmVyX25kYmlu Zm9fdGFibGVzO2krKykNCisgICAgZm9yKGludCBpID0gMDsgaSA8IE5kYmluZm86 OmdldE51bVRhYmxlcygpOyBpKyspDQogICAgIHsNCi0gICAgICBuZGJpbmZvX2Ny ZWF0ZV9zcWwobmRiaW5mb190YWJsZXNbaV0sDQotICAgICAgICAgICAgICAgICAg ICAgICAgIGNyZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQotICAgICAg bmRib3V0X2MoIiVkLCVzLCVzIixpLG5kYmluZm9fdGFibGVzW2ldLT5uYW1lLGNy ZWF0ZV9zcWwpOw0KKyAgICAgIGNvbnN0IE5kYmluZm86OlRhYmxlJiB0YWIgPSBO ZGJpbmZvOjpnZXRUYWJsZShpKTsNCisgICAgICBOZGJpbmZvOjpjcmVhdGVfc3Fs KHRhYiwgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCisgICAgICBu ZGJvdXRfYygiJWQsJXMsJXMiLCBpLCB0YWIubS5uYW1lLCBjcmVhdGVfc3FsKTsN CiAgICAgfQ0KICAgICBuZGJvdXRfYygiLS0tIEVORCBOREIkSU5GTy5UQUJMRVMg LS0tIik7DQogICAgIGJyZWFrOw0KQEAgLTE4NiwzMzkgKzEyMSwzMzUgQEAgdm9p ZCBEYmluZm86OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwqIA0KICAgY2FzZSBE dW1wU3RhdGVPcmQ6OkRiaW5mb0xpc3RDb2x1bW5zOg0KICAgICBqYW0oKTsNCiAg ICAgbmRib3V0X2MoIi0tLSBCRUdJTiBOREIkSU5GTy5DT0xVTU5TIC0tLSIpOw0K LSAgICBmb3IoVWludDMyIGk9MDtpPG51bWJlcl9uZGJpbmZvX3RhYmxlcztpKysp DQorICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOZGJpbmZvOjpnZXROdW1UYWJsZXMo KTsgaSsrKQ0KICAgICB7DQotICAgICAgc3RydWN0IG5kYmluZm9fdGFibGUgKnQ9 IG5kYmluZm9fdGFibGVzW2ldOw0KKyAgICAgIGNvbnN0IE5kYmluZm86OlRhYmxl JiB0YWIgPSBOZGJpbmZvOjpnZXRUYWJsZShpKTsNCiANCi0gICAgICBmb3IoaW50 IGo9MDtqPHQtPm5jb2xzO2orKykNCi0gICAgICAgIG5kYm91dF9jKCIlZCwlZCwl cywlZCIsaSxqLHQtPmNvbFtqXS5uYW1lLHQtPmNvbFtqXS5jb2x0eXBlKTsNCisg ICAgICBmb3IoaW50IGogPSAwOyBqIDwgdGFiLm0ubmNvbHM7IGorKykNCisgICAg ICAgIG5kYm91dF9jKCIlZCwlZCwlcywlZCIsIGksIGosDQorICAgICAgICAgICAg ICAgICB0YWIuY29sW2pdLm5hbWUsIHRhYi5jb2xbal0uY29sdHlwZSk7DQogICAg IH0NCiAgICAgbmRib3V0X2MoIi0tLSBFTkQgTkRCJElORk8uQ09MVU1OUyAtLS0i KTsNCiAgICAgYnJlYWs7DQogDQotICBjYXNlIER1bXBTdGF0ZU9yZDo6RGJpbmZv U2NhblRhYmxlOg0KLSAgICBqYW0oKTsNCi0gICAgY29uc3QgVWludDMyIHRhYmxl SWQ9IHNpZ25hbC0+dGhlRGF0YVsxXTsNCi0NCi0gICAgRGJpbmZvU2NhblJlcSAq cmVxID0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gICAgcmVx LT50YWJsZUlkPSB0YWJsZUlkOw0KLSAgICByZXEtPnNlbmRlclJlZj0gcmVmZXJl bmNlKCk7DQotICAgIHJlcS0+YXBpUmVmPSByZWZlcmVuY2UoKTsNCi0gICAgcmVx LT5hcGlUeG5JZD0gdGFibGVJZDsNCi0gICAgcmVxLT5yZXF1ZXN0SW5mbz0gRGJp bmZvU2NhblJlcTo6QWxsQ29sdW1ucyB8IERiaW5mb1NjYW5SZXE6OlN0YXJ0U2Nh bjsNCi0gICAgcmVxLT5jb2xCaXRtYXBMbz0gfjA7DQotICAgIHJlcS0+Y29sQml0 bWFwSGk9IH4wOw0KLSAgICByZXEtPm1heFJvd3M9IDI7DQotICAgIHJlcS0+bWF4 Qnl0ZXM9IDA7DQotICAgIHJlcS0+cm93c190b3RhbD0gMDsNCi0gICAgcmVxLT53 b3JkX3RvdGFsPSAwOw0KLQ0KLSAgICBuZGJvdXRfYygiQkVHSU4gREJJTkZPIERV TVAgU0NBTiBvbiAldSIsdGFibGVJZCk7DQotDQotICAgIHNlbmRTaWduYWwocmVm ZXJlbmNlKCksIEdTTl9EQklORk9fU0NBTlJFUSwNCi0gICAgICAgICAgICAgICBz aWduYWwsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCwgSkJCKTsNCi0gICAg YnJlYWs7DQogICB9Ow0KIH0NCiANCi12b2lkIERiaW5mbzo6ZXhlY0RCSU5GT19T Q0FOUkVRKFNpZ25hbCAqc2lnbmFsKQ0KK1VpbnQzMiBEYmluZm86OmZpbmRfbmV4 dF9ub2RlKFVpbnQzMiBub2RlKSBjb25zdA0KIHsNCi0gIGphbUVudHJ5KCk7DQot ICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRo ZURhdGE7DQorICBub2RlKys7DQorICB3aGlsZSghY19hbGl2ZU5vZGVzLmdldChu b2RlKSAmJg0KKyAgICAgICAgbm9kZSA8IE1BWF9OREJfTk9ERVMpDQorICAgICBu b2RlKys7DQogDQotICBjb25zdCBVaW50MzIgdGFibGVJZD0gcmVxLnRhYmxlSWQ7 DQotICBjb25zdCBVaW50MzIgYXBpUmVmPSByZXEuYXBpUmVmOw0KLSAgY29uc3Qg VWludDMyIHNlbmRlclJlZj0gcmVxLnNlbmRlclJlZjsNCi0gIGNvbnN0IFVpbnQz MiBhcGlUeG5JZD0gcmVxLmFwaVR4bklkOw0KLSAgLy9jb25zdCBVaW50MzIgY29s Qml0bWFwTG89IHJlcS5jb2xCaXRtYXBMbzsNCi0gIC8vY29uc3QgVWludDMyIGNv bEJpdG1hcEhpPSByZXEuY29sQml0bWFwSGk7DQotICAvL2NvbnN0IFVpbnQzMiBy ZXF1ZXN0SW5mbz0gcmVxLnJlcXVlc3RJbmZvOw0KKyAgaWYgKG5vZGUgPT0gTUFY X05EQl9OT0RFUykNCisgICAgcmV0dXJuIDA7DQorICByZXR1cm4gbm9kZTsNCit9 DQogDQotICBVaW50MzIgaTsNCi0gIGludCBqOw0KLSAgaW50IHN0YXJ0aWQ9IDA7 DQorVWludDMyIERiaW5mbzo6ZmluZF9uZXh0X2Jsb2NrKFVpbnQzMiBibG9jaykg Y29uc3QNCit7DQorICBpbnQgaSA9IDA7DQorICAvLyBGaW5kIGN1cnJlbnQgYmxv Y2tzIHBvc2l0aW9uDQorICB3aGlsZSAoZGJpbmZvX2Jsb2Nrc1tpXSAhPSBibG9j ayAmJg0KKyAgICAgICAgIGRiaW5mb19ibG9ja3NbaV0gIT0gMCkNCisgICAgaSsr Ow0KIA0KLSAgaW50IHN0YXJ0VGFibGVJZCwgc3RhcnRDb2x1bW5JZDsNCisgIC8v IE1ha2Ugc3VyZSBjdXJyZW50IGJsb2NrIHdhcyBmb3VuZA0KKyAgbmRicmVxdWly ZShkYmluZm9fYmxvY2tzW2ldKTsNCiANCi0gIGludCBjb250aW51ZV9zZW5kaW5n Ow0KKyAgLy8gUmV0dXJuIHRoZSBuZXh0IGJsb2NrKHdoaWNoIG1pZ2h0IGJlIDAp DQorICByZXR1cm4gZGJpbmZvX2Jsb2Nrc1srK2ldOw0KK30NCiANCi0gIGNoYXIg YnVmWzEwMjRdOw0KLSAgc3RydWN0IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVjdCBk YmluZm9fcmF0ZWxpbWl0IHJsOw0KK2Jvb2wgRGJpbmZvOjpmaW5kX25leHQoTmRi aW5mbzo6U2NhbkN1cnNvciogY3Vyc29yKSBjb25zdA0KK3sNCisgIFVpbnQzMiBu b2RlID0gcmVmVG9Ob2RlKGN1cnNvci0+Y3VyclJlZik7DQorICBVaW50MzIgYmxv Y2sgPSByZWZUb0Jsb2NrKGN1cnNvci0+Y3VyclJlZik7DQorICBjb25zdCBVaW50 MzIgaW5zdGFuY2UgPSByZWZUb0luc3RhbmNlKGN1cnNvci0+Y3VyclJlZik7DQor ICBuZGJyZXF1aXJlKGluc3RhbmNlID09IDApOw0KIA0KLSAgc3dpdGNoKHJlcS50 YWJsZUlkKQ0KKyAgaWYgKGJsb2NrKQ0KICAgew0KLSAgY2FzZSBOREJJTkZPX1RB QkxFU19UQUJMRUlEOg0KICAgICBqYW0oKTsNCi0NCi0gICAgY2hhciBjcmVhdGVf c3FsWzUxMl07DQotDQotICAgIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZy ZXEpOw0KLQ0KLSAgICBpZighKHJlcS5yZXF1ZXN0SW5mbyAmIERiaW5mb1NjYW5S ZXE6OlN0YXJ0U2NhbikpDQorICAgIGlmIChibG9jayA9PSBEQklORk8pDQogICAg IHsNCiAgICAgICBqYW0oKTsNCi0gICAgICBzdGFydGlkPSByZXEuY3Vyc29yLmN1 cl9pdGVtOw0KLSAgICB9DQogDQotICAgIGZvcihpPXN0YXJ0aWQ7ZGJpbmZvX3Jh dGVsaW1pdF9jb250aW51ZSgmcmwpICYmIGk8bnVtYmVyX25kYmluZm9fdGFibGVz O2krKykNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgbmRiaW5m b19jcmVhdGVfc3FsKG5kYmluZm9fdGFibGVzW2ldLA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkpOw0KLQ0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgaSk7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIG5kYmluZm9fdGFibGVz W2ldLT5uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxl bihuZGJpbmZvX3RhYmxlc1tpXS0+bmFtZSkrMSk7DQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW4oJnIsIGNyZWF0ZV9zcWwsIHN0cmxlbihjcmVhdGVfc3Fs KSsxKTsNCisgICAgICAvLyBTdGFydGluZyBzY2FuIG9uIHRoaXMgbm9kZQ0KKyAg ICAgIG5kYnJlcXVpcmUobm9kZSA9PSBnZXRPd25Ob2RlSWQoKSk7DQogDQotICAg ICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCxyLHJsLGFwaVR4bklkLGFwaVJlZik7 DQorICAgICAgLy8gU3RhcnQgb24gZmlyc3QgYmxvY2sNCisgICAgICBjdXJzb3It PmN1cnJSZWYgPSBudW1iZXJUb1JlZihkYmluZm9fYmxvY2tzWzBdLCBub2RlKTsN CisgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KIA0KLSAgICBpZighZGJpbmZv X3JhdGVsaW1pdF9jb250aW51ZSgmcmwpICYmIGkgPCBudW1iZXJfbmRiaW5mb190 YWJsZXMpDQorICAgIC8vIEZpbmQgbmV4dCBibG9jaw0KKyAgICBibG9jayA9IGZp bmRfbmV4dF9ibG9jayhibG9jayk7DQorICAgIGlmIChibG9jaykNCiAgICAgew0K ICAgICAgIGphbSgpOw0KLSAgICAgIGRiaW5mb19yYXRlbGltaXRfc2VuZGNvbmYo c2lnbmFsLHJlcSxybCxpKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0g ICAgICBqYW0oKTsNCi0gICAgICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5m b1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAgICAgY29u Zi0+dGFibGVJZD0gcmVxLnRhYmxlSWQ7DQotICAgICAgY29uZi0+c2VuZGVyUmVm PSByZXEuc2VuZGVyUmVmOw0KLSAgICAgIGNvbmYtPmFwaVR4bklkPSByZXEuYXBp VHhuSWQ7DQotICAgICAgY29uZi0+cmVxdWVzdEluZm89IDA7DQotICAgICAgc2Vu ZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBzaWdu YWwsDQotICAgICAgICAgICAgICAgICBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVu Z3RoLCBKQkIpOw0KKyAgICAgIGN1cnNvci0+Y3VyclJlZiA9IG51bWJlclRvUmVm KGJsb2NrLCBub2RlKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KKyAg fQ0KIA0KLSAgICBicmVhazsNCisgIG5vZGUgPSBmaW5kX25leHRfbm9kZShub2Rl KTsNCisgIGlmIChub2RlKQ0KKyAgew0KKyAgICBqYW0oKTsNCisgICAgYmxvY2sg PSBEQklORk87DQorICAgIGN1cnNvci0+Y3VyclJlZiA9IG51bWJlclRvUmVmKGJs b2NrLCBub2RlKTsNCisgICAgcmV0dXJuIHRydWU7DQorICB9DQogDQotICBjYXNl IE5EQklORk9fQ09MVU1OU19UQUJMRUlEOg0KKyAgLy8gTm8gbW9yZSBub2RlcyAt PiBkb25lDQorICBjdXJzb3ItPmN1cnJSZWYgPSAwOw0KKyAgcmV0dXJuIGZhbHNl Ow0KK30NCisNCit2b2lkIERiaW5mbzo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25h bCAqc2lnbmFsKQ0KK3sNCisgIGphbUVudHJ5KCk7DQorICBEYmluZm9TY2FuUmVx KiByZXFfcHRyID0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+Z2V0RGF0YVB0clNl bmQoKTsNCisgIGNvbnN0IFVpbnQzMiBzZW5kZXJSZWYgPSBzaWduYWwtPmhlYWRl ci50aGVTZW5kZXJzQmxvY2tSZWY7DQorDQorICAvLyBDb3B5IHNpZ25hbCBvbiBz dGFjaw0KKyAgRGJpbmZvU2NhblJlcSByZXEgPSAqcmVxX3B0cjsNCisNCisgIGNv bnN0IFVpbnQzMiByZXN1bHREYXRhID0gcmVxLnJlc3VsdERhdGE7DQorICBjb25z dCBVaW50MzIgdHJhbnNJZDAgPSByZXEudHJhbnNJZFswXTsNCisgIGNvbnN0IFVp bnQzMiB0cmFuc0lkMSA9IHJlcS50cmFuc0lkWzFdOw0KKyAgY29uc3QgVWludDMy IHJlc3VsdFJlZiA9IHJlcS5yZXN1bHRSZWY7DQorDQorICAvLyBWYWxpZGF0ZSB0 YWJsZUlkDQorICBjb25zdCBVaW50MzIgdGFibGVJZCA9IHJlcS50YWJsZUlkOw0K KyAgaWYgKHRhYmxlSWQgPj0gTmRiaW5mbzo6Z2V0TnVtVGFibGVzKCkpDQorICB7 DQorICAgIGphbSgpOw0KKyAgICBEYmluZm9TY2FuUmVmICpyZWY9IChEYmluZm9T Y2FuUmVmKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICAgIHJlZi0+cmVz dWx0RGF0YSA9IHJlc3VsdERhdGE7DQorICAgIHJlZi0+dHJhbnNJZFswXSA9IHRy YW5zSWQwOw0KKyAgICByZWYtPnRyYW5zSWRbMV0gPSB0cmFuc0lkMTsNCisgICAg cmVmLT5yZXN1bHRSZWYgPSByZXN1bHRSZWY7DQorICAgIHJlZi0+ZXJyb3JDb2Rl PSBEYmluZm9TY2FuUmVmOjpOb1RhYmxlOw0KKyAgICBzZW5kU2lnbmFsKHNlbmRl clJlZiwgR1NOX0RCSU5GT19TQ0FOUkVGLCBzaWduYWwsDQorICAgICAgICAgICAg ICAgRGJpbmZvU2NhblJlZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1 cm47DQorICB9DQorDQorICAvLyBUT0RPIENoZWNrIGFsbCBzY2FuIHBhcmFtZXRl cnMNCisNCisgIE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChO ZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJl cSk7DQorICBVaW50MzIgc2lnbmFsX2xlbmd0aCA9IHNpZ25hbC0+Z2V0TGVuZ3Ro KCk7DQorICBpZiAoc2lnbmFsX2xlbmd0aCA9PSBEYmluZm9TY2FuUmVxOjpTaWdu YWxMZW5ndGgpDQorICB7DQorICAgIC8vIEluaXRpYWxpemUgY3Vyc29yDQogICAg IGphbSgpOw0KKyAgICBjdXJzb3ItPnNlbmRlclJlZiA9IHNlbmRlclJlZjsNCisg ICAgY3Vyc29yLT5zYXZlU2VuZGVyUmVmID0gMDsNCisgICAgY3Vyc29yLT5jdXJy UmVmID0gMDsNCisgICAgY3Vyc29yLT5zYXZlQ3VyclJlZiA9IDA7DQorICAgIC8v IFJlc2V0IGFsbCBkYXRhIGhvbGRlcnMNCisgICAgbWVtc2V0KGN1cnNvci0+ZGF0 YSwgMCwgc2l6ZW9mKGN1cnNvci0+ZGF0YSkpOw0KKyAgICBjdXJzb3ItPmZsYWdz ID0gMDsNCisgICAgY3Vyc29yLT50b3RhbFJvd3MgPSAwOw0KKyAgICBjdXJzb3It PnRvdGFsQnl0ZXMgPSAwOw0KKyAgICByZXEuY3Vyc29yX3N6ID0gTmRiaW5mbzo6 U2NhbkN1cnNvcjo6TGVuZ3RoOw0KKyAgICBzaWduYWxfbGVuZ3RoICs9IHJlcS5j dXJzb3Jfc3o7DQorICB9DQorICBuZGJyZXF1aXJlKHNpZ25hbF9sZW5ndGggPT0N CisgICAgICAgICAgICAgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoICsgTmRi aW5mbzo6U2NhbkN1cnNvcjo6TGVuZ3RoKTsNCisgIG5kYnJlcXVpcmUocmVxLmN1 cnNvcl9zeiA9PSBOZGJpbmZvOjpTY2FuQ3Vyc29yOjpMZW5ndGgpOw0KIA0KLSAg ICBzdGFydFRhYmxlSWQ9IDA7DQotICAgIHN0YXJ0Q29sdW1uSWQ9IDA7DQorICBz d2l0Y2godGFibGVJZCkNCisgIHsNCisgIGNhc2UgTmRiaW5mbzo6VEFCTEVTX1RB QkxFSUQ6DQorICB7DQorICAgIGphbSgpOw0KIA0KLSAgICBpZighKHJlcS5yZXF1 ZXN0SW5mbyAmIERiaW5mb1NjYW5SZXE6OlN0YXJ0U2NhbikpDQorICAgIE5kYmlu Zm86OlJhdGVsaW1pdCBybDsNCisgICAgY2hhciBjcmVhdGVfc3FsWzUxMl07DQor ICAgIFVpbnQzMiB0YWJsZUlkID0gY3Vyc29yLT5kYXRhWzBdOw0KKw0KKyAgICB3 aGlsZSh0YWJsZUlkIDwgTmRiaW5mbzo6Z2V0TnVtVGFibGVzKCkpDQogICAgIHsN CiAgICAgICBqYW0oKTsNCi0gICAgICBzdGFydFRhYmxlSWQ9IHJlcS5jdXJzb3Iu Y3VyX2l0ZW0gPj4gODsNCi0gICAgICBzdGFydENvbHVtbklkPSByZXEuY3Vyc29y LmN1cl9pdGVtICYgMHhGRjsNCisgICAgICBjb25zdCBOZGJpbmZvOjpUYWJsZSYg dGFiID0gTmRiaW5mbzo6Z2V0VGFibGUodGFibGVJZCk7DQorICAgICAgTmRiaW5m bzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgTmRiaW5mbzo6Y3JlYXRl X3NxbCh0YWIsIGNyZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQorICAg ICAgcm93LndyaXRlX3VpbnQzMih0YWJsZUlkKTsNCisgICAgICByb3cud3JpdGVf c3RyaW5nKHRhYi5tLm5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcoY3Jl YXRlX3NxbCk7DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwg cm93LCBybCk7DQorDQorICAgICAgdGFibGVJZCsrOw0KKw0KKyAgICAgIGlmIChy bC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQor ICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmws IHRhYmxlSWQpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0K IA0KLSAgICBzdHJ1Y3QgbmRiaW5mb190YWJsZSAqdDsNCisgICAgLy8gQWxsIHRh YmxlcyBzZW50DQorICAgIHJlcS5jdXJzb3Jfc3ogPSAwOyAvLyBDbG9zZSBjdXJz b3INCisgICAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwp Ow0KKyAgICByZXR1cm47DQorDQorICAgIGJyZWFrOw0KKyAgfQ0KIA0KLSAgICBk YmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNhc2UgTmRiaW5m bzo6Q09MVU1OU19UQUJMRUlEOg0KKyAgew0KKyAgICBqYW0oKTsNCiANCi0gICAg Y29udGludWVfc2VuZGluZz0gMTsNCisgICAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJs Ow0KKyAgICBVaW50MzIgdGFibGVJZCA9IGN1cnNvci0+ZGF0YVswXTsNCisgICAg VWludDMyIGNvbHVtbklkID0gY3Vyc29yLT5kYXRhWzFdOw0KIA0KLSAgICBmb3Io aT1zdGFydFRhYmxlSWQ7IGNvbnRpbnVlX3NlbmRpbmcgJiYgaTxudW1iZXJfbmRi aW5mb190YWJsZXM7IGkrKykNCisgICAgd2hpbGUodGFibGVJZCA8IE5kYmluZm86 OmdldE51bVRhYmxlcygpKQ0KICAgICB7DQogICAgICAgamFtKCk7DQotICAgICAg dD0gbmRiaW5mb190YWJsZXNbaV07DQotDQotICAgICAgZm9yKGo9c3RhcnRDb2x1 bW5JZDsgY29udGludWVfc2VuZGluZyAmJiBqPHQtPm5jb2xzO2orKykNCisgICAg ICBjb25zdCBOZGJpbmZvOjpUYWJsZSYgdGFiID0gTmRiaW5mbzo6Z2V0VGFibGUo dGFibGVJZCk7DQorICAgICAgd2hpbGUoY29sdW1uSWQgPCB0YWIubS5uY29scykN CiAgICAgICB7DQogICAgICAgICBqYW0oKTsNCi0gICAgICAgIGRiaW5mb193cml0 ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGkpOw0KLSAgICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBqKTsNCi0gICAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCB0LT5jb2xbal0ubmFtZSwgc3RybGVu KHQtPmNvbFtqXS5uYW1lKSsxKTsNCi0gICAgICAgIGNvbnN0IGNoYXIqIGNvbHR5 cGVfbmFtZT0gbmRiaW5mb19jb2x0eXBlX3RvX3N0cmluZyh0LT5jb2xbal0uY29s dHlwZSk7DQotICAgICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgY29s dHlwZV9uYW1lLCBzdHJsZW4oY29sdHlwZV9uYW1lKSsxKTsNCi0gICAgICAgIGRi aW5mb19zZW5kX3JvdyhzaWduYWwscixybCwgYXBpVHhuSWQsYXBpUmVmKTsNCisg ICAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgICAg cm93LndyaXRlX3VpbnQzMih0YWJsZUlkKTsNCisgICAgICAgIHJvdy53cml0ZV91 aW50MzIoY29sdW1uSWQpOw0KKyAgICAgICAgcm93LndyaXRlX3N0cmluZyh0YWIu Y29sW2NvbHVtbklkXS5uYW1lKTsNCisgICAgICAgIHJvdy53cml0ZV9zdHJpbmco TmRiaW5mbzo6Y29sdHlwZV90b19zdHJpbmcodGFiLmNvbFtjb2x1bW5JZF0uY29s dHlwZSkpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwg cm93LCBybCk7DQogDQotICAgICAgICBjb250aW51ZV9zZW5kaW5nPSBkYmluZm9f cmF0ZWxpbWl0X2NvbnRpbnVlKCZybCk7DQorICAgICAgICBhc3NlcnQoY29sdW1u SWQgPCAyNTYpOw0KKyAgICAgICAgY29sdW1uSWQrKzsNCisNCisgICAgICAgIGlm KHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAgICAgIHsNCisgICAgICAgICAgamFt KCk7DQorICAgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwg cmVxLCBybCwgdGFibGVJZCwgY29sdW1uSWQpOw0KKyAgICAgICAgICByZXR1cm47 DQorICAgICAgICB9DQogICAgICAgfQ0KLSAgICAgIHN0YXJ0Q29sdW1uSWQ9IDA7 DQorICAgICAgY29sdW1uSWQgPSAwOw0KKyAgICAgIHRhYmxlSWQrKzsNCiAgICAg fQ0KIA0KLSAgICBpZigoaSA8IG51bWJlcl9uZGJpbmZvX3RhYmxlcyB8fCBqIDwg dC0+bmNvbHMpKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgaS0tOw0K LSAgICAgIGRiaW5mb19yYXRlbGltaXRfc2VuZGNvbmYoc2lnbmFsLCByZXEsIHJs LCAoaSA8PCA4KSB8IGopOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAg ICAgIGphbSgpOw0KLSAgICAgIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZv U2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAgICBjb25m LT50YWJsZUlkPSByZXEudGFibGVJZDsNCi0gICAgICBjb25mLT5zZW5kZXJSZWY9 IHJlcS5zZW5kZXJSZWY7DQotICAgICAgY29uZi0+YXBpVHhuSWQ9IHJlcS5hcGlU eG5JZDsNCi0gICAgICBjb25mLT5yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBzZW5k U2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25h bCwNCi0gICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5n dGgsIEpCQik7DQotICAgIH0NCisgICAgLy8gQWxsIHRhYmxlcyBhbmQgY29sdW1u cyBzZW50DQorICAgIHJlcS5jdXJzb3Jfc3ogPSAwOyAvLyBDbG9zZSBjdXJzb3IN CisgICAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0K IA0KICAgICBicmVhazsNCisgIH0NCiANCiAgIGRlZmF1bHQ6DQorICB7DQogICAg IGphbSgpOw0KIA0KLSAgICBpZih0YWJsZUlkID4gbnVtYmVyX25kYmluZm9fdGFi bGVzKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgRGJpbmZvU2NhblJl ZiAqcmVmPSAoRGJpbmZvU2NhblJlZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgp Ow0KLSAgICAgIHJlZi0+dGFibGVJZD0gdGFibGVJZDsNCi0gICAgICByZWYtPmFw aVR4bklkPSBhcGlUeG5JZDsNCi0gICAgICByZWYtPmVycm9yQ29kZT0gRGJpbmZv U2NhblJlZjo6Tm9UYWJsZTsNCi0gICAgICBzZW5kU2lnbmFsKHNlbmRlclJlZiwg R1NOX0RCSU5GT19TQ0FOUkVGLCBzaWduYWwsDQotICAgICAgICAgICAgICAgICBE YmluZm9TY2FuUmVmOjpTaWduYWxMZW5ndGgsIEpCQik7DQotICAgICAgYnJlYWs7 DQotICAgIH0NCi0NCiAgICAgbmRiYXNzZXJ0KHRhYmxlSWQgPiAxKTsNCiANCi0g ICAgaWYoc2lnbmFsLT5nZXRMZW5ndGgoKSA9PSBEYmluZm9TY2FuUmVxOjpTaWdu YWxMZW5ndGgpDQotICAgIHsNCi0gICAgICAvKg0KLSAgICAgICAqIFdlJ3ZlIGdv dHRlbiBhIHJlcXVlc3QgZnJvbSBhcHBsaWNhdGlvbiwgZmlyc3QNCi0gICAgICAg KiBTY2FuUmVxIHNpZ25hbC4gc3RhcnQgZnJvbSBiZWdpbm5pbmcNCi0gICAgICAg Ki8NCisgICAgLy9wcmludFNpZ25hbEhlYWRlcihzdGRvdXQsIHNpZ25hbC0+aGVh ZGVyLCA5OSwgOTgsIHRydWUpOw0KKyAgICAvL3ByaW50REJJTkZPX1NDQU4oc3Rk b3V0LCBzaWduYWwtPnRoZURhdGEsIHNpZ25hbC0+Z2V0TGVuZ3RoKCksIDApOw0K IA0KKyAgICBpZiAoTmRiaW5mbzo6U2NhbkN1cnNvcjo6Z2V0SGFzTW9yZURhdGEo Y3Vyc29yLT5mbGFncykgfHwNCisgICAgICAgIGZpbmRfbmV4dChjdXJzb3IpKQ0K KyAgICB7DQogICAgICAgamFtKCk7DQorICAgICAgbmRicmVxdWlyZShjdXJzb3It PmN1cnJSZWYpOw0KIA0KLSAgICAgIERiaW5mb1NjYW5SZXEgaXJlcT0gKihEYmlu Zm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQotICAgICAgRGJpbmZvU2NhblJl cSAqb3JlcT0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQo KTsNCisgICAgICAvLyBDT05GIG9yIFJFRiBzaG91bGQgYmUgc2VudCBiYWNrIGhl cmUNCisgICAgICBjdXJzb3ItPnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KIA0K LSAgICAgIG1lbWNweShzaWduYWwtPmdldERhdGFQdHJTZW5kKCksJmlyZXEsRGJp bmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoKnNpemVvZihVaW50MzIpKTsNCi0gICAg ICBvcmVxLT5zZW5kZXJSZWY9IHJlZmVyZW5jZSgpOw0KLSAgICAgIG9yZXEtPmN1 cnNvci5jdXJfcmVxdWVzdEluZm89IDA7DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1 cl9ub2RlPSAwOw0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJfYmxvY2s9IERCSU5G TzsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2l0ZW09IDA7DQotDQotICAgICAg Zm9yKG9yZXEtPmN1cnNvci5jdXJfbm9kZT0gMDsNCi0gICAgICAgICAgIWNfYWxp dmVOb2Rlcy5nZXQob3JlcS0+Y3Vyc29yLmN1cl9ub2RlKTsNCi0gICAgICAgICAg b3JlcS0+Y3Vyc29yLmN1cl9ub2RlKyspDQotICAgICAgICA7DQotDQotICAgICAg c2VuZFNpZ25hbChudW1iZXJUb1JlZihEQklORk8sb3JlcS0+Y3Vyc29yLmN1cl9u b2RlKSwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAgICAgICAgICAgICAgICAgc2ln bmFsLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIp Ow0KKyAgICAgIC8vIFNlbmQgU0NBTlJFUQ0KKyAgICAgIE1FTUNPUFlfTk9fV09S RFMocmVxX3B0ciwNCisgICAgICAgICAgICAgICAgICAgICAgICZyZXEsIHNpZ25h bF9sZW5ndGgpOw0KKyAgICAgIHNlbmRTaWduYWwoY3Vyc29yLT5jdXJyUmVmLA0K KyAgICAgICAgICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVRLA0KKyAgICAgICAg ICAgICAgICAgc2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KICAgICB9DQog ICAgIGVsc2UNCiAgICAgew0KLSAgICAgIC8qKg0KLSAgICAgICAqIFdlIGhhdmUg YSBjdXJzb3IsIHNvIHdlIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcuDQotICAg ICAgICovDQorICAgICAgLy8gU2NhbiBpcyBkb25lLCBzZW5kIFNDQU5DT05GIGJh Y2sgdG8gY2FsbGVyDQogICAgICAgamFtKCk7DQotICAgICAgaW50IG5leHRfZGJp bmZvX2Jsb2NrPSAwOw0KLSAgICAgIGlmKHJlcS5jdXJzb3IuY3VyX2Jsb2NrICE9 IERCSU5GTykNCi0gICAgICB7DQotICAgICAgICB3aGlsZShkYmluZm9fYmxvY2tz W25leHRfZGJpbmZvX2Jsb2NrXSAhPSByZXEuY3Vyc29yLmN1cl9ibG9jaw0KLSAg ICAgICAgICAgICYmIGRiaW5mb19ibG9ja3NbbmV4dF9kYmluZm9fYmxvY2tdICE9 IDApDQotICAgICAgICB7DQotICAgICAgICAgIGphbSgpOw0KLSAgICAgICAgICBu ZXh0X2RiaW5mb19ibG9jaysrOw0KLSAgICAgICAgfQ0KLSAgICAgIH0NCi0NCi0g ICAgICBEYmluZm9TY2FuUmVxIGlyZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFs LT50aGVEYXRhOw0KLSAgICAgIERiaW5mb1NjYW5SZXEgKm9yZXE9IChEYmluZm9T Y2FuUmVxKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotDQotICAgICAgbWVt Y3B5KHNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKSwmaXJlcSxzaWduYWwtPmdldExl bmd0aCgpKnNpemVvZihVaW50MzIpKTsNCi0gICAgICBvcmVxLT5zZW5kZXJSZWY9 IHJlZmVyZW5jZSgpOyAvL21hcnR5DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9i bG9jaz0gZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja107DQotDQotICAg ICAgc2VuZFNpZ25hbChudW1iZXJUb1JlZihvcmVxLT5jdXJzb3IuY3VyX2Jsb2Nr LCBvcmVxLT5jdXJzb3IuY3VyX25vZGUpLA0KLSAgICAgICAgICAgICAgICAgR1NO X0RCSU5GT19TQ0FOUkVRLA0KLSAgICAgICAgICAgICAgICAgc2lnbmFsLCBzaWdu YWwtPmdldExlbmd0aCgpLCBKQkIpOw0KKyAgICAgIERiaW5mb1NjYW5Db25mICph cGljb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQo KTsNCisgICAgICBNRU1DT1BZX05PX1dPUkRTKGFwaWNvbmYsICZyZXEsIERiaW5m b1NjYW5Db25mOjpTaWduYWxMZW5ndGgpOw0KKyAgICAgIC8vIFNldCBjdXJzb3Jf c3ogYmFjayB0byAwIHRvIGluZGljYXRlIGVuZCBvZiBzY2FuDQorICAgICAgYXBp Y29uZi0+Y3Vyc29yX3N6ID0gMDsNCisgICAgICBzZW5kU2lnbmFsKHJlc3VsdFJl ZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KKyAgICAgICAgICAgICAg ICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCiAgICAgfQ0K ICAgICBicmVhazsNCi0gIH07DQorICB9DQorICB9DQogfQ0KIA0KIHZvaWQgRGJp bmZvOjpleGVjREJJTkZPX1NDQU5DT05GKFNpZ25hbCAqc2lnbmFsKQ0KIHsNCi0g IERiaW5mb1NjYW5Db25mIGNvbmY9ICooRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+ dGhlRGF0YTsNCisgIGNvbnN0IERiaW5mb1NjYW5Db25mKiBjb25mX3B0cj0gKGNv bnN0IERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHIoKTsNCisgIC8v IENvcHkgc2lnbmFsIG9uIHN0YWNrDQorICBjb25zdCBEYmluZm9TY2FuQ29uZiBj b25mPSAqY29uZl9wdHI7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAgY29uc3Qg VWludDMyIHRhYmxlSWQ9IGNvbmYudGFibGVJZDsNCi0gIGNvbnN0IFVpbnQzMiBz ZW5kZXJSZWY9IGNvbmYuc2VuZGVyUmVmOw0KLSAgY29uc3QgVWludDMyIGFwaVJl Zj0gY29uZi5hcGlSZWY7DQotICBjb25zdCBVaW50MzIgYXBpVHhuSWQ9IGNvbmYu YXBpVHhuSWQ7DQotICAvL2NvbnN0IFVpbnQzMiBjb2xCaXRtYXBMbz0gY29uZi5j b2xCaXRtYXBMbzsNCi0gIC8vY29uc3QgVWludDMyIGNvbEJpdG1hcEhpPSBjb25m LmNvbEJpdG1hcEhpOw0KKyAgLy9wcmludERCSU5GT19TQ0FOKHN0ZG91dCwgc2ln bmFsLT50aGVEYXRhLCBzaWduYWwtPmdldExlbmd0aCgpLCAwKTsNCiANCi0gIERi aW5mb1NjYW5SZXEgKm9yZXE9IChEYmluZm9TY2FuUmVxKilzaWduYWwtPmdldERh dGFQdHJTZW5kKCk7DQorICBVaW50MzIgc2lnbmFsX2xlbmd0aCA9IHNpZ25hbC0+ Z2V0TGVuZ3RoKCk7DQorICBuZGJyZXF1aXJlKHNpZ25hbF9sZW5ndGggPT0NCisg ICAgICAgICAgICAgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoK05kYmluZm86 OlNjYW5DdXJzb3I6Okxlbmd0aCk7DQorICBuZGJyZXF1aXJlKGNvbmYuY3Vyc29y X3N6ID09IE5kYmluZm86OlNjYW5DdXJzb3I6Okxlbmd0aCk7DQogDQotICBtZW1j cHkoc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpLCZjb25mLHNpZ25hbC0+Z2V0TGVu Z3RoKCkqc2l6ZW9mKFVpbnQzMikpOw0KKyAgLy8gVmFsaWRhdGUgdGFibGVJZA0K KyAgY29uc3QgVWludDMyIHRhYmxlSWQ9IGNvbmYudGFibGVJZDsNCisgIG5kYmFz c2VydCh0YWJsZUlkIDwgTmRiaW5mbzo6Z2V0TnVtVGFibGVzKCkpOw0KIA0KLSAg aWYoY29uZi5yZXF1ZXN0SW5mbyAmIERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSkN Ci0gIHsNCi0gICAgLyoNCi0gICAgICogQ29udGludWUgYSBEVU1QIHNjYW4gb2Yg REJJTkZPIHRhYmxlIChoaXQgbWF4cm93cy9tYXhieXRlcykNCi0gICAgICovDQot ICAgIGphbSgpOw0KLSAgICBvcmVxLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1Nj YW5SZXE6OlN0YXJ0U2Nhbik7DQotICAgIHNlbmRTaWduYWwobnVtYmVyVG9SZWYo b3JlcS0+Y3Vyc29yLmN1cl9ibG9jaywgb3JlcS0+Y3Vyc29yLmN1cl9ub2RlKSwN Ci0gICAgICAgICAgICAgICBHU05fREJJTkZPX1NDQU5SRVEsDQotICAgICAgICAg ICAgICAgc2lnbmFsLCBzaWduYWwtPmdldExlbmd0aCgpLCBKQkIpOw0KLSAgICBy ZXR1cm47DQotICB9DQorICBjb25zdCBVaW50MzIgcmVzdWx0UmVmID0gY29uZi5y ZXN1bHRSZWY7DQogDQotICBpbnQgbmV4dF9kYmluZm9fYmxvY2s9IDA7DQorICAv LyBDb3B5IGN1cnNvciBvbiBzdGFjaw0KKyAgbmRicmVxdWlyZShjb25mLmN1cnNv cl9zeik7DQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAo TmRiaW5mbzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZj b25mKTsNCiANCi0gIGlmKHNpZ25hbC0+Z2V0TGVuZ3RoKCkgPT0gRGJpbmZvU2Nh bkNvbmY6OkRvbmVMZW5ndGgpIC8vIHdlIGhhdmUgdGhlIEFDSyBmcm9tIGEgRFVN UCBpbml0aWF0ZWQgc2Nhbg0KKyAgaWYgKE5kYmluZm86OlNjYW5DdXJzb3I6Omdl dEhhc01vcmVEYXRhKGN1cnNvci0+ZmxhZ3MpIHx8IGNvbmYucmV0dXJuZWRSb3dz KQ0KICAgew0KKyAgICAvLyBSYXRlIGxpbWl0IGJyZWFrLCBwYXNzIHRocm91Z2gg dG8gQVBJDQogICAgIGphbSgpOw0KLSAgICBuZGJvdXRfYygiRklOSVNIRUQgREJJ TkZPIERVTVAgU2NhbiBvbiAldSIsc2lnbmFsLT50aGVEYXRhWzBdKTsNCisgICAg bmRicmVxdWlyZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgICBEYmluZm9TY2FuQ29u ZiAqYXBpY29uZiA9IChEYmluZm9TY2FuQ29uZiopIHNpZ25hbC0+Z2V0RGF0YVB0 clNlbmQoKTsNCisgICAgTUVNQ09QWV9OT19XT1JEUyhhcGljb25mLCAmY29uZiwg c2lnbmFsX2xlbmd0aCk7DQorICAgIHNlbmRTaWduYWwocmVzdWx0UmVmLCBHU05f REJJTkZPX1NDQU5DT05GLCBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQog ICAgIHJldHVybjsNCiAgIH0NCiANCi0gIGlmKGNvbmYuY3Vyc29yLmN1cl9ibG9j ayAhPSBEQklORk8pDQorICBpZiAoZmluZF9uZXh0KGN1cnNvcikpDQogICB7DQog ICAgIGphbSgpOw0KLSAgICB3aGlsZShkYmluZm9fYmxvY2tzW25leHRfZGJpbmZv X2Jsb2NrXSAhPSBjb25mLmN1cnNvci5jdXJfYmxvY2sNCi0gICAgICAgICAgJiYg ZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10gIT0gMCkNCi0gICAgew0K LSAgICAgIGphbSgpOw0KLSAgICAgIG5leHRfZGJpbmZvX2Jsb2NrKys7DQotICAg IH0NCi0gIH0NCisgICAgbmRicmVxdWlyZShjdXJzb3ItPmN1cnJSZWYpOw0KIA0K LSAgbmV4dF9kYmluZm9fYmxvY2srKzsNCisgICAgLy8gQ09ORiBvciBSRUYgc2hv dWxkIGJlIHNlbnQgYmFjayBoZXJlDQorICAgIGN1cnNvci0+c2VuZGVyUmVmID0g cmVmZXJlbmNlKCk7DQogDQotICBpZihkYmluZm9fYmxvY2tzW25leHRfZGJpbmZv X2Jsb2NrXSE9MCkNCi0gIHsNCi0gICAgamFtKCk7DQotICAgIG9yZXEtPmN1cnNv ci5jdXJfYmxvY2s9IGRiaW5mb19ibG9ja3NbbmV4dF9kYmluZm9fYmxvY2tdOw0K LSAgfQ0KLSAgZWxzZQ0KLSAgew0KLSAgICBmb3Iob3JlcS0+Y3Vyc29yLmN1cl9u b2RlKys7DQotICAgICAgICAhY19hbGl2ZU5vZGVzLmdldChvcmVxLT5jdXJzb3Iu Y3VyX25vZGUpDQotICAgICAgICAgICYmIG9yZXEtPmN1cnNvci5jdXJfbm9kZSA8 IE1BWF9OREJfTk9ERVM7DQotICAgICAgICBvcmVxLT5jdXJzb3IuY3VyX25vZGUr KykNCi0gICAgICA7DQotDQotICAgIGlmKG9yZXEtPmN1cnNvci5jdXJfbm9kZSA8 IE1BWF9OREJfTk9ERVMpDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBv cmVxLT5jdXJzb3IuY3VyX3JlcXVlc3RJbmZvPSAwOw0KLSAgICAgIG9yZXEtPmN1 cnNvci5jdXJfYmxvY2s9IERCSU5GTzsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3Vy X2l0ZW09IDA7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgamFt KCk7DQotICAgICAgRGJpbmZvU2NhbkNvbmYgKmFwaWNvbmY9IChEYmluZm9TY2Fu Q29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgICAgIGFwaWNvbmYt PnRhYmxlSWQ9IHRhYmxlSWQ7DQotICAgICAgYXBpY29uZi0+c2VuZGVyUmVmPSBz ZW5kZXJSZWY7DQotICAgICAgYXBpY29uZi0+YXBpVHhuSWQ9IGFwaVR4bklkOw0K LSAgICAgIHNlbmRTaWduYWwoYXBpUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBz aWduYWwsDQotICAgICAgICAgICAgICAgICBEYmluZm9TY2FuQ29uZjo6RG9uZUxl bmd0aCwgSkJCKTsNCi0gICAgICByZXR1cm47DQotICAgIH0NCisgICAgLy8gU2Vu ZCBTQ0FOUkVRDQorICAgIE1FTUNPUFlfTk9fV09SRFMoc2lnbmFsLT5nZXREYXRh UHRyU2VuZCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICZjb25mLCBzaWduYWxf bGVuZ3RoKTsNCisgICAgc2VuZFNpZ25hbChjdXJzb3ItPmN1cnJSZWYsDQorICAg ICAgICAgICAgICAgR1NOX0RCSU5GT19TQ0FOUkVRLA0KKyAgICAgICAgICAgICAg IHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0KICAg fQ0KIA0KLSAgc2VuZFNpZ25hbChudW1iZXJUb1JlZihvcmVxLT5jdXJzb3IuY3Vy X2Jsb2NrLCBvcmVxLT5jdXJzb3IuY3VyX25vZGUpLA0KLSAgICAgICAgICAgICBH U05fREJJTkZPX1NDQU5SRVEsDQotICAgICAgICAgICAgIHNpZ25hbCwgc2lnbmFs LT5nZXRMZW5ndGgoKSwgSkJCKTsNCisgIC8vIFNjYW4gaXMgZG9uZSwgc2VuZCBT Q0FOQ09ORiBiYWNrIHRvIGNhbGxlcg0KKyAgamFtKCk7DQorICBEYmluZm9TY2Fu Q29uZiAqYXBpY29uZiA9IChEYmluZm9TY2FuQ29uZiopIHNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKTsNCisgIE1FTUNPUFlfTk9fV09SRFMoYXBpY29uZiwgJmNvbmYs IERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGgpOw0KKw0KKyAgLy8gU2V0IGN1 cnNvcl9zeiBiYWNrIHRvIDAgdG8gaW5kaWNhdGUgZW5kIG9mIHNjYW4NCisgIGFw aWNvbmYtPmN1cnNvcl9zeiA9IDA7DQorICBzZW5kU2lnbmFsKHJlc3VsdFJlZiwg R1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KKyAgICAgICAgICAgICBEYmlu Zm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KKyAgcmV0dXJuOw0KIH0N CiANCiANCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0RiaW5mby5ocHAJMjAwOC0xMC0wNSAw NzoxNDozNyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJpbmZvL0RiaW5mby5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0K QEAgLTEsNCArMSw1IEBADQotLyogQ29weXJpZ2h0IChDKSAyMDA3IE15U1FMIEFC DQorLyogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTXlTUUwgQUIsIDIwMDkgU3Vu IE1pY3Jvc3lzdGVtcyBJbmMuDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNl IGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4NCiANCiAgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQ0KICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQpAQCAtNDksOCAr NTAsMTAgQEAgcHJvdGVjdGVkOg0KICAgdm9pZCBleGVjUkVBRF9DT05GSUdfUkVR KFNpZ25hbCopOw0KICAgdm9pZCBleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiBz aWduYWwpOw0KIA0KKyAgVWludDMyIGZpbmRfbmV4dF9ub2RlKFVpbnQzMiBub2Rl KSBjb25zdDsNCisgIFVpbnQzMiBmaW5kX25leHRfYmxvY2soVWludDMyIGJsb2Nr KSBjb25zdDsNCisgIGJvb2wgZmluZF9uZXh0KE5kYmluZm86OlNjYW5DdXJzb3Iq IGN1cnNvcikgY29uc3Q7DQogICB2b2lkIGV4ZWNEQklORk9fU0NBTlJFUShTaWdu YWwgKnNpZ25hbCk7DQotICB2b2lkIGV4ZWNEQklORk9fVFJBTlNJRF9BSShTaWdu YWwqIHNpZ25hbCk7DQogICB2b2lkIGV4ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFs ICpzaWduYWwpOw0KIA0KICAgLyogZm9yIG1haW50YWluaW5nIGNfYWxpdmVOb2Rl cyAqLw0KDQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy9kYmluZm8vbmRiaW5mb19oZWxwZXJzLmNwcCcNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX2hlbHBlcnMu Y3BwCTIwMDktMDYtMjMgMTU6Mzk6NTUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwCTE5 NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDANCkBAIC0xLDYxICswLDAgQEANCi0jaW5j bHVkZSAiRGJpbmZvLmhwcCINCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNs dWRlIDxBdHRyaWJ1dGVIZWFkZXIuaHBwPg0KLSNpbmNsdWRlIDxzaWduYWxkYXRh L0RiaW5mb1NjYW4uaHBwPg0KLQ0KLXZvaWQgZGJpbmZvX3dyaXRlX3Jvd19pbml0 KHN0cnVjdCBkYmluZm9fcm93ICpyLCBjaGFyKiBidWYsIGludCBsZW4pDQotew0K LSAgci0+YnVmID0gci0+Y3VyciA9IChVaW50MzIqKWJ1ZjsNCi0gIHItPmVuZCA9 IHItPmJ1ZiArIGxlbjsNCi0gIHItPmNvbF9jb3VudCA9IDA7DQotfQ0KLQ0KLWlu dCBkYmluZm9fd3JpdGVfcm93X2NvbHVtbihzdHJ1Y3QgZGJpbmZvX3JvdyAqciwg Y29uc3QgY2hhciogY29sLCBpbnQgY2xlbikNCi17DQotICAvLyBDcmVhdGUgQXR0 cmlidXRlSGVhZGVyDQotICBBdHRyaWJ1dGVIZWFkZXIgYWgoci0+Y29sX2NvdW50 KyssIGNsZW4pOw0KLSAgY29uc3QgVWludDMyIGhlYWRlcl9zeiA9IGFoLmdldEhl YWRlclNpemUoKTsNCi0gIGNvbnN0IFVpbnQzMiBkYXRhX3N6ID0gYWguZ2V0RGF0 YVNpemUoKTsNCi0NCi0gIC8vIENoZWNrIHJvdyBidWZmZXIgc3BhY2UNCi0gIGlm KChoZWFkZXJfc3ogKyBkYXRhX3N6KSA+IChVaW50MzIpKHItPmVuZCAtIHItPmN1 cnIpKQ0KLSAgew0KLSAgICBuZGJvdXRfYygiV2FybmluZywgdG9vIHNtYWxsIG5k YmluZm8gcm93IGJ1ZmZlciIpOw0KLSAgICBhc3NlcnQoZmFsc2UpOw0KLSAgICBy ZXR1cm4gLTE7IC8vIE5vdCBlbm91Z2ggcm9vbS4NCi0gIH0NCi0NCi0gIC8vIFdy aXRlIEF0dHJpYnV0ZUhlYWRlciB0byBidWZmZXINCi0gIGFoLmluc2VydEhlYWRl cihyLT5jdXJyKTsNCi0gIHItPmN1cnIgKz0gaGVhZGVyX3N6Ow0KLQ0KLSAgLy8g V3JpdGUgZGF0YSB0byBidWZmZXINCi0gIG1lbWNweShyLT5jdXJyLCBjb2wsIGNs ZW4pOw0KLSAgci0+Y3VyciArPSBkYXRhX3N6Ow0KLQ0KLSAgYXNzZXJ0KHItPmN1 cnIgPD0gci0+ZW5kKTsNCi0gIHJldHVybiAwOw0KLX0NCi0NCi1pbnQgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKHN0cnVjdCBkYmluZm9fcm93ICpyLCBV aW50MzIgdmFsdWUpDQotew0KLSAgcmV0dXJuIGRiaW5mb193cml0ZV9yb3dfY29s dW1uKHIsIChjaGFyKikmdmFsdWUsIHNpemVvZihVaW50MzIpKTsNCi19DQotDQot dm9pZCBkYmluZm9fcmF0ZWxpbWl0X2luaXQoc3RydWN0IGRiaW5mb19yYXRlbGlt aXQgKnJsLCBzdHJ1Y3QgRGJpbmZvU2NhblJlcSAqcikNCi17DQotICBybC0+bWF4 Um93cz0gci0+bWF4Um93czsNCi0gIHJsLT5tYXhCeXRlcz0gci0+bWF4Qnl0ZXM7 DQotICBybC0+cm93c190b3RhbD0gci0+cm93c190b3RhbDsNCi0gIHJsLT5ieXRl c190b3RhbD0gci0+d29yZF90b3RhbDsNCi0gIHJsLT5yb3dzPSAwOw0KLSAgcmwt PmJ5dGVzPSAwOw0KLX0NCi0NCi1pbnQgZGJpbmZvX3JhdGVsaW1pdF9jb250aW51 ZShzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCAqcmwpDQotew0KLSAgaWYoKChybC0+ bWF4Um93cz09MCkgfHwgKHJsLT5tYXhSb3dzID4gcmwtPnJvd3MpKQ0KLSAgICAg JiYgKChybC0+bWF4Qnl0ZXM9PTApIHx8IChybC0+bWF4Qnl0ZXMgPiBybC0+Ynl0 ZXMpKSApDQotICAgIHJldHVybiAxOw0KLSAgcmV0dXJuIDA7DQotfQ0KDQo9PT0g cmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmlu Zm8vbmRiaW5mb190YWJsZWlkcy5oJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaAkyMDA4LTEwLTA1 IDA3OjE0OjIxICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZWlkcy5oCTE5NzAtMDEtMDEgMDA6MDA6 MDAgKzAwMDANCkBAIC0xLDIxICswLDAgQEANCi0NCi0jaWZuZGVmIE5EQklORk9f VEFCTEVJRFNfSA0KLSNkZWZpbmUgTkRCSU5GT19UQUJMRUlEU19IDQotDQotI2lm ZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotI2Rl ZmluZSBOREJJTkZPX1RBQkxFU19UQUJMRUlEICAgIDANCi0jZGVmaW5lIE5EQklO Rk9fQ09MVU1OU19UQUJMRUlEICAgMQ0KLSNkZWZpbmUgTkRCSU5GT19NRU1VU0FH RV9UQUJMRUlEICAyDQotI2RlZmluZSBOREJJTkZPX0xPR0RFU1RJTkFUSU9OX1RB QkxFSUQgIDMNCi0jZGVmaW5lIE5EQklORk9fQkFDS1VQX1JFQ09SRFNfVEFCTEVJ RCA0DQotI2RlZmluZSBOREJJTkZPX0JBQ0tVUF9QQVJBTUVURVJTX1RBQkxFSUQg NQ0KLSNkZWZpbmUgTkRCSU5GT19QT09MU19UQUJMRUlEICAgICAgICAgICAgICAg ICAgICAgNg0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0N Ci0jZW5kaWYNCg0KPT09IHJlbW92ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgnDQotLS0gYS9zdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZXMu aAkyMDA5LTA2LTE1IDEzOjMxOjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZXMuaAkxOTcwLTAx LTAxIDAwOjAwOjAwICswMDAwDQpAQCAtMSwxMzMgKzAsMCBAQA0KLS8qIENvcHly aWdodCAoQykgMjAwNyBNeVNRTCBBQg0KLQ0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5DQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCi0gICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuDQotDQot ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCi0gICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlDQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCi0NCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KLSAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlDQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAqLw0KLSNpZm5k ZWYgTkRCSU5GT19UQUJMRVNfSA0KLSNkZWZpbmUgTkRCSU5GT19UQUJMRVNfSA0K LQ0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotDQotI2lmZGVmIF9fY3BsdXNwbHVz DQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotLyoqIFJlc2VydmVkIGZvciBE QklORk8gb25seSAqLw0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX1RB QkxFUywzKQ0KLSAgICAgPSB7ICJUQUJMRVMiLCAzLCAwLA0KLSAgICAgICAgew0K LSAgICAgICAgICB7IlRBQkxFX0lEIiwgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0K LSAgICAgICAgICB7IlRBQkxFX05BTUUiLE5EQklORk9fVFlQRV9TVFJJTkd9LA0K LSAgICAgICAgICB7IkNSRUFURV9TUUwiLE5EQklORk9fVFlQRV9TVFJJTkd9LA0K LSAgICAgICAgfX07DQotDQotLyoqIFJlc2VydmVkIGZvciBEQklORk8gb25seSAq Lw0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0NPTFVNTlMsNCkNCi0g ICAgID0geyAiQ09MVU1OUyIsIDQsIDAsDQotICAgICAgICB7DQotICAgICAgICAg IHsiVEFCTEVfSUQiLCAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgICAg ICAgeyJDT0xVTU5fSUQiLCAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAg ICAgICB7IkNPTFVNTl9OQU1FIiwgTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAg ICAgICAgIHsiQ09MVU1OX1RZUEUiLCBOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0g ICAgICAgIH19Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX01F TVVTQUdFLDcpDQotICAgICA9IHsgIk1FTVVTQUdFIiwgNywgMCwNCi0gICAgICAg IHsNCi0gICAgICAgICAgeyJOT0RFX0lEIiwgICAgICAgICAgTkRCSU5GT19UWVBF X05VTUJFUn0sDQotICAgICAgICAgIHsiQkxPQ0tfTlVNQkVSIiwgICAgIE5EQklO Rk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAgICB7IkJMT0NLX0lOU1RBTkNFIiwg ICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgICAgICAgeyJSRVNPVVJDRV9O QU1FIiwgICAgTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgICAgICAgIHsiUEFH RV9TSVpFIiwgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAg ICB7IlBBR0VTX1VTRUQiLCAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0g ICAgICAgICAgeyJQQUdFU19UT1RBTCIsICAgICAgTkRCSU5GT19UWVBFX05VTUJF Un0sDQotICAgICAgICB9fTsNCi0NCi1ERUNMQVJFX05EQklORk9fVEFCTEUobmRi aW5mb19MT0dERVNUSU5BVElPTiw1KSA9DQoteyAiTE9HREVTVElOQVRJT04iLCA1 LCAwLA0KLSB7DQotICAgeyJOT0RFX0lEIixOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICB7IlRZUEUiLE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAgIHsiUEFSQU1T IixOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICB7IkNVUlJFTlRfU0laRSIsTkRC SU5GT19UWVBFX05VTUJFUn0sDQotICAgeyJNQVhfU0laRSIsTkRCSU5GT19UWVBF X05VTUJFUn0sDQotIH0NCi19Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShu ZGJpbmZvX0JBQ0tVUF9SRUNPUkRTLDExKQ0KLT0geyAiQkFDS1VQX1JFQ09SRFMi LCAxMSwgMCwNCi0gICB7DQotICAgICB7Ik5PREVfSUQiLCAgICAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQkFDS1VQX1JFQ09SRCIsICAgIE5E QklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCQUNLVVBfSUQiLCAgICAgICAg TkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7Ik1BU1RFUl9SRUYiLCAgICAg ICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQ0xJRU5UX1JFRiIsICAg ICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJTVEFURSIsICAgICAg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkJZVEVTIiwgICAg ICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiUkVDT1JEUyIs ICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJMT0dfQllU RVMiLCAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkxPR19S RUNPUkRTIiwgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiRVJS T1JfQ09ERSIsICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgIH0NCi19 Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0JBQ0tVUF9QQVJB TUVURVJTLDE0KQ0KLT0geyAiQkFDS1VQX1BBUkFNRVRFUlMiLCAxNCwgMCwNCi0g ICB7DQotICAgICB7Ik5PREVfSUQiLCAgICAgICAgICAgICAgICAgIE5EQklORk9f VFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJDVVJSRU5UX0RJU0tfV1JJVEVfU1BFRUQi LCBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQllURVNfV1JJVFRFTl9U SElTX1BFUklPRCIsTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7Ik9WRVJG TE9XX0RJU0tfV1JJVEUiLCAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAg ICAgeyJSRVNFVF9ERUxBWV9VU0VEIiwgICAgICAgICBOREJJTkZPX1RZUEVfTlVN QkVSfSwNCi0gICAgIHsiUkVTRVRfRElTS19TUEVFRF9USU1FIiwgICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9QT09MX1NJWkUiLCAgICAg ICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCQUNLVVBfRklMRV9Q T09MX1NJWkUiLCAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiVEFC TEVfUE9PTF9TSVpFIiwgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICB7IlRSSUdHRVJfUE9PTF9TSVpFIiwgICAgICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJGUkFHTUVOVF9QT09MX1NJWkUiLCAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiUEFHRV9QT09MX1NJWkUiLCAgICAg ICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkNPTVBSRVNTRURf QkFDS1VQIiwgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJD T01QUkVTU0VEX0xDUCIsICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICB9DQotfTsNCi0NCi1ERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19Q T09MUyw2KQ0KLT0geyAiUE9PTFMiLCA2LCAwLA0KLSAgIHsNCi0gICAgIHsiTk9E RV9JRCIsICAgICAgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICB7IkJMT0NLX05VTUJFUiIsICAgICAgICAgICAgIE5EQklORk9fVFlQRV9O VU1CRVJ9LA0KLSAgICAgeyJCTE9DS19JTlNUQU5DRSIsICAgICAgICAgICBOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiUE9PTF9OQU1FIiwgICAgICAgICAg ICAgICAgTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgICB7IkZSRUUiLCAgICAg ICAgICAgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJT SVpFIiwgICAgICAgICAgICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwN Ci0gICB9DQotfTsNCi0NCi1zdGF0aWMgVWludDMyIG51bWJlcl9uZGJpbmZvX3Rh Ymxlcz0gNzsNCi0NCi0jZGVmaW5lIERCSU5GT1RCTCh4KSAoc3RydWN0IG5kYmlu Zm9fdGFibGUqKSZ4DQotDQotc3RydWN0IG5kYmluZm9fdGFibGUgKm5kYmluZm9f dGFibGVzW10gPSB7DQotICBEQklORk9UQkwobmRiaW5mb19UQUJMRVMpLA0KLSAg REJJTkZPVEJMKG5kYmluZm9fQ09MVU1OUyksDQotICBEQklORk9UQkwobmRiaW5m b19NRU1VU0FHRSksDQotICBEQklORk9UQkwobmRiaW5mb19MT0dERVNUSU5BVElP TiksDQotICBEQklORk9UQkwobmRiaW5mb19CQUNLVVBfUkVDT1JEUyksDQotICBE QklORk9UQkwobmRiaW5mb19CQUNLVVBfUEFSQU1FVEVSUyksDQotICBEQklORk9U QkwobmRiaW5mb19QT09MUyksDQotfTsNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMN Ci19DQotI2VuZGlmDQotDQotI2VuZGlmDQoNCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcCcN Ci0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01h aW4uY3BwCTIwMDktMDYtMzAgMTg6NDk6NTMgKzAwMDANCisrKyBiL3N0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4uY3BwCTIwMDktMDct MDMgMTE6MTM6NTkgKzAwMDANCkBAIC04OCw4ICs4OCw2IEBADQogDQogI2luY2x1 ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25h bGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNp bmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJsZWlkcy5oPg0KIA0KIA0KIC8vIFVz ZSBERUJVRyB0byBwcmludCBtZXNzYWdlcyB0aGF0IHNob3VsZCBiZQ0KQEAgLTEx Nzg2LDE0ICsxMTc4NCwxMyBAQCBEYnRjOjpleGVjRFVNUF9TVEFURV9PUkQoU2ln bmFsKiBzaWduYWwpDQogdm9pZCBEYnRjOjpleGVjREJJTkZPX1NDQU5SRVEoU2ln bmFsICpzaWduYWwpDQogew0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZv U2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0g IHN0cnVjdCBkYmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1p dCBybDsNCi0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAg Y29uc3QgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmlu Zm86OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsN CisgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQog DQotICBpZihyZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQor ICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAg ew0KICAgICBzdHJ1Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0K QEAgLTExODIyLDYzICsxMTgxOSwzMCBAQCB2b2lkIERidGM6OmV4ZWNEQklORk9f U0NBTlJFUShTaWduYWwgKnNpDQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAg ICAgICAgIH07DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBd Ow0KICAgICBCbG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsN Ci0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQotICAg IHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9m KGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEuaW5z dGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5mb193cml0ZV9y b3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVuKHBvb2xzW2ld LnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAgICAgIGRiaW5m b19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlS ZWYpOw0KLSAgICB9DQotICB9DQotDQotICAvKiAgaWYocmVxLT50YWJsZUlkID09 DQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCi0NCi0gICAg aWYoIShyZXEucmVxdWVzdEluZm8gJiBEYmluZm9TY2FuUmVxOjpTdGFydFNjYW4p KQ0KLSAgICAgIHN0YXJ0aWQ9IHJlcS5jdXJfaXRlbTsNCi0NCi0gICAgZm9yKGk9 c3RhcnRpZDtkYmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVlKCZybCkgJiYgaTxudW1i ZXJfbmRiaW5mb190YWJsZXM7aSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29sXS5w b29sbmFtZSkNCiAgICAgew0KICAgICAgIGphbSgpOw0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgbmRi aW5mb19jcmVhdGVfc3FsKG5kYmluZm9fdGFibGVzW2ldLA0KLSAgICAgICAgICAg ICAgICAgICAgICAgICBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkpOw0K LQ0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCAoY2hhciopJmks IHNpemVvZihpKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIs IG5kYmluZm9fdGFibGVzW2ldLT5uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmxlbihuZGJpbmZvX3RhYmxlc1tpXS0+bmFtZSkpOw0KLSAg ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBjcmVhdGVfc3FsLCBzdHJs ZW4oY3JlYXRlX3NxbCkpOw0KLQ0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWdu YWwscixybCxhcGlUeG5JZCxhcGlSZWYpOw0KLSAgICB9DQotDQotICAgIGlmKCFk YmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVlKCZybCkgJiYgaSA8IG51bWJlcl9uZGJp bmZvX3RhYmxlcykNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIGRiaW5m b19yYXRlbGltaXRfc2VuZGNvbmYoc2lnbmFsLHJlcSxybCxpKTsNCi0gICAgfQ0K LSAgICBlbHNlDQotICAgIHsNCi0gICAgICBEYmluZm9TY2FuQ29uZiAqY29uZj0g KERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAg ICAgY29uZi0+dGFibGVJZD0gcmVxLnRhYmxlSWQ7DQotICAgICAgY29uZi0+c2Vu ZGVyUmVmPSByZXEuc2VuZGVyUmVmOw0KLSAgICAgIGNvbmYtPmFwaVR4bklkPSBy ZXEuYXBpVHhuSWQ7DQotICAgICAgY29uZi0+cmVxdWVzdEluZm89IDA7DQotICAg ICAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05G LCBzaWduYWwsDQotICAgICAgICAgICAgICAgICBEYmluZm9TY2FuQ29uZjo6U2ln bmFsTGVuZ3RoLCBKQkIpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFs LCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkp Ow0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxv Y2sgbnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsg Ly8gYmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfc3RyaW5nKHBvb2xz W3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xz W3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9v bF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwg cm93LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlmIChybC5uZWVkX2Jy ZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBu ZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0K KyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KLSAgKi8NCisgIH0N CiANCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNp Z25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERi aW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWlu dDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25m OjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9E QklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2Nh bkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJpbmZv X3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIGJvb2wN Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RidHVwL0RidHVwRGVidWcuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJ0dXAvRGJ0dXBEZWJ1Zy5jcHAJMjAwOS0wNi0zMCAx ODoyMjo1NiArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJ0dXAvRGJ0dXBEZWJ1Zy5jcHAJMjAwOS0wNy0wMyAxMToxMzo1OSArMDAw MA0KQEAgLTMwLDggKzMwLDYgQEANCiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9E YmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUku aHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9u ZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogDQogLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq Lw0KQEAgLTc2LDMzICs3NCwyOCBAQCB2b2lkIERidHVwOjpleGVjREJJTkZPX1ND QU5SRVEoU2lnbmFsKiBzDQogew0KICAgamFtRW50cnkoKTsNCiAgIERiaW5mb1Nj YW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0g IGNvbnN0IFVpbnQzMiByZXFsZW5ndGg9IHNpZ25hbC0+Z2V0TGVuZ3RoKCk7DQor ICBjb25zdCBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRi aW5mbzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEp Ow0KIA0KLSAgY29uc3QgVWludDMyIHRhYmxlSWQ9IHJlcS50YWJsZUlkOw0KLSAg Y29uc3QgVWludDMyIGluc3RhbmNlPSByZXEuaW5zdGFuY2U7DQorICBOZGJpbmZv OjpSYXRlbGltaXQgcmw7DQogDQotICBjaGFyIGJ1ZlsxMDI0XTsNCi0gIHN0cnVj dCBkYmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsN Ci0NCi0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KLQ0KLSAg aWYodGFibGVJZCA9PSBOREJJTkZPX01FTVVTQUdFX1RBQkxFSUQpDQorICBpZihy ZXEudGFibGVJZCA9PSBOZGJpbmZvOjpNRU1VU0FHRV9UQUJMRUlEKQ0KICAgew0K ICAgICBqYW0oKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYs IHNpemVvZihidWYpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgYmxvY2tUb01haW4obnVtYmVyKCkpKTsvLyBibG9j ayBudW1iZXINCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCBpbnN0YW5jZSk7ICAgICAgICAgICAgIC8vIGJsb2NrIGluc3RhbmNlDQotICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCAiRGF0YU1lbW9yeSIsIDEwKTsN Ci0gICAgVWludDMyIHBhZ2Vfc2l6ZV9rYj0gc2l6ZW9mKFBhZ2UpOzsNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIChjaGFyKikmcGFnZV9zaXplX2ti LCA0KTsgLy8gOGtiDQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgY1RvdE5vRnJhZ1BhZ2VzKTsgLy8gYWxsb2NlZCBwYWdlcw0KLSAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGNUb3RQYWdlcyk7IC8v IG51bWJlciBvZiBwYWdlcw0KLSAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLHIs cmwscmVxLmFwaVR4bklkLHJlcS5hcGlSZWYpOw0KKyAgICBOZGJpbmZvOjpSb3cg cm93KHNpZ25hbCwgcmVxKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25O b2RlSWQoKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoYmxvY2tUb01haW4obnVt YmVyKCkpKTsgLy8gYmxvY2sgbnVtYmVyDQorICAgIHJvdy53cml0ZV91aW50MzIo aW5zdGFuY2UoKSk7ICAgICAgICAgICAgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAg cm93LndyaXRlX3N0cmluZygiRGF0YU1lbW9yeSIpOw0KKyAgICByb3cud3JpdGVf dWludDMyKHNpemVvZihQYWdlKSk7DQorICAgIHJvdy53cml0ZV91aW50MzIoY1Rv dE5vRnJhZ1BhZ2VzKTsgICAgICAgLy8gYWxsb2NlZCBwYWdlcw0KKyAgICByb3cu d3JpdGVfdWludDMyKGNUb3RQYWdlcyk7ICAgICAgICAgICAgIC8vIG51bWJlciBv ZiBwYWdlcw0KKyAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3cs IHJsKTsNCisNCiAgIH0NCi0gIGlmKHJlcS50YWJsZUlkID09IE5EQklORk9fUE9P TFNfVEFCTEVJRCkNCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OlBPT0xT X1RBQkxFSUQpDQogICB7DQorICAgIGphbSgpOw0KICAgICBzdHJ1Y3Qgew0KICAg ICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KICAgICAgIFVpbnQzMiBmcmVlOw0K QEAgLTEzMywyNSArMTI2LDUyIEBAIHZvaWQgRGJ0dXA6OmV4ZWNEQklORk9fU0NB TlJFUShTaWduYWwqIHMNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAg ICAgfTsNCiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQog ICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAg ICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisgICAgd2hp bGUocG9vbHNbcG9vbF0ucG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBkYmluZm9f d3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkp Ow0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgYm4p OyAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIGluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFuY2UN Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0ucG9v bG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tp XS5zaXplKTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwg cmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisgICAg ICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWlu dDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJvdy53 cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQorICAg ICAgcm93LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQorICAg ICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAgICBy b3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5kYmlu Zm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBvb2wr KzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisg ICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWso c2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAg ICB9DQorICAgIH0NCisgIH0NCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86 OlRFU1RfVEFCTEVJRCkNCisgIHsNCisgICAgVWludDMyIGNvdW50ZXIgPSBjdXJz b3ItPmRhdGFbMF07DQorICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4o bnVtYmVyKCkpOw0KKyAgICB3aGlsZShjb3VudGVyIDwgMTAwMCkNCisgICAgew0K KyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCBy ZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sg bnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8g YmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfdWludDMyKGNvdW50ZXIp Ow0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwp Ow0KKyAgICAgIGNvdW50ZXIrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhy ZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5m b19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBjb3VudGVyKTsNCisg ICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERi aW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0 RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIHJlcWxlbmd0aCAq IHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJp bmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRl clJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFs LCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsN CisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9 DQogDQogI2lmZGVmIFZNX1RSQUNFDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1eC9EYnR1eERlYnVnLmNwcCcN Ci0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHV4L0RidHV4 RGVidWcuY3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHV4L0RidHV4RGVidWcuY3BwCTIw MDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yMSwyMCArMjEsMTggQEANCiAN CiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVk ZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZv Lmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQorDQog DQogdm9pZCBEYnR1eDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2lnbmFs KQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNp Z25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJp bmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQotICBk YmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0IE5kYmlu Zm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vy c29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQorICBOZGJpbmZv OjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAgaWYocmVx LnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlEKQ0KKyAgaWYocmVxLnRh YmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAgICAgc3Ry dWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29sbmFtZTsNCkBAIC02NiwyNSAr NjQsMzAgQEAgdm9pZCBEYnR1eDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAq cw0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAgICB9Ow0KIA0KKyAg ICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAgICAgQmxvY2tOdW1i ZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAgIGZvcihpbnQgaT0w OyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGlsZShwb29sc1twb29s XS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5p dCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7ICAgICAgICAgICAv LyBibG9jayBudW1iZXINCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAg ICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1l LCBzdHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6 ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5h cGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgamFtKCk7DQorICAgICAgTmRi aW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93LndyaXRlX3Vp bnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihi bik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisgICAgICByb3cud3JpdGVf dWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJv dy53cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJv dy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJlZSk7DQorICAgICAgcm93Lndy aXRlX3VpbnQzMihwb29sc1twb29sXS5zaXplKTsNCisgICAgICBuZGJpbmZvX3Nl bmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAgICBwb29sKys7DQor ICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAgICB7DQorICAgICAg ICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25h bCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0K ICAgICB9DQogICB9DQogDQotICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5m b1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHko Y29uZiwmcmVxLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29y ICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihE YmluZm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2Vu ZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWdu YWwsIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIp Ow0KKyAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0K IH0NCiANCiAvKg0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC9ibG9ja3MvZGJ1dGlsL0RiVXRpbC5jcHAnDQotLS0gYS9zdG9yYWdl L25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnV0aWwvRGJVdGlsLmNwcAkyMDA5LTA2 LTE1IDEzOjMxOjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVs L2Jsb2Nrcy9kYnV0aWwvRGJVdGlsLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICsw MDAwDQpAQCAtNDQsOCArNDQsNiBAQA0KIA0KICNpbmNsdWRlIDxzaWduYWxkYXRh L0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRB SS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZv L25kYmluZm9fdGFibGVpZHMuaD4NCiANCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioNCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkBAIC02ODYsMTUg KzY4NCwxMyBAQCBEYlV0aWw6OmV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwqIHNp Z25hDQogdm9pZCBEYlV0aWw6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNp Z25hbCkNCiB7DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9TY2FuUmVx KilzaWduYWwtPnRoZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0 IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0K LQ0KLSAgZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBjb25z dCBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6 U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAg TmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiANCi0g IGlmKHJlcS50YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisgIGlm KHJlcS50YWJsZUlkID09IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7DQog ICAgIHN0cnVjdCB7DQogICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpAQCAt NzI2LDI1ICs3MjIsMzAgQEAgdm9pZCBEYlV0aWw6OmV4ZWNEQklORk9fU0NBTlJF UShTaWduYWwgKg0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAgICB9 Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAgICAg QmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAgIGZv cihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGlsZShw b29sc1twb29sXS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7ICAg ICAgICAgICAvLyBibG9jayBudW1iZXINCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0YW5jZSk7IC8vIGJsb2NrIGluc3Rh bmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHBvb2xzW2ld LnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0ucG9vbG5hbWUpKTsNCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLmZyZWUp Ow0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9v bHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwg cmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQorICAgICAgamFtKCk7DQor ICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgcm93 LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7DQorICAgICAgcm93LndyaXRl X3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCisgICAgICBy b3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAvLyBibG9jayBpbnN0YW5jZQ0K KyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNbcG9vbF0ucG9vbG5hbWUpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uZnJlZSk7DQorICAg ICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5zaXplKTsNCisgICAgICBu ZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisgICAgICBw b29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJlYWsocmVxKSkNCisgICAgICB7 DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2Jy ZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQorICAgICAgICByZXR1cm47DQor ICAgICAgfQ0KICAgICB9DQogICB9DQogDQotICBEYmluZm9TY2FuQ29uZiAqY29u Zj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQot ICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhX aXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgY29uZi0+cmVxdWVzdElu Zm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25h bChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAgICAg ICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vy c29yLCBKQkIpOw0KKyAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJl cSwgcmwpOw0KIH0NCiB2b2lkDQogRGJVdGlsOjptdXRleF9jcmVhdGVkKFNpZ25h bCogc2lnbmFsLCBVaW50MzIgcHRySSwgVWludDMyIHJldFZhbCl7DQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9zdW1h L1N1bWEuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3Mv c3VtYS9TdW1hLmNwcAkyMDA5LTA2LTE1IDEzOjMxOjM3ICswMDAwDQorKysgYi9z dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9zdW1hL1N1bWEuY3BwCTIwMDkt MDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC02Myw4ICs2Myw2IEBADQogDQogI2lu Y2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNp Z25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0K LSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJsZWlkcy5oPg0KIA0KICNpbmNs dWRlIDxFdmVudExvZ2dlci5ocHA+DQogZXh0ZXJuIEV2ZW50TG9nZ2VyICogZ19l dmVudExvZ2dlcjsNCkBAIC0xNDk2LDE1ICsxNDk0LDEzIEBAIFN1bWE6OmV4ZWNE VU1QX1NUQVRFX09SRChTaWduYWwqIHNpZ25hbCkNCiB2b2lkIFN1bWE6OmV4ZWNE QklORk9fU0NBTlJFUShTaWduYWwgKnNpZ25hbCkNCiB7DQogICBEYmluZm9TY2Fu UmVxIHJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQotICBj aGFyIGJ1Zls1MTJdOw0KLSAgc3RydWN0IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVj dCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLQ0KLSAgZGJpbmZvX3JhdGVsaW1pdF9p bml0KCZybCwgJnJlcSk7DQorICBjb25zdCBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBj dXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6 Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KKyAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0K IA0KICAgamFtRW50cnkoKTsNCiANCi0gIGlmKHJlcS50YWJsZUlkID09IE5EQklO Rk9fUE9PTFNfVEFCTEVJRCkNCisgIGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86 OlBPT0xTX1RBQkxFSUQpDQogICB7DQogICAgIHN0cnVjdCB7DQogICAgICAgY29u c3QgY2hhciogcG9vbG5hbWU7DQpAQCAtMTUzOSwyNSArMTUzNSwzMCBAQCB2b2lk IFN1bWE6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKnNpDQogICAgICAgICAg IHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07DQogDQorICAgIFVpbnQzMiBwb29s ID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJlciBibiA9IGJsb2Nr VG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ldLnBv b2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKQ0K ICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNp emVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJl cg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVx Lmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihwb29s c1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1u X3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAgICBk YmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCByZXEu YXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93 KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5v ZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAg IC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFu Y2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0cmlu Zyhwb29sc1twb29sXS5wb29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQz Mihwb29sc1twb29sXS5mcmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBv b2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFs LCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAocmwu bmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAg ICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBw b29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAgIH0N CiANCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNp Z25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERi aW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWlu dDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25m OjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9E QklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2Nh bkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJpbmZv X3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy90cml4L1RyaXguY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvdHJpeC9Ucml4LmNwcAkyMDA5LTA2LTE1IDEzOjMx OjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy90 cml4L1RyaXguY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0zOSw5 ICszOSw2IEBADQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5o cHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0jaW5j bHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJs ZWlkcy5oPg0KLQ0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1dhaXRHQ1AuaHBwPg0K IA0KICNkZWZpbmUgQ09OU1RSQUlOVF9WSU9MQVRJT04gODkzDQpAQCAtNDk1LDE1 ICs0OTIsMTMgQEAgVHJpeDo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogc2ln bmFsKQ0KIHZvaWQgVHJpeDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2ln bmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEq KXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3Qg ZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQot DQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0 IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpT Y2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQorICBO ZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAg aWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlEKQ0KKyAgaWYo cmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAg ICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29sbmFtZTsNCkBAIC01 MjAsMjUgKzUxNSwzMCBAQCB2b2lkIFRyaXg6OmV4ZWNEQklORk9fU0NBTlJFUShT aWduYWwgKnNpDQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07 DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBC bG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9y KGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBv b2xzW3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAg ICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFu Y2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0u cG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29s c1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBy bCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisg ICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cu d3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVf dWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJv dy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQor ICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5k YmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBv b2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsN CisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJl YWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisg ICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERiaW5mb1NjYW5Db25mICpjb25m PSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0g IG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdp dGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5m byAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFs KHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAg ICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJz b3IsIEpCQik7DQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVx LCBybCk7DQogfQ0KIA0KIC8vIEJ1aWxkIGluZGV4DQoNCj09PSBtb2RpZmllZCBm aWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL01ha2VmaWxlLmFtJw0KLS0t IGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9NYWtlZmlsZS5hbQkyMDA5LTA1 LTI3IDE1OjIxOjQ1ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVs L3ZtL01ha2VmaWxlLmFtCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0z OCw3ICszOCw4IEBAIGxpYmtlcm5lbF9hX1NPVVJDRVMgPSBcDQogCW5kYmRfbWFs bG9jX2ltcGwuY3BwIFwNCiAJUG9vbC5jcHAgV09Qb29sLmNwcCBSV1Bvb2wuY3Bw IER5bkFycjI1Ni5jcHAgTG9ja1F1ZXVlLmNwcCBcDQogCUdsb2JhbERhdGEuY3Bw IFwNCi0JU2FmZU11dGV4LmNwcA0KKwlTYWZlTXV0ZXguY3BwIFwNCisJTmRiaW5m by5jcHANCiANCiBsaWJzY2hlZF9hX1NPVVJDRVMgPSBUaW1lUXVldWUuY3BwCQlc DQogICAgICAgICAgICAgICAgICAgICAgVGhyZWFkQ29uZmlnLmNwcCBcDQpAQCAt MTIwLDQgKzEyMSwzIEBAIHRlc3RTYWZlTXV0ZXhfTERGTEFHUyA9IEBuZGJfYmlu X2FtX2xkZmwNCiAgICQodG9wX2J1aWxkZGlyKS9zdHJpbmdzL2xpYm15c3RyaW5n c2x0LmxhIFwNCiAgIEByZWFkbGluZV9saW5rQCBAVEVSTUNBUF9MSUJADQogDQot DQoNCj09PSBhZGRlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05k YmluZm8uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9OZGJp bmZvLmNwcAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwDQorKysgYi9zdG9yYWdl L25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uY3BwCTIwMDktMDctMDMgMTA6MzE6 MzAgKzAwMDANCkBAIC0wLDAgKzEsMjkxIEBADQorLyoNCisgICBDb3B5cmlnaHQg KEMpIDIwMDkgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuDQorICAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcy4NCisNCisg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 DQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLg0KKw0KKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UNCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAgIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxICBVU0ENCisqLw0KKw0KKyNpbmNsdWRlICJOZGJpbmZvLmhwcCINCisjaW5j bHVkZSAiU2ltdWxhdGVkQmxvY2suaHBwIg0KKyNpbmNsdWRlIDxBdHRyaWJ1dGVI ZWFkZXIuaHBwPg0KKyNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+ DQorDQorTmRiaW5mbzo6Um93OjpSb3coU2lnbmFsKiBzaWduYWwsIERiaW5mb1Nj YW5SZXEmIHJlcSkgOg0KKyAgY29sX2NvdW50ZXIoMCksDQorICBtX3JlcShyZXEp DQorew0KKyAgLy8gVXNlIHRoZSAidGVtcG9yYXJ5IiBwYXJ0IG9mIHNpZ25hbC0+ dGhlRGF0YSBhcyByb3cgYnVmZmVyDQorICBzdGFydCA9IHNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKSArIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aDsNCisgIGNv bnN0IFVpbnQzMiBkYXRhX3N6ID0gc2l6ZW9mKHNpZ25hbC0+dGhlRGF0YSkvc2l6 ZW9mKHNpZ25hbC0+dGhlRGF0YVswXSk7DQorICBlbmQgPSBzaWduYWwtPmdldERh dGFQdHJTZW5kKCkgKyBkYXRhX3N6Ow0KKyAgYXNzZXJ0KHN0YXJ0IDwgZW5kKTsN CisNCisgIGN1cnIgPSBzdGFydDsNCit9DQorDQorYm9vbA0KK05kYmluZm86OlJv dzo6Y2hlY2tfYnVmZmVyX3NwYWNlKEF0dHJpYnV0ZUhlYWRlciYgYWgpIGNvbnN0 DQorew0KKyAgY29uc3QgVWludDMyIG5lZWRlZCA9ICBhaC5nZXRIZWFkZXJTaXpl KCkgKyBhaC5nZXREYXRhU2l6ZSgpOw0KKyAgY29uc3QgVWludDMyIGF2YWlsID0g KFVpbnQzMikoZW5kIC0gY3Vycik7DQorDQorICBpZihuZWVkZWQgPiBhdmFpbCkN CisgIHsNCisgICAgbmRib3V0X2MoIldhcm5pbmcsIHRvbyBzbWFsbCByb3cgYnVm ZmVyIGZvciBhdHRyaWJ1dGU6ICVkLCAiDQorICAgICAgICAgICAgICJuZWVkZWQ6 ICVkLCBhdmFpbDogJWQiLCBhaC5nZXRBdHRyaWJ1dGVJZCgpLCBuZWVkZWQsIGF2 YWlsKTsNCisgICAgYXNzZXJ0KGZhbHNlKTsNCisgICAgcmV0dXJuIGZhbHNlOyAv LyBOb3QgZW5vdWdoIHJvb20gaW4gcm93IGJ1ZmZlcg0KKyAgfQ0KKyAgcmV0dXJu IHRydWU7DQorfQ0KKw0KK3ZvaWQNCitOZGJpbmZvOjpSb3c6OmNoZWNrX2F0dHJp YnV0ZV90eXBlKEF0dHJpYnV0ZUhlYWRlciYgYWgsIENvbHVtblR5cGUgdHlwZSkg Y29uc3QNCit7DQorICBjb25zdCBUYWJsZSYgdGFiID0gZ2V0VGFibGUobV9yZXEu dGFibGVJZCk7DQorICBjb25zdCBVaW50MzIgY29saWQgPSBhaC5nZXRBdHRyaWJ1 dGVJZCgpOw0KKyAgYXNzZXJ0KGNvbGlkIDwgdGFiLm0ubmNvbHMpOw0KKyAgYXNz ZXJ0KHRhYi5jb2xbY29saWRdLmNvbHR5cGUgPT0gdHlwZSk7DQorfQ0KKw0KK3Zv aWQNCitOZGJpbmZvOjpSb3c6OndyaXRlX3N0cmluZyhjb25zdCBjaGFyKiBzdHIp DQorew0KKyAgY29uc3Qgc2l6ZV90IGNsZW4gPSBzdHJsZW4oc3RyKSArIDE7DQor ICAvLyBDcmVhdGUgQXR0cmlidXRlSGVhZGVyDQorICBBdHRyaWJ1dGVIZWFkZXIg YWgoY29sX2NvdW50ZXIrKywgY2xlbik7DQorICBjaGVja19hdHRyaWJ1dGVfdHlw ZShhaCwgTmRiaW5mbzo6U3RyaW5nKTsNCisgIGlmICghY2hlY2tfYnVmZmVyX3Nw YWNlKGFoKSkNCisgICAgcmV0dXJuOw0KKw0KKyAgLy8gV3JpdGUgQXR0cmlidXRl SGVhZGVyIHRvIGJ1ZmZlcg0KKyAgYWguaW5zZXJ0SGVhZGVyKGN1cnIpOw0KKyAg Y3VyciArPSBhaC5nZXRIZWFkZXJTaXplKCk7DQorDQorICAvLyBXcml0ZSBkYXRh IHRvIGJ1ZmZlcg0KKyAgbWVtY3B5KGN1cnIsIHN0ciwgY2xlbik7DQorICBjdXJy ICs9IGFoLmdldERhdGFTaXplKCk7DQorDQorICBhc3NlcnQoY3VyciA8PSBlbmQp Ow0KKyAgcmV0dXJuOw0KK30NCisNCit2b2lkDQorTmRiaW5mbzo6Um93Ojp3cml0 ZV91aW50MzIoVWludDMyIHZhbHVlKQ0KK3sNCisgIC8vIENyZWF0ZSBBdHRyaWJ1 dGVIZWFkZXINCisgIEF0dHJpYnV0ZUhlYWRlciBhaChjb2xfY291bnRlcisrLCBz aXplb2YoVWludDMyKSk7DQorICBjaGVja19hdHRyaWJ1dGVfdHlwZShhaCwgTmRi aW5mbzo6TnVtYmVyKTsNCisgIGlmICghY2hlY2tfYnVmZmVyX3NwYWNlKGFoKSkN CisgICAgcmV0dXJuOw0KKw0KKyAgLy8gV3JpdGUgQXR0cmlidXRlSGVhZGVyIHRv IGJ1ZmZlcg0KKyAgYWguaW5zZXJ0SGVhZGVyKGN1cnIpOw0KKyAgY3VyciArPSBh aC5nZXRIZWFkZXJTaXplKCk7DQorDQorICAvLyBXcml0ZSBkYXRhIHRvIGJ1ZmZl cg0KKyAgbWVtY3B5KGN1cnIsICZ2YWx1ZSwgc2l6ZW9mKFVpbnQzMikpOw0KKyAg Y3VyciArPSBhaC5nZXREYXRhU2l6ZSgpOw0KKw0KKyAgYXNzZXJ0KGN1cnIgPD0g ZW5kKTsNCisgIHJldHVybjsNCit9DQorDQorDQorI2RlZmluZSBERUNMQVJFX05E QklORk9fVEFCTEUodmFyLCBudW0pICBcDQorc3RhdGljIGNvbnN0IHN0cnVjdCAg eyAgICAgICAgICAgICAgICAgICBcDQorICBOZGJpbmZvOjpUYWJsZTo6TWVtYmVy cyBtOyAgICAgICAgICAgICBcDQorICBOZGJpbmZvOjpDb2x1bW4gY29sW251bV07 ICAgICAgICAgICAgICBcDQorfSB2YXINCisNCisNCisvKiogUmVzZXJ2ZWQgZm9y IERCSU5GTyBvbmx5ICovDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9f VEFCTEVTLDMpID0NCit7ICJUQUJMRVMiLCAzLCAwLA0KKyAgew0KKyAgICB7IlRB QkxFX0lEIiwgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiVEFCTEVfTkFNRSIs TmRiaW5mbzo6U3RyaW5nfSwNCisgICAgeyJDUkVBVEVfU1FMIixOZGJpbmZvOjpT dHJpbmd9LA0KKyAgfX07DQorDQorLyoqIFJlc2VydmVkIGZvciBEQklORk8gb25s eSAqLw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX0NPTFVNTlMsNCkg PQ0KK3sgIkNPTFVNTlMiLCA0LCAwLA0KKyAgew0KKyAgICB7IlRBQkxFX0lEIiwg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDT0xVTU5fSUQiLCAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICAgIHsiQ09MVU1OX05BTUUiLCBOZGJpbmZvOjpTdHJp bmd9LA0KKyAgICB7IkNPTFVNTl9UWVBFIiwgTmRiaW5mbzo6U3RyaW5nfSwNCisg IH19Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX01FTVVTQUdF LDcpID0NCit7ICJNRU1VU0FHRSIsIDcsIDAsDQorICB7DQorICAgIHsiTk9ERV9J RCIsICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQkxPQ0tfTlVN QkVSIiwgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQkxPQ0tfSU5TVEFO Q0UiLCAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiUkVTT1VSQ0VfTkFNRSIs ICAgIE5kYmluZm86OlN0cmluZ30sDQorICAgIHsiUEFHRV9TSVpFIiwgICAgICAg IE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiUEFHRVNfVVNFRCIsICAgICAgIE5k YmluZm86Ok51bWJlcn0sDQorICAgIHsiUEFHRVNfVE9UQUwiLCAgICAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICB9fTsNCisNCitERUNMQVJFX05EQklORk9fVEFCTEUo bmRiaW5mb19MT0dERVNUSU5BVElPTiw1KSA9DQoreyAiTE9HREVTVElOQVRJT04i LCA1LCAwLA0KKyAgew0KKyAgICB7Ik5PREVfSUQiLE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiVFlQRSIsTmRiaW5mbzo6U3RyaW5nfSwNCisgICAgeyJQQVJBTVMi LE5kYmluZm86OlN0cmluZ30sDQorICAgIHsiQ1VSUkVOVF9TSVpFIixOZGJpbmZv OjpOdW1iZXJ9LA0KKyAgICB7Ik1BWF9TSVpFIixOZGJpbmZvOjpOdW1iZXJ9LA0K KyAgfQ0KK307DQorDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQkFD S1VQX1JFQ09SRFMsMTEpID0NCit7ICJCQUNLVVBfUkVDT1JEUyIsIDExLCAwLA0K KyAgew0KKyAgICB7Ik5PREVfSUQiLCAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9 LA0KKyAgICB7IkJBQ0tVUF9SRUNPUkQiLCAgICBOZGJpbmZvOjpOdW1iZXJ9LA0K KyAgICB7IkJBQ0tVUF9JRCIsICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAg ICB7Ik1BU1RFUl9SRUYiLCAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7 IkNMSUVOVF9SRUYiLCAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlNU QVRFIiwgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJZVEVT IiwgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlJFQ09SRFMi LCAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkxPR19CWVRFUyIs ICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkxPR19SRUNPUkRTIiwg ICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkVSUk9SX0NPREUiLCAgICAg ICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgfQ0KK307DQorDQorREVDTEFSRV9OREJJ TkZPX1RBQkxFKG5kYmluZm9fQkFDS1VQX1BBUkFNRVRFUlMsMTQpID0NCit7ICJC QUNLVVBfUEFSQU1FVEVSUyIsIDE0LCAwLA0KKyAgew0KKyAgICB7Ik5PREVfSUQi LCAgICAgICAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQ1VS UkVOVF9ESVNLX1dSSVRFX1NQRUVEIiwgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAg eyJCWVRFU19XUklUVEVOX1RISVNfUEVSSU9EIixOZGJpbmZvOjpOdW1iZXJ9LA0K KyAgICB7Ik9WRVJGTE9XX0RJU0tfV1JJVEUiLCAgICAgIE5kYmluZm86Ok51bWJl cn0sDQorICAgIHsiUkVTRVRfREVMQVlfVVNFRCIsICAgICAgICAgTmRiaW5mbzo6 TnVtYmVyfSwNCisgICAgeyJSRVNFVF9ESVNLX1NQRUVEX1RJTUUiLCAgICBOZGJp bmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJBQ0tVUF9QT09MX1NJWkUiLCAgICAgICAg IE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQkFDS1VQX0ZJTEVfUE9PTF9TSVpF IiwgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJUQUJMRV9QT09MX1NJWkUi LCAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlRSSUdHRVJfUE9P TF9TSVpFIiwgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiRlJBR01F TlRfUE9PTF9TSVpFIiwgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJQ QUdFX1BPT0xfU0laRSIsICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAg ICB7IkNPTVBSRVNTRURfQkFDS1VQIiwgICAgICAgIE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiQ09NUFJFU1NFRF9MQ1AiLCAgICAgICAgICAgTmRiaW5mbzo6TnVt YmVyfSwNCisgIH0NCit9Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJp bmZvX1BPT0xTLDYpID0NCit7ICJQT09MUyIsIDYsIDAsDQorICB7DQorICAgIHsi Tk9ERV9JRCIsICAgICAgICAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisg ICAgeyJCTE9DS19OVU1CRVIiLCAgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9 LA0KKyAgICB7IkJMT0NLX0lOU1RBTkNFIiwgICAgICAgICAgIE5kYmluZm86Ok51 bWJlcn0sDQorICAgIHsiUE9PTF9OQU1FIiwgICAgICAgICAgICAgICAgTmRiaW5m bzo6U3RyaW5nfSwNCisgICAgeyJGUkVFIiwgICAgICAgICAgICAgICAgICAgICBO ZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlNJWkUiLCAgICAgICAgICAgICAgICAg ICAgIE5kYmluZm86Ok51bWJlcn0sDQorICB9DQorfTsNCisNCitERUNMQVJFX05E QklORk9fVEFCTEUobmRiaW5mb19URVNULDQpID0NCit7ICJURVNUIiwgNCwgMCwN CisgIHsNCisgICAgeyJOT0RFX0lEIiwgICAgICAgICAgICAgICAgIE5kYmluZm86 Ok51bWJlcn0sDQorICAgIHsiQkxPQ0tfTlVNQkVSIiwgICAgICAgICAgICBOZGJp bmZvOjpOdW1iZXJ9LA0KKyAgICB7IkJMT0NLX0lOU1RBTkNFIiwgICAgICAgICAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDT1VOVEVSIiwgICAgICAgICAgICAg ICAgIE5kYmluZm86Ok51bWJlcn0sDQorICB9DQorfTsNCisNCisjZGVmaW5lIERC SU5GT1RCTCh4KSAoTmRiaW5mbzo6VGFibGUqKSZ4DQorDQorc3RhdGljIE5kYmlu Zm86OlRhYmxlICpuZGJpbmZvX3RhYmxlc1tdID0gew0KKyAgREJJTkZPVEJMKG5k YmluZm9fVEFCTEVTKSwNCisgIERCSU5GT1RCTChuZGJpbmZvX0NPTFVNTlMpLA0K KyAgREJJTkZPVEJMKG5kYmluZm9fTUVNVVNBR0UpLA0KKyAgREJJTkZPVEJMKG5k YmluZm9fTE9HREVTVElOQVRJT04pLA0KKyAgREJJTkZPVEJMKG5kYmluZm9fQkFD S1VQX1JFQ09SRFMpLA0KKyAgREJJTkZPVEJMKG5kYmluZm9fQkFDS1VQX1BBUkFN RVRFUlMpLA0KKyAgREJJTkZPVEJMKG5kYmluZm9fUE9PTFMpLA0KKyAgREJJTkZP VEJMKG5kYmluZm9fVEVTVCksDQorfTsNCisNCitzdGF0aWMgaW50IG51bWJlcl9u ZGJpbmZvX3RhYmxlcyA9DQorICBzaXplb2YobmRiaW5mb190YWJsZXMpIC8gc2l6 ZW9mKG5kYmluZm9fdGFibGVzWzBdKTsNCisNCisNCitpbnQgTmRiaW5mbzo6Z2V0 TnVtVGFibGVzKCl7DQorICByZXR1cm4gbnVtYmVyX25kYmluZm9fdGFibGVzOw0K K30NCisNCitjb25zdCBOZGJpbmZvOjpUYWJsZSYgTmRiaW5mbzo6Z2V0VGFibGUo aW50IGkpDQorew0KKyAgYXNzZXJ0KGkgPj0gMCAmJiBpIDwgbnVtYmVyX25kYmlu Zm9fdGFibGVzKTsNCisgIHJldHVybiAqbmRiaW5mb190YWJsZXNbaV07DQorfQ0K Kw0KK2NvbnN0IE5kYmluZm86OlRhYmxlJiBOZGJpbmZvOjpnZXRUYWJsZShVaW50 MzIgaSkNCit7DQorICByZXR1cm4gZ2V0VGFibGUoKGludClpKTsNCit9DQorDQor aW50DQorTmRiaW5mbzo6Y3JlYXRlX3NxbChjb25zdCBOZGJpbmZvOjpUYWJsZSYg dGFiLA0KKyAgICAgICAgICAgICAgICAgICAgY2hhciogc3FsLCBpbnQgbGVuLA0K KyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGluZV9zZXBhcmF0b3Ip DQorew0KKyAgbXlfc25wcmludGYoc3FsLGxlbiwiQ1JFQVRFIFRBQkxFIGAlc2Ag KCIsIHRhYi5tLm5hbWUpOw0KKw0KKyAgbGVuLT1zdHJsZW4oc3FsKTsNCisgIHNx bCs9c3RybGVuKHNxbCk7DQorICBpZihsZW48MCkNCisgICAgcmV0dXJuIEVOT01F TTsNCisNCisgIGZvcihpbnQgaSA9IDA7IGkgPCB0YWIubS5uY29sczsgaSsrKQ0K KyAgew0KKyAgICBteV9zbnByaW50ZihzcWwsIGxlbiwgIiVzXHRgJXNgICVzLCIs DQorICAgICAgICAgICAgICAgIGxpbmVfc2VwYXJhdG9yLCB0YWIuY29sW2ldLm5h bWUsDQorICAgICAgICAgICAgICAgIGNvbHR5cGVfdG9fc3RyaW5nKHRhYi5jb2xb aV0uY29sdHlwZSkpOw0KKyAgICBsZW4tPXN0cmxlbihzcWwpOw0KKyAgICBzcWwr PXN0cmxlbihzcWwpOw0KKyAgICBpZihsZW48MCkNCisgICAgICByZXR1cm4gRU5P TUVNOw0KKyAgfQ0KKyAgKigtLXNxbCk9J1wwJzsNCisgIG15X3NucHJpbnRmKHNx bCxsZW4sIiVzKSBFTkdJTkU9TkRCSU5GTzsiLCBsaW5lX3NlcGFyYXRvcik7DQor ICBsZW4tPXN0cmxlbihzcWwpOw0KKyAgc3FsKz1zdHJsZW4oc3FsKTsNCisgIGlm KGxlbjwwKQ0KKyAgICByZXR1cm4gRU5PTUVNOw0KKw0KKyAgcmV0dXJuIDA7DQor fQ0KKw0KK2NvbnN0IGNoYXIqDQorTmRiaW5mbzo6Y29sdHlwZV90b19zdHJpbmco Q29sdW1uVHlwZSBjb2x0eXBlKSB7DQorICBzdGF0aWMgY29uc3QgY2hhciogdHlw ZV9zdHJpbmdbXT0geyJOT05FIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlZBUkNIQVIoNTEyKSIsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJJTlQgVU5TSUdORUQiDQorICB9Ow0KKw0KKyAg aWYoY29sdHlwZT4zKQ0KKyAgICBjb2x0eXBlPSAoQ29sdW1uVHlwZSkwOw0KKw0K KyAgcmV0dXJuIHR5cGVfc3RyaW5nW2NvbHR5cGVdOw0KK30NCisNCisNCg0KPT09 IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5o cHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmluZm8uaHBw CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvdm0vTmRiaW5mby5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAw MA0KQEAgLTAsMCArMSwxNTkgQEANCisvKg0KKyAgIENvcHlyaWdodCAoQykgMjAw OSBTdW4gTWljcm9zeXN0ZW1zIEluYy4NCisgICBBbGwgcmlnaHRzIHJlc2VydmVk LiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLg0KKw0KKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UuDQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YNCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQ0KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlDQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVT QQ0KKyovDQorDQorI2lmbmRlZiBLRVJORUxfTkRCSU5GT19IUFANCisjZGVmaW5l IEtFUk5FTF9OREJJTkZPX0hQUA0KKw0KKyNpbmNsdWRlIDxzaWduYWxkYXRhL0Ri aW5mb1NjYW4uaHBwPg0KKw0KK2NsYXNzIE5kYmluZm8gew0KK3B1YmxpYzoNCisN CisgIGVudW0gQ29sdW1uVHlwZSB7DQorICAgIFN0cmluZyA9IDEsDQorICAgIE51 bWJlciA9IDINCisgIH07DQorDQorICBzdHJ1Y3QgQ29sdW1uIHsNCisgICAgY2hh ciBuYW1lWzUwXTsNCisgICAgQ29sdW1uVHlwZSBjb2x0eXBlOw0KKyAgfTsNCisN CisgIHN0YXRpYyBjb25zdCBjaGFyKiBjb2x0eXBlX3RvX3N0cmluZyhDb2x1bW5U eXBlIGNvbHR5cGUpOw0KKw0KKyAgZW51bSBUYWJsZUlkIHsNCisgICAgVEFCTEVT X1RBQkxFSUQgPSAgICAgICAgICAgICAwLA0KKyAgICBDT0xVTU5TX1RBQkxFSUQg PSAgICAgICAgICAgIDEsDQorICAgIE1FTVVTQUdFX1RBQkxFSUQgPSAgICAgICAg ICAgMiwNCisgICAgTE9HREVTVElOQVRJT05fVEFCTEVJRCA9ICAgICAzLA0KKyAg ICBCQUNLVVBfUkVDT1JEU19UQUJMRUlEID0gICAgIDQsDQorICAgIEJBQ0tVUF9Q QVJBTUVURVJTX1RBQkxFSUQgPSAgNSwNCisgICAgUE9PTFNfVEFCTEVJRCA9ICAg ICAgICAgICAgICA2LA0KKyAgICBURVNUX1RBQkxFSUQgPSAgICAgICAgICAgICAg IDcNCisgIH07DQorDQorICBzdHJ1Y3QgVGFibGUgew0KKyAgICBzdHJ1Y3QgTWVt YmVycyB7DQorICAgICAgY2hhciBuYW1lWzUwXTsNCisgICAgICBpbnQgbmNvbHM7 DQorICAgICAgaW50IGZsYWdzOw0KKyAgICB9IG07DQorICAgIENvbHVtbiBjb2xb MV07DQorDQorICAgIGludCBjb2x1bW5zKHZvaWQpIGNvbnN0IHsNCisgICAgICBy ZXR1cm4gbS5uY29sczsNCisgICAgfQ0KKyAgfTsNCisgIHN0YXRpYyBpbnQgZ2V0 TnVtVGFibGVzKCk7DQorICBzdGF0aWMgY29uc3QgVGFibGUmIGdldFRhYmxlKGlu dCBpKTsNCisgIHN0YXRpYyBjb25zdCBUYWJsZSYgZ2V0VGFibGUoVWludDMyIGkp Ow0KKyAgc3RhdGljIGludCBjcmVhdGVfc3FsKGNvbnN0IFRhYmxlJiB0LCBjaGFy KiBzcWwsIGludCBsZW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogbGluZV9zZXBhcmF0b3IgPSAiXG4iKTsNCisNCisgIGNsYXNzIFJvdyB7 DQorICAgIGZyaWVuZCBjbGFzcyBTaW11bGF0ZWRCbG9jazsNCisgICAgVWludDMy KiBzdGFydDsgICAgICAvLyBTdGFydCBvZiByb3cgYnVmZmVyDQorICAgIFVpbnQz MiogY3VycjsgICAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiBpbiByb3cgYnVmZmVy DQorICAgIFVpbnQzMiogZW5kOyAgICAgICAgLy8gRW5kIG9mIGJ1ZmZlcg0KKyAg ICBpbnQgY29sX2NvdW50ZXI7ICAgIC8vIEN1cnJlbnQgY29sdW1uIGNvdW50ZXIN CisgICAgRGJpbmZvU2NhbiYgbV9yZXE7ICAvLyBUaGUgc2NhbiBwYXJhbWV0ZXJz DQorICAgIFJvdygpOyAgICAgICAgICAgICAgLy8gTm90IGltcGwNCisgICAgUm93 KGNvbnN0IFJvdyYpOyAgICAvLyBOb3QgaW1wbA0KKyAgcHVibGljOg0KKw0KKyAg ICBSb3coY2xhc3MgU2lnbmFsKiBzaWduYWwsIERiaW5mb1NjYW5SZXEmIHJlcSk7 DQorDQorICAgIFVpbnQzMiBnZXRMZW5ndGgodm9pZCkgY29uc3Qgew0KKyAgICAg IHJldHVybiAoVWludDMyKShjdXJyIC0gc3RhcnQpOw0KKyAgICB9DQorDQorICAg IFVpbnQzMiogZ2V0RGF0YVB0cigpIGNvbnN0IHsNCisgICAgICByZXR1cm4gc3Rh cnQ7DQorICAgIH0NCisNCisgICAgdm9pZCB3cml0ZV9zdHJpbmcoY29uc3QgY2hh ciogY29sKTsNCisgICAgdm9pZCB3cml0ZV91aW50MzIoVWludDMyIHZhbHVlKTsN CisNCisgICAgaW50IGNvbHVtbnModm9pZCkgY29uc3Qgew0KKyAgICAgIHJldHVy biBjb2xfY291bnRlcjsNCisgICAgfQ0KKw0KKyAgcHJpdmF0ZToNCisgICAgYm9v bCBjaGVja19idWZmZXJfc3BhY2UoY2xhc3MgQXR0cmlidXRlSGVhZGVyJiBhaCkg Y29uc3Q7DQorICAgIHZvaWQgY2hlY2tfYXR0cmlidXRlX3R5cGUoY2xhc3MgQXR0 cmlidXRlSGVhZGVyJiBhaCwgQ29sdW1uVHlwZSkgY29uc3Q7DQorICB9Ow0KKw0K KyAgc3RydWN0IFNjYW5DdXJzb3INCisgIHsNCisgICAgVWludDMyIHNlbmRlclJl ZjsNCisgICAgVWludDMyIHNhdmVTZW5kZXJSZWY7DQorICAgIFVpbnQzMiBjdXJy UmVmOyAvLyBUaGUgY3VycmVudCBub2RlLCBibG9jayBhbmQgaW5zdGFuY2UNCisg ICAgVWludDMyIHNhdmVDdXJyUmVmOw0KKyAgICAvKioNCisgICAgICogRmxhZ3MN CisgICAgICoNCisgICAgIG0gPSBNb3JlIGRhdGEgICAgICAgICAtIDEgIEJpdCAx DQorDQorICAgICAgICAgICAgICAgMTExMTExMTExMTIyMjIyMjIyMjIzMw0KKyAg ICAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCisgICAgIG0NCisg ICAgKi8NCisgICAgVWludDMyIGZsYWdzOw0KKyAgICBVaW50MzIgZGF0YVs0XTsg IC8vIEN1cnNvciBkYXRhDQorDQorICAgIFVpbnQzMiB0b3RhbFJvd3M7IC8vIE1B U1YgaG1tPyBJcyBpdCByZWFsbHkgdXNlZC4uLg0KKyAgICBVaW50MzIgdG90YWxC eXRlczsNCisgICAgU1RBVElDX0NPTlNUKCBMZW5ndGggPSAxMCApOw0KKyAgICAN CisgICAgU1RBVElDX0NPTlNUKCBNT1JFREFUQV9TSElGVCA9IDAgKTsNCisgICAg U1RBVElDX0NPTlNUKCBNT1JFREFUQV9NQVNLID0gMSApOw0KKw0KKyAgICBzdGF0 aWMgYm9vbCBnZXRIYXNNb3JlRGF0YShjb25zdCBVaW50UiAmIGZsYWdzKXsNCisg ICAgICByZXR1cm4gKGJvb2wpKChmbGFncyA+PiBNT1JFREFUQV9TSElGVCkgJiBN T1JFREFUQV9NQVNLKTsNCisgICAgfQ0KKyAgICBzdGF0aWMgdm9pZCBzZXRIYXNN b3JlRGF0YShVaW50UiAmIGZsYWdzLCBib29sIHZhbHVlKXsNCisgICAgICBmbGFn cyA9IChmbGFncyAmIH4oTU9SRURBVEFfTUFTSyA8PCBNT1JFREFUQV9TSElGVCkp IHwNCisgICAgICAgICAgICAgICgodmFsdWUgJiBNT1JFREFUQV9NQVNLKSA8PCBN T1JFREFUQV9TSElGVCk7DQorICAgIH0NCisgIH07DQorDQorICBjbGFzcyBSYXRl bGltaXQgew0KKyAgICBmcmllbmQgY2xhc3MgU2ltdWxhdGVkQmxvY2s7DQorICAg IFVpbnQzMiByb3dzOw0KKyAgICBVaW50MzIgYnl0ZXM7DQorICAgIFJhdGVsaW1p dChjb25zdCBSYXRlbGltaXQmKTsvLyBOb3QgaW1wbA0KKyAgcHVibGljOg0KKyAg ICBSYXRlbGltaXQoKSA6DQorICAgICAgcm93cygwKSwNCisgICAgICBieXRlcygw KXsNCisgICAgfQ0KKw0KKyAgICBib29sIG5lZWRfYnJlYWsoY29uc3QgRGJpbmZv U2NhbiYgc2NhbikgY29uc3Qgew0KKyAgICAgIC8vIEF1dG9tYXRpY2FsbHkgbGlt aXQgdGhlIG1heFJvd3MgdmFsdWUNCisgICAgICBVaW50MzIgbWF4Um93cyA9IG1p bihzY2FuLm1heFJvd3MgPyBzY2FuLm1heFJvd3MgOiAyNTYsIDI1Nik7DQorDQor ICAgICAgaWYgKG1heFJvd3MgIT0gMCAmJiByb3dzID49IG1heFJvd3MpDQorICAg ICAgICByZXR1cm4gdHJ1ZTsgLy8gTW9yZSB0aGFuIG1heCByb3dzIGFscmVhZHkg c2VudA0KKyAgICAgIGlmIChzY2FuLm1heEJ5dGVzICE9IDAgJiYgIGJ5dGVzID49 IHNjYW4ubWF4Qnl0ZXMpDQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTW9yZSB0 aGFuIG1heCBieXRlcyBhbHJlYWR5IHNlbnQNCisgICAgICByZXR1cm4gZmFsc2U7 DQorICAgIH0NCisgIH07DQorfTsNCisNCisjZW5kaWYNCg0KPT09IG1vZGlmaWVk IGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2su Y3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRC bG9jay5jcHAJMjAwOS0wNi0zMCAxODo0OTo1MyArMDAwMA0KKysrIGIvc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5jcHAJMjAwOS0wNy0w MyAxMToxMzo1OSArMDAwMA0KQEAgLTU0LDYgKzU0LDggQEANCiAjaW5jbHVkZSA8 c2lnbmFsZGF0YS9DYWxsYmFja1NpZ25hbC5ocHA+DQogI2luY2x1ZGUgIkxvbmdT aWduYWxJbXBsLmhwcCINCiANCisjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lk QUkuaHBwPg0KKw0KICNpbmNsdWRlIDxFdmVudExvZ2dlci5ocHA+DQogZXh0ZXJu IEV2ZW50TG9nZ2VyICogZ19ldmVudExvZ2dlcjsNCiANCkBAIC0zNjYzLDMgKzM2 NjUsOTYgQEAgU2ltdWxhdGVkQmxvY2s6OmRlYnVnT3V0VGFnKGNoYXIgKmJ1Ziwg aQ0KICAgcmV0dXJuIGJ1ZjsNCiB9DQogI2VuZGlmDQorDQordm9pZA0KK1NpbXVs YXRlZEJsb2NrOjpuZGJpbmZvX3NlbmRfcm93KFNpZ25hbCogc2lnbmFsLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERiaW5mb1NjYW5S ZXEmIHJlcSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBOZGJpbmZvOjpSb3cmIHJvdywNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOZGJpbmZvOjpSYXRlbGltaXQmIHJsKSBjb25zdA0KK3sNCisgIC8v IENoZWNrIGNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbnMgYWdhaW5zdCB0YWJsZQ0K KyAgYXNzZXJ0KHJvdy5jb2x1bW5zKCkgPT0gTmRiaW5mbzo6Z2V0VGFibGUocmVx LnRhYmxlSWQpLmNvbHVtbnMoKSk7DQorDQorICBUcmFuc0lkQUkgKnRpZGFpPSAo VHJhbnNJZEFJKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICB0aWRhaS0+ Y29ubmVjdFB0cj0gcmVxLnJlc3VsdERhdGE7DQorICB0aWRhaS0+dHJhbnNJZFsw XT0gcmVxLnRyYW5zSWRbMF07DQorICB0aWRhaS0+dHJhbnNJZFsxXT0gcmVxLnRy YW5zSWRbMV07DQorDQorICBMaW5lYXJTZWN0aW9uUHRyIHB0clszXTsNCisgIHB0 clswXS5wID0gcm93LmdldERhdGFQdHIoKTsNCisgIHB0clswXS5zeiA9IHJvdy5n ZXRMZW5ndGgoKTsNCisNCisgIHJsLnJvd3MrKzsNCisgIHJsLmJ5dGVzICs9IHJv dy5nZXRMZW5ndGgoKTsNCisNCisgIHNlbmRTaWduYWwocmVxLnJlc3VsdFJlZiwg R1NOX0RCSU5GT19UUkFOU0lEX0FJLA0KKyAgICAgICAgICAgICBzaWduYWwsIFRy YW5zSWRBSTo6SGVhZGVyTGVuZ3RoLCBKQkIsIHB0ciwgMSk7DQorfQ0KKw0KK3Zv aWQNCitTaW11bGF0ZWRCbG9jazo6bmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoU2ln bmFsKiBzaWduYWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGJpbmZvU2NhblJlcSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYmluZm86OlJhdGVsaW1pdCYgcmws DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMy IGRhdGExLCBVaW50MzIgZGF0YTIsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVWludDMyIGRhdGEzLCBVaW50MzIgZGF0YTQpIGNvbnN0 DQorew0KKyAgRGJpbmZvU2NhbkNvbmYqIGNvbmY9IChEYmluZm9TY2FuQ29uZiop c2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAgY29uc3QgVWludDMyIHNpZ25h bF9sZW5ndGggPSBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGggKyByZXEuY3Vy c29yX3N6Ow0KKyAgTUVNQ09QWV9OT19XT1JEUyhjb25mLCAmcmVxLCBzaWduYWxf bGVuZ3RoKTsNCisNCisgIGNvbmYtPnJldHVybmVkUm93cyA9IHJsLnJvd3M7DQor DQorICAvLyBVcGRhdGUgdGhlIGN1cnNvciB3aXRoIGN1cnJlbnQgaXRlbSBudW1i ZXINCisgIE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJp bmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHJTZW5kKGNv bmYpOw0KKw0KKyAgY3Vyc29yLT5kYXRhWzBdID0gZGF0YTE7DQorICBjdXJzb3It PmRhdGFbMV0gPSBkYXRhMjsNCisgIGN1cnNvci0+ZGF0YVsyXSA9IGRhdGEzOw0K KyAgY3Vyc29yLT5kYXRhWzNdID0gZGF0YTQ7DQorDQorICAvLyBJbmNyZWFzZSBu dW1iZXIgb2Ygcm93cyBhbmQgYnl0ZXMgc2VudCB0byBmYXINCisgIGN1cnNvci0+ dG90YWxSb3dzICs9IHJsLnJvd3M7DQorICBjdXJzb3ItPnRvdGFsQnl0ZXMgKz0g cmwuYnl0ZXM7DQorDQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yOjpzZXRIYXNNb3Jl RGF0YShjdXJzb3ItPmZsYWdzLCB0cnVlKTsNCisNCisgIHNlbmRTaWduYWwoY3Vy c29yLT5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25hbCwNCisg ICAgICAgICAgICAgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCit9DQorDQordm9pZA0K K1NpbXVsYXRlZEJsb2NrOjpuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKFNpZ25hbCog c2lnbmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERiaW5mb1NjYW5SZXEmIHJlcSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBOZGJpbmZvOjpSYXRlbGltaXQmIHJsKSBjb25z dA0KK3sNCisgIERiaW5mb1NjYW5Db25mKiBjb25mPSAoRGJpbmZvU2NhbkNvbmYq KXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCisgIGNvbnN0IFVpbnQzMiBzaWdu YWxfbGVuZ3RoID0gRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoICsgcmVxLmN1 cnNvcl9zejsNCisgIFVpbnQzMiBzZW5kZXJfcmVmID0gcmVxLnJlc3VsdFJlZjsN CisgIE1FTUNPUFlfTk9fV09SRFMoY29uZiwgJnJlcSwgc2lnbmFsX2xlbmd0aCk7 DQorDQorICBjb25mLT5yZXR1cm5lZFJvd3MgPSBybC5yb3dzOw0KKw0KKyAgaWYg KHJlcS5jdXJzb3Jfc3opDQorICB7DQorICAgIGphbSgpOw0KKyAgICAvLyBVcGRh dGUgdGhlIGN1cnNvciB3aXRoIGN1cnJlbnQgaXRlbSBudW1iZXINCisgICAgTmRi aW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgICAoTmRiaW5mbzo6U2Nh bkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyU2VuZChjb25mKTsNCisN CisgICAgLy8gUmVzZXQgYWxsIGRhdGEgaG9sZGVycw0KKyAgICBtZW1zZXQoY3Vy c29yLT5kYXRhLCAwLCBzaXplb2YoY3Vyc29yLT5kYXRhKSk7DQorDQorICAgIC8v IEluY3JlYXNlIG51bWJlciBvZiByb3dzIGFuZCBieXRlcyBzZW50IHRvIGZhcg0K KyAgICBjdXJzb3ItPnRvdGFsUm93cyArPSBybC5yb3dzOw0KKyAgICBjdXJzb3It PnRvdGFsQnl0ZXMgKz0gcmwuYnl0ZXM7DQorDQorICAgIE5kYmluZm86OlNjYW5D dXJzb3I6OnNldEhhc01vcmVEYXRhKGN1cnNvci0+ZmxhZ3MsIGZhbHNlKTsNCisN CisgICAgc2VuZGVyX3JlZiA9IGN1cnNvci0+c2VuZGVyUmVmOw0KKw0KKyAgfQ0K KyAgc2VuZFNpZ25hbChzZW5kZXJfcmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBz aWduYWwsDQorICAgICAgICAgICAgIHNpZ25hbF9sZW5ndGgsIEpCQik7DQorfQ0K Kw0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92 bS9TaW11bGF0ZWRCbG9jay5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2Vy bmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmhwcAkyMDA5LTA2LTMwIDE4OjQ5OjUzICsw MDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJs b2NrLmhwcAkyMDA5LTA3LTAzIDExOjEzOjU5ICswMDAwDQpAQCAtNTgsNiArNTgs OCBAQA0KICNpbmNsdWRlICJuZGJkX21hbGxvY19pbXBsLmhwcCINCiAjaW5jbHVk ZSA8YmxvY2tzL3JlY29yZF90eXBlcy5ocHA+DQogDQorI2luY2x1ZGUgIk5kYmlu Zm8uaHBwIg0KKw0KICNpZmRlZiBWTV9UUkFDRQ0KICNkZWZpbmUgRCh4KSBcDQog ICBkbyB7IFwNCkBAIC0xMDA2LDYgKzEwMDgsMjEgQEAgcHVibGljOg0KICAgdm9p ZCBkZWJ1Z091dFVubG9jaygpIHsgZ2xvYmFsU2lnbmFsTG9nZ2Vycy51bmxvY2so KTsgfQ0KICAgY29uc3QgY2hhciogZGVidWdPdXRUYWcoY2hhciogYnVmLCBpbnQg bGluZSk7DQogI2VuZGlmDQorDQorICB2b2lkIG5kYmluZm9fc2VuZF9yb3coU2ln bmFsKiBzaWduYWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGJp bmZvU2NhblJlcSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE5kYmluZm86OlJvdyYgcm93LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5k YmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0Ow0KKw0KKyAgdm9pZCBuZGJpbmZv X3NlbmRfc2Nhbl9icmVhayhTaWduYWwqIHNpZ25hbCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGJpbmZvU2NhblJlcSYgcmVxLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJpbmZvOjpSYXRlbGltaXQm IHJsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgZGF0 YTEsIFVpbnQzMiBkYXRhMiA9IDAsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVpbnQzMiBkYXRhMyA9IDAsIFVpbnQzMiBkYXRhNCA9IDApIGNvbnN0 Ow0KKw0KKyAgdm9pZCBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKFNpZ25hbCogc2ln bmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERiaW5mb1NjYW5S ZXEmIHJlcSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBO ZGJpbmZvOjpSYXRlbGltaXQmIHJsKSBjb25zdDsNCiB9Ow0KIA0KIC8vIG91dHNp ZGUgYmxvY2tzIGUuZy4gd2l0aGluIGEgc3RydWN0DQoNCj09PSBtb2RpZmllZCBm aWxlICdzdG9yYWdlL25kYi9zcmMvbWdtc3J2L01ha2VmaWxlLmFtJw0KLS0tIGEv c3RvcmFnZS9uZGIvc3JjL21nbXNydi9NYWtlZmlsZS5hbQkyMDA5LTA1LTI3IDE1 OjIxOjQ1ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbWdtc3J2L01ha2Vm aWxlLmFtCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0zMCw3ICszMCw2 IEBAIG5kYl9tZ21kX1NPVVJDRVMgPSBcDQogCUNvbmZpZ0luZm8uY3BwIFwNCiAJ SW5pdENvbmZpZ0ZpbGVQYXJzZXIuY3BwIFwNCiAJQ29uZmlnLmNwcCBcDQotCW1n bV9uZGJpbmZvLmNwcCBcDQogCUNvbmZpZ01hbmFnZXIuY3BwIFwNCiAJRGlySXRl cmF0b3IuY3BwDQogDQoNCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3Ny Yy9tZ21zcnYvbWdtX25kYmluZm8uY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3Jj L21nbXNydi9tZ21fbmRiaW5mby5jcHAJMjAwOC0xMC0wNiAwNjo1MzowNCArMDAw MA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL21nbXNydi9tZ21fbmRiaW5mby5jcHAJ MTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0KQEAgLTEsMTQgKzAsMCBAQA0KLQ0K LSNpbmNsdWRlIDxCYXNlU3RyaW5nLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5o Pg0KLQ0KLWludCBwcmludF9uZGJpbmZvX3RhYmxlX21nbShzdHJ1Y3QgbmRiaW5m b190YWJsZSogdCwgQmFzZVN0cmluZyAmb3V0KQ0KLXsNCi0gIGludCBpOw0KLSAg b3V0LmFwcGZtdCgiJWRcbiIsdC0+bmNvbHMpOw0KLQ0KLSAgZm9yKGk9MDtpPHQt Pm5jb2xzO2krKykNCi0gICAgb3V0LmFwcGZtdCgiJXNcbiIsdC0+Y29sW2ldLm5h bWUpOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAn c3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmNwcCcNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5jcHAJMjAwOS0wNi0yNCAwODozOTow OSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmNw cAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMjY3LDEzICsyNjcsMTcg QEAgYm9vbCBOZGJJbmZvOjpsb2FkX3RhYmxlcygpDQogfQ0KIA0KIGludCBOZGJJ bmZvOjpjcmVhdGVTY2FuT3BlcmF0aW9uKGNvbnN0IEluZm9UYWJsZSogdGFibGUs DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRiSW5mb1NjYW5P cGVyYXRpb24qKiByZXRfc2Nhbl9vcCkNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOZGJJbmZvU2Nhbk9wZXJhdGlvbioqIHJldF9zY2FuX29wLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBtYXhfcm93 cywgVWludDMyIG1heF9ieXRlcykNCiB7DQotICBOZGJJbmZvU2Nhbk9wZXJhdGlv biogc2Nhbl9vcCA9IG5ldyBOZGJJbmZvU2Nhbk9wZXJhdGlvbihtX2Nvbm5lY3Rp b24sIHRhYmxlKTsNCisgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuX29wID0g bmV3IE5kYkluZm9TY2FuT3BlcmF0aW9uKG1fY29ubmVjdGlvbiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRhYmxlLCBtYXhfcm93cywNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9ieXRlcyk7DQog ICBpZiAoIXNjYW5fb3ApDQogICAgIHJldHVybiBFUlJfT3V0T2ZNZW1vcnk7DQot DQotICBpZiAoIXNjYW5fb3AtPmluaXQoKSkNCisgIC8vIEdsb2JhbCBpZCBjb3Vu dGVyLCBub3QgY3JpdGljYWwgaWYgeW91IGdldCBzYW1lIGlkIG9uIHR3byBpbnN0 YW5jZXMNCisgIC8vIHNpbmNlIHJlZmVyZW5jZSBpcyBhbHNvIHBhcnQgb2YgdGhl IHVuaXF1ZSBpZGVudGlmaWVyLg0KKyAgaWYgKCFzY2FuX29wLT5pbml0KG1faWRf Y291bnRlcisrKSkNCiAgIHsNCiAgICAgZGVsZXRlIHNjYW5fb3A7DQogICAgIHJl dHVybiBFUlJfQ2x1c3RlckZhaWx1cmU7DQpAQCAtMjg0LDcgKzI4OCw3IEBAIGlu dCBOZGJJbmZvOjpjcmVhdGVTY2FuT3BlcmF0aW9uKGNvbnN0IEkNCiAgIHJldHVy biAwOw0KIH0NCiANCi12b2lkIE5kYkluZm86OnJlbGVhc2VTY2FuT3BlcmF0aW9u KE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuX29wKQ0KK3ZvaWQgTmRiSW5mbzo6 cmVsZWFzZVNjYW5PcGVyYXRpb24oTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5f b3ApIGNvbnN0DQogew0KICAgZGVsZXRlIHNjYW5fb3A7DQogfQ0KQEAgLTI5Nywx MSArMzAxLDkgQEAgdm9pZCBOZGJJbmZvOjpmbHVzaF90YWJsZXMoKQ0KICAgYXNz ZXJ0KG1fdGFibGVzLmVudHJpZXMoKSA9PSBOVU1fSEFSRENPREVEX1RBQkxFUyk7 DQogfQ0KIA0KLWludA0KLU5kYkluZm86Om9wZW5UYWJsZShjb25zdCBjaGFyKiB0 YWJsZV9uYW1lLA0KLSAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJ bmZvVGFibGUqKiB0YWJsZV9jb3B5KQ0KK2Jvb2wNCitOZGJJbmZvOjpjaGVja190 YWJsZXMoKQ0KIHsNCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9tdXRleCk7DQog ICBpZiAobV9jb25uZWN0aW9uLT5nZXRfY29ubmVjdF9jb3VudCgpICE9IG1fY29u bmVjdF9jb3VudCkNCiAgIHsNCiAgICAgLy8gQ29ubmVjdCBjb3VudCBoYXMgY2hh bmdlZCAtPiBmbHVzaCB0aGUgY2FjaGVkIHRhYmxlIGRlZmluaXRpb25zDQpAQCAt MzEzLDEyICszMTUsMjUgQEAgTmRiSW5mbzo6b3BlblRhYmxlKGNvbnN0IGNoYXIq IHRhYmxlX25hbQ0KICAgICAvLyBmbHVzaGVkLCB0cnkgdG8gbG9hZCBpdA0KICAg ICBpZiAoIWxvYWRfdGFibGVzKCkpDQogICAgIHsNCi0gICAgICBwdGhyZWFkX211 dGV4X3VubG9jaygmbV9tdXRleCk7DQotICAgICAgcmV0dXJuIEVSUl9DbHVzdGVy RmFpbHVyZTsNCisgICAgICByZXR1cm4gZmFsc2U7DQogICAgIH0NCiAgIH0NCiAg IC8vIE1ha2Ugc3VyZSB0aGF0IHNvbWUgZHluYW1pYyB0YWJsZXMgaGF2ZSBiZWVu IGxvYWRlZA0KICAgYXNzZXJ0KG1fdGFibGVzLmVudHJpZXMoKSA+IE5VTV9IQVJE Q09ERURfVEFCTEVTKTsNCisgIHJldHVybiB0cnVlOw0KK30NCisNCisNCitpbnQN CitOZGJJbmZvOjpvcGVuVGFibGUoY29uc3QgY2hhciogdGFibGVfbmFtZSwNCisg ICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiogdGFi bGVfY29weSkNCit7DQorICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0ZXgpOw0K Kw0KKyAgaWYgKCFjaGVja190YWJsZXMoKSl7DQorICAgIHB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZtX211dGV4KTsNCisgICAgcmV0dXJuIEVSUl9DbHVzdGVyRmFpbHVy ZTsNCisgIH0NCiANCiAgIEluZm9UYWJsZSogdGFiOw0KICAgaWYgKCFtX3RhYmxl cy5zZWFyY2godGFibGVfbmFtZSwgJnRhYikpDQpAQCAtMzM1LDYgKzM1MCw0MiBA QCBOZGJJbmZvOjpvcGVuVGFibGUoY29uc3QgY2hhciogdGFibGVfbmFtDQogICBy ZXR1cm4gMDsNCiB9DQogDQoraW50DQorTmRiSW5mbzo6b3BlblRhYmxlKFVpbnQz MiB0YWJsZUlkLA0KKyAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJ bmZvVGFibGUqKiB0YWJsZV9jb3B5KQ0KK3sNCisgIHB0aHJlYWRfbXV0ZXhfbG9j aygmbV9tdXRleCk7DQorDQorICBpZiAoIWNoZWNrX3RhYmxlcygpKXsNCisgICAg cHRocmVhZF9tdXRleF91bmxvY2soJm1fbXV0ZXgpOw0KKyAgICByZXR1cm4gRVJS X0NsdXN0ZXJGYWlsdXJlOw0KKyAgfQ0KKw0KKyAgLy8gRmluZCB0aGUgdGFibGUg d2l0aCBjb3JyZWN0IGlkDQorICBjb25zdCBJbmZvVGFibGUqIHRhYmxlID0gTlVM TDsNCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90YWJsZXMuZW50cmllcygp OyBpKyspDQorICB7DQorICAgIGNvbnN0IEluZm9UYWJsZSogdG1wID0gbV90YWJs ZXMudmFsdWUoaSk7DQorICAgIGlmICh0bXAtPm1fdGFibGVfaWQgPT0gdGFibGVJ ZCkNCisgICAgew0KKyAgICAgIHRhYmxlID0gdG1wOw0KKyAgICAgIGJyZWFrOw0K KyAgICB9DQorICB9DQorICBpZiAodGFibGUgPT0gTlVMTCkNCisgIHsNCisgICAg Ly8gTm8gc3VjaCB0YWJsZSBleGlzdGVkDQorICAgIHB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZtX211dGV4KTsNCisgICAgcmV0dXJuIEVSUl9Ob1N1Y2hUYWJsZTsNCisg IH0NCisNCisgIC8vIFJldHVybiBhIF9jb3B5XyBvZiB0aGUgdGFibGUNCisgICp0 YWJsZV9jb3B5ID0gbmV3IEluZm9UYWJsZSgqdGFibGUpOw0KKw0KKyAgcHRocmVh ZF9tdXRleF91bmxvY2soJm1fbXV0ZXgpOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0K IHZvaWQgTmRiSW5mbzo6Y2xvc2VUYWJsZShjb25zdCBJbmZvVGFibGUqIHRhYmxl KSB7DQogICBkZWxldGUgdGFibGU7DQogfQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAn c3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmhwcCcNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5ocHAJMjAwOS0wNi0yNCAwODozOTow OSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmhw cAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtOTMsMTEgKzkzLDEzIEBA IHB1YmxpYzoNCiAgIHZvaWQgZmx1c2hfdGFibGVzKCk7DQogDQogICBpbnQgb3Bl blRhYmxlKGNvbnN0IGNoYXIqIHRhYmxlX25hbWUsIGNvbnN0IEluZm9UYWJsZSoq KTsNCisgIGludCBvcGVuVGFibGUoVWludDMyIHRhYmxlSWQsIGNvbnN0IEluZm9U YWJsZSoqKTsNCiAgIHZvaWQgY2xvc2VUYWJsZShjb25zdCBJbmZvVGFibGUqIHRh YmxlKTsNCiANCiAgIGludCBjcmVhdGVTY2FuT3BlcmF0aW9uKGNvbnN0IEluZm9U YWJsZSosDQotICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOZGJJbmZv U2Nhbk9wZXJhdGlvbioqKTsNCi0gIHZvaWQgcmVsZWFzZVNjYW5PcGVyYXRpb24o Y2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb24qKTsNCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGNsYXNzIE5kYkluZm9TY2FuT3BlcmF0aW9uKiosDQorICAgICAg ICAgICAgICAgICAgICAgICAgICBVaW50MzIgbWF4X3Jvd3MgPSAyNTYsIFVpbnQz MiBtYXhfYnl0ZXMgPSAwKTsNCisgIHZvaWQgcmVsZWFzZVNjYW5PcGVyYXRpb24o Y2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb24qKSBjb25zdDsNCiANCiBwcml2YXRl Og0KICAgc3RhdGljIGNvbnN0IHNpemVfdCBOVU1fSEFSRENPREVEX1RBQkxFUyA9 IDI7DQpAQCAtMTA5LDEyICsxMTEsMTQgQEAgcHJpdmF0ZToNCiAgIEluZm9UYWJs ZSogbV9jb2x1bW5zX3RhYmxlOw0KICAgQmFzZVN0cmluZyBtX3ByZWZpeDsNCiAg IGJvb2wgbV91c2VfbG93ZXJfY2FzZTsNCisgIFVpbnQzMiBtX2lkX2NvdW50ZXI7 DQogDQogICBib29sIGFkZENvbHVtbihVaW50MzIgdGFibGVJZCwgY29uc3QgSW5m b0NvbHVtbiBhQ29sKTsNCiANCiAgIGJvb2wgbG9hZF9uZGJpbmZvX3RhYmxlcygp Ow0KICAgYm9vbCBsb2FkX2hhcmRjb2RlZF90YWJsZXModm9pZCk7DQogICBib29s IGxvYWRfdGFibGVzKCk7DQorICBib29sIGNoZWNrX3RhYmxlcygpOw0KIA0KICAg QmFzZVN0cmluZyBteXNxbF90YWJsZV9uYW1lKGNvbnN0IGNoYXIqIHRhYmxlX25h bWUpIGNvbnN0Ow0KIA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL25kYmFwaS9OZGJJbmZvU2Nhbk9wZXJhdGlvbi5jcHAnDQotLS0gYS9zdG9y YWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmNwcAkyMDA5 LTA2LTI5IDIwOjU2OjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRi YXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmNwcAkyMDA5LTA3LTAzIDExOjEzOjU5 ICswMDAwDQpAQCAtMjgsMTcgKzI4LDIyIEBADQogI2luY2x1ZGUgIk5kYkFwaVNp Z25hbC5ocHAiDQogDQogTmRiSW5mb1NjYW5PcGVyYXRpb246Ok5kYkluZm9TY2Fu T3BlcmF0aW9uKE5kYl9jbHVzdGVyX2Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE5kYkluZm86OkluZm9UYWJsZSogdGFibGUpIDoNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1Rh YmxlKiB0YWJsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVWludDMyIG1heF9yb3dzLCBVaW50MzIgbWF4X2J5dGVzKSA6DQog ICBtX3N0YXRlKFVuZGVmaW5lZCksDQogICBtX2Nvbm5lY3Rpb24oY29ubmVjdGlv biksDQogICBtX3NpZ25hbF9zZW5kZXIoTlVMTCksDQogICBtX3RhYmxlKHRhYmxl KSwNCi0gIG1fbm9kZV9pZCgwKQ0KKyAgbV9ub2RlX2lkKDApLA0KKyAgbV9tYXhf cm93cyhtYXhfcm93cyksDQorICBtX21heF9ieXRlcyhtYXhfYnl0ZXMpLA0KKyAg bV9yZXN1bHRfZGF0YSgweDM3KSwNCisgIG1fcmVjZWl2ZWRfcm93cygwKQ0KIHsN CiB9DQogDQogYm9vbA0KLU5kYkluZm9TY2FuT3BlcmF0aW9uOjppbml0KHZvaWQp DQorTmRiSW5mb1NjYW5PcGVyYXRpb246OmluaXQoVWludDMyIGlkKQ0KIHsNCiAg IERCVUdfRU5URVIoIk5kYkluZm9TY2Fub3BlcmF0aW9uOjppbml0Iik7DQogICBp ZiAobV9zdGF0ZSAhPSBVbmRlZmluZWQpDQpAQCAtNDgsNiArNTMsMTAgQEAgTmRi SW5mb1NjYW5PcGVyYXRpb246OmluaXQodm9pZCkNCiAgIGlmICghbV9zaWduYWxf c2VuZGVyKQ0KICAgICBEQlVHX1JFVFVSTihmYWxzZSk7DQogDQorICBtX3RyYW5z aWQwID0gaWQ7DQorICBtX3RyYW5zaWQxID0gbV90YWJsZS0+Z2V0VGFibGVJZCgp Ow0KKyAgbV9yZXN1bHRfcmVmID0gbV9zaWduYWxfc2VuZGVyLT5nZXRPd25SZWYo KTsNCisNCiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RhYmxlLT5jb2x1 bW5zKCk7IGkrKykNCiAgICAgbV9yZWNBdHRycy5wdXNoX2JhY2soTlVMTCk7DQog DQpAQCAtMTA3LDMyICsxMTYsMTkgQEAgaW50IE5kYkluZm9TY2FuT3BlcmF0aW9u OjpleGVjdXRlKCkNCiAgIGlmIChtX3N0YXRlICE9IFByZXBhcmVkKQ0KICAgICBE QlVHX1JFVFVSTigtMSk7DQogDQotICBTaW1wbGVTaWduYWwgc3M7DQotICBEYmlu Zm9TY2FuUmVxICogcmVxID0gQ0FTVF9QVFIoRGJpbmZvU2NhblJlcSwgc3MuZ2V0 RGF0YVB0clNlbmQoKSk7DQotICByZXEtPnJlcXVlc3RJbmZvID0gRGJpbmZvU2Nh blJlcTo6QWxsQ29sdW1ucyB8IERiaW5mb1NjYW5SZXE6OlN0YXJ0U2NhbjsNCi0g IHJlcS0+dGFibGVJZCA9IG1fdGFibGUtPmdldFRhYmxlSWQoKTsNCi0gIHJlcS0+ YXBpUmVmID0gbV9zaWduYWxfc2VuZGVyLT5nZXRPd25SZWYoKTsNCi0gIHJlcS0+ YXBpVHhuSWQgPSAzNzsgLy9tX2lkOyAvLyBNQVNWIENhbiBiZSByZW1vdmVkDQot ICByZXEtPnNlbmRlclJlZiA9IG1fc2lnbmFsX3NlbmRlci0+Z2V0T3duUmVmKCk7 DQotICByZXEtPmluc3RhbmNlID0gMDsNCi0gIHJlcS0+Y29sQml0bWFwTG8gPSB+ MDsNCi0gIHJlcS0+Y29sQml0bWFwSGkgPSB+MDsNCi0gIHJlcS0+bWF4Um93cyA9 IDI7DQotICByZXEtPm1heEJ5dGVzID0gMDsNCi0gIHJlcS0+cm93c190b3RhbCA9 IDA7DQotICByZXEtPndvcmRfdG90YWwgPSAwOw0KKyAgYXNzZXJ0KG1fY3Vyc29y LnNpemUoKSA9PSAwKTsNCiANCiAgIG1fc2lnbmFsX3NlbmRlci0+bG9jaygpOw0K LSAgaW50IHJldCA9IHNlbmREQklORk9fU0NBTlJFUShzcywgRGJpbmZvU2NhblJl cTo6U2lnbmFsTGVuZ3RoKTsNCisgIGludCByZXQgPSBzZW5kREJJTkZPX1NDQU5S RVEoKTsNCiAgIG1fc2lnbmFsX3NlbmRlci0+dW5sb2NrKCk7DQogDQotICBtX3N0 YXRlID0gU3RhcnRlZDsNCisgIG1fc3RhdGUgPSBNb3JlRGF0YTsNCiANCiAgIERC VUdfUkVUVVJOKHJldCk7DQogfQ0KIA0KIGludA0KLU5kYkluZm9TY2FuT3BlcmF0 aW9uOjpzZW5kREJJTkZPX1NDQU5SRVEoU2ltcGxlU2lnbmFsICZzcywgVWludDMy IHNpZ25hbF9sZW4pDQorTmRiSW5mb1NjYW5PcGVyYXRpb246OnNlbmREQklORk9f U0NBTlJFUSh2b2lkKQ0KIHsNCiAgIERCVUdfRU5URVIoIk5kYkluZm9TY2FuT3Bl cmF0aW9uOjpzZW5kREJJTkZPX1NDQU5SRVEiKTsNCiANCkBAIC0xNDMsMTMgKzEz OSw0MyBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6c2VuZERCSU5GT19TQ0FOUkVR DQogICAgICAgREJVR19SRVRVUk4oTmRiSW5mbzo6RVJSX0NsdXN0ZXJGYWlsdXJl KTsNCiAgIH0NCiANCisgIFNpbXBsZVNpZ25hbCBzczsNCisgIERiaW5mb1NjYW5S ZXEgKiByZXEgPSBDQVNUX1BUUihEYmluZm9TY2FuUmVxLCBzcy5nZXREYXRhUHRy U2VuZCgpKTsNCisNCisgIC8vIEFQSSBJZGVudGlmaWVycw0KKyAgcmVxLT5yZXN1 bHREYXRhID0gbV9yZXN1bHRfZGF0YTsNCisgIHJlcS0+dHJhbnNJZFswXSA9IG1f dHJhbnNpZDA7DQorICByZXEtPnRyYW5zSWRbMV0gPSBtX3RyYW5zaWQxOw0KKyAg cmVxLT5yZXN1bHRSZWYgPSBtX3Jlc3VsdF9yZWY7DQorDQorICAvLyBTY2FuIHBh cmFtZXRlcnMNCisgIHJlcS0+dGFibGVJZCA9IG1fdGFibGUtPmdldFRhYmxlSWQo KTsNCisgIHJlcS0+Y29sQml0bWFwWzBdID0gfjA7DQorICByZXEtPmNvbEJpdG1h cFsxXSA9IH4wOw0KKyAgcmVxLT5yZXF1ZXN0SW5mbyA9IDA7DQorICByZXEtPm1h eFJvd3MgPSBtX21heF9yb3dzOw0KKyAgcmVxLT5tYXhCeXRlcyA9IG1fbWF4X2J5 dGVzOw0KKw0KKyAgLy8gU2NhbiByZXN1bHQNCisgIHJlcS0+cmV0dXJuZWRSb3dz ID0gMDsNCisNCisgIC8vIEN1cnNvciBkYXRhDQorICBVaW50MzIqIGN1cnNvcl9w dHIgPSBEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHJTZW5kKHJlcSk7DQorICBmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJzb3Iuc2l6ZSgpOyBpKyspDQorICB7 DQorICAgICpjdXJzb3JfcHRyID0gbV9jdXJzb3JbaV07DQorICAgIERCVUdfUFJJ TlQoImluZm8iLCAoImN1cnNvclsldV06IDB4JXgiLCBpLCBtX2N1cnNvcltpXSkp Ow0KKyAgICBjdXJzb3JfcHRyKys7DQorICB9DQorICByZXEtPmN1cnNvcl9zeiA9 IG1fY3Vyc29yLnNpemUoKTsNCisgIG1fY3Vyc29yLmNsZWFyKCk7DQorDQogICBh c3NlcnQobV9ub2RlX2lkKTsNCisgIFVpbnQzMiBsZW4gPSBEYmluZm9TY2FuUmVx OjpTaWduYWxMZW5ndGggKyByZXEtPmN1cnNvcl9zejsNCiAgIGlmIChtX3NpZ25h bF9zZW5kZXItPnNlbmRTaWduYWwobV9ub2RlX2lkLCBzcywgREJJTkZPLA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU05fREJJTkZPX1NDQU5S RVEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbF9s ZW4pICE9IFNFTkRfT0spDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdTTl9EQklORk9fU0NBTlJFUSwgbGVuKSAhPSBTRU5EX09LKQ0KICAgICBE QlVHX1JFVFVSTihOZGJJbmZvOjpFUlJfQ2x1c3RlckZhaWx1cmUpOw0KIA0KLQ0K ICAgREJVR19SRVRVUk4oMCk7DQogfQ0KIA0KQEAgLTE2MSwxNCArMTg3LDE5IEBA IGludCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6cmVjZWl2ZSh2b2lkKQ0KICAgICBj b25zdCBTaW1wbGVTaWduYWwqIHNpZyA9IG1fc2lnbmFsX3NlbmRlci0+d2FpdEZv cigpOw0KICAgICBpZiAoIXNpZykNCiAgICAgICBEQlVHX1JFVFVSTigtMSk7DQor ICAgIC8vc2lnLT5wcmludCgpOw0KIA0KICAgICBpbnQgc2lnX251bWJlciA9IHNp Zy0+cmVhZFNpZ25hbE51bWJlcigpOw0KICAgICBzd2l0Y2ggKHNpZ19udW1iZXIp IHsNCiANCiAgICAgY2FzZSBHU05fREJJTkZPX1RSQU5TSURfQUk6DQotICAgICAg ZXhlY0RCSU5GT19UUkFOU0lEX0FJKHNpZyk7DQotICAgICAgREJVR19SRVRVUk4o MSk7IC8vIE1vcmUgZGF0YQ0KKyAgICB7DQorICAgICAgaW50IHJldCA9IGV4ZWNE QklORk9fVFJBTlNJRF9BSShzaWcpOw0KKyAgICAgIGlmIChyZXQgPT0gMCkNCisg ICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIERCVUdfUkVUVVJOKHJldCk7IC8vIE1v cmUgZGF0YQ0KICAgICAgIGJyZWFrOw0KKyAgICB9DQogDQogICAgIGNhc2UgR1NO X0RCSU5GT19TQ0FOQ09ORjoNCiAgICAgew0KQEAgLTE4MCwyMiArMjExLDIxIEBA IGludCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6cmVjZWl2ZSh2b2lkKQ0KICAgICB9 DQogDQogICAgIGNhc2UgR1NOX0RCSU5GT19TQ0FOUkVGOg0KLSAgICAgIERCVUdf UkVUVVJOKGV4ZWNEQklORk9fU0NBTlJFRihzaWcpKTsNCisgICAgew0KKyAgICAg IGludCByZXQgPSBleGVjREJJTkZPX1NDQU5SRUYoc2lnKTsNCisgICAgICBpZiAo cmV0ID09IDApDQorICAgICAgICBjb250aW51ZTsNCisgICAgICBEQlVHX1JFVFVS TihyZXQpOw0KICAgICAgIGJyZWFrOw0KKyAgICB9DQogDQogICAgIGNhc2UgR1NO X05PREVfRkFJTFJFUDoNCiAgICAgICAvLyBJZ25vcmUgYW5kIHdhaXQgZm9yIE5G X0NPTVBMRVRFUkVQDQogICAgICAgYnJlYWs7DQogDQogICAgIGNhc2UgR1NOX05G X0NPTVBMRVRFUkVQOg0KLSAgICB7DQotICAgICAgY29uc3QgTkZDb21wbGV0ZVJl cCAqIGNvbnN0IHJlcCA9DQotICAgICAgICBDQVNUX0NPTlNUUFRSKE5GQ29tcGxl dGVSZXAsIHNpZy0+Z2V0RGF0YVB0cigpKTsNCi0gICAgICBOb2RlSWQgbm9kZUlk PSByZXAtPmZhaWxlZE5vZGVJZDsNCi0gICAgICBpZiAobm9kZUlkID09IG1fbm9k ZV9pZCkNCi0gICAgICAgIERCVUdfUkVUVVJOKC0zKTsNCisgICAgICBEQlVHX1JF VFVSTigtMyk7DQogICAgICAgYnJlYWs7DQotICAgIH0NCiANCiAgICAgY2FzZSBH U05fU1VCX0dDUF9DT01QTEVURV9SRVA6DQogICAgIGNhc2UgR1NOX0FQSV9SRUdD T05GOg0KQEAgLTIyMCw3ICsyNTAsNiBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6 bmV4dFJlc3VsdCgpDQogDQogICBzd2l0Y2gobV9zdGF0ZSkNCiAgIHsNCi0gIGNh c2UgU3RhcnRlZDoNCiAgIGNhc2UgTW9yZURhdGE6DQogICB7DQogICAgIG1fc2ln bmFsX3NlbmRlci0+bG9jaygpOw0KQEAgLTIzMCw3ICsyNTksNiBAQCBOZGJJbmZv U2Nhbk9wZXJhdGlvbjo6bmV4dFJlc3VsdCgpDQogICAgIGJyZWFrOw0KICAgfQ0K ICAgY2FzZSBFbmQ6DQotICAgIGFzc2VydChmYWxzZSk7DQogICAgIERCVUdfUkVU VVJOKDApOyAvLyBFT0YNCiAgICAgYnJlYWs7DQogICBkZWZhdWx0Og0KQEAgLTI1 NiwxMCArMjg0LDIxIEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpjbG9zZSgpDQog ICBEQlVHX1ZPSURfUkVUVVJOOw0KIH0NCiANCi12b2lkDQoraW50DQogTmRiSW5m b1NjYW5PcGVyYXRpb246OmV4ZWNEQklORk9fVFJBTlNJRF9BSShjb25zdCBTaW1w bGVTaWduYWwgKiBzaWduYWwpDQogew0KICAgREJVR19FTlRFUigiTmRiSW5mb1Nj YW5PcGVyYXRpb246OmV4ZWNEQklORk9fVFJBTlNJRF9BSSIpOw0KKyAgY29uc3Qg VHJhbnNJZEFJKiB0cmFuc2lkID0NCisgICAgICAgICAgQ0FTVF9DT05TVFBUUihU cmFuc0lkQUksIHNpZ25hbC0+Z2V0RGF0YVB0cigpKTsNCisgIGlmICh0cmFuc2lk LT5jb25uZWN0UHRyICE9IG1fcmVzdWx0X2RhdGEgfHwNCisgICAgICB0cmFuc2lk LT50cmFuc0lkWzBdICE9IG1fdHJhbnNpZDAgfHwNCisgICAgICB0cmFuc2lkLT50 cmFuc0lkWzFdICE9IG1fdHJhbnNpZDEpDQorICB7DQorICAgIC8vIERyb3Agc2ln bmFsIHRoYXQgYmVsb25ncyB0byBwcmV2aW91cyBzY2FuDQorICAgIERCVUdfUkVU VVJOKDApOw0KKyAgfQ0KKyAgbV9yZWNlaXZlZF9yb3dzKys7DQorDQogICBjb25z dCBVaW50MzIqIHN0YXJ0ID0gc2lnbmFsLT5wdHJbMF0ucDsNCiAgIGNvbnN0IFVp bnQzMiogZW5kID0gc3RhcnQgKyBzaWduYWwtPnB0clswXS5zejsNCiANCkBAIC0y ODgsOCArMzI3LDcgQEAgTmRiSW5mb1NjYW5PcGVyYXRpb246OmV4ZWNEQklORk9f VFJBTlNJRA0KICAgICAvLyBObyByZWFkaW5nIGJleW9uZCBlbmQgb2Ygc2lnbmFs IHNpemUNCiAgICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7DQogICB9DQotDQotICBE QlVHX1ZPSURfUkVUVVJOOw0KKyAgREJVR19SRVRVUk4oMSk7DQogfQ0KIA0KIGlu dA0KQEAgLTI5OSwxOCArMzM3LDM5IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpl eGVjREJJTkZPX1NDQU5DT04NCiAgIGNvbnN0IERiaW5mb1NjYW5Db25mKiBjb25m ID0NCiAgICAgICAgICAgQ0FTVF9DT05TVFBUUihEYmluZm9TY2FuQ29uZiwgc2ln LT5nZXREYXRhUHRyKCkpOw0KIA0KLSAgaWYgKGNvbmYtPnJlcXVlc3RJbmZvICYg RGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKQ0KKyAgaWYgKGNvbmYtPnJlc3VsdERh dGEgIT0gbV9yZXN1bHRfZGF0YSB8fA0KKyAgICAgIGNvbmYtPnRyYW5zSWRbMF0g IT0gbV90cmFuc2lkMCB8fA0KKyAgICAgIGNvbmYtPnRyYW5zSWRbMV0gIT0gbV90 cmFuc2lkMSB8fA0KKyAgICAgIGNvbmYtPnJlc3VsdFJlZiAhPSBtX3Jlc3VsdF9y ZWYpDQogICB7DQotICAgIERCVUdfUFJJTlQoImluZm8iLCAoIlJlcXVlc3QgbW9y ZSBkYXRhIikpOw0KLSAgICBTaW1wbGVTaWduYWwgc3M7DQotICAgIERiaW5mb1Nj YW5SZXEgKiByZXEgPSBDQVNUX1BUUihEYmluZm9TY2FuUmVxLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3MuZ2V0RGF0YVB0clNlbmQoKSk7 DQotICAgIG1lbWNweShyZXEsIGNvbmYsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExl bmd0aFdpdGhDdXJzb3Iqc2l6ZW9mKFVpbnQzMikpOw0KLSAgICByZXEtPnJlcXVl c3RJbmZvICY9IH4oRGJpbmZvU2NhblJlcTo6U3RhcnRTY2FuKTsNCi0gICAgcmVx LT5hcGlSZWYgPSBtX3NpZ25hbF9zZW5kZXItPmdldE93blJlZigpOyAvLyBNQVNW IHNvbWVob3cgYmVjb21lcyBpbnZhbGlkDQorICAgIC8vIERyb3Agc2lnbmFsIHRo YXQgYmVsb25ncyB0byBwcmV2aW91cyBzY2FuDQorICAgIERCVUdfUkVUVVJOKDEp OyAvLyBDb250aW51ZSB3YWl0aW5nDQorICB9DQorICBjb25zdCBVaW50MzIgdGFi bGVJZCA9IGNvbmYtPnRhYmxlSWQ7DQorICBhc3NlcnQodGFibGVJZCA9PSBtX3Rh YmxlLT5nZXRUYWJsZUlkKCkpOw0KIA0KLSAgICBpbnQgZXJyID0gc2VuZERCSU5G T19TQ0FOUkVRKHNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IpOw0KKyAgLy8g QXNzZXJ0IGFsbCBzY2FuIHNldHRpbmdzIGlzIHVuY2hhbmdlZA0KKyAgYXNzZXJ0 KGNvbmYtPmNvbEJpdG1hcFswXSA9PSB+MCk7DQorICBhc3NlcnQoY29uZi0+Y29s Qml0bWFwWzFdID09IH4wKTsNCisgIGFzc2VydChjb25mLT5yZXF1ZXN0SW5mbyA9 PSAwKTsNCisgIGFzc2VydChjb25mLT5tYXhSb3dzID09IG1fbWF4X3Jvd3MpOw0K KyAgYXNzZXJ0KGNvbmYtPm1heEJ5dGVzID09IG1fbWF4X2J5dGVzKTsNCisNCisg IC8vIFNhdmUgY3Vyc29yIGRhdGENCisgIGFzc2VydChtX2N1cnNvci5zaXplKCkg PT0gMCk7DQorICBjb25zdCBVaW50MzIqIGN1cnNvcl9wdHIgPSBEYmluZm9TY2Fu OjpnZXRDdXJzb3JQdHIoY29uZik7DQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgY29uZi0+Y3Vyc29yX3N6OyBpKyspDQorICB7DQorICAgIG1fY3Vyc29yLnB1 c2hfYmFjaygqY3Vyc29yX3B0cik7DQorICAgIERCVUdfUFJJTlQoImluZm8iLCAo ImN1cnNvclsldV06IDB4JXgiLCBpLCBtX2N1cnNvcltpXSkpOw0KKyAgICBjdXJz b3JfcHRyKys7DQorICB9DQorICBhc3NlcnQoY29uZi0+Y3Vyc29yX3N6ID09IG1f Y3Vyc29yLnNpemUoKSk7DQorDQorICBpZiAoY29uZi0+Y3Vyc29yX3N6KQ0KKyAg ew0KKyAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJSZXF1ZXN0IG1vcmUgZGF0YSIp KTsNCisgICAgaW50IGVyciA9IHNlbmREQklORk9fU0NBTlJFUSgpOw0KICAgICBp ZiAoZXJyICE9IDApDQogICAgIHsNCiAgICAgICBEQlVHX1BSSU5UKCJpbmZvIiwg KCJGYWlsZWQgdG8gcmV1cWVzdCBtb3JlIGRhdGEiKSk7DQpAQCAtMzMzLDYgKzM5 MiwxNSBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19TQ0FOUkVG DQogICBjb25zdCBEYmluZm9TY2FuUmVmKiByZWYgPQ0KICAgICAgICAgICBDQVNU X0NPTlNUUFRSKERiaW5mb1NjYW5SZWYsIHNpZ25hbC0+Z2V0RGF0YVB0cigpKTsN CiANCisgIGlmIChyZWYtPnJlc3VsdERhdGEgIT0gbV9yZXN1bHRfZGF0YSB8fA0K KyAgICAgIHJlZi0+dHJhbnNJZFswXSAhPSBtX3RyYW5zaWQwIHx8DQorICAgICAg cmVmLT50cmFuc0lkWzFdICE9IG1fdHJhbnNpZDEgfHwNCisgICAgICByZWYtPnJl c3VsdFJlZiAhPSBtX3Jlc3VsdF9yZWYpOw0KKyAgew0KKyAgICAvLyBEcm9wIHNp Z25hbCB0aGF0IGJlbG9uZ3MgdG8gcHJldmlvdXMgc2Nhbg0KKyAgICBEQlVHX1JF VFVSTigwKTsgLy8gQ29udGludWUgd2FpdGluZw0KKyAgfQ0KKw0KICAgbV9zdGF0 ZSA9IEVycm9yOw0KICAgREJVR19SRVRVUk4ocmVmLT5lcnJvckNvZGUpOw0KIH0N Cg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRi SW5mb1NjYW5PcGVyYXRpb24uaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL25k YmFwaS9OZGJJbmZvU2Nhbk9wZXJhdGlvbi5ocHAJMjAwOS0wNi0yNCAwODowNDoz MyArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvU2Nh bk9wZXJhdGlvbi5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTI5 LDI1ICsyOSwzNCBAQCBwdWJsaWM6DQogcHJvdGVjdGVkOg0KICAgZnJpZW5kIGNs YXNzIE5kYkluZm87DQogICBOZGJJbmZvU2Nhbk9wZXJhdGlvbihjbGFzcyBOZGJf Y2x1c3Rlcl9jb25uZWN0aW9uKiwNCi0gICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IE5kYkluZm86OkluZm9UYWJsZSopOw0KLSAgYm9vbCBpbml0KHZvaWQpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxl KiwNCisgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBtYXhfcm93cywgVWlu dDMyIG1heF9ieXRlcyk7DQorICBib29sIGluaXQoVWludDMyIGlkKTsNCiAgIH5O ZGJJbmZvU2Nhbk9wZXJhdGlvbigpOw0KICAgdm9pZCBjbG9zZSgpOw0KIHByaXZh dGU6DQotICB2b2lkIGV4ZWNEQklORk9fVFJBTlNJRF9BSShjb25zdCBzdHJ1Y3Qg U2ltcGxlU2lnbmFsICogc2lnbmFsKTsNCisgIGludCBleGVjREJJTkZPX1RSQU5T SURfQUkoY29uc3Qgc3RydWN0IFNpbXBsZVNpZ25hbCAqIHNpZ25hbCk7DQogICBp bnQgZXhlY0RCSU5GT19TQ0FOQ09ORihjb25zdCBzdHJ1Y3QgU2ltcGxlU2lnbmFs ICogc2lnbmFsKTsNCiAgIGludCBleGVjREJJTkZPX1NDQU5SRUYoY29uc3Qgc3Ry dWN0IFNpbXBsZVNpZ25hbCAqIHNpZ25hbCk7DQotICBpbnQgc2VuZERCSU5GT19T Q0FOUkVRKHN0cnVjdCBTaW1wbGVTaWduYWwmIHNzLCBVaW50MzIgc2lnbmFsX2xl bik7DQorICBpbnQgc2VuZERCSU5GT19TQ0FOUkVRKCk7DQogDQogICBpbnQgcmVj ZWl2ZSh2b2lkKTsNCiANCiAgIGVudW0gU3RhdGUgeyBVbmRlZmluZWQsIEluaXRp YWwsIFByZXBhcmVkLA0KLSAgICAgICAgICAgICAgIFN0YXJ0ZWQsIE1vcmVEYXRh LCBFbmQsIEVycm9yIH0gbV9zdGF0ZTsNCisgICAgICAgICAgICAgICBNb3JlRGF0 YSwgRW5kLCBFcnJvciB9IG1fc3RhdGU7DQogICBjbGFzcyBOZGJfY2x1c3Rlcl9j b25uZWN0aW9uKiBtX2Nvbm5lY3Rpb247DQogICBjbGFzcyBTaWduYWxTZW5kZXIq ICAgICAgICAgICBtX3NpZ25hbF9zZW5kZXI7DQogICBjb25zdCBOZGJJbmZvOjpJ bmZvVGFibGUqICAgICBtX3RhYmxlOw0KICAgVmVjdG9yPE5kYkluZm9SZWNBdHRy Kj4gICAgICAgbV9yZWNBdHRyczsNCisgIFZlY3RvcjxVaW50MzI+ICAgICAgICAg ICAgICAgIG1fY3Vyc29yOw0KICAgVWludDMyIG1fbm9kZV9pZDsNCisgIFVpbnQz MiBtX3RyYW5zaWQwOw0KKyAgVWludDMyIG1fdHJhbnNpZDE7DQorICBVaW50MzIg bV9yZXN1bHRfcmVmOw0KKyAgVWludDMyIG1fbWF4X3Jvd3M7DQorICBVaW50MzIg bV9tYXhfYnl0ZXM7DQorICBVaW50MzIgbV9yZXN1bHRfZGF0YTsNCisgIFVpbnQz MiBtX3JlY2VpdmVkX3Jvd3M7DQogfTsNCiANCiANCg0KPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3ROZGJpbmZvLmNwcCcNCi0t LSBhL3N0b3JhZ2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3ROZGJpbmZvLmNwcAkyMDA5 LTA2LTI0IDA4OjA0OjMzICswMDAwDQorKysgYi9zdG9yYWdlL25kYi90ZXN0L25k YmFwaS90ZXN0TmRiaW5mby5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0K QEAgLTIzLDcgKzIzLDcgQEANCiANCiBpbnQgcnVuVGVzdE5kYkluZm8oTkRCVF9D b250ZXh0KiBjdHgsIE5EQlRfU3RlcCogc3RlcCkNCiB7DQotICBOZGJJbmZvIG5k YmluZm8oJmN0eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJuZGJpbmZvIik7DQor ICBOZGJJbmZvIG5kYmluZm8oJmN0eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJu ZGJpbmZvLyIpOw0KICAgaWYgKCFuZGJpbmZvLmluaXQoKSkNCiAgIHsNCiAgICAg Z19lcnIgPDwgIm5kYmluZm8uaW5pdCBmYWlsZWQiIDw8IGVuZGw7DQpAQCAtMzEs OSArMzEsOSBAQCBpbnQgcnVuVGVzdE5kYkluZm8oTkRCVF9Db250ZXh0KiBjdHgs IE5EDQogICB9DQogDQogICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqIHRhYmxl Ow0KLSAgaWYgKG5kYmluZm8ub3BlblRhYmxlKCIuL25kYmluZm8vVEFCTEVTIiwg JnRhYmxlKSAhPSAwKQ0KKyAgaWYgKG5kYmluZm8ub3BlblRhYmxlKCJuZGJpbmZv L1RBQkxFUyIsICZ0YWJsZSkgIT0gMCkNCiAgIHsNCi0gICAgZ19lcnIgPDwgIkZh aWxlZCB0byBnZXRUYWJsZShUQUJMRVMpIiA8PCBlbmRsOw0KKyAgICBnX2VyciA8 PCAiRmFpbGVkIHRvIG9wZW5UYWJsZShUQUJMRVMpIiA8PCBlbmRsOw0KICAgICBy ZXR1cm4gTkRCVF9GQUlMRUQ7DQogICB9DQogDQpAQCAtNjIsNyArNjIsNyBAQCBp bnQgcnVuVGVzdE5kYkluZm8oTkRCVF9Db250ZXh0KiBjdHgsIE5EDQogICAgICAg cmV0dXJuIE5EQlRfRkFJTEVEOw0KICAgICB9DQogDQotICAgIHdoaWxlKHNjYW5P cC0+bmV4dFJlc3VsdCgpKQ0KKyAgICB3aGlsZShzY2FuT3AtPm5leHRSZXN1bHQo KSA9PSAxKQ0KICAgICB7DQogICAgICAgZ19pbmZvIDw8ICJOQU1FOiAiIDw8IHRh YmxlTmFtZS0+Y19zdHIoKSA8PCBlbmRsOw0KICAgICAgIGdfaW5mbyA8PCAiU1FM OiAiIDw8IGNyZWF0ZVNRTC0+Y19zdHIoKSA8PCBlbmRsOw0KQEAgLTc0LDYgKzc0 LDMwNiBAQCBpbnQgcnVuVGVzdE5kYkluZm8oTkRCVF9Db250ZXh0KiBjdHgsIE5E DQogICByZXR1cm4gTkRCVF9PSzsNCiB9DQogDQorDQoraW50IHJ1blNjYW5BbGwo TkRCVF9Db250ZXh0KiBjdHgsIE5EQlRfU3RlcCogc3RlcCkNCit7DQorICBOZGJJ bmZvIG5kYmluZm8oJmN0eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJuZGJpbmZv LyIpOw0KKyAgaWYgKCFuZGJpbmZvLmluaXQoKSkNCisgIHsNCisgICAgZ19lcnIg PDwgIm5kYmluZm8uaW5pdCBmYWlsZWQiIDw8IGVuZGw7DQorICAgIHJldHVybiBO REJUX0ZBSUxFRDsNCisgIH0NCisNCisgIFVpbnQzMiB0YWJsZUlkID0gMDsNCisg IHdoaWxlKHRydWUpIHsNCisgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiB0 YWJsZTsNCisNCisgICAgaW50IGVyciA9IG5kYmluZm8ub3BlblRhYmxlKHRhYmxl SWQsICZ0YWJsZSk7DQorICAgIGlmIChlcnIgPT0gTmRiSW5mbzo6RVJSX05vU3Vj aFRhYmxlKQ0KKyAgICB7DQorICAgICAgLy8gTm8gbW9yZSB0YWJsZXMgLT4gcmV0 dXJuDQorICAgICAgcmV0dXJuIE5EQlRfT0s7DQorICAgIH0NCisgICAgZWxzZSBp ZiAoZXJyICE9IDApDQorICAgIHsNCisgICAgICAvLyBVbmV4cGVjdGVkIHJldHVy biBjb2RlDQorICAgICAgZ19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoIiA8 PCB0YWJsZUlkIDw8ICIpLCBlcnI6ICIgPDwgZXJyIDw8IGVuZGw7DQorICAgICAg cmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICB9DQorICAgIG5kYm91dCA8PCAidGFi bGUoIjw8dGFibGVJZDw8Iik6ICIgPDwgdGFibGUtPmdldE5hbWUoKSA8PCBlbmRs Ow0KKw0KKyAgICBmb3IgKGludCBsID0gMDsgbCA8IGN0eC0+Z2V0TnVtTG9vcHMo KTsgbCsrKQ0KKyAgICB7DQorICAgICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNj YW5PcCA9IE5VTEw7DQorICAgICAgaWYgKG5kYmluZm8uY3JlYXRlU2Nhbk9wZXJh dGlvbih0YWJsZSwgJnNjYW5PcCkpDQorICAgICAgew0KKyAgICAgICAgZ19lcnIg PDwgIk5vIE5kYkluZm9TY2FuT3BlcmF0aW9uIiA8PCBlbmRsOw0KKyAgICAgICAg cmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoc2Nh bk9wLT5yZWFkVHVwbGVzKCkgIT0gMCkNCisgICAgICB7DQorICAgICAgICBnX2Vy ciA8PCAic2Nhbk9wLT5yZWFkVHVwbGVzIGZhaWxlZCIgPDwgZW5kbDsNCisgICAg ICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAgaW50 IGNvbHVtbklkID0gMDsNCisgICAgICB3aGlsZSAoc2Nhbk9wLT5nZXRWYWx1ZShj b2x1bW5JZCkpDQorICAgICAgICBjb2x1bW5JZCsrOw0KKyAgICAgIC8vIEF0IGxl YXN0IG9uZSBjb2x1bW4NCisgICAgICBhc3NlcnQoY29sdW1uSWQgPj0gMSk7DQor DQorICAgICAgaWYoc2Nhbk9wLT5leGVjdXRlKCkgIT0gMCkNCisgICAgICB7DQor ICAgICAgICBnX2VyciA8PCAic2Nhbk9wLT5leGVjdXRlIGZhaWxlZCIgPDwgZW5k bDsNCisgICAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgICB9DQorDQor ICAgICAgaW50IHJvdyA9IDA7DQorICAgICAgd2hpbGUoc2Nhbk9wLT5uZXh0UmVz dWx0KCkgPT0gMSkNCisgICAgICAgIHJvdysrOw0KKyAgICAgIG5kYm91dCA8PCAi cm93czogIiA8PCByb3cgPDwgZW5kbDsNCisgICAgICBuZGJpbmZvLnJlbGVhc2VT Y2FuT3BlcmF0aW9uKHNjYW5PcCk7DQorICAgIH0NCisgICAgbmRiaW5mby5jbG9z ZVRhYmxlKHRhYmxlKTsNCisgICAgdGFibGVJZCsrOw0KKyAgfQ0KKw0KKyAgLy8g U2hvdWxkIG5ldmVyIGNvbWUgaGVyZQ0KKyAgYXNzZXJ0KGZhbHNlKTsNCisgIHJl dHVybiBOREJUX0ZBSUxFRDsNCit9DQorDQoraW50IHJ1blNjYW5TdG9wKE5EQlRf Q29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApDQorew0KKyAgTmRiSW5mbyBu ZGJpbmZvKCZjdHgtPm1fY2x1c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mby8iKTsN CisgIGlmICghbmRiaW5mby5pbml0KCkpDQorICB7DQorICAgIGdfZXJyIDw8ICJu ZGJpbmZvLmluaXQgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorICB9DQorDQorICBVaW50MzIgdGFibGVJZCA9IDA7DQorICB3aGls ZSh0cnVlKSB7DQorICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7 DQorDQorICAgIGludCBlcnIgPSBuZGJpbmZvLm9wZW5UYWJsZSh0YWJsZUlkLCAm dGFibGUpOw0KKyAgICBpZiAoZXJyID09IE5kYkluZm86OkVSUl9Ob1N1Y2hUYWJs ZSkNCisgICAgew0KKyAgICAgIC8vIE5vIG1vcmUgdGFibGVzIC0+IHJldHVybg0K KyAgICAgIHJldHVybiBOREJUX09LOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGVy ciAhPSAwKQ0KKyAgICB7DQorICAgICAgLy8gVW5leHBlY3RlZCByZXR1cm4gY29k ZQ0KKyAgICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8gb3BlblRhYmxlKCIgPDwgdGFi bGVJZCA8PCAiKSwgZXJyOiAiIDw8IGVyciA8PCBlbmRsOw0KKyAgICAgIHJldHVy biBOREJUX0ZBSUxFRDsNCisgICAgfQ0KKyAgICBuZGJvdXQgPDwgInRhYmxlOiAi IDw8IHRhYmxlLT5nZXROYW1lKCkgPDwgZW5kbDsNCisNCisgICAgZm9yIChpbnQg bCA9IDA7IGwgPCBjdHgtPmdldE51bUxvb3BzKCkqMTA7IGwrKykNCisgICAgew0K KyAgICAgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiBzY2FuT3AgPSBOVUxMOw0KKyAg ICAgIGlmIChuZGJpbmZvLmNyZWF0ZVNjYW5PcGVyYXRpb24odGFibGUsICZzY2Fu T3ApKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJObyBOZGJJbmZvU2Nh bk9wZXJhdGlvbiIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBOREJUX0ZBSUxF RDsNCisgICAgICB9DQorDQorICAgICAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygp ICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgInNjYW5PcC0+cmVh ZFR1cGxlcyBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9G QUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCBjb2x1bW5JZCA9IDA7DQor ICAgICAgd2hpbGUgKHNjYW5PcC0+Z2V0VmFsdWUoY29sdW1uSWQpKQ0KKyAgICAg ICAgY29sdW1uSWQrKzsNCisgICAgICAvLyBBdCBsZWFzdCBvbmUgY29sdW1uDQor ICAgICAgYXNzZXJ0KGNvbHVtbklkID49IDEpOw0KKw0KKyAgICAgIGlmKHNjYW5P cC0+ZXhlY3V0ZSgpICE9IDApDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwg InNjYW5PcC0+ZXhlY3V0ZSBmYWlsZWQiIDw8IGVuZGw7DQorICAgICAgICByZXR1 cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGludCBzdG9wUm93 ID0gcmFuZCgpICUgMTAwOw0KKyAgICAgIGludCByb3cgPSAwOw0KKyAgICAgIHdo aWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgpID09IDEpDQorICAgICAgew0KKyAgICAg ICAgcm93Kys7DQorICAgICAgICBpZiAocm93ID09IHN0b3BSb3cpDQorICAgICAg ICB7DQorICAgICAgICAgIG5kYm91dF9jKCJBYm9ydGluZyBzY2FuIGF0IHJvdyAl ZCIsIHN0b3BSb3cpOw0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisg ICAgICB9DQorICAgICAgbmRiaW5mby5yZWxlYXNlU2Nhbk9wZXJhdGlvbihzY2Fu T3ApOw0KKyAgICB9DQorICAgIG5kYmluZm8uY2xvc2VUYWJsZSh0YWJsZSk7DQor ICAgIHRhYmxlSWQrKzsNCisgIH0NCisNCisgIC8vIFNob3VsZCBuZXZlciBjb21l IGhlcmUNCisgIGFzc2VydChmYWxzZSk7DQorICByZXR1cm4gTkRCVF9GQUlMRUQ7 DQorfQ0KKw0KKw0KK2ludCBydW5SYXRlbGltaXQoTkRCVF9Db250ZXh0KiBjdHgs IE5EQlRfU3RlcCogc3RlcCkNCit7DQorICBOZGJJbmZvIG5kYmluZm8oJmN0eC0+ bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJuZGJpbmZvLyIpOw0KKyAgaWYgKCFuZGJp bmZvLmluaXQoKSkNCisgIHsNCisgICAgZ19lcnIgPDwgIm5kYmluZm8uaW5pdCBm YWlsZWQiIDw8IGVuZGw7DQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgIH0N CisNCisgIFVpbnQzMiB0YWJsZUlkID0gNjsgLy8gTUFTViAwDQorICB3aGlsZSh0 cnVlKSB7DQorDQorICAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7 DQorDQorICAgIGludCBlcnIgPSBuZGJpbmZvLm9wZW5UYWJsZSh0YWJsZUlkLCAm dGFibGUpOw0KKyAgICBpZiAoZXJyID09IE5kYkluZm86OkVSUl9Ob1N1Y2hUYWJs ZSkNCisgICAgew0KKyAgICAgIC8vIE5vIG1vcmUgdGFibGVzIC0+IHJldHVybg0K KyAgICAgIHJldHVybiBOREJUX09LOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGVy ciAhPSAwKQ0KKyAgICB7DQorICAgICAgLy8gVW5leHBlY3RlZCByZXR1cm4gY29k ZQ0KKyAgICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8gb3BlblRhYmxlKCIgPDwgdGFi bGVJZCA8PCAiKSwgZXJyOiAiIDw8IGVyciA8PCBlbmRsOw0KKyAgICAgIHJldHVy biBOREJUX0ZBSUxFRDsNCisgICAgfQ0KKyAgICBuZGJvdXQgPDwgInRhYmxlOiAi IDw8IHRhYmxlLT5nZXROYW1lKCkgPDwgZW5kbDsNCisgICAgDQorDQorICAgIHN0 cnVjdCB7IFVpbnQzMiByb3dzOyBVaW50MzIgYnl0ZXM7IH0gbGltaXRzW10gPSB7 DQorICAgICAgeyAwLCAwIH0sDQorICAgICAgeyAxLCAwIH0sIHsgMiwgMCB9LCB7 IDEwLCAwIH0sIHsgMzcsIDAgfSwgeyAxMDAwLCAwIH0sDQorICAgICAgeyAwLCAx IH0sIHsgMCwgMiB9LCB7IDAsIDEwIH0sIHsgMCwgMzcgfSwgeyAwLCAxMDAwIH0s DQorICAgICAgeyAxLCAxIH0sIHsgMiwgMiB9LCB7IDEwLCAxMCB9LCB7IDM3LCAz NyB9LCB7IDEwMDAsIDEwMDAgfQ0KKyAgICB9Ow0KKw0KKyAgICBpbnQgbGFzdFJv d3MgPSAwOw0KKyAgICBmb3IgKGludCBsID0gMDsgbCA8IHNpemVvZihsaW1pdHMp L3NpemVvZihsaW1pdHNbMF0pOyBsKyspDQorICAgIHsNCisNCisgICAgICBVaW50 MzIgbWF4Um93cyA9IGxpbWl0c1tsXS5yb3dzOw0KKyAgICAgIFVpbnQzMiBtYXhC eXRlcyA9IGxpbWl0c1tsXS5ieXRlczsNCisNCisgICAgICBOZGJJbmZvU2Nhbk9w ZXJhdGlvbiogc2Nhbk9wID0gTlVMTDsNCisgICAgICBpZiAobmRiaW5mby5jcmVh dGVTY2FuT3BlcmF0aW9uKHRhYmxlLCAmc2Nhbk9wLCBtYXhSb3dzLCBtYXhCeXRl cykpDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgIk5vIE5kYkluZm9TY2Fu T3BlcmF0aW9uIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVE Ow0KKyAgICAgIH0NCisNCisgICAgICBpZiAoc2Nhbk9wLT5yZWFkVHVwbGVzKCkg IT0gMCkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAic2Nhbk9wLT5yZWFk VHVwbGVzIGZhaWxlZCIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBOREJUX0ZB SUxFRDsNCisgICAgICB9DQorDQorICAgICAgaW50IGNvbHVtbklkID0gMDsNCisg ICAgICB3aGlsZSAoc2Nhbk9wLT5nZXRWYWx1ZShjb2x1bW5JZCkpDQorICAgICAg ICBjb2x1bW5JZCsrOw0KKyAgICAgIC8vIEF0IGxlYXN0IG9uZSBjb2x1bW4NCisg ICAgICBhc3NlcnQoY29sdW1uSWQgPj0gMSk7DQorDQorICAgICAgaWYoc2Nhbk9w LT5leGVjdXRlKCkgIT0gMCkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAi c2Nhbk9wLT5leGVjdXRlIGZhaWxlZCIgPDwgZW5kbDsNCisgICAgICAgIHJldHVy biBOREJUX0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAgaW50IHJvdyA9IDA7 DQorICAgICAgd2hpbGUoc2Nhbk9wLT5uZXh0UmVzdWx0KCkgPT0gMSkNCisgICAg ICAgIHJvdysrOw0KKyAgICAgIG5kYmluZm8ucmVsZWFzZVNjYW5PcGVyYXRpb24o c2Nhbk9wKTsNCisNCisgICAgICBuZGJvdXRfYygiWyV1LCV1XSByb3dzOiAlZCIs IG1heFJvd3MsIG1heEJ5dGVzLCByb3cpOw0KKyAgICAgIGlmIChsYXN0Um93cyAh PSAwKQ0KKyAgICAgIHsNCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJl ciBvZiByb3dzIGlzIHNhbWUgYXMgbGFzdCByb3VuZCBvbiBzYW1lIHRhYmxlDQor ICAgICAgICBpZiAobGFzdFJvd3MgIT0gcm93KQ0KKyAgICAgICAgew0KKyAgICAg ICAgICBnX2VyciA8PCAiR290IGRpZmZlcmVudCBudW1iZXIgb2Ygcm93cyB0aGlz IHJvdW5kLCBleHBlY3RlZDogIg0KKyAgICAgICAgICAgICAgICA8PCBsYXN0Um93 cyA8PCAiLCBnb3Q6ICIgPDwgcm93IDw8IGVuZGw7DQorICAgICAgICAgIG5kYmlu Zm8uY2xvc2VUYWJsZSh0YWJsZSk7DQorICAgICAgICAgIHJldHVybiBOREJUX0ZB SUxFRDsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgbGFzdFJvd3MgPSBy b3c7DQorICAgIH0NCisgICAgbmRiaW5mby5jbG9zZVRhYmxlKHRhYmxlKTsNCisg ICAgdGFibGVJZCsrOw0KKyAgfQ0KKw0KKyAgLy8gU2hvdWxkIG5ldmVyIGNvbWUg aGVyZQ0KKyAgYXNzZXJ0KGZhbHNlKTsNCisgIHJldHVybiBOREJUX0ZBSUxFRDsN Cit9DQorDQoraW50IHJ1blRlc3RUYWJsZShOREJUX0NvbnRleHQqIGN0eCwgTkRC VF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5kYkluZm8gbmRiaW5mbygmY3R4LT5tX2Ns dXN0ZXJfY29ubmVjdGlvbiwgIm5kYmluZm8vIik7DQorICBpZiAoIW5kYmluZm8u aW5pdCgpKQ0KKyAgew0KKyAgICBnX2VyciA8PCAibmRiaW5mby5pbml0IGZhaWxl ZCIgPDwgZW5kbDsNCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgfQ0KKw0K KyAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiB0YWJsZTsNCisgIGlmIChuZGJp bmZvLm9wZW5UYWJsZSgibmRiaW5mby9URVNUIiwgJnRhYmxlKSAhPSAwKQ0KKyAg ew0KKyAgICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZShURVNUKSIgPDwg ZW5kbDsNCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgfQ0KKw0KKyAgZm9y IChpbnQgbCA9IDA7IGwgPCBjdHgtPmdldE51bUxvb3BzKCk7IGwrKykNCisgIHsN CisNCisgICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5PcCA9IE5VTEw7DQor ICAgIGlmIChuZGJpbmZvLmNyZWF0ZVNjYW5PcGVyYXRpb24odGFibGUsICZzY2Fu T3ApKQ0KKyAgICB7DQorICAgICAgZ19lcnIgPDwgIk5vIE5kYkluZm9TY2FuT3Bl cmF0aW9uIiA8PCBlbmRsOw0KKyAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisg ICAgfQ0KKw0KKyAgICBpZiAoc2Nhbk9wLT5yZWFkVHVwbGVzKCkgIT0gMCkNCisg ICAgew0KKyAgICAgIGdfZXJyIDw8ICJzY2FuT3AtPnJlYWRUdXBsZXMgZmFpbGVk IiA8PCBlbmRsOw0KKyAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgICAgfQ0K Kw0KKyAgICBjb25zdCBOZGJJbmZvUmVjQXR0ciogbm9kZUlkPSBzY2FuT3AtPmdl dFZhbHVlKCJOT0RFX0lEIik7DQorICAgIGNvbnN0IE5kYkluZm9SZWNBdHRyKiBi bG9ja051bWJlcj0gc2Nhbk9wLT5nZXRWYWx1ZSgiQkxPQ0tfTlVNQkVSIik7DQor ICAgIGNvbnN0IE5kYkluZm9SZWNBdHRyKiBibG9ja0luc3RhbmNlPSBzY2FuT3At PmdldFZhbHVlKCJCTE9DS19JTlNUQU5DRSIpOw0KKyAgICBjb25zdCBOZGJJbmZv UmVjQXR0ciogY291bnRlcj0gc2Nhbk9wLT5nZXRWYWx1ZSgiQ09VTlRFUiIpOw0K Kw0KKyAgICBpZihzY2FuT3AtPmV4ZWN1dGUoKSAhPSAwKQ0KKyAgICB7DQorICAg ICAgZ19lcnIgPDwgInNjYW5PcC0+ZXhlY3V0ZSBmYWlsZWQiIDw8IGVuZGw7DQor ICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICB9DQorDQorICAgIGludCBy b3dzID0gMDsNCisgICAgd2hpbGUoc2Nhbk9wLT5uZXh0UmVzdWx0KCkgPT0gMSkN CisgICAgew0KKyAgICAgIHJvd3MrKzsvLw0KKyAgICB9DQorICAgIG5kYm91dCA8 PCAicm93czogIiA8PCByb3dzIDw8IGVuZGw7DQorICAgIG5kYmluZm8ucmVsZWFz ZVNjYW5PcGVyYXRpb24oc2Nhbk9wKTsNCisgIH0NCisNCisgIG5kYmluZm8uY2xv c2VUYWJsZSh0YWJsZSk7DQorICByZXR1cm4gTkRCVF9PSzsNCit9DQorDQorDQog TkRCVF9URVNUU1VJVEUodGVzdE5kYmluZm8pOw0KIFRFU1RDQVNFKCJOZGJpbmZv IiwNCiAgICAgICAgICAiVGVzdCBuZGJhcGkgaW50ZXJmYWNlIHRvIE5EQiRJTkZP Iil7DQpAQCAtODMsNiArMzgzLDIzIEBAIFRFU1RDQVNFKCJOZGJpbmZvMTAiLA0K ICAgICAgICAgICJUZXN0IG5kYmFwaSBpbnRlcmZhY2UgdG8gTkRCJElORk8iKXsN CiAgIFNURVBTKHJ1blRlc3ROZGJJbmZvLCAxMCk7DQogfQ0KK1RFU1RDQVNFKCJT Y2FuQWxsIiwNCisgICAgICAgICAiU2NhbiBhbGwgY29sdW1zIG9mIGFsbCB0YWJs ZSBrbm93biB0byBOZGJJbmZvIil7DQorICBTVEVQUyhydW5TY2FuQWxsLCAxKTsN Cit9DQorVEVTVENBU0UoIlNjYW5TdG9wIiwNCisgICAgICAgICAiUmFuZG9tbHkg c3RvcCB0aGUgc2NhbiIpew0KKyAgU1RFUFMocnVuU2NhblN0b3AsIDEpOw0KK30N CitURVNUQ0FTRSgiUmF0ZWxpbWl0IiwNCisgICAgICAgICAiU2NhbiB3aXQgZGlm ZmVyZW50IGNvbWJpbmF0aW9ucyBvZiByYXRlbGltaXQiKXsNCisgIFNURVBTKHJ1 blJhdGVsaW1pdCwgMSk7DQorfQ0KK1RFU1RDQVNFKCJUZXN0VGFibGUiLA0KKyAg ICAgICAgICJTY2FuIHRoZSB0ZXN0IHRhYmxlIGFuZCBtYWtlIHN1cmUgaXQgcmV0 dXJucyBjb3JyZWN0IG51bWJlciAiDQorICAgICAgICAgICJvZiByb3dzIHdoaWNo IHdpbGwgZGVwZW5kIG9uIGhvdyBtYW55IFRVUCBibG9ja3MgYXJlIGNvbmZpZ3Vy ZWQiKXsNCisgIFNURVAocnVuVGVzdFRhYmxlKTsNCit9DQogTkRCVF9URVNUU1VJ VEVfRU5EKHRlc3ROZGJpbmZvKTsNCiANCiANCg0K --Boundary_(ID_aAkSySYKDepTUus5gQc2dA) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/magnus.blaudd@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/magnus.blaudd@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: magnus.blaudd@stripped # target_branch: file:///home/msvensson/mysql/tmp/7allT58Yj8/7.1-\ # ndbinfo/ # testament_sha1: 12e0dcaa1fea62ec8c9a848e55029d5bee4e0539 # timestamp: 2009-07-03 13:14:15 +0200 # source_branch: file:///home/msvensson/mysql/7.1-ndbinfo/ # base_revision_id: jonas@stripped # # Begin bundle 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 qSn/hEYUh/SLuSKcKEgUi5RAAA== --Boundary_(ID_aAkSySYKDepTUus5gQc2dA)--