Name: series-workflowbggks Phase: Failed StartedAt: 2026-09-07 12:06:43 +0000 UTC FinishedAt: 2026-09-07 12:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbggks[0] Phase: Succeeded StartedAt: 2026-09-07 12:06:43 +0000 UTC FinishedAt: 2026-09-07 12:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbggks[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 12:06:43 +0000 UTC FinishedAt: 2026-09-07 12:09:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2QzYTk0YWY1Y2I2NjhiM2EzZTRkZGY3MGU5NTFmYzk5NzgxYzQ2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTI6MDg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBlYWRjNzE1OWNhNWI5Li43ZWQ1YjhmYjNiMjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC03OTIsOSAmIzQzOzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiBcdGludCByZXQ7XG4gXHRjaGFyICptYXA7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9zaXplLCBtYXBfc2l6ZSk7XG4mIzQzO1x0bWFwID0gYWxsb2NfaXNvbGF0ZWRfbWVtKGhwYWdlX3NpemUsIG1hcF9zaXplKTtcbiBcdGlmICghbWFwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bWVtYWxpZ24gZmFpbGVkICVkICVzXFxuXCYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDthbGxvY19pc29sYXRlZF9tZW0gZmFpbGVkICVkICVzXFxuXCYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRpZiAocmV0KVxuQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcbiBcdFx0LyogNC4gb25seSBtaWRkbGUgcGFnZSB3cml0dGVuICovXG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbiYjNDM7XHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0XHRtYXAgPSBnZXRodWdlcGFnZShtYXBfc2l6ZSk7XG4gXHRcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XG4gXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG5AQCAtODcxLDcgJiM0Mzs4NzEsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IFwmIzM0OyVzIG9ubHkgbWlkZGxlIHBhZ2Ugd3JpdHRlblxcblwmIzM0OywgX19mdW5jX18pO1xuIFxuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBhbGwgbmV3IGh1Z2UgcGFnZSBtdXN0IGJlIHdyaXR0ZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIGFsbCB0aGUgaHVnZSBwYWdlIG11c3Qgbm90IGJlIHdyaXR0ZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdFx0XHQgdmVjWzBdLnN0YXJ0ID09ICh1aW50cHRyX3QpKG1hcCAmIzQzOyBtYXBfc2l6ZS8yKSxcbiBcdFx0XHRcdCBcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0fVxuQEAgLTkyNyw3ICYjNDM7OTI3LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fKTtcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuJiM0MztcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICAgIF9fZnVuY19fKTtcbkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IDEgXHUwMDI2XHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXG4gXHRcdFx0XHQgXCYjMzQ7JXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbiYjNDM7XHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIGNsZWFyIHNlY29uZCBoYWxmIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0fVxuQEAgLTk4OCw3ICYjNDM7OTg4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcJiMzNDslcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuJiM0MztcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbkBAIC0xNzAyLDcgJiM0MzsxNzAyLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0d3BfYWRkcl9yYW5nZShtYXAsIGhwYWdlX3NpemUpO1xuIFx0XHRiYXNlX3Rlc3RzKFwmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOlwmIzM0OywgbWFwLCBocGFnZV9zaXplLCAwKTtcbiBcdFx0d3BfZnJlZShtYXAsIGhwYWdlX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFzZV90ZXN0cyhcJiMzNDtIdWdlIHBhZ2UgdGVzdGluZzpcJiMzNDssIE5VTEwsIDAsIDEpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uYjZmYWQzOGM4YmVlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOTIsOSAmIzQzOzkyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0aWYgKCFocGFnZV9sZW4pXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuLVx0bWFwID0gbWVtYWxpZ24oaHBhZ2VfbGVuLCBocGFnZV9sZW4pO1xuJiM0MztcdG1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7XG4gXHRpZiAoIW1hcClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21lbWFsaWduIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7YWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcblwmIzM0Oyk7XG4gXG4gXHRyZXQgPSBtYWR2aXNlKG1hcCwgaHBhZ2VfbGVuLCBNQURWX0hVR0VQQUdFKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMwLDcgJiM0MzsxMzAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBkaXJ0eSBiaXRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdH1cbi1cdGZyZWUobWFwKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX2xlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbXByb3RlY3QoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSwgYm9vbCBhbm9uKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi43ODY1YjBiYWIwMTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG4gXHRjaGFyICpyZXN1bHQ7XG4gXHRzaXplX3QgaTtcbiBcbi1cdHJlc3VsdCA9IG1lbWFsaWduKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbiYjNDM7XHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFyZXN1bHQpIHtcbiBcdFx0cHJpbnRmKFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5XFxuXCYjMzQ7KTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuQEAgLTE2Nyw2ICYjNDM7MTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0cmV0dXJuIHJlc3VsdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRpc2FibGVfa2h1Z2VwYWdlZCh2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXNhYmxlcyBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyBUSFBzIGluIHJhbmdlLCBleGlzdGluZyBUSFBcbiYjNDM7XHQgKiBwYWdlcyByZW1haW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtYWR2aXNlKGFkZHIsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfTk9IVUdFUEFHRSBmYWlsZWQsIGVycj0lZFxcblwmIzM0OywgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwYWdlcywgc2l6ZV90IGxlbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XG5AQCAtMTc5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcXG5cJiMzNDspO1xuIFxuJiM0MztcdGRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTtcbiYjNDM7XG4gXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xuIFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLFxuIFx0XHQgICAgICAodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCAwKTtcbkBAIC0yMDUsNyAmIzQzOzIxOSw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF96ZXJvX3BhZ2VzKHZvaWQpXG4gXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XG4gXHR2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCB6ZXJvIGZpbGxlZCBodWdlIHBhZ2VzIHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuLVx0ZnJlZShvbmVfcGFnZSk7XG4mIzQzO1x0ZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuQEAgLTIxNCw3ICYjNDM7MjI4LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRzaXplX3QgbGVuID0gNCAqIHBtZF9wYWdlc2l6ZTtcbiBcdHNpemVfdCBpO1xuIFxuLVx0b25lX3BhZ2UgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XG4mIzQzO1x0b25lX3BhZ2UgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFvbmVfcGFnZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5OiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbkBAIC0yMjYsNiAmIzQzOzI0MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7XG4mIzQzO1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpO1xuQEAgLTI0Niw3ICYjNDM7MjYyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7U3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxuXCYjMzQ7LCBvcmRlcik7XG4tXHRmcmVlKG9uZV9wYWdlKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbkBAIC0yNzQsNiAmIzQzOzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGRpc2FibGVfa2h1Z2VwYWdlZCh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRvIGNoYWxsZW5nZSBzcGl0dGluZyBjb2RlLCB3ZSB3aWxsIG1yZW1hcCBhIHNpbmdsZSBwYWdlIG9mIGVhY2hcbiBcdCAqIFRIUCAocGFnZVtpXSBvZiB0aHBbaV0pIGluIHRoZSB0aHBfYXJlYSBpbnRvIHBhZ2VfYXJlYS4gVGhpcyB3aWxsXG5AQCAtNTQxLDYgJiM0Mzs1NTksNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMjtcbiBcdH1cbiYjNDM7XHRkaXNhYmxlX2todWdlcGFnZWQoKmFkZHIsIGZkX3NpemUpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX291dF9jbG9zZTpcbiBcdGNsb3NlKCpmZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC0xOSw2ICYjNDM7MTksMTEgQEBcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4gI2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXG4gXG4mIzQzOyNkZWZpbmUgQUxJR04oeCwgYSlcdFx0KCgoeCkgJiM0MzsgKGEgLSAxKSkgXHUwMDI2ICh+KChhKSAtIDEpKSlcbiYjNDM7I2RlZmluZSBBTElHTl9QVFIocCwgYSlcdFx0KCh0eXBlb2YocCkpQUxJR04oKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcbiYjNDM7I2RlZmluZSBJU19BTElHTkVEKHgsIGEpXHQoKCh4KSBcdTAwMjYgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApXG4mIzQzOyNkZWZpbmUgUFRSX0FMSUdORUQocCwgYSlcdChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKShwKSwgYSkpXG4mIzQzO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuIFxuQEAgLTM1MSwzMSAmIzQzOzM1NiwxMyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcJiMzNDslOVwmIzM0OyBTQ051NjQgXCYjMzQ7IGtCXCYjMzQ7LCBcdTAwMjZ0aHApICE9IDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcXG5cJiMzNDspO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4tc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4tXHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyhpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4mIzQzO1x0XHRcdCAgICAgICB2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgICAgICAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4gXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4tXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4gXHRpZiAoIW5yX3BhZ2VzKVxuQEAgLTM4NiwxNSAmIzQzOzM3Myw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7aW52YWxpZCBvcmRlclxcblwmIzM0Oyk7XG4gXG4gXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xuLVx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXFxuXCYjMzQ7KTtcbi1cbi1cdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuLVx0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbi1cdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwmIzM0Oyk7XG4tXHR9XG4gXG4gXHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE1BWF9OUl9PUkRFUlMpO1xuQEAgLTQwNSw0OCAmIzQzOzM4MywxMTIgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4gXHRcdHJldCA9IHRydWU7XG4gXG4gb3V0OlxuLVx0Y2xvc2UocGFnZW1hcF9mZCk7XG4tXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbi1cbi1cdGlmICghcG1kX3BhZ2VzaXplKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7ZW51bSBjaGVja19odWdlX3R5cGUge1xuJiM0MztcdENIRUNLX0hVR0VfQU5PTixcbiYjNDM7XHRDSEVDS19IVUdFX0ZJTEUsXG4mIzQzO1x0Q0hFQ0tfSFVHRV9TSE1FTSxcbiYjNDM7fTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7QW5vbkh1Z2VQYWdlczogXCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncyxcbiYjNDM7XHRcdFx0ICAgIGVudW0gY2hlY2tfaHVnZV90eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEU7XG4mIzQzO1x0Y29uc3QgYm9vbCBzd2FwYmFja2VkID0ga3BhZ2VmbGFncyBcdTAwMjYgS1BGX1NXQVBCQUNLRUQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9BTk9OOlxuJiM0MztcdFx0cmV0dXJuICFmaWxlO1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9GSUxFOlxuJiM0MztcdFx0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2ICFzd2FwYmFja2VkO1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9TSE1FTTpcbiYjNDM7XHRcdHJldHVybiBmaWxlIFx1MDAyNiBzd2FwYmFja2VkO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4mIzQzO1x0XHRcdCB1aW50NjRfdCBocGFnZV9zaXplLCBlbnVtIGNoZWNrX2h1Z2VfdHlwZSB0eXBlKVxuIHtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0Ym9vbCByZXQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRpbnQgbnJfcG1kX21hcHBpbmdzID0gMDtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUsIHNjYW5fbWFwcGluZ19zaXplO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XHRib29sIGNoZWNrX3BtZF9tYXBwaW5nLCBhbGxvd19ub25wcmVzZW50O1xuJiM0MztcdGNoYXIgKnN0YXJ0ID0gYWRkcjtcbiYjNDM7XHRjaGFyICplbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXG4mIzQzO1x0cG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0Y2hlY2tfcG1kX21hcHBpbmcgPSAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpO1xuJiM0MztcdHNjYW5fbWFwcGluZ19zaXplID0gKG5yX2hwYWdlcyBcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcbiYjNDM7XHQvKiBTb21lIG1USFAgdGVzdHMgY2hlY2sgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkIFBNRC1zaXplZCByYW5nZS4gKi9cbiYjNDM7XHRhbGxvd19ub25wcmVzZW50ID0gKHVpbnQ2NF90KW5yX2hwYWdlcyAqIGhwYWdlX3NpemUgXHUwMDNjIGxlbjtcbiYjNDM7XG4mIzQzO1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwIGZhaWxcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoa3BhZ2VmbGFnc19mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBrcGFnZWZsYWdzIGZhaWxcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWNoZWNrX2xhcmdlX2ZvbGlvcyhwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzY2FuX21hcHBpbmdfc2l6ZSkge1xuJiM0MztcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBzdGFydCk7XG4mIzQzO1x0XHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgc3RhcnQpO1xuJiM0MztcdFx0aWYgKHBmbiA9PSAtMVVMKSB7XG4mIzQzO1x0XHRcdGlmICghYWxsb3dfbm9ucHJlc2VudClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBcdTAwMjZrcGYpKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdG5yX3BtZF9tYXBwaW5ncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAoa3BmIFx1MDAyNiBLUEZfQ09NUE9VTkRfVEFJTClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKG5yX3BtZF9tYXBwaW5ncyAhPSBucl9ocGFnZXMpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuLVxuLVx0aWYgKCFwbWRfcGFnZXNpemUpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XG4mIzQzO31cbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0Mztib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9TSE1FTSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5AQCAtNDc3LDYgJiM0Mzs1MTksNjEgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4mIzQzO3ZvaWQgKmFsbG9jX2lzb2xhdGVkX21lbShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqcHRyLCAqZ3VhcmQsICphZGRyX2FsaWduO1xuJiM0MztcdHNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbiYjNDM7XHRzaXplX3QgcGFkZGluZztcbiYjNDM7XG4mIzQzO1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcdTAwM2UgMSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRhbGlnbiA9IChhbGlnbiBcdTAwM2UgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplO1xuJiM0MztcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XG4mIzQzO1x0c2l6ZSA9IEFMSUdOKHNpemUsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0bWFwX3NpemUgPSBzaXplICYjNDM7IGFsaWduICYjNDM7IGd1YXJkX3NpemU7XG4mIzQzO1xuJiM0MztcdHB0ciA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YWRkcl9hbGlnbiA9IFBUUl9BTElHTkVEKHB0ciwgYWxpZ24pID8gcHRyICYjNDM7IGFsaWduIDogQUxJR05fUFRSKHB0ciwgYWxpZ24pO1xuJiM0MztcdHBhZGRpbmcgPSBhZGRyX2FsaWduIC0gZ3VhcmRfc2l6ZSAtIHB0cjtcbiYjNDM7XHRpZiAocGFkZGluZykge1xuJiM0MztcdFx0bXVubWFwKHB0ciwgcGFkZGluZyk7XG4mIzQzO1x0XHRtYXBfc2l6ZSAtPSBwYWRkaW5nO1xuJiM0MztcdFx0cHRyICYjNDM7PSBwYWRkaW5nO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z3VhcmQgPSBwdHI7XG4mIzQzO1x0aWYgKG1wcm90ZWN0KGd1YXJkLCBndWFyZF9zaXplLCBQUk9UX05PTkUpKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRndWFyZCA9IGFkZHJfYWxpZ24gJiM0Mzsgc2l6ZTtcbiYjNDM7XHRpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdHBhZGRpbmcgPSAocHRyICYjNDM7IG1hcF9zaXplKSAtIChndWFyZCAmIzQzOyBndWFyZF9zaXplKTtcbiYjNDM7XHRpZiAocGFkZGluZylcbiYjNDM7XHRcdG11bm1hcChndWFyZCAmIzQzOyBndWFyZF9zaXplLCBwYWRkaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHJfYWxpZ247XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdG11bm1hcChwdHIsIG1hcF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGludCBndWFyZF9zaXplLCBwYWdlX3NpemUgPSBwc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRndWFyZF9zaXplID0gcGFnZV9zaXplO1xuJiM0MztcdG11bm1hcCgoY2hhciAqKWFkZHIgLSBndWFyZF9zaXplLFxuJiM0MztcdCAgICAgICBndWFyZF9zaXplICogMiAmIzQzOyBBTElHTihzaXplLCBwYWdlX3NpemUpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncylcbiB7XG4gXHRzaXplX3QgY291bnQ7XG5AQCAtNTgxLDEzICYjNDM7Njc4LDEyIEBAIGJvb2wgc29mdGRpcnR5X3N1cHBvcnRlZCh2b2lkKVxuIFx0Y29uc3Qgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcbiBcdC8qIE5ldyBtYXBwaW5ncyBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFya2VkIHdpdGggVk1fU09GVERJUlRZIChzZCkuICovXG4tXHRhZGRyID0gbW1hcCgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbi1cdFx0ICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSwgMCwgMCk7XG4tXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdGFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTtcbiYjNDM7XHRpZiAoIWFkZHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gXG4gXHRzdXBwb3J0ZWQgPSBjaGVja192bWZsYWcoYWRkciwgXCYjMzQ7c2RcJiMzNDspO1xuLVx0bXVubWFwKGFkZHIsIHBhZ2VzaXplKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShhZGRyLCBwYWdlc2l6ZSk7XG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDlhNDlhZjg4NzAyZTQuLmNlMWRhOWE1NTMxMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTE4LDYgJiM0MzsxOCw3IEBAXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxuICNkZWZpbmUgUE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MylcbiBcbiYjNDM7I2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KVxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX0hFQUQgICAgICAgICAgICAgQklUX1VMTCgxNSlcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMICAgICAgICAgICAgIEJJVF9VTEwoMTYpXG4gI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KVxuQEAgLTk0LDYgJiM0Mzs5NSw4IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xuJiM0Mzt2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpO1xuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcbiBpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkM2E5NGFmNWNiNjY4YjNhM2U0ZGRmNzBlOTUxZmM5OTc4MWM0NmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEyOjA4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCmluZGV4IGVhZGM3MTU5Y2E1YjkuLjdlZDViOGZiM2IyNTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKQEAgLTc5Miw5ICYjNDM7NzkyLDkgQEAgdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQogCWludCByZXQ7CiAJY2hhciAqbWFwOwogCi0JbWFwID0gbWVtYWxpZ24oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpOwomIzQzOwltYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpOwogCWlmICghbWFwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttZW1hbGlnbiBmYWlsZWQgJWQgJXNcbiYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2FsbG9jX2lzb2xhdGVkX21lbSBmYWlsZWQgJWQgJXNcbiYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAogCXJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAJaWYgKHJldCkKQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZCkKIAogCQkvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi8KIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJCW1hcCA9IGdldGh1Z2VwYWdlKG1hcF9zaXplKTsKIAkJd3BfaW5pdChtYXAsIG1hcF9zaXplKTsKIAkJd3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTsKQEAgLTg3MSw3ICYjNDM7ODcxLDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZCkKIAkJCQkgJiMzNDslcyBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW5cbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgYWxsIG5ldyBodWdlIHBhZ2UgbXVzdCBiZSB3cml0dGVuXG4mIzM0OywgX19mdW5jX18pOwogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBhbGwgdGhlIGh1Z2UgcGFnZSBtdXN0IG5vdCBiZSB3cml0dGVuXG4mIzM0OywgX19mdW5jX18pOwpAQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKQogCQkJCSB2ZWNbMF0uc3RhcnQgPT0gKHVpbnRwdHJfdCkobWFwICYjNDM7IG1hcF9zaXplLzIpLAogCQkJCSAmIzM0OyVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwogCQl3cF9mcmVlKG1hcCwgbWFwX3NpemUpOwotCQlmcmVlKG1hcCk7CiYjNDM7CQlmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTsKIAl9IGVsc2UgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAl9CkBAIC05MjcsNyAmIzQzOzkyNyw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJCQkJICYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxuJiMzNDssCiAJCQkJIF9fZnVuY19fKTsKIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxuJiMzNDssCiAJCQkJICAgICAgX19mdW5jX18pOwpAQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKQogCQlrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSAxICZhbXA7JmFtcDsgTEVOKHZlY1swXSkgPT0gdmVjX3NpemUvMiwKIAkJCQkgJiMzNDslcyBjbGVhciBzZWNvbmQgaGFsZiBodWdlIHBhZ2VcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpOwogCX0gZWxzZSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0OyVzIGNsZWFyIHNlY29uZCBoYWxmIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAl9CkBAIC05ODgsNyAmIzQzOzk4OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJCQkJICYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwogCiAJCXdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpOwogCX0gZWxzZSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0OyVzIGdldCBoYWxmIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwpAQCAtMTcwMiw3ICYjNDM7MTcwMiw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJCXdwX2FkZHJfcmFuZ2UobWFwLCBocGFnZV9zaXplKTsKIAkJYmFzZV90ZXN0cygmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOiYjMzQ7LCBtYXAsIGhwYWdlX3NpemUsIDApOwogCQl3cF9mcmVlKG1hcCwgaHBhZ2Vfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgaHBhZ2Vfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJYmFzZV90ZXN0cygmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOiYjMzQ7LCBOVUxMLCAwLCAxKTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKaW5kZXggNWYyNzg5MTNjNGQ3NS4uYjZmYWQzOGM4YmVlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtOTIsOSAmIzQzOzkyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCWlmICghaHBhZ2VfbGVuKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWQmIzM0Oyk7CiAKLQltYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7CiYjNDM7CW1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7CiAJaWYgKCFtYXApCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21lbWFsaWduIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7YWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxuJiMzNDspOwogCiAJcmV0ID0gbWFkdmlzZShtYXAsIGhwYWdlX2xlbiwgTUFEVl9IVUdFUEFHRSk7CiAJaWYgKHJldCkKQEAgLTEzMCw3ICYjNDM7MTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXG4mIzM0OywgX19mdW5jX18pOwogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBkaXJ0eSBiaXRcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJfQotCWZyZWUobWFwKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBocGFnZV9sZW4pOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X21wcm90ZWN0KGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUsIGJvb2wgYW5vbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKIAljaGFyICpyZXN1bHQ7CiAJc2l6ZV90IGk7CiAKLQlyZXN1bHQgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7CiYjNDM7CXJlc3VsdCA9IGFsbG9jX2lzb2xhdGVkX21lbShwbWRfcGFnZXNpemUsIGxlbik7CiAJaWYgKCFyZXN1bHQpIHsKIAkJcHJpbnRmKCYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBtZW1vcnlcbiYjMzQ7KTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwpAQCAtMTY3LDYgJiM0MzsxNjcsMTggQEAgc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRpc2FibGVfa2h1Z2VwYWdlZCh2b2lkICphZGRyLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZXMga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgVEhQcyBpbiByYW5nZSwgZXhpc3RpbmcgVEhQCiYjNDM7CSAqIHBhZ2VzIHJlbWFpbi4KJiM0MzsJICovCiYjNDM7CWlmICghbWFkdmlzZShhZGRyLCBsZW4sIE1BRFZfTk9IVUdFUEFHRSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfTk9IVUdFUEFHRSBmYWlsZWQsIGVycj0lZFxuJiMzNDssIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocGFnZXMsIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwpAQCAtMTc5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCWlmICghcnNzX2Fub25fYmVmb3JlKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcbiYjMzQ7KTsKIAomIzQzOwlkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7CiYjNDM7CiAJLyogc3BsaXQgYWxsIFRIUHMgKi8KIAl3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsCiAJCSAgICAgICh1aW50NjRfdClvbmVfcGFnZSAmIzQzOyBsZW4sIDApOwpAQCAtMjA1LDcgJiM0MzsyMTksNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfemVyb19wYWdlcyh2b2lkKQogCW9uZV9wYWdlID0gYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2UobGVuKTsKIAl2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTsKIAlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDtTcGxpdCB6ZXJvIGZpbGxlZCBodWdlIHBhZ2VzIHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKLQlmcmVlKG9uZV9wYWdlKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQpAQCAtMjE0LDcgJiM0MzsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAlzaXplX3QgbGVuID0gNCAqIHBtZF9wYWdlc2l6ZTsKIAlzaXplX3QgaTsKIAotCW9uZV9wYWdlID0gbWVtYWxpZ24ocG1kX3BhZ2VzaXplLCBsZW4pOwomIzQzOwlvbmVfcGFnZSA9IGFsbG9jX2lzb2xhdGVkX21lbShwbWRfcGFnZXNpemUsIGxlbik7CiAJaWYgKCFvbmVfcGFnZSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBtZW1vcnk6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKIApAQCAtMjI2LDYgJiM0MzsyNDAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Tm8gVEhQIGlzIGFsbG9jYXRlZFxuJiMzNDspOwogCiYjNDM7CWRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTsKJiM0MzsKIAkvKiBzcGxpdCBhbGwgVEhQcyAqLwogCXdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSwKIAkJKHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpOwpAQCAtMjQ2LDcgJiM0MzsyNjIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKLQlmcmVlKG9uZV9wYWdlKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCkBAIC0yNzQsNiAmIzQzOzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlkaXNhYmxlX2todWdlcGFnZWQodGhwX2FyZWEsIHRocF9hcmVhX3NpemUpOwomIzQzOwogCS8qCiAJICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaAogCSAqIFRIUCAocGFnZVtpXSBvZiB0aHBbaV0pIGluIHRoZSB0aHBfYXJlYSBpbnRvIHBhZ2VfYXJlYS4gVGhpcyB3aWxsCkBAIC01NDEsNiAmIzQzOzU1OSw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSwKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7UGFnZWNhY2hlIGZvbGlvIHNwbGl0IHNraXBwZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC0yOwogCX0KJiM0MzsJZGlzYWJsZV9raHVnZXBhZ2VkKCphZGRyLCBmZF9zaXplKTsKIAlyZXR1cm4gMDsKIGVycl9vdXRfY2xvc2U6CiAJY2xvc2UoKmZkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC0xOSw2ICYjNDM7MTksMTEgQEAKICNkZWZpbmUgS1BBR0VGTEFHU19QQVRIICYjMzQ7L3Byb2Mva3BhZ2VmbGFncyYjMzQ7CiAjZGVmaW5lIE1BWF9OUl9PUkRFUlMgMjAKIAomIzQzOyNkZWZpbmUgQUxJR04oeCwgYSkJCSgoKHgpICYjNDM7IChhIC0gMSkpICZhbXA7ICh+KChhKSAtIDEpKSkKJiM0MzsjZGVmaW5lIEFMSUdOX1BUUihwLCBhKQkJKCh0eXBlb2YocCkpQUxJR04oKHVuc2lnbmVkIGxvbmcpKHApLCBhKSkKJiM0MzsjZGVmaW5lIElTX0FMSUdORUQoeCwgYSkJKCgoeCkgJmFtcDsgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApCiYjNDM7I2RlZmluZSBQVFJfQUxJR05FRChwLCBhKQkoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZykocCksIGEpKQomIzQzOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKIApAQCAtMzUxLDMxICYjNDM7MzU2LDEzIEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAotCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCi17Ci0JY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKLQl1aW50NjRfdCB0aHAgPSAtMTsKLQljaGFyICplbnRyeTsKLQotCWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQlpZiAoIWVudHJ5KQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoc3NjYW5mKGVudHJ5LCAmIzM0OyU5JiMzNDsgU0NOdTY0ICYjMzQ7IGtCJiMzNDssICZhbXA7dGhwKSAhPSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcbiYjMzQ7KTsKLQotZXJyX291dDoKLQlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywKLQkJdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0MztzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3MoaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCSAgICAgICB2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJCSAgICAgICB1aW50NjRfdCBocGFnZV9zaXplKQogewogCWludCBvcmRlciA9IDAsIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7CiAJaW50IG9yZGVyc1tNQVhfTlJfT1JERVJTXSwgc3RhdHVzOwotCWludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAlpZiAoIW5yX3BhZ2VzKQpAQCAtMzg2LDE1ICYjNDM7MzczLDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2ludmFsaWQgb3JkZXJcbiYjMzQ7KTsKIAogCW1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEpCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7Ci0KLQlrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTsKLQlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewotCQljbG9zZShwYWdlbWFwX2ZkKTsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZCBrcGFnZWZsYWdzIGZhaWxcbiYjMzQ7KTsKLQl9CiAKIAlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCwKIAkJCWtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7CkBAIC00MDUsNDggJiM0MzszODMsMTEyIEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAogCQlyZXQgPSB0cnVlOwogCiBvdXQ6Ci0JY2xvc2UocGFnZW1hcF9mZCk7Ci0JY2xvc2Uoa3BhZ2VmbGFnc19mZCk7CiAJcmV0dXJuIHJldDsKIH0KIAotYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKLXsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwotCi0JaWYgKCFwbWRfcGFnZXNpemUpCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwomIzQzO2VudW0gY2hlY2tfaHVnZV90eXBlIHsKJiM0MzsJQ0hFQ0tfSFVHRV9BTk9OLAomIzQzOwlDSEVDS19IVUdFX0ZJTEUsCiYjNDM7CUNIRUNLX0hVR0VfU0hNRU0sCiYjNDM7fTsKIAotCWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKLQkJcmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgJiMzNDtBbm9uSHVnZVBhZ2VzOiAmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MztzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncywKJiM0MzsJCQkgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGJvb2wgZmlsZSA9IGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFOwomIzQzOwljb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzICZhbXA7IEtQRl9TV0FQQkFDS0VEOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBDSEVDS19IVUdFX0FOT046CiYjNDM7CQlyZXR1cm4gIWZpbGU7CiYjNDM7CWNhc2UgQ0hFQ0tfSFVHRV9GSUxFOgomIzQzOwkJcmV0dXJuIGZpbGUgJmFtcDsmYW1wOyAhc3dhcGJhY2tlZDsKJiM0MzsJY2FzZSBDSEVDS19IVUdFX1NITUVNOgomIzQzOwkJcmV0dXJuIGZpbGUgJmFtcDsgc3dhcGJhY2tlZDsKJiM0MzsJfQogCi0JcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0MztzdGF0aWMgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywKJiM0MzsJCQkgdWludDY0X3QgaHBhZ2Vfc2l6ZSwgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSkKIHsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlib29sIHJldCA9IGZhbHNlOwomIzQzOwlpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDsKJiM0MzsJaW50IG5yX3BtZF9tYXBwaW5ncyA9IDA7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSwgc2Nhbl9tYXBwaW5nX3NpemU7CiYjNDM7CXVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm47CiYjNDM7CWJvb2wgY2hlY2tfcG1kX21hcHBpbmcsIGFsbG93X25vbnByZXNlbnQ7CiYjNDM7CWNoYXIgKnN0YXJ0ID0gYWRkcjsKJiM0MzsJY2hhciAqZW5kID0gc3RhcnQgJiM0MzsgbGVuOwogCiYjNDM7CXBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwogCi0JaWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKQotCQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTsKJiM0MzsJc2Nhbl9tYXBwaW5nX3NpemUgPSAobnJfaHBhZ2VzICZndDsgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTsKJiM0MzsJLyogU29tZSBtVEhQIHRlc3RzIGNoZWNrIGEgcGFydGlhbGx5IHBvcHVsYXRlZCBQTUQtc2l6ZWQgcmFuZ2UuICovCiYjNDM7CWFsbG93X25vbnByZXNlbnQgPSAodWludDY0X3QpbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSAmbHQ7IGxlbjsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChwYWdlbWFwX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCAmbHQ7IDApIHsKJiM0MzsJCWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBrcGFnZWZsYWdzIGZhaWxcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsKJiM0MzsJICAgICFjaGVja19sYXJnZV9mb2xpb3MocGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCwKJiM0MzsJCQkJYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKQomIzQzOwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJZm9yICg7IHN0YXJ0ICZsdDsgZW5kOyBzdGFydCAmIzQzOz0gc2Nhbl9tYXBwaW5nX3NpemUpIHsKJiM0MzsJCWNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgc3RhcnQpOwomIzQzOwkJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHN0YXJ0KTsKJiM0MzsJCWlmIChwZm4gPT0gLTFVTCkgewomIzQzOwkJCWlmICghYWxsb3dfbm9ucHJlc2VudCkKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgJmFtcDtrcGYpKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQga3BhZ2VmbGFnczogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJaWYgKGNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsgKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19IVUdFKSkKJiM0MzsJCQlucl9wbWRfbWFwcGluZ3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGtwZiAmYW1wOyBLUEZfQ09NUE9VTkRfVEFJTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghY2hlY2tfaHVnZV90eXBlKGNhdGVnb3JpZXMsIGtwZiwgdHlwZSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsgKG5yX3BtZF9tYXBwaW5ncyAhPSBucl9ocGFnZXMpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShwYWdlbWFwX2ZkKTsKJiM0MzsJY2xvc2Uoa3BhZ2VmbGFnc19mZCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JdWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKLQotCWlmICghcG1kX3BhZ2VzaXplKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9BTk9OKTsKJiM0Mzt9CiAKLQlpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpCi0JCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7U2htZW1QbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfRklMRSk7CiYjNDM7fQogCi0JcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplLCBDSEVDS19IVUdFX1NITUVNKTsKIH0KIAogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKQEAgLTQ3Nyw2ICYjNDM7NTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiAJcmV0dXJuIC0xOwogfQogCiYjNDM7dm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljaGFyICpwdHIsICpndWFyZCwgKmFkZHJfYWxpZ247CiYjNDM7CXNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTsKJiM0MzsJc2l6ZV90IHBhZGRpbmc7CiYjNDM7CiYjNDM7CWlmIChfX2J1aWx0aW5fcG9wY291bnRsbCgodW5zaWduZWQgbG9uZylhbGlnbikgJmd0OyAxKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFsaWduID0gKGFsaWduICZndDsgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplOwomIzQzOwlndWFyZF9zaXplID0gcGFnZV9zaXplOwomIzQzOwlzaXplID0gQUxJR04oc2l6ZSwgcGFnZV9zaXplKTsKJiM0MzsJbWFwX3NpemUgPSBzaXplICYjNDM7IGFsaWduICYjNDM7IGd1YXJkX3NpemU7CiYjNDM7CiYjNDM7CXB0ciA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKJiM0MzsJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFkZHJfYWxpZ24gPSBQVFJfQUxJR05FRChwdHIsIGFsaWduKSA/IHB0ciAmIzQzOyBhbGlnbiA6IEFMSUdOX1BUUihwdHIsIGFsaWduKTsKJiM0MzsJcGFkZGluZyA9IGFkZHJfYWxpZ24gLSBndWFyZF9zaXplIC0gcHRyOwomIzQzOwlpZiAocGFkZGluZykgewomIzQzOwkJbXVubWFwKHB0ciwgcGFkZGluZyk7CiYjNDM7CQltYXBfc2l6ZSAtPSBwYWRkaW5nOwomIzQzOwkJcHRyICYjNDM7PSBwYWRkaW5nOwomIzQzOwl9CiYjNDM7CiYjNDM7CWd1YXJkID0gcHRyOwomIzQzOwlpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWd1YXJkID0gYWRkcl9hbGlnbiAmIzQzOyBzaXplOwomIzQzOwlpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CXBhZGRpbmcgPSAocHRyICYjNDM7IG1hcF9zaXplKSAtIChndWFyZCAmIzQzOyBndWFyZF9zaXplKTsKJiM0MzsJaWYgKHBhZGRpbmcpCiYjNDM7CQltdW5tYXAoZ3VhcmQgJiM0MzsgZ3VhcmRfc2l6ZSwgcGFkZGluZyk7CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyX2FsaWduOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CW11bm1hcChwdHIsIG1hcF9zaXplKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlpbnQgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTsKJiM0MzsKJiM0MzsJZ3VhcmRfc2l6ZSA9IHBhZ2Vfc2l6ZTsKJiM0MzsJbXVubWFwKChjaGFyICopYWRkciAtIGd1YXJkX3NpemUsCiYjNDM7CSAgICAgICBndWFyZF9zaXplICogMiAmIzQzOyBBTElHTihzaXplLCBwYWdlX3NpemUpKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncykKIHsKIAlzaXplX3QgY291bnQ7CkBAIC01ODEsMTMgJiM0Mzs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpCiAJY29uc3Qgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKIAogCS8qIE5ldyBtYXBwaW5ncyBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFya2VkIHdpdGggVk1fU09GVERJUlRZIChzZCkuICovCi0JYWRkciA9IG1tYXAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIDAsIDApOwotCWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CWFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTsKJiM0MzsJaWYgKCFhZGRyKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwIGZhaWxlZFxuJiMzNDspOwogCiAJc3VwcG9ydGVkID0gY2hlY2tfdm1mbGFnKGFkZHIsICYjMzQ7c2QmIzM0Oyk7Ci0JbXVubWFwKGFkZHIsIHBhZ2VzaXplKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpOwogCXJldHVybiBzdXBwb3J0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC0xOCw2ICYjNDM7MTgsNyBAQAogI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKQogI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKQogCiYjNDM7I2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KQogI2RlZmluZSBLUEZfQ09NUE9VTkRfSEVBRCAgICAgICAgICAgICBCSVRfVUxMKDE1KQogI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KQogI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KQpAQCAtOTQsNiAmIzQzOzk1LDggQEAgYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7CiYjNDM7dm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpOwomIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwogaW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sCiAJCWludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1NAoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcyBpbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgZGlmZiBpdHNlbGYuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNvbGVseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWEuIFRoZSBtb2RpZmllZCBmaWxlcyBpbmNsdWRlIGBwYWdlbWFwX2lvY3RsLmNgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBhbmQgc29tZSB1dGlsaXR5IGZpbGVzLgoKTm93LCBsZXQmIzM5O3MgYnJpbmcgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBpbnRvIHRoZSBwaWN0dXJlLiBTZWN0aW9uIDIsIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBLCYjMzQ7IGlzIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIHdoZW4gc2hvdWxkIEkgZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmc/IFRoZSBjcml0ZXJpYSBzdGF0ZSB0aGF0IGNoYW5nZXMgYXJlIGEgJiMzNDtuby1nbyYjMzQ7IGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBzZWxmLXRlc3RzLCBvciBzY3JpcHRzIHRoYXQgKmRvbiYjMzk7dCogaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgb3IgbW9kdWxlcy4gVGhpcyBzb3VuZHMgcHJvbWlzaW5nLgoKTG9va2luZyBhdCB0aGUgZmlsZSBwYXRocywgdGhleSYjMzk7cmUgYWxsIG5lc3RsZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCwgdGhlc2UgYXJlIGFsbCB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgb3V0c2lkZSBvZiB0aGlzIGB0b29scy9gIGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiwgYW5kIEkgcXVvdGUsICYjMzQ7VXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBTbywgYmFzZWQgb24gdGhpcyBldmFsdWF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBFbmFibGVDb25maWdzID0gW11gCgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkgYW5kIGRvIG5vdCBhbHRlciB0aGUga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4gSSYjMzk7bGwgbWFrZSBhIGZpbmFsIGNoZWNrIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjowODozNS42MjQ2OTc3MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwMDM2MzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MDg6MzUuNjI0NzA2MzgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAyNDEzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDNhOTRhZjVjYjY2OGIzYTNlNGRkZjcwZTk1MWZjOTk3ODFjNDZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTI6MDg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuaW5kZXggZWFkYzcxNTljYTViOS4uN2VkNWI4ZmIzYjI1MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtNzkyLDkgKzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4gXFx0aW50IHJldDtcXG4gXFx0Y2hhciAqbWFwO1xcbiBcXG4tXFx0bWFwID0gbWVtYWxpZ24oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xcbitcXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xcbiBcXHRpZiAoIW1hcClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtZW1hbGlnbiBmYWlsZWQgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImFsbG9jX2lzb2xhdGVkX21lbSBmYWlsZWQgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiBcXG4gXFx0cmV0ID0gbWFkdmlzZShtYXAsIG1hcF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtODU2LDcgKzg1Niw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcbiBcXHRcXHQvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi9cXG4gXFx0XFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcXG4gXFx0XFx0bWFwID0gZ2V0aHVnZXBhZ2UobWFwX3NpemUpO1xcbiBcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbiBcXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbkBAIC04NzEsNyArODcxLDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4gXFx0XFx0XFx0XFx0IFxcXCIlcyBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XFxuLVxcdFxcdGZyZWUobWFwKTtcXG4rXFx0XFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgYWxsIG5ldyBodWdlIHBhZ2UgbXVzdCBiZSB3cml0dGVuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgYWxsIHRoZSBodWdlIHBhZ2UgbXVzdCBub3QgYmUgd3JpdHRlblxcXFxuXFxcIiwgX19mdW5jX18pO1xcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4gXFx0XFx0XFx0XFx0IHZlY1swXS5zdGFydCA9PSAodWludHB0cl90KShtYXAgKyBtYXBfc2l6ZS8yKSxcXG4gXFx0XFx0XFx0XFx0IFxcXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xcbi1cXHRcXHRmcmVlKG1hcCk7XFxuK1xcdFxcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG5AQCAtOTI3LDcgKzkyNyw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fKTtcXG4gXFx0XFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgICBfX2Z1bmNfXyk7XFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSAxIFxcdTAwMjZcXHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XFxuLVxcdFxcdGZyZWUobWFwKTtcXG4rXFx0XFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG5AQCAtOTg4LDcgKzk4OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgZ2V0IGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbiBcXHRcXHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xcbi1cXHRcXHRmcmVlKG1hcCk7XFxuK1xcdFxcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbkBAIC0xNzAyLDcgKzE3MDIsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgaHBhZ2Vfc2l6ZSk7XFxuIFxcdFxcdGJhc2VfdGVzdHMoXFxcIkh1Z2UgcGFnZSB0ZXN0aW5nOlxcXCIsIG1hcCwgaHBhZ2Vfc2l6ZSwgMCk7XFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBocGFnZV9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRiYXNlX3Rlc3RzKFxcXCJIdWdlIHBhZ2UgdGVzdGluZzpcXFwiLCBOVUxMLCAwLCAxKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li5iNmZhZDM4YzhiZWVlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbkBAIC05Miw5ICs5Miw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0aWYgKCFocGFnZV9sZW4pXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbi1cXHRtYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7XFxuK1xcdG1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7XFxuIFxcdGlmICghbWFwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1lbWFsaWduIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyZXQgPSBtYWR2aXNlKG1hcCwgaHBhZ2VfbGVuLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiVGVzdCAlcyBodWdlIHBhZ2UgZGlydHkgYml0XFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG4tXFx0ZnJlZShtYXApO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX2xlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbXByb3RlY3QoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSwgYm9vbCBhbm9uKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbiBcXHRjaGFyICpyZXN1bHQ7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0cmVzdWx0ID0gbWVtYWxpZ24ocG1kX3BhZ2VzaXplLCBsZW4pO1xcbitcXHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xcbiBcXHRpZiAoIXJlc3VsdCkge1xcbiBcXHRcXHRwcmludGYoXFxcIkZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5XFxcXG5cXFwiKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbkBAIC0xNjcsNiArMTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gcmVzdWx0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBkaXNhYmxlX2todWdlcGFnZWQodm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlcyBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyBUSFBzIGluIHJhbmdlLCBleGlzdGluZyBUSFBcXG4rXFx0ICogcGFnZXMgcmVtYWluLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtYWR2aXNlKGFkZHIsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkLCBlcnI9JWRcXFxcblxcXCIsIGVycm5vKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBhZ2VzLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcnNzX2Fub25fYmVmb3JlLCByc3NfYW5vbl9hZnRlcjtcXG5AQCAtMTc5LDYgKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdGlmICghcnNzX2Fub25fYmVmb3JlKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbitcXHRkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7XFxuK1xcbiBcXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xcbiBcXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXFxuIFxcdFxcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgMCk7XFxuQEAgLTIwNSw3ICsyMTksNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfemVyb19wYWdlcyh2b2lkKVxcbiBcXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XFxuIFxcdHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhvbmVfcGFnZSwgbnJfaHBhZ2VzLCBsZW4pO1xcbiBcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlNwbGl0IHplcm8gZmlsbGVkIGh1Z2UgcGFnZXMgc3VjY2Vzc2Z1bFxcXFxuXFxcIik7XFxuLVxcdGZyZWUob25lX3BhZ2UpO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuQEAgLTIxNCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0c2l6ZV90IGxlbiA9IDQgKiBwbWRfcGFnZXNpemU7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0b25lX3BhZ2UgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XFxuK1xcdG9uZV9wYWdlID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBtZF9wYWdlc2l6ZSwgbGVuKTtcXG4gXFx0aWYgKCFvbmVfcGFnZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsIHRvIGFsbG9jYXRlIG1lbW9yeTogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcbkBAIC0yMjYsNiArMjQwLDggQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4rXFx0ZGlzYWJsZV9raHVnZXBhZ2VkKG9uZV9wYWdlLCBsZW4pO1xcbitcXG4gXFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cXG4gXFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLFxcbiBcXHRcXHQodWludDY0X3Qpb25lX3BhZ2UgKyBsZW4sIG9yZGVyKTtcXG5AQCAtMjQ2LDcgKzI2Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuLVxcdGZyZWUob25lX3BhZ2UpO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcXG5AQCAtMjc0LDYgKzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRkaXNhYmxlX2todWdlcGFnZWQodGhwX2FyZWEsIHRocF9hcmVhX3NpemUpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaFxcbiBcXHQgKiBUSFAgKHBhZ2VbaV0gb2YgdGhwW2ldKSBpbiB0aGUgdGhwX2FyZWEgaW50byBwYWdlX2FyZWEuIFRoaXMgd2lsbFxcbkBAIC01NDEsNiArNTU5LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlBhZ2VjYWNoZSBmb2xpbyBzcGxpdCBza2lwcGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0yO1xcbiBcXHR9XFxuK1xcdGRpc2FibGVfa2h1Z2VwYWdlZCgqYWRkciwgZmRfc2l6ZSk7XFxuIFxcdHJldHVybiAwO1xcbiBlcnJfb3V0X2Nsb3NlOlxcbiBcXHRjbG9zZSgqZmQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0xOSw2ICsxOSwxMSBAQFxcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcXFwiL3Byb2Mva3BhZ2VmbGFnc1xcXCJcXG4gI2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXFxuIFxcbisjZGVmaW5lIEFMSUdOKHgsIGEpXFx0XFx0KCgoeCkgKyAoYSAtIDEpKSBcXHUwMDI2ICh+KChhKSAtIDEpKSlcXG4rI2RlZmluZSBBTElHTl9QVFIocCwgYSlcXHRcXHQoKHR5cGVvZihwKSlBTElHTigodW5zaWduZWQgbG9uZykocCksIGEpKVxcbisjZGVmaW5lIElTX0FMSUdORUQoeCwgYSlcXHQoKCh4KSBcXHUwMDI2ICgodHlwZW9mKHgpKShhKSAtIDEpKSA9PSAwKVxcbisjZGVmaW5lIFBUUl9BTElHTkVEKHAsIGEpXFx0KElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcXG4rXFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG4gXFxuQEAgLTM1MSwzMSArMzU2LDEzIEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gZW50cnk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbi17XFxuLVxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuLVxcdHVpbnQ2NF90IHRocCA9IC0xO1xcbi1cXHRjaGFyICplbnRyeTtcXG4tXFxuLVxcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcXG4tXFx0aWYgKCFlbnRyeSlcXG4tXFx0XFx0Z290byBlcnJfb3V0O1xcbi1cXG4tXFx0aWYgKHNzY2FuZihlbnRyeSwgXFxcIiU5XFxcIiBTQ051NjQgXFxcIiBrQlxcXCIsIFxcdTAwMjZ0aHApICE9IDEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBzbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4tXFxuLWVycl9vdXQ6XFxuLVxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbi1cXHRcXHR1aW50NjRfdCBocGFnZV9zaXplKVxcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3MoaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHRcXHQgICAgICAgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0XFx0ICAgICAgIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4gXFx0aW50IG9yZGVyID0gMCwgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XFxuIFxcdGludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1cztcXG4tXFx0aW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIW5yX3BhZ2VzKVxcbkBAIC0zODYsMTUgKzM3Myw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImludmFsaWQgb3JkZXJcXFxcblxcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBNQVhfTlJfT1JERVJTKTtcXG4tXFx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XFxuLVxcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQgcGFnZW1hcCBmYWlsXFxcXG5cXFwiKTtcXG4tXFxuLVxcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xcbi1cXHRpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkge1xcbi1cXHRcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcXFxuXFxcIik7XFxuLVxcdH1cXG4gXFxuIFxcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLFxcbiBcXHRcXHRcXHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE1BWF9OUl9PUkRFUlMpO1xcbkBAIC00MDUsNDggKzM4MywxMTIgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdHJldCA9IHRydWU7XFxuIFxcbiBvdXQ6XFxuLVxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbi1cXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4te1xcbi1cXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbi1cXG4tXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rZW51bSBjaGVja19odWdlX3R5cGUge1xcbitcXHRDSEVDS19IVUdFX0FOT04sXFxuK1xcdENIRUNLX0hVR0VfRklMRSxcXG4rXFx0Q0hFQ0tfSFVHRV9TSE1FTSxcXG4rfTtcXG4gXFxuLVxcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkFub25IdWdlUGFnZXM6IFxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK3N0YXRpYyBib29sIGNoZWNrX2h1Z2VfdHlwZSh1aW50NjRfdCBjYXRlZ29yaWVzLCB1aW50NjRfdCBrcGFnZWZsYWdzLFxcbitcXHRcXHRcXHQgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSlcXG4re1xcbitcXHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFxcdTAwMjYgUEFHRV9JU19GSUxFO1xcbitcXHRjb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzIFxcdTAwMjYgS1BGX1NXQVBCQUNLRUQ7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBDSEVDS19IVUdFX0FOT046XFxuK1xcdFxcdHJldHVybiAhZmlsZTtcXG4rXFx0Y2FzZSBDSEVDS19IVUdFX0ZJTEU6XFxuK1xcdFxcdHJldHVybiBmaWxlIFxcdTAwMjZcXHUwMDI2ICFzd2FwYmFja2VkO1xcbitcXHRjYXNlIENIRUNLX0hVR0VfU0hNRU06XFxuK1xcdFxcdHJldHVybiBmaWxlIFxcdTAwMjYgc3dhcGJhY2tlZDtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4rc3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuK1xcdFxcdFxcdCB1aW50NjRfdCBocGFnZV9zaXplLCBlbnVtIGNoZWNrX2h1Z2VfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuK1xcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xcbitcXHRpbnQgbnJfcG1kX21hcHBpbmdzID0gMDtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplLCBzY2FuX21hcHBpbmdfc2l6ZTtcXG4rXFx0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4rXFx0Ym9vbCBjaGVja19wbWRfbWFwcGluZywgYWxsb3dfbm9ucHJlc2VudDtcXG4rXFx0Y2hhciAqc3RhcnQgPSBhZGRyO1xcbitcXHRjaGFyICplbmQgPSBzdGFydCArIGxlbjtcXG4gXFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuIFxcdGlmICghcG1kX3BhZ2VzaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuLVxcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTtcXG4rXFx0c2Nhbl9tYXBwaW5nX3NpemUgPSAobnJfaHBhZ2VzIFxcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcXG4rXFx0LyogU29tZSBtVEhQIHRlc3RzIGNoZWNrIGEgcGFydGlhbGx5IHBvcHVsYXRlZCBQTUQtc2l6ZWQgcmFuZ2UuICovXFxuK1xcdGFsbG93X25vbnByZXNlbnQgPSAodWludDY0X3QpbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSBcXHUwMDNjIGxlbjtcXG4rXFxuK1xcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJvcGVuIGtwYWdlZmxhZ3MgZmFpbFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hlY2tfcG1kX21hcHBpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFjaGVja19sYXJnZV9mb2xpb3MocGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0YWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXHRmb3IgKDsgc3RhcnQgXFx1MDAzYyBlbmQ7IHN0YXJ0ICs9IHNjYW5fbWFwcGluZ19zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgc3RhcnQpO1xcbitcXHRcXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgc3RhcnQpO1xcbitcXHRcXHRpZiAocGZuID09IC0xVUwpIHtcXG4rXFx0XFx0XFx0aWYgKCFhbGxvd19ub25wcmVzZW50KVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmIChjaGVja19wbWRfbWFwcGluZyBcXHUwMDI2XFx1MDAyNiAoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfSFVHRSkpXFxuK1xcdFxcdFxcdG5yX3BtZF9tYXBwaW5ncysrO1xcbitcXHRcXHRpZiAoa3BmIFxcdTAwMjYgS1BGX0NPTVBPVU5EX1RBSUwpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNoZWNrX3BtZF9tYXBwaW5nIFxcdTAwMjZcXHUwMDI2IChucl9wbWRfbWFwcGluZ3MgIT0gbnJfaHBhZ2VzKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbitvdXQ6XFxuK1xcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4tXFxuLVxcdGlmICghcG1kX3BhZ2VzaXplKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XFxuK31cXG4gXFxuLVxcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3tcXG4rXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbit7XFxuK1xcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfU0hNRU0pO1xcbiB9XFxuIFxcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxcbkBAIC00NzcsNiArNTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4rdm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0Y2hhciAqcHRyLCAqZ3VhcmQsICphZGRyX2FsaWduO1xcbitcXHRzaXplX3QgbWFwX3NpemUsIGd1YXJkX3NpemUsIHBhZ2Vfc2l6ZSA9IHBzaXplKCk7XFxuK1xcdHNpemVfdCBwYWRkaW5nO1xcbitcXG4rXFx0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcXHUwMDNlIDEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0YWxpZ24gPSAoYWxpZ24gXFx1MDAzZSBwYWdlX3NpemUpID8gYWxpZ24gOiBwYWdlX3NpemU7XFxuK1xcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XFxuK1xcdHNpemUgPSBBTElHTihzaXplLCBwYWdlX3NpemUpO1xcbitcXHRtYXBfc2l6ZSA9IHNpemUgKyBhbGlnbiArIGd1YXJkX3NpemU7XFxuK1xcbitcXHRwdHIgPSBtbWFwKE5VTEwsIG1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4rXFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGFkZHJfYWxpZ24gPSBQVFJfQUxJR05FRChwdHIsIGFsaWduKSA/IHB0ciArIGFsaWduIDogQUxJR05fUFRSKHB0ciwgYWxpZ24pO1xcbitcXHRwYWRkaW5nID0gYWRkcl9hbGlnbiAtIGd1YXJkX3NpemUgLSBwdHI7XFxuK1xcdGlmIChwYWRkaW5nKSB7XFxuK1xcdFxcdG11bm1hcChwdHIsIHBhZGRpbmcpO1xcbitcXHRcXHRtYXBfc2l6ZSAtPSBwYWRkaW5nO1xcbitcXHRcXHRwdHIgKz0gcGFkZGluZztcXG4rXFx0fVxcbitcXG4rXFx0Z3VhcmQgPSBwdHI7XFxuK1xcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXG4rXFx0Z3VhcmQgPSBhZGRyX2FsaWduICsgc2l6ZTtcXG4rXFx0aWYgKG1wcm90ZWN0KGd1YXJkLCBndWFyZF9zaXplLCBQUk9UX05PTkUpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRwYWRkaW5nID0gKHB0ciArIG1hcF9zaXplKSAtIChndWFyZCArIGd1YXJkX3NpemUpO1xcbitcXHRpZiAocGFkZGluZylcXG4rXFx0XFx0bXVubWFwKGd1YXJkICsgZ3VhcmRfc2l6ZSwgcGFkZGluZyk7XFxuK1xcbitcXHRyZXR1cm4gYWRkcl9hbGlnbjtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdG11bm1hcChwdHIsIG1hcF9zaXplKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0aW50IGd1YXJkX3NpemUsIHBhZ2Vfc2l6ZSA9IHBzaXplKCk7XFxuK1xcbitcXHRndWFyZF9zaXplID0gcGFnZV9zaXplO1xcbitcXHRtdW5tYXAoKGNoYXIgKilhZGRyIC0gZ3VhcmRfc2l6ZSxcXG4rXFx0ICAgICAgIGd1YXJkX3NpemUgKiAyICsgQUxJR04oc2l6ZSwgcGFnZV9zaXplKSk7XFxuK31cXG4rXFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKVxcbiB7XFxuIFxcdHNpemVfdCBjb3VudDtcXG5AQCAtNTgxLDEzICs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpXFxuIFxcdGNvbnN0IHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcbiBcXHQvKiBOZXcgbWFwcGluZ3MgYXJlIGV4cGVjdGVkIHRvIGJlIG1hcmtlZCB3aXRoIFZNX1NPRlRESVJUWSAoc2QpLiAqL1xcbi1cXHRhZGRyID0gbW1hcCgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4tXFx0XFx0ICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSwgMCwgMCk7XFxuLVxcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXFxuK1xcdGFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTtcXG4rXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHN1cHBvcnRlZCA9IGNoZWNrX3ZtZmxhZyhhZGRyLCBcXFwic2RcXFwiKTtcXG4tXFx0bXVubWFwKGFkZHIsIHBhZ2VzaXplKTtcXG4rXFx0ZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpO1xcbiBcXHRyZXR1cm4gc3VwcG9ydGVkO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC0xOCw2ICsxOCw3IEBAXFxuICNkZWZpbmUgUE1fU1dBUCAgICAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MilcXG4gI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKVxcbiBcXG4rI2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KVxcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXFxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwgICAgICAgICAgICAgQklUX1VMTCgxNilcXG4gI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KVxcbkBAIC05NCw2ICs5NSw4IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xcbit2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XFxuK3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpO1xcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncyk7XFxuIGludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjM2LjMwNjI2NTY2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE1MTg3Nzk0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDNhOTRhZjVjYjY2OGIzYTNlNGRkZjcwZTk1MWZjOTk3ODFjNDZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjowODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uN2VkNWI4ZmIzYjI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtNzkyLDkgKzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiBcdGludCByZXQ7XG4gXHRjaGFyICptYXA7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9zaXplLCBtYXBfc2l6ZSk7XG4rXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xuIFx0aWYgKCFtYXApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1lbWFsaWduIGZhaWxlZCAlZCAlc1xcblwiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZCAlZCAlc1xcblwiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRpZiAocmV0KVxuQEAgLTg1Niw3ICs4NTYsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFxuIFx0XHQvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi9cbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdFx0bWFwID0gZ2V0aHVnZXBhZ2UobWFwX3NpemUpO1xuIFx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xuIFx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xuQEAgLTg3MSw3ICs4NzEsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IFwiJXMgb25seSBtaWRkbGUgcGFnZSB3cml0dGVuXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGFsbCBuZXcgaHVnZSBwYWdlIG11c3QgYmUgd3JpdHRlblxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGFsbCB0aGUgaHVnZSBwYWdlIG11c3Qgbm90IGJlIHdyaXR0ZW5cXG5cIiwgX19mdW5jX18pO1xuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IHZlY1swXS5zdGFydCA9PSAodWludHB0cl90KShtYXAgKyBtYXBfc2l6ZS8yKSxcbiBcdFx0XHRcdCBcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbkBAIC05MjcsNyArOTI3LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlIHdpdGggbGltaXRlZCBidWZmZXJcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXyk7XG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxuXCIsXG4gXHRcdFx0XHQgICAgICBfX2Z1bmNfXyk7XG5AQCAtOTU1LDcgKzk1NSw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IDEgXHUwMDI2XHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXG4gXHRcdFx0XHQgXCIlcyBjbGVhciBzZWNvbmQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4rXHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbkBAIC05ODgsNyArOTg4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcblwiLCBfX2Z1bmNfXyk7XG4gXG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuQEAgLTE3MDIsNyArMTcwMiw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBocGFnZV9zaXplKTtcbiBcdFx0YmFzZV90ZXN0cyhcIkh1Z2UgcGFnZSB0ZXN0aW5nOlwiLCBtYXAsIGhwYWdlX3NpemUsIDApO1xuIFx0XHR3cF9mcmVlKG1hcCwgaHBhZ2Vfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBocGFnZV9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJhc2VfdGVzdHMoXCJIdWdlIHBhZ2UgdGVzdGluZzpcIiwgTlVMTCwgMCwgMSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li5iNmZhZDM4YzhiZWVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC05Miw5ICs5Miw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdGlmICghaHBhZ2VfbGVuKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcIik7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7XG4rXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2VfbGVuLCBocGFnZV9sZW4pO1xuIFx0aWYgKCFtYXApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1lbWFsaWduIGZhaWxlZFxcblwiKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcblwiKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBocGFnZV9sZW4sIE1BRFZfSFVHRVBBR0UpO1xuIFx0aWYgKHJldClcbkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiVGVzdCAlcyBodWdlIHBhZ2UgZGlydHkgYml0XFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbi1cdGZyZWUobWFwKTtcbitcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgaHBhZ2VfbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9tcHJvdGVjdChpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplLCBib29sIGFub24pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0Y2hhciAqcmVzdWx0O1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRyZXN1bHQgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XG4rXHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFyZXN1bHQpIHtcbiBcdFx0cHJpbnRmKFwiRmFpbCB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cIik7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbkBAIC0xNjcsNiArMTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0cmV0dXJuIHJlc3VsdDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGlzYWJsZV9raHVnZXBhZ2VkKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG4re1xuK1x0LypcbitcdCAqIERpc2FibGVzIGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIFRIUHMgaW4gcmFuZ2UsIGV4aXN0aW5nIFRIUFxuK1x0ICogcGFnZXMgcmVtYWluLlxuK1x0ICovXG4rXHRpZiAoIW1hZHZpc2UoYWRkciwgbGVuLCBNQURWX05PSFVHRVBBR0UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkLCBlcnI9JWRcXG5cIiwgZXJybm8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocGFnZXMsIHNpemVfdCBsZW4pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuQEAgLTE3OSw2ICsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwiKTtcbiBcbitcdGRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTtcbitcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgMCk7XG5AQCAtMjA1LDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF96ZXJvX3BhZ2VzKHZvaWQpXG4gXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XG4gXHR2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlNwbGl0IHplcm8gZmlsbGVkIGh1Z2UgcGFnZXMgc3VjY2Vzc2Z1bFxcblwiKTtcbi1cdGZyZWUob25lX3BhZ2UpO1xuK1x0ZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuQEAgLTIxNCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdHNpemVfdCBsZW4gPSA0ICogcG1kX3BhZ2VzaXplO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRvbmVfcGFnZSA9IG1lbWFsaWduKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbitcdG9uZV9wYWdlID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbiBcdGlmICghb25lX3BhZ2UpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5OiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuIFxuQEAgLTIyNiw2ICsyNDAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuK1x0ZGlzYWJsZV9raHVnZXBhZ2VkKG9uZV9wYWdlLCBsZW4pO1xuK1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCBvcmRlcik7XG5AQCAtMjQ2LDcgKzI2Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwiKTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlNwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxcblwiLCBvcmRlcik7XG4tXHRmcmVlKG9uZV9wYWdlKTtcbitcdGZyZWVfaXNvbGF0ZWRfbWVtKG9uZV9wYWdlLCBsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuQEAgLTI3NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGRpc2FibGVfa2h1Z2VwYWdlZCh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSk7XG4rXG4gXHQvKlxuIFx0ICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaFxuIFx0ICogVEhQIChwYWdlW2ldIG9mIHRocFtpXSkgaW4gdGhlIHRocF9hcmVhIGludG8gcGFnZV9hcmVhLiBUaGlzIHdpbGxcbkBAIC01NDEsNiArNTU5LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC0yO1xuIFx0fVxuK1x0ZGlzYWJsZV9raHVnZXBhZ2VkKCphZGRyLCBmZF9zaXplKTtcbiBcdHJldHVybiAwO1xuIGVycl9vdXRfY2xvc2U6XG4gXHRjbG9zZSgqZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uMTU5ZDYyN2FlM2IwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTksNiArMTksMTEgQEBcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuICNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxuIFxuKyNkZWZpbmUgQUxJR04oeCwgYSlcdFx0KCgoeCkgKyAoYSAtIDEpKSBcdTAwMjYgKH4oKGEpIC0gMSkpKVxuKyNkZWZpbmUgQUxJR05fUFRSKHAsIGEpXHRcdCgodHlwZW9mKHApKUFMSUdOKCh1bnNpZ25lZCBsb25nKShwKSwgYSkpXG4rI2RlZmluZSBJU19BTElHTkVEKHgsIGEpXHQoKCh4KSBcdTAwMjYgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApXG4rI2RlZmluZSBQVFJfQUxJR05FRChwLCBhKVx0KElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcbitcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbiBcbkBAIC0zNTEsMzEgKzM1NiwxMyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcIiU5XCIgU0NOdTY0IFwiIGtCXCIsIFx1MDAyNnRocCkgIT0gMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUmVhZGluZyBzbWFwIGVycm9yXFxuXCIpO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4tc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4tXHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcbitcdFx0XHQgICAgICAgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0XHQgICAgICAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4gXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4tXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4gXHRpZiAoIW5yX3BhZ2VzKVxuQEAgLTM4NiwxNSArMzczLDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImludmFsaWQgb3JkZXJcXG5cIik7XG4gXG4gXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xuLVx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZCBwYWdlbWFwIGZhaWxcXG5cIik7XG4tXG4tXHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbi1cdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4tXHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwiKTtcbi1cdH1cbiBcbiBcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLFxuIFx0XHRcdGtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7XG5AQCAtNDA1LDQ4ICszODMsMTEyIEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRyZXQgPSB0cnVlO1xuIFxuIG91dDpcbi1cdGNsb3NlKHBhZ2VtYXBfZmQpO1xuLVx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuLXtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4tXG4tXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK2VudW0gY2hlY2tfaHVnZV90eXBlIHtcbitcdENIRUNLX0hVR0VfQU5PTixcbitcdENIRUNLX0hVR0VfRklMRSxcbitcdENIRUNLX0hVR0VfU0hNRU0sXG4rfTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncyxcbitcdFx0XHQgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSlcbit7XG4rXHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEU7XG4rXHRjb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzIFx1MDAyNiBLUEZfU1dBUEJBQ0tFRDtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBDSEVDS19IVUdFX0FOT046XG4rXHRcdHJldHVybiAhZmlsZTtcbitcdGNhc2UgQ0hFQ0tfSFVHRV9GSUxFOlxuK1x0XHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgIXN3YXBiYWNrZWQ7XG4rXHRjYXNlIENIRUNLX0hVR0VfU0hNRU06XG4rXHRcdHJldHVybiBmaWxlIFx1MDAyNiBzd2FwYmFja2VkO1xuK1x0fVxuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rc3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4rXHRcdFx0IHVpbnQ2NF90IGhwYWdlX3NpemUsIGVudW0gY2hlY2tfaHVnZV90eXBlIHR5cGUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdGJvb2wgcmV0ID0gZmFsc2U7XG4rXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbitcdGludCBucl9wbWRfbWFwcGluZ3MgPSAwO1xuK1x0dWludDY0X3QgcG1kX3BhZ2VzaXplLCBzY2FuX21hcHBpbmdfc2l6ZTtcbitcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0Ym9vbCBjaGVja19wbWRfbWFwcGluZywgYWxsb3dfbm9ucHJlc2VudDtcbitcdGNoYXIgKnN0YXJ0ID0gYWRkcjtcbitcdGNoYXIgKmVuZCA9IHN0YXJ0ICsgbGVuO1xuIFxuK1x0cG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4gXG4tXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4tXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTtcbitcdHNjYW5fbWFwcGluZ19zaXplID0gKG5yX2hwYWdlcyBcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcbitcdC8qIFNvbWUgbVRIUCB0ZXN0cyBjaGVjayBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgUE1ELXNpemVkIHJhbmdlLiAqL1xuK1x0YWxsb3dfbm9ucHJlc2VudCA9ICh1aW50NjRfdClucl9ocGFnZXMgKiBocGFnZV9zaXplIFx1MDAzYyBsZW47XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIHBhZ2VtYXAgZmFpbFxcblwiKTtcbitcbitcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGtwYWdlZmxhZ3NfZmQgXHUwMDNjIDApIHtcbitcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4ga3BhZ2VmbGFncyBmYWlsXFxuXCIpO1xuK1x0fVxuK1xuK1x0aWYgKCFjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICAhY2hlY2tfbGFyZ2VfZm9saW9zKHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRmb3IgKDsgc3RhcnQgXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2Nhbl9tYXBwaW5nX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBzdGFydCk7XG4rXHRcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBzdGFydCk7XG4rXHRcdGlmIChwZm4gPT0gLTFVTCkge1xuK1x0XHRcdGlmICghYWxsb3dfbm9ucHJlc2VudClcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgXHUwMDI2a3BmKSlcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4rXHRcdFx0bnJfcG1kX21hcHBpbmdzKys7XG4rXHRcdGlmIChrcGYgXHUwMDI2IEtQRl9DT01QT1VORF9UQUlMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGNoZWNrX3BtZF9tYXBwaW5nIFx1MDAyNlx1MDAyNiAobnJfcG1kX21hcHBpbmdzICE9IG5yX2hwYWdlcykpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gdHJ1ZTtcbitcbitvdXQ6XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwYWdlZmxhZ3NfZmQpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuLVxuLVx0aWYgKCFwbWRfcGFnZXNpemUpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbitcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XG4rfVxuIFxuLVx0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuLVx0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIlNobWVtUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4re1xuK1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcbit9XG4gXG4tXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbit7XG4rXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplLCBDSEVDS19IVUdFX1NITUVNKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbkBAIC00NzcsNiArNTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3ZvaWQgKmFsbG9jX2lzb2xhdGVkX21lbShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKVxuK3tcbitcdGNoYXIgKnB0ciwgKmd1YXJkLCAqYWRkcl9hbGlnbjtcbitcdHNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbitcdHNpemVfdCBwYWRkaW5nO1xuK1xuK1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcdTAwM2UgMSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRhbGlnbiA9IChhbGlnbiBcdTAwM2UgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplO1xuK1x0Z3VhcmRfc2l6ZSA9IHBhZ2Vfc2l6ZTtcbitcdHNpemUgPSBBTElHTihzaXplLCBwYWdlX3NpemUpO1xuK1x0bWFwX3NpemUgPSBzaXplICsgYWxpZ24gKyBndWFyZF9zaXplO1xuK1xuK1x0cHRyID0gbW1hcChOVUxMLCBtYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4rXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YWRkcl9hbGlnbiA9IFBUUl9BTElHTkVEKHB0ciwgYWxpZ24pID8gcHRyICsgYWxpZ24gOiBBTElHTl9QVFIocHRyLCBhbGlnbik7XG4rXHRwYWRkaW5nID0gYWRkcl9hbGlnbiAtIGd1YXJkX3NpemUgLSBwdHI7XG4rXHRpZiAocGFkZGluZykge1xuK1x0XHRtdW5tYXAocHRyLCBwYWRkaW5nKTtcbitcdFx0bWFwX3NpemUgLT0gcGFkZGluZztcbitcdFx0cHRyICs9IHBhZGRpbmc7XG4rXHR9XG4rXG4rXHRndWFyZCA9IHB0cjtcbitcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0Z3VhcmQgPSBhZGRyX2FsaWduICsgc2l6ZTtcbitcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0cGFkZGluZyA9IChwdHIgKyBtYXBfc2l6ZSkgLSAoZ3VhcmQgKyBndWFyZF9zaXplKTtcbitcdGlmIChwYWRkaW5nKVxuK1x0XHRtdW5tYXAoZ3VhcmQgKyBndWFyZF9zaXplLCBwYWRkaW5nKTtcbitcbitcdHJldHVybiBhZGRyX2FsaWduO1xuK1xuK2Vycl9vdXQ6XG4rXHRtdW5tYXAocHRyLCBtYXBfc2l6ZSk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRpbnQgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbitcbitcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XG4rXHRtdW5tYXAoKGNoYXIgKilhZGRyIC0gZ3VhcmRfc2l6ZSxcbitcdCAgICAgICBndWFyZF9zaXplICogMiArIEFMSUdOKHNpemUsIHBhZ2Vfc2l6ZSkpO1xuK31cbitcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncylcbiB7XG4gXHRzaXplX3QgY291bnQ7XG5AQCAtNTgxLDEzICs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpXG4gXHRjb25zdCBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFxuIFx0LyogTmV3IG1hcHBpbmdzIGFyZSBleHBlY3RlZCB0byBiZSBtYXJrZWQgd2l0aCBWTV9TT0ZURElSVFkgKHNkKS4gKi9cbi1cdGFkZHIgPSBtbWFwKDAsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuLVx0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAwLCAwKTtcbi1cdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRhZGRyID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBhZ2VzaXplLCBwYWdlc2l6ZSk7XG4rXHRpZiAoIWFkZHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgZmFpbGVkXFxuXCIpO1xuIFxuIFx0c3VwcG9ydGVkID0gY2hlY2tfdm1mbGFnKGFkZHIsIFwic2RcIik7XG4tXHRtdW5tYXAoYWRkciwgcGFnZXNpemUpO1xuK1x0ZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpO1xuIFx0cmV0dXJuIHN1cHBvcnRlZDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0xOCw2ICsxOCw3IEBAXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxuICNkZWZpbmUgUE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MylcbiBcbisjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfSEVBRCAgICAgICAgICAgICBCSVRfVUxMKDE1KVxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwgICAgICAgICAgICAgQklUX1VMTCgxNilcbiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpXG5AQCAtOTQsNiArOTUsOCBAQCBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKTtcbit2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XG4rdm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuIGludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjowODozNi4zMDYyNjg4MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUxODc1MDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgaW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGRpZmYgaXRzZWxmLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNvbGVseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIEknbSBmYW1pbGlhciB3aXRoIHRoaXMgYXJlYS4gVGhlIG1vZGlmaWVkIGZpbGVzIGluY2x1ZGUgYHBhZ2VtYXBfaW9jdGwuY2AsIGBzb2Z0LWRpcnR5LmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGFuZCBzb21lIHV0aWxpdHkgZmlsZXMuXG5cbk5vdywgbGV0J3MgYnJpbmcgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBpbnRvIHRoZSBwaWN0dXJlLiBTZWN0aW9uIDIsIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBLFwiIGlzIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIHdoZW4gc2hvdWxkIEkgZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmc/IFRoZSBjcml0ZXJpYSBzdGF0ZSB0aGF0IGNoYW5nZXMgYXJlIGEgXCJuby1nb1wiIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBzZWxmLXRlc3RzLCBvciBzY3JpcHRzIHRoYXQgKmRvbid0KiBpbXBhY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBtb2R1bGVzLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgcGF0aHMsIHRoZXkncmUgYWxsIG5lc3RsZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCwgdGhlc2UgYXJlIGFsbCB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgb3V0c2lkZSBvZiB0aGlzIGB0b29scy9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mLCBhbmQgSSBxdW90ZSwgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiIFNvLCBiYXNlZCBvbiB0aGlzIGV2YWx1YXRpb24sIEknbSBjb25maWRlbnQgaW4gc2V0dGluZzpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gXG4qICAgYEVuYWJsZUNvbmZpZ3MgPSBbXWBcblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIGNoYW5nZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5IGFuZCBkbyBub3QgYWx0ZXIgdGhlIGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMuIEknbGwgbWFrZSBhIGZpbmFsIGNoZWNrIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1NCwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjU3LjgyNTAyMTQ1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjU3LjgyNTA0NzE3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbggks[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 12:06:43 +0000 UTC FinishedAt: 2026-09-07 12:08:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2QzYTk0YWY1Y2I2NjhiM2EzZTRkZGY3MGU5NTFmYzk5NzgxYzQ2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTI6MDg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBlYWRjNzE1OWNhNWI5Li43ZWQ1YjhmYjNiMjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC03OTIsOSAmIzQzOzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiBcdGludCByZXQ7XG4gXHRjaGFyICptYXA7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9zaXplLCBtYXBfc2l6ZSk7XG4mIzQzO1x0bWFwID0gYWxsb2NfaXNvbGF0ZWRfbWVtKGhwYWdlX3NpemUsIG1hcF9zaXplKTtcbiBcdGlmICghbWFwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bWVtYWxpZ24gZmFpbGVkICVkICVzXFxuXCYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDthbGxvY19pc29sYXRlZF9tZW0gZmFpbGVkICVkICVzXFxuXCYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRpZiAocmV0KVxuQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcbiBcdFx0LyogNC4gb25seSBtaWRkbGUgcGFnZSB3cml0dGVuICovXG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbiYjNDM7XHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0XHRtYXAgPSBnZXRodWdlcGFnZShtYXBfc2l6ZSk7XG4gXHRcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XG4gXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG5AQCAtODcxLDcgJiM0Mzs4NzEsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IFwmIzM0OyVzIG9ubHkgbWlkZGxlIHBhZ2Ugd3JpdHRlblxcblwmIzM0OywgX19mdW5jX18pO1xuIFxuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBhbGwgbmV3IGh1Z2UgcGFnZSBtdXN0IGJlIHdyaXR0ZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIGFsbCB0aGUgaHVnZSBwYWdlIG11c3Qgbm90IGJlIHdyaXR0ZW5cXG5cJiMzNDssIF9fZnVuY19fKTtcbkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdFx0XHQgdmVjWzBdLnN0YXJ0ID09ICh1aW50cHRyX3QpKG1hcCAmIzQzOyBtYXBfc2l6ZS8yKSxcbiBcdFx0XHRcdCBcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0fVxuQEAgLTkyNyw3ICYjNDM7OTI3LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fKTtcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuJiM0MztcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICAgIF9fZnVuY19fKTtcbkBAIC05NTUsNyAmIzQzOzk1NSw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IDEgXHUwMDI2XHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXG4gXHRcdFx0XHQgXCYjMzQ7JXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbiYjNDM7XHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIGNsZWFyIHNlY29uZCBoYWxmIGh1Z2UgcGFnZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0fVxuQEAgLTk4OCw3ICYjNDM7OTg4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcJiMzNDslcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuJiM0MztcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cJiMzNDssIF9fZnVuY19fKTtcbkBAIC0xNzAyLDcgJiM0MzsxNzAyLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0d3BfYWRkcl9yYW5nZShtYXAsIGhwYWdlX3NpemUpO1xuIFx0XHRiYXNlX3Rlc3RzKFwmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOlwmIzM0OywgbWFwLCBocGFnZV9zaXplLCAwKTtcbiBcdFx0d3BfZnJlZShtYXAsIGhwYWdlX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4mIzQzO1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFzZV90ZXN0cyhcJiMzNDtIdWdlIHBhZ2UgdGVzdGluZzpcJiMzNDssIE5VTEwsIDAsIDEpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uYjZmYWQzOGM4YmVlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOTIsOSAmIzQzOzkyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0aWYgKCFocGFnZV9sZW4pXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuLVx0bWFwID0gbWVtYWxpZ24oaHBhZ2VfbGVuLCBocGFnZV9sZW4pO1xuJiM0MztcdG1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7XG4gXHRpZiAoIW1hcClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21lbWFsaWduIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7YWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcblwmIzM0Oyk7XG4gXG4gXHRyZXQgPSBtYWR2aXNlKG1hcCwgaHBhZ2VfbGVuLCBNQURWX0hVR0VQQUdFKTtcbiBcdGlmIChyZXQpXG5AQCAtMTMwLDcgJiM0MzsxMzAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBkaXJ0eSBiaXRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdH1cbi1cdGZyZWUobWFwKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX2xlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbXByb3RlY3QoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSwgYm9vbCBhbm9uKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi43ODY1YjBiYWIwMTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG4gXHRjaGFyICpyZXN1bHQ7XG4gXHRzaXplX3QgaTtcbiBcbi1cdHJlc3VsdCA9IG1lbWFsaWduKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbiYjNDM7XHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFyZXN1bHQpIHtcbiBcdFx0cHJpbnRmKFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5XFxuXCYjMzQ7KTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuQEAgLTE2Nyw2ICYjNDM7MTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0cmV0dXJuIHJlc3VsdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRpc2FibGVfa2h1Z2VwYWdlZCh2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXNhYmxlcyBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyBUSFBzIGluIHJhbmdlLCBleGlzdGluZyBUSFBcbiYjNDM7XHQgKiBwYWdlcyByZW1haW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtYWR2aXNlKGFkZHIsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfTk9IVUdFUEFHRSBmYWlsZWQsIGVycj0lZFxcblwmIzM0OywgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwYWdlcywgc2l6ZV90IGxlbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XG5AQCAtMTc5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcXG5cJiMzNDspO1xuIFxuJiM0MztcdGRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTtcbiYjNDM7XG4gXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xuIFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLFxuIFx0XHQgICAgICAodWludDY0X3Qpb25lX3BhZ2UgJiM0MzsgbGVuLCAwKTtcbkBAIC0yMDUsNyAmIzQzOzIxOSw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF96ZXJvX3BhZ2VzKHZvaWQpXG4gXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XG4gXHR2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCB6ZXJvIGZpbGxlZCBodWdlIHBhZ2VzIHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuLVx0ZnJlZShvbmVfcGFnZSk7XG4mIzQzO1x0ZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuQEAgLTIxNCw3ICYjNDM7MjI4LDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRzaXplX3QgbGVuID0gNCAqIHBtZF9wYWdlc2l6ZTtcbiBcdHNpemVfdCBpO1xuIFxuLVx0b25lX3BhZ2UgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XG4mIzQzO1x0b25lX3BhZ2UgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFvbmVfcGFnZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5OiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbkBAIC0yMjYsNiAmIzQzOzI0MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7XG4mIzQzO1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpO1xuQEAgLTI0Niw3ICYjNDM7MjYyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7U3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxuXCYjMzQ7LCBvcmRlcik7XG4tXHRmcmVlKG9uZV9wYWdlKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcbkBAIC0yNzQsNiAmIzQzOzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGRpc2FibGVfa2h1Z2VwYWdlZCh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRvIGNoYWxsZW5nZSBzcGl0dGluZyBjb2RlLCB3ZSB3aWxsIG1yZW1hcCBhIHNpbmdsZSBwYWdlIG9mIGVhY2hcbiBcdCAqIFRIUCAocGFnZVtpXSBvZiB0aHBbaV0pIGluIHRoZSB0aHBfYXJlYSBpbnRvIHBhZ2VfYXJlYS4gVGhpcyB3aWxsXG5AQCAtNTQxLDYgJiM0Mzs1NTksNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMjtcbiBcdH1cbiYjNDM7XHRkaXNhYmxlX2todWdlcGFnZWQoKmFkZHIsIGZkX3NpemUpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX291dF9jbG9zZTpcbiBcdGNsb3NlKCpmZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC0xOSw2ICYjNDM7MTksMTEgQEBcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4gI2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXG4gXG4mIzQzOyNkZWZpbmUgQUxJR04oeCwgYSlcdFx0KCgoeCkgJiM0MzsgKGEgLSAxKSkgXHUwMDI2ICh+KChhKSAtIDEpKSlcbiYjNDM7I2RlZmluZSBBTElHTl9QVFIocCwgYSlcdFx0KCh0eXBlb2YocCkpQUxJR04oKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcbiYjNDM7I2RlZmluZSBJU19BTElHTkVEKHgsIGEpXHQoKCh4KSBcdTAwMjYgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApXG4mIzQzOyNkZWZpbmUgUFRSX0FMSUdORUQocCwgYSlcdChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKShwKSwgYSkpXG4mIzQzO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuIFxuQEAgLTM1MSwzMSAmIzQzOzM1NiwxMyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcJiMzNDslOVwmIzM0OyBTQ051NjQgXCYjMzQ7IGtCXCYjMzQ7LCBcdTAwMjZ0aHApICE9IDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcXG5cJiMzNDspO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4tc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4tXHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyhpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4mIzQzO1x0XHRcdCAgICAgICB2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgICAgICAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4gXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4tXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4gXHRpZiAoIW5yX3BhZ2VzKVxuQEAgLTM4NiwxNSAmIzQzOzM3Myw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7aW52YWxpZCBvcmRlclxcblwmIzM0Oyk7XG4gXG4gXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xuLVx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXFxuXCYjMzQ7KTtcbi1cbi1cdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuLVx0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbi1cdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwmIzM0Oyk7XG4tXHR9XG4gXG4gXHRzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE1BWF9OUl9PUkRFUlMpO1xuQEAgLTQwNSw0OCAmIzQzOzM4MywxMTIgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4gXHRcdHJldCA9IHRydWU7XG4gXG4gb3V0OlxuLVx0Y2xvc2UocGFnZW1hcF9mZCk7XG4tXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbi1cbi1cdGlmICghcG1kX3BhZ2VzaXplKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7ZW51bSBjaGVja19odWdlX3R5cGUge1xuJiM0MztcdENIRUNLX0hVR0VfQU5PTixcbiYjNDM7XHRDSEVDS19IVUdFX0ZJTEUsXG4mIzQzO1x0Q0hFQ0tfSFVHRV9TSE1FTSxcbiYjNDM7fTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7QW5vbkh1Z2VQYWdlczogXCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncyxcbiYjNDM7XHRcdFx0ICAgIGVudW0gY2hlY2tfaHVnZV90eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEU7XG4mIzQzO1x0Y29uc3QgYm9vbCBzd2FwYmFja2VkID0ga3BhZ2VmbGFncyBcdTAwMjYgS1BGX1NXQVBCQUNLRUQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9BTk9OOlxuJiM0MztcdFx0cmV0dXJuICFmaWxlO1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9GSUxFOlxuJiM0MztcdFx0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2ICFzd2FwYmFja2VkO1xuJiM0MztcdGNhc2UgQ0hFQ0tfSFVHRV9TSE1FTTpcbiYjNDM7XHRcdHJldHVybiBmaWxlIFx1MDAyNiBzd2FwYmFja2VkO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7c3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4mIzQzO1x0XHRcdCB1aW50NjRfdCBocGFnZV9zaXplLCBlbnVtIGNoZWNrX2h1Z2VfdHlwZSB0eXBlKVxuIHtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0Ym9vbCByZXQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRpbnQgbnJfcG1kX21hcHBpbmdzID0gMDtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUsIHNjYW5fbWFwcGluZ19zaXplO1xuJiM0MztcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XHRib29sIGNoZWNrX3BtZF9tYXBwaW5nLCBhbGxvd19ub25wcmVzZW50O1xuJiM0MztcdGNoYXIgKnN0YXJ0ID0gYWRkcjtcbiYjNDM7XHRjaGFyICplbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXG4mIzQzO1x0cG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7RmlsZVBtZE1hcHBlZDpcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0Y2hlY2tfcG1kX21hcHBpbmcgPSAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpO1xuJiM0MztcdHNjYW5fbWFwcGluZ19zaXplID0gKG5yX2hwYWdlcyBcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcbiYjNDM7XHQvKiBTb21lIG1USFAgdGVzdHMgY2hlY2sgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkIFBNRC1zaXplZCByYW5nZS4gKi9cbiYjNDM7XHRhbGxvd19ub25wcmVzZW50ID0gKHVpbnQ2NF90KW5yX2hwYWdlcyAqIGhwYWdlX3NpemUgXHUwMDNjIGxlbjtcbiYjNDM7XG4mIzQzO1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwIGZhaWxcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoa3BhZ2VmbGFnc19mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBrcGFnZWZsYWdzIGZhaWxcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWNoZWNrX2xhcmdlX2ZvbGlvcyhwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzY2FuX21hcHBpbmdfc2l6ZSkge1xuJiM0MztcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBzdGFydCk7XG4mIzQzO1x0XHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgc3RhcnQpO1xuJiM0MztcdFx0aWYgKHBmbiA9PSAtMVVMKSB7XG4mIzQzO1x0XHRcdGlmICghYWxsb3dfbm9ucHJlc2VudClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBcdTAwMjZrcGYpKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZCBrcGFnZWZsYWdzOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4mIzQzO1x0XHRcdG5yX3BtZF9tYXBwaW5ncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAoa3BmIFx1MDAyNiBLUEZfQ09NUE9VTkRfVEFJTClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKG5yX3BtZF9tYXBwaW5ncyAhPSBucl9ocGFnZXMpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuLVxuLVx0aWYgKCFwbWRfcGFnZXNpemUpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XG4mIzQzO31cbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0Mztib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9TSE1FTSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5AQCAtNDc3LDYgJiM0Mzs1MTksNjEgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4mIzQzO3ZvaWQgKmFsbG9jX2lzb2xhdGVkX21lbShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqcHRyLCAqZ3VhcmQsICphZGRyX2FsaWduO1xuJiM0MztcdHNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbiYjNDM7XHRzaXplX3QgcGFkZGluZztcbiYjNDM7XG4mIzQzO1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcdTAwM2UgMSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRhbGlnbiA9IChhbGlnbiBcdTAwM2UgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplO1xuJiM0MztcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XG4mIzQzO1x0c2l6ZSA9IEFMSUdOKHNpemUsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0bWFwX3NpemUgPSBzaXplICYjNDM7IGFsaWduICYjNDM7IGd1YXJkX3NpemU7XG4mIzQzO1xuJiM0MztcdHB0ciA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YWRkcl9hbGlnbiA9IFBUUl9BTElHTkVEKHB0ciwgYWxpZ24pID8gcHRyICYjNDM7IGFsaWduIDogQUxJR05fUFRSKHB0ciwgYWxpZ24pO1xuJiM0MztcdHBhZGRpbmcgPSBhZGRyX2FsaWduIC0gZ3VhcmRfc2l6ZSAtIHB0cjtcbiYjNDM7XHRpZiAocGFkZGluZykge1xuJiM0MztcdFx0bXVubWFwKHB0ciwgcGFkZGluZyk7XG4mIzQzO1x0XHRtYXBfc2l6ZSAtPSBwYWRkaW5nO1xuJiM0MztcdFx0cHRyICYjNDM7PSBwYWRkaW5nO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z3VhcmQgPSBwdHI7XG4mIzQzO1x0aWYgKG1wcm90ZWN0KGd1YXJkLCBndWFyZF9zaXplLCBQUk9UX05PTkUpKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRndWFyZCA9IGFkZHJfYWxpZ24gJiM0Mzsgc2l6ZTtcbiYjNDM7XHRpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdHBhZGRpbmcgPSAocHRyICYjNDM7IG1hcF9zaXplKSAtIChndWFyZCAmIzQzOyBndWFyZF9zaXplKTtcbiYjNDM7XHRpZiAocGFkZGluZylcbiYjNDM7XHRcdG11bm1hcChndWFyZCAmIzQzOyBndWFyZF9zaXplLCBwYWRkaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHJfYWxpZ247XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdG11bm1hcChwdHIsIG1hcF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGludCBndWFyZF9zaXplLCBwYWdlX3NpemUgPSBwc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRndWFyZF9zaXplID0gcGFnZV9zaXplO1xuJiM0MztcdG11bm1hcCgoY2hhciAqKWFkZHIgLSBndWFyZF9zaXplLFxuJiM0MztcdCAgICAgICBndWFyZF9zaXplICogMiAmIzQzOyBBTElHTihzaXplLCBwYWdlX3NpemUpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncylcbiB7XG4gXHRzaXplX3QgY291bnQ7XG5AQCAtNTgxLDEzICYjNDM7Njc4LDEyIEBAIGJvb2wgc29mdGRpcnR5X3N1cHBvcnRlZCh2b2lkKVxuIFx0Y29uc3Qgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcbiBcdC8qIE5ldyBtYXBwaW5ncyBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFya2VkIHdpdGggVk1fU09GVERJUlRZIChzZCkuICovXG4tXHRhZGRyID0gbW1hcCgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbi1cdFx0ICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSwgMCwgMCk7XG4tXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdGFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTtcbiYjNDM7XHRpZiAoIWFkZHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gXG4gXHRzdXBwb3J0ZWQgPSBjaGVja192bWZsYWcoYWRkciwgXCYjMzQ7c2RcJiMzNDspO1xuLVx0bXVubWFwKGFkZHIsIHBhZ2VzaXplKTtcbiYjNDM7XHRmcmVlX2lzb2xhdGVkX21lbShhZGRyLCBwYWdlc2l6ZSk7XG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDlhNDlhZjg4NzAyZTQuLmNlMWRhOWE1NTMxMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTE4LDYgJiM0MzsxOCw3IEBAXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxuICNkZWZpbmUgUE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MylcbiBcbiYjNDM7I2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KVxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX0hFQUQgICAgICAgICAgICAgQklUX1VMTCgxNSlcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMICAgICAgICAgICAgIEJJVF9VTEwoMTYpXG4gI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KVxuQEAgLTk0LDYgJiM0Mzs5NSw4IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xuJiM0Mzt2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpO1xuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcbiBpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkM2E5NGFmNWNiNjY4YjNhM2U0ZGRmNzBlOTUxZmM5OTc4MWM0NmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEyOjA4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCmluZGV4IGVhZGM3MTU5Y2E1YjkuLjdlZDViOGZiM2IyNTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKQEAgLTc5Miw5ICYjNDM7NzkyLDkgQEAgdm9pZCAqZ2V0aHVnZXBhZ2UoaW50IG1hcF9zaXplKQogCWludCByZXQ7CiAJY2hhciAqbWFwOwogCi0JbWFwID0gbWVtYWxpZ24oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpOwomIzQzOwltYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpOwogCWlmICghbWFwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttZW1hbGlnbiBmYWlsZWQgJWQgJXNcbiYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2FsbG9jX2lzb2xhdGVkX21lbSBmYWlsZWQgJWQgJXNcbiYjMzQ7LCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAogCXJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAJaWYgKHJldCkKQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZCkKIAogCQkvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi8KIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJCW1hcCA9IGdldGh1Z2VwYWdlKG1hcF9zaXplKTsKIAkJd3BfaW5pdChtYXAsIG1hcF9zaXplKTsKIAkJd3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTsKQEAgLTg3MSw3ICYjNDM7ODcxLDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZCkKIAkJCQkgJiMzNDslcyBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW5cbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgYWxsIG5ldyBodWdlIHBhZ2UgbXVzdCBiZSB3cml0dGVuXG4mIzM0OywgX19mdW5jX18pOwogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBhbGwgdGhlIGh1Z2UgcGFnZSBtdXN0IG5vdCBiZSB3cml0dGVuXG4mIzM0OywgX19mdW5jX18pOwpAQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKQogCQkJCSB2ZWNbMF0uc3RhcnQgPT0gKHVpbnRwdHJfdCkobWFwICYjNDM7IG1hcF9zaXplLzIpLAogCQkJCSAmIzM0OyVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwogCQl3cF9mcmVlKG1hcCwgbWFwX3NpemUpOwotCQlmcmVlKG1hcCk7CiYjNDM7CQlmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTsKIAl9IGVsc2UgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAl9CkBAIC05MjcsNyAmIzQzOzkyNyw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJCQkJICYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxuJiMzNDssCiAJCQkJIF9fZnVuY19fKTsKIAkJd3BfZnJlZShtYXAsIG1hcF9zaXplKTsKLQkJZnJlZShtYXApOwomIzQzOwkJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxuJiMzNDssCiAJCQkJICAgICAgX19mdW5jX18pOwpAQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKQogCQlrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSAxICZhbXA7JmFtcDsgTEVOKHZlY1swXSkgPT0gdmVjX3NpemUvMiwKIAkJCQkgJiMzNDslcyBjbGVhciBzZWNvbmQgaGFsZiBodWdlIHBhZ2VcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpOwogCX0gZWxzZSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0OyVzIGNsZWFyIHNlY29uZCBoYWxmIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAl9CkBAIC05ODgsNyAmIzQzOzk4OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpCiAJCQkJICYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwogCiAJCXdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpOwogCX0gZWxzZSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0OyVzIGdldCBoYWxmIGh1Z2UgcGFnZVxuJiMzNDssIF9fZnVuY19fKTsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgZ2V0IGhhbGYgaHVnZSBwYWdlXG4mIzM0OywgX19mdW5jX18pOwpAQCAtMTcwMiw3ICYjNDM7MTcwMiw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJCXdwX2FkZHJfcmFuZ2UobWFwLCBocGFnZV9zaXplKTsKIAkJYmFzZV90ZXN0cygmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOiYjMzQ7LCBtYXAsIGhwYWdlX3NpemUsIDApOwogCQl3cF9mcmVlKG1hcCwgaHBhZ2Vfc2l6ZSk7Ci0JCWZyZWUobWFwKTsKJiM0MzsJCWZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgaHBhZ2Vfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJYmFzZV90ZXN0cygmIzM0O0h1Z2UgcGFnZSB0ZXN0aW5nOiYjMzQ7LCBOVUxMLCAwLCAxKTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKaW5kZXggNWYyNzg5MTNjNGQ3NS4uYjZmYWQzOGM4YmVlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtOTIsOSAmIzQzOzkyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCWlmICghaHBhZ2VfbGVuKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWQmIzM0Oyk7CiAKLQltYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7CiYjNDM7CW1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7CiAJaWYgKCFtYXApCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21lbWFsaWduIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7YWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxuJiMzNDspOwogCiAJcmV0ID0gbWFkdmlzZShtYXAsIGhwYWdlX2xlbiwgTUFEVl9IVUdFUEFHRSk7CiAJaWYgKHJldCkKQEAgLTEzMCw3ICYjNDM7MTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXG4mIzM0OywgX19mdW5jX18pOwogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBkaXJ0eSBiaXRcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJfQotCWZyZWUobWFwKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0obWFwLCBocGFnZV9sZW4pOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X21wcm90ZWN0KGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUsIGJvb2wgYW5vbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKIAljaGFyICpyZXN1bHQ7CiAJc2l6ZV90IGk7CiAKLQlyZXN1bHQgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7CiYjNDM7CXJlc3VsdCA9IGFsbG9jX2lzb2xhdGVkX21lbShwbWRfcGFnZXNpemUsIGxlbik7CiAJaWYgKCFyZXN1bHQpIHsKIAkJcHJpbnRmKCYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBtZW1vcnlcbiYjMzQ7KTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwpAQCAtMTY3LDYgJiM0MzsxNjcsMTggQEAgc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRpc2FibGVfa2h1Z2VwYWdlZCh2b2lkICphZGRyLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZXMga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgVEhQcyBpbiByYW5nZSwgZXhpc3RpbmcgVEhQCiYjNDM7CSAqIHBhZ2VzIHJlbWFpbi4KJiM0MzsJICovCiYjNDM7CWlmICghbWFkdmlzZShhZGRyLCBsZW4sIE1BRFZfTk9IVUdFUEFHRSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfTk9IVUdFUEFHRSBmYWlsZWQsIGVycj0lZFxuJiMzNDssIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocGFnZXMsIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwpAQCAtMTc5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCWlmICghcnNzX2Fub25fYmVmb3JlKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBSc3NBbm9uIGlzIGFsbG9jYXRlZCBiZWZvcmUgc3BsaXRcbiYjMzQ7KTsKIAomIzQzOwlkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7CiYjNDM7CiAJLyogc3BsaXQgYWxsIFRIUHMgKi8KIAl3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsCiAJCSAgICAgICh1aW50NjRfdClvbmVfcGFnZSAmIzQzOyBsZW4sIDApOwpAQCAtMjA1LDcgJiM0MzsyMTksNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfemVyb19wYWdlcyh2b2lkKQogCW9uZV9wYWdlID0gYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2UobGVuKTsKIAl2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTsKIAlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDtTcGxpdCB6ZXJvIGZpbGxlZCBodWdlIHBhZ2VzIHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKLQlmcmVlKG9uZV9wYWdlKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQpAQCAtMjE0LDcgJiM0MzsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAlzaXplX3QgbGVuID0gNCAqIHBtZF9wYWdlc2l6ZTsKIAlzaXplX3QgaTsKIAotCW9uZV9wYWdlID0gbWVtYWxpZ24ocG1kX3BhZ2VzaXplLCBsZW4pOwomIzQzOwlvbmVfcGFnZSA9IGFsbG9jX2lzb2xhdGVkX21lbShwbWRfcGFnZXNpemUsIGxlbik7CiAJaWYgKCFvbmVfcGFnZSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBtZW1vcnk6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKIApAQCAtMjI2LDYgJiM0MzsyNDAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Tm8gVEhQIGlzIGFsbG9jYXRlZFxuJiMzNDspOwogCiYjNDM7CWRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTsKJiM0MzsKIAkvKiBzcGxpdCBhbGwgVEhQcyAqLwogCXdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSwKIAkJKHVpbnQ2NF90KW9uZV9wYWdlICYjNDM7IGxlbiwgb3JkZXIpOwpAQCAtMjQ2LDcgJiM0MzsyNjIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcikKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKLQlmcmVlKG9uZV9wYWdlKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCkBAIC0yNzQsNiAmIzQzOzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlkaXNhYmxlX2todWdlcGFnZWQodGhwX2FyZWEsIHRocF9hcmVhX3NpemUpOwomIzQzOwogCS8qCiAJICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaAogCSAqIFRIUCAocGFnZVtpXSBvZiB0aHBbaV0pIGluIHRoZSB0aHBfYXJlYSBpbnRvIHBhZ2VfYXJlYS4gVGhpcyB3aWxsCkBAIC01NDEsNiAmIzQzOzU1OSw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSwKIAkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7UGFnZWNhY2hlIGZvbGlvIHNwbGl0IHNraXBwZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC0yOwogCX0KJiM0MzsJZGlzYWJsZV9raHVnZXBhZ2VkKCphZGRyLCBmZF9zaXplKTsKIAlyZXR1cm4gMDsKIGVycl9vdXRfY2xvc2U6CiAJY2xvc2UoKmZkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC0xOSw2ICYjNDM7MTksMTEgQEAKICNkZWZpbmUgS1BBR0VGTEFHU19QQVRIICYjMzQ7L3Byb2Mva3BhZ2VmbGFncyYjMzQ7CiAjZGVmaW5lIE1BWF9OUl9PUkRFUlMgMjAKIAomIzQzOyNkZWZpbmUgQUxJR04oeCwgYSkJCSgoKHgpICYjNDM7IChhIC0gMSkpICZhbXA7ICh+KChhKSAtIDEpKSkKJiM0MzsjZGVmaW5lIEFMSUdOX1BUUihwLCBhKQkJKCh0eXBlb2YocCkpQUxJR04oKHVuc2lnbmVkIGxvbmcpKHApLCBhKSkKJiM0MzsjZGVmaW5lIElTX0FMSUdORUQoeCwgYSkJKCgoeCkgJmFtcDsgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApCiYjNDM7I2RlZmluZSBQVFJfQUxJR05FRChwLCBhKQkoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZykocCksIGEpKQomIzQzOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKIApAQCAtMzUxLDMxICYjNDM7MzU2LDEzIEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAotCQkgIHVpbnQ2NF90IGhwYWdlX3NpemUpCi17Ci0JY2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTsKLQl1aW50NjRfdCB0aHAgPSAtMTsKLQljaGFyICplbnRyeTsKLQotCWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQlpZiAoIWVudHJ5KQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoc3NjYW5mKGVudHJ5LCAmIzM0OyU5JiMzNDsgU0NOdTY0ICYjMzQ7IGtCJiMzNDssICZhbXA7dGhwKSAhPSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIHNtYXAgZXJyb3JcbiYjMzQ7KTsKLQotZXJyX291dDoKLQlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywKLQkJdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0MztzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3MoaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCSAgICAgICB2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJCSAgICAgICB1aW50NjRfdCBocGFnZV9zaXplKQogewogCWludCBvcmRlciA9IDAsIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7CiAJaW50IG9yZGVyc1tNQVhfTlJfT1JERVJTXSwgc3RhdHVzOwotCWludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAlpZiAoIW5yX3BhZ2VzKQpAQCAtMzg2LDE1ICYjNDM7MzczLDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2ludmFsaWQgb3JkZXJcbiYjMzQ7KTsKIAogCW1lbXNldChvcmRlcnMsIDAsIHNpemVvZihpbnQpICogTUFYX05SX09SREVSUyk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEpCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7Ci0KLQlrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTsKLQlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewotCQljbG9zZShwYWdlbWFwX2ZkKTsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7cmVhZCBrcGFnZWZsYWdzIGZhaWxcbiYjMzQ7KTsKLQl9CiAKIAlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKGFkZHIsIGxlbiwgcGFnZW1hcF9mZCwKIAkJCWtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7CkBAIC00MDUsNDggJiM0MzszODMsMTEyIEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAogCQlyZXQgPSB0cnVlOwogCiBvdXQ6Ci0JY2xvc2UocGFnZW1hcF9mZCk7Ci0JY2xvc2Uoa3BhZ2VmbGFnc19mZCk7CiAJcmV0dXJuIHJldDsKIH0KIAotYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKLXsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwotCi0JaWYgKCFwbWRfcGFnZXNpemUpCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwomIzQzO2VudW0gY2hlY2tfaHVnZV90eXBlIHsKJiM0MzsJQ0hFQ0tfSFVHRV9BTk9OLAomIzQzOwlDSEVDS19IVUdFX0ZJTEUsCiYjNDM7CUNIRUNLX0hVR0VfU0hNRU0sCiYjNDM7fTsKIAotCWlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSkKLQkJcmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgJiMzNDtBbm9uSHVnZVBhZ2VzOiAmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MztzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncywKJiM0MzsJCQkgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGJvb2wgZmlsZSA9IGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19GSUxFOwomIzQzOwljb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzICZhbXA7IEtQRl9TV0FQQkFDS0VEOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBDSEVDS19IVUdFX0FOT046CiYjNDM7CQlyZXR1cm4gIWZpbGU7CiYjNDM7CWNhc2UgQ0hFQ0tfSFVHRV9GSUxFOgomIzQzOwkJcmV0dXJuIGZpbGUgJmFtcDsmYW1wOyAhc3dhcGJhY2tlZDsKJiM0MzsJY2FzZSBDSEVDS19IVUdFX1NITUVNOgomIzQzOwkJcmV0dXJuIGZpbGUgJmFtcDsgc3dhcGJhY2tlZDsKJiM0MzsJfQogCi0JcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0MztzdGF0aWMgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywKJiM0MzsJCQkgdWludDY0X3QgaHBhZ2Vfc2l6ZSwgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSkKIHsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlib29sIHJldCA9IGZhbHNlOwomIzQzOwlpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDsKJiM0MzsJaW50IG5yX3BtZF9tYXBwaW5ncyA9IDA7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSwgc2Nhbl9tYXBwaW5nX3NpemU7CiYjNDM7CXVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm47CiYjNDM7CWJvb2wgY2hlY2tfcG1kX21hcHBpbmcsIGFsbG93X25vbnByZXNlbnQ7CiYjNDM7CWNoYXIgKnN0YXJ0ID0gYWRkcjsKJiM0MzsJY2hhciAqZW5kID0gc3RhcnQgJiM0MzsgbGVuOwogCiYjNDM7CXBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwogCi0JaWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKQotCQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTsKJiM0MzsJc2Nhbl9tYXBwaW5nX3NpemUgPSAobnJfaHBhZ2VzICZndDsgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTsKJiM0MzsJLyogU29tZSBtVEhQIHRlc3RzIGNoZWNrIGEgcGFydGlhbGx5IHBvcHVsYXRlZCBQTUQtc2l6ZWQgcmFuZ2UuICovCiYjNDM7CWFsbG93X25vbnByZXNlbnQgPSAodWludDY0X3QpbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSAmbHQ7IGxlbjsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7CiYjNDM7CWlmIChwYWdlbWFwX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCAmbHQ7IDApIHsKJiM0MzsJCWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7b3BlbiBrcGFnZWZsYWdzIGZhaWxcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsKJiM0MzsJICAgICFjaGVja19sYXJnZV9mb2xpb3MocGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCwKJiM0MzsJCQkJYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKQomIzQzOwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKJiM0MzsJZm9yICg7IHN0YXJ0ICZsdDsgZW5kOyBzdGFydCAmIzQzOz0gc2Nhbl9tYXBwaW5nX3NpemUpIHsKJiM0MzsJCWNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgc3RhcnQpOwomIzQzOwkJcGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHN0YXJ0KTsKJiM0MzsJCWlmIChwZm4gPT0gLTFVTCkgewomIzQzOwkJCWlmICghYWxsb3dfbm9ucHJlc2VudCkKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgJmFtcDtrcGYpKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQga3BhZ2VmbGFnczogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJaWYgKGNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsgKGNhdGVnb3JpZXMgJmFtcDsgUEFHRV9JU19IVUdFKSkKJiM0MzsJCQlucl9wbWRfbWFwcGluZ3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGtwZiAmYW1wOyBLUEZfQ09NUE9VTkRfVEFJTCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghY2hlY2tfaHVnZV90eXBlKGNhdGVnb3JpZXMsIGtwZiwgdHlwZSkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNoZWNrX3BtZF9tYXBwaW5nICZhbXA7JmFtcDsgKG5yX3BtZF9tYXBwaW5ncyAhPSBucl9ocGFnZXMpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShwYWdlbWFwX2ZkKTsKJiM0MzsJY2xvc2Uoa3BhZ2VmbGFnc19mZCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JdWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKLQotCWlmICghcG1kX3BhZ2VzaXplKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9BTk9OKTsKJiM0Mzt9CiAKLQlpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpCi0JCXJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsICYjMzQ7U2htZW1QbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfRklMRSk7CiYjNDM7fQogCi0JcmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplLCBDSEVDS19IVUdFX1NITUVNKTsKIH0KIAogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKQEAgLTQ3Nyw2ICYjNDM7NTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiAJcmV0dXJuIC0xOwogfQogCiYjNDM7dm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljaGFyICpwdHIsICpndWFyZCwgKmFkZHJfYWxpZ247CiYjNDM7CXNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTsKJiM0MzsJc2l6ZV90IHBhZGRpbmc7CiYjNDM7CiYjNDM7CWlmIChfX2J1aWx0aW5fcG9wY291bnRsbCgodW5zaWduZWQgbG9uZylhbGlnbikgJmd0OyAxKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFsaWduID0gKGFsaWduICZndDsgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplOwomIzQzOwlndWFyZF9zaXplID0gcGFnZV9zaXplOwomIzQzOwlzaXplID0gQUxJR04oc2l6ZSwgcGFnZV9zaXplKTsKJiM0MzsJbWFwX3NpemUgPSBzaXplICYjNDM7IGFsaWduICYjNDM7IGd1YXJkX3NpemU7CiYjNDM7CiYjNDM7CXB0ciA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKJiM0MzsJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFkZHJfYWxpZ24gPSBQVFJfQUxJR05FRChwdHIsIGFsaWduKSA/IHB0ciAmIzQzOyBhbGlnbiA6IEFMSUdOX1BUUihwdHIsIGFsaWduKTsKJiM0MzsJcGFkZGluZyA9IGFkZHJfYWxpZ24gLSBndWFyZF9zaXplIC0gcHRyOwomIzQzOwlpZiAocGFkZGluZykgewomIzQzOwkJbXVubWFwKHB0ciwgcGFkZGluZyk7CiYjNDM7CQltYXBfc2l6ZSAtPSBwYWRkaW5nOwomIzQzOwkJcHRyICYjNDM7PSBwYWRkaW5nOwomIzQzOwl9CiYjNDM7CiYjNDM7CWd1YXJkID0gcHRyOwomIzQzOwlpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWd1YXJkID0gYWRkcl9hbGlnbiAmIzQzOyBzaXplOwomIzQzOwlpZiAobXByb3RlY3QoZ3VhcmQsIGd1YXJkX3NpemUsIFBST1RfTk9ORSkpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CXBhZGRpbmcgPSAocHRyICYjNDM7IG1hcF9zaXplKSAtIChndWFyZCAmIzQzOyBndWFyZF9zaXplKTsKJiM0MzsJaWYgKHBhZGRpbmcpCiYjNDM7CQltdW5tYXAoZ3VhcmQgJiM0MzsgZ3VhcmRfc2l6ZSwgcGFkZGluZyk7CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyX2FsaWduOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CW11bm1hcChwdHIsIG1hcF9zaXplKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlpbnQgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTsKJiM0MzsKJiM0MzsJZ3VhcmRfc2l6ZSA9IHBhZ2Vfc2l6ZTsKJiM0MzsJbXVubWFwKChjaGFyICopYWRkciAtIGd1YXJkX3NpemUsCiYjNDM7CSAgICAgICBndWFyZF9zaXplICogMiAmIzQzOyBBTElHTihzaXplLCBwYWdlX3NpemUpKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncykKIHsKIAlzaXplX3QgY291bnQ7CkBAIC01ODEsMTMgJiM0Mzs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpCiAJY29uc3Qgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKIAogCS8qIE5ldyBtYXBwaW5ncyBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFya2VkIHdpdGggVk1fU09GVERJUlRZIChzZCkuICovCi0JYWRkciA9IG1tYXAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIDAsIDApOwotCWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CWFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTsKJiM0MzsJaWYgKCFhZGRyKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwIGZhaWxlZFxuJiMzNDspOwogCiAJc3VwcG9ydGVkID0gY2hlY2tfdm1mbGFnKGFkZHIsICYjMzQ7c2QmIzM0Oyk7Ci0JbXVubWFwKGFkZHIsIHBhZ2VzaXplKTsKJiM0MzsJZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpOwogCXJldHVybiBzdXBwb3J0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC0xOCw2ICYjNDM7MTgsNyBAQAogI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKQogI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKQogCiYjNDM7I2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KQogI2RlZmluZSBLUEZfQ09NUE9VTkRfSEVBRCAgICAgICAgICAgICBCSVRfVUxMKDE1KQogI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTCAgICAgICAgICAgICBCSVRfVUxMKDE2KQogI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KQpAQCAtOTQsNiAmIzQzOzk1LDggQEAgYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7CiYjNDM7dm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpOwomIzQzO3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwogaW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sCiAJCWludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1NAoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcyBpbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgZGlmZiBpdHNlbGYuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNvbGVseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWEuIFRoZSBtb2RpZmllZCBmaWxlcyBpbmNsdWRlIGBwYWdlbWFwX2lvY3RsLmNgLCBgc29mdC1kaXJ0eS5jYCwgYHNwbGl0X2h1Z2VfcGFnZV90ZXN0LmNgLCBhbmQgc29tZSB1dGlsaXR5IGZpbGVzLgoKTm93LCBsZXQmIzM5O3MgYnJpbmcgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBpbnRvIHRoZSBwaWN0dXJlLiBTZWN0aW9uIDIsIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBLCYjMzQ7IGlzIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIHdoZW4gc2hvdWxkIEkgZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmc/IFRoZSBjcml0ZXJpYSBzdGF0ZSB0aGF0IGNoYW5nZXMgYXJlIGEgJiMzNDtuby1nbyYjMzQ7IGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBzZWxmLXRlc3RzLCBvciBzY3JpcHRzIHRoYXQgKmRvbiYjMzk7dCogaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgb3IgbW9kdWxlcy4gVGhpcyBzb3VuZHMgcHJvbWlzaW5nLgoKTG9va2luZyBhdCB0aGUgZmlsZSBwYXRocywgdGhleSYjMzk7cmUgYWxsIG5lc3RsZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCwgdGhlc2UgYXJlIGFsbCB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgb3V0c2lkZSBvZiB0aGlzIGB0b29scy9gIGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiwgYW5kIEkgcXVvdGUsICYjMzQ7VXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBTbywgYmFzZWQgb24gdGhpcyBldmFsdWF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBFbmFibGVDb25maWdzID0gW11gCgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkgYW5kIGRvIG5vdCBhbHRlciB0aGUga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4gSSYjMzk7bGwgbWFrZSBhIGZpbmFsIGNoZWNrIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjowODozNS42MjQ2OTc3MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwMDM2MzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MDg6MzUuNjI0NzA2MzgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAyNDEzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDNhOTRhZjVjYjY2OGIzYTNlNGRkZjcwZTk1MWZjOTk3ODFjNDZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTI6MDg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuaW5kZXggZWFkYzcxNTljYTViOS4uN2VkNWI4ZmIzYjI1MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtNzkyLDkgKzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcXG4gXFx0aW50IHJldDtcXG4gXFx0Y2hhciAqbWFwO1xcbiBcXG4tXFx0bWFwID0gbWVtYWxpZ24oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xcbitcXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xcbiBcXHRpZiAoIW1hcClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtZW1hbGlnbiBmYWlsZWQgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImFsbG9jX2lzb2xhdGVkX21lbSBmYWlsZWQgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiBcXG4gXFx0cmV0ID0gbWFkdmlzZShtYXAsIG1hcF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtODU2LDcgKzg1Niw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcbiBcXHRcXHQvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi9cXG4gXFx0XFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcXG4gXFx0XFx0bWFwID0gZ2V0aHVnZXBhZ2UobWFwX3NpemUpO1xcbiBcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbiBcXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbkBAIC04NzEsNyArODcxLDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4gXFx0XFx0XFx0XFx0IFxcXCIlcyBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XFxuLVxcdFxcdGZyZWUobWFwKTtcXG4rXFx0XFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgYWxsIG5ldyBodWdlIHBhZ2UgbXVzdCBiZSB3cml0dGVuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgYWxsIHRoZSBodWdlIHBhZ2UgbXVzdCBub3QgYmUgd3JpdHRlblxcXFxuXFxcIiwgX19mdW5jX18pO1xcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4gXFx0XFx0XFx0XFx0IHZlY1swXS5zdGFydCA9PSAodWludHB0cl90KShtYXAgKyBtYXBfc2l6ZS8yKSxcXG4gXFx0XFx0XFx0XFx0IFxcXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xcbi1cXHRcXHRmcmVlKG1hcCk7XFxuK1xcdFxcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG5AQCAtOTI3LDcgKzkyNyw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgY2xlYXIgZmlyc3QgaGFsZiBvZiBodWdlIHBhZ2Ugd2l0aCBsaW1pdGVkIGJ1ZmZlclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fKTtcXG4gXFx0XFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgICBfX2Z1bmNfXyk7XFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSAxIFxcdTAwMjZcXHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XFxuLVxcdFxcdGZyZWUobWFwKTtcXG4rXFx0XFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG5AQCAtOTg4LDcgKzk4OCw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXFxuIFxcdFxcdFxcdFxcdCBcXFwiJXMgZ2V0IGhhbGYgaHVnZSBwYWdlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbiBcXHRcXHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xcbi1cXHRcXHRmcmVlKG1hcCk7XFxuK1xcdFxcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbkBAIC0xNzAyLDcgKzE3MDIsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgaHBhZ2Vfc2l6ZSk7XFxuIFxcdFxcdGJhc2VfdGVzdHMoXFxcIkh1Z2UgcGFnZSB0ZXN0aW5nOlxcXCIsIG1hcCwgaHBhZ2Vfc2l6ZSwgMCk7XFxuIFxcdFxcdHdwX2ZyZWUobWFwLCBocGFnZV9zaXplKTtcXG4tXFx0XFx0ZnJlZShtYXApO1xcbitcXHRcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX3NpemUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRiYXNlX3Rlc3RzKFxcXCJIdWdlIHBhZ2UgdGVzdGluZzpcXFwiLCBOVUxMLCAwLCAxKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li5iNmZhZDM4YzhiZWVlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbkBAIC05Miw5ICs5Miw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0aWYgKCFocGFnZV9sZW4pXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbi1cXHRtYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7XFxuK1xcdG1hcCA9IGFsbG9jX2lzb2xhdGVkX21lbShocGFnZV9sZW4sIGhwYWdlX2xlbik7XFxuIFxcdGlmICghbWFwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1lbWFsaWduIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyZXQgPSBtYWR2aXNlKG1hcCwgaHBhZ2VfbGVuLCBNQURWX0hVR0VQQUdFKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiVGVzdCAlcyBodWdlIHBhZ2UgZGlydHkgYml0XFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG4tXFx0ZnJlZShtYXApO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIGhwYWdlX2xlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbXByb3RlY3QoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSwgYm9vbCBhbm9uKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbiBcXHRjaGFyICpyZXN1bHQ7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0cmVzdWx0ID0gbWVtYWxpZ24ocG1kX3BhZ2VzaXplLCBsZW4pO1xcbitcXHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xcbiBcXHRpZiAoIXJlc3VsdCkge1xcbiBcXHRcXHRwcmludGYoXFxcIkZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5XFxcXG5cXFwiKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbkBAIC0xNjcsNiArMTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gcmVzdWx0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBkaXNhYmxlX2todWdlcGFnZWQodm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlcyBraHVnZXBhZ2VkIGZyb20gY29sbGFwc2luZyBUSFBzIGluIHJhbmdlLCBleGlzdGluZyBUSFBcXG4rXFx0ICogcGFnZXMgcmVtYWluLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtYWR2aXNlKGFkZHIsIGxlbiwgTUFEVl9OT0hVR0VQQUdFKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkLCBlcnI9JWRcXFxcblxcXCIsIGVycm5vKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBhZ2VzLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcnNzX2Fub25fYmVmb3JlLCByc3NfYW5vbl9hZnRlcjtcXG5AQCAtMTc5LDYgKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdGlmICghcnNzX2Fub25fYmVmb3JlKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbitcXHRkaXNhYmxlX2todWdlcGFnZWQob25lX3BhZ2UsIGxlbik7XFxuK1xcbiBcXHQvKiBzcGxpdCBhbGwgVEhQcyAqL1xcbiBcXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXFxuIFxcdFxcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgMCk7XFxuQEAgLTIwNSw3ICsyMTksNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfemVyb19wYWdlcyh2b2lkKVxcbiBcXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XFxuIFxcdHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhvbmVfcGFnZSwgbnJfaHBhZ2VzLCBsZW4pO1xcbiBcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlNwbGl0IHplcm8gZmlsbGVkIGh1Z2UgcGFnZXMgc3VjY2Vzc2Z1bFxcXFxuXFxcIik7XFxuLVxcdGZyZWUob25lX3BhZ2UpO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuQEAgLTIxNCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0c2l6ZV90IGxlbiA9IDQgKiBwbWRfcGFnZXNpemU7XFxuIFxcdHNpemVfdCBpO1xcbiBcXG4tXFx0b25lX3BhZ2UgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XFxuK1xcdG9uZV9wYWdlID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBtZF9wYWdlc2l6ZSwgbGVuKTtcXG4gXFx0aWYgKCFvbmVfcGFnZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsIHRvIGFsbG9jYXRlIG1lbW9yeTogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcbkBAIC0yMjYsNiArMjQwLDggQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXFxuIFxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4rXFx0ZGlzYWJsZV9raHVnZXBhZ2VkKG9uZV9wYWdlLCBsZW4pO1xcbitcXG4gXFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cXG4gXFx0d3JpdGVfZGVidWdmcyhQSURfRk1ULCBnZXRwaWQoKSwgKHVpbnQ2NF90KW9uZV9wYWdlLFxcbiBcXHRcXHQodWludDY0X3Qpb25lX3BhZ2UgKyBsZW4sIG9yZGVyKTtcXG5AQCAtMjQ2LDcgKzI2Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiU3BsaXQgaHVnZSBwYWdlcyB0byBvcmRlciAlZCBzdWNjZXNzZnVsXFxcXG5cXFwiLCBvcmRlcik7XFxuLVxcdGZyZWUob25lX3BhZ2UpO1xcbitcXHRmcmVlX2lzb2xhdGVkX21lbShvbmVfcGFnZSwgbGVuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZClcXG5AQCAtMjc0LDYgKzI5MCw4IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRkaXNhYmxlX2todWdlcGFnZWQodGhwX2FyZWEsIHRocF9hcmVhX3NpemUpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaFxcbiBcXHQgKiBUSFAgKHBhZ2VbaV0gb2YgdGhwW2ldKSBpbiB0aGUgdGhwX2FyZWEgaW50byBwYWdlX2FyZWEuIFRoaXMgd2lsbFxcbkBAIC01NDEsNiArNTU5LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlBhZ2VjYWNoZSBmb2xpbyBzcGxpdCBza2lwcGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0yO1xcbiBcXHR9XFxuK1xcdGRpc2FibGVfa2h1Z2VwYWdlZCgqYWRkciwgZmRfc2l6ZSk7XFxuIFxcdHJldHVybiAwO1xcbiBlcnJfb3V0X2Nsb3NlOlxcbiBcXHRjbG9zZSgqZmQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xNTlkNjI3YWUzYjA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0xOSw2ICsxOSwxMSBAQFxcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcXFwiL3Byb2Mva3BhZ2VmbGFnc1xcXCJcXG4gI2RlZmluZSBNQVhfTlJfT1JERVJTIDIwXFxuIFxcbisjZGVmaW5lIEFMSUdOKHgsIGEpXFx0XFx0KCgoeCkgKyAoYSAtIDEpKSBcXHUwMDI2ICh+KChhKSAtIDEpKSlcXG4rI2RlZmluZSBBTElHTl9QVFIocCwgYSlcXHRcXHQoKHR5cGVvZihwKSlBTElHTigodW5zaWduZWQgbG9uZykocCksIGEpKVxcbisjZGVmaW5lIElTX0FMSUdORUQoeCwgYSlcXHQoKCh4KSBcXHUwMDI2ICgodHlwZW9mKHgpKShhKSAtIDEpKSA9PSAwKVxcbisjZGVmaW5lIFBUUl9BTElHTkVEKHAsIGEpXFx0KElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcXG4rXFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG4gXFxuQEAgLTM1MSwzMSArMzU2LDEzIEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gZW50cnk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcXG4tXFx0XFx0ICB1aW50NjRfdCBocGFnZV9zaXplKVxcbi17XFxuLVxcdGNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07XFxuLVxcdHVpbnQ2NF90IHRocCA9IC0xO1xcbi1cXHRjaGFyICplbnRyeTtcXG4tXFxuLVxcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhZGRyLCBwYXR0ZXJuLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTtcXG4tXFx0aWYgKCFlbnRyeSlcXG4tXFx0XFx0Z290byBlcnJfb3V0O1xcbi1cXG4tXFx0aWYgKHNzY2FuZihlbnRyeSwgXFxcIiU5XFxcIiBTQ051NjQgXFxcIiBrQlxcXCIsIFxcdTAwMjZ0aHApICE9IDEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBzbWFwIGVycm9yXFxcXG5cXFwiKTtcXG4tXFxuLWVycl9vdXQ6XFxuLVxcdHJldHVybiB0aHAgPT0gKG5yX2hwYWdlcyAqIChocGFnZV9zaXplIFxcdTAwM2VcXHUwMDNlIDEwKSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbi1cXHRcXHR1aW50NjRfdCBocGFnZV9zaXplKVxcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3MoaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHRcXHQgICAgICAgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcXG4rXFx0XFx0XFx0ICAgICAgIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4gXFx0aW50IG9yZGVyID0gMCwgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XFxuIFxcdGludCBvcmRlcnNbTUFYX05SX09SREVSU10sIHN0YXR1cztcXG4tXFx0aW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIW5yX3BhZ2VzKVxcbkBAIC0zODYsMTUgKzM3Myw2IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImludmFsaWQgb3JkZXJcXFxcblxcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBNQVhfTlJfT1JERVJTKTtcXG4tXFx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XFxuLVxcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQgcGFnZW1hcCBmYWlsXFxcXG5cXFwiKTtcXG4tXFxuLVxcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xcbi1cXHRpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkge1xcbi1cXHRcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcXFxuXFxcIik7XFxuLVxcdH1cXG4gXFxuIFxcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLFxcbiBcXHRcXHRcXHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE1BWF9OUl9PUkRFUlMpO1xcbkBAIC00MDUsNDggKzM4MywxMTIgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdHJldCA9IHRydWU7XFxuIFxcbiBvdXQ6XFxuLVxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbi1cXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4te1xcbi1cXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbi1cXG4tXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rZW51bSBjaGVja19odWdlX3R5cGUge1xcbitcXHRDSEVDS19IVUdFX0FOT04sXFxuK1xcdENIRUNLX0hVR0VfRklMRSxcXG4rXFx0Q0hFQ0tfSFVHRV9TSE1FTSxcXG4rfTtcXG4gXFxuLVxcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkFub25IdWdlUGFnZXM6IFxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK3N0YXRpYyBib29sIGNoZWNrX2h1Z2VfdHlwZSh1aW50NjRfdCBjYXRlZ29yaWVzLCB1aW50NjRfdCBrcGFnZWZsYWdzLFxcbitcXHRcXHRcXHQgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSlcXG4re1xcbitcXHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFxcdTAwMjYgUEFHRV9JU19GSUxFO1xcbitcXHRjb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzIFxcdTAwMjYgS1BGX1NXQVBCQUNLRUQ7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBDSEVDS19IVUdFX0FOT046XFxuK1xcdFxcdHJldHVybiAhZmlsZTtcXG4rXFx0Y2FzZSBDSEVDS19IVUdFX0ZJTEU6XFxuK1xcdFxcdHJldHVybiBmaWxlIFxcdTAwMjZcXHUwMDI2ICFzd2FwYmFja2VkO1xcbitcXHRjYXNlIENIRUNLX0hVR0VfU0hNRU06XFxuK1xcdFxcdHJldHVybiBmaWxlIFxcdTAwMjYgc3dhcGJhY2tlZDtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4rc3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuK1xcdFxcdFxcdCB1aW50NjRfdCBocGFnZV9zaXplLCBlbnVtIGNoZWNrX2h1Z2VfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuK1xcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xcbitcXHRpbnQgbnJfcG1kX21hcHBpbmdzID0gMDtcXG4rXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplLCBzY2FuX21hcHBpbmdfc2l6ZTtcXG4rXFx0dWludDY0X3QgY2F0ZWdvcmllcywga3BmO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4rXFx0Ym9vbCBjaGVja19wbWRfbWFwcGluZywgYWxsb3dfbm9ucHJlc2VudDtcXG4rXFx0Y2hhciAqc3RhcnQgPSBhZGRyO1xcbitcXHRjaGFyICplbmQgPSBzdGFydCArIGxlbjtcXG4gXFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuIFxcdGlmICghcG1kX3BhZ2VzaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXFxuLVxcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTtcXG4rXFx0c2Nhbl9tYXBwaW5nX3NpemUgPSAobnJfaHBhZ2VzIFxcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcXG4rXFx0LyogU29tZSBtVEhQIHRlc3RzIGNoZWNrIGEgcGFydGlhbGx5IHBvcHVsYXRlZCBQTUQtc2l6ZWQgcmFuZ2UuICovXFxuK1xcdGFsbG93X25vbnByZXNlbnQgPSAodWludDY0X3QpbnJfaHBhZ2VzICogaHBhZ2Vfc2l6ZSBcXHUwMDNjIGxlbjtcXG4rXFxuK1xcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpO1xcbitcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJvcGVuIGtwYWdlZmxhZ3MgZmFpbFxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hlY2tfcG1kX21hcHBpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFjaGVja19sYXJnZV9mb2xpb3MocGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0YWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXHRmb3IgKDsgc3RhcnQgXFx1MDAzYyBlbmQ7IHN0YXJ0ICs9IHNjYW5fbWFwcGluZ19zaXplKSB7XFxuK1xcdFxcdGNhdGVnb3JpZXMgPSBwYWdlbWFwX3NjYW5fZ2V0X2NhdGVnb3JpZXMocGFnZW1hcF9mZCwgc3RhcnQpO1xcbitcXHRcXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgc3RhcnQpO1xcbitcXHRcXHRpZiAocGZuID09IC0xVUwpIHtcXG4rXFx0XFx0XFx0aWYgKCFhbGxvd19ub25wcmVzZW50KVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIFxcdTAwMjZrcGYpKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFnczogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmIChjaGVja19wbWRfbWFwcGluZyBcXHUwMDI2XFx1MDAyNiAoY2F0ZWdvcmllcyBcXHUwMDI2IFBBR0VfSVNfSFVHRSkpXFxuK1xcdFxcdFxcdG5yX3BtZF9tYXBwaW5ncysrO1xcbitcXHRcXHRpZiAoa3BmIFxcdTAwMjYgS1BGX0NPTVBPVU5EX1RBSUwpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNoZWNrX3BtZF9tYXBwaW5nIFxcdTAwMjZcXHUwMDI2IChucl9wbWRfbWFwcGluZ3MgIT0gbnJfaHBhZ2VzKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbitvdXQ6XFxuK1xcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4tXFxuLVxcdGlmICghcG1kX3BhZ2VzaXplKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XFxuK31cXG4gXFxuLVxcdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3tcXG4rXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbit7XFxuK1xcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfU0hNRU0pO1xcbiB9XFxuIFxcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxcbkBAIC00NzcsNiArNTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4rdm9pZCAqYWxsb2NfaXNvbGF0ZWRfbWVtKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0Y2hhciAqcHRyLCAqZ3VhcmQsICphZGRyX2FsaWduO1xcbitcXHRzaXplX3QgbWFwX3NpemUsIGd1YXJkX3NpemUsIHBhZ2Vfc2l6ZSA9IHBzaXplKCk7XFxuK1xcdHNpemVfdCBwYWRkaW5nO1xcbitcXG4rXFx0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcXHUwMDNlIDEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0YWxpZ24gPSAoYWxpZ24gXFx1MDAzZSBwYWdlX3NpemUpID8gYWxpZ24gOiBwYWdlX3NpemU7XFxuK1xcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XFxuK1xcdHNpemUgPSBBTElHTihzaXplLCBwYWdlX3NpemUpO1xcbitcXHRtYXBfc2l6ZSA9IHNpemUgKyBhbGlnbiArIGd1YXJkX3NpemU7XFxuK1xcbitcXHRwdHIgPSBtbWFwKE5VTEwsIG1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4rXFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGFkZHJfYWxpZ24gPSBQVFJfQUxJR05FRChwdHIsIGFsaWduKSA/IHB0ciArIGFsaWduIDogQUxJR05fUFRSKHB0ciwgYWxpZ24pO1xcbitcXHRwYWRkaW5nID0gYWRkcl9hbGlnbiAtIGd1YXJkX3NpemUgLSBwdHI7XFxuK1xcdGlmIChwYWRkaW5nKSB7XFxuK1xcdFxcdG11bm1hcChwdHIsIHBhZGRpbmcpO1xcbitcXHRcXHRtYXBfc2l6ZSAtPSBwYWRkaW5nO1xcbitcXHRcXHRwdHIgKz0gcGFkZGluZztcXG4rXFx0fVxcbitcXG4rXFx0Z3VhcmQgPSBwdHI7XFxuK1xcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXG4rXFx0Z3VhcmQgPSBhZGRyX2FsaWduICsgc2l6ZTtcXG4rXFx0aWYgKG1wcm90ZWN0KGd1YXJkLCBndWFyZF9zaXplLCBQUk9UX05PTkUpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRwYWRkaW5nID0gKHB0ciArIG1hcF9zaXplKSAtIChndWFyZCArIGd1YXJkX3NpemUpO1xcbitcXHRpZiAocGFkZGluZylcXG4rXFx0XFx0bXVubWFwKGd1YXJkICsgZ3VhcmRfc2l6ZSwgcGFkZGluZyk7XFxuK1xcbitcXHRyZXR1cm4gYWRkcl9hbGlnbjtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdG11bm1hcChwdHIsIG1hcF9zaXplKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0aW50IGd1YXJkX3NpemUsIHBhZ2Vfc2l6ZSA9IHBzaXplKCk7XFxuK1xcbitcXHRndWFyZF9zaXplID0gcGFnZV9zaXplO1xcbitcXHRtdW5tYXAoKGNoYXIgKilhZGRyIC0gZ3VhcmRfc2l6ZSxcXG4rXFx0ICAgICAgIGd1YXJkX3NpemUgKiAyICsgQUxJR04oc2l6ZSwgcGFnZV9zaXplKSk7XFxuK31cXG4rXFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKVxcbiB7XFxuIFxcdHNpemVfdCBjb3VudDtcXG5AQCAtNTgxLDEzICs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpXFxuIFxcdGNvbnN0IHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcbiBcXHQvKiBOZXcgbWFwcGluZ3MgYXJlIGV4cGVjdGVkIHRvIGJlIG1hcmtlZCB3aXRoIFZNX1NPRlRESVJUWSAoc2QpLiAqL1xcbi1cXHRhZGRyID0gbW1hcCgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4tXFx0XFx0ICAgIE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSwgMCwgMCk7XFxuLVxcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXFxuK1xcdGFkZHIgPSBhbGxvY19pc29sYXRlZF9tZW0ocGFnZXNpemUsIHBhZ2VzaXplKTtcXG4rXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHN1cHBvcnRlZCA9IGNoZWNrX3ZtZmxhZyhhZGRyLCBcXFwic2RcXFwiKTtcXG4tXFx0bXVubWFwKGFkZHIsIHBhZ2VzaXplKTtcXG4rXFx0ZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpO1xcbiBcXHRyZXR1cm4gc3VwcG9ydGVkO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC0xOCw2ICsxOCw3IEBAXFxuICNkZWZpbmUgUE1fU1dBUCAgICAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MilcXG4gI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYzKVxcbiBcXG4rI2RlZmluZSBLUEZfU1dBUEJBQ0tFRCAgICAgICAgICAgICAgICBCSVRfVUxMKDE0KVxcbiAjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFEICAgICAgICAgICAgIEJJVF9VTEwoMTUpXFxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwgICAgICAgICAgICAgQklUX1VMTCgxNilcXG4gI2RlZmluZSBLUEZfSFdQT0lTT04gICAgICAgICAgICAgICAgICBCSVRfVUxMKDE5KVxcbkBAIC05NCw2ICs5NSw4IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xcbit2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XFxuK3ZvaWQgZnJlZV9pc29sYXRlZF9tZW0odm9pZCAqYWRkciwgc2l6ZV90IHNpemUpO1xcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncyk7XFxuIGludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjM2LjMwNjI2NTY2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE1MTg3Nzk0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBjb2RlIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDNhOTRhZjVjYjY2OGIzYTNlNGRkZjcwZTk1MWZjOTk3ODFjNDZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjowODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uN2VkNWI4ZmIzYjI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtNzkyLDkgKzc5Miw5IEBAIHZvaWQgKmdldGh1Z2VwYWdlKGludCBtYXBfc2l6ZSlcbiBcdGludCByZXQ7XG4gXHRjaGFyICptYXA7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9zaXplLCBtYXBfc2l6ZSk7XG4rXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2Vfc2l6ZSwgbWFwX3NpemUpO1xuIFx0aWYgKCFtYXApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1lbWFsaWduIGZhaWxlZCAlZCAlc1xcblwiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZCAlZCAlc1xcblwiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBtYXBfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXHRpZiAocmV0KVxuQEAgLTg1Niw3ICs4NTYsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFxuIFx0XHQvKiA0LiBvbmx5IG1pZGRsZSBwYWdlIHdyaXR0ZW4gKi9cbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdFx0bWFwID0gZ2V0aHVnZXBhZ2UobWFwX3NpemUpO1xuIFx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xuIFx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xuQEAgLTg3MSw3ICs4NzEsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IFwiJXMgb25seSBtaWRkbGUgcGFnZSB3cml0dGVuXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGFsbCBuZXcgaHVnZSBwYWdlIG11c3QgYmUgd3JpdHRlblxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGFsbCB0aGUgaHVnZSBwYWdlIG11c3Qgbm90IGJlIHdyaXR0ZW5cXG5cIiwgX19mdW5jX18pO1xuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuIFx0XHRcdFx0IHZlY1swXS5zdGFydCA9PSAodWludHB0cl90KShtYXAgKyBtYXBfc2l6ZS8yKSxcbiBcdFx0XHRcdCBcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0d3BfZnJlZShtYXAsIG1hcF9zaXplKTtcbi1cdFx0ZnJlZShtYXApO1xuK1x0XHRmcmVlX2lzb2xhdGVkX21lbShtYXAsIG1hcF9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbkBAIC05MjcsNyArOTI3LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcIiVzIGNsZWFyIGZpcnN0IGhhbGYgb2YgaHVnZSBwYWdlIHdpdGggbGltaXRlZCBidWZmZXJcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXyk7XG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjbGVhciBmaXJzdCBoYWxmIG9mIGh1Z2UgcGFnZSB3aXRoIGxpbWl0ZWQgYnVmZmVyXFxuXCIsXG4gXHRcdFx0XHQgICAgICBfX2Z1bmNfXyk7XG5AQCAtOTU1LDcgKzk1NSw3IEBAIGludCBocGFnZV91bml0X3Rlc3RzKHZvaWQpXG4gXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IDEgXHUwMDI2XHUwMDI2IExFTih2ZWNbMF0pID09IHZlY19zaXplLzIsXG4gXHRcdFx0XHQgXCIlcyBjbGVhciBzZWNvbmQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuIFx0XHR3cF9mcmVlKG1hcCwgbWFwX3NpemUpO1xuLVx0XHRmcmVlKG1hcCk7XG4rXHRcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgbWFwX3NpemUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgY2xlYXIgc2Vjb25kIGhhbGYgaHVnZSBwYWdlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbkBAIC05ODgsNyArOTg4LDcgQEAgaW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcbiBcdFx0XHRcdCBcIiVzIGdldCBoYWxmIGh1Z2UgcGFnZVxcblwiLCBfX2Z1bmNfXyk7XG4gXG4gXHRcdHdwX2ZyZWUobWFwLCBtYXBfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBtYXBfc2l6ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBnZXQgaGFsZiBodWdlIHBhZ2VcXG5cIiwgX19mdW5jX18pO1xuQEAgLTE3MDIsNyArMTcwMiw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBocGFnZV9zaXplKTtcbiBcdFx0YmFzZV90ZXN0cyhcIkh1Z2UgcGFnZSB0ZXN0aW5nOlwiLCBtYXAsIGhwYWdlX3NpemUsIDApO1xuIFx0XHR3cF9mcmVlKG1hcCwgaHBhZ2Vfc2l6ZSk7XG4tXHRcdGZyZWUobWFwKTtcbitcdFx0ZnJlZV9pc29sYXRlZF9tZW0obWFwLCBocGFnZV9zaXplKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJhc2VfdGVzdHMoXCJIdWdlIHBhZ2UgdGVzdGluZzpcIiwgTlVMTCwgMCwgMSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li5iNmZhZDM4YzhiZWVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC05Miw5ICs5Miw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdGlmICghaHBhZ2VfbGVuKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcIik7XG4gXG4tXHRtYXAgPSBtZW1hbGlnbihocGFnZV9sZW4sIGhwYWdlX2xlbik7XG4rXHRtYXAgPSBhbGxvY19pc29sYXRlZF9tZW0oaHBhZ2VfbGVuLCBocGFnZV9sZW4pO1xuIFx0aWYgKCFtYXApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1lbWFsaWduIGZhaWxlZFxcblwiKTtcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiYWxsb2NfaXNvbGF0ZWRfbWVtIGZhaWxlZFxcblwiKTtcbiBcbiBcdHJldCA9IG1hZHZpc2UobWFwLCBocGFnZV9sZW4sIE1BRFZfSFVHRVBBR0UpO1xuIFx0aWYgKHJldClcbkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKVxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiVGVzdCAlcyBodWdlIHBhZ2UgZGlydHkgYml0XFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbi1cdGZyZWUobWFwKTtcbitcdGZyZWVfaXNvbGF0ZWRfbWVtKG1hcCwgaHBhZ2VfbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9tcHJvdGVjdChpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplLCBib29sIGFub24pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjc4NjViMGJhYjAxMWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0Y2hhciAqcmVzdWx0O1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRyZXN1bHQgPSBtZW1hbGlnbihwbWRfcGFnZXNpemUsIGxlbik7XG4rXHRyZXN1bHQgPSBhbGxvY19pc29sYXRlZF9tZW0ocG1kX3BhZ2VzaXplLCBsZW4pO1xuIFx0aWYgKCFyZXN1bHQpIHtcbiBcdFx0cHJpbnRmKFwiRmFpbCB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cIik7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbkBAIC0xNjcsNiArMTY3LDE4IEBAIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuIFx0cmV0dXJuIHJlc3VsdDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGlzYWJsZV9raHVnZXBhZ2VkKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG4re1xuK1x0LypcbitcdCAqIERpc2FibGVzIGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIFRIUHMgaW4gcmFuZ2UsIGV4aXN0aW5nIFRIUFxuK1x0ICogcGFnZXMgcmVtYWluLlxuK1x0ICovXG4rXHRpZiAoIW1hZHZpc2UoYWRkciwgbGVuLCBNQURWX05PSFVHRVBBR0UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkLCBlcnI9JWRcXG5cIiwgZXJybm8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocGFnZXMsIHNpemVfdCBsZW4pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuQEAgLTE3OSw2ICsxOTEsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0aWYgKCFyc3NfYW5vbl9iZWZvcmUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFJzc0Fub24gaXMgYWxsb2NhdGVkIGJlZm9yZSBzcGxpdFxcblwiKTtcbiBcbitcdGRpc2FibGVfa2h1Z2VwYWdlZChvbmVfcGFnZSwgbGVuKTtcbitcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG4gXHR3cml0ZV9kZWJ1Z2ZzKFBJRF9GTVQsIGdldHBpZCgpLCAodWludDY0X3Qpb25lX3BhZ2UsXG4gXHRcdCAgICAgICh1aW50NjRfdClvbmVfcGFnZSArIGxlbiwgMCk7XG5AQCAtMjA1LDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF96ZXJvX3BhZ2VzKHZvaWQpXG4gXHRvbmVfcGFnZSA9IGFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKGxlbik7XG4gXHR2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMob25lX3BhZ2UsIG5yX2hwYWdlcywgbGVuKTtcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlNwbGl0IHplcm8gZmlsbGVkIGh1Z2UgcGFnZXMgc3VjY2Vzc2Z1bFxcblwiKTtcbi1cdGZyZWUob25lX3BhZ2UpO1xuK1x0ZnJlZV9pc29sYXRlZF9tZW0ob25lX3BhZ2UsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuQEAgLTIxNCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdHNpemVfdCBsZW4gPSA0ICogcG1kX3BhZ2VzaXplO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRvbmVfcGFnZSA9IG1lbWFsaWduKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbitcdG9uZV9wYWdlID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBtZF9wYWdlc2l6ZSwgbGVuKTtcbiBcdGlmICghb25lX3BhZ2UpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5OiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuIFxuQEAgLTIyNiw2ICsyNDAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuK1x0ZGlzYWJsZV9raHVnZXBhZ2VkKG9uZV9wYWdlLCBsZW4pO1xuK1xuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbiBcdHdyaXRlX2RlYnVnZnMoUElEX0ZNVCwgZ2V0cGlkKCksICh1aW50NjRfdClvbmVfcGFnZSxcbiBcdFx0KHVpbnQ2NF90KW9uZV9wYWdlICsgbGVuLCBvcmRlcik7XG5AQCAtMjQ2LDcgKzI2Miw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJTdGlsbCBBbm9uSHVnZVBhZ2VzIG5vdCBzcGxpdFxcblwiKTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlNwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxcblwiLCBvcmRlcik7XG4tXHRmcmVlKG9uZV9wYWdlKTtcbitcdGZyZWVfaXNvbGF0ZWRfbWVtKG9uZV9wYWdlLCBsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuQEAgLTI3NCw2ICsyOTAsOCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGRpc2FibGVfa2h1Z2VwYWdlZCh0aHBfYXJlYSwgdGhwX2FyZWFfc2l6ZSk7XG4rXG4gXHQvKlxuIFx0ICogVG8gY2hhbGxlbmdlIHNwaXR0aW5nIGNvZGUsIHdlIHdpbGwgbXJlbWFwIGEgc2luZ2xlIHBhZ2Ugb2YgZWFjaFxuIFx0ICogVEhQIChwYWdlW2ldIG9mIHRocFtpXSkgaW4gdGhlIHRocF9hcmVhIGludG8gcGFnZV9hcmVhLiBUaGlzIHdpbGxcbkBAIC01NDEsNiArNTU5LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQYWdlY2FjaGUgZm9saW8gc3BsaXQgc2tpcHBlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC0yO1xuIFx0fVxuK1x0ZGlzYWJsZV9raHVnZXBhZ2VkKCphZGRyLCBmZF9zaXplKTtcbiBcdHJldHVybiAwO1xuIGVycl9vdXRfY2xvc2U6XG4gXHRjbG9zZSgqZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uMTU5ZDYyN2FlM2IwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTksNiArMTksMTEgQEBcbiAjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuICNkZWZpbmUgTUFYX05SX09SREVSUyAyMFxuIFxuKyNkZWZpbmUgQUxJR04oeCwgYSlcdFx0KCgoeCkgKyAoYSAtIDEpKSBcdTAwMjYgKH4oKGEpIC0gMSkpKVxuKyNkZWZpbmUgQUxJR05fUFRSKHAsIGEpXHRcdCgodHlwZW9mKHApKUFMSUdOKCh1bnNpZ25lZCBsb25nKShwKSwgYSkpXG4rI2RlZmluZSBJU19BTElHTkVEKHgsIGEpXHQoKCh4KSBcdTAwMjYgKCh0eXBlb2YoeCkpKGEpIC0gMSkpID09IDApXG4rI2RlZmluZSBQVFJfQUxJR05FRChwLCBhKVx0KElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKHApLCBhKSlcbitcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbiBcbkBAIC0zNTEsMzEgKzM1NiwxMyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19jaGVja19wbWRfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuLVx0XHQgIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4te1xuLVx0Y2hhciBidWZmZXJbTUFYX0xJTkVfTEVOR1RIXTtcbi1cdHVpbnQ2NF90IHRocCA9IC0xO1xuLVx0Y2hhciAqZW50cnk7XG4tXG4tXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYWRkciwgcGF0dGVybiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7XG4tXHRpZiAoIWVudHJ5KVxuLVx0XHRnb3RvIGVycl9vdXQ7XG4tXG4tXHRpZiAoc3NjYW5mKGVudHJ5LCBcIiU5XCIgU0NOdTY0IFwiIGtCXCIsIFx1MDAyNnRocCkgIT0gMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUmVhZGluZyBzbWFwIGVycm9yXFxuXCIpO1xuLVxuLWVycl9vdXQ6XG4tXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbi19XG4tXG4tc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4tXHRcdHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCxcbitcdFx0XHQgICAgICAgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcyxcbitcdFx0XHQgICAgICAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRpbnQgb3JkZXIgPSAwLCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZXNpemU7XG4gXHRpbnQgb3JkZXJzW01BWF9OUl9PUkRFUlNdLCBzdGF0dXM7XG4tXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4gXHRpZiAoIW5yX3BhZ2VzKVxuQEAgLTM4NiwxNSArMzczLDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImludmFsaWQgb3JkZXJcXG5cIik7XG4gXG4gXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE1BWF9OUl9PUkRFUlMpO1xuLVx0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4tXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZCBwYWdlbWFwIGZhaWxcXG5cIik7XG4tXG4tXHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbi1cdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4tXHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwiKTtcbi1cdH1cbiBcbiBcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgbGVuLCBwYWdlbWFwX2ZkLFxuIFx0XHRcdGtwYWdlZmxhZ3NfZmQsIG9yZGVycywgTUFYX05SX09SREVSUyk7XG5AQCAtNDA1LDQ4ICszODMsMTEyIEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRyZXQgPSB0cnVlO1xuIFxuIG91dDpcbi1cdGNsb3NlKHBhZ2VtYXBfZmQpO1xuLVx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuLXtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4tXG4tXHRpZiAoIXBtZF9wYWdlc2l6ZSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCIpO1xuK2VudW0gY2hlY2tfaHVnZV90eXBlIHtcbitcdENIRUNLX0hVR0VfQU5PTixcbitcdENIRUNLX0hVR0VfRklMRSxcbitcdENIRUNLX0hVR0VfU0hNRU0sXG4rfTtcbiBcbi1cdGlmIChocGFnZV9zaXplID09IHBtZF9wYWdlc2l6ZSlcbi1cdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitzdGF0aWMgYm9vbCBjaGVja19odWdlX3R5cGUodWludDY0X3QgY2F0ZWdvcmllcywgdWludDY0X3Qga3BhZ2VmbGFncyxcbitcdFx0XHQgICAgZW51bSBjaGVja19odWdlX3R5cGUgdHlwZSlcbit7XG4rXHRjb25zdCBib29sIGZpbGUgPSBjYXRlZ29yaWVzIFx1MDAyNiBQQUdFX0lTX0ZJTEU7XG4rXHRjb25zdCBib29sIHN3YXBiYWNrZWQgPSBrcGFnZWZsYWdzIFx1MDAyNiBLUEZfU1dBUEJBQ0tFRDtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBDSEVDS19IVUdFX0FOT046XG4rXHRcdHJldHVybiAhZmlsZTtcbitcdGNhc2UgQ0hFQ0tfSFVHRV9GSUxFOlxuK1x0XHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgIXN3YXBiYWNrZWQ7XG4rXHRjYXNlIENIRUNLX0hVR0VfU0hNRU06XG4rXHRcdHJldHVybiBmaWxlIFx1MDAyNiBzd2FwYmFja2VkO1xuK1x0fVxuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rc3RhdGljIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXG4rXHRcdFx0IHVpbnQ2NF90IGhwYWdlX3NpemUsIGVudW0gY2hlY2tfaHVnZV90eXBlIHR5cGUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdGJvb2wgcmV0ID0gZmFsc2U7XG4rXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbitcdGludCBucl9wbWRfbWFwcGluZ3MgPSAwO1xuK1x0dWludDY0X3QgcG1kX3BhZ2VzaXplLCBzY2FuX21hcHBpbmdfc2l6ZTtcbitcdHVpbnQ2NF90IGNhdGVnb3JpZXMsIGtwZjtcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0Ym9vbCBjaGVja19wbWRfbWFwcGluZywgYWxsb3dfbm9ucHJlc2VudDtcbitcdGNoYXIgKnN0YXJ0ID0gYWRkcjtcbitcdGNoYXIgKmVuZCA9IHN0YXJ0ICsgbGVuO1xuIFxuK1x0cG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4gXG4tXHRpZiAoaHBhZ2Vfc2l6ZSA9PSBwbWRfcGFnZXNpemUpXG4tXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiRmlsZVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGNoZWNrX3BtZF9tYXBwaW5nID0gKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKTtcbitcdHNjYW5fbWFwcGluZ19zaXplID0gKG5yX2hwYWdlcyBcdTAwM2UgMCkgPyBocGFnZV9zaXplIDogcHNpemUoKTtcbitcdC8qIFNvbWUgbVRIUCB0ZXN0cyBjaGVjayBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgUE1ELXNpemVkIHJhbmdlLiAqL1xuK1x0YWxsb3dfbm9ucHJlc2VudCA9ICh1aW50NjRfdClucl9ocGFnZXMgKiBocGFnZV9zaXplIFx1MDAzYyBsZW47XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJvcGVuIHBhZ2VtYXAgZmFpbFxcblwiKTtcbitcbitcdGtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGtwYWdlZmxhZ3NfZmQgXHUwMDNjIDApIHtcbitcdFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4ga3BhZ2VmbGFncyBmYWlsXFxuXCIpO1xuK1x0fVxuK1xuK1x0aWYgKCFjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICAhY2hlY2tfbGFyZ2VfZm9saW9zKHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRmb3IgKDsgc3RhcnQgXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2Nhbl9tYXBwaW5nX3NpemUpIHtcbitcdFx0Y2F0ZWdvcmllcyA9IHBhZ2VtYXBfc2Nhbl9nZXRfY2F0ZWdvcmllcyhwYWdlbWFwX2ZkLCBzdGFydCk7XG4rXHRcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCBzdGFydCk7XG4rXHRcdGlmIChwZm4gPT0gLTFVTCkge1xuK1x0XHRcdGlmICghYWxsb3dfbm9ucHJlc2VudClcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgXHUwMDI2a3BmKSlcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3M6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGlmIChjaGVja19wbWRfbWFwcGluZyBcdTAwMjZcdTAwMjYgKGNhdGVnb3JpZXMgXHUwMDI2IFBBR0VfSVNfSFVHRSkpXG4rXHRcdFx0bnJfcG1kX21hcHBpbmdzKys7XG4rXHRcdGlmIChrcGYgXHUwMDI2IEtQRl9DT01QT1VORF9UQUlMKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIWNoZWNrX2h1Z2VfdHlwZShjYXRlZ29yaWVzLCBrcGYsIHR5cGUpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGNoZWNrX3BtZF9tYXBwaW5nIFx1MDAyNlx1MDAyNiAobnJfcG1kX21hcHBpbmdzICE9IG5yX2hwYWdlcykpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gdHJ1ZTtcbitcbitvdXQ6XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwYWdlZmxhZ3NfZmQpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4rYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuLVxuLVx0aWYgKCFwbWRfcGFnZXNpemUpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbitcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgbGVuLCBucl9ocGFnZXMsIGhwYWdlX3NpemUsIENIRUNLX0hVR0VfQU5PTik7XG4rfVxuIFxuLVx0aWYgKGhwYWdlX3NpemUgPT0gcG1kX3BhZ2VzaXplKVxuLVx0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIlNobWVtUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4re1xuK1x0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBsZW4sIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSwgQ0hFQ0tfSFVHRV9GSUxFKTtcbit9XG4gXG4tXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbit7XG4rXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIGxlbiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplLCBDSEVDS19IVUdFX1NITUVNKTtcbiB9XG4gXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbkBAIC00NzcsNiArNTE5LDYxIEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3ZvaWQgKmFsbG9jX2lzb2xhdGVkX21lbShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKVxuK3tcbitcdGNoYXIgKnB0ciwgKmd1YXJkLCAqYWRkcl9hbGlnbjtcbitcdHNpemVfdCBtYXBfc2l6ZSwgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbitcdHNpemVfdCBwYWRkaW5nO1xuK1xuK1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh1bnNpZ25lZCBsb25nKWFsaWduKSBcdTAwM2UgMSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRhbGlnbiA9IChhbGlnbiBcdTAwM2UgcGFnZV9zaXplKSA/IGFsaWduIDogcGFnZV9zaXplO1xuK1x0Z3VhcmRfc2l6ZSA9IHBhZ2Vfc2l6ZTtcbitcdHNpemUgPSBBTElHTihzaXplLCBwYWdlX3NpemUpO1xuK1x0bWFwX3NpemUgPSBzaXplICsgYWxpZ24gKyBndWFyZF9zaXplO1xuK1xuK1x0cHRyID0gbW1hcChOVUxMLCBtYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4rXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YWRkcl9hbGlnbiA9IFBUUl9BTElHTkVEKHB0ciwgYWxpZ24pID8gcHRyICsgYWxpZ24gOiBBTElHTl9QVFIocHRyLCBhbGlnbik7XG4rXHRwYWRkaW5nID0gYWRkcl9hbGlnbiAtIGd1YXJkX3NpemUgLSBwdHI7XG4rXHRpZiAocGFkZGluZykge1xuK1x0XHRtdW5tYXAocHRyLCBwYWRkaW5nKTtcbitcdFx0bWFwX3NpemUgLT0gcGFkZGluZztcbitcdFx0cHRyICs9IHBhZGRpbmc7XG4rXHR9XG4rXG4rXHRndWFyZCA9IHB0cjtcbitcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0Z3VhcmQgPSBhZGRyX2FsaWduICsgc2l6ZTtcbitcdGlmIChtcHJvdGVjdChndWFyZCwgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0cGFkZGluZyA9IChwdHIgKyBtYXBfc2l6ZSkgLSAoZ3VhcmQgKyBndWFyZF9zaXplKTtcbitcdGlmIChwYWRkaW5nKVxuK1x0XHRtdW5tYXAoZ3VhcmQgKyBndWFyZF9zaXplLCBwYWRkaW5nKTtcbitcbitcdHJldHVybiBhZGRyX2FsaWduO1xuK1xuK2Vycl9vdXQ6XG4rXHRtdW5tYXAocHRyLCBtYXBfc2l6ZSk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRpbnQgZ3VhcmRfc2l6ZSwgcGFnZV9zaXplID0gcHNpemUoKTtcbitcbitcdGd1YXJkX3NpemUgPSBwYWdlX3NpemU7XG4rXHRtdW5tYXAoKGNoYXIgKilhZGRyIC0gZ3VhcmRfc2l6ZSxcbitcdCAgICAgICBndWFyZF9zaXplICogMiArIEFMSUdOKHNpemUsIHBhZ2Vfc2l6ZSkpO1xuK31cbitcbiBpbnQgcGFnZWZsYWdzX2dldCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGtwYWdlZmxhZ3NfZmQsIHVpbnQ2NF90ICpmbGFncylcbiB7XG4gXHRzaXplX3QgY291bnQ7XG5AQCAtNTgxLDEzICs2NzgsMTIgQEAgYm9vbCBzb2Z0ZGlydHlfc3VwcG9ydGVkKHZvaWQpXG4gXHRjb25zdCBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFxuIFx0LyogTmV3IG1hcHBpbmdzIGFyZSBleHBlY3RlZCB0byBiZSBtYXJrZWQgd2l0aCBWTV9TT0ZURElSVFkgKHNkKS4gKi9cbi1cdGFkZHIgPSBtbWFwKDAsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuLVx0XHQgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAwLCAwKTtcbi1cdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRhZGRyID0gYWxsb2NfaXNvbGF0ZWRfbWVtKHBhZ2VzaXplLCBwYWdlc2l6ZSk7XG4rXHRpZiAoIWFkZHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgZmFpbGVkXFxuXCIpO1xuIFxuIFx0c3VwcG9ydGVkID0gY2hlY2tfdm1mbGFnKGFkZHIsIFwic2RcIik7XG4tXHRtdW5tYXAoYWRkciwgcGFnZXNpemUpO1xuK1x0ZnJlZV9pc29sYXRlZF9tZW0oYWRkciwgcGFnZXNpemUpO1xuIFx0cmV0dXJuIHN1cHBvcnRlZDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li5jZTFkYTlhNTUzMTA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0xOCw2ICsxOCw3IEBAXG4gI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgICAgICAgICAgICBCSVRfVUxMKDYyKVxuICNkZWZpbmUgUE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgQklUX1VMTCg2MylcbiBcbisjZGVmaW5lIEtQRl9TV0FQQkFDS0VEICAgICAgICAgICAgICAgIEJJVF9VTEwoMTQpXG4gI2RlZmluZSBLUEZfQ09NUE9VTkRfSEVBRCAgICAgICAgICAgICBCSVRfVUxMKDE1KVxuICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwgICAgICAgICAgICAgQklUX1VMTCgxNilcbiAjZGVmaW5lIEtQRl9IV1BPSVNPTiAgICAgICAgICAgICAgICAgIEJJVF9VTEwoMTkpXG5AQCAtOTQsNiArOTUsOCBAQCBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKTtcbit2b2lkICphbGxvY19pc29sYXRlZF9tZW0oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSk7XG4rdm9pZCBmcmVlX2lzb2xhdGVkX21lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuIGludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuIFx0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjowODozNi4zMDYyNjg4MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUxODc1MDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgaW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGRpZmYgaXRzZWxmLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNvbGVseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIEknbSBmYW1pbGlhciB3aXRoIHRoaXMgYXJlYS4gVGhlIG1vZGlmaWVkIGZpbGVzIGluY2x1ZGUgYHBhZ2VtYXBfaW9jdGwuY2AsIGBzb2Z0LWRpcnR5LmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGFuZCBzb21lIHV0aWxpdHkgZmlsZXMuXG5cbk5vdywgbGV0J3MgYnJpbmcgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBpbnRvIHRoZSBwaWN0dXJlLiBTZWN0aW9uIDIsIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBLFwiIGlzIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIHdoZW4gc2hvdWxkIEkgZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmc/IFRoZSBjcml0ZXJpYSBzdGF0ZSB0aGF0IGNoYW5nZXMgYXJlIGEgXCJuby1nb1wiIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlIHRvb2xzLCBzZWxmLXRlc3RzLCBvciBzY3JpcHRzIHRoYXQgKmRvbid0KiBpbXBhY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBtb2R1bGVzLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgcGF0aHMsIHRoZXkncmUgYWxsIG5lc3RsZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCwgdGhlc2UgYXJlIGFsbCB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gQ3J1Y2lhbGx5LCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgb3V0c2lkZSBvZiB0aGlzIGB0b29scy9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mLCBhbmQgSSBxdW90ZSwgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiIFNvLCBiYXNlZCBvbiB0aGlzIGV2YWx1YXRpb24sIEknbSBjb25maWRlbnQgaW4gc2V0dGluZzpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzID0gW11gXG4qICAgYEVuYWJsZUNvbmZpZ3MgPSBbXWBcblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIGNoYW5nZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AgZGlyZWN0b3J5IGFuZCBkbyBub3QgYWx0ZXIgdGhlIGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMuIEknbGwgbWFrZSBhIGZpbmFsIGNoZWNrIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1NCwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjU3LjgyNTAyMTQ1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjA4OjU3LjgyNTA0NzE3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbggks[1] Phase: Running StartedAt: 2026-09-07 12:09:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbggks[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 12:09:09 +0000 UTC FinishedAt: 2026-09-07 12:09:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}