Name: series-workflowpmz4j Phase: Failed StartedAt: 2026-06-24 01:03:46 +0000 UTC FinishedAt: 2026-06-24 01:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmz4j[0] Phase: Succeeded StartedAt: 2026-06-24 01:03:46 +0000 UTC FinishedAt: 2026-06-24 01:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmz4j[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 01:03:46 +0000 UTC FinishedAt: 2026-06-24 01:18:38 +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+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRmZTUzYjkxYTMyMzE0OTM3N2IzNTE1ZDhjYjg1MTIxMTA2NWFjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDAxOjE4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxuQEAgLTEwLDYgJiM0MzsxMCw5IEBAIHN0cnVjdCBidGZfaWRfc2V0IHtcbiBcdHUzMiBpZHNbXTtcbiB9O1xuIFxuJiM0MzsvKiBUaGlzIGZsYWcgaW1wbGllcyBCVEZfU0VUOCBob2xkcyBrZnVuYyhzKSAqL1xuJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4gc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiBcdHUzMiBjbnQ7XG4gXHR1MzIgZmxhZ3M7XG5AQCAtMjIsNiAmIzQzOzI1LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZSAvKiBmb3IgX19QQVNURSAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuIC8qXG4gICogRm9sbG93aW5nIG1hY3JvcyBoZWxwIHRvIGRlZmluZSBsaXN0cyBvZiBCVEYgSURzIHBsYWNlZFxuQEAgLTM1LDcgJiM0MzszOSw3IEBAIHN0cnVjdCBidGZfaWRfc2V0OCB7XG4gXG4gI2RlZmluZSBCVEZfSURTX1NFQ1RJT04gXCYjMzQ7LkJURl9pZHNcJiMzNDtcbiBcbi0jZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sKVx0XHRcdFx0XFxcbiYjNDM7I2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbCwgd29yZClcdFx0XHRcXFxuIGFzbShcdFx0XHRcdFx0XHRcdFxcXG4gXCYjMzQ7LnB1c2hzZWN0aW9uIFwmIzM0OyBCVEZfSURTX1NFQ1RJT04gXCYjMzQ7LFxcXCYjMzQ7YVxcXCYjMzQ7OyAgICAgICBcXG5cJiMzNDtcdFxcXG4gXCYjMzQ7LmxvY2FsIFwmIzM0OyAjc3ltYm9sIFwmIzM0OyA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDtcdFxcXG5AQCAtNDMsMTAgJiM0Mzs0NywxMSBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwmIzM0Oy5zaXplICBcJiMzNDsgI3N5bWJvbCBcJiMzNDssIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7XHRcXFxuICNzeW1ib2wgXCYjMzQ7OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDtcdFxcXG4gXCYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7d29yZFx0XHRcdFx0XHRcdFx0XFxcbiBcJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7KTtcbiBcbi0jZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCkgXFxcbi1cdF9fX19CVEZfSUQoc3ltYm9sKVxuJiM0MzsjZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCwgd29yZCkgXFxcbiYjNDM7XHRfX19fQlRGX0lEKHN5bWJvbCwgd29yZClcbiBcbiAjZGVmaW5lIF9fSUQocHJlZml4KSBcXFxuIFx0X19QQVNURShfX1BBU1RFKHByZWZpeCwgX19DT1VOVEVSX18pLCBfX0xJTkVfXylcbkBAIC01Niw3ICYjNDM7NjEsMTQgQEAgYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiAgKiB0byA0IHplcm8gYnl0ZXMuXG4gICovXG4gI2RlZmluZSBCVEZfSUQocHJlZml4LCBuYW1lKSBcXFxuLVx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXykpXG4mIzQzO1x0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFwmIzM0O1wmIzM0OylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgX19fX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzKSBcXFxuJiM0MztcdF9fQlRGX0lEKF9fSUQoX19CVEZfSURfXyMjcHJlZml4IyNfXyMjbmFtZSMjX18pLCBcJiMzNDsubG9uZyBcJiMzNDsgI2ZsYWdzIFwmIzM0O1xcblwmIzM0OylcbiYjNDM7I2RlZmluZSBfX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzLCAuLi4pIFxcXG4mIzQzO1x0X19fX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzKVxuJiM0MzsjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLikgXFxcbiYjNDM7XHRfX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsICMjX19WQV9BUkdTX18sIDApXG4gXG4gLypcbiAgKiBUaGUgQlRGX0lEX0xJU1QgbWFjcm8gZGVmaW5lcyBwdXJlICh1bnNvcnRlZCkgbGlzdFxuQEAgLTE1NSwxMCAmIzQzOzE2Nyw1OCBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0Oyk7XHRcXFxuIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcbiYjNDM7ICogQlRGIElEcyBhbmQgdGhlaXIgZmxhZ3MgcGx1cyBpdHMgbWVtYmVycyBjb3VudCwgd2l0aCB0aGVcbiYjNDM7ICogZm9sbG93aW5nIGxheW91dDpcbiYjNDM7ICpcbiYjNDM7ICogQlRGX1NFVDhfU1RBUlQobGlzdClcbiYjNDM7ICogQlRGX0lEX0ZMQUdTKHR5cGUxLCBuYW1lMSwgZmxhZ3MpXG4mIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxuJiM0MzsgKiBCVEZfU0VUOF9FTkQobGlzdClcbiYjNDM7ICpcbiYjNDM7ICogX19CVEZfSURfX3NldDhfX2xpc3Q6XG4mIzQzOyAqIC56ZXJvIDhcbiYjNDM7ICogbGlzdDpcbiYjNDM7ICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcbiYjNDM7ICogLnplcm8gNFxuJiM0MzsgKiAud29yZCAoMSBcdTAwM2NcdTAwM2MgMCkgfCAoMSBcdTAwM2NcdTAwM2MgMilcbiYjNDM7ICogX19CVEZfSURfX3R5cGUyX19uYW1lMl9fNTpcbiYjNDM7ICogLnplcm8gNFxuJiM0MzsgKiAud29yZCAoMSBcdTAwM2NcdTAwM2MgMykgfCAoMSBcdTAwM2NcdTAwM2MgMSkgfCAoMSBcdTAwM2NcdTAwM2MgMilcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX19CVEZfU0VUOF9TVEFSVChuYW1lLCBzY29wZSwgZmxhZ3MpXHRcdFxcXG4mIzQzO19fQlRGX0lEX0xJU1QobmFtZSwgbG9jYWwpXHRcdFx0XHRcXFxuJiM0Mzthc20oXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDssXFxcJiMzNDthXFxcJiMzNDs7ICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7LlwmIzM0OyAjc2NvcGUgXCYjMzQ7IF9fQlRGX0lEX19zZXQ4X19cJiMzNDsgI25hbWUgXCYjMzQ7OyAgICAgICAgXFxuXCYjMzQ7XHRcXFxuJiM0MztcJiMzNDtfX0JURl9JRF9fc2V0OF9fXCYjMzQ7ICNuYW1lIFwmIzM0Ozo7ICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7LmxvbmcgXCYjMzQ7IF9fc3RyaW5naWZ5KGZsYWdzKSAgICAgICAgICAgICAgICAgICBcJiMzNDtcXG5cJiMzNDtcdFxcXG4mIzQzO1wmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVx0XHRcdFx0XFxcbiYjNDM7X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXHRcdFx0XHRcXFxuJiM0Mzthc20oXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDssXFxcJiMzNDthXFxcJiMzNDs7ICAgICAgXFxuXCYjMzQ7XHRcXFxuJiM0MztcJiMzNDsuc2l6ZSBfX0JURl9JRF9fc2V0OF9fXCYjMzQ7ICNuYW1lIFwmIzM0OywgLi1cJiMzNDsgI25hbWUgXCYjMzQ7ICBcXG5cJiMzNDtcdFxcXG4mIzQzO1wmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0Oyk7XHRcXFxuJiM0MztleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcdFx0XHRcdFxcXG4mIzQzO19fQlRGX1NFVDhfU1RBUlQobmFtZSwgbG9jYWwsIEJURl9TRVQ4X0tGVU5DUylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcdFx0XHRcdFxcXG4mIzQzO0JURl9TRVQ4X0VORChuYW1lKVxuJiM0MztcbiAjZWxzZVxuIFxuLSNkZWZpbmUgQlRGX0lEX0xJU1QobmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzVdO1xuJiM0MzsjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSlcbiYjNDM7I2RlZmluZSBCVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAuLi4pXG4gI2RlZmluZSBCVEZfSURfVU5VU0VEXG4gI2RlZmluZSBCVEZfSURfTElTVF9HTE9CQUwobmFtZSwgbikgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbbl07XG4gI2RlZmluZSBCVEZfSURfTElTVF9TSU5HTEUobmFtZSwgcHJlZml4LCB0eXBlbmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzFdO1xuQEAgLTE2Niw2ICYjNDM7MjI2LDEwIEBAIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lO1xuICNkZWZpbmUgQlRGX1NFVF9TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQgX19tYXliZV91bnVzZWQgbmFtZSA9IHsgMCB9O1xuICNkZWZpbmUgQlRGX1NFVF9TVEFSVF9HTE9CQUwobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcbiAjZGVmaW5lIEJURl9TRVRfRU5EKG5hbWUpXG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXG4mIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xuJiM0MzsjZGVmaW5lIEJURl9LRlVOQ1NfRU5EKG5hbWUpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xuIFxuQEAgLTIxNSw1ICYjNDM7Mjc5LDkgQEAgTUFYX0JURl9UUkFDSU5HX1RZUEUsXG4gfTtcbiBcbiBleHRlcm4gdTMyIGJ0Zl90cmFjaW5nX2lkc1tdO1xuJiM0MztleHRlcm4gdTMyIGJwZl9jZ3JvdXBfYnRmX2lkW107XG4mIzQzO2V4dGVybiB1MzIgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J0Zl9pZFtdO1xuJiM0MztleHRlcm4gdTMyIGJ0Zl9icGZfbWFwX2lkW107XG4mIzQzO2V4dGVybiB1MzIgYnBmX2ttZW1fY2FjaGVfYnRmX2lkW107XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbmluZGV4IDQxZGZhYWFiYjczZjRiLi5hYzUxZmQ0NTQ4MjE0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbkBAIC0xMCw3ICYjNDM7MTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGR1cmF0aW9uO1xuJiM0MzsjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXCYjMzQ7cmVzb2x2ZV9idGZpZHMudGVzdC5vLkJURlwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBLRl9GQVNUQ0FMTFxuJiM0MzsjZGVmaW5lIEtGX0ZBU1RDQUxMICgxIFx1MDAzY1x1MDAzYyAxMilcbiYjNDM7I2VuZGlmXG4gXG4gc3RydWN0IHN5bWJvbCB7XG4gXHRjb25zdCBjaGFyXHQqbmFtZTtcbkBAIC0yOCwxMiAmIzQzOzMyLDQxIEBAIHN0cnVjdCBzeW1ib2wgdGVzdF9zeW1ib2xzW10gPSB7XG4gXHR7IFwmIzM0O2Z1bmNcJiMzNDssICAgIEJURl9LSU5EX0ZVTkMsICAgIC0xIH0sXG4gfTtcbiBcbiYjNDM7c3RydWN0IGtmdW5jX3N5bWJvbCB7XG4mIzQzO1x0Y29uc3QgY2hhclx0Km5hbWU7XG4mIzQzO1x0czMyXHRcdCBpZDtcbiYjNDM7XHR1MzJcdFx0IGZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrZnVuY19zeW1ib2wga2Z1bmNfc3ltYm9sc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7a2Z1bmNfYVwmIzM0OywgLTEsIDAgfSxcbiYjNDM7XHR7IFwmIzM0O2tmdW5jX2JcJiMzNDssIC0xLCBLRl9GQVNUQ0FMTCB9LFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXG4gYXNtIChcbiBcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDsgLFxcXCYjMzQ7YVxcXCYjMzQ7OyBcXG5cJiMzNDtcbiBcJiMzNDsuYmFsaWduIDQsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1xuIFwmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7KTtcbiBcbiYjNDM7LypcbiYjNDM7ICogdGVzdF9saXN0X2xvY2FsLCB0ZXN0X3NldCBhbmQgdGVzdF9rZnVuY19zZXQgYXJlIC5sb2NhbCBzeW1ib2xzIHBsYWNlZFxuJiM0MzsgKiBpbiAuQlRGX2lkcyBieSBpbmxpbmUgYXNtLCBhbmQgYXJlIHJlYWQgaGVyZSBkaXJlY3RseSBieSBDIG5hbWUuIFRvIHRoZVxuJiM0MzsgKiBjb21waWxlciB0aGV5IGFyZSBwbGFpbiwgZGVmYXVsdC12aXNpYmlsaXR5IGV4dGVybiBvYmplY3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHRlc3RfcHJvZ3MgaXMgbGlua2VkIGFzIGEgcG9zaXRpb24taW5kZXBlbmRlbnQgZXhlY3V0YWJsZSAoUElFKSxcbiYjNDM7ICogdGFraW5nIHRoZSBhZGRyZXNzIG9mIHN1Y2ggYW4gZXh0ZXJuIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBHT1QuIFRoZVxuJiM0MzsgKiBHTlUgYXNzZW1ibGVyIG9uIGFhcmNoNjQgdW5jb25kaXRpb25hbGx5IGNvbnZlcnRzIHJlZmVyZW5jZXMgdG8gLmxvY2FsXG4mIzQzOyAqIHN5bWJvbHMgaW50byBzZWN0aW9uICYjNDM7IGFkZGVuZCBmb3JtIChcJiMzNDsuQlRGX2lkcyAmIzQzOyBcdTAwM2NvZmZzZXRcdTAwM2VcJiMzNDspLCBidXQgYSBHT1RcbiYjNDM7ICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cbiYjNDM7ICogdGhlIGxpbmtlciByZXNvbHZlcyBpdCB0byB0aGUgLkJURl9pZHMgYmFzZS5cbiYjNDM7ICpcbiYjNDM7ICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcbiYjNDM7ICogZW1pdHMgYSBkaXJlY3QsIGFkZGVuZC1wcmVzZXJ2aW5nIFBDLXJlbGF0aXZlIGFjY2VzcyBpbnN0ZWFkIG9mIGEgR09UXG4mIzQzOyAqIGxvYWQsIGluIGJvdGggUElFIGFuZCBub24tUElFIGJ1aWxkcy4gdGVzdF9saXN0X2dsb2JhbCBpcyAuZ2xvYmwgYW5kXG4mIzQzOyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXG4mIzQzOyAqL1xuJiM0MzsjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKVxuIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbClcbiBCVEZfSURfVU5VU0VEXG4gQlRGX0lEKHR5cGVkZWYsIFMpXG5AQCAtNDMsMjQgJiM0Mzs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiBcbi1leHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdO1xuLUJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuLUJURl9JRF9VTlVTRURcbiYjNDM7QlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcbiBCVEZfSUQodHlwZWRlZiwgUylcbiBCVEZfSUQodHlwZWRlZiwgVClcbiBCVEZfSUQodHlwZWRlZiwgVSlcbiBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiYjNDM7QlRGX1NFVF9FTkQodGVzdF9zZXQpXG4gXG4tQlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcbiYjNDM7QlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTClcbiYjNDM7QlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXQpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTYW1lIGtmdW5jcyBpbiByZXZlcnNlIGRlY2xhcmF0aW9uIG9yZGVyLCBzbyByZXNvbHZlX2J0ZmlkcyBoYXMgdG9cbiYjNDM7ICogYWN0dWFsbHkgc29ydCBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBzZXRzLlxuJiM0MzsgKi9cbiYjNDM7QlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldF9yZXYpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0X3JldilcbiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3BcbiYjNDM7XG4mIzQzO2V4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107XG4mIzQzO0JURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuJiM0MztCVEZfSURfVU5VU0VEXG4gQlRGX0lEKHR5cGVkZWYsIFMpXG4gQlRGX0lEKHR5cGVkZWYsIFQpXG4gQlRGX0lEKHR5cGVkZWYsIFUpXG4gQlRGX0lEKHN0cnVjdCwgIFMpXG4gQlRGX0lEKHVuaW9uLCAgIFUpXG4gQlRGX0lEKGZ1bmMsICAgIGZ1bmMpXG4tQlRGX1NFVF9FTkQodGVzdF9zZXQpXG4gXG4gc3RhdGljIGludFxuIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZClcbkBAIC03MCwxMCAmIzQzOzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdGlmICghdHlwZSkge1xuLVx0XHRQUklOVF9GQUlMKFwmIzM0O0ZhaWxlZCB0byBnZXQgdHlwZSBmb3IgSUQgJWRcXG5cJiMzNDssIHR5cGVfaWQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcJiMzNDtidGZfX3R5cGVfYnlfaWRcJiMzNDspKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHR9XG4mIzQzO1xuJiM0MztcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHRlc3Rfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG5AQCAtODIsNjQgJiM0MzsxMzAsODAgQEAgX19yZXNvbHZlX3N5bWJvbChzdHJ1Y3QgYnRmICpidGYsIGludCB0eXBlX2lkKVxuIFx0XHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVx1MDAzZWluZm8pICE9IHRlc3Rfc3ltYm9sc1tpXS50eXBlKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4tXHRcdGlmICghc3RyKSB7XG4tXHRcdFx0UFJJTlRfRkFJTChcJiMzNDtGYWlsZWQgdG8gZ2V0IG5hbWUgZm9yIEJURiBJRCAlZFxcblwmIzM0OywgdHlwZV9pZCk7XG4tXHRcdFx0cmV0dXJuIC0xO1xuLVx0XHR9XG4tXG4gXHRcdGlmICghc3RyY21wKHN0ciwgdGVzdF9zeW1ib2xzW2ldLm5hbWUpKVxuIFx0XHRcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFidGZfaXNfZnVuYyh0eXBlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jX3N5bWJvbHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGtmdW5jX3N5bWJvbHNbaV0uaWQgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghc3RyY21wKHN0ciwga2Z1bmNfc3ltYm9sc1tpXS5uYW1lKSlcbiYjNDM7XHRcdFx0a2Z1bmNfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyhzdHJ1Y3QgYnRmICpidGYpXG4ge1xuLVx0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcdF9fdTMyIG5yID0gYnRmX190eXBlX2NudChidGYpO1xuIFx0aW50IHR5cGVfaWQ7XG4tXHRfX3UzMiBucjtcbi1cbi1cdGJ0ZiA9IGJ0Zl9fcGFyc2VfcmF3KFwmIzM0O3Jlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcJiMzNDspO1xuLVx0aWYgKENIRUNLKGxpYmJwZl9nZXRfZXJyb3IoYnRmKSwgXCYjMzQ7cmVzb2x2ZVwmIzM0Oyxcbi1cdFx0ICBcJiMzNDtGYWlsZWQgdG8gbG9hZCBCVEYgZnJvbSByZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXFxuXCYjMzQ7KSlcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XG4gXG4gXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFx1MDAzYyBucjsgdHlwZV9pZCYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKF9fcmVzb2x2ZV9zeW1ib2woYnRmLCB0eXBlX2lkKSlcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuLVxuLVx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2tmdW5jX3NldChzdHJ1Y3QgYnRmX2lkX3NldDggKnNldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2V0LVx1MDAzZWZsYWdzLCBCVEZfU0VUOF9LRlVOQ1MsIFwmIzM0O2tmdW5jX3NldF9mbGFnc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNldC1cdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFwmIzM0O2tmdW5jX3NldF9jbnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGtmdW5jX3N5bWJvbHNbal0uaWQgPT0gKHMzMilzZXQtXHUwMDNlcGFpcnNbaV0uaWQpIHtcbiYjNDM7XHRcdFx0XHRBU1NFUlRfRVEoc2V0LVx1MDAzZXBhaXJzW2ldLmZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCBcJiMzNDtrZnVuY19mbGFnc19jaGVja1wmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShqIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jX3N5bWJvbHMpLCBcJiMzNDtrZnVuY19pZF9mb3VuZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0QVNTRVJUX0xFKHNldC1cdTAwM2VwYWlyc1tpIC0gMV0uaWQsXG4mIzQzO1x0XHRcdFx0ICBzZXQtXHUwMDNlcGFpcnNbaV0uaWQsIFwmIzM0O2tmdW5jX3NvcnRfY2hlY2tcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZClcbiB7XG4gXHRfX3UzMiAqdGVzdF9saXN0LCAqdGVzdF9saXN0c1tdID0geyB0ZXN0X2xpc3RfbG9jYWwsIHRlc3RfbGlzdF9nbG9iYWwgfTtcbiBcdHVuc2lnbmVkIGludCBpLCBqO1xuLVx0aW50IHJldCA9IDA7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuIFxuLVx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxuJiM0MztcdGJ0ZiA9IGJ0Zl9fcGFyc2VfcmF3KEJURl9EQVRBX0ZJTEUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9wYXJzZVwmIzM0OykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHQvKiBDaGVjayBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpIGFuZFxuIFx0ICogQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwpIElEc1xuIFx0ICovXG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RfbGlzdHMpOyBqJiM0MzsmIzQzOykge1xuIFx0XHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0cmV0ID0gQ0hFQ0sodGVzdF9saXN0W2ldICE9IHRlc3Rfc3ltYm9sc1tpXS5pZCxcbi1cdFx0XHRcdCAgICBcJiMzNDtpZF9jaGVja1wmIzM0Oyxcbi1cdFx0XHRcdCAgICBcJiMzNDt3cm9uZyBJRCBmb3IgJXMgKCVkICE9ICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcbi1cdFx0XHRcdCAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7XG4gXHR9XG4gXG4gXHQvKiBDaGVjayBCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KSBJRHMgKi9cbkBAIC0xNTMsMTUgJiM0MzsyMTcsMTYgQEAgdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gQ0hFQ0soIWZvdW5kLCBcJiMzNDtpZF9jaGVja1wmIzM0Oyxcbi1cdFx0XHQgICAgXCYjMzQ7SUQgJWQgbm90IGZvdW5kIGluIHRlc3Rfc3ltYm9sc1xcblwmIzM0Oyxcbi1cdFx0XHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmICghQVNTRVJUX1RSVUUoZm91bmQsIFwmIzM0O2lkX2luX3Rlc3Rfc3ltYm9sc1wmIzM0OykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChpIFx1MDAzZSAwKSB7XG4tXHRcdFx0aWYgKCFBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCBcJiMzNDtzb3J0X2NoZWNrXCYjMzQ7KSlcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdEFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFwmIzM0O3NvcnRfY2hlY2tcJiMzNDspO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRjaGVja19rZnVuY19zZXQoXHUwMDI2dGVzdF9rZnVuY19zZXQpO1xuJiM0MztcdGNoZWNrX2tmdW5jX3NldChcdTAwMjZ0ZXN0X2tmdW5jX3NldF9yZXYpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcbkBAIC00OCwzICYjNDM7NDgsMTMgQEAgaW50IGZ1bmMoc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga2Z1bmNfYihzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGZlNTNiOTFhMzIzMTQ5Mzc3YjM1MTVkOGNiODUxMjExMDY1YWM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDE6MTg6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oCmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgKQEAgLTEwLDYgJiM0MzsxMCw5IEBAIHN0cnVjdCBidGZfaWRfc2V0IHsKIAl1MzIgaWRzW107CiB9OwogCiYjNDM7LyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi8KJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0tGVU5DUwkJKDEgJmx0OyZsdDsgMCkKJiM0MzsKIHN0cnVjdCBidGZfaWRfc2V0OCB7CiAJdTMyIGNudDsKIAl1MzIgZmxhZ3M7CkBAIC0yMiw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDggewogI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURgogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsgLyogZm9yIF9fUEFTVEUgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5naWZ5LmgmZ3Q7CiAKIC8qCiAgKiBGb2xsb3dpbmcgbWFjcm9zIGhlbHAgdG8gZGVmaW5lIGxpc3RzIG9mIEJURiBJRHMgcGxhY2VkCkBAIC0zNSw3ICYjNDM7MzksNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDggewogCiAjZGVmaW5lIEJURl9JRFNfU0VDVElPTiAmIzM0Oy5CVEZfaWRzJiMzNDsKIAotI2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbCkJCQkJXAomIzQzOyNkZWZpbmUgX19fX0JURl9JRChzeW1ib2wsIHdvcmQpCQkJXAogYXNtKAkJCQkJCQlcCiAmIzM0Oy5wdXNoc2VjdGlvbiAmIzM0OyBCVEZfSURTX1NFQ1RJT04gJiMzNDssXCYjMzQ7YVwmIzM0OzsgICAgICAgXG4mIzM0OwlcCiAmIzM0Oy5sb2NhbCAmIzM0OyAjc3ltYm9sICYjMzQ7IDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXApAQCAtNDMsMTAgJiM0Mzs0NywxMSBAQCBhc20oCQkJCQkJCVwKICYjMzQ7LnNpemUgICYjMzQ7ICNzeW1ib2wgJiMzNDssIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0OwlcCiAjc3ltYm9sICYjMzQ7OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiYjMzQ7CVwKICYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzO3dvcmQJCQkJCQkJXAogJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CiAKLSNkZWZpbmUgX19CVEZfSUQoc3ltYm9sKSBcCi0JX19fX0JURl9JRChzeW1ib2wpCiYjNDM7I2RlZmluZSBfX0JURl9JRChzeW1ib2wsIHdvcmQpIFwKJiM0MzsJX19fX0JURl9JRChzeW1ib2wsIHdvcmQpCiAKICNkZWZpbmUgX19JRChwcmVmaXgpIFwKIAlfX1BBU1RFKF9fUEFTVEUocHJlZml4LCBfX0NPVU5URVJfXyksIF9fTElORV9fKQpAQCAtNTYsNyAmIzQzOzYxLDE0IEBAIGFzbSgJCQkJCQkJXAogICogdG8gNCB6ZXJvIGJ5dGVzLgogICovCiAjZGVmaW5lIEJURl9JRChwcmVmaXgsIG5hbWUpIFwKLQlfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSkKJiM0MzsJX19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksICYjMzQ7JiMzNDspCiYjNDM7CiYjNDM7I2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFwKJiM0MzsJX19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksICYjMzQ7LmxvbmcgJiMzNDsgI2ZsYWdzICYjMzQ7XG4mIzM0OykKJiM0MzsjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXAomIzQzOwlfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpCiYjNDM7I2RlZmluZSBCVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAuLi4pIFwKJiM0MzsJX19CVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAjI19fVkFfQVJHU19fLCAwKQogCiAvKgogICogVGhlIEJURl9JRF9MSVNUIG1hY3JvIGRlZmluZXMgcHVyZSAodW5zb3J0ZWQpIGxpc3QKQEAgLTE1NSwxMCAmIzQzOzE2Nyw1OCBAQCBhc20oCQkJCQkJCVwKICYjMzQ7LnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CVwKIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lOwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2YKJiM0MzsgKiBCVEYgSURzIGFuZCB0aGVpciBmbGFncyBwbHVzIGl0cyBtZW1iZXJzIGNvdW50LCB3aXRoIHRoZQomIzQzOyAqIGZvbGxvd2luZyBsYXlvdXQ6CiYjNDM7ICoKJiM0MzsgKiBCVEZfU0VUOF9TVEFSVChsaXN0KQomIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMSwgbmFtZTEsIGZsYWdzKQomIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKQomIzQzOyAqIEJURl9TRVQ4X0VORChsaXN0KQomIzQzOyAqCiYjNDM7ICogX19CVEZfSURfX3NldDhfX2xpc3Q6CiYjNDM7ICogLnplcm8gOAomIzQzOyAqIGxpc3Q6CiYjNDM7ICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzoKJiM0MzsgKiAuemVybyA0CiYjNDM7ICogLndvcmQgKDEgJmx0OyZsdDsgMCkgfCAoMSAmbHQ7Jmx0OyAyKQomIzQzOyAqIF9fQlRGX0lEX190eXBlMl9fbmFtZTJfXzU6CiYjNDM7ICogLnplcm8gNAomIzQzOyAqIC53b3JkICgxICZsdDsmbHQ7IDMpIHwgKDEgJmx0OyZsdDsgMSkgfCAoMSAmbHQ7Jmx0OyAyKQomIzQzOyAqCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIHNjb3BlLCBmbGFncykJCVwKJiM0MztfX0JURl9JRF9MSVNUKG5hbWUsIGxvY2FsKQkJCQlcCiYjNDM7YXNtKAkJCQkJCQlcCiYjNDM7JiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7LFwmIzM0O2FcJiMzNDs7ICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LiYjMzQ7ICNzY29wZSAmIzM0OyBfX0JURl9JRF9fc2V0OF9fJiMzNDsgI25hbWUgJiMzNDs7ICAgICAgICBcbiYjMzQ7CVwKJiM0MzsmIzM0O19fQlRGX0lEX19zZXQ4X18mIzM0OyAjbmFtZSAmIzM0Ozo7ICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LmxvbmcgJiMzNDsgX19zdHJpbmdpZnkoZmxhZ3MpICAgICAgICAgICAgICAgICAgICYjMzQ7XG4mIzM0OwlcCiYjNDM7JiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKQkJCQlcCiYjNDM7X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKQkJCQlcCiYjNDM7YXNtKAkJCQkJCQlcCiYjNDM7JiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7LFwmIzM0O2FcJiMzNDs7ICAgICAgXG4mIzM0OwlcCiYjNDM7JiMzNDsuc2l6ZSBfX0JURl9JRF9fc2V0OF9fJiMzNDsgI25hbWUgJiMzNDssIC4tJiMzNDsgI25hbWUgJiMzNDsgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CVwKJiM0MztleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7CiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfS0ZVTkNTX1NUQVJUKG5hbWUpCQkJCVwKJiM0MztfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpCiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKQkJCQlcCiYjNDM7QlRGX1NFVDhfRU5EKG5hbWUpCiYjNDM7CiAjZWxzZQogCi0jZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVs1XTsKJiM0MzsjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdOwogI2RlZmluZSBCVEZfSUQocHJlZml4LCBuYW1lKQomIzQzOyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKQogI2RlZmluZSBCVEZfSURfVU5VU0VECiAjZGVmaW5lIEJURl9JRF9MSVNUX0dMT0JBTChuYW1lLCBuKSB1MzIgX19tYXliZV91bnVzZWQgbmFtZVtuXTsKICNkZWZpbmUgQlRGX0lEX0xJU1RfU0lOR0xFKG5hbWUsIHByZWZpeCwgdHlwZW5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxXTsKQEAgLTE2Niw2ICYjNDM7MjI2LDEwIEBAIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lOwogI2RlZmluZSBCVEZfU0VUX1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07CiAjZGVmaW5lIEJURl9TRVRfU1RBUlRfR0xPQkFMKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07CiAjZGVmaW5lIEJURl9TRVRfRU5EKG5hbWUpCiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTsKJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKQomIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9OwomIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSkKIAogI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqLwogCkBAIC0yMTUsNSAmIzQzOzI3OSw5IEBAIE1BWF9CVEZfVFJBQ0lOR19UWVBFLAogfTsKIAogZXh0ZXJuIHUzMiBidGZfdHJhY2luZ19pZHNbXTsKJiM0MztleHRlcm4gdTMyIGJwZl9jZ3JvdXBfYnRmX2lkW107CiYjNDM7ZXh0ZXJuIHUzMiBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkW107CiYjNDM7ZXh0ZXJuIHUzMiBidGZfYnBmX21hcF9pZFtdOwomIzQzO2V4dGVybiB1MzIgYnBmX2ttZW1fY2FjaGVfYnRmX2lkW107CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMKaW5kZXggNDFkZmFhYWJiNzNmNGIuLmFjNTFmZDQ1NDgyMTQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMKQEAgLTEwLDcgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKICNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKIAotc3RhdGljIGludCBkdXJhdGlvbjsKJiM0MzsjZGVmaW5lIEJURl9EQVRBX0ZJTEUgJiMzNDtyZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGJiMzNDsKJiM0MzsKJiM0MzsjaWZuZGVmIEtGX0ZBU1RDQUxMCiYjNDM7I2RlZmluZSBLRl9GQVNUQ0FMTCAoMSAmbHQ7Jmx0OyAxMikKJiM0MzsjZW5kaWYKIAogc3RydWN0IHN5bWJvbCB7CiAJY29uc3QgY2hhcgkqbmFtZTsKQEAgLTI4LDEyICYjNDM7MzIsNDEgQEAgc3RydWN0IHN5bWJvbCB0ZXN0X3N5bWJvbHNbXSA9IHsKIAl7ICYjMzQ7ZnVuYyYjMzQ7LCAgICBCVEZfS0lORF9GVU5DLCAgICAtMSB9LAogfTsKIAomIzQzO3N0cnVjdCBrZnVuY19zeW1ib2wgewomIzQzOwljb25zdCBjaGFyCSpuYW1lOwomIzQzOwlzMzIJCSBpZDsKJiM0MzsJdTMyCQkgZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7CiYjNDM7CXsgJiMzNDtrZnVuY19hJiMzNDssIC0xLCAwIH0sCiYjNDM7CXsgJiMzNDtrZnVuY19iJiMzNDssIC0xLCBLRl9GQVNUQ0FMTCB9LAomIzQzO307CiYjNDM7CiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovCiBhc20gKAogJiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7ICxcJiMzNDthXCYjMzQ7OyBcbiYjMzQ7CiAmIzM0Oy5iYWxpZ24gNCwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0OwogJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDspOwogCiYjNDM7LyoKJiM0MzsgKiB0ZXN0X2xpc3RfbG9jYWwsIHRlc3Rfc2V0IGFuZCB0ZXN0X2tmdW5jX3NldCBhcmUgLmxvY2FsIHN5bWJvbHMgcGxhY2VkCiYjNDM7ICogaW4gLkJURl9pZHMgYnkgaW5saW5lIGFzbSwgYW5kIGFyZSByZWFkIGhlcmUgZGlyZWN0bHkgYnkgQyBuYW1lLiBUbyB0aGUKJiM0MzsgKiBjb21waWxlciB0aGV5IGFyZSBwbGFpbiwgZGVmYXVsdC12aXNpYmlsaXR5IGV4dGVybiBvYmplY3RzLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0ZXN0X3Byb2dzIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSksCiYjNDM7ICogdGFraW5nIHRoZSBhZGRyZXNzIG9mIHN1Y2ggYW4gZXh0ZXJuIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBHT1QuIFRoZQomIzQzOyAqIEdOVSBhc3NlbWJsZXIgb24gYWFyY2g2NCB1bmNvbmRpdGlvbmFsbHkgY29udmVydHMgcmVmZXJlbmNlcyB0byAubG9jYWwKJiM0MzsgKiBzeW1ib2xzIGludG8gc2VjdGlvbiAmIzQzOyBhZGRlbmQgZm9ybSAoJiMzNDsuQlRGX2lkcyAmIzQzOyAmbHQ7b2Zmc2V0Jmd0OyYjMzQ7KSwgYnV0IGEgR09UCiYjNDM7ICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc28KJiM0MzsgKiB0aGUgbGlua2VyIHJlc29sdmVzIGl0IHRvIHRoZSAuQlRGX2lkcyBiYXNlLgomIzQzOyAqCiYjNDM7ICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmQKJiM0MzsgKiBlbWl0cyBhIGRpcmVjdCwgYWRkZW5kLXByZXNlcnZpbmcgUEMtcmVsYXRpdmUgYWNjZXNzIGluc3RlYWQgb2YgYSBHT1QKJiM0MzsgKiBsb2FkLCBpbiBib3RoIFBJRSBhbmQgbm9uLVBJRSBidWlsZHMuIHRlc3RfbGlzdF9nbG9iYWwgaXMgLmdsb2JsIGFuZAomIzQzOyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuCiYjNDM7ICovCiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikKIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbCkKIEJURl9JRF9VTlVTRUQKIEJURl9JRCh0eXBlZGVmLCBTKQpAQCAtNDMsMjQgJiM0Mzs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUykKIEJURl9JRCh1bmlvbiwgICBVKQogQlRGX0lEKGZ1bmMsICAgIGZ1bmMpCiAKLWV4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107Ci1CVEZfSURfTElTVF9HTE9CQUwodGVzdF9saXN0X2dsb2JhbCwgMSkKLUJURl9JRF9VTlVTRUQKJiM0MztCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KQogQlRGX0lEKHR5cGVkZWYsIFMpCiBCVEZfSUQodHlwZWRlZiwgVCkKIEJURl9JRCh0eXBlZGVmLCBVKQogQlRGX0lEKHN0cnVjdCwgIFMpCiBCVEZfSUQodW5pb24sICAgVSkKIEJURl9JRChmdW5jLCAgICBmdW5jKQomIzQzO0JURl9TRVRfRU5EKHRlc3Rfc2V0KQogCi1CVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KQomIzQzO0JURl9LRlVOQ1NfU1RBUlQodGVzdF9rZnVuY19zZXQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKQomIzQzO0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSBrZnVuY3MgaW4gcmV2ZXJzZSBkZWNsYXJhdGlvbiBvcmRlciwgc28gcmVzb2x2ZV9idGZpZHMgaGFzIHRvCiYjNDM7ICogYWN0dWFsbHkgc29ydCBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBzZXRzLgomIzQzOyAqLwomIzQzO0JURl9LRlVOQ1NfU1RBUlQodGVzdF9rZnVuY19zZXRfcmV2KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSkKJiM0MztCVEZfS0ZVTkNTX0VORCh0ZXN0X2tmdW5jX3NldF9yZXYpCiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKJiM0MzsKJiM0MztleHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdOwomIzQzO0JURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKQomIzQzO0JURl9JRF9VTlVTRUQKIEJURl9JRCh0eXBlZGVmLCBTKQogQlRGX0lEKHR5cGVkZWYsIFQpCiBCVEZfSUQodHlwZWRlZiwgVSkKIEJURl9JRChzdHJ1Y3QsICBTKQogQlRGX0lEKHVuaW9uLCAgIFUpCiBCVEZfSUQoZnVuYywgICAgZnVuYykKLUJURl9TRVRfRU5EKHRlc3Rfc2V0KQogCiBzdGF0aWMgaW50CiBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpCkBAIC03MCwxMCAmIzQzOzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpCiAJdW5zaWduZWQgaW50IGk7CiAKIAl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7Ci0JaWYgKCF0eXBlKSB7Ci0JCVBSSU5UX0ZBSUwoJiMzNDtGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIElEICVkXG4mIzM0OywgdHlwZV9pZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0eXBlLCAmIzM0O2J0Zl9fdHlwZV9ieV9pZCYjMzQ7KSkKIAkJcmV0dXJuIC0xOwotCX0KJiM0MzsKJiM0MzsJc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtJmd0O25hbWVfb2ZmKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X3N5bWJvbHNbaV0uaWQgJmd0Oz0gMCkKQEAgLTgyLDY0ICYjNDM7MTMwLDgwIEBAIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZCkKIAkJaWYgKEJURl9JTkZPX0tJTkQodHlwZS0mZ3Q7aW5mbykgIT0gdGVzdF9zeW1ib2xzW2ldLnR5cGUpCiAJCQljb250aW51ZTsKIAotCQlzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS0mZ3Q7bmFtZV9vZmYpOwotCQlpZiAoIXN0cikgewotCQkJUFJJTlRfRkFJTCgmIzM0O0ZhaWxlZCB0byBnZXQgbmFtZSBmb3IgQlRGIElEICVkXG4mIzM0OywgdHlwZV9pZCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQogCQlpZiAoIXN0cmNtcChzdHIsIHRlc3Rfc3ltYm9sc1tpXS5uYW1lKSkKIAkJCXRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7CiAJfQogCiYjNDM7CWlmICghYnRmX2lzX2Z1bmModHlwZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCAmZ3Q7PSAwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCFzdHJjbXAoc3RyLCBrZnVuY19zeW1ib2xzW2ldLm5hbWUpKQomIzQzOwkJCWtmdW5jX3N5bWJvbHNbaV0uaWQgPSB0eXBlX2lkOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHZvaWQpCiYjNDM7c3RhdGljIGludCByZXNvbHZlX3N5bWJvbHMoc3RydWN0IGJ0ZiAqYnRmKQogewotCXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsJX191MzIgbnIgPSBidGZfX3R5cGVfY250KGJ0Zik7CiAJaW50IHR5cGVfaWQ7Ci0JX191MzIgbnI7Ci0KLQlidGYgPSBidGZfX3BhcnNlX3JhdygmIzM0O3Jlc29sdmVfYnRmaWRzLnRlc3Quby5CVEYmIzM0Oyk7Ci0JaWYgKENIRUNLKGxpYmJwZl9nZXRfZXJyb3IoYnRmKSwgJiMzNDtyZXNvbHZlJiMzNDssCi0JCSAgJiMzNDtGYWlsZWQgdG8gbG9hZCBCVEYgZnJvbSByZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXG4mIzM0OykpCi0JCXJldHVybiAtMTsKLQotCW5yID0gYnRmX190eXBlX2NudChidGYpOwogCiAJZm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCAmbHQ7IG5yOyB0eXBlX2lkJiM0MzsmIzQzOykgewogCQlpZiAoX19yZXNvbHZlX3N5bWJvbChidGYsIHR5cGVfaWQpKQotCQkJYnJlYWs7CiYjNDM7CQkJcmV0dXJuIC0xOwogCX0KLQotCWJ0Zl9fZnJlZShidGYpOwogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGksIGo7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzZXQtJmd0O2ZsYWdzLCBCVEZfU0VUOF9LRlVOQ1MsICYjMzQ7a2Z1bmNfc2V0X2ZsYWdzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2V0LSZndDtjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksICYjMzQ7a2Z1bmNfc2V0X2NudCYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNldC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGtmdW5jX3N5bWJvbHNbal0uaWQgPT0gKHMzMilzZXQtJmd0O3BhaXJzW2ldLmlkKSB7CiYjNDM7CQkJCUFTU0VSVF9FUShzZXQtJmd0O3BhaXJzW2ldLmZsYWdzLAomIzQzOwkJCQkJICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCAmIzM0O2tmdW5jX2ZsYWdzX2NoZWNrJiMzNDspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlBU1NFUlRfVFJVRShqICZsdDsgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgJiMzNDtrZnVuY19pZF9mb3VuZCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmIChpICZndDsgMCkgewomIzQzOwkJCUFTU0VSVF9MRShzZXQtJmd0O3BhaXJzW2kgLSAxXS5pZCwKJiM0MzsJCQkJICBzZXQtJmd0O3BhaXJzW2ldLmlkLCAmIzM0O2tmdW5jX3NvcnRfY2hlY2smIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZCkKIHsKIAlfX3UzMiAqdGVzdF9saXN0LCAqdGVzdF9saXN0c1tdID0geyB0ZXN0X2xpc3RfbG9jYWwsIHRlc3RfbGlzdF9nbG9iYWwgfTsKIAl1bnNpZ25lZCBpbnQgaSwgajsKLQlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwogCi0JaWYgKHJlc29sdmVfc3ltYm9scygpKQomIzQzOwlidGYgPSBidGZfX3BhcnNlX3JhdyhCVEZfREFUQV9GSUxFKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfcGFyc2UmIzM0OykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBDaGVjayBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpIGFuZAogCSAqIEJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsKSBJRHMKIAkgKi8KIAlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRSh0ZXN0X2xpc3RzKTsgaiYjNDM7JiM0MzspIHsKIAkJdGVzdF9saXN0ID0gdGVzdF9saXN0c1tqXTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspIHsKLQkJCXJldCA9IENIRUNLKHRlc3RfbGlzdFtpXSAhPSB0ZXN0X3N5bWJvbHNbaV0uaWQsCi0JCQkJICAgICYjMzQ7aWRfY2hlY2smIzM0OywKLQkJCQkgICAgJiMzNDt3cm9uZyBJRCBmb3IgJXMgKCVkICE9ICVkKVxuJiMzNDssCi0JCQkJICAgIHRlc3Rfc3ltYm9sc1tpXS5uYW1lLAotCQkJCSAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybjsKLQkJfQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJQVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7CiAJfQogCiAJLyogQ2hlY2sgQlRGX1NFVF9TVEFSVCh0ZXN0X3NldCkgSURzICovCkBAIC0xNTMsMTUgJiM0MzsyMTcsMTYgQEAgdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpCiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IENIRUNLKCFmb3VuZCwgJiMzNDtpZF9jaGVjayYjMzQ7LAotCQkJICAgICYjMzQ7SUQgJWQgbm90IGZvdW5kIGluIHRlc3Rfc3ltYm9sc1xuJiMzNDssCi0JCQkgICAgdGVzdF9zZXQuaWRzW2ldKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmICghQVNTRVJUX1RSVUUoZm91bmQsICYjMzQ7aWRfaW5fdGVzdF9zeW1ib2xzJiMzNDspKQogCQkJYnJlYWs7CiAKLQkJaWYgKGkgJmd0OyAwKSB7Ci0JCQlpZiAoIUFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sICYjMzQ7c29ydF9jaGVjayYjMzQ7KSkKLQkJCQlyZXR1cm47Ci0JCX0KJiM0MzsJCWlmIChpICZndDsgMCkKJiM0MzsJCQlBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCAmIzM0O3NvcnRfY2hlY2smIzM0Oyk7CiAJfQomIzQzOwomIzQzOwljaGVja19rZnVuY19zZXQoJmFtcDt0ZXN0X2tmdW5jX3NldCk7CiYjNDM7CWNoZWNrX2tmdW5jX3NldCgmYW1wO3Rlc3Rfa2Z1bmNfc2V0X3Jldik7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmMKaW5kZXggYmFhNTI1Mjc1YmRlMzEuLjg1ODc2NTgwMTJjM2VlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYwpAQCAtNDgsMyAmIzQzOzQ4LDEzIEBAIGludCBmdW5jKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdCkKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztpbnQga2Z1bmNfYShzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBUb29sLVNpZGUgQ2hhbmdlcyBmb3IgQlRGIElEIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgc29tZSBCVEYgSUQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gSSBzZWUgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIGJlaW5nIHVwZGF0ZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBtYWNyb3Mg4oCTIGBCVEZfU0VUOF9LRlVOQ1NgLCBgQlRGX0lEX0ZMQUdTYCwgYEJURl9TRVQ4X1NUQVJUYCwgZXRjLiDigJMgd2hpY2ggc2VlbSBsaWtlIHRoZXkgYXJlIGZvciBtYW5hZ2luZyBhbmQgb3JnYW5pemluZyBCVEYgSUQgZGVmaW5pdGlvbnMuCgpNeSBmaXJzdCBjb25jZXJuIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29sLXNpZGUgY2hhbmdlcyBhcmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGtlcm5lbC4gSSBpbW1lZGlhdGVseSB0aGluayB0byBjaGVjayBpZiB0aGUga2VybmVsJiMzOTtzIGNvcHkgb2YgYGJ0Zl9pZHMuaGAgKGBpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGApIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQsIGJ1dCBpdCYjMzk7cyBub3QuIEdvb2QsIHRoaXMgaXMgcHJvYmFibHkgaXNvbGF0ZWQgdG8gdGhlIGJ1aWxkIHRvb2xzIGFuZCBzZWxmLXRlc3RzLgoKSSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBzdXJlLiBZZXAsIGl0JiMzOTtzIGp1c3QgdGhlIGB0b29scy9gIGRpcmVjdG9yeTogYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhICYjMzQ7dG9vbHMmIzM0OyBjaGFuZ2UgYW5kIG5vdCBkaXJlY3RseSBrZXJuZWwtZXhlY3V0aW9uIHJlbGV2YW50LgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IGZ1enppbmcgdGFyZ2V0cyBvciBpZiB0aGV5IGFyZSByZWxldmFudCB0byBrZXJuZWwgZXhlY3V0aW9uLiBTaW5jZSBpdCYjMzk7cyBhbGwgd2l0aGluIGB0b29scy9gLCBJIGRvbiYjMzk7dCB0aGluayB0aGlzIHBhdGNoIGl0c2VsZiBpcyBhIGRpcmVjdCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgYmlnIElGLCB0aGUgdG9vbHMgaW4gcXVlc3Rpb24gYWZmZWN0IHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUgaW4gc29tZSB3YXkuIEJ1dCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHRoZSBjYXNlIGhlcmUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgbWFjcm9zIGFuZCBzb21lIHRlc3RzIGZvciB0aGUgQlRGIElEIHJlc29sdXRpb24gcHJvY2Vzcy4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyBpcyBhIGNvZGUtaHlnaWVuZSB0eXBlIG9mIHBhdGNoOyBtYWtpbmcgdGhpbmdzIGNsZWFuZXIgYW5kIGVhc2llciB0byB3b3JrIHdpdGgsIHJhdGhlciB0aGFuIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIGl0IHdlcmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcga2VybmVsIGV4ZWN1dGlvbiwgaXQgd291bGQgbmVlZCBtb3JlIHNjcnV0aW55LgoKSSB0YWtlIGFub3RoZXIgbG9vayBhbmQgZ3JlcCB0byB2ZXJpZnkgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGB0b29sc2AgYW5kIG5vdCB0aGUga2VybmVsIGl0c2VsZi4gQ29uZmlybWVkLiBgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIG9ubHkgdXNlZCBieSB0b29scyBsaWtlIGByZXNvbHZlX2J0Zmlkc2AgYW5kIGJwZiBzZWxmdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlRGX1NFVDhfS0ZVTkNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTEzLS8qIFRoaXMgZmxhZyBpbXBsaWVzIEJURl9TRVQ4IGhvbGRzIGtmdW5jKHMpICovXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTE1LVxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxMD1leHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4tLVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjEyLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIxMzpfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMTQtXG4tLVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjE2PUJURl9TRVQ4X0VORChuYW1lKVxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMS0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjMyOiNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjMzLSNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkxMTY9aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjMtXHQgKi9cbmtlcm5lbC9icGYvYnRmLmM6OTEyNDpcdGlmICghKGtzZXQtXHUwMDNlc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBCVEZfU0VUOF9LRlVOQ1MpKSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjUtXHRcdFdBUk5fT04oIWtzZXQtXHUwMDNlb3duZXIpO1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTEzLS8qIFRoaXMgZmxhZyBpbXBsaWVzIEJURl9TRVQ4IGhvbGRzIGtmdW5jKHMpICovXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTE1LVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIwOT1leHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjExLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVx0XHRcdFx0XFxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIxMjpfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMTMtXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjE1PUJURl9TRVQ4X0VORChuYW1lKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMC0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjMxOiNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjMyLSNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jPTE2Mj1zdGF0aWMgdm9pZCBjaGVja19rZnVuY19zZXQoc3RydWN0IGJ0Zl9pZF9zZXQ4ICpzZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYy0xNjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jOjE2NjpcdEFTU0VSVF9FUShzZXQtXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXCYjMzQ7a2Z1bmNfc2V0X2ZsYWdzXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMtMTY3LVx0QVNTRVJUX0VRKHNldC1cdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFwmIzM0O2tmdW5jX3NldF9jbnRcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzkKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGFuZCB0aGUgc2VsZnRlc3RzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIENydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogdG91Y2hpbmcgdGhlIG1haW4ga2VybmVsJiMzOTtzIGluY2x1ZGUgZGlyZWN0b3J5IChgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgKSBvciBhbnkgY3JpdGljYWwgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgbWF0dGVyIG9mIGtlZXBpbmcgdGhlIHRvb2wmIzM5O3MgaGVhZGVyIGZpbGUgaW4gc3luYyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbiwgYW5kIGFkZGluZyBhIG5ldyB0ZXN0IHRvIHRoZSB0b29saW5nLiBUaGlzIGlzbiYjMzk7dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBpdCYjMzk7cyBqdXN0IGFib3V0IGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCB2ZXJpZmljYXRpb24gd2l0aGluIHRoZSB0b29scy4gV2l0aCB0aGF0IGluIG1pbmQsIEkgYW0gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZnVuY3Rpb25hbCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDE6MTg6MDguODg0MjE4NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMjI4NTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA4Ljg4NDIyMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTc2MTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0ZmU1M2I5MWEzMjMxNDkzNzdiMzUxNWQ4Y2I4NTEyMTEwNjVhYzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDE6MTg6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXFxuQEAgLTEwLDYgKzEwLDkgQEAgc3RydWN0IGJ0Zl9pZF9zZXQge1xcbiBcXHR1MzIgaWRzW107XFxuIH07XFxuIFxcbisvKiBUaGlzIGZsYWcgaW1wbGllcyBCVEZfU0VUOCBob2xkcyBrZnVuYyhzKSAqL1xcbisjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuK1xcbiBzdHJ1Y3QgYnRmX2lkX3NldDgge1xcbiBcXHR1MzIgY250O1xcbiBcXHR1MzIgZmxhZ3M7XFxuQEAgLTIyLDYgKzI1LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlIC8qIGZvciBfX1BBU1RFICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIEZvbGxvd2luZyBtYWNyb3MgaGVscCB0byBkZWZpbmUgbGlzdHMgb2YgQlRGIElEcyBwbGFjZWRcXG5AQCAtMzUsNyArMzksNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDgge1xcbiBcXG4gI2RlZmluZSBCVEZfSURTX1NFQ1RJT04gXFxcIi5CVEZfaWRzXFxcIlxcbiBcXG4tI2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbClcXHRcXHRcXHRcXHRcXFxcXFxuKyNkZWZpbmUgX19fX0JURl9JRChzeW1ib2wsIHdvcmQpXFx0XFx0XFx0XFxcXFxcbiBhc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnB1c2hzZWN0aW9uIFxcXCIgQlRGX0lEU19TRUNUSU9OIFxcXCIsXFxcXFxcXCJhXFxcXFxcXCI7ICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4gXFxcIi5sb2NhbCBcXFwiICNzeW1ib2wgXFxcIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuQEAgLTQzLDEwICs0NywxMSBAQCBhc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnNpemUgIFxcXCIgI3N5bWJvbCBcXFwiLCA0OyAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4gI3N5bWJvbCBcXFwiOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuIFxcXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbit3b3JkXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIik7XFxuIFxcbi0jZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCkgXFxcXFxcbi1cXHRfX19fQlRGX0lEKHN5bWJvbClcXG4rI2RlZmluZSBfX0JURl9JRChzeW1ib2wsIHdvcmQpIFxcXFxcXG4rXFx0X19fX0JURl9JRChzeW1ib2wsIHdvcmQpXFxuIFxcbiAjZGVmaW5lIF9fSUQocHJlZml4KSBcXFxcXFxuIFxcdF9fUEFTVEUoX19QQVNURShwcmVmaXgsIF9fQ09VTlRFUl9fKSwgX19MSU5FX18pXFxuQEAgLTU2LDcgKzYxLDE0IEBAIGFzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAqIHRvIDQgemVybyBieXRlcy5cXG4gICovXFxuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSkgXFxcXFxcbi1cXHRfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSlcXG4rXFx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFxcXCJcXFwiKVxcbitcXG4rI2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFxcXFxcXG4rXFx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFxcXCIubG9uZyBcXFwiICNmbGFncyBcXFwiXFxcXG5cXFwiKVxcbisjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXFxcXFxcbitcXHRfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpXFxuKyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKSBcXFxcXFxuK1xcdF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgIyNfX1ZBX0FSR1NfXywgMClcXG4gXFxuIC8qXFxuICAqIFRoZSBCVEZfSURfTElTVCBtYWNybyBkZWZpbmVzIHB1cmUgKHVuc29ydGVkKSBsaXN0XFxuQEAgLTE1NSwxMCArMTY3LDU4IEBAIGFzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcXCIucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCIpO1xcdFxcXFxcXG4gZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0IG5hbWU7XFxuIFxcbisvKlxcbisgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcXG4rICogQlRGIElEcyBhbmQgdGhlaXIgZmxhZ3MgcGx1cyBpdHMgbWVtYmVycyBjb3VudCwgd2l0aCB0aGVcXG4rICogZm9sbG93aW5nIGxheW91dDpcXG4rICpcXG4rICogQlRGX1NFVDhfU1RBUlQobGlzdClcXG4rICogQlRGX0lEX0ZMQUdTKHR5cGUxLCBuYW1lMSwgZmxhZ3MpXFxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxcbisgKiBCVEZfU0VUOF9FTkQobGlzdClcXG4rICpcXG4rICogX19CVEZfSURfX3NldDhfX2xpc3Q6XFxuKyAqIC56ZXJvIDhcXG4rICogbGlzdDpcXG4rICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcXG4rICogLnplcm8gNFxcbisgKiAud29yZCAoMSBcXHUwMDNjXFx1MDAzYyAwKSB8ICgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuKyAqIF9fQlRGX0lEX190eXBlMl9fbmFtZTJfXzU6XFxuKyAqIC56ZXJvIDRcXG4rICogLndvcmQgKDEgXFx1MDAzY1xcdTAwM2MgMykgfCAoMSBcXHUwMDNjXFx1MDAzYyAxKSB8ICgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuKyAqXFxuKyAqL1xcbisjZGVmaW5lIF9fQlRGX1NFVDhfU1RBUlQobmFtZSwgc2NvcGUsIGZsYWdzKVxcdFxcdFxcXFxcXG4rX19CVEZfSURfTElTVChuYW1lLCBsb2NhbClcXHRcXHRcXHRcXHRcXFxcXFxuK2FzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCIucHVzaHNlY3Rpb24gXFxcIiBCVEZfSURTX1NFQ1RJT04gXFxcIixcXFxcXFxcImFcXFxcXFxcIjsgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLlxcXCIgI3Njb3BlIFxcXCIgX19CVEZfSURfX3NldDhfX1xcXCIgI25hbWUgXFxcIjsgICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIl9fQlRGX0lEX19zZXQ4X19cXFwiICNuYW1lIFxcXCI6OyAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuK1xcXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLmxvbmcgXFxcIiBfX3N0cmluZ2lmeShmbGFncykgICAgICAgICAgICAgICAgICAgXFxcIlxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCIpO1xcbitcXG4rI2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4rX19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMClcXG4rXFxuKyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbithc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiLnB1c2hzZWN0aW9uIFxcXCIgQlRGX0lEU19TRUNUSU9OIFxcXCIsXFxcXFxcXCJhXFxcXFxcXCI7ICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLnNpemUgX19CVEZfSURfX3NldDhfX1xcXCIgI25hbWUgXFxcIiwgLi1cXFwiICNuYW1lIFxcXCIgIFxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIik7XFx0XFxcXFxcbitleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XFxuK1xcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuK19fQlRGX1NFVDhfU1RBUlQobmFtZSwgbG9jYWwsIEJURl9TRVQ4X0tGVU5DUylcXG4rXFxuKyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuK0JURl9TRVQ4X0VORChuYW1lKVxcbitcXG4gI2Vsc2VcXG4gXFxuLSNkZWZpbmUgQlRGX0lEX0xJU1QobmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzVdO1xcbisjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xcbiAjZGVmaW5lIEJURl9JRChwcmVmaXgsIG5hbWUpXFxuKyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKVxcbiAjZGVmaW5lIEJURl9JRF9VTlVTRURcXG4gI2RlZmluZSBCVEZfSURfTElTVF9HTE9CQUwobmFtZSwgbikgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbbl07XFxuICNkZWZpbmUgQlRGX0lEX0xJU1RfU0lOR0xFKG5hbWUsIHByZWZpeCwgdHlwZW5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxXTtcXG5AQCAtMTY2LDYgKzIyNiwxMCBAQCBleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQgbmFtZTtcXG4gI2RlZmluZSBCVEZfU0VUX1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XFxuICNkZWZpbmUgQlRGX1NFVF9TVEFSVF9HTE9CQUwobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcXG4gI2RlZmluZSBCVEZfU0VUX0VORChuYW1lKVxcbisjZGVmaW5lIEJURl9TRVQ4X1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldDggX19tYXliZV91bnVzZWQgbmFtZSA9IHsgMCB9O1xcbisjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG4rI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xcbiBcXG5AQCAtMjE1LDUgKzI3OSw5IEBAIE1BWF9CVEZfVFJBQ0lOR19UWVBFLFxcbiB9O1xcbiBcXG4gZXh0ZXJuIHUzMiBidGZfdHJhY2luZ19pZHNbXTtcXG4rZXh0ZXJuIHUzMiBicGZfY2dyb3VwX2J0Zl9pZFtdO1xcbitleHRlcm4gdTMyIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9idGZfaWRbXTtcXG4rZXh0ZXJuIHUzMiBidGZfYnBmX21hcF9pZFtdO1xcbitleHRlcm4gdTMyIGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFtdO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXFxuaW5kZXggNDFkZmFhYWJiNzNmNGIuLmFjNTFmZDQ1NDgyMTQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXFxuQEAgLTEwLDcgKzEwLDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGR1cmF0aW9uO1xcbisjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXFxcInJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXFwiXFxuK1xcbisjaWZuZGVmIEtGX0ZBU1RDQUxMXFxuKyNkZWZpbmUgS0ZfRkFTVENBTEwgKDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuKyNlbmRpZlxcbiBcXG4gc3RydWN0IHN5bWJvbCB7XFxuIFxcdGNvbnN0IGNoYXJcXHQqbmFtZTtcXG5AQCAtMjgsMTIgKzMyLDQxIEBAIHN0cnVjdCBzeW1ib2wgdGVzdF9zeW1ib2xzW10gPSB7XFxuIFxcdHsgXFxcImZ1bmNcXFwiLCAgICBCVEZfS0lORF9GVU5DLCAgICAtMSB9LFxcbiB9O1xcbiBcXG4rc3RydWN0IGtmdW5jX3N5bWJvbCB7XFxuK1xcdGNvbnN0IGNoYXJcXHQqbmFtZTtcXG4rXFx0czMyXFx0XFx0IGlkO1xcbitcXHR1MzJcXHRcXHQgZmxhZ3M7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7XFxuK1xcdHsgXFxcImtmdW5jX2FcXFwiLCAtMSwgMCB9LFxcbitcXHR7IFxcXCJrZnVuY19iXFxcIiwgLTEsIEtGX0ZBU1RDQUxMIH0sXFxuK307XFxuK1xcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXFxuIGFzbSAoXFxuIFxcXCIucHVzaHNlY3Rpb24gXFxcIiBCVEZfSURTX1NFQ1RJT04gXFxcIiAsXFxcXFxcXCJhXFxcXFxcXCI7IFxcXFxuXFxcIlxcbiBcXFwiLmJhbGlnbiA0LCAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXG4gXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiKTtcXG4gXFxuKy8qXFxuKyAqIHRlc3RfbGlzdF9sb2NhbCwgdGVzdF9zZXQgYW5kIHRlc3Rfa2Z1bmNfc2V0IGFyZSAubG9jYWwgc3ltYm9scyBwbGFjZWRcXG4rICogaW4gLkJURl9pZHMgYnkgaW5saW5lIGFzbSwgYW5kIGFyZSByZWFkIGhlcmUgZGlyZWN0bHkgYnkgQyBuYW1lLiBUbyB0aGVcXG4rICogY29tcGlsZXIgdGhleSBhcmUgcGxhaW4sIGRlZmF1bHQtdmlzaWJpbGl0eSBleHRlcm4gb2JqZWN0cy5cXG4rICpcXG4rICogV2hlbiB0ZXN0X3Byb2dzIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSksXFxuKyAqIHRha2luZyB0aGUgYWRkcmVzcyBvZiBzdWNoIGFuIGV4dGVybiBpcyByb3V0ZWQgdGhyb3VnaCB0aGUgR09ULiBUaGVcXG4rICogR05VIGFzc2VtYmxlciBvbiBhYXJjaDY0IHVuY29uZGl0aW9uYWxseSBjb252ZXJ0cyByZWZlcmVuY2VzIHRvIC5sb2NhbFxcbisgKiBzeW1ib2xzIGludG8gc2VjdGlvbiArIGFkZGVuZCBmb3JtIChcXFwiLkJURl9pZHMgKyBcXHUwMDNjb2Zmc2V0XFx1MDAzZVxcXCIpLCBidXQgYSBHT1RcXG4rICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cXG4rICogdGhlIGxpbmtlciByZXNvbHZlcyBpdCB0byB0aGUgLkJURl9pZHMgYmFzZS5cXG4rICpcXG4rICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcXG4rICogZW1pdHMgYSBkaXJlY3QsIGFkZGVuZC1wcmVzZXJ2aW5nIFBDLXJlbGF0aXZlIGFjY2VzcyBpbnN0ZWFkIG9mIGEgR09UXFxuKyAqIGxvYWQsIGluIGJvdGggUElFIGFuZCBub24tUElFIGJ1aWxkcy4gdGVzdF9saXN0X2dsb2JhbCBpcyAuZ2xvYmwgYW5kXFxuKyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXFxuKyAqL1xcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKVxcbiBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpXFxuIEJURl9JRF9VTlVTRURcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuQEAgLTQzLDI0ICs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcXG4gQlRGX0lEKHVuaW9uLCAgIFUpXFxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxcbiBcXG4tZXh0ZXJuIF9fdTMyIHRlc3RfbGlzdF9nbG9iYWxbXTtcXG4tQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXFxuLUJURl9JRF9VTlVTRURcXG4rQlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuIEJURl9JRCh0eXBlZGVmLCBUKVxcbiBCVEZfSUQodHlwZWRlZiwgVSlcXG4gQlRGX0lEKHN0cnVjdCwgIFMpXFxuIEJURl9JRCh1bmlvbiwgICBVKVxcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcXG4rQlRGX1NFVF9FTkQodGVzdF9zZXQpXFxuIFxcbi1CVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KVxcbitCVEZfS0ZVTkNTX1NUQVJUKHRlc3Rfa2Z1bmNfc2V0KVxcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxcbitCVEZfS0ZVTkNTX0VORCh0ZXN0X2tmdW5jX3NldClcXG4rXFxuKy8qXFxuKyAqIFNhbWUga2Z1bmNzIGluIHJldmVyc2UgZGVjbGFyYXRpb24gb3JkZXIsIHNvIHJlc29sdmVfYnRmaWRzIGhhcyB0b1xcbisgKiBhY3R1YWxseSBzb3J0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHdvIHNldHMuXFxuKyAqL1xcbitCVEZfS0ZVTkNTX1NUQVJUKHRlc3Rfa2Z1bmNfc2V0X3JldilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcXG4rQlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXRfcmV2KVxcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcFxcbitcXG4rZXh0ZXJuIF9fdTMyIHRlc3RfbGlzdF9nbG9iYWxbXTtcXG4rQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXFxuK0JURl9JRF9VTlVTRURcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuIEJURl9JRCh0eXBlZGVmLCBUKVxcbiBCVEZfSUQodHlwZWRlZiwgVSlcXG4gQlRGX0lEKHN0cnVjdCwgIFMpXFxuIEJURl9JRCh1bmlvbiwgICBVKVxcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcXG4tQlRGX1NFVF9FTkQodGVzdF9zZXQpXFxuIFxcbiBzdGF0aWMgaW50XFxuIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZClcXG5AQCAtNzAsMTAgKzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xcbi1cXHRpZiAoIXR5cGUpIHtcXG4tXFx0XFx0UFJJTlRfRkFJTChcXFwiRmFpbGVkIHRvIGdldCB0eXBlIGZvciBJRCAlZFxcXFxuXFxcIiwgdHlwZV9pZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcXFwiYnRmX190eXBlX2J5X2lkXFxcIikpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbitcXG4rXFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKykge1xcbiBcXHRcXHRpZiAodGVzdF9zeW1ib2xzW2ldLmlkIFxcdTAwM2U9IDApXFxuQEAgLTgyLDY0ICsxMzAsODAgQEAgX19yZXNvbHZlX3N5bWJvbChzdHJ1Y3QgYnRmICpidGYsIGludCB0eXBlX2lkKVxcbiBcXHRcXHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVxcdTAwM2VpbmZvKSAhPSB0ZXN0X3N5bWJvbHNbaV0udHlwZSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbi1cXHRcXHRpZiAoIXN0cikge1xcbi1cXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJGYWlsZWQgdG8gZ2V0IG5hbWUgZm9yIEJURiBJRCAlZFxcXFxuXFxcIiwgdHlwZV9pZCk7XFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0aWYgKCFzdHJjbXAoc3RyLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSkpXFxuIFxcdFxcdFxcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghYnRmX2lzX2Z1bmModHlwZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkrKykge1xcbitcXHRcXHRpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFzdHJjbXAoc3RyLCBrZnVuY19zeW1ib2xzW2ldLm5hbWUpKVxcbitcXHRcXHRcXHRrZnVuY19zeW1ib2xzW2ldLmlkID0gdHlwZV9pZDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHZvaWQpXFxuK3N0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHN0cnVjdCBidGYgKmJ0ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdF9fdTMyIG5yID0gYnRmX190eXBlX2NudChidGYpO1xcbiBcXHRpbnQgdHlwZV9pZDtcXG4tXFx0X191MzIgbnI7XFxuLVxcbi1cXHRidGYgPSBidGZfX3BhcnNlX3JhdyhcXFwicmVzb2x2ZV9idGZpZHMudGVzdC5vLkJURlxcXCIpO1xcbi1cXHRpZiAoQ0hFQ0sobGliYnBmX2dldF9lcnJvcihidGYpLCBcXFwicmVzb2x2ZVxcXCIsXFxuLVxcdFxcdCAgXFxcIkZhaWxlZCB0byBsb2FkIEJURiBmcm9tIHJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXFxcblxcXCIpKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRuciA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTtcXG4gXFxuIFxcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXFx1MDAzYyBucjsgdHlwZV9pZCsrKSB7XFxuIFxcdFxcdGlmIChfX3Jlc29sdmVfc3ltYm9sKGJ0ZiwgdHlwZV9pZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4tXFxuLVxcdGJ0Zl9fZnJlZShidGYpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBqO1xcbitcXG4rXFx0QVNTRVJUX0VRKHNldC1cXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXFxcImtmdW5jX3NldF9mbGFnc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2V0LVxcdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFxcXCJrZnVuY19zZXRfY250XFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2V0LVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKTsgaisrKSB7XFxuK1xcdFxcdFxcdGlmIChrZnVuY19zeW1ib2xzW2pdLmlkID09IChzMzIpc2V0LVxcdTAwM2VwYWlyc1tpXS5pZCkge1xcbitcXHRcXHRcXHRcXHRBU1NFUlRfRVEoc2V0LVxcdTAwM2VwYWlyc1tpXS5mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCBcXFwia2Z1bmNfZmxhZ3NfY2hlY2tcXFwiKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0QVNTRVJUX1RSVUUoaiBcXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFxcXCJrZnVuY19pZF9mb3VuZFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9MRShzZXQtXFx1MDAzZXBhaXJzW2kgLSAxXS5pZCxcXG4rXFx0XFx0XFx0XFx0ICBzZXQtXFx1MDAzZXBhaXJzW2ldLmlkLCBcXFwia2Z1bmNfc29ydF9jaGVja1xcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXFxuIHtcXG4gXFx0X191MzIgKnRlc3RfbGlzdCwgKnRlc3RfbGlzdHNbXSA9IHsgdGVzdF9saXN0X2xvY2FsLCB0ZXN0X2xpc3RfZ2xvYmFsIH07XFxuIFxcdHVuc2lnbmVkIGludCBpLCBqO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbiBcXG4tXFx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxcbitcXHRidGYgPSBidGZfX3BhcnNlX3JhdyhCVEZfREFUQV9GSUxFKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXFxcImJ0Zl9wYXJzZVxcXCIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0LyogQ2hlY2sgQlRGX0lEX0xJU1QodGVzdF9saXN0X2xvY2FsKSBhbmRcXG4gXFx0ICogQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwpIElEc1xcbiBcXHQgKi9cXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9saXN0cyk7IGorKykge1xcbiBcXHRcXHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpKyspIHtcXG4tXFx0XFx0XFx0cmV0ID0gQ0hFQ0sodGVzdF9saXN0W2ldICE9IHRlc3Rfc3ltYm9sc1tpXS5pZCxcXG4tXFx0XFx0XFx0XFx0ICAgIFxcXCJpZF9jaGVja1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwid3JvbmcgSUQgZm9yICVzICglZCAhPSAlZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKylcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIENoZWNrIEJURl9TRVRfU1RBUlQodGVzdF9zZXQpIElEcyAqL1xcbkBAIC0xNTMsMTUgKzIxNywxNiBAQCB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IENIRUNLKCFmb3VuZCwgXFxcImlkX2NoZWNrXFxcIixcXG4tXFx0XFx0XFx0ICAgIFxcXCJJRCAlZCBub3QgZm91bmQgaW4gdGVzdF9zeW1ib2xzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKCFBU1NFUlRfVFJVRShmb3VuZCwgXFxcImlkX2luX3Rlc3Rfc3ltYm9sc1xcXCIpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdGlmIChpIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRpZiAoIUFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFxcXCJzb3J0X2NoZWNrXFxcIikpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoaSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdEFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFxcXCJzb3J0X2NoZWNrXFxcIik7XFxuIFxcdH1cXG4rXFxuK1xcdGNoZWNrX2tmdW5jX3NldChcXHUwMDI2dGVzdF9rZnVuY19zZXQpO1xcbitcXHRjaGVja19rZnVuY19zZXQoXFx1MDAyNnRlc3Rfa2Z1bmNfc2V0X3Jldik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xcbkBAIC00OCwzICs0OCwxMyBAQCBpbnQgZnVuYyhzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA5LjM1NDY1MjUwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNDE4NDY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZmU1M2I5MWEzMjMxNDkzNzdiMzUxNWQ4Y2I4NTEyMTEwNjVhYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwMToxODowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxuQEAgLTEwLDYgKzEwLDkgQEAgc3RydWN0IGJ0Zl9pZF9zZXQge1xuIFx0dTMyIGlkc1tdO1xuIH07XG4gXG4rLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cbisjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbitcbiBzdHJ1Y3QgYnRmX2lkX3NldDgge1xuIFx0dTMyIGNudDtcbiBcdHUzMiBmbGFncztcbkBAIC0yMiw2ICsyNSw3IEBAIHN0cnVjdCBidGZfaWRfc2V0OCB7XG4gI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2UgLyogZm9yIF9fUEFTVEUgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuIC8qXG4gICogRm9sbG93aW5nIG1hY3JvcyBoZWxwIHRvIGRlZmluZSBsaXN0cyBvZiBCVEYgSURzIHBsYWNlZFxuQEAgLTM1LDcgKzM5LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiBcbiAjZGVmaW5lIEJURl9JRFNfU0VDVElPTiBcIi5CVEZfaWRzXCJcbiBcbi0jZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sKVx0XHRcdFx0XFxcbisjZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sLCB3b3JkKVx0XHRcdFxcXG4gYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wdXNoc2VjdGlvbiBcIiBCVEZfSURTX1NFQ1RJT04gXCIsXFxcImFcXFwiOyAgICAgICBcXG5cIlx0XFxcbiBcIi5sb2NhbCBcIiAjc3ltYm9sIFwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwiXHRcXFxuQEAgLTQzLDEwICs0NywxMSBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwiLnNpemUgIFwiICNzeW1ib2wgXCIsIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4gI3N5bWJvbCBcIjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4gXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rd29yZFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XG4gXG4tI2RlZmluZSBfX0JURl9JRChzeW1ib2wpIFxcXG4tXHRfX19fQlRGX0lEKHN5bWJvbClcbisjZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCwgd29yZCkgXFxcbitcdF9fX19CVEZfSUQoc3ltYm9sLCB3b3JkKVxuIFxuICNkZWZpbmUgX19JRChwcmVmaXgpIFxcXG4gXHRfX1BBU1RFKF9fUEFTVEUocHJlZml4LCBfX0NPVU5URVJfXyksIF9fTElORV9fKVxuQEAgLTU2LDcgKzYxLDE0IEBAIGFzbShcdFx0XHRcdFx0XHRcdFxcXG4gICogdG8gNCB6ZXJvIGJ5dGVzLlxuICAqL1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSkgXFxcbi1cdF9fQlRGX0lEKF9fSUQoX19CVEZfSURfXyMjcHJlZml4IyNfXyMjbmFtZSMjX18pKVxuK1x0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFwiXCIpXG4rXG4rI2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFxcXG4rXHRfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSwgXCIubG9uZyBcIiAjZmxhZ3MgXCJcXG5cIilcbisjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXFxcbitcdF9fX19CVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCBmbGFncylcbisjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLikgXFxcbitcdF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgIyNfX1ZBX0FSR1NfXywgMClcbiBcbiAvKlxuICAqIFRoZSBCVEZfSURfTElTVCBtYWNybyBkZWZpbmVzIHB1cmUgKHVuc29ydGVkKSBsaXN0XG5AQCAtMTU1LDEwICsxNjcsNTggQEAgYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwiKTtcdFxcXG4gZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0IG5hbWU7XG4gXG4rLypcbisgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcbisgKiBCVEYgSURzIGFuZCB0aGVpciBmbGFncyBwbHVzIGl0cyBtZW1iZXJzIGNvdW50LCB3aXRoIHRoZVxuKyAqIGZvbGxvd2luZyBsYXlvdXQ6XG4rICpcbisgKiBCVEZfU0VUOF9TVEFSVChsaXN0KVxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMSwgbmFtZTEsIGZsYWdzKVxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxuKyAqIEJURl9TRVQ4X0VORChsaXN0KVxuKyAqXG4rICogX19CVEZfSURfX3NldDhfX2xpc3Q6XG4rICogLnplcm8gOFxuKyAqIGxpc3Q6XG4rICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcbisgKiAuemVybyA0XG4rICogLndvcmQgKDEgXHUwMDNjXHUwMDNjIDApIHwgKDEgXHUwMDNjXHUwMDNjIDIpXG4rICogX19CVEZfSURfX3R5cGUyX19uYW1lMl9fNTpcbisgKiAuemVybyA0XG4rICogLndvcmQgKDEgXHUwMDNjXHUwMDNjIDMpIHwgKDEgXHUwMDNjXHUwMDNjIDEpIHwgKDEgXHUwMDNjXHUwMDNjIDIpXG4rICpcbisgKi9cbisjZGVmaW5lIF9fQlRGX1NFVDhfU1RBUlQobmFtZSwgc2NvcGUsIGZsYWdzKVx0XHRcXFxuK19fQlRGX0lEX0xJU1QobmFtZSwgbG9jYWwpXHRcdFx0XHRcXFxuK2FzbShcdFx0XHRcdFx0XHRcdFxcXG4rXCIucHVzaHNlY3Rpb24gXCIgQlRGX0lEU19TRUNUSU9OIFwiLFxcXCJhXFxcIjsgICAgICAgXFxuXCJcdFxcXG4rXCIuXCIgI3Njb3BlIFwiIF9fQlRGX0lEX19zZXQ4X19cIiAjbmFtZSBcIjsgICAgICAgIFxcblwiXHRcXFxuK1wiX19CVEZfSURfX3NldDhfX1wiICNuYW1lIFwiOjsgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rXCIubG9uZyBcIiBfX3N0cmluZ2lmeShmbGFncykgICAgICAgICAgICAgICAgICAgXCJcXG5cIlx0XFxcbitcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XG4rXG4rI2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVx0XHRcdFx0XFxcbitfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCAwKVxuK1xuKyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXHRcdFx0XHRcXFxuK2FzbShcdFx0XHRcdFx0XHRcdFxcXG4rXCIucHVzaHNlY3Rpb24gXCIgQlRGX0lEU19TRUNUSU9OIFwiLFxcXCJhXFxcIjsgICAgICBcXG5cIlx0XFxcbitcIi5zaXplIF9fQlRGX0lEX19zZXQ4X19cIiAjbmFtZSBcIiwgLi1cIiAjbmFtZSBcIiAgXFxuXCJcdFxcXG4rXCIucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XHRcXFxuK2V4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldDggbmFtZTtcbitcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcdFx0XHRcdFxcXG4rX19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxuK1xuKyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcdFx0XHRcdFxcXG4rQlRGX1NFVDhfRU5EKG5hbWUpXG4rXG4gI2Vsc2VcbiBcbi0jZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVs1XTtcbisjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSlcbisjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLilcbiAjZGVmaW5lIEJURl9JRF9VTlVTRURcbiAjZGVmaW5lIEJURl9JRF9MSVNUX0dMT0JBTChuYW1lLCBuKSB1MzIgX19tYXliZV91bnVzZWQgbmFtZVtuXTtcbiAjZGVmaW5lIEJURl9JRF9MSVNUX1NJTkdMRShuYW1lLCBwcmVmaXgsIHR5cGVuYW1lKSBzdGF0aWMgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbMV07XG5AQCAtMTY2LDYgKzIyNiwxMCBAQCBleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQgbmFtZTtcbiAjZGVmaW5lIEJURl9TRVRfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcbiAjZGVmaW5lIEJURl9TRVRfU1RBUlRfR0xPQkFMKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4gI2RlZmluZSBCVEZfU0VUX0VORChuYW1lKVxuKyNkZWZpbmUgQlRGX1NFVDhfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4rI2RlZmluZSBCVEZfU0VUOF9FTkQobmFtZSlcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcbisjZGVmaW5lIEJURl9LRlVOQ1NfRU5EKG5hbWUpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xuIFxuQEAgLTIxNSw1ICsyNzksOSBAQCBNQVhfQlRGX1RSQUNJTkdfVFlQRSxcbiB9O1xuIFxuIGV4dGVybiB1MzIgYnRmX3RyYWNpbmdfaWRzW107XG4rZXh0ZXJuIHUzMiBicGZfY2dyb3VwX2J0Zl9pZFtdO1xuK2V4dGVybiB1MzIgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J0Zl9pZFtdO1xuK2V4dGVybiB1MzIgYnRmX2JwZl9tYXBfaWRbXTtcbitleHRlcm4gdTMyIGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFtdO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG5pbmRleCA0MWRmYWFhYmI3M2Y0Yi4uYWM1MWZkNDU0ODIxNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG5AQCAtMTAsNyArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4gXG4tc3RhdGljIGludCBkdXJhdGlvbjtcbisjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXCJyZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXCJcbitcbisjaWZuZGVmIEtGX0ZBU1RDQUxMXG4rI2RlZmluZSBLRl9GQVNUQ0FMTCAoMSBcdTAwM2NcdTAwM2MgMTIpXG4rI2VuZGlmXG4gXG4gc3RydWN0IHN5bWJvbCB7XG4gXHRjb25zdCBjaGFyXHQqbmFtZTtcbkBAIC0yOCwxMiArMzIsNDEgQEAgc3RydWN0IHN5bWJvbCB0ZXN0X3N5bWJvbHNbXSA9IHtcbiBcdHsgXCJmdW5jXCIsICAgIEJURl9LSU5EX0ZVTkMsICAgIC0xIH0sXG4gfTtcbiBcbitzdHJ1Y3Qga2Z1bmNfc3ltYm9sIHtcbitcdGNvbnN0IGNoYXJcdCpuYW1lO1xuK1x0czMyXHRcdCBpZDtcbitcdHUzMlx0XHQgZmxhZ3M7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7XG4rXHR7IFwia2Z1bmNfYVwiLCAtMSwgMCB9LFxuK1x0eyBcImtmdW5jX2JcIiwgLTEsIEtGX0ZBU1RDQUxMIH0sXG4rfTtcbitcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXG4gYXNtIChcbiBcIi5wdXNoc2VjdGlvbiBcIiBCVEZfSURTX1NFQ1RJT04gXCIgLFxcXCJhXFxcIjsgXFxuXCJcbiBcIi5iYWxpZ24gNCwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCIpO1xuIFxuKy8qXG4rICogdGVzdF9saXN0X2xvY2FsLCB0ZXN0X3NldCBhbmQgdGVzdF9rZnVuY19zZXQgYXJlIC5sb2NhbCBzeW1ib2xzIHBsYWNlZFxuKyAqIGluIC5CVEZfaWRzIGJ5IGlubGluZSBhc20sIGFuZCBhcmUgcmVhZCBoZXJlIGRpcmVjdGx5IGJ5IEMgbmFtZS4gVG8gdGhlXG4rICogY29tcGlsZXIgdGhleSBhcmUgcGxhaW4sIGRlZmF1bHQtdmlzaWJpbGl0eSBleHRlcm4gb2JqZWN0cy5cbisgKlxuKyAqIFdoZW4gdGVzdF9wcm9ncyBpcyBsaW5rZWQgYXMgYSBwb3NpdGlvbi1pbmRlcGVuZGVudCBleGVjdXRhYmxlIChQSUUpLFxuKyAqIHRha2luZyB0aGUgYWRkcmVzcyBvZiBzdWNoIGFuIGV4dGVybiBpcyByb3V0ZWQgdGhyb3VnaCB0aGUgR09ULiBUaGVcbisgKiBHTlUgYXNzZW1ibGVyIG9uIGFhcmNoNjQgdW5jb25kaXRpb25hbGx5IGNvbnZlcnRzIHJlZmVyZW5jZXMgdG8gLmxvY2FsXG4rICogc3ltYm9scyBpbnRvIHNlY3Rpb24gKyBhZGRlbmQgZm9ybSAoXCIuQlRGX2lkcyArIFx1MDAzY29mZnNldFx1MDAzZVwiKSwgYnV0IGEgR09UXG4rICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cbisgKiB0aGUgbGlua2VyIHJlc29sdmVzIGl0IHRvIHRoZSAuQlRGX2lkcyBiYXNlLlxuKyAqXG4rICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcbisgKiBlbWl0cyBhIGRpcmVjdCwgYWRkZW5kLXByZXNlcnZpbmcgUEMtcmVsYXRpdmUgYWNjZXNzIGluc3RlYWQgb2YgYSBHT1RcbisgKiBsb2FkLCBpbiBib3RoIFBJRSBhbmQgbm9uLVBJRSBidWlsZHMuIHRlc3RfbGlzdF9nbG9iYWwgaXMgLmdsb2JsIGFuZFxuKyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXG4rICovXG4rI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbilcbiBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpXG4gQlRGX0lEX1VOVVNFRFxuIEJURl9JRCh0eXBlZGVmLCBTKVxuQEAgLTQzLDI0ICs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiBcbi1leHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdO1xuLUJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuLUJURl9JRF9VTlVTRURcbitCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KVxuIEJURl9JRCh0eXBlZGVmLCBTKVxuIEJURl9JRCh0eXBlZGVmLCBUKVxuIEJURl9JRCh0eXBlZGVmLCBVKVxuIEJURl9JRChzdHJ1Y3QsICBTKVxuIEJURl9JRCh1bmlvbiwgICBVKVxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxuK0JURl9TRVRfRU5EKHRlc3Rfc2V0KVxuIFxuLUJURl9TRVRfU1RBUlQodGVzdF9zZXQpXG4rQlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldClcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYiwgS0ZfRkFTVENBTEwpXG4rQlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXQpXG4rXG4rLypcbisgKiBTYW1lIGtmdW5jcyBpbiByZXZlcnNlIGRlY2xhcmF0aW9uIG9yZGVyLCBzbyByZXNvbHZlX2J0ZmlkcyBoYXMgdG9cbisgKiBhY3R1YWxseSBzb3J0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHdvIHNldHMuXG4rICovXG4rQlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldF9yZXYpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19hKVxuK0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0X3JldilcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcFxuK1xuK2V4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107XG4rQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXG4rQlRGX0lEX1VOVVNFRFxuIEJURl9JRCh0eXBlZGVmLCBTKVxuIEJURl9JRCh0eXBlZGVmLCBUKVxuIEJURl9JRCh0eXBlZGVmLCBVKVxuIEJURl9JRChzdHJ1Y3QsICBTKVxuIEJURl9JRCh1bmlvbiwgICBVKVxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxuLUJURl9TRVRfRU5EKHRlc3Rfc2V0KVxuIFxuIHN0YXRpYyBpbnRcbiBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG5AQCAtNzAsMTAgKzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdGlmICghdHlwZSkge1xuLVx0XHRQUklOVF9GQUlMKFwiRmFpbGVkIHRvIGdldCB0eXBlIGZvciBJRCAlZFxcblwiLCB0eXBlX2lkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcImJ0Zl9fdHlwZV9ieV9pZFwiKSlcbiBcdFx0cmV0dXJuIC0xO1xuLVx0fVxuK1xuK1x0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpKyspIHtcbiBcdFx0aWYgKHRlc3Rfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG5AQCAtODIsNjQgKzEzMCw4MCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gdGVzdF9zeW1ib2xzW2ldLnR5cGUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0aWYgKCFzdHIpIHtcbi1cdFx0XHRQUklOVF9GQUlMKFwiRmFpbGVkIHRvIGdldCBuYW1lIGZvciBCVEYgSUQgJWRcXG5cIiwgdHlwZV9pZCk7XG4tXHRcdFx0cmV0dXJuIC0xO1xuLVx0XHR9XG4tXG4gXHRcdGlmICghc3RyY21wKHN0ciwgdGVzdF9zeW1ib2xzW2ldLm5hbWUpKVxuIFx0XHRcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4gXHR9XG4gXG4rXHRpZiAoIWJ0Zl9pc19mdW5jKHR5cGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkrKykge1xuK1x0XHRpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKHN0ciwga2Z1bmNfc3ltYm9sc1tpXS5uYW1lKSlcbitcdFx0XHRrZnVuY19zeW1ib2xzW2ldLmlkID0gdHlwZV9pZDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyh2b2lkKVxuK3N0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHN0cnVjdCBidGYgKmJ0ZilcbiB7XG4tXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRfX3UzMiBuciA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTtcbiBcdGludCB0eXBlX2lkO1xuLVx0X191MzIgbnI7XG4tXG4tXHRidGYgPSBidGZfX3BhcnNlX3JhdyhcInJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcIik7XG4tXHRpZiAoQ0hFQ0sobGliYnBmX2dldF9lcnJvcihidGYpLCBcInJlc29sdmVcIixcbi1cdFx0ICBcIkZhaWxlZCB0byBsb2FkIEJURiBmcm9tIHJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXG5cIikpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuIFxuIFx0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuIFx0XHRpZiAoX19yZXNvbHZlX3N5bWJvbChidGYsIHR5cGVfaWQpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiAtMTtcbiBcdH1cbi1cbi1cdGJ0Zl9fZnJlZShidGYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNoZWNrX2tmdW5jX3NldChzdHJ1Y3QgYnRmX2lkX3NldDggKnNldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaSwgajtcbitcbitcdEFTU0VSVF9FUShzZXQtXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXCJrZnVuY19zZXRfZmxhZ3NcIik7XG4rXHRBU1NFUlRfRVEoc2V0LVx1MDAzZWNudCwgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXCJrZnVuY19zZXRfY250XCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGorKykge1xuK1x0XHRcdGlmIChrZnVuY19zeW1ib2xzW2pdLmlkID09IChzMzIpc2V0LVx1MDAzZXBhaXJzW2ldLmlkKSB7XG4rXHRcdFx0XHRBU1NFUlRfRVEoc2V0LVx1MDAzZXBhaXJzW2ldLmZsYWdzLFxuK1x0XHRcdFx0XHQgIGtmdW5jX3N5bWJvbHNbal0uZmxhZ3MsIFwia2Z1bmNfZmxhZ3NfY2hlY2tcIik7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0QVNTRVJUX1RSVUUoaiBcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXCJrZnVuY19pZF9mb3VuZFwiKTtcbitcbitcdFx0aWYgKGkgXHUwMDNlIDApIHtcbitcdFx0XHRBU1NFUlRfTEUoc2V0LVx1MDAzZXBhaXJzW2kgLSAxXS5pZCxcbitcdFx0XHRcdCAgc2V0LVx1MDAzZXBhaXJzW2ldLmlkLCBcImtmdW5jX3NvcnRfY2hlY2tcIik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXG4ge1xuIFx0X191MzIgKnRlc3RfbGlzdCwgKnRlc3RfbGlzdHNbXSA9IHsgdGVzdF9saXN0X2xvY2FsLCB0ZXN0X2xpc3RfZ2xvYmFsIH07XG4gXHR1bnNpZ25lZCBpbnQgaSwgajtcbi1cdGludCByZXQgPSAwO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuIFxuLVx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxuK1x0YnRmID0gYnRmX19wYXJzZV9yYXcoQlRGX0RBVEFfRklMRSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9wYXJzZVwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHJlc29sdmVfc3ltYm9scyhidGYpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIENoZWNrIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbCkgYW5kXG4gXHQgKiBCVEZfSURfTElTVF9HTE9CQUwodGVzdF9saXN0X2dsb2JhbCkgSURzXG4gXHQgKi9cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9saXN0cyk7IGorKykge1xuIFx0XHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKykge1xuLVx0XHRcdHJldCA9IENIRUNLKHRlc3RfbGlzdFtpXSAhPSB0ZXN0X3N5bWJvbHNbaV0uaWQsXG4tXHRcdFx0XHQgICAgXCJpZF9jaGVja1wiLFxuLVx0XHRcdFx0ICAgIFwid3JvbmcgSUQgZm9yICVzICglZCAhPSAlZClcXG5cIixcbi1cdFx0XHRcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcbi1cdFx0XHRcdCAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKylcbitcdFx0XHRBU1NFUlRfRVEodGVzdF9saXN0W2ldLCB0ZXN0X3N5bWJvbHNbaV0uaWQsIHRlc3Rfc3ltYm9sc1tpXS5uYW1lKTtcbiBcdH1cbiBcbiBcdC8qIENoZWNrIEJURl9TRVRfU1RBUlQodGVzdF9zZXQpIElEcyAqL1xuQEAgLTE1MywxNSArMjE3LDE2IEBAIHZvaWQgdGVzdF9yZXNvbHZlX2J0Zmlkcyh2b2lkKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IENIRUNLKCFmb3VuZCwgXCJpZF9jaGVja1wiLFxuLVx0XHRcdCAgICBcIklEICVkIG5vdCBmb3VuZCBpbiB0ZXN0X3N5bWJvbHNcXG5cIixcbi1cdFx0XHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKCFBU1NFUlRfVFJVRShmb3VuZCwgXCJpZF9pbl90ZXN0X3N5bWJvbHNcIikpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChpIFx1MDAzZSAwKSB7XG4tXHRcdFx0aWYgKCFBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCBcInNvcnRfY2hlY2tcIikpXG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKGkgXHUwMDNlIDApXG4rXHRcdFx0QVNTRVJUX0xFKHRlc3Rfc2V0Lmlkc1tpIC0gMV0sIHRlc3Rfc2V0Lmlkc1tpXSwgXCJzb3J0X2NoZWNrXCIpO1xuIFx0fVxuK1xuK1x0Y2hlY2tfa2Z1bmNfc2V0KFx1MDAyNnRlc3Rfa2Z1bmNfc2V0KTtcbitcdGNoZWNrX2tmdW5jX3NldChcdTAwMjZ0ZXN0X2tmdW5jX3NldF9yZXYpO1xuK1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcbkBAIC00OCwzICs0OCwxMyBAQCBpbnQgZnVuYyhzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxuK3tcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA5LjM1NDY1NDA3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDY4MTc3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBUb29sLVNpZGUgQ2hhbmdlcyBmb3IgQlRGIElEIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHNvbWUgQlRGIElEIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIEkgc2VlIHRoYXQgYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCBpcyBiZWluZyB1cGRhdGVkLCBhbG9uZyB3aXRoIHNvbWUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgbWFjcm9zIOKAkyBgQlRGX1NFVDhfS0ZVTkNTYCwgYEJURl9JRF9GTEFHU2AsIGBCVEZfU0VUOF9TVEFSVGAsIGV0Yy4g4oCTIHdoaWNoIHNlZW0gbGlrZSB0aGV5IGFyZSBmb3IgbWFuYWdpbmcgYW5kIG9yZ2FuaXppbmcgQlRGIElEIGRlZmluaXRpb25zLlxuXG5NeSBmaXJzdCBjb25jZXJuIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29sLXNpZGUgY2hhbmdlcyBhcmVuJ3QgaW5hZHZlcnRlbnRseSBpbXBhY3RpbmcgdGhlIGNvcmUga2VybmVsLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIGlmIHRoZSBrZXJuZWwncyBjb3B5IG9mIGBidGZfaWRzLmhgIChgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgKSBpcyBhbHNvIGJlaW5nIG1vZGlmaWVkLCBidXQgaXQncyBub3QuIEdvb2QsIHRoaXMgaXMgcHJvYmFibHkgaXNvbGF0ZWQgdG8gdGhlIGJ1aWxkIHRvb2xzIGFuZCBzZWxmLXRlc3RzLlxuXG5JIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGJlIHN1cmUuIFllcCwgaXQncyBqdXN0IHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnk6IGB0b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY2AuIFRoaXMgY29uZmlybXMgaXQncyBhIFwidG9vbHNcIiBjaGFuZ2UgYW5kIG5vdCBkaXJlY3RseSBrZXJuZWwtZXhlY3V0aW9uIHJlbGV2YW50LlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIG9yIGlmIHRoZXkgYXJlIHJlbGV2YW50IHRvIGtlcm5lbCBleGVjdXRpb24uIFNpbmNlIGl0J3MgYWxsIHdpdGhpbiBgdG9vbHMvYCwgSSBkb24ndCB0aGluayB0aGlzIHBhdGNoIGl0c2VsZiBpcyBhIGRpcmVjdCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgYmlnIElGLCB0aGUgdG9vbHMgaW4gcXVlc3Rpb24gYWZmZWN0IHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUgaW4gc29tZSB3YXkuIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyB0aGUgY2FzZSBoZXJlLiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBhZGRpbmcgbWFjcm9zIGFuZCBzb21lIHRlc3RzIGZvciB0aGUgQlRGIElEIHJlc29sdXRpb24gcHJvY2Vzcy5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoaXMgaXMgYSBjb2RlLWh5Z2llbmUgdHlwZSBvZiBwYXRjaDsgbWFraW5nIHRoaW5ncyBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gd29yayB3aXRoLCByYXRoZXIgdGhhbiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJZiBpdCB3ZXJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGtlcm5lbCBleGVjdXRpb24sIGl0IHdvdWxkIG5lZWQgbW9yZSBzY3J1dGlueS5cblxuSSB0YWtlIGFub3RoZXIgbG9vayBhbmQgZ3JlcCB0byB2ZXJpZnkgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGB0b29sc2AgYW5kIG5vdCB0aGUga2VybmVsIGl0c2VsZi4gQ29uZmlybWVkLiBgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIG9ubHkgdXNlZCBieSB0b29scyBsaWtlIGByZXNvbHZlX2J0Zmlkc2AgYW5kIGJwZiBzZWxmdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMToxODoxOS40MjI4MzQxMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMzAzNTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVEZfU0VUOF9LRlVOQ1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTMtLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yMTA9ZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0OCBuYW1lO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjEyLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoyMTM6X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIxNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxNj1CVEZfU0VUOF9FTkQobmFtZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMS0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIzMjojZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMzMtI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MTE2PWludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjMtXFx0ICovXFxua2VybmVsL2JwZi9idGYuYzo5MTI0OlxcdGlmICghKGtzZXQtXFx1MDAzZXNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVEZfU0VUOF9LRlVOQ1MpKSB7XFxua2VybmVsL2JwZi9idGYuYy05MTI1LVxcdFxcdFdBUk5fT04oIWtzZXQtXFx1MDAzZW93bmVyKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTMtLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTUtXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yMDk9ZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0OCBuYW1lO1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjExLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoyMTI6X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIxMy1cXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxNT1CVEZfU0VUOF9FTkQobmFtZSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMC0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIzMTojZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMzItI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYz0xNjI9c3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYy0xNjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYzoxNjY6XFx0QVNTRVJUX0VRKHNldC1cXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXFxcImtmdW5jX3NldF9mbGFnc1xcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMtMTY3LVxcdEFTU0VSVF9FUShzZXQtXFx1MDAzZWNudCwgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXFxcImtmdW5jX3NldF9jbnRcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDE6MTg6MjEuNTQ1ODc2MjM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MDU5NjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhhbmtmdWxseS4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCBhbmQgdGhlIHNlbGZ0ZXN0cyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBDcnVjaWFsbHksIGl0J3MgKm5vdCogdG91Y2hpbmcgdGhlIG1haW4ga2VybmVsJ3MgaW5jbHVkZSBkaXJlY3RvcnkgKGBpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGApIG9yIGFueSBjcml0aWNhbCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5LiBUaGlzIGlzIGp1c3QgYSBtYXR0ZXIgb2Yga2VlcGluZyB0aGUgdG9vbCdzIGhlYWRlciBmaWxlIGluIHN5bmMgd2l0aCB0aGUga2VybmVsJ3MgZGVmaW5pdGlvbiwgYW5kIGFkZGluZyBhIG5ldyB0ZXN0IHRvIHRoZSB0b29saW5nLiBUaGlzIGlzbid0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIGl0J3MganVzdCBhYm91dCBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgdmVyaWZpY2F0aW9uIHdpdGhpbiB0aGUgdG9vbHMuIFdpdGggdGhhdCBpbiBtaW5kLCBJIGFtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGZ1bmN0aW9uYWwgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE3OSwiT3V0cHV0VG9rZW5zIjo4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMToxODoyNi42OTY0NzQ3MzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyBhbmQgc2VsZnRlc3RzICh0b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpmz4j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 01:03:46 +0000 UTC FinishedAt: 2026-06-24 01:18:28 +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+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRmZTUzYjkxYTMyMzE0OTM3N2IzNTE1ZDhjYjg1MTIxMTA2NWFjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDAxOjE4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxuQEAgLTEwLDYgJiM0MzsxMCw5IEBAIHN0cnVjdCBidGZfaWRfc2V0IHtcbiBcdHUzMiBpZHNbXTtcbiB9O1xuIFxuJiM0MzsvKiBUaGlzIGZsYWcgaW1wbGllcyBCVEZfU0VUOCBob2xkcyBrZnVuYyhzKSAqL1xuJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4gc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiBcdHUzMiBjbnQ7XG4gXHR1MzIgZmxhZ3M7XG5AQCAtMjIsNiAmIzQzOzI1LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZSAvKiBmb3IgX19QQVNURSAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuIC8qXG4gICogRm9sbG93aW5nIG1hY3JvcyBoZWxwIHRvIGRlZmluZSBsaXN0cyBvZiBCVEYgSURzIHBsYWNlZFxuQEAgLTM1LDcgJiM0MzszOSw3IEBAIHN0cnVjdCBidGZfaWRfc2V0OCB7XG4gXG4gI2RlZmluZSBCVEZfSURTX1NFQ1RJT04gXCYjMzQ7LkJURl9pZHNcJiMzNDtcbiBcbi0jZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sKVx0XHRcdFx0XFxcbiYjNDM7I2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbCwgd29yZClcdFx0XHRcXFxuIGFzbShcdFx0XHRcdFx0XHRcdFxcXG4gXCYjMzQ7LnB1c2hzZWN0aW9uIFwmIzM0OyBCVEZfSURTX1NFQ1RJT04gXCYjMzQ7LFxcXCYjMzQ7YVxcXCYjMzQ7OyAgICAgICBcXG5cJiMzNDtcdFxcXG4gXCYjMzQ7LmxvY2FsIFwmIzM0OyAjc3ltYm9sIFwmIzM0OyA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDtcdFxcXG5AQCAtNDMsMTAgJiM0Mzs0NywxMSBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwmIzM0Oy5zaXplICBcJiMzNDsgI3N5bWJvbCBcJiMzNDssIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7XHRcXFxuICNzeW1ib2wgXCYjMzQ7OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDtcdFxcXG4gXCYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7d29yZFx0XHRcdFx0XHRcdFx0XFxcbiBcJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7KTtcbiBcbi0jZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCkgXFxcbi1cdF9fX19CVEZfSUQoc3ltYm9sKVxuJiM0MzsjZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCwgd29yZCkgXFxcbiYjNDM7XHRfX19fQlRGX0lEKHN5bWJvbCwgd29yZClcbiBcbiAjZGVmaW5lIF9fSUQocHJlZml4KSBcXFxuIFx0X19QQVNURShfX1BBU1RFKHByZWZpeCwgX19DT1VOVEVSX18pLCBfX0xJTkVfXylcbkBAIC01Niw3ICYjNDM7NjEsMTQgQEAgYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiAgKiB0byA0IHplcm8gYnl0ZXMuXG4gICovXG4gI2RlZmluZSBCVEZfSUQocHJlZml4LCBuYW1lKSBcXFxuLVx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXykpXG4mIzQzO1x0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFwmIzM0O1wmIzM0OylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgX19fX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzKSBcXFxuJiM0MztcdF9fQlRGX0lEKF9fSUQoX19CVEZfSURfXyMjcHJlZml4IyNfXyMjbmFtZSMjX18pLCBcJiMzNDsubG9uZyBcJiMzNDsgI2ZsYWdzIFwmIzM0O1xcblwmIzM0OylcbiYjNDM7I2RlZmluZSBfX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzLCAuLi4pIFxcXG4mIzQzO1x0X19fX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIGZsYWdzKVxuJiM0MzsjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLikgXFxcbiYjNDM7XHRfX0JURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsICMjX19WQV9BUkdTX18sIDApXG4gXG4gLypcbiAgKiBUaGUgQlRGX0lEX0xJU1QgbWFjcm8gZGVmaW5lcyBwdXJlICh1bnNvcnRlZCkgbGlzdFxuQEAgLTE1NSwxMCAmIzQzOzE2Nyw1OCBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0Oyk7XHRcXFxuIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcbiYjNDM7ICogQlRGIElEcyBhbmQgdGhlaXIgZmxhZ3MgcGx1cyBpdHMgbWVtYmVycyBjb3VudCwgd2l0aCB0aGVcbiYjNDM7ICogZm9sbG93aW5nIGxheW91dDpcbiYjNDM7ICpcbiYjNDM7ICogQlRGX1NFVDhfU1RBUlQobGlzdClcbiYjNDM7ICogQlRGX0lEX0ZMQUdTKHR5cGUxLCBuYW1lMSwgZmxhZ3MpXG4mIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxuJiM0MzsgKiBCVEZfU0VUOF9FTkQobGlzdClcbiYjNDM7ICpcbiYjNDM7ICogX19CVEZfSURfX3NldDhfX2xpc3Q6XG4mIzQzOyAqIC56ZXJvIDhcbiYjNDM7ICogbGlzdDpcbiYjNDM7ICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcbiYjNDM7ICogLnplcm8gNFxuJiM0MzsgKiAud29yZCAoMSBcdTAwM2NcdTAwM2MgMCkgfCAoMSBcdTAwM2NcdTAwM2MgMilcbiYjNDM7ICogX19CVEZfSURfX3R5cGUyX19uYW1lMl9fNTpcbiYjNDM7ICogLnplcm8gNFxuJiM0MzsgKiAud29yZCAoMSBcdTAwM2NcdTAwM2MgMykgfCAoMSBcdTAwM2NcdTAwM2MgMSkgfCAoMSBcdTAwM2NcdTAwM2MgMilcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX19CVEZfU0VUOF9TVEFSVChuYW1lLCBzY29wZSwgZmxhZ3MpXHRcdFxcXG4mIzQzO19fQlRGX0lEX0xJU1QobmFtZSwgbG9jYWwpXHRcdFx0XHRcXFxuJiM0Mzthc20oXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDssXFxcJiMzNDthXFxcJiMzNDs7ICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7LlwmIzM0OyAjc2NvcGUgXCYjMzQ7IF9fQlRGX0lEX19zZXQ4X19cJiMzNDsgI25hbWUgXCYjMzQ7OyAgICAgICAgXFxuXCYjMzQ7XHRcXFxuJiM0MztcJiMzNDtfX0JURl9JRF9fc2V0OF9fXCYjMzQ7ICNuYW1lIFwmIzM0Ozo7ICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1x0XFxcbiYjNDM7XCYjMzQ7LmxvbmcgXCYjMzQ7IF9fc3RyaW5naWZ5KGZsYWdzKSAgICAgICAgICAgICAgICAgICBcJiMzNDtcXG5cJiMzNDtcdFxcXG4mIzQzO1wmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVx0XHRcdFx0XFxcbiYjNDM7X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXHRcdFx0XHRcXFxuJiM0Mzthc20oXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDssXFxcJiMzNDthXFxcJiMzNDs7ICAgICAgXFxuXCYjMzQ7XHRcXFxuJiM0MztcJiMzNDsuc2l6ZSBfX0JURl9JRF9fc2V0OF9fXCYjMzQ7ICNuYW1lIFwmIzM0OywgLi1cJiMzNDsgI25hbWUgXCYjMzQ7ICBcXG5cJiMzNDtcdFxcXG4mIzQzO1wmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0Oyk7XHRcXFxuJiM0MztleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcdFx0XHRcdFxcXG4mIzQzO19fQlRGX1NFVDhfU1RBUlQobmFtZSwgbG9jYWwsIEJURl9TRVQ4X0tGVU5DUylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcdFx0XHRcdFxcXG4mIzQzO0JURl9TRVQ4X0VORChuYW1lKVxuJiM0MztcbiAjZWxzZVxuIFxuLSNkZWZpbmUgQlRGX0lEX0xJU1QobmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzVdO1xuJiM0MzsjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSlcbiYjNDM7I2RlZmluZSBCVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAuLi4pXG4gI2RlZmluZSBCVEZfSURfVU5VU0VEXG4gI2RlZmluZSBCVEZfSURfTElTVF9HTE9CQUwobmFtZSwgbikgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbbl07XG4gI2RlZmluZSBCVEZfSURfTElTVF9TSU5HTEUobmFtZSwgcHJlZml4LCB0eXBlbmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzFdO1xuQEAgLTE2Niw2ICYjNDM7MjI2LDEwIEBAIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lO1xuICNkZWZpbmUgQlRGX1NFVF9TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQgX19tYXliZV91bnVzZWQgbmFtZSA9IHsgMCB9O1xuICNkZWZpbmUgQlRGX1NFVF9TVEFSVF9HTE9CQUwobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcbiAjZGVmaW5lIEJURl9TRVRfRU5EKG5hbWUpXG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4mIzQzOyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXG4mIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xuJiM0MzsjZGVmaW5lIEJURl9LRlVOQ1NfRU5EKG5hbWUpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xuIFxuQEAgLTIxNSw1ICYjNDM7Mjc5LDkgQEAgTUFYX0JURl9UUkFDSU5HX1RZUEUsXG4gfTtcbiBcbiBleHRlcm4gdTMyIGJ0Zl90cmFjaW5nX2lkc1tdO1xuJiM0MztleHRlcm4gdTMyIGJwZl9jZ3JvdXBfYnRmX2lkW107XG4mIzQzO2V4dGVybiB1MzIgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J0Zl9pZFtdO1xuJiM0MztleHRlcm4gdTMyIGJ0Zl9icGZfbWFwX2lkW107XG4mIzQzO2V4dGVybiB1MzIgYnBmX2ttZW1fY2FjaGVfYnRmX2lkW107XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbmluZGV4IDQxZGZhYWFiYjczZjRiLi5hYzUxZmQ0NTQ4MjE0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcbkBAIC0xMCw3ICYjNDM7MTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGR1cmF0aW9uO1xuJiM0MzsjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXCYjMzQ7cmVzb2x2ZV9idGZpZHMudGVzdC5vLkJURlwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBLRl9GQVNUQ0FMTFxuJiM0MzsjZGVmaW5lIEtGX0ZBU1RDQUxMICgxIFx1MDAzY1x1MDAzYyAxMilcbiYjNDM7I2VuZGlmXG4gXG4gc3RydWN0IHN5bWJvbCB7XG4gXHRjb25zdCBjaGFyXHQqbmFtZTtcbkBAIC0yOCwxMiAmIzQzOzMyLDQxIEBAIHN0cnVjdCBzeW1ib2wgdGVzdF9zeW1ib2xzW10gPSB7XG4gXHR7IFwmIzM0O2Z1bmNcJiMzNDssICAgIEJURl9LSU5EX0ZVTkMsICAgIC0xIH0sXG4gfTtcbiBcbiYjNDM7c3RydWN0IGtmdW5jX3N5bWJvbCB7XG4mIzQzO1x0Y29uc3QgY2hhclx0Km5hbWU7XG4mIzQzO1x0czMyXHRcdCBpZDtcbiYjNDM7XHR1MzJcdFx0IGZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrZnVuY19zeW1ib2wga2Z1bmNfc3ltYm9sc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7a2Z1bmNfYVwmIzM0OywgLTEsIDAgfSxcbiYjNDM7XHR7IFwmIzM0O2tmdW5jX2JcJiMzNDssIC0xLCBLRl9GQVNUQ0FMTCB9LFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXG4gYXNtIChcbiBcJiMzNDsucHVzaHNlY3Rpb24gXCYjMzQ7IEJURl9JRFNfU0VDVElPTiBcJiMzNDsgLFxcXCYjMzQ7YVxcXCYjMzQ7OyBcXG5cJiMzNDtcbiBcJiMzNDsuYmFsaWduIDQsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwmIzM0O1xuIFwmIzM0Oy5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCYjMzQ7KTtcbiBcbiYjNDM7LypcbiYjNDM7ICogdGVzdF9saXN0X2xvY2FsLCB0ZXN0X3NldCBhbmQgdGVzdF9rZnVuY19zZXQgYXJlIC5sb2NhbCBzeW1ib2xzIHBsYWNlZFxuJiM0MzsgKiBpbiAuQlRGX2lkcyBieSBpbmxpbmUgYXNtLCBhbmQgYXJlIHJlYWQgaGVyZSBkaXJlY3RseSBieSBDIG5hbWUuIFRvIHRoZVxuJiM0MzsgKiBjb21waWxlciB0aGV5IGFyZSBwbGFpbiwgZGVmYXVsdC12aXNpYmlsaXR5IGV4dGVybiBvYmplY3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHRlc3RfcHJvZ3MgaXMgbGlua2VkIGFzIGEgcG9zaXRpb24taW5kZXBlbmRlbnQgZXhlY3V0YWJsZSAoUElFKSxcbiYjNDM7ICogdGFraW5nIHRoZSBhZGRyZXNzIG9mIHN1Y2ggYW4gZXh0ZXJuIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBHT1QuIFRoZVxuJiM0MzsgKiBHTlUgYXNzZW1ibGVyIG9uIGFhcmNoNjQgdW5jb25kaXRpb25hbGx5IGNvbnZlcnRzIHJlZmVyZW5jZXMgdG8gLmxvY2FsXG4mIzQzOyAqIHN5bWJvbHMgaW50byBzZWN0aW9uICYjNDM7IGFkZGVuZCBmb3JtIChcJiMzNDsuQlRGX2lkcyAmIzQzOyBcdTAwM2NvZmZzZXRcdTAwM2VcJiMzNDspLCBidXQgYSBHT1RcbiYjNDM7ICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cbiYjNDM7ICogdGhlIGxpbmtlciByZXNvbHZlcyBpdCB0byB0aGUgLkJURl9pZHMgYmFzZS5cbiYjNDM7ICpcbiYjNDM7ICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcbiYjNDM7ICogZW1pdHMgYSBkaXJlY3QsIGFkZGVuZC1wcmVzZXJ2aW5nIFBDLXJlbGF0aXZlIGFjY2VzcyBpbnN0ZWFkIG9mIGEgR09UXG4mIzQzOyAqIGxvYWQsIGluIGJvdGggUElFIGFuZCBub24tUElFIGJ1aWxkcy4gdGVzdF9saXN0X2dsb2JhbCBpcyAuZ2xvYmwgYW5kXG4mIzQzOyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXG4mIzQzOyAqL1xuJiM0MzsjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKVxuIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbClcbiBCVEZfSURfVU5VU0VEXG4gQlRGX0lEKHR5cGVkZWYsIFMpXG5AQCAtNDMsMjQgJiM0Mzs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiBcbi1leHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdO1xuLUJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuLUJURl9JRF9VTlVTRURcbiYjNDM7QlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcbiBCVEZfSUQodHlwZWRlZiwgUylcbiBCVEZfSUQodHlwZWRlZiwgVClcbiBCVEZfSUQodHlwZWRlZiwgVSlcbiBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiYjNDM7QlRGX1NFVF9FTkQodGVzdF9zZXQpXG4gXG4tQlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcbiYjNDM7QlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTClcbiYjNDM7QlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXQpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTYW1lIGtmdW5jcyBpbiByZXZlcnNlIGRlY2xhcmF0aW9uIG9yZGVyLCBzbyByZXNvbHZlX2J0ZmlkcyBoYXMgdG9cbiYjNDM7ICogYWN0dWFsbHkgc29ydCBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBzZXRzLlxuJiM0MzsgKi9cbiYjNDM7QlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldF9yZXYpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0X3JldilcbiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3BcbiYjNDM7XG4mIzQzO2V4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107XG4mIzQzO0JURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuJiM0MztCVEZfSURfVU5VU0VEXG4gQlRGX0lEKHR5cGVkZWYsIFMpXG4gQlRGX0lEKHR5cGVkZWYsIFQpXG4gQlRGX0lEKHR5cGVkZWYsIFUpXG4gQlRGX0lEKHN0cnVjdCwgIFMpXG4gQlRGX0lEKHVuaW9uLCAgIFUpXG4gQlRGX0lEKGZ1bmMsICAgIGZ1bmMpXG4tQlRGX1NFVF9FTkQodGVzdF9zZXQpXG4gXG4gc3RhdGljIGludFxuIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZClcbkBAIC03MCwxMCAmIzQzOzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdGlmICghdHlwZSkge1xuLVx0XHRQUklOVF9GQUlMKFwmIzM0O0ZhaWxlZCB0byBnZXQgdHlwZSBmb3IgSUQgJWRcXG5cJiMzNDssIHR5cGVfaWQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcJiMzNDtidGZfX3R5cGVfYnlfaWRcJiMzNDspKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHR9XG4mIzQzO1xuJiM0MztcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHRlc3Rfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG5AQCAtODIsNjQgJiM0MzsxMzAsODAgQEAgX19yZXNvbHZlX3N5bWJvbChzdHJ1Y3QgYnRmICpidGYsIGludCB0eXBlX2lkKVxuIFx0XHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVx1MDAzZWluZm8pICE9IHRlc3Rfc3ltYm9sc1tpXS50eXBlKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cdTAwM2VuYW1lX29mZik7XG4tXHRcdGlmICghc3RyKSB7XG4tXHRcdFx0UFJJTlRfRkFJTChcJiMzNDtGYWlsZWQgdG8gZ2V0IG5hbWUgZm9yIEJURiBJRCAlZFxcblwmIzM0OywgdHlwZV9pZCk7XG4tXHRcdFx0cmV0dXJuIC0xO1xuLVx0XHR9XG4tXG4gXHRcdGlmICghc3RyY21wKHN0ciwgdGVzdF9zeW1ib2xzW2ldLm5hbWUpKVxuIFx0XHRcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFidGZfaXNfZnVuYyh0eXBlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jX3N5bWJvbHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGtmdW5jX3N5bWJvbHNbaV0uaWQgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmICghc3RyY21wKHN0ciwga2Z1bmNfc3ltYm9sc1tpXS5uYW1lKSlcbiYjNDM7XHRcdFx0a2Z1bmNfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyhzdHJ1Y3QgYnRmICpidGYpXG4ge1xuLVx0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcdF9fdTMyIG5yID0gYnRmX190eXBlX2NudChidGYpO1xuIFx0aW50IHR5cGVfaWQ7XG4tXHRfX3UzMiBucjtcbi1cbi1cdGJ0ZiA9IGJ0Zl9fcGFyc2VfcmF3KFwmIzM0O3Jlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcJiMzNDspO1xuLVx0aWYgKENIRUNLKGxpYmJwZl9nZXRfZXJyb3IoYnRmKSwgXCYjMzQ7cmVzb2x2ZVwmIzM0Oyxcbi1cdFx0ICBcJiMzNDtGYWlsZWQgdG8gbG9hZCBCVEYgZnJvbSByZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXFxuXCYjMzQ7KSlcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0bnIgPSBidGZfX3R5cGVfY250KGJ0Zik7XG4gXG4gXHRmb3IgKHR5cGVfaWQgPSAxOyB0eXBlX2lkIFx1MDAzYyBucjsgdHlwZV9pZCYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKF9fcmVzb2x2ZV9zeW1ib2woYnRmLCB0eXBlX2lkKSlcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuIFx0fVxuLVxuLVx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2tmdW5jX3NldChzdHJ1Y3QgYnRmX2lkX3NldDggKnNldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2V0LVx1MDAzZWZsYWdzLCBCVEZfU0VUOF9LRlVOQ1MsIFwmIzM0O2tmdW5jX3NldF9mbGFnc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNldC1cdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFwmIzM0O2tmdW5jX3NldF9jbnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGtmdW5jX3N5bWJvbHNbal0uaWQgPT0gKHMzMilzZXQtXHUwMDNlcGFpcnNbaV0uaWQpIHtcbiYjNDM7XHRcdFx0XHRBU1NFUlRfRVEoc2V0LVx1MDAzZXBhaXJzW2ldLmZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCBcJiMzNDtrZnVuY19mbGFnc19jaGVja1wmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShqIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jX3N5bWJvbHMpLCBcJiMzNDtrZnVuY19pZF9mb3VuZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0QVNTRVJUX0xFKHNldC1cdTAwM2VwYWlyc1tpIC0gMV0uaWQsXG4mIzQzO1x0XHRcdFx0ICBzZXQtXHUwMDNlcGFpcnNbaV0uaWQsIFwmIzM0O2tmdW5jX3NvcnRfY2hlY2tcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZClcbiB7XG4gXHRfX3UzMiAqdGVzdF9saXN0LCAqdGVzdF9saXN0c1tdID0geyB0ZXN0X2xpc3RfbG9jYWwsIHRlc3RfbGlzdF9nbG9iYWwgfTtcbiBcdHVuc2lnbmVkIGludCBpLCBqO1xuLVx0aW50IHJldCA9IDA7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuIFxuLVx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxuJiM0MztcdGJ0ZiA9IGJ0Zl9fcGFyc2VfcmF3KEJURl9EQVRBX0ZJTEUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9wYXJzZVwmIzM0OykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHQvKiBDaGVjayBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpIGFuZFxuIFx0ICogQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwpIElEc1xuIFx0ICovXG4gXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RfbGlzdHMpOyBqJiM0MzsmIzQzOykge1xuIFx0XHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0cmV0ID0gQ0hFQ0sodGVzdF9saXN0W2ldICE9IHRlc3Rfc3ltYm9sc1tpXS5pZCxcbi1cdFx0XHRcdCAgICBcJiMzNDtpZF9jaGVja1wmIzM0Oyxcbi1cdFx0XHRcdCAgICBcJiMzNDt3cm9uZyBJRCBmb3IgJXMgKCVkICE9ICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcbi1cdFx0XHRcdCAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7XG4gXHR9XG4gXG4gXHQvKiBDaGVjayBCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KSBJRHMgKi9cbkBAIC0xNTMsMTUgJiM0MzsyMTcsMTYgQEAgdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gQ0hFQ0soIWZvdW5kLCBcJiMzNDtpZF9jaGVja1wmIzM0Oyxcbi1cdFx0XHQgICAgXCYjMzQ7SUQgJWQgbm90IGZvdW5kIGluIHRlc3Rfc3ltYm9sc1xcblwmIzM0Oyxcbi1cdFx0XHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmICghQVNTRVJUX1RSVUUoZm91bmQsIFwmIzM0O2lkX2luX3Rlc3Rfc3ltYm9sc1wmIzM0OykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChpIFx1MDAzZSAwKSB7XG4tXHRcdFx0aWYgKCFBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCBcJiMzNDtzb3J0X2NoZWNrXCYjMzQ7KSlcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdEFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFwmIzM0O3NvcnRfY2hlY2tcJiMzNDspO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRjaGVja19rZnVuY19zZXQoXHUwMDI2dGVzdF9rZnVuY19zZXQpO1xuJiM0MztcdGNoZWNrX2tmdW5jX3NldChcdTAwMjZ0ZXN0X2tmdW5jX3NldF9yZXYpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcbkBAIC00OCwzICYjNDM7NDgsMTMgQEAgaW50IGZ1bmMoc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga2Z1bmNfYihzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGZlNTNiOTFhMzIzMTQ5Mzc3YjM1MTVkOGNiODUxMjExMDY1YWM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDE6MTg6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oCmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgKQEAgLTEwLDYgJiM0MzsxMCw5IEBAIHN0cnVjdCBidGZfaWRfc2V0IHsKIAl1MzIgaWRzW107CiB9OwogCiYjNDM7LyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi8KJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0tGVU5DUwkJKDEgJmx0OyZsdDsgMCkKJiM0MzsKIHN0cnVjdCBidGZfaWRfc2V0OCB7CiAJdTMyIGNudDsKIAl1MzIgZmxhZ3M7CkBAIC0yMiw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDggewogI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURgogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsgLyogZm9yIF9fUEFTVEUgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5naWZ5LmgmZ3Q7CiAKIC8qCiAgKiBGb2xsb3dpbmcgbWFjcm9zIGhlbHAgdG8gZGVmaW5lIGxpc3RzIG9mIEJURiBJRHMgcGxhY2VkCkBAIC0zNSw3ICYjNDM7MzksNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDggewogCiAjZGVmaW5lIEJURl9JRFNfU0VDVElPTiAmIzM0Oy5CVEZfaWRzJiMzNDsKIAotI2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbCkJCQkJXAomIzQzOyNkZWZpbmUgX19fX0JURl9JRChzeW1ib2wsIHdvcmQpCQkJXAogYXNtKAkJCQkJCQlcCiAmIzM0Oy5wdXNoc2VjdGlvbiAmIzM0OyBCVEZfSURTX1NFQ1RJT04gJiMzNDssXCYjMzQ7YVwmIzM0OzsgICAgICAgXG4mIzM0OwlcCiAmIzM0Oy5sb2NhbCAmIzM0OyAjc3ltYm9sICYjMzQ7IDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXApAQCAtNDMsMTAgJiM0Mzs0NywxMSBAQCBhc20oCQkJCQkJCVwKICYjMzQ7LnNpemUgICYjMzQ7ICNzeW1ib2wgJiMzNDssIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0OwlcCiAjc3ltYm9sICYjMzQ7OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiYjMzQ7CVwKICYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzO3dvcmQJCQkJCQkJXAogJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CiAKLSNkZWZpbmUgX19CVEZfSUQoc3ltYm9sKSBcCi0JX19fX0JURl9JRChzeW1ib2wpCiYjNDM7I2RlZmluZSBfX0JURl9JRChzeW1ib2wsIHdvcmQpIFwKJiM0MzsJX19fX0JURl9JRChzeW1ib2wsIHdvcmQpCiAKICNkZWZpbmUgX19JRChwcmVmaXgpIFwKIAlfX1BBU1RFKF9fUEFTVEUocHJlZml4LCBfX0NPVU5URVJfXyksIF9fTElORV9fKQpAQCAtNTYsNyAmIzQzOzYxLDE0IEBAIGFzbSgJCQkJCQkJXAogICogdG8gNCB6ZXJvIGJ5dGVzLgogICovCiAjZGVmaW5lIEJURl9JRChwcmVmaXgsIG5hbWUpIFwKLQlfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSkKJiM0MzsJX19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksICYjMzQ7JiMzNDspCiYjNDM7CiYjNDM7I2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFwKJiM0MzsJX19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksICYjMzQ7LmxvbmcgJiMzNDsgI2ZsYWdzICYjMzQ7XG4mIzM0OykKJiM0MzsjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXAomIzQzOwlfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpCiYjNDM7I2RlZmluZSBCVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAuLi4pIFwKJiM0MzsJX19CVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCAjI19fVkFfQVJHU19fLCAwKQogCiAvKgogICogVGhlIEJURl9JRF9MSVNUIG1hY3JvIGRlZmluZXMgcHVyZSAodW5zb3J0ZWQpIGxpc3QKQEAgLTE1NSwxMCAmIzQzOzE2Nyw1OCBAQCBhc20oCQkJCQkJCVwKICYjMzQ7LnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CVwKIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lOwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2YKJiM0MzsgKiBCVEYgSURzIGFuZCB0aGVpciBmbGFncyBwbHVzIGl0cyBtZW1iZXJzIGNvdW50LCB3aXRoIHRoZQomIzQzOyAqIGZvbGxvd2luZyBsYXlvdXQ6CiYjNDM7ICoKJiM0MzsgKiBCVEZfU0VUOF9TVEFSVChsaXN0KQomIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMSwgbmFtZTEsIGZsYWdzKQomIzQzOyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKQomIzQzOyAqIEJURl9TRVQ4X0VORChsaXN0KQomIzQzOyAqCiYjNDM7ICogX19CVEZfSURfX3NldDhfX2xpc3Q6CiYjNDM7ICogLnplcm8gOAomIzQzOyAqIGxpc3Q6CiYjNDM7ICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzoKJiM0MzsgKiAuemVybyA0CiYjNDM7ICogLndvcmQgKDEgJmx0OyZsdDsgMCkgfCAoMSAmbHQ7Jmx0OyAyKQomIzQzOyAqIF9fQlRGX0lEX190eXBlMl9fbmFtZTJfXzU6CiYjNDM7ICogLnplcm8gNAomIzQzOyAqIC53b3JkICgxICZsdDsmbHQ7IDMpIHwgKDEgJmx0OyZsdDsgMSkgfCAoMSAmbHQ7Jmx0OyAyKQomIzQzOyAqCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIHNjb3BlLCBmbGFncykJCVwKJiM0MztfX0JURl9JRF9MSVNUKG5hbWUsIGxvY2FsKQkJCQlcCiYjNDM7YXNtKAkJCQkJCQlcCiYjNDM7JiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7LFwmIzM0O2FcJiMzNDs7ICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LiYjMzQ7ICNzY29wZSAmIzM0OyBfX0JURl9JRF9fc2V0OF9fJiMzNDsgI25hbWUgJiMzNDs7ICAgICAgICBcbiYjMzQ7CVwKJiM0MzsmIzM0O19fQlRGX0lEX19zZXQ4X18mIzM0OyAjbmFtZSAmIzM0Ozo7ICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7Lnplcm8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LmxvbmcgJiMzNDsgX19zdHJpbmdpZnkoZmxhZ3MpICAgICAgICAgICAgICAgICAgICYjMzQ7XG4mIzM0OwlcCiYjNDM7JiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKQkJCQlcCiYjNDM7X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKQkJCQlcCiYjNDM7YXNtKAkJCQkJCQlcCiYjNDM7JiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7LFwmIzM0O2FcJiMzNDs7ICAgICAgXG4mIzM0OwlcCiYjNDM7JiMzNDsuc2l6ZSBfX0JURl9JRF9fc2V0OF9fJiMzNDsgI25hbWUgJiMzNDssIC4tJiMzNDsgI25hbWUgJiMzNDsgIFxuJiMzNDsJXAomIzQzOyYjMzQ7LnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0Oyk7CVwKJiM0MztleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7CiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfS0ZVTkNTX1NUQVJUKG5hbWUpCQkJCVwKJiM0MztfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpCiYjNDM7CiYjNDM7I2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKQkJCQlcCiYjNDM7QlRGX1NFVDhfRU5EKG5hbWUpCiYjNDM7CiAjZWxzZQogCi0jZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVs1XTsKJiM0MzsjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdOwogI2RlZmluZSBCVEZfSUQocHJlZml4LCBuYW1lKQomIzQzOyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKQogI2RlZmluZSBCVEZfSURfVU5VU0VECiAjZGVmaW5lIEJURl9JRF9MSVNUX0dMT0JBTChuYW1lLCBuKSB1MzIgX19tYXliZV91bnVzZWQgbmFtZVtuXTsKICNkZWZpbmUgQlRGX0lEX0xJU1RfU0lOR0xFKG5hbWUsIHByZWZpeCwgdHlwZW5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxXTsKQEAgLTE2Niw2ICYjNDM7MjI2LDEwIEBAIGV4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldCBuYW1lOwogI2RlZmluZSBCVEZfU0VUX1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07CiAjZGVmaW5lIEJURl9TRVRfU1RBUlRfR0xPQkFMKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07CiAjZGVmaW5lIEJURl9TRVRfRU5EKG5hbWUpCiYjNDM7I2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTsKJiM0MzsjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKQomIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9OwomIzQzOyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSkKIAogI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqLwogCkBAIC0yMTUsNSAmIzQzOzI3OSw5IEBAIE1BWF9CVEZfVFJBQ0lOR19UWVBFLAogfTsKIAogZXh0ZXJuIHUzMiBidGZfdHJhY2luZ19pZHNbXTsKJiM0MztleHRlcm4gdTMyIGJwZl9jZ3JvdXBfYnRmX2lkW107CiYjNDM7ZXh0ZXJuIHUzMiBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkW107CiYjNDM7ZXh0ZXJuIHUzMiBidGZfYnBmX21hcF9pZFtdOwomIzQzO2V4dGVybiB1MzIgYnBmX2ttZW1fY2FjaGVfYnRmX2lkW107CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMKaW5kZXggNDFkZmFhYWJiNzNmNGIuLmFjNTFmZDQ1NDgyMTQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMKQEAgLTEwLDcgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKICNpbmNsdWRlICYjMzQ7dGVzdF9wcm9ncy5oJiMzNDsKIAotc3RhdGljIGludCBkdXJhdGlvbjsKJiM0MzsjZGVmaW5lIEJURl9EQVRBX0ZJTEUgJiMzNDtyZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGJiMzNDsKJiM0MzsKJiM0MzsjaWZuZGVmIEtGX0ZBU1RDQUxMCiYjNDM7I2RlZmluZSBLRl9GQVNUQ0FMTCAoMSAmbHQ7Jmx0OyAxMikKJiM0MzsjZW5kaWYKIAogc3RydWN0IHN5bWJvbCB7CiAJY29uc3QgY2hhcgkqbmFtZTsKQEAgLTI4LDEyICYjNDM7MzIsNDEgQEAgc3RydWN0IHN5bWJvbCB0ZXN0X3N5bWJvbHNbXSA9IHsKIAl7ICYjMzQ7ZnVuYyYjMzQ7LCAgICBCVEZfS0lORF9GVU5DLCAgICAtMSB9LAogfTsKIAomIzQzO3N0cnVjdCBrZnVuY19zeW1ib2wgewomIzQzOwljb25zdCBjaGFyCSpuYW1lOwomIzQzOwlzMzIJCSBpZDsKJiM0MzsJdTMyCQkgZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7CiYjNDM7CXsgJiMzNDtrZnVuY19hJiMzNDssIC0xLCAwIH0sCiYjNDM7CXsgJiMzNDtrZnVuY19iJiMzNDssIC0xLCBLRl9GQVNUQ0FMTCB9LAomIzQzO307CiYjNDM7CiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovCiBhc20gKAogJiMzNDsucHVzaHNlY3Rpb24gJiMzNDsgQlRGX0lEU19TRUNUSU9OICYjMzQ7ICxcJiMzNDthXCYjMzQ7OyBcbiYjMzQ7CiAmIzM0Oy5iYWxpZ24gNCwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4mIzM0OwogJiMzNDsucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuJiMzNDspOwogCiYjNDM7LyoKJiM0MzsgKiB0ZXN0X2xpc3RfbG9jYWwsIHRlc3Rfc2V0IGFuZCB0ZXN0X2tmdW5jX3NldCBhcmUgLmxvY2FsIHN5bWJvbHMgcGxhY2VkCiYjNDM7ICogaW4gLkJURl9pZHMgYnkgaW5saW5lIGFzbSwgYW5kIGFyZSByZWFkIGhlcmUgZGlyZWN0bHkgYnkgQyBuYW1lLiBUbyB0aGUKJiM0MzsgKiBjb21waWxlciB0aGV5IGFyZSBwbGFpbiwgZGVmYXVsdC12aXNpYmlsaXR5IGV4dGVybiBvYmplY3RzLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0ZXN0X3Byb2dzIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSksCiYjNDM7ICogdGFraW5nIHRoZSBhZGRyZXNzIG9mIHN1Y2ggYW4gZXh0ZXJuIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSBHT1QuIFRoZQomIzQzOyAqIEdOVSBhc3NlbWJsZXIgb24gYWFyY2g2NCB1bmNvbmRpdGlvbmFsbHkgY29udmVydHMgcmVmZXJlbmNlcyB0byAubG9jYWwKJiM0MzsgKiBzeW1ib2xzIGludG8gc2VjdGlvbiAmIzQzOyBhZGRlbmQgZm9ybSAoJiMzNDsuQlRGX2lkcyAmIzQzOyAmbHQ7b2Zmc2V0Jmd0OyYjMzQ7KSwgYnV0IGEgR09UCiYjNDM7ICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc28KJiM0MzsgKiB0aGUgbGlua2VyIHJlc29sdmVzIGl0IHRvIHRoZSAuQlRGX2lkcyBiYXNlLgomIzQzOyAqCiYjNDM7ICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmQKJiM0MzsgKiBlbWl0cyBhIGRpcmVjdCwgYWRkZW5kLXByZXNlcnZpbmcgUEMtcmVsYXRpdmUgYWNjZXNzIGluc3RlYWQgb2YgYSBHT1QKJiM0MzsgKiBsb2FkLCBpbiBib3RoIFBJRSBhbmQgbm9uLVBJRSBidWlsZHMuIHRlc3RfbGlzdF9nbG9iYWwgaXMgLmdsb2JsIGFuZAomIzQzOyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuCiYjNDM7ICovCiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikKIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbCkKIEJURl9JRF9VTlVTRUQKIEJURl9JRCh0eXBlZGVmLCBTKQpAQCAtNDMsMjQgJiM0Mzs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUykKIEJURl9JRCh1bmlvbiwgICBVKQogQlRGX0lEKGZ1bmMsICAgIGZ1bmMpCiAKLWV4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107Ci1CVEZfSURfTElTVF9HTE9CQUwodGVzdF9saXN0X2dsb2JhbCwgMSkKLUJURl9JRF9VTlVTRUQKJiM0MztCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KQogQlRGX0lEKHR5cGVkZWYsIFMpCiBCVEZfSUQodHlwZWRlZiwgVCkKIEJURl9JRCh0eXBlZGVmLCBVKQogQlRGX0lEKHN0cnVjdCwgIFMpCiBCVEZfSUQodW5pb24sICAgVSkKIEJURl9JRChmdW5jLCAgICBmdW5jKQomIzQzO0JURl9TRVRfRU5EKHRlc3Rfc2V0KQogCi1CVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KQomIzQzO0JURl9LRlVOQ1NfU1RBUlQodGVzdF9rZnVuY19zZXQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2EpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKQomIzQzO0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSBrZnVuY3MgaW4gcmV2ZXJzZSBkZWNsYXJhdGlvbiBvcmRlciwgc28gcmVzb2x2ZV9idGZpZHMgaGFzIHRvCiYjNDM7ICogYWN0dWFsbHkgc29ydCBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBzZXRzLgomIzQzOyAqLwomIzQzO0JURl9LRlVOQ1NfU1RBUlQodGVzdF9rZnVuY19zZXRfcmV2KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19iLCBLRl9GQVNUQ0FMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSkKJiM0MztCVEZfS0ZVTkNTX0VORCh0ZXN0X2tmdW5jX3NldF9yZXYpCiYjNDM7I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKJiM0MzsKJiM0MztleHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdOwomIzQzO0JURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKQomIzQzO0JURl9JRF9VTlVTRUQKIEJURl9JRCh0eXBlZGVmLCBTKQogQlRGX0lEKHR5cGVkZWYsIFQpCiBCVEZfSUQodHlwZWRlZiwgVSkKIEJURl9JRChzdHJ1Y3QsICBTKQogQlRGX0lEKHVuaW9uLCAgIFUpCiBCVEZfSUQoZnVuYywgICAgZnVuYykKLUJURl9TRVRfRU5EKHRlc3Rfc2V0KQogCiBzdGF0aWMgaW50CiBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpCkBAIC03MCwxMCAmIzQzOzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpCiAJdW5zaWduZWQgaW50IGk7CiAKIAl0eXBlID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7Ci0JaWYgKCF0eXBlKSB7Ci0JCVBSSU5UX0ZBSUwoJiMzNDtGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIElEICVkXG4mIzM0OywgdHlwZV9pZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0eXBlLCAmIzM0O2J0Zl9fdHlwZV9ieV9pZCYjMzQ7KSkKIAkJcmV0dXJuIC0xOwotCX0KJiM0MzsKJiM0MzsJc3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtJmd0O25hbWVfb2ZmKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X3N5bWJvbHNbaV0uaWQgJmd0Oz0gMCkKQEAgLTgyLDY0ICYjNDM7MTMwLDgwIEBAIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZCkKIAkJaWYgKEJURl9JTkZPX0tJTkQodHlwZS0mZ3Q7aW5mbykgIT0gdGVzdF9zeW1ib2xzW2ldLnR5cGUpCiAJCQljb250aW51ZTsKIAotCQlzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS0mZ3Q7bmFtZV9vZmYpOwotCQlpZiAoIXN0cikgewotCQkJUFJJTlRfRkFJTCgmIzM0O0ZhaWxlZCB0byBnZXQgbmFtZSBmb3IgQlRGIElEICVkXG4mIzM0OywgdHlwZV9pZCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQogCQlpZiAoIXN0cmNtcChzdHIsIHRlc3Rfc3ltYm9sc1tpXS5uYW1lKSkKIAkJCXRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7CiAJfQogCiYjNDM7CWlmICghYnRmX2lzX2Z1bmModHlwZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCAmZ3Q7PSAwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCFzdHJjbXAoc3RyLCBrZnVuY19zeW1ib2xzW2ldLm5hbWUpKQomIzQzOwkJCWtmdW5jX3N5bWJvbHNbaV0uaWQgPSB0eXBlX2lkOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHZvaWQpCiYjNDM7c3RhdGljIGludCByZXNvbHZlX3N5bWJvbHMoc3RydWN0IGJ0ZiAqYnRmKQogewotCXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsJX191MzIgbnIgPSBidGZfX3R5cGVfY250KGJ0Zik7CiAJaW50IHR5cGVfaWQ7Ci0JX191MzIgbnI7Ci0KLQlidGYgPSBidGZfX3BhcnNlX3JhdygmIzM0O3Jlc29sdmVfYnRmaWRzLnRlc3Quby5CVEYmIzM0Oyk7Ci0JaWYgKENIRUNLKGxpYmJwZl9nZXRfZXJyb3IoYnRmKSwgJiMzNDtyZXNvbHZlJiMzNDssCi0JCSAgJiMzNDtGYWlsZWQgdG8gbG9hZCBCVEYgZnJvbSByZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXG4mIzM0OykpCi0JCXJldHVybiAtMTsKLQotCW5yID0gYnRmX190eXBlX2NudChidGYpOwogCiAJZm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCAmbHQ7IG5yOyB0eXBlX2lkJiM0MzsmIzQzOykgewogCQlpZiAoX19yZXNvbHZlX3N5bWJvbChidGYsIHR5cGVfaWQpKQotCQkJYnJlYWs7CiYjNDM7CQkJcmV0dXJuIC0xOwogCX0KLQotCWJ0Zl9fZnJlZShidGYpOwogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGksIGo7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShzZXQtJmd0O2ZsYWdzLCBCVEZfU0VUOF9LRlVOQ1MsICYjMzQ7a2Z1bmNfc2V0X2ZsYWdzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2V0LSZndDtjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksICYjMzQ7a2Z1bmNfc2V0X2NudCYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNldC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGtmdW5jX3N5bWJvbHNbal0uaWQgPT0gKHMzMilzZXQtJmd0O3BhaXJzW2ldLmlkKSB7CiYjNDM7CQkJCUFTU0VSVF9FUShzZXQtJmd0O3BhaXJzW2ldLmZsYWdzLAomIzQzOwkJCQkJICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCAmIzM0O2tmdW5jX2ZsYWdzX2NoZWNrJiMzNDspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlBU1NFUlRfVFJVRShqICZsdDsgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgJiMzNDtrZnVuY19pZF9mb3VuZCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmIChpICZndDsgMCkgewomIzQzOwkJCUFTU0VSVF9MRShzZXQtJmd0O3BhaXJzW2kgLSAxXS5pZCwKJiM0MzsJCQkJICBzZXQtJmd0O3BhaXJzW2ldLmlkLCAmIzM0O2tmdW5jX3NvcnRfY2hlY2smIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZCkKIHsKIAlfX3UzMiAqdGVzdF9saXN0LCAqdGVzdF9saXN0c1tdID0geyB0ZXN0X2xpc3RfbG9jYWwsIHRlc3RfbGlzdF9nbG9iYWwgfTsKIAl1bnNpZ25lZCBpbnQgaSwgajsKLQlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwogCi0JaWYgKHJlc29sdmVfc3ltYm9scygpKQomIzQzOwlidGYgPSBidGZfX3BhcnNlX3JhdyhCVEZfREFUQV9GSUxFKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfcGFyc2UmIzM0OykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBDaGVjayBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpIGFuZAogCSAqIEJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsKSBJRHMKIAkgKi8KIAlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRSh0ZXN0X2xpc3RzKTsgaiYjNDM7JiM0MzspIHsKIAkJdGVzdF9saXN0ID0gdGVzdF9saXN0c1tqXTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspIHsKLQkJCXJldCA9IENIRUNLKHRlc3RfbGlzdFtpXSAhPSB0ZXN0X3N5bWJvbHNbaV0uaWQsCi0JCQkJICAgICYjMzQ7aWRfY2hlY2smIzM0OywKLQkJCQkgICAgJiMzNDt3cm9uZyBJRCBmb3IgJXMgKCVkICE9ICVkKVxuJiMzNDssCi0JCQkJICAgIHRlc3Rfc3ltYm9sc1tpXS5uYW1lLAotCQkJCSAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybjsKLQkJfQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGVzdF9zeW1ib2xzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJQVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7CiAJfQogCiAJLyogQ2hlY2sgQlRGX1NFVF9TVEFSVCh0ZXN0X3NldCkgSURzICovCkBAIC0xNTMsMTUgJiM0MzsyMTcsMTYgQEAgdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpCiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IENIRUNLKCFmb3VuZCwgJiMzNDtpZF9jaGVjayYjMzQ7LAotCQkJICAgICYjMzQ7SUQgJWQgbm90IGZvdW5kIGluIHRlc3Rfc3ltYm9sc1xuJiMzNDssCi0JCQkgICAgdGVzdF9zZXQuaWRzW2ldKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmICghQVNTRVJUX1RSVUUoZm91bmQsICYjMzQ7aWRfaW5fdGVzdF9zeW1ib2xzJiMzNDspKQogCQkJYnJlYWs7CiAKLQkJaWYgKGkgJmd0OyAwKSB7Ci0JCQlpZiAoIUFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sICYjMzQ7c29ydF9jaGVjayYjMzQ7KSkKLQkJCQlyZXR1cm47Ci0JCX0KJiM0MzsJCWlmIChpICZndDsgMCkKJiM0MzsJCQlBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCAmIzM0O3NvcnRfY2hlY2smIzM0Oyk7CiAJfQomIzQzOwomIzQzOwljaGVja19rZnVuY19zZXQoJmFtcDt0ZXN0X2tmdW5jX3NldCk7CiYjNDM7CWNoZWNrX2tmdW5jX3NldCgmYW1wO3Rlc3Rfa2Z1bmNfc2V0X3Jldik7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmMKaW5kZXggYmFhNTI1Mjc1YmRlMzEuLjg1ODc2NTgwMTJjM2VlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYwpAQCAtNDgsMyAmIzQzOzQ4LDEzIEBAIGludCBmdW5jKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdCkKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztpbnQga2Z1bmNfYShzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBUb29sLVNpZGUgQ2hhbmdlcyBmb3IgQlRGIElEIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgc29tZSBCVEYgSUQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gSSBzZWUgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIGJlaW5nIHVwZGF0ZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBtYWNyb3Mg4oCTIGBCVEZfU0VUOF9LRlVOQ1NgLCBgQlRGX0lEX0ZMQUdTYCwgYEJURl9TRVQ4X1NUQVJUYCwgZXRjLiDigJMgd2hpY2ggc2VlbSBsaWtlIHRoZXkgYXJlIGZvciBtYW5hZ2luZyBhbmQgb3JnYW5pemluZyBCVEYgSUQgZGVmaW5pdGlvbnMuCgpNeSBmaXJzdCBjb25jZXJuIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29sLXNpZGUgY2hhbmdlcyBhcmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgaW1wYWN0aW5nIHRoZSBjb3JlIGtlcm5lbC4gSSBpbW1lZGlhdGVseSB0aGluayB0byBjaGVjayBpZiB0aGUga2VybmVsJiMzOTtzIGNvcHkgb2YgYGJ0Zl9pZHMuaGAgKGBpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGApIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQsIGJ1dCBpdCYjMzk7cyBub3QuIEdvb2QsIHRoaXMgaXMgcHJvYmFibHkgaXNvbGF0ZWQgdG8gdGhlIGJ1aWxkIHRvb2xzIGFuZCBzZWxmLXRlc3RzLgoKSSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBiZSBzdXJlLiBZZXAsIGl0JiMzOTtzIGp1c3QgdGhlIGB0b29scy9gIGRpcmVjdG9yeTogYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhICYjMzQ7dG9vbHMmIzM0OyBjaGFuZ2UgYW5kIG5vdCBkaXJlY3RseSBrZXJuZWwtZXhlY3V0aW9uIHJlbGV2YW50LgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IGZ1enppbmcgdGFyZ2V0cyBvciBpZiB0aGV5IGFyZSByZWxldmFudCB0byBrZXJuZWwgZXhlY3V0aW9uLiBTaW5jZSBpdCYjMzk7cyBhbGwgd2l0aGluIGB0b29scy9gLCBJIGRvbiYjMzk7dCB0aGluayB0aGlzIHBhdGNoIGl0c2VsZiBpcyBhIGRpcmVjdCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgYmlnIElGLCB0aGUgdG9vbHMgaW4gcXVlc3Rpb24gYWZmZWN0IHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUgaW4gc29tZSB3YXkuIEJ1dCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHRoZSBjYXNlIGhlcmUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgbWFjcm9zIGFuZCBzb21lIHRlc3RzIGZvciB0aGUgQlRGIElEIHJlc29sdXRpb24gcHJvY2Vzcy4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyBpcyBhIGNvZGUtaHlnaWVuZSB0eXBlIG9mIHBhdGNoOyBtYWtpbmcgdGhpbmdzIGNsZWFuZXIgYW5kIGVhc2llciB0byB3b3JrIHdpdGgsIHJhdGhlciB0aGFuIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIGl0IHdlcmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcga2VybmVsIGV4ZWN1dGlvbiwgaXQgd291bGQgbmVlZCBtb3JlIHNjcnV0aW55LgoKSSB0YWtlIGFub3RoZXIgbG9vayBhbmQgZ3JlcCB0byB2ZXJpZnkgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGB0b29sc2AgYW5kIG5vdCB0aGUga2VybmVsIGl0c2VsZi4gQ29uZmlybWVkLiBgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIG9ubHkgdXNlZCBieSB0b29scyBsaWtlIGByZXNvbHZlX2J0Zmlkc2AgYW5kIGJwZiBzZWxmdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlRGX1NFVDhfS0ZVTkNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTEzLS8qIFRoaXMgZmxhZyBpbXBsaWVzIEJURl9TRVQ4IGhvbGRzIGtmdW5jKHMpICovXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTE1LVxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxMD1leHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4tLVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjEyLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIxMzpfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMTQtXG4tLVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjE2PUJURl9TRVQ4X0VORChuYW1lKVxuLS1cbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMS0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxuaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjMyOiNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjMzLSNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkxMTY9aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjMtXHQgKi9cbmtlcm5lbC9icGYvYnRmLmM6OTEyNDpcdGlmICghKGtzZXQtXHUwMDNlc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBCVEZfU0VUOF9LRlVOQ1MpKSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjUtXHRcdFdBUk5fT04oIWtzZXQtXHUwMDNlb3duZXIpO1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTEzLS8qIFRoaXMgZmxhZyBpbXBsaWVzIEJURl9TRVQ4IGhvbGRzIGtmdW5jKHMpICovXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTE1LVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIwOT1leHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjExLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVx0XHRcdFx0XFxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIxMjpfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCBCVEZfU0VUOF9LRlVOQ1MpXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMTMtXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg9MjE1PUJURl9TRVQ4X0VORChuYW1lKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMC0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmg6MjMxOiNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKSBzdGF0aWMgc3RydWN0IGJ0Zl9pZF9zZXQ4IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IC5mbGFncyA9IEJURl9TRVQ4X0tGVU5DUyB9O1xudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjMyLSNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jPTE2Mj1zdGF0aWMgdm9pZCBjaGVja19rZnVuY19zZXQoc3RydWN0IGJ0Zl9pZF9zZXQ4ICpzZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYy0xNjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jOjE2NjpcdEFTU0VSVF9FUShzZXQtXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXCYjMzQ7a2Z1bmNfc2V0X2ZsYWdzXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMtMTY3LVx0QVNTRVJUX0VRKHNldC1cdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFwmIzM0O2tmdW5jX3NldF9jbnRcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzkKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGFuZCB0aGUgc2VsZnRlc3RzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIENydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogdG91Y2hpbmcgdGhlIG1haW4ga2VybmVsJiMzOTtzIGluY2x1ZGUgZGlyZWN0b3J5IChgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgKSBvciBhbnkgY3JpdGljYWwgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgbWF0dGVyIG9mIGtlZXBpbmcgdGhlIHRvb2wmIzM5O3MgaGVhZGVyIGZpbGUgaW4gc3luYyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbiwgYW5kIGFkZGluZyBhIG5ldyB0ZXN0IHRvIHRoZSB0b29saW5nLiBUaGlzIGlzbiYjMzk7dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBpdCYjMzk7cyBqdXN0IGFib3V0IGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCB2ZXJpZmljYXRpb24gd2l0aGluIHRoZSB0b29scy4gV2l0aCB0aGF0IGluIG1pbmQsIEkgYW0gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZnVuY3Rpb25hbCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDE6MTg6MDguODg0MjE4NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMjI4NTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA4Ljg4NDIyMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTc2MTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0ZmU1M2I5MWEzMjMxNDkzNzdiMzUxNWQ4Y2I4NTEyMTEwNjVhYzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDE6MTg6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXFxuQEAgLTEwLDYgKzEwLDkgQEAgc3RydWN0IGJ0Zl9pZF9zZXQge1xcbiBcXHR1MzIgaWRzW107XFxuIH07XFxuIFxcbisvKiBUaGlzIGZsYWcgaW1wbGllcyBCVEZfU0VUOCBob2xkcyBrZnVuYyhzKSAqL1xcbisjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuK1xcbiBzdHJ1Y3QgYnRmX2lkX3NldDgge1xcbiBcXHR1MzIgY250O1xcbiBcXHR1MzIgZmxhZ3M7XFxuQEAgLTIyLDYgKzI1LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlIC8qIGZvciBfX1BBU1RFICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIEZvbGxvd2luZyBtYWNyb3MgaGVscCB0byBkZWZpbmUgbGlzdHMgb2YgQlRGIElEcyBwbGFjZWRcXG5AQCAtMzUsNyArMzksNyBAQCBzdHJ1Y3QgYnRmX2lkX3NldDgge1xcbiBcXG4gI2RlZmluZSBCVEZfSURTX1NFQ1RJT04gXFxcIi5CVEZfaWRzXFxcIlxcbiBcXG4tI2RlZmluZSBfX19fQlRGX0lEKHN5bWJvbClcXHRcXHRcXHRcXHRcXFxcXFxuKyNkZWZpbmUgX19fX0JURl9JRChzeW1ib2wsIHdvcmQpXFx0XFx0XFx0XFxcXFxcbiBhc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnB1c2hzZWN0aW9uIFxcXCIgQlRGX0lEU19TRUNUSU9OIFxcXCIsXFxcXFxcXCJhXFxcXFxcXCI7ICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4gXFxcIi5sb2NhbCBcXFwiICNzeW1ib2wgXFxcIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuQEAgLTQzLDEwICs0NywxMSBAQCBhc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnNpemUgIFxcXCIgI3N5bWJvbCBcXFwiLCA0OyAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4gI3N5bWJvbCBcXFwiOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuIFxcXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbit3b3JkXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXFwiLnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIik7XFxuIFxcbi0jZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCkgXFxcXFxcbi1cXHRfX19fQlRGX0lEKHN5bWJvbClcXG4rI2RlZmluZSBfX0JURl9JRChzeW1ib2wsIHdvcmQpIFxcXFxcXG4rXFx0X19fX0JURl9JRChzeW1ib2wsIHdvcmQpXFxuIFxcbiAjZGVmaW5lIF9fSUQocHJlZml4KSBcXFxcXFxuIFxcdF9fUEFTVEUoX19QQVNURShwcmVmaXgsIF9fQ09VTlRFUl9fKSwgX19MSU5FX18pXFxuQEAgLTU2LDcgKzYxLDE0IEBAIGFzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAqIHRvIDQgemVybyBieXRlcy5cXG4gICovXFxuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSkgXFxcXFxcbi1cXHRfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSlcXG4rXFx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFxcXCJcXFwiKVxcbitcXG4rI2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFxcXFxcXG4rXFx0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFxcXCIubG9uZyBcXFwiICNmbGFncyBcXFwiXFxcXG5cXFwiKVxcbisjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXFxcXFxcbitcXHRfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpXFxuKyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKSBcXFxcXFxuK1xcdF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgIyNfX1ZBX0FSR1NfXywgMClcXG4gXFxuIC8qXFxuICAqIFRoZSBCVEZfSURfTElTVCBtYWNybyBkZWZpbmVzIHB1cmUgKHVuc29ydGVkKSBsaXN0XFxuQEAgLTE1NSwxMCArMTY3LDU4IEBAIGFzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcXCIucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCIpO1xcdFxcXFxcXG4gZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0IG5hbWU7XFxuIFxcbisvKlxcbisgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcXG4rICogQlRGIElEcyBhbmQgdGhlaXIgZmxhZ3MgcGx1cyBpdHMgbWVtYmVycyBjb3VudCwgd2l0aCB0aGVcXG4rICogZm9sbG93aW5nIGxheW91dDpcXG4rICpcXG4rICogQlRGX1NFVDhfU1RBUlQobGlzdClcXG4rICogQlRGX0lEX0ZMQUdTKHR5cGUxLCBuYW1lMSwgZmxhZ3MpXFxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxcbisgKiBCVEZfU0VUOF9FTkQobGlzdClcXG4rICpcXG4rICogX19CVEZfSURfX3NldDhfX2xpc3Q6XFxuKyAqIC56ZXJvIDhcXG4rICogbGlzdDpcXG4rICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcXG4rICogLnplcm8gNFxcbisgKiAud29yZCAoMSBcXHUwMDNjXFx1MDAzYyAwKSB8ICgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuKyAqIF9fQlRGX0lEX190eXBlMl9fbmFtZTJfXzU6XFxuKyAqIC56ZXJvIDRcXG4rICogLndvcmQgKDEgXFx1MDAzY1xcdTAwM2MgMykgfCAoMSBcXHUwMDNjXFx1MDAzYyAxKSB8ICgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuKyAqXFxuKyAqL1xcbisjZGVmaW5lIF9fQlRGX1NFVDhfU1RBUlQobmFtZSwgc2NvcGUsIGZsYWdzKVxcdFxcdFxcXFxcXG4rX19CVEZfSURfTElTVChuYW1lLCBsb2NhbClcXHRcXHRcXHRcXHRcXFxcXFxuK2FzbShcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCIucHVzaHNlY3Rpb24gXFxcIiBCVEZfSURTX1NFQ1RJT04gXFxcIixcXFxcXFxcImFcXFxcXFxcIjsgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLlxcXCIgI3Njb3BlIFxcXCIgX19CVEZfSURfX3NldDhfX1xcXCIgI25hbWUgXFxcIjsgICAgICAgIFxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIl9fQlRGX0lEX19zZXQ4X19cXFwiICNuYW1lIFxcXCI6OyAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXHRcXFxcXFxuK1xcXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLmxvbmcgXFxcIiBfX3N0cmluZ2lmeShmbGFncykgICAgICAgICAgICAgICAgICAgXFxcIlxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCIpO1xcbitcXG4rI2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4rX19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgMClcXG4rXFxuKyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbithc20oXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiLnB1c2hzZWN0aW9uIFxcXCIgQlRGX0lEU19TRUNUSU9OIFxcXCIsXFxcXFxcXCJhXFxcXFxcXCI7ICAgICAgXFxcXG5cXFwiXFx0XFxcXFxcbitcXFwiLnNpemUgX19CVEZfSURfX3NldDhfX1xcXCIgI25hbWUgXFxcIiwgLi1cXFwiICNuYW1lIFxcXCIgIFxcXFxuXFxcIlxcdFxcXFxcXG4rXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuXFxcIik7XFx0XFxcXFxcbitleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQ4IG5hbWU7XFxuK1xcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuK19fQlRGX1NFVDhfU1RBUlQobmFtZSwgbG9jYWwsIEJURl9TRVQ4X0tGVU5DUylcXG4rXFxuKyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuK0JURl9TRVQ4X0VORChuYW1lKVxcbitcXG4gI2Vsc2VcXG4gXFxuLSNkZWZpbmUgQlRGX0lEX0xJU1QobmFtZSkgc3RhdGljIHUzMiBfX21heWJlX3VudXNlZCBuYW1lWzVdO1xcbisjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xcbiAjZGVmaW5lIEJURl9JRChwcmVmaXgsIG5hbWUpXFxuKyNkZWZpbmUgQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgLi4uKVxcbiAjZGVmaW5lIEJURl9JRF9VTlVTRURcXG4gI2RlZmluZSBCVEZfSURfTElTVF9HTE9CQUwobmFtZSwgbikgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbbl07XFxuICNkZWZpbmUgQlRGX0lEX0xJU1RfU0lOR0xFKG5hbWUsIHByZWZpeCwgdHlwZW5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxXTtcXG5AQCAtMTY2LDYgKzIyNiwxMCBAQCBleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQgbmFtZTtcXG4gI2RlZmluZSBCVEZfU0VUX1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XFxuICNkZWZpbmUgQlRGX1NFVF9TVEFSVF9HTE9CQUwobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcXG4gI2RlZmluZSBCVEZfU0VUX0VORChuYW1lKVxcbisjZGVmaW5lIEJURl9TRVQ4X1NUQVJUKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldDggX19tYXliZV91bnVzZWQgbmFtZSA9IHsgMCB9O1xcbisjZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG4rI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xcbiBcXG5AQCAtMjE1LDUgKzI3OSw5IEBAIE1BWF9CVEZfVFJBQ0lOR19UWVBFLFxcbiB9O1xcbiBcXG4gZXh0ZXJuIHUzMiBidGZfdHJhY2luZ19pZHNbXTtcXG4rZXh0ZXJuIHUzMiBicGZfY2dyb3VwX2J0Zl9pZFtdO1xcbitleHRlcm4gdTMyIGJwZl9sb2NhbF9zdG9yYWdlX21hcF9idGZfaWRbXTtcXG4rZXh0ZXJuIHUzMiBidGZfYnBmX21hcF9pZFtdO1xcbitleHRlcm4gdTMyIGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFtdO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXFxuaW5kZXggNDFkZmFhYWJiNzNmNGIuLmFjNTFmZDQ1NDgyMTQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXFxuQEAgLTEwLDcgKzEwLDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGR1cmF0aW9uO1xcbisjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXFxcInJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXFwiXFxuK1xcbisjaWZuZGVmIEtGX0ZBU1RDQUxMXFxuKyNkZWZpbmUgS0ZfRkFTVENBTEwgKDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuKyNlbmRpZlxcbiBcXG4gc3RydWN0IHN5bWJvbCB7XFxuIFxcdGNvbnN0IGNoYXJcXHQqbmFtZTtcXG5AQCAtMjgsMTIgKzMyLDQxIEBAIHN0cnVjdCBzeW1ib2wgdGVzdF9zeW1ib2xzW10gPSB7XFxuIFxcdHsgXFxcImZ1bmNcXFwiLCAgICBCVEZfS0lORF9GVU5DLCAgICAtMSB9LFxcbiB9O1xcbiBcXG4rc3RydWN0IGtmdW5jX3N5bWJvbCB7XFxuK1xcdGNvbnN0IGNoYXJcXHQqbmFtZTtcXG4rXFx0czMyXFx0XFx0IGlkO1xcbitcXHR1MzJcXHRcXHQgZmxhZ3M7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7XFxuK1xcdHsgXFxcImtmdW5jX2FcXFwiLCAtMSwgMCB9LFxcbitcXHR7IFxcXCJrZnVuY19iXFxcIiwgLTEsIEtGX0ZBU1RDQUxMIH0sXFxuK307XFxuK1xcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXFxuIGFzbSAoXFxuIFxcXCIucHVzaHNlY3Rpb24gXFxcIiBCVEZfSURTX1NFQ1RJT04gXFxcIiAsXFxcXFxcXCJhXFxcXFxcXCI7IFxcXFxuXFxcIlxcbiBcXFwiLmJhbGlnbiA0LCAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcblxcXCJcXG4gXFxcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXG5cXFwiKTtcXG4gXFxuKy8qXFxuKyAqIHRlc3RfbGlzdF9sb2NhbCwgdGVzdF9zZXQgYW5kIHRlc3Rfa2Z1bmNfc2V0IGFyZSAubG9jYWwgc3ltYm9scyBwbGFjZWRcXG4rICogaW4gLkJURl9pZHMgYnkgaW5saW5lIGFzbSwgYW5kIGFyZSByZWFkIGhlcmUgZGlyZWN0bHkgYnkgQyBuYW1lLiBUbyB0aGVcXG4rICogY29tcGlsZXIgdGhleSBhcmUgcGxhaW4sIGRlZmF1bHQtdmlzaWJpbGl0eSBleHRlcm4gb2JqZWN0cy5cXG4rICpcXG4rICogV2hlbiB0ZXN0X3Byb2dzIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSksXFxuKyAqIHRha2luZyB0aGUgYWRkcmVzcyBvZiBzdWNoIGFuIGV4dGVybiBpcyByb3V0ZWQgdGhyb3VnaCB0aGUgR09ULiBUaGVcXG4rICogR05VIGFzc2VtYmxlciBvbiBhYXJjaDY0IHVuY29uZGl0aW9uYWxseSBjb252ZXJ0cyByZWZlcmVuY2VzIHRvIC5sb2NhbFxcbisgKiBzeW1ib2xzIGludG8gc2VjdGlvbiArIGFkZGVuZCBmb3JtIChcXFwiLkJURl9pZHMgKyBcXHUwMDNjb2Zmc2V0XFx1MDAzZVxcXCIpLCBidXQgYSBHT1RcXG4rICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cXG4rICogdGhlIGxpbmtlciByZXNvbHZlcyBpdCB0byB0aGUgLkJURl9pZHMgYmFzZS5cXG4rICpcXG4rICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcXG4rICogZW1pdHMgYSBkaXJlY3QsIGFkZGVuZC1wcmVzZXJ2aW5nIFBDLXJlbGF0aXZlIGFjY2VzcyBpbnN0ZWFkIG9mIGEgR09UXFxuKyAqIGxvYWQsIGluIGJvdGggUElFIGFuZCBub24tUElFIGJ1aWxkcy4gdGVzdF9saXN0X2dsb2JhbCBpcyAuZ2xvYmwgYW5kXFxuKyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXFxuKyAqL1xcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKVxcbiBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpXFxuIEJURl9JRF9VTlVTRURcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuQEAgLTQzLDI0ICs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcXG4gQlRGX0lEKHVuaW9uLCAgIFUpXFxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxcbiBcXG4tZXh0ZXJuIF9fdTMyIHRlc3RfbGlzdF9nbG9iYWxbXTtcXG4tQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXFxuLUJURl9JRF9VTlVTRURcXG4rQlRGX1NFVF9TVEFSVCh0ZXN0X3NldClcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuIEJURl9JRCh0eXBlZGVmLCBUKVxcbiBCVEZfSUQodHlwZWRlZiwgVSlcXG4gQlRGX0lEKHN0cnVjdCwgIFMpXFxuIEJURl9JRCh1bmlvbiwgICBVKVxcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcXG4rQlRGX1NFVF9FTkQodGVzdF9zZXQpXFxuIFxcbi1CVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KVxcbitCVEZfS0ZVTkNTX1NUQVJUKHRlc3Rfa2Z1bmNfc2V0KVxcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxcbitCVEZfS0ZVTkNTX0VORCh0ZXN0X2tmdW5jX3NldClcXG4rXFxuKy8qXFxuKyAqIFNhbWUga2Z1bmNzIGluIHJldmVyc2UgZGVjbGFyYXRpb24gb3JkZXIsIHNvIHJlc29sdmVfYnRmaWRzIGhhcyB0b1xcbisgKiBhY3R1YWxseSBzb3J0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHdvIHNldHMuXFxuKyAqL1xcbitCVEZfS0ZVTkNTX1NUQVJUKHRlc3Rfa2Z1bmNfc2V0X3JldilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcXG4rQlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXRfcmV2KVxcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcFxcbitcXG4rZXh0ZXJuIF9fdTMyIHRlc3RfbGlzdF9nbG9iYWxbXTtcXG4rQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXFxuK0JURl9JRF9VTlVTRURcXG4gQlRGX0lEKHR5cGVkZWYsIFMpXFxuIEJURl9JRCh0eXBlZGVmLCBUKVxcbiBCVEZfSUQodHlwZWRlZiwgVSlcXG4gQlRGX0lEKHN0cnVjdCwgIFMpXFxuIEJURl9JRCh1bmlvbiwgICBVKVxcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcXG4tQlRGX1NFVF9FTkQodGVzdF9zZXQpXFxuIFxcbiBzdGF0aWMgaW50XFxuIF9fcmVzb2x2ZV9zeW1ib2woc3RydWN0IGJ0ZiAqYnRmLCBpbnQgdHlwZV9pZClcXG5AQCAtNzAsMTAgKzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0dHlwZSA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpO1xcbi1cXHRpZiAoIXR5cGUpIHtcXG4tXFx0XFx0UFJJTlRfRkFJTChcXFwiRmFpbGVkIHRvIGdldCB0eXBlIGZvciBJRCAlZFxcXFxuXFxcIiwgdHlwZV9pZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcXFwiYnRmX190eXBlX2J5X2lkXFxcIikpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbitcXG4rXFx0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKykge1xcbiBcXHRcXHRpZiAodGVzdF9zeW1ib2xzW2ldLmlkIFxcdTAwM2U9IDApXFxuQEAgLTgyLDY0ICsxMzAsODAgQEAgX19yZXNvbHZlX3N5bWJvbChzdHJ1Y3QgYnRmICpidGYsIGludCB0eXBlX2lkKVxcbiBcXHRcXHRpZiAoQlRGX0lORk9fS0lORCh0eXBlLVxcdTAwM2VpbmZvKSAhPSB0ZXN0X3N5bWJvbHNbaV0udHlwZSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRzdHIgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdHlwZS1cXHUwMDNlbmFtZV9vZmYpO1xcbi1cXHRcXHRpZiAoIXN0cikge1xcbi1cXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJGYWlsZWQgdG8gZ2V0IG5hbWUgZm9yIEJURiBJRCAlZFxcXFxuXFxcIiwgdHlwZV9pZCk7XFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0aWYgKCFzdHJjbXAoc3RyLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSkpXFxuIFxcdFxcdFxcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghYnRmX2lzX2Z1bmModHlwZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkrKykge1xcbitcXHRcXHRpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFzdHJjbXAoc3RyLCBrZnVuY19zeW1ib2xzW2ldLm5hbWUpKVxcbitcXHRcXHRcXHRrZnVuY19zeW1ib2xzW2ldLmlkID0gdHlwZV9pZDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHZvaWQpXFxuK3N0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHN0cnVjdCBidGYgKmJ0ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdF9fdTMyIG5yID0gYnRmX190eXBlX2NudChidGYpO1xcbiBcXHRpbnQgdHlwZV9pZDtcXG4tXFx0X191MzIgbnI7XFxuLVxcbi1cXHRidGYgPSBidGZfX3BhcnNlX3JhdyhcXFwicmVzb2x2ZV9idGZpZHMudGVzdC5vLkJURlxcXCIpO1xcbi1cXHRpZiAoQ0hFQ0sobGliYnBmX2dldF9lcnJvcihidGYpLCBcXFwicmVzb2x2ZVxcXCIsXFxuLVxcdFxcdCAgXFxcIkZhaWxlZCB0byBsb2FkIEJURiBmcm9tIHJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXFxcblxcXCIpKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRuciA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTtcXG4gXFxuIFxcdGZvciAodHlwZV9pZCA9IDE7IHR5cGVfaWQgXFx1MDAzYyBucjsgdHlwZV9pZCsrKSB7XFxuIFxcdFxcdGlmIChfX3Jlc29sdmVfc3ltYm9sKGJ0ZiwgdHlwZV9pZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4tXFxuLVxcdGJ0Zl9fZnJlZShidGYpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBqO1xcbitcXG4rXFx0QVNTRVJUX0VRKHNldC1cXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXFxcImtmdW5jX3NldF9mbGFnc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2V0LVxcdTAwM2VjbnQsIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFxcXCJrZnVuY19zZXRfY250XFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2V0LVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKTsgaisrKSB7XFxuK1xcdFxcdFxcdGlmIChrZnVuY19zeW1ib2xzW2pdLmlkID09IChzMzIpc2V0LVxcdTAwM2VwYWlyc1tpXS5pZCkge1xcbitcXHRcXHRcXHRcXHRBU1NFUlRfRVEoc2V0LVxcdTAwM2VwYWlyc1tpXS5mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBrZnVuY19zeW1ib2xzW2pdLmZsYWdzLCBcXFwia2Z1bmNfZmxhZ3NfY2hlY2tcXFwiKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0QVNTRVJUX1RSVUUoaiBcXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyksIFxcXCJrZnVuY19pZF9mb3VuZFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9MRShzZXQtXFx1MDAzZXBhaXJzW2kgLSAxXS5pZCxcXG4rXFx0XFx0XFx0XFx0ICBzZXQtXFx1MDAzZXBhaXJzW2ldLmlkLCBcXFwia2Z1bmNfc29ydF9jaGVja1xcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXFxuIHtcXG4gXFx0X191MzIgKnRlc3RfbGlzdCwgKnRlc3RfbGlzdHNbXSA9IHsgdGVzdF9saXN0X2xvY2FsLCB0ZXN0X2xpc3RfZ2xvYmFsIH07XFxuIFxcdHVuc2lnbmVkIGludCBpLCBqO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbiBcXG4tXFx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxcbitcXHRidGYgPSBidGZfX3BhcnNlX3JhdyhCVEZfREFUQV9GSUxFKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXFxcImJ0Zl9wYXJzZVxcXCIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAocmVzb2x2ZV9zeW1ib2xzKGJ0ZikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0LyogQ2hlY2sgQlRGX0lEX0xJU1QodGVzdF9saXN0X2xvY2FsKSBhbmRcXG4gXFx0ICogQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwpIElEc1xcbiBcXHQgKi9cXG4gXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9saXN0cyk7IGorKykge1xcbiBcXHRcXHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpKyspIHtcXG4tXFx0XFx0XFx0cmV0ID0gQ0hFQ0sodGVzdF9saXN0W2ldICE9IHRlc3Rfc3ltYm9sc1tpXS5pZCxcXG4tXFx0XFx0XFx0XFx0ICAgIFxcXCJpZF9jaGVja1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwid3JvbmcgSUQgZm9yICVzICglZCAhPSAlZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKylcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKHRlc3RfbGlzdFtpXSwgdGVzdF9zeW1ib2xzW2ldLmlkLCB0ZXN0X3N5bWJvbHNbaV0ubmFtZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIENoZWNrIEJURl9TRVRfU1RBUlQodGVzdF9zZXQpIElEcyAqL1xcbkBAIC0xNTMsMTUgKzIxNywxNiBAQCB2b2lkIHRlc3RfcmVzb2x2ZV9idGZpZHModm9pZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IENIRUNLKCFmb3VuZCwgXFxcImlkX2NoZWNrXFxcIixcXG4tXFx0XFx0XFx0ICAgIFxcXCJJRCAlZCBub3QgZm91bmQgaW4gdGVzdF9zeW1ib2xzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKCFBU1NFUlRfVFJVRShmb3VuZCwgXFxcImlkX2luX3Rlc3Rfc3ltYm9sc1xcXCIpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdGlmIChpIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRpZiAoIUFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFxcXCJzb3J0X2NoZWNrXFxcIikpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoaSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdEFTU0VSVF9MRSh0ZXN0X3NldC5pZHNbaSAtIDFdLCB0ZXN0X3NldC5pZHNbaV0sIFxcXCJzb3J0X2NoZWNrXFxcIik7XFxuIFxcdH1cXG4rXFxuK1xcdGNoZWNrX2tmdW5jX3NldChcXHUwMDI2dGVzdF9rZnVuY19zZXQpO1xcbitcXHRjaGVja19rZnVuY19zZXQoXFx1MDAyNnRlc3Rfa2Z1bmNfc2V0X3Jldik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xcbkBAIC00OCwzICs0OCwxMyBAQCBpbnQgZnVuYyhzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA5LjM1NDY1MjUwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNDE4NDY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0ZmU1M2I5MWEzMjMxNDkzNzdiMzUxNWQ4Y2I4NTEyMTEwNjVhYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAwMToxODowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhcbmluZGV4IDcyZWEzNjNkNDM0ZGIwLi40ZmU1YzVmMTU1OGNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaFxuQEAgLTEwLDYgKzEwLDkgQEAgc3RydWN0IGJ0Zl9pZF9zZXQge1xuIFx0dTMyIGlkc1tdO1xuIH07XG4gXG4rLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cbisjZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1x0XHQoMSBcdTAwM2NcdTAwM2MgMClcbitcbiBzdHJ1Y3QgYnRmX2lkX3NldDgge1xuIFx0dTMyIGNudDtcbiBcdHUzMiBmbGFncztcbkBAIC0yMiw2ICsyNSw3IEBAIHN0cnVjdCBidGZfaWRfc2V0OCB7XG4gI2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2UgLyogZm9yIF9fUEFTVEUgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuIC8qXG4gICogRm9sbG93aW5nIG1hY3JvcyBoZWxwIHRvIGRlZmluZSBsaXN0cyBvZiBCVEYgSURzIHBsYWNlZFxuQEAgLTM1LDcgKzM5LDcgQEAgc3RydWN0IGJ0Zl9pZF9zZXQ4IHtcbiBcbiAjZGVmaW5lIEJURl9JRFNfU0VDVElPTiBcIi5CVEZfaWRzXCJcbiBcbi0jZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sKVx0XHRcdFx0XFxcbisjZGVmaW5lIF9fX19CVEZfSUQoc3ltYm9sLCB3b3JkKVx0XHRcdFxcXG4gYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wdXNoc2VjdGlvbiBcIiBCVEZfSURTX1NFQ1RJT04gXCIsXFxcImFcXFwiOyAgICAgICBcXG5cIlx0XFxcbiBcIi5sb2NhbCBcIiAjc3ltYm9sIFwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwiXHRcXFxuQEAgLTQzLDEwICs0NywxMSBAQCBhc20oXHRcdFx0XHRcdFx0XHRcXFxuIFwiLnNpemUgIFwiICNzeW1ib2wgXCIsIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4gI3N5bWJvbCBcIjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4gXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rd29yZFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XG4gXG4tI2RlZmluZSBfX0JURl9JRChzeW1ib2wpIFxcXG4tXHRfX19fQlRGX0lEKHN5bWJvbClcbisjZGVmaW5lIF9fQlRGX0lEKHN5bWJvbCwgd29yZCkgXFxcbitcdF9fX19CVEZfSUQoc3ltYm9sLCB3b3JkKVxuIFxuICNkZWZpbmUgX19JRChwcmVmaXgpIFxcXG4gXHRfX1BBU1RFKF9fUEFTVEUocHJlZml4LCBfX0NPVU5URVJfXyksIF9fTElORV9fKVxuQEAgLTU2LDcgKzYxLDE0IEBAIGFzbShcdFx0XHRcdFx0XHRcdFxcXG4gICogdG8gNCB6ZXJvIGJ5dGVzLlxuICAqL1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSkgXFxcbi1cdF9fQlRGX0lEKF9fSUQoX19CVEZfSURfXyMjcHJlZml4IyNfXyMjbmFtZSMjX18pKVxuK1x0X19CVEZfSUQoX19JRChfX0JURl9JRF9fIyNwcmVmaXgjI19fIyNuYW1lIyNfXyksIFwiXCIpXG4rXG4rI2RlZmluZSBfX19fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MpIFxcXG4rXHRfX0JURl9JRChfX0lEKF9fQlRGX0lEX18jI3ByZWZpeCMjX18jI25hbWUjI19fKSwgXCIubG9uZyBcIiAjZmxhZ3MgXCJcXG5cIilcbisjZGVmaW5lIF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgZmxhZ3MsIC4uLikgXFxcbitcdF9fX19CVEZfSURfRkxBR1MocHJlZml4LCBuYW1lLCBmbGFncylcbisjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLikgXFxcbitcdF9fQlRGX0lEX0ZMQUdTKHByZWZpeCwgbmFtZSwgIyNfX1ZBX0FSR1NfXywgMClcbiBcbiAvKlxuICAqIFRoZSBCVEZfSURfTElTVCBtYWNybyBkZWZpbmVzIHB1cmUgKHVuc29ydGVkKSBsaXN0XG5AQCAtMTU1LDEwICsxNjcsNTggQEAgYXNtKFx0XHRcdFx0XHRcdFx0XFxcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblwiKTtcdFxcXG4gZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0IG5hbWU7XG4gXG4rLypcbisgKiBUaGUgQlRGX1NFVDhfU1RBUlQvRU5EIG1hY3JvcyBwYWlyIGRlZmluZXMgc29ydGVkIGxpc3Qgb2ZcbisgKiBCVEYgSURzIGFuZCB0aGVpciBmbGFncyBwbHVzIGl0cyBtZW1iZXJzIGNvdW50LCB3aXRoIHRoZVxuKyAqIGZvbGxvd2luZyBsYXlvdXQ6XG4rICpcbisgKiBCVEZfU0VUOF9TVEFSVChsaXN0KVxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMSwgbmFtZTEsIGZsYWdzKVxuKyAqIEJURl9JRF9GTEFHUyh0eXBlMiwgbmFtZTIsIGZsYWdzKVxuKyAqIEJURl9TRVQ4X0VORChsaXN0KVxuKyAqXG4rICogX19CVEZfSURfX3NldDhfX2xpc3Q6XG4rICogLnplcm8gOFxuKyAqIGxpc3Q6XG4rICogX19CVEZfSURfX3R5cGUxX19uYW1lMV9fMzpcbisgKiAuemVybyA0XG4rICogLndvcmQgKDEgXHUwMDNjXHUwMDNjIDApIHwgKDEgXHUwMDNjXHUwMDNjIDIpXG4rICogX19CVEZfSURfX3R5cGUyX19uYW1lMl9fNTpcbisgKiAuemVybyA0XG4rICogLndvcmQgKDEgXHUwMDNjXHUwMDNjIDMpIHwgKDEgXHUwMDNjXHUwMDNjIDEpIHwgKDEgXHUwMDNjXHUwMDNjIDIpXG4rICpcbisgKi9cbisjZGVmaW5lIF9fQlRGX1NFVDhfU1RBUlQobmFtZSwgc2NvcGUsIGZsYWdzKVx0XHRcXFxuK19fQlRGX0lEX0xJU1QobmFtZSwgbG9jYWwpXHRcdFx0XHRcXFxuK2FzbShcdFx0XHRcdFx0XHRcdFxcXG4rXCIucHVzaHNlY3Rpb24gXCIgQlRGX0lEU19TRUNUSU9OIFwiLFxcXCJhXFxcIjsgICAgICAgXFxuXCJcdFxcXG4rXCIuXCIgI3Njb3BlIFwiIF9fQlRGX0lEX19zZXQ4X19cIiAjbmFtZSBcIjsgICAgICAgIFxcblwiXHRcXFxuK1wiX19CVEZfSURfX3NldDhfX1wiICNuYW1lIFwiOjsgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rXCIuemVybyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcdFxcXG4rXCIubG9uZyBcIiBfX3N0cmluZ2lmeShmbGFncykgICAgICAgICAgICAgICAgICAgXCJcXG5cIlx0XFxcbitcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XG4rXG4rI2RlZmluZSBCVEZfU0VUOF9TVEFSVChuYW1lKVx0XHRcdFx0XFxcbitfX0JURl9TRVQ4X1NUQVJUKG5hbWUsIGxvY2FsLCAwKVxuK1xuKyNkZWZpbmUgQlRGX1NFVDhfRU5EKG5hbWUpXHRcdFx0XHRcXFxuK2FzbShcdFx0XHRcdFx0XHRcdFxcXG4rXCIucHVzaHNlY3Rpb24gXCIgQlRGX0lEU19TRUNUSU9OIFwiLFxcXCJhXFxcIjsgICAgICBcXG5cIlx0XFxcbitcIi5zaXplIF9fQlRGX0lEX19zZXQ4X19cIiAjbmFtZSBcIiwgLi1cIiAjbmFtZSBcIiAgXFxuXCJcdFxcXG4rXCIucG9wc2VjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cIik7XHRcXFxuK2V4dGVybiBzdHJ1Y3QgYnRmX2lkX3NldDggbmFtZTtcbitcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSlcdFx0XHRcdFxcXG4rX19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxuK1xuKyNkZWZpbmUgQlRGX0tGVU5DU19FTkQobmFtZSlcdFx0XHRcdFxcXG4rQlRGX1NFVDhfRU5EKG5hbWUpXG4rXG4gI2Vsc2VcbiBcbi0jZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVs1XTtcbisjZGVmaW5lIEJURl9JRF9MSVNUKG5hbWUpIHN0YXRpYyB1MzIgX19tYXliZV91bnVzZWQgbmFtZVsxMjhdO1xuICNkZWZpbmUgQlRGX0lEKHByZWZpeCwgbmFtZSlcbisjZGVmaW5lIEJURl9JRF9GTEFHUyhwcmVmaXgsIG5hbWUsIC4uLilcbiAjZGVmaW5lIEJURl9JRF9VTlVTRURcbiAjZGVmaW5lIEJURl9JRF9MSVNUX0dMT0JBTChuYW1lLCBuKSB1MzIgX19tYXliZV91bnVzZWQgbmFtZVtuXTtcbiAjZGVmaW5lIEJURl9JRF9MSVNUX1NJTkdMRShuYW1lLCBwcmVmaXgsIHR5cGVuYW1lKSBzdGF0aWMgdTMyIF9fbWF5YmVfdW51c2VkIG5hbWVbMV07XG5AQCAtMTY2LDYgKzIyNiwxMCBAQCBleHRlcm4gc3RydWN0IGJ0Zl9pZF9zZXQgbmFtZTtcbiAjZGVmaW5lIEJURl9TRVRfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0IF9fbWF5YmVfdW51c2VkIG5hbWUgPSB7IDAgfTtcbiAjZGVmaW5lIEJURl9TRVRfU1RBUlRfR0xPQkFMKG5hbWUpIHN0YXRpYyBzdHJ1Y3QgYnRmX2lkX3NldCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4gI2RlZmluZSBCVEZfU0VUX0VORChuYW1lKVxuKyNkZWZpbmUgQlRGX1NFVDhfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAwIH07XG4rI2RlZmluZSBCVEZfU0VUOF9FTkQobmFtZSlcbisjZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcbisjZGVmaW5lIEJURl9LRlVOQ1NfRU5EKG5hbWUpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURiAqL1xuIFxuQEAgLTIxNSw1ICsyNzksOSBAQCBNQVhfQlRGX1RSQUNJTkdfVFlQRSxcbiB9O1xuIFxuIGV4dGVybiB1MzIgYnRmX3RyYWNpbmdfaWRzW107XG4rZXh0ZXJuIHUzMiBicGZfY2dyb3VwX2J0Zl9pZFtdO1xuK2V4dGVybiB1MzIgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J0Zl9pZFtdO1xuK2V4dGVybiB1MzIgYnRmX2JwZl9tYXBfaWRbXTtcbitleHRlcm4gdTMyIGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFtdO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG5pbmRleCA0MWRmYWFhYmI3M2Y0Yi4uYWM1MWZkNDU0ODIxNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jXG5AQCAtMTAsNyArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRlc3RfcHJvZ3MuaFwiXG4gXG4tc3RhdGljIGludCBkdXJhdGlvbjtcbisjZGVmaW5lIEJURl9EQVRBX0ZJTEUgXCJyZXNvbHZlX2J0Zmlkcy50ZXN0Lm8uQlRGXCJcbitcbisjaWZuZGVmIEtGX0ZBU1RDQUxMXG4rI2RlZmluZSBLRl9GQVNUQ0FMTCAoMSBcdTAwM2NcdTAwM2MgMTIpXG4rI2VuZGlmXG4gXG4gc3RydWN0IHN5bWJvbCB7XG4gXHRjb25zdCBjaGFyXHQqbmFtZTtcbkBAIC0yOCwxMiArMzIsNDEgQEAgc3RydWN0IHN5bWJvbCB0ZXN0X3N5bWJvbHNbXSA9IHtcbiBcdHsgXCJmdW5jXCIsICAgIEJURl9LSU5EX0ZVTkMsICAgIC0xIH0sXG4gfTtcbiBcbitzdHJ1Y3Qga2Z1bmNfc3ltYm9sIHtcbitcdGNvbnN0IGNoYXJcdCpuYW1lO1xuK1x0czMyXHRcdCBpZDtcbitcdHUzMlx0XHQgZmxhZ3M7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGtmdW5jX3N5bWJvbCBrZnVuY19zeW1ib2xzW10gPSB7XG4rXHR7IFwia2Z1bmNfYVwiLCAtMSwgMCB9LFxuK1x0eyBcImtmdW5jX2JcIiwgLTEsIEtGX0ZBU1RDQUxMIH0sXG4rfTtcbitcbiAvKiBBbGlnbiB0aGUgLkJURl9pZHMgc2VjdGlvbiB0byA0IGJ5dGVzICovXG4gYXNtIChcbiBcIi5wdXNoc2VjdGlvbiBcIiBCVEZfSURTX1NFQ1RJT04gXCIgLFxcXCJhXFxcIjsgXFxuXCJcbiBcIi5iYWxpZ24gNCwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCJcbiBcIi5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXCIpO1xuIFxuKy8qXG4rICogdGVzdF9saXN0X2xvY2FsLCB0ZXN0X3NldCBhbmQgdGVzdF9rZnVuY19zZXQgYXJlIC5sb2NhbCBzeW1ib2xzIHBsYWNlZFxuKyAqIGluIC5CVEZfaWRzIGJ5IGlubGluZSBhc20sIGFuZCBhcmUgcmVhZCBoZXJlIGRpcmVjdGx5IGJ5IEMgbmFtZS4gVG8gdGhlXG4rICogY29tcGlsZXIgdGhleSBhcmUgcGxhaW4sIGRlZmF1bHQtdmlzaWJpbGl0eSBleHRlcm4gb2JqZWN0cy5cbisgKlxuKyAqIFdoZW4gdGVzdF9wcm9ncyBpcyBsaW5rZWQgYXMgYSBwb3NpdGlvbi1pbmRlcGVuZGVudCBleGVjdXRhYmxlIChQSUUpLFxuKyAqIHRha2luZyB0aGUgYWRkcmVzcyBvZiBzdWNoIGFuIGV4dGVybiBpcyByb3V0ZWQgdGhyb3VnaCB0aGUgR09ULiBUaGVcbisgKiBHTlUgYXNzZW1ibGVyIG9uIGFhcmNoNjQgdW5jb25kaXRpb25hbGx5IGNvbnZlcnRzIHJlZmVyZW5jZXMgdG8gLmxvY2FsXG4rICogc3ltYm9scyBpbnRvIHNlY3Rpb24gKyBhZGRlbmQgZm9ybSAoXCIuQlRGX2lkcyArIFx1MDAzY29mZnNldFx1MDAzZVwiKSwgYnV0IGEgR09UXG4rICogc2xvdCBjYW5ub3QgY2FycnkgYW4gYWRkZW5kICh0aGUgQUFyY2g2NCBFTEYgc3BlYyBtYW5kYXRlcyB6ZXJvKSwgc29cbisgKiB0aGUgbGlua2VyIHJlc29sdmVzIGl0IHRvIHRoZSAuQlRGX2lkcyBiYXNlLlxuKyAqXG4rICogTWFyayB0aGVtIGhpZGRlbiBzbyB0aGUgY29tcGlsZXIgdHJlYXRzIHRoZW0gYXMgbm9uLWludGVycG9zYWJsZSBhbmRcbisgKiBlbWl0cyBhIGRpcmVjdCwgYWRkZW5kLXByZXNlcnZpbmcgUEMtcmVsYXRpdmUgYWNjZXNzIGluc3RlYWQgb2YgYSBHT1RcbisgKiBsb2FkLCBpbiBib3RoIFBJRSBhbmQgbm9uLVBJRSBidWlsZHMuIHRlc3RfbGlzdF9nbG9iYWwgaXMgLmdsb2JsIGFuZFxuKyAqIG5vdCBhZmZlY3RlZCwgc28gaXQgaXMgbGVmdCBhdCBkZWZhdWx0IHZpc2liaWxpdHkuXG4rICovXG4rI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbilcbiBCVEZfSURfTElTVCh0ZXN0X2xpc3RfbG9jYWwpXG4gQlRGX0lEX1VOVVNFRFxuIEJURl9JRCh0eXBlZGVmLCBTKVxuQEAgLTQzLDI0ICs3NiwzOSBAQCBCVEZfSUQoc3RydWN0LCAgUylcbiBCVEZfSUQodW5pb24sICAgVSlcbiBCVEZfSUQoZnVuYywgICAgZnVuYylcbiBcbi1leHRlcm4gX191MzIgdGVzdF9saXN0X2dsb2JhbFtdO1xuLUJURl9JRF9MSVNUX0dMT0JBTCh0ZXN0X2xpc3RfZ2xvYmFsLCAxKVxuLUJURl9JRF9VTlVTRURcbitCVEZfU0VUX1NUQVJUKHRlc3Rfc2V0KVxuIEJURl9JRCh0eXBlZGVmLCBTKVxuIEJURl9JRCh0eXBlZGVmLCBUKVxuIEJURl9JRCh0eXBlZGVmLCBVKVxuIEJURl9JRChzdHJ1Y3QsICBTKVxuIEJURl9JRCh1bmlvbiwgICBVKVxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxuK0JURl9TRVRfRU5EKHRlc3Rfc2V0KVxuIFxuLUJURl9TRVRfU1RBUlQodGVzdF9zZXQpXG4rQlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldClcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYSlcbitCVEZfSURfRkxBR1MoZnVuYywga2Z1bmNfYiwgS0ZfRkFTVENBTEwpXG4rQlRGX0tGVU5DU19FTkQodGVzdF9rZnVuY19zZXQpXG4rXG4rLypcbisgKiBTYW1lIGtmdW5jcyBpbiByZXZlcnNlIGRlY2xhcmF0aW9uIG9yZGVyLCBzbyByZXNvbHZlX2J0ZmlkcyBoYXMgdG9cbisgKiBhY3R1YWxseSBzb3J0IGF0IGxlYXN0IG9uZSBvZiB0aGUgdHdvIHNldHMuXG4rICovXG4rQlRGX0tGVU5DU19TVEFSVCh0ZXN0X2tmdW5jX3NldF9yZXYpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGtmdW5jX2IsIEtGX0ZBU1RDQUxMKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBrZnVuY19hKVxuK0JURl9LRlVOQ1NfRU5EKHRlc3Rfa2Z1bmNfc2V0X3JldilcbisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcFxuK1xuK2V4dGVybiBfX3UzMiB0ZXN0X2xpc3RfZ2xvYmFsW107XG4rQlRGX0lEX0xJU1RfR0xPQkFMKHRlc3RfbGlzdF9nbG9iYWwsIDEpXG4rQlRGX0lEX1VOVVNFRFxuIEJURl9JRCh0eXBlZGVmLCBTKVxuIEJURl9JRCh0eXBlZGVmLCBUKVxuIEJURl9JRCh0eXBlZGVmLCBVKVxuIEJURl9JRChzdHJ1Y3QsICBTKVxuIEJURl9JRCh1bmlvbiwgICBVKVxuIEJURl9JRChmdW5jLCAgICBmdW5jKVxuLUJURl9TRVRfRU5EKHRlc3Rfc2V0KVxuIFxuIHN0YXRpYyBpbnRcbiBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG5AQCAtNzAsMTAgKzExOCwxMCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHR5cGUgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbi1cdGlmICghdHlwZSkge1xuLVx0XHRQUklOVF9GQUlMKFwiRmFpbGVkIHRvIGdldCB0eXBlIGZvciBJRCAlZFxcblwiLCB0eXBlX2lkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcImJ0Zl9fdHlwZV9ieV9pZFwiKSlcbiBcdFx0cmV0dXJuIC0xO1xuLVx0fVxuK1xuK1x0c3RyID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIHR5cGUtXHUwMDNlbmFtZV9vZmYpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0X3N5bWJvbHMpOyBpKyspIHtcbiBcdFx0aWYgKHRlc3Rfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG5AQCAtODIsNjQgKzEzMCw4MCBAQCBfX3Jlc29sdmVfc3ltYm9sKHN0cnVjdCBidGYgKmJ0ZiwgaW50IHR5cGVfaWQpXG4gXHRcdGlmIChCVEZfSU5GT19LSU5EKHR5cGUtXHUwMDNlaW5mbykgIT0gdGVzdF9zeW1ib2xzW2ldLnR5cGUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHN0ciA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCB0eXBlLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0aWYgKCFzdHIpIHtcbi1cdFx0XHRQUklOVF9GQUlMKFwiRmFpbGVkIHRvIGdldCBuYW1lIGZvciBCVEYgSUQgJWRcXG5cIiwgdHlwZV9pZCk7XG4tXHRcdFx0cmV0dXJuIC0xO1xuLVx0XHR9XG4tXG4gXHRcdGlmICghc3RyY21wKHN0ciwgdGVzdF9zeW1ib2xzW2ldLm5hbWUpKVxuIFx0XHRcdHRlc3Rfc3ltYm9sc1tpXS5pZCA9IHR5cGVfaWQ7XG4gXHR9XG4gXG4rXHRpZiAoIWJ0Zl9pc19mdW5jKHR5cGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGkrKykge1xuK1x0XHRpZiAoa2Z1bmNfc3ltYm9sc1tpXS5pZCBcdTAwM2U9IDApXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKHN0ciwga2Z1bmNfc3ltYm9sc1tpXS5uYW1lKSlcbitcdFx0XHRrZnVuY19zeW1ib2xzW2ldLmlkID0gdHlwZV9pZDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlc29sdmVfc3ltYm9scyh2b2lkKVxuK3N0YXRpYyBpbnQgcmVzb2x2ZV9zeW1ib2xzKHN0cnVjdCBidGYgKmJ0ZilcbiB7XG4tXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRfX3UzMiBuciA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTtcbiBcdGludCB0eXBlX2lkO1xuLVx0X191MzIgbnI7XG4tXG4tXHRidGYgPSBidGZfX3BhcnNlX3JhdyhcInJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcIik7XG4tXHRpZiAoQ0hFQ0sobGliYnBmX2dldF9lcnJvcihidGYpLCBcInJlc29sdmVcIixcbi1cdFx0ICBcIkZhaWxlZCB0byBsb2FkIEJURiBmcm9tIHJlc29sdmVfYnRmaWRzLnRlc3Quby5CVEZcXG5cIikpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdG5yID0gYnRmX190eXBlX2NudChidGYpO1xuIFxuIFx0Zm9yICh0eXBlX2lkID0gMTsgdHlwZV9pZCBcdTAwM2MgbnI7IHR5cGVfaWQrKykge1xuIFx0XHRpZiAoX19yZXNvbHZlX3N5bWJvbChidGYsIHR5cGVfaWQpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiAtMTtcbiBcdH1cbi1cbi1cdGJ0Zl9fZnJlZShidGYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNoZWNrX2tmdW5jX3NldChzdHJ1Y3QgYnRmX2lkX3NldDggKnNldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaSwgajtcbitcbitcdEFTU0VSVF9FUShzZXQtXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXCJrZnVuY19zZXRfZmxhZ3NcIik7XG4rXHRBU1NFUlRfRVEoc2V0LVx1MDAzZWNudCwgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXCJrZnVuY19zZXRfY250XCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZWNudDsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNfc3ltYm9scyk7IGorKykge1xuK1x0XHRcdGlmIChrZnVuY19zeW1ib2xzW2pdLmlkID09IChzMzIpc2V0LVx1MDAzZXBhaXJzW2ldLmlkKSB7XG4rXHRcdFx0XHRBU1NFUlRfRVEoc2V0LVx1MDAzZXBhaXJzW2ldLmZsYWdzLFxuK1x0XHRcdFx0XHQgIGtmdW5jX3N5bWJvbHNbal0uZmxhZ3MsIFwia2Z1bmNfZmxhZ3NfY2hlY2tcIik7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0QVNTRVJUX1RSVUUoaiBcdTAwM2MgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXCJrZnVuY19pZF9mb3VuZFwiKTtcbitcbitcdFx0aWYgKGkgXHUwMDNlIDApIHtcbitcdFx0XHRBU1NFUlRfTEUoc2V0LVx1MDAzZXBhaXJzW2kgLSAxXS5pZCxcbitcdFx0XHRcdCAgc2V0LVx1MDAzZXBhaXJzW2ldLmlkLCBcImtmdW5jX3NvcnRfY2hlY2tcIik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gdm9pZCB0ZXN0X3Jlc29sdmVfYnRmaWRzKHZvaWQpXG4ge1xuIFx0X191MzIgKnRlc3RfbGlzdCwgKnRlc3RfbGlzdHNbXSA9IHsgdGVzdF9saXN0X2xvY2FsLCB0ZXN0X2xpc3RfZ2xvYmFsIH07XG4gXHR1bnNpZ25lZCBpbnQgaSwgajtcbi1cdGludCByZXQgPSAwO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuIFxuLVx0aWYgKHJlc29sdmVfc3ltYm9scygpKVxuK1x0YnRmID0gYnRmX19wYXJzZV9yYXcoQlRGX0RBVEFfRklMRSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9wYXJzZVwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHJlc29sdmVfc3ltYm9scyhidGYpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIENoZWNrIEJURl9JRF9MSVNUKHRlc3RfbGlzdF9sb2NhbCkgYW5kXG4gXHQgKiBCVEZfSURfTElTVF9HTE9CQUwodGVzdF9saXN0X2dsb2JhbCkgSURzXG4gXHQgKi9cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUodGVzdF9saXN0cyk7IGorKykge1xuIFx0XHR0ZXN0X2xpc3QgPSB0ZXN0X2xpc3RzW2pdO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKykge1xuLVx0XHRcdHJldCA9IENIRUNLKHRlc3RfbGlzdFtpXSAhPSB0ZXN0X3N5bWJvbHNbaV0uaWQsXG4tXHRcdFx0XHQgICAgXCJpZF9jaGVja1wiLFxuLVx0XHRcdFx0ICAgIFwid3JvbmcgSUQgZm9yICVzICglZCAhPSAlZClcXG5cIixcbi1cdFx0XHRcdCAgICB0ZXN0X3N5bWJvbHNbaV0ubmFtZSxcbi1cdFx0XHRcdCAgICB0ZXN0X2xpc3RbaV0sIHRlc3Rfc3ltYm9sc1tpXS5pZCk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3Rfc3ltYm9scyk7IGkrKylcbitcdFx0XHRBU1NFUlRfRVEodGVzdF9saXN0W2ldLCB0ZXN0X3N5bWJvbHNbaV0uaWQsIHRlc3Rfc3ltYm9sc1tpXS5uYW1lKTtcbiBcdH1cbiBcbiBcdC8qIENoZWNrIEJURl9TRVRfU1RBUlQodGVzdF9zZXQpIElEcyAqL1xuQEAgLTE1MywxNSArMjE3LDE2IEBAIHZvaWQgdGVzdF9yZXNvbHZlX2J0Zmlkcyh2b2lkKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IENIRUNLKCFmb3VuZCwgXCJpZF9jaGVja1wiLFxuLVx0XHRcdCAgICBcIklEICVkIG5vdCBmb3VuZCBpbiB0ZXN0X3N5bWJvbHNcXG5cIixcbi1cdFx0XHQgICAgdGVzdF9zZXQuaWRzW2ldKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKCFBU1NFUlRfVFJVRShmb3VuZCwgXCJpZF9pbl90ZXN0X3N5bWJvbHNcIikpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChpIFx1MDAzZSAwKSB7XG4tXHRcdFx0aWYgKCFBU1NFUlRfTEUodGVzdF9zZXQuaWRzW2kgLSAxXSwgdGVzdF9zZXQuaWRzW2ldLCBcInNvcnRfY2hlY2tcIikpXG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKGkgXHUwMDNlIDApXG4rXHRcdFx0QVNTRVJUX0xFKHRlc3Rfc2V0Lmlkc1tpIC0gMV0sIHRlc3Rfc2V0Lmlkc1tpXSwgXCJzb3J0X2NoZWNrXCIpO1xuIFx0fVxuK1xuK1x0Y2hlY2tfa2Z1bmNfc2V0KFx1MDAyNnRlc3Rfa2Z1bmNfc2V0KTtcbitcdGNoZWNrX2tmdW5jX3NldChcdTAwMjZ0ZXN0X2tmdW5jX3NldF9yZXYpO1xuK1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfZGF0YS5jXG5pbmRleCBiYWE1MjUyNzViZGUzMS4uODU4NzY1ODAxMmMzZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9kYXRhLmNcbkBAIC00OCwzICs0OCwxMyBAQCBpbnQgZnVuYyhzdHJ1Y3Qgcm9vdF9zdHJ1Y3QgKnJvb3QpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK2ludCBrZnVuY19hKHN0cnVjdCByb290X3N0cnVjdCAqcm9vdClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGtmdW5jX2Ioc3RydWN0IHJvb3Rfc3RydWN0ICpyb290KVxuK3tcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDAxOjE4OjA5LjM1NDY1NDA3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDY4MTc3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBUb29sLVNpZGUgQ2hhbmdlcyBmb3IgQlRGIElEIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHNvbWUgQlRGIElEIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIEkgc2VlIHRoYXQgYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCBpcyBiZWluZyB1cGRhdGVkLCBhbG9uZyB3aXRoIHNvbWUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgbWFjcm9zIOKAkyBgQlRGX1NFVDhfS0ZVTkNTYCwgYEJURl9JRF9GTEFHU2AsIGBCVEZfU0VUOF9TVEFSVGAsIGV0Yy4g4oCTIHdoaWNoIHNlZW0gbGlrZSB0aGV5IGFyZSBmb3IgbWFuYWdpbmcgYW5kIG9yZ2FuaXppbmcgQlRGIElEIGRlZmluaXRpb25zLlxuXG5NeSBmaXJzdCBjb25jZXJuIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29sLXNpZGUgY2hhbmdlcyBhcmVuJ3QgaW5hZHZlcnRlbnRseSBpbXBhY3RpbmcgdGhlIGNvcmUga2VybmVsLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIGlmIHRoZSBrZXJuZWwncyBjb3B5IG9mIGBidGZfaWRzLmhgIChgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgKSBpcyBhbHNvIGJlaW5nIG1vZGlmaWVkLCBidXQgaXQncyBub3QuIEdvb2QsIHRoaXMgaXMgcHJvYmFibHkgaXNvbGF0ZWQgdG8gdGhlIGJ1aWxkIHRvb2xzIGFuZCBzZWxmLXRlc3RzLlxuXG5JIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGJlIHN1cmUuIFllcCwgaXQncyBqdXN0IHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnk6IGB0b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yZXNvbHZlX2J0Zmlkcy5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX2RhdGEuY2AuIFRoaXMgY29uZmlybXMgaXQncyBhIFwidG9vbHNcIiBjaGFuZ2UgYW5kIG5vdCBkaXJlY3RseSBrZXJuZWwtZXhlY3V0aW9uIHJlbGV2YW50LlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIG9yIGlmIHRoZXkgYXJlIHJlbGV2YW50IHRvIGtlcm5lbCBleGVjdXRpb24uIFNpbmNlIGl0J3MgYWxsIHdpdGhpbiBgdG9vbHMvYCwgSSBkb24ndCB0aGluayB0aGlzIHBhdGNoIGl0c2VsZiBpcyBhIGRpcmVjdCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLCB1bmxlc3MsIGFuZCB0aGlzIGlzIGEgYmlnIElGLCB0aGUgdG9vbHMgaW4gcXVlc3Rpb24gYWZmZWN0IHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUgaW4gc29tZSB3YXkuIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyB0aGUgY2FzZSBoZXJlLiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBhZGRpbmcgbWFjcm9zIGFuZCBzb21lIHRlc3RzIGZvciB0aGUgQlRGIElEIHJlc29sdXRpb24gcHJvY2Vzcy5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoaXMgaXMgYSBjb2RlLWh5Z2llbmUgdHlwZSBvZiBwYXRjaDsgbWFraW5nIHRoaW5ncyBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gd29yayB3aXRoLCByYXRoZXIgdGhhbiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJZiBpdCB3ZXJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGtlcm5lbCBleGVjdXRpb24sIGl0IHdvdWxkIG5lZWQgbW9yZSBzY3J1dGlueS5cblxuSSB0YWtlIGFub3RoZXIgbG9vayBhbmQgZ3JlcCB0byB2ZXJpZnkgdGhhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGB0b29sc2AgYW5kIG5vdCB0aGUga2VybmVsIGl0c2VsZi4gQ29uZmlybWVkLiBgaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB3aGlsZSBgdG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmhgIGlzIG9ubHkgdXNlZCBieSB0b29scyBsaWtlIGByZXNvbHZlX2J0Zmlkc2AgYW5kIGJwZiBzZWxmdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMToxODoxOS40MjI4MzQxMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMzAzNTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVEZfU0VUOF9LRlVOQ1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTMtLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yMTA9ZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0OCBuYW1lO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjEyLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoyMTM6X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIxNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxNj1CVEZfU0VUOF9FTkQobmFtZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMS0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbmluY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIzMjojZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG5pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMzMtI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MTE2PWludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkxMjMtXFx0ICovXFxua2VybmVsL2JwZi9idGYuYzo5MTI0OlxcdGlmICghKGtzZXQtXFx1MDAzZXNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVEZfU0VUOF9LRlVOQ1MpKSB7XFxua2VybmVsL2JwZi9idGYuYy05MTI1LVxcdFxcdFdBUk5fT04oIWtzZXQtXFx1MDAzZW93bmVyKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTg9c3RydWN0IGJ0Zl9pZF9zZXQge1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTMtLyogVGhpcyBmbGFnIGltcGxpZXMgQlRGX1NFVDggaG9sZHMga2Z1bmMocykgKi9cXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoxNDojZGVmaW5lIEJURl9TRVQ4X0tGVU5DU1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMTUtXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaD0yMDk9ZXh0ZXJuIHN0cnVjdCBidGZfaWRfc2V0OCBuYW1lO1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9idGZfaWRzLmgtMjExLSNkZWZpbmUgQlRGX0tGVU5DU19TVEFSVChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaDoyMTI6X19CVEZfU0VUOF9TVEFSVChuYW1lLCBsb2NhbCwgQlRGX1NFVDhfS0ZVTkNTKVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIxMy1cXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oPTIxNT1CVEZfU0VUOF9FTkQobmFtZSlcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oLTIzMC0jZGVmaW5lIEJURl9TRVQ4X0VORChuYW1lKVxcbnRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oOjIzMTojZGVmaW5lIEJURl9LRlVOQ1NfU1RBUlQobmFtZSkgc3RhdGljIHN0cnVjdCBidGZfaWRfc2V0OCBfX21heWJlX3VudXNlZCBuYW1lID0geyAuZmxhZ3MgPSBCVEZfU0VUOF9LRlVOQ1MgfTtcXG50b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaC0yMzItI2RlZmluZSBCVEZfS0ZVTkNTX0VORChuYW1lKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYz0xNjI9c3RhdGljIHZvaWQgY2hlY2tfa2Z1bmNfc2V0KHN0cnVjdCBidGZfaWRfc2V0OCAqc2V0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYy0xNjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmVzb2x2ZV9idGZpZHMuYzoxNjY6XFx0QVNTRVJUX0VRKHNldC1cXHUwMDNlZmxhZ3MsIEJURl9TRVQ4X0tGVU5DUywgXFxcImtmdW5jX3NldF9mbGFnc1xcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jlc29sdmVfYnRmaWRzLmMtMTY3LVxcdEFTU0VSVF9FUShzZXQtXFx1MDAzZWNudCwgQVJSQVlfU0laRShrZnVuY19zeW1ib2xzKSwgXFxcImtmdW5jX3NldF9jbnRcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDE6MTg6MjEuNTQ1ODc2MjM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MDU5NjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhhbmtmdWxseS4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oYCBhbmQgdGhlIHNlbGZ0ZXN0cyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBDcnVjaWFsbHksIGl0J3MgKm5vdCogdG91Y2hpbmcgdGhlIG1haW4ga2VybmVsJ3MgaW5jbHVkZSBkaXJlY3RvcnkgKGBpbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaGApIG9yIGFueSBjcml0aWNhbCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5LiBUaGlzIGlzIGp1c3QgYSBtYXR0ZXIgb2Yga2VlcGluZyB0aGUgdG9vbCdzIGhlYWRlciBmaWxlIGluIHN5bmMgd2l0aCB0aGUga2VybmVsJ3MgZGVmaW5pdGlvbiwgYW5kIGFkZGluZyBhIG5ldyB0ZXN0IHRvIHRoZSB0b29saW5nLiBUaGlzIGlzbid0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIGl0J3MganVzdCBhYm91dCBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgdmVyaWZpY2F0aW9uIHdpdGhpbiB0aGUgdG9vbHMuIFdpdGggdGhhdCBpbiBtaW5kLCBJIGFtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIGZ1bmN0aW9uYWwgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE3OSwiT3V0cHV0VG9rZW5zIjo4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwMToxODoyNi42OTY0NzQ3MzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2luY2x1ZGUvbGludXgvYnRmX2lkcy5oIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyBhbmQgc2VsZnRlc3RzICh0b29scy9pbmNsdWRlL2xpbnV4L2J0Zl9pZHMuaCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpmz4j[1] Phase: Running StartedAt: 2026-06-24 01:18:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmz4j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-24 01:18:38 +0000 UTC FinishedAt: 2026-06-24 01:18:43 +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,}