Name: series-workflownlk4c Phase: Failed StartedAt: 2026-09-11 07:45:34 +0000 UTC FinishedAt: 2026-09-11 08:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlk4c[0] Phase: Succeeded StartedAt: 2026-09-11 07:45:34 +0000 UTC FinishedAt: 2026-09-11 08:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlk4c[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:45:34 +0000 UTC FinishedAt: 2026-09-11 08:06:41 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTM5Miw2ICYjNDM7MzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsXG4gXHRcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cdTAwM2VscnUsIExSVV9OQU1FUykpXG4gKTtcbiBcbiYjNDM7VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcbiYjNDM7XHRcdGludCBoaWdoZXN0X3pvbmVpZHgsXG4mIzQzO1x0XHRpbnQgb3JkZXIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfc29ydGVkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl90YWtlbixcbiYjNDM7XHRcdGludCBscnUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4mIzQzO1x0XHRpbnQgdGllcixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbWluX3NlcSksXG4mIzQzO1xuJiM0MztcdFRQX0FSR1MobWVtY2dfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsIG5yX3JlcXVlc3RlZCwgbnJfc2Nhbm5lZCxcbiYjNDM7XHRcdG5yX3NvcnRlZCwgbnJfc2tpcHBlZCwgbnJfdGFrZW4sIGxydSwgbWF4X3NlcSwgdGllciwgbWluX3NlcSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkoXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxuJiM0MztcdFx0X19maWVsZChpbnQsIG9yZGVyKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9yZXF1ZXN0ZWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NvcnRlZClcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc2tpcHBlZClcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgbHJ1KVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKVxuJiM0MztcdFx0X19maWVsZChpbnQsIHRpZXIpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG1pbl9zZXEpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfcmVxdWVzdGVkID0gbnJfcmVxdWVzdGVkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkID0gbnJfc2Nhbm5lZDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfc29ydGVkID0gbnJfc29ydGVkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9za2lwcGVkID0gbnJfc2tpcHBlZDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfdGFrZW4gPSBucl90YWtlbjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbHJ1ID0gbHJ1O1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXhfc2VxID0gbWF4X3NlcTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNldGllciA9IHRpZXI7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1pbl9zZXEgPSBtaW5fc2VxO1xuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX3ByaW50ayhcJiMzNDttZW1jZ19pZD0lbGx1IGNsYXNzem9uZT0lZCBvcmRlcj0lZCBucl9yZXF1ZXN0ZWQ9JWx1IG5yX3NjYW5uZWQ9JWx1IG5yX3NvcnRlZD0lbHUgbnJfc2tpcHBlZD0lbHUgbnJfdGFrZW49JWx1IGxydT0lcyBtYXhfc2VxPSVsdSB0aWVyPSVkIG1pbl9zZXE9JWx1XCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGlnaGVzdF96b25laWR4LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VvcmRlcixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfcmVxdWVzdGVkLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5yX3NraXBwZWQsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5yX3Rha2VuLFxuJiM0MztcdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZWxydSwgTFJVX05BTUVTKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNldGllcixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSlcbiYjNDM7KTtcbiYjNDM7XG4mIzQzO1RSQUNFX0VWRU5UKG1tX21nbHJ1X2luY19tYXhfc2VxLFxuJiM0MztcbiYjNDM7XHRUUF9QUk9UTyh1NjQgbWVtY2dfaWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFub25fbWluX3NlcSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmlsZV9taW5fc2VxLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyAqbnJfYW5vbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgKm5yX2ZpbGUpLFxuJiM0MztcbiYjNDM7XHRUUF9BUkdTKG1lbWNnX2lkLCBtYXhfc2VxLCBhbm9uX21pbl9zZXEsIGZpbGVfbWluX3NlcSwgbnJfYW5vbiwgbnJfZmlsZSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkoXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG1heF9zZXEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGFub25fbWluX3NlcSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZmlsZV9taW5fc2VxKVxuJiM0MztcdFx0X19hcnJheSh1bnNpZ25lZCBsb25nLCBucl9hbm9uLCBNQVhfTlJfR0VOUylcbiYjNDM7XHRcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfZmlsZSwgTUFYX05SX0dFTlMpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1heF9zZXEgPSBtYXhfc2VxO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vhbm9uX21pbl9zZXEgPSBhbm9uX21pbl9zZXE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZW5yX2Fub24sIG5yX2Fub24sIHNpemVvZihfX2VudHJ5LVx1MDAzZW5yX2Fub24pKTtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZW5yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LVx1MDAzZW5yX2ZpbGUpKTtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7bWVtY2dfaWQ9JWxsdSBtYXhfc2VxPSVsdSBhbm9uX21pbl9zZXE9JWx1IGZpbGVfbWluX3NlcT0lbHUgbnJfYW5vbj0lcyBucl9maWxlPSVzXCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlYW5vbl9taW5fc2VxLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VmaWxlX21pbl9zZXEsXG4mIzQzO1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksXG4mIzQzO1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfZmlsZSwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmQwZTU5YmFmNWQ1YzYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0yODEzLDYgJiM0MzsyODEzLDE4IEBAIHN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdHJldHVybiBscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEgLSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0gJiM0MzsgMTtcbiB9XG4gXG4mIzQzOy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcdTAwM2U9IDAgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9zZXFfbnJfcGFnZXMoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiwgaW50IGdlbiwgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgem9uZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRpbnQgdHlwZTtcbkBAIC00MDg4LDYgJiM0Mzs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHJhY2VfaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHR5cGUsIGdlbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9HRU5TXTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcV9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxuJiM0MztcdFx0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuclt0eXBlXVtnZW5dID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuJiM0MztcbiYjNDM7XHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbiYjNDM7XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlbWluX3NlcVtMUlVfR0VOX0FOT05dLFxuJiM0MztcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXG4mIzQzO1x0XHRcdFx0ICAgbnJbTFJVX0dFTl9BTk9OXSwgbnJbTFJVX0dFTl9GSUxFXSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0Ym9vbCBzdWNjZXNzO1xuQEAgLTQxNDcsNiAmIzQzOzQxNzksOCBAQCBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzc1xuIFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNldGltZXN0YW1wc1tuZXh0XSwgamlmZmllcyk7XG4gXHQvKiBtYWtlIHN1cmUgcHJlY2VkaW5nIG1vZGlmaWNhdGlvbnMgYXBwZWFyICovXG4gXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZscnVnZW4tXHUwMDNlbWF4X3NlcSwgbHJ1Z2VuLVx1MDAzZW1heF9zZXEgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdHRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7XG4gdW5sb2NrOlxuIFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00MjM5LDcgJiM0Mzs0MjczLDcgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1x0aW50IGdlbiwgdHlwZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG5AQCAtNDI0OCw4ICYjNDM7NDI4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4gXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuIFx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLVx0XHRcdFx0dG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4mIzQzO1x0XHRcdHRvdGFsICYjNDM7PSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC00ODY1LDYgJiM0Mzs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4mIzQzO1x0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXG4mIzQzO1x0XHRcdFx0ICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiM0MztcdFx0XHRcdCAgIHNjYW5uZWQsIHNvcnRlZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4mIzQzO1x0XHRcdFx0ICAgdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04sXG4mIzQzO1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1heF9zZXEsIHRpZXIsXG4mIzQzO1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG5AQCAtNTczOCwxOSAmIzQzOzU3NzcsMTYgQEAgc3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0c2VxID0gMDtcbiBcbiBcdGZvciAoOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG4tXHRcdGludCB0eXBlLCB6b25lO1xuJiM0MztcdFx0aW50IHR5cGU7XG4gXHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgYmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuIFxuIFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlMTBsdSAlMTB1XCYjMzQ7LCBzZXEsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJpcnRoKSk7XG4gXG4gXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHRcdGNoYXIgbWFyayA9IGZ1bGwgXHUwMDI2XHUwMDI2IHNlcSBcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICYjMzk7eCYjMzk7IDogJiMzOTsgJiMzOTs7XG4gXG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJTEwbHUlY1wmIzM0Oywgc2l6ZSwgbWFyayk7XG4gXHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzODMxYjYzYjc3ODNhNTE1MzVkOTg4ZmM3ZDM2ZTM0MWI0ZTI5MzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKQEAgLTM5Miw2ICYjNDM7MzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsCiAJCV9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0mZ3Q7bHJ1LCBMUlVfTkFNRVMpKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKG1tX21nbHJ1X3NjYW5fZm9saW9zLAomIzQzOwomIzQzOwlUUF9QUk9UTyh1NjQgbWVtY2dfaWQsCiYjNDM7CQlpbnQgaGlnaGVzdF96b25laWR4LAomIzQzOwkJaW50IG9yZGVyLAomIzQzOwkJdW5zaWduZWQgbG9uZyBucl9yZXF1ZXN0ZWQsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfc2tpcHBlZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sCiYjNDM7CQlpbnQgbHJ1LAomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJaW50IHRpZXIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG1pbl9zZXEpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1lbWNnX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLCBucl9yZXF1ZXN0ZWQsIG5yX3NjYW5uZWQsCiYjNDM7CQlucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1NjQsIG1lbWNnX2lkKQomIzQzOwkJX19maWVsZChpbnQsIGhpZ2hlc3Rfem9uZWlkeCkKJiM0MzsJCV9fZmllbGQoaW50LCBvcmRlcikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9zY2FubmVkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9zb3J0ZWQpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3Rha2VuKQomIzQzOwkJX19maWVsZChpbnQsIGxydSkKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSkKJiM0MzsJCV9fZmllbGQoaW50LCB0aWVyKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtaW5fc2VxKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkID0gbWVtY2dfaWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtoaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7CiYjNDM7CQlfX2VudHJ5LSZndDtvcmRlciA9IG9yZGVyOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfcmVxdWVzdGVkID0gbnJfcmVxdWVzdGVkOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc2Nhbm5lZCA9IG5yX3NjYW5uZWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9zb3J0ZWQgPSBucl9zb3J0ZWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9za2lwcGVkID0gbnJfc2tpcHBlZDsKJiM0MzsJCV9fZW50cnktJmd0O25yX3Rha2VuID0gbnJfdGFrZW47CiYjNDM7CQlfX2VudHJ5LSZndDtscnUgPSBscnU7CiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxID0gbWF4X3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O3RpZXIgPSB0aWVyOwomIzQzOwkJX19lbnRyeS0mZ3Q7bWluX3NlcSA9IG1pbl9zZXE7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21lbWNnX2lkPSVsbHUgY2xhc3N6b25lPSVkIG9yZGVyPSVkIG5yX3JlcXVlc3RlZD0lbHUgbnJfc2Nhbm5lZD0lbHUgbnJfc29ydGVkPSVsdSBucl9za2lwcGVkPSVsdSBucl90YWtlbj0lbHUgbHJ1PSVzIG1heF9zZXE9JWx1IHRpZXI9JWQgbWluX3NlcT0lbHUmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkLAomIzQzOwkJX19lbnRyeS0mZ3Q7aGlnaGVzdF96b25laWR4LAomIzQzOwkJX19lbnRyeS0mZ3Q7b3JkZXIsCiYjNDM7CQlfX2VudHJ5LSZndDtucl9yZXF1ZXN0ZWQsCiYjNDM7CQlfX2VudHJ5LSZndDtucl9zY2FubmVkLAomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc29ydGVkLAomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc2tpcHBlZCwKJiM0MzsJCV9fZW50cnktJmd0O25yX3Rha2VuLAomIzQzOwkJX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LSZndDtscnUsIExSVV9OQU1FUyksCiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7dGllciwKJiM0MzsJCV9fZW50cnktJmd0O21pbl9zZXEpCiYjNDM7KTsKJiM0MzsKJiM0MztUUkFDRV9FVkVOVChtbV9tZ2xydV9pbmNfbWF4X3NlcSwKJiM0MzsKJiM0MzsJVFBfUFJPVE8odTY0IG1lbWNnX2lkLAomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhbm9uX21pbl9zZXEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGZpbGVfbWluX3NlcSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgKm5yX2Fub24sCiYjNDM7CQl1bnNpZ25lZCBsb25nICpucl9maWxlKSwKJiM0MzsKJiM0MzsJVFBfQVJHUyhtZW1jZ19pZCwgbWF4X3NlcSwgYW5vbl9taW5fc2VxLCBmaWxlX21pbl9zZXEsIG5yX2Fub24sIG5yX2ZpbGUpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1NjQsIG1lbWNnX2lkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBhbm9uX21pbl9zZXEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGZpbGVfbWluX3NlcSkKJiM0MzsJCV9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfYW5vbiwgTUFYX05SX0dFTlMpCiYjNDM7CQlfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2ZpbGUsIE1BWF9OUl9HRU5TKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkID0gbWVtY2dfaWQ7CiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxID0gbWF4X3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O2Fub25fbWluX3NlcSA9IGFub25fbWluX3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O2ZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTsKJiM0MzsJCW1lbWNweShfX2VudHJ5LSZndDtucl9hbm9uLCBucl9hbm9uLCBzaXplb2YoX19lbnRyeS0mZ3Q7bnJfYW5vbikpOwomIzQzOwkJbWVtY3B5KF9fZW50cnktJmd0O25yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LSZndDtucl9maWxlKSk7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21lbWNnX2lkPSVsbHUgbWF4X3NlcT0lbHUgYW5vbl9taW5fc2VxPSVsdSBmaWxlX21pbl9zZXE9JWx1IG5yX2Fub249JXMgbnJfZmlsZT0lcyYjMzQ7LAomIzQzOwkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQsCiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7YW5vbl9taW5fc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7ZmlsZV9taW5fc2VxLAomIzQzOwkJX19wcmludF9hcnJheShfX2VudHJ5LSZndDtucl9hbm9uLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKJiM0MzsJCV9fcHJpbnRfYXJyYXkoX19lbnRyeS0mZ3Q7bnJfZmlsZSwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7KTsKJiM0MzsKIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbywKIAogCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA0MGQzZjFiNDhhNzRjLi5kMGU1OWJhZjVkNWM2IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMjgxMyw2ICYjNDM7MjgxMywxOCBAQCBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJcmV0dXJuIGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEgLSBscnV2ZWMtJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdICYjNDM7IDE7CiB9CiAKJiM0MzsvKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIGEgZ2VuZXJhdGlvbiwgc3VtbWVkIG92ZXIgem9uZXMgYW5kIGNsYW1wZWQgdG8gJmd0Oz0gMCAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fc2VxX25yX3BhZ2VzKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sIGludCBnZW4sIGludCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IHpvbmU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQomIzQzOwkJc2l6ZSAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJaW50IHR5cGU7CkBAIC00MDg4LDYgJiM0Mzs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRyYWNlX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0Mzt7CiYjNDM7CWludCB0eXBlLCBnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJbQU5PTl9BTkRfRklMRV1bTUFYX05SX0dFTlNdOwomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsKJiM0MzsJaWYgKCF0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcV9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykKJiM0MzsJCWZvciAoZ2VuID0gMDsgZ2VuICZsdDsgTUFYX05SX0dFTlM7IGdlbiYjNDM7JiM0MzspCiYjNDM7CQkJbnJbdHlwZV1bZ2VuXSA9IGxydV9nZW5fc2VxX25yX3BhZ2VzKGxydWdlbiwgZ2VuLCB0eXBlKTsKJiM0MzsKJiM0MzsJdHJhY2VfbW1fbWdscnVfaW5jX21heF9zZXEobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksCiYjNDM7CQkJCSAgIGxydWdlbi0mZ3Q7bWF4X3NlcSwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDttaW5fc2VxW0xSVV9HRU5fQU5PTl0sCiYjNDM7CQkJCSAgIGxydWdlbi0mZ3Q7bWluX3NlcVtMUlVfR0VOX0ZJTEVdLAomIzQzOwkJCQkgICBucltMUlVfR0VOX0FOT05dLCBucltMUlVfR0VOX0ZJTEVdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlib29sIHN1Y2Nlc3M7CkBAIC00MTQ3LDYgJiM0Mzs0MTc5LDggQEAgc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MKIAlXUklURV9PTkNFKGxydWdlbi0mZ3Q7dGltZXN0YW1wc1tuZXh0XSwgamlmZmllcyk7CiAJLyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLwogCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bHJ1Z2VuLSZndDttYXhfc2VxLCBscnVnZW4tJmd0O21heF9zZXEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CXRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7CiB1bmxvY2s6CiAJbHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTsKIApAQCAtNDIzOSw3ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7Ci0JaW50IGdlbiwgdHlwZSwgem9uZTsKJiM0MzsJaW50IGdlbiwgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCURFRklORV9NQVhfU0VRKGxydXZlYyk7CkBAIC00MjQ4LDggJiM0Mzs0MjgyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MKIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7CiAJCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKIAkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpOwogCQl9CiAJfQogCkBAIC00ODY1LDYgJiM0Mzs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLSZndDtyZWNsYWltX2lkeCwgc2MtJmd0O29yZGVyLCBucl90b19zY2FuLAogCQkJCXNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLAogCQkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKJiM0MzsJdHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksCiYjNDM7CQkJCSAgIHNjLSZndDtyZWNsYWltX2lkeCwgc2MtJmd0O29yZGVyLCBucl90b19zY2FuLAomIzQzOwkJCQkgICBzY2FubmVkLCBzb3J0ZWQsIHNraXBwZWQsIGlzb2xhdGVkLAomIzQzOwkJCQkgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTiwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDttYXhfc2VxLCB0aWVyLAomIzQzOwkJCQkgICBscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCiAJKmlzb2xhdGVkcCA9IGlzb2xhdGVkOwogCXJldHVybiBzY2FubmVkOwpAQCAtNTczOCwxOSAmIzQzOzU3NzcsMTYgQEAgc3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJc2VxID0gMDsKIAogCWZvciAoOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewotCQlpbnQgdHlwZSwgem9uZTsKJiM0MzsJCWludCB0eXBlOwogCQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCQl1bnNpZ25lZCBsb25nIGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7CiAKIAkJc2VxX3ByaW50ZihtLCAmIzM0OyAlMTBsdSAlMTB1JiMzNDssIHNlcSwgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gYmlydGgpKTsKIAogCQlmb3IgKHR5cGUgPSAwOyB0eXBlICZsdDsgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspIHsKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpOwogCQkJY2hhciBtYXJrID0gZnVsbCAmYW1wOyZhbXA7IHNlcSAmbHQ7IG1pbl9zZXFbdHlwZV0gPyAmIzM5O3gmIzM5OyA6ICYjMzk7ICYjMzk7OwogCi0JCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKLQkJCQlzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQogCQkJc2VxX3ByaW50ZihtLCAmIzM0OyAlMTBsdSVjJiMzNDssIHNpemUsIG1hcmspOwogCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpbmNsdXNpb24gaW4gb3VyIGZ1enppbmcgZWZmb3J0cyB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCYjMzk7cyBhbmFseXplIHRoZSBkaWZmLiBXZSBzZWUgYWRkaXRpb25zOiB0d28gbmV3IHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBpbiBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLiBBbHNvLCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBscnVfZ2VuX3NlcV9ucl9wYWdlc2AsIGFuZCB1c2VzIG9mIHRoZXNlIG5ldyBhZGRpdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEFjY29yZGluZyB0byBvdXIgY3JpdGVyaWEsIHdlIGRvbiYjMzk7dCB3YW50IHRvIGZ1enogcGF0Y2hlcyB0aGF0IGFyZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLiBBbmQgbW9yZSBzcGVjaWZpY2FsbHk6ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBUaGF0IGlzIHRoZSBrZXkgdGVzdCBoZXJlLgoKSW5pdGlhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgbWlnaHQgZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnk6IGVzc2VudGlhbGx5IG5ldyB0cmFjZXBvaW50cywgYSBiaXQgb2YgcmVmYWN0b3JpbmcsIGFuZCBhZGRpbmcgYSAzLWxpbmUgc3VtIGZ1bmN0aW9uLiBJdCBhcHBlYXJzIHRvIGJlIG1vc3RseSBhYm91dCBvYnNlcnZhYmlsaXR5LiBIb3dldmVyLCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gRG9lcyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGxydV9nZW5fc2VxX25yX3BhZ2VzYCwgYWN0dWFsbHkgaW1wYWN0IGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/CgpMb29raW5nIGNsb3NlbHkgYXQgYGxydXZlY19ldmljdGFibGVfc2l6ZWAsIGBscnVfZ2VuX3NlcV9zaG93YCwgYW5kIGB0cmFjZV9pbmNfbWF4X3NlcWAgaXQmIzM5O3MganVzdCBhIGRpcmVjdCwgb25lLXRvLW9uZSByZXBsYWNlbWVudCBvZiB0aGUgZm9yIGxvb3AuIFRoZSBoZWxwZXIgZnVuY3Rpb24gc3VtcyBhcnJheSBlbGVtZW50cywgbm90aGluZyBtb3JlLCBub3RoaW5nIGxlc3MuIEl0JiMzOTtzIGEgc3RyYWlnaHQgY29kZSByZWZhY3RvcmluZyB0byBEUlkgdGhlIGNvZGUuIEFuZCB0aGUgdHJhY2Vwb2ludHMgdGhlbXNlbHZlcyBvbmx5IGFkZCBpbnN0cnVtZW50YXRpb24sIG5vdCBhbHRlciBsb2dpYy4KCkluIGBzY2FuX2ZvbGlvc2AsIHRoZSB0cmFjZXBvaW50IHNpbXBseSBsb2dzIGluZm9ybWF0aW9uIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwcm9ncmFtJiMzOTtzIHBhdGguCgpTbywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY29kZSBjaGFuZ2VzIGFwcGVhciBzdHJpY3RseSBjb3NtZXRpYyBpbiB0ZXJtcyBvZiBhbHRlcmluZyBkYXRhIG9yIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgYmVmb3JlIG1ha2luZyBhIGZpbmFsIGRlY2lzaW9uLiBJIHNob3VsZCBwcm9iYWJseSBydW4gYGdpdCBkaWZmYCBvbmUgbW9yZSB0aW1lIG9yIHZlcmlmeSB3aXRoIG90aGVyIHRvb2xzIGZvciBhIHF1aWNrIGRvdWJsZSBjaGVjaywganVzdCBpbiBjYXNlLgoKSW4gY29uY2x1c2lvbiwgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHNlZW1zIGxpbWl0ZWQgdG8gdHJhY2Vwb2ludCBhZGRpdGlvbnMgYW5kIGEgdHJpdmlhbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvZGUgZGVkdXBsaWNhdGlvbiB0aGF0IGRvZXNuJiMzOTt0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKm5vdCogd29ydGggZnV6emluZyBhdCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fbWdscnVfc2Nhbl9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzUwPVRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zOTQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDozOTU6VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zOTYtXG4tLVxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MDAtXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG5tbS92bXNjYW4uYzo0OTAxOlx0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXG5tbS92bXNjYW4uYy00OTAyLVx0XHRcdFx0ICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDAKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGdpdCBoaXN0b3J5IGFuZCBkaWZmIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBub3RoaW5nIGVsc2Ugc25lYWtlZCBpbi4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgY29tbWl0IElEIGlzIGAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzYC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCB0aGUgYml0IGFib3V0OiAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5IGhlcmUsIGFuZCBpZiB0aGF0IGFwcGxpZXMsIHRoZW4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpEb2VzIHRoaXMgcGF0Y2ggKmFjdHVhbGx5KiBkbyBhbnl0aGluZyBvdGhlciB0aGFuIGluamVjdCB0cmFjZXBvaW50cyBhbmQgcmVmYWN0b3IgdGhpcyBoZWxwZXI/IExldCYjMzk7cyBzZWUuLi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgdHdvIHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBhbG9uZyB3aXRoIHRoaXMgbGl0dGxlIHN0YXRpYyBoZWxwZXIgYGxydV9nZW5fc2VxX25yX3BhZ2VzYC4gSXQgc2VlbXMgdGhpcyBoZWxwZXIgaXMgKm9ubHkqIHVzZWQgYnkgdGhlIHRyYWNlcG9pbnRzLCBhbmQgaXQmIzM5O3MgYmFzaWNhbGx5IHRoZSBzYW1lIGxvZ2ljIHRoYXQgd2FzIGFscmVhZHkgb3Blbi1jb2RlZCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMuIE5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFueSBjcml0aWNhbCBpbnZhcmlhbnRzIGFyZSBoYXBwZW5pbmcuCgpSaWdodCwgc28gdW5kZXIgU2VjdGlvbiAyIG9mIHRoZSBndWlkZWxpbmVzLCB0aGF0ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7IGJpdCBkZWZpbml0ZWx5IGFwcGxpZXMgaGVyZS4gVGhlIHBhdGNoIGp1c3QgYWRkcyB0aGVzZSB0cmFjZXBvaW50cywgYW5kIGV4dHJhY3RzIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBOb3RoaW5nIG1vcmUuIFNvLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIGFuZCBjb25maXJtLgotICAgYFdvcnRoRnV6emluZzogZmFsc2VgCi0gICBgRm9jdXNTeW1ib2xzOiBbXWAKLSAgIGBFbmFibGVDb25maWdzOiBbXWAKLSAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uYAoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjI1NDQ2MDg0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQyMzk5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjI1NDQ2NDg0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMDA0OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM4MzFiNjNiNzc4M2E1MTUzNWQ5ODhmYzdkMzZlMzQxYjRlMjkzM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuQEAgLTM5Miw2ICszOTIsMTA3IEBAIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcXG4gXFx0XFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVxcdTAwM2VscnUsIExSVV9OQU1FUykpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChtbV9tZ2xydV9zY2FuX2ZvbGlvcyxcXG4rXFxuK1xcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcXG4rXFx0XFx0aW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4rXFx0XFx0aW50IG9yZGVyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbitcXHRcXHRpbnQgbHJ1LFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXFxuK1xcdFxcdGludCB0aWVyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXEpLFxcbitcXG4rXFx0VFBfQVJHUyhtZW1jZ19pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLFxcbitcXHRcXHRucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZCh1NjQsIG1lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxcbitcXHRcXHRfX2ZpZWxkKGludCwgb3JkZXIpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc29ydGVkKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXFxuK1xcdFxcdF9fZmllbGQoaW50LCBscnUpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcXG4rXFx0XFx0X19maWVsZChpbnQsIHRpZXIpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWluX3NlcSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCA9IG1lbWNnX2lkO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW9yZGVyID0gb3JkZXI7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3JlcXVlc3RlZCA9IG5yX3JlcXVlc3RlZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2Nhbm5lZCA9IG5yX3NjYW5uZWQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NvcnRlZCA9IG5yX3NvcnRlZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2tpcHBlZCA9IG5yX3NraXBwZWQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3Rha2VuID0gbnJfdGFrZW47XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxydSA9IGxydTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXRpZXIgPSB0aWVyO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtaW5fc2VxID0gbWluX3NlcTtcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwibWVtY2dfaWQ9JWxsdSBjbGFzc3pvbmU9JWQgb3JkZXI9JWQgbnJfcmVxdWVzdGVkPSVsdSBucl9zY2FubmVkPSVsdSBucl9zb3J0ZWQ9JWx1IG5yX3NraXBwZWQ9JWx1IG5yX3Rha2VuPSVsdSBscnU9JXMgbWF4X3NlcT0lbHUgdGllcj0lZCBtaW5fc2VxPSVsdVxcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1lbWNnX2lkLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW9yZGVyLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vucl9yZXF1ZXN0ZWQsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NjYW5uZWQsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NvcnRlZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2tpcHBlZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfdGFrZW4sXFxuK1xcdFxcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cXHUwMDNlbHJ1LCBMUlVfTkFNRVMpLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2V0aWVyLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtaW5fc2VxKVxcbispO1xcbitcXG4rVFJBQ0VfRVZFTlQobW1fbWdscnVfaW5jX21heF9zZXEsXFxuK1xcbitcXHRUUF9QUk9UTyh1NjQgbWVtY2dfaWQsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhbm9uX21pbl9zZXEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9taW5fc2VxLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nICpucl9hbm9uLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nICpucl9maWxlKSxcXG4rXFxuK1xcdFRQX0FSR1MobWVtY2dfaWQsIG1heF9zZXEsIGFub25fbWluX3NlcSwgZmlsZV9taW5fc2VxLCBucl9hbm9uLCBucl9maWxlKSxcXG4rXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQodTY0LCBtZW1jZ19pZClcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGFub25fbWluX3NlcSlcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBmaWxlX21pbl9zZXEpXFxuK1xcdFxcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfYW5vbiwgTUFYX05SX0dFTlMpXFxuK1xcdFxcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfZmlsZSwgTUFYX05SX0dFTlMpXFxuK1xcdCksXFxuK1xcbitcXHRUUF9mYXN0X2Fzc2lnbihcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWQgPSBtZW1jZ19pZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWFub25fbWluX3NlcSA9IGFub25fbWluX3NlcTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZmlsZV9taW5fc2VxID0gZmlsZV9taW5fc2VxO1xcbitcXHRcXHRtZW1jcHkoX19lbnRyeS1cXHUwMDNlbnJfYW5vbiwgbnJfYW5vbiwgc2l6ZW9mKF9fZW50cnktXFx1MDAzZW5yX2Fub24pKTtcXG4rXFx0XFx0bWVtY3B5KF9fZW50cnktXFx1MDAzZW5yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LVxcdTAwM2Vucl9maWxlKSk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1lbWNnX2lkPSVsbHUgbWF4X3NlcT0lbHUgYW5vbl9taW5fc2VxPSVsdSBmaWxlX21pbl9zZXE9JWx1IG5yX2Fub249JXMgbnJfZmlsZT0lc1xcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1lbWNnX2lkLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vhbm9uX21pbl9zZXEsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWZpbGVfbWluX3NlcSxcXG4rXFx0XFx0X19wcmludF9hcnJheShfX2VudHJ5LVxcdTAwM2Vucl9hbm9uLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSxcXG4rXFx0XFx0X19wcmludF9hcnJheShfX2VudHJ5LVxcdTAwM2Vucl9maWxlLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcXG4rKTtcXG4rXFxuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcXG4gXFxuIFxcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZDBlNTliYWY1ZDVjNiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTI4MTMsNiArMjgxMywxOCBAQCBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuIFxcdHJldHVybiBscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxIC0gbHJ1dmVjLVxcdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSArIDE7XFxuIH1cXG4gXFxuKy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcXHUwMDNlPSAwICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fc2VxX25yX3BhZ2VzKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sIGludCBnZW4sIGludCB0eXBlKVxcbit7XFxuK1xcdGludCB6b25lO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbitcXG4rXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIHtcXG4gXFx0aW50IHR5cGU7XFxuQEAgLTQwODgsNiArNDEwMCwyNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0cmFjZV9pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuK3tcXG4rXFx0aW50IHR5cGUsIGdlbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBucltBTk9OX0FORF9GSUxFXVtNQVhfTlJfR0VOU107XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcbitcXHRpZiAoIXRyYWNlX21tX21nbHJ1X2luY19tYXhfc2VxX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKylcXG4rXFx0XFx0Zm9yIChnZW4gPSAwOyBnZW4gXFx1MDAzYyBNQVhfTlJfR0VOUzsgZ2VuKyspXFxuK1xcdFxcdFxcdG5yW3R5cGVdW2dlbl0gPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuK1xcbitcXHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW1pbl9zZXFbTFJVX0dFTl9BTk9OXSxcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXFxuK1xcdFxcdFxcdFxcdCAgIG5yW0xSVV9HRU5fQU5PTl0sIG5yW0xSVV9HRU5fRklMRV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHRib29sIHN1Y2Nlc3M7XFxuQEAgLTQxNDcsNiArNDE3OSw4IEBAIHN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzXFxuIFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW25leHRdLCBqaWZmaWVzKTtcXG4gXFx0LyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqL1xcbiBcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLCBscnVnZW4tXFx1MDAzZW1heF9zZXEgKyAxKTtcXG4rXFxuK1xcdHRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7XFxuIHVubG9jazpcXG4gXFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuQEAgLTQyMzksNyArNDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbiB7XFxuLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuK1xcdGludCBnZW4sIHR5cGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuQEAgLTQyNDgsOCArNDI4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzXFxuIFxcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcXG4gXFx0XFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4gXFx0XFx0XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbi1cXHRcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuLVxcdFxcdFxcdFxcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXHRcXHRcXHR0b3RhbCArPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNDg2NSw2ICs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4gXFx0XFx0XFx0XFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXFxuIFxcdFxcdFxcdFxcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcXG4rXFx0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXFxuK1xcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcbitcXHRcXHRcXHRcXHQgICBzY2FubmVkLCBzb3J0ZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbitcXHRcXHRcXHRcXHQgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTixcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLCB0aWVyLFxcbitcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXG4gXFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG5AQCAtNTczOCwxOSArNTc3NywxNiBAQCBzdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRcXHRzZXEgPSAwO1xcbiBcXG4gXFx0Zm9yICg7IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbi1cXHRcXHRpbnQgdHlwZSwgem9uZTtcXG4rXFx0XFx0aW50IHR5cGU7XFxuIFxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4udGltZXN0YW1wc1tnZW5dKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlMTBsdSAlMTB1XFxcIiwgc2VxLCBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBiaXJ0aCkpO1xcbiBcXG4gXFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuIFxcdFxcdFxcdGNoYXIgbWFyayA9IGZ1bGwgXFx1MDAyNlxcdTAwMjYgc2VxIFxcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICd4JyA6ICcgJztcXG4gXFxuLVxcdFxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4tXFx0XFx0XFx0XFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFxuIFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlMTBsdSVjXFxcIiwgc2l6ZSwgbWFyayk7XFxuIFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjgwODA2MDQ0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjA1ODg3ODU1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNvbGVseSBpbnRyb2R1Y2VzIHR3byB0cmFjZXBvaW50cyAobW1fbWdscnVfc2Nhbl9mb2xpb3MgYW5kIG1tX21nbHJ1X2luY19tYXhfc2VxKSBpbiB0aGUgbXVsdGktZ2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIHZtc2NhbiBjb2RlIGFuZCBleHRyYWN0cyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiAobHJ1X2dlbl9zZXFfbnJfcGFnZXMpIHRvIGNhbGN1bGF0ZSBnZW5lcmF0aW9uIHBhZ2UgY291bnRzLiBJdCBkb2VzIG5vdCBtb2RpZnkga2VybmVsIGNvbnRyb2wgZmxvdywgYWxnb3JpdGhtcywgYXNzZXJ0aW9ucywgb3IgZGF0YSBzdHJ1Y3R1cmVzLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzODMxYjYzYjc3ODNhNTE1MzVkOTg4ZmM3ZDM2ZTM0MWI0ZTI5MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbmluZGV4IDhhODcyOTkwYjRiZWUuLjljZjNmNDU2NGFmYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbkBAIC0zOTIsNiArMzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsXG4gXHRcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cdTAwM2VscnUsIExSVV9OQU1FUykpXG4gKTtcbiBcbitUUkFDRV9FVkVOVChtbV9tZ2xydV9zY2FuX2ZvbGlvcyxcbitcbitcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcbitcdFx0aW50IGhpZ2hlc3Rfem9uZWlkeCxcbitcdFx0aW50IG9yZGVyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuK1x0XHRpbnQgbHJ1LFxuK1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdGludCB0aWVyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG1pbl9zZXEpLFxuK1xuK1x0VFBfQVJHUyhtZW1jZ19pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLFxuK1x0XHRucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZCh1NjQsIG1lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxuK1x0XHRfX2ZpZWxkKGludCwgb3JkZXIpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc29ydGVkKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXG4rXHRcdF9fZmllbGQoaW50LCBscnUpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcbitcdFx0X19maWVsZChpbnQsIHRpZXIpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWluX3NlcSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCA9IG1lbWNnX2lkO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbitcdFx0X19lbnRyeS1cdTAwM2VvcmRlciA9IG9yZGVyO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX3JlcXVlc3RlZCA9IG5yX3JlcXVlc3RlZDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkID0gbnJfc2Nhbm5lZDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQgPSBucl9zb3J0ZWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2tpcHBlZCA9IG5yX3NraXBwZWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbnJfdGFrZW4gPSBucl90YWtlbjtcbitcdFx0X19lbnRyeS1cdTAwM2VscnUgPSBscnU7XG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XG4rXHRcdF9fZW50cnktXHUwMDNldGllciA9IHRpZXI7XG4rXHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSA9IG1pbl9zZXE7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibWVtY2dfaWQ9JWxsdSBjbGFzc3pvbmU9JWQgb3JkZXI9JWQgbnJfcmVxdWVzdGVkPSVsdSBucl9zY2FubmVkPSVsdSBucl9zb3J0ZWQ9JWx1IG5yX3NraXBwZWQ9JWx1IG5yX3Rha2VuPSVsdSBscnU9JXMgbWF4X3NlcT0lbHUgdGllcj0lZCBtaW5fc2VxPSVsdVwiLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcbitcdFx0X19lbnRyeS1cdTAwM2VvcmRlcixcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9yZXF1ZXN0ZWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2Nhbm5lZCxcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2tpcHBlZCxcbitcdFx0X19lbnRyeS1cdTAwM2Vucl90YWtlbixcbitcdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZWxydSwgTFJVX05BTUVTKSxcbitcdFx0X19lbnRyeS1cdTAwM2VtYXhfc2VxLFxuK1x0XHRfX2VudHJ5LVx1MDAzZXRpZXIsXG4rXHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSlcbispO1xuK1xuK1RSQUNFX0VWRU5UKG1tX21nbHJ1X2luY19tYXhfc2VxLFxuK1xuK1x0VFBfUFJPVE8odTY0IG1lbWNnX2lkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYW5vbl9taW5fc2VxLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZpbGVfbWluX3NlcSxcbitcdFx0dW5zaWduZWQgbG9uZyAqbnJfYW5vbixcbitcdFx0dW5zaWduZWQgbG9uZyAqbnJfZmlsZSksXG4rXG4rXHRUUF9BUkdTKG1lbWNnX2lkLCBtYXhfc2VxLCBhbm9uX21pbl9zZXEsIGZpbGVfbWluX3NlcSwgbnJfYW5vbiwgbnJfZmlsZSksXG4rXG4rXHRUUF9TVFJVQ1RfX2VudHJ5KFxuK1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBhbm9uX21pbl9zZXEpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZmlsZV9taW5fc2VxKVxuK1x0XHRfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2Fub24sIE1BWF9OUl9HRU5TKVxuK1x0XHRfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2ZpbGUsIE1BWF9OUl9HRU5TKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XG4rXHRcdF9fZW50cnktXHUwMDNlYW5vbl9taW5fc2VxID0gYW5vbl9taW5fc2VxO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTtcbitcdFx0bWVtY3B5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgbnJfYW5vbiwgc2l6ZW9mKF9fZW50cnktXHUwMDNlbnJfYW5vbikpO1xuK1x0XHRtZW1jcHkoX19lbnRyeS1cdTAwM2Vucl9maWxlLCBucl9maWxlLCBzaXplb2YoX19lbnRyeS1cdTAwM2Vucl9maWxlKSk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibWVtY2dfaWQ9JWxsdSBtYXhfc2VxPSVsdSBhbm9uX21pbl9zZXE9JWx1IGZpbGVfbWluX3NlcT0lbHUgbnJfYW5vbj0lcyBucl9maWxlPSVzXCIsXG4rXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbitcdFx0X19lbnRyeS1cdTAwM2Vhbm9uX21pbl9zZXEsXG4rXHRcdF9fZW50cnktXHUwMDNlZmlsZV9taW5fc2VxLFxuK1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksXG4rXHRcdF9fcHJpbnRfYXJyYXkoX19lbnRyeS1cdTAwM2Vucl9maWxlLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbispO1xuK1xuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmQwZTU5YmFmNWQ1YzYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0yODEzLDYgKzI4MTMsMTggQEAgc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0cmV0dXJuIGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSAtIGxydXZlYy1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSArIDE7XG4gfVxuIFxuKy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcdTAwM2U9IDAgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX3NlcV9ucl9wYWdlcyhzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuLCBpbnQgZ2VuLCBpbnQgdHlwZSlcbit7XG4rXHRpbnQgem9uZTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXG4rXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbitcdFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0aW50IHR5cGU7XG5AQCAtNDA4OCw2ICs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCB0cmFjZV9pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4re1xuK1x0aW50IHR5cGUsIGdlbjtcbitcdHVuc2lnbmVkIGxvbmcgbnJbQU5PTl9BTkRfRklMRV1bTUFYX05SX0dFTlNdO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXG4rXHRpZiAoIXRyYWNlX21tX21nbHJ1X2luY19tYXhfc2VxX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxuK1x0XHRmb3IgKGdlbiA9IDA7IGdlbiBcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKVxuK1x0XHRcdG5yW3R5cGVdW2dlbl0gPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XG4rXG4rXHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtYXhfc2VxLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbTFJVX0dFTl9BTk9OXSxcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXG4rXHRcdFx0XHQgICBucltMUlVfR0VOX0FOT05dLCBucltMUlVfR0VOX0ZJTEVdKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0Ym9vbCBzdWNjZXNzO1xuQEAgLTQxNDcsNiArNDE3OSw4IEBAIHN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzXG4gXHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW25leHRdLCBqaWZmaWVzKTtcbiBcdC8qIG1ha2Ugc3VyZSBwcmVjZWRpbmcgbW9kaWZpY2F0aW9ucyBhcHBlYXIgKi9cbiBcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmxydWdlbi1cdTAwM2VtYXhfc2VxLCBscnVnZW4tXHUwMDNlbWF4X3NlcSArIDEpO1xuK1xuK1x0dHJhY2VfaW5jX21heF9zZXEobHJ1dmVjKTtcbiB1bmxvY2s6XG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQyMzksNyArNDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IGdlbiwgdHlwZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG5AQCAtNDI0OCw4ICs0MjgyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3NcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbiBcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuIFx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4rXHRcdFx0dG90YWwgKz0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNDg2NSw2ICs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4rXHR0cmFjZV9tbV9tZ2xydV9zY2FuX2ZvbGlvcyhtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbitcdFx0XHRcdCAgIHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbitcdFx0XHRcdCAgIHNjYW5uZWQsIHNvcnRlZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4rXHRcdFx0XHQgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTixcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtYXhfc2VxLCB0aWVyLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG5AQCAtNTczOCwxOSArNTc3NywxNiBAQCBzdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0XHRzZXEgPSAwO1xuIFxuIFx0Zm9yICg7IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4tXHRcdGludCB0eXBlLCB6b25lO1xuK1x0XHRpbnQgdHlwZTtcbiBcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4gXG4gXHRcdHNlcV9wcmludGYobSwgXCIgJTEwbHUgJTEwdVwiLCBzZXEsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJpcnRoKSk7XG4gXG4gXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHRcdGNoYXIgbWFyayA9IGZ1bGwgXHUwMDI2XHUwMDI2IHNlcSBcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICd4JyA6ICcgJztcbiBcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwiICUxMGx1JWNcIiwgc2l6ZSwgbWFyayk7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjgwODA2MjQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzQyNDExMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGluY2x1c2lvbiBpbiBvdXIgZnV6emluZyBlZmZvcnRzIHdpdGggc3l6a2FsbGVyLiBGaXJzdCwgbGV0J3MgYW5hbHl6ZSB0aGUgZGlmZi4gV2Ugc2VlIGFkZGl0aW9uczogdHdvIG5ldyB0cmFjZXBvaW50cywgYG1tX21nbHJ1X3NjYW5fZm9saW9zYCBhbmQgYG1tX21nbHJ1X2luY19tYXhfc2VxYCwgaW4gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYC4gQWxzbywgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgbHJ1X2dlbl9zZXFfbnJfcGFnZXNgLCBhbmQgdXNlcyBvZiB0aGVzZSBuZXcgYWRkaXRpb25zIGluIGBtbS92bXNjYW4uY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEFjY29yZGluZyB0byBvdXIgY3JpdGVyaWEsIHdlIGRvbid0IHdhbnQgdG8gZnV6eiBwYXRjaGVzIHRoYXQgYXJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMuIEFuZCBtb3JlIHNwZWNpZmljYWxseTogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoYXQgaXMgdGhlIGtleSB0ZXN0IGhlcmUuXG5cbkluaXRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIG1pZ2h0IGZhbGwgaW50byB0aGF0IGNhdGVnb3J5OiBlc3NlbnRpYWxseSBuZXcgdHJhY2Vwb2ludHMsIGEgYml0IG9mIHJlZmFjdG9yaW5nLCBhbmQgYWRkaW5nIGEgMy1saW5lIHN1bSBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSBtb3N0bHkgYWJvdXQgb2JzZXJ2YWJpbGl0eS4gSG93ZXZlciwgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gRG9lcyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGxydV9nZW5fc2VxX25yX3BhZ2VzYCwgYWN0dWFsbHkgaW1wYWN0IGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/XG5cbkxvb2tpbmcgY2xvc2VseSBhdCBgbHJ1dmVjX2V2aWN0YWJsZV9zaXplYCwgYGxydV9nZW5fc2VxX3Nob3dgLCBhbmQgYHRyYWNlX2luY19tYXhfc2VxYCBpdCdzIGp1c3QgYSBkaXJlY3QsIG9uZS10by1vbmUgcmVwbGFjZW1lbnQgb2YgdGhlIGZvciBsb29wLiBUaGUgaGVscGVyIGZ1bmN0aW9uIHN1bXMgYXJyYXkgZWxlbWVudHMsIG5vdGhpbmcgbW9yZSwgbm90aGluZyBsZXNzLiBJdCdzIGEgc3RyYWlnaHQgY29kZSByZWZhY3RvcmluZyB0byBEUlkgdGhlIGNvZGUuIEFuZCB0aGUgdHJhY2Vwb2ludHMgdGhlbXNlbHZlcyBvbmx5IGFkZCBpbnN0cnVtZW50YXRpb24sIG5vdCBhbHRlciBsb2dpYy5cblxuSW4gYHNjYW5fZm9saW9zYCwgdGhlIHRyYWNlcG9pbnQgc2ltcGx5IGxvZ3MgaW5mb3JtYXRpb24gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHByb2dyYW0ncyBwYXRoLlxuXG5TbywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY29kZSBjaGFuZ2VzIGFwcGVhciBzdHJpY3RseSBjb3NtZXRpYyBpbiB0ZXJtcyBvZiBhbHRlcmluZyBkYXRhIG9yIGNvbnRyb2wgZmxvdy4gTGV0J3MgbWFrZSBzdXJlLCBiZWZvcmUgbWFraW5nIGEgZmluYWwgZGVjaXNpb24uIEkgc2hvdWxkIHByb2JhYmx5IHJ1biBgZ2l0IGRpZmZgIG9uZSBtb3JlIHRpbWUgb3IgdmVyaWZ5IHdpdGggb3RoZXIgdG9vbHMgZm9yIGEgcXVpY2sgZG91YmxlIGNoZWNrLCBqdXN0IGluIGNhc2UuXG5cbkluIGNvbmNsdXNpb24sIGdpdmVuIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyBsaW1pdGVkIHRvIHRyYWNlcG9pbnQgYWRkaXRpb25zIGFuZCBhIHRyaXZpYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBjb2RlIGRlZHVwbGljYXRpb24gdGhhdCBkb2Vzbid0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKm5vdCogd29ydGggZnV6emluZyBhdCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MTguNTUwNDc2MTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkzNTI1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fbWdscnVfc2Nhbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzUwPVRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTM5NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDozOTU6VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMzk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkwMC1cXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxubW0vdm1zY2FuLmM6NDkwMTpcXHR0cmFjZV9tbV9tZ2xydV9zY2FuX2ZvbGlvcyhtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcXG5tbS92bXNjYW4uYy00OTAyLVxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjoyMC4wOTk4MzU3MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDI5Njk4NzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBnaXQgaGlzdG9yeSBhbmQgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gbm90aGluZyBlbHNlIHNuZWFrZWQgaW4uIEknbGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgY29tbWl0IElEIGlzIGAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzYC5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgdGhlIGJpdCBhYm91dDogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoYXQncyB0aGUga2V5IGhlcmUsIGFuZCBpZiB0aGF0IGFwcGxpZXMsIHRoZW4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkRvZXMgdGhpcyBwYXRjaCAqYWN0dWFsbHkqIGRvIGFueXRoaW5nIG90aGVyIHRoYW4gaW5qZWN0IHRyYWNlcG9pbnRzIGFuZCByZWZhY3RvciB0aGlzIGhlbHBlcj8gTGV0J3Mgc2VlLi4uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgdHdvIHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBhbG9uZyB3aXRoIHRoaXMgbGl0dGxlIHN0YXRpYyBoZWxwZXIgYGxydV9nZW5fc2VxX25yX3BhZ2VzYC4gSXQgc2VlbXMgdGhpcyBoZWxwZXIgaXMgKm9ubHkqIHVzZWQgYnkgdGhlIHRyYWNlcG9pbnRzLCBhbmQgaXQncyBiYXNpY2FsbHkgdGhlIHNhbWUgbG9naWMgdGhhdCB3YXMgYWxyZWFkeSBvcGVuLWNvZGVkIGluIGEgY291cGxlIG9mIHBsYWNlcy4gTm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYW55IGNyaXRpY2FsIGludmFyaWFudHMgYXJlIGhhcHBlbmluZy5cblxuUmlnaHQsIHNvIHVuZGVyIFNlY3Rpb24gMiBvZiB0aGUgZ3VpZGVsaW5lcywgdGhhdCBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmdcIiBiaXQgZGVmaW5pdGVseSBhcHBsaWVzIGhlcmUuIFRoZSBwYXRjaCBqdXN0IGFkZHMgdGhlc2UgdHJhY2Vwb2ludHMsIGFuZCBleHRyYWN0cyB0aGlzIGhlbHBlciBmdW5jdGlvbi4gTm90aGluZyBtb3JlLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLlxuXG5MZXQncyBzdW1tYXJpemUgYW5kIGNvbmZpcm0uXG4tICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4tICAgYEZvY3VzU3ltYm9sczogW11gXG4tICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuLSAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uYFxuXG5Pa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwMCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MzAuMzk2ODI0ODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjMwLjM5Njg0OTEzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownlk4c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:45:34 +0000 UTC FinishedAt: 2026-09-11 08:06:31 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTM5Miw2ICYjNDM7MzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsXG4gXHRcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cdTAwM2VscnUsIExSVV9OQU1FUykpXG4gKTtcbiBcbiYjNDM7VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcbiYjNDM7XHRcdGludCBoaWdoZXN0X3pvbmVpZHgsXG4mIzQzO1x0XHRpbnQgb3JkZXIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfc29ydGVkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBucl90YWtlbixcbiYjNDM7XHRcdGludCBscnUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4mIzQzO1x0XHRpbnQgdGllcixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbWluX3NlcSksXG4mIzQzO1xuJiM0MztcdFRQX0FSR1MobWVtY2dfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsIG5yX3JlcXVlc3RlZCwgbnJfc2Nhbm5lZCxcbiYjNDM7XHRcdG5yX3NvcnRlZCwgbnJfc2tpcHBlZCwgbnJfdGFrZW4sIGxydSwgbWF4X3NlcSwgdGllciwgbWluX3NlcSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkoXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxuJiM0MztcdFx0X19maWVsZChpbnQsIG9yZGVyKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9yZXF1ZXN0ZWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NvcnRlZClcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc2tpcHBlZClcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgbHJ1KVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKVxuJiM0MztcdFx0X19maWVsZChpbnQsIHRpZXIpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG1pbl9zZXEpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfcmVxdWVzdGVkID0gbnJfcmVxdWVzdGVkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkID0gbnJfc2Nhbm5lZDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfc29ydGVkID0gbnJfc29ydGVkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9za2lwcGVkID0gbnJfc2tpcHBlZDtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfdGFrZW4gPSBucl90YWtlbjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbHJ1ID0gbHJ1O1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXhfc2VxID0gbWF4X3NlcTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNldGllciA9IHRpZXI7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1pbl9zZXEgPSBtaW5fc2VxO1xuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX3ByaW50ayhcJiMzNDttZW1jZ19pZD0lbGx1IGNsYXNzem9uZT0lZCBvcmRlcj0lZCBucl9yZXF1ZXN0ZWQ9JWx1IG5yX3NjYW5uZWQ9JWx1IG5yX3NvcnRlZD0lbHUgbnJfc2tpcHBlZD0lbHUgbnJfdGFrZW49JWx1IGxydT0lcyBtYXhfc2VxPSVsdSB0aWVyPSVkIG1pbl9zZXE9JWx1XCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGlnaGVzdF96b25laWR4LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VvcmRlcixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbnJfcmVxdWVzdGVkLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5yX3NraXBwZWQsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5yX3Rha2VuLFxuJiM0MztcdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZWxydSwgTFJVX05BTUVTKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNldGllcixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSlcbiYjNDM7KTtcbiYjNDM7XG4mIzQzO1RSQUNFX0VWRU5UKG1tX21nbHJ1X2luY19tYXhfc2VxLFxuJiM0MztcbiYjNDM7XHRUUF9QUk9UTyh1NjQgbWVtY2dfaWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFub25fbWluX3NlcSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmlsZV9taW5fc2VxLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyAqbnJfYW5vbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgKm5yX2ZpbGUpLFxuJiM0MztcbiYjNDM7XHRUUF9BUkdTKG1lbWNnX2lkLCBtYXhfc2VxLCBhbm9uX21pbl9zZXEsIGZpbGVfbWluX3NlcSwgbnJfYW5vbiwgbnJfZmlsZSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkoXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG1heF9zZXEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGFub25fbWluX3NlcSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZmlsZV9taW5fc2VxKVxuJiM0MztcdFx0X19hcnJheSh1bnNpZ25lZCBsb25nLCBucl9hbm9uLCBNQVhfTlJfR0VOUylcbiYjNDM7XHRcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfZmlsZSwgTUFYX05SX0dFTlMpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1heF9zZXEgPSBtYXhfc2VxO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vhbm9uX21pbl9zZXEgPSBhbm9uX21pbl9zZXE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZW5yX2Fub24sIG5yX2Fub24sIHNpemVvZihfX2VudHJ5LVx1MDAzZW5yX2Fub24pKTtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZW5yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LVx1MDAzZW5yX2ZpbGUpKTtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7bWVtY2dfaWQ9JWxsdSBtYXhfc2VxPSVsdSBhbm9uX21pbl9zZXE9JWx1IGZpbGVfbWluX3NlcT0lbHUgbnJfYW5vbj0lcyBucl9maWxlPSVzXCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlYW5vbl9taW5fc2VxLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VmaWxlX21pbl9zZXEsXG4mIzQzO1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksXG4mIzQzO1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfZmlsZSwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmQwZTU5YmFmNWQ1YzYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0yODEzLDYgJiM0MzsyODEzLDE4IEBAIHN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdHJldHVybiBscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEgLSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0gJiM0MzsgMTtcbiB9XG4gXG4mIzQzOy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcdTAwM2U9IDAgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9zZXFfbnJfcGFnZXMoc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiwgaW50IGdlbiwgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgem9uZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRpbnQgdHlwZTtcbkBAIC00MDg4LDYgJiM0Mzs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHJhY2VfaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHR5cGUsIGdlbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9HRU5TXTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcV9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxuJiM0MztcdFx0Zm9yIChnZW4gPSAwOyBnZW4gXHUwMDNjIE1BWF9OUl9HRU5TOyBnZW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuclt0eXBlXVtnZW5dID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuJiM0MztcbiYjNDM7XHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbiYjNDM7XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlbWF4X3NlcSxcbiYjNDM7XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlbWluX3NlcVtMUlVfR0VOX0FOT05dLFxuJiM0MztcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXG4mIzQzO1x0XHRcdFx0ICAgbnJbTFJVX0dFTl9BTk9OXSwgbnJbTFJVX0dFTl9GSUxFXSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0Ym9vbCBzdWNjZXNzO1xuQEAgLTQxNDcsNiAmIzQzOzQxNzksOCBAQCBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzc1xuIFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNldGltZXN0YW1wc1tuZXh0XSwgamlmZmllcyk7XG4gXHQvKiBtYWtlIHN1cmUgcHJlY2VkaW5nIG1vZGlmaWNhdGlvbnMgYXBwZWFyICovXG4gXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZscnVnZW4tXHUwMDNlbWF4X3NlcSwgbHJ1Z2VuLVx1MDAzZW1heF9zZXEgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdHRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7XG4gdW5sb2NrOlxuIFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00MjM5LDcgJiM0Mzs0MjczLDcgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4mIzQzO1x0aW50IGdlbiwgdHlwZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG5AQCAtNDI0OCw4ICYjNDM7NDI4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4gXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuIFx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLVx0XHRcdFx0dG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4mIzQzO1x0XHRcdHRvdGFsICYjNDM7PSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC00ODY1LDYgJiM0Mzs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4mIzQzO1x0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXG4mIzQzO1x0XHRcdFx0ICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiM0MztcdFx0XHRcdCAgIHNjYW5uZWQsIHNvcnRlZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4mIzQzO1x0XHRcdFx0ICAgdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04sXG4mIzQzO1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1heF9zZXEsIHRpZXIsXG4mIzQzO1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG5AQCAtNTczOCwxOSAmIzQzOzU3NzcsMTYgQEAgc3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0c2VxID0gMDtcbiBcbiBcdGZvciAoOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG4tXHRcdGludCB0eXBlLCB6b25lO1xuJiM0MztcdFx0aW50IHR5cGU7XG4gXHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgYmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuIFxuIFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlMTBsdSAlMTB1XCYjMzQ7LCBzZXEsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJpcnRoKSk7XG4gXG4gXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHRcdGNoYXIgbWFyayA9IGZ1bGwgXHUwMDI2XHUwMDI2IHNlcSBcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICYjMzk7eCYjMzk7IDogJiMzOTsgJiMzOTs7XG4gXG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJTEwbHUlY1wmIzM0Oywgc2l6ZSwgbWFyayk7XG4gXHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzODMxYjYzYjc3ODNhNTE1MzVkOTg4ZmM3ZDM2ZTM0MWI0ZTI5MzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKQEAgLTM5Miw2ICYjNDM7MzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsCiAJCV9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0mZ3Q7bHJ1LCBMUlVfTkFNRVMpKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKG1tX21nbHJ1X3NjYW5fZm9saW9zLAomIzQzOwomIzQzOwlUUF9QUk9UTyh1NjQgbWVtY2dfaWQsCiYjNDM7CQlpbnQgaGlnaGVzdF96b25laWR4LAomIzQzOwkJaW50IG9yZGVyLAomIzQzOwkJdW5zaWduZWQgbG9uZyBucl9yZXF1ZXN0ZWQsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfc2tpcHBlZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sCiYjNDM7CQlpbnQgbHJ1LAomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJaW50IHRpZXIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG1pbl9zZXEpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1lbWNnX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLCBucl9yZXF1ZXN0ZWQsIG5yX3NjYW5uZWQsCiYjNDM7CQlucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1NjQsIG1lbWNnX2lkKQomIzQzOwkJX19maWVsZChpbnQsIGhpZ2hlc3Rfem9uZWlkeCkKJiM0MzsJCV9fZmllbGQoaW50LCBvcmRlcikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9zY2FubmVkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBucl9zb3J0ZWQpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3Rha2VuKQomIzQzOwkJX19maWVsZChpbnQsIGxydSkKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSkKJiM0MzsJCV9fZmllbGQoaW50LCB0aWVyKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtaW5fc2VxKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkID0gbWVtY2dfaWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtoaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7CiYjNDM7CQlfX2VudHJ5LSZndDtvcmRlciA9IG9yZGVyOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfcmVxdWVzdGVkID0gbnJfcmVxdWVzdGVkOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc2Nhbm5lZCA9IG5yX3NjYW5uZWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9zb3J0ZWQgPSBucl9zb3J0ZWQ7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9za2lwcGVkID0gbnJfc2tpcHBlZDsKJiM0MzsJCV9fZW50cnktJmd0O25yX3Rha2VuID0gbnJfdGFrZW47CiYjNDM7CQlfX2VudHJ5LSZndDtscnUgPSBscnU7CiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxID0gbWF4X3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O3RpZXIgPSB0aWVyOwomIzQzOwkJX19lbnRyeS0mZ3Q7bWluX3NlcSA9IG1pbl9zZXE7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21lbWNnX2lkPSVsbHUgY2xhc3N6b25lPSVkIG9yZGVyPSVkIG5yX3JlcXVlc3RlZD0lbHUgbnJfc2Nhbm5lZD0lbHUgbnJfc29ydGVkPSVsdSBucl9za2lwcGVkPSVsdSBucl90YWtlbj0lbHUgbHJ1PSVzIG1heF9zZXE9JWx1IHRpZXI9JWQgbWluX3NlcT0lbHUmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkLAomIzQzOwkJX19lbnRyeS0mZ3Q7aGlnaGVzdF96b25laWR4LAomIzQzOwkJX19lbnRyeS0mZ3Q7b3JkZXIsCiYjNDM7CQlfX2VudHJ5LSZndDtucl9yZXF1ZXN0ZWQsCiYjNDM7CQlfX2VudHJ5LSZndDtucl9zY2FubmVkLAomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc29ydGVkLAomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfc2tpcHBlZCwKJiM0MzsJCV9fZW50cnktJmd0O25yX3Rha2VuLAomIzQzOwkJX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LSZndDtscnUsIExSVV9OQU1FUyksCiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7dGllciwKJiM0MzsJCV9fZW50cnktJmd0O21pbl9zZXEpCiYjNDM7KTsKJiM0MzsKJiM0MztUUkFDRV9FVkVOVChtbV9tZ2xydV9pbmNfbWF4X3NlcSwKJiM0MzsKJiM0MzsJVFBfUFJPVE8odTY0IG1lbWNnX2lkLAomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXhfc2VxLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhbm9uX21pbl9zZXEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGZpbGVfbWluX3NlcSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgKm5yX2Fub24sCiYjNDM7CQl1bnNpZ25lZCBsb25nICpucl9maWxlKSwKJiM0MzsKJiM0MzsJVFBfQVJHUyhtZW1jZ19pZCwgbWF4X3NlcSwgYW5vbl9taW5fc2VxLCBmaWxlX21pbl9zZXEsIG5yX2Fub24sIG5yX2ZpbGUpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1NjQsIG1lbWNnX2lkKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBhbm9uX21pbl9zZXEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGZpbGVfbWluX3NlcSkKJiM0MzsJCV9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfYW5vbiwgTUFYX05SX0dFTlMpCiYjNDM7CQlfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2ZpbGUsIE1BWF9OUl9HRU5TKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O21lbWNnX2lkID0gbWVtY2dfaWQ7CiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxID0gbWF4X3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O2Fub25fbWluX3NlcSA9IGFub25fbWluX3NlcTsKJiM0MzsJCV9fZW50cnktJmd0O2ZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTsKJiM0MzsJCW1lbWNweShfX2VudHJ5LSZndDtucl9hbm9uLCBucl9hbm9uLCBzaXplb2YoX19lbnRyeS0mZ3Q7bnJfYW5vbikpOwomIzQzOwkJbWVtY3B5KF9fZW50cnktJmd0O25yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LSZndDtucl9maWxlKSk7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21lbWNnX2lkPSVsbHUgbWF4X3NlcT0lbHUgYW5vbl9taW5fc2VxPSVsdSBmaWxlX21pbl9zZXE9JWx1IG5yX2Fub249JXMgbnJfZmlsZT0lcyYjMzQ7LAomIzQzOwkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQsCiYjNDM7CQlfX2VudHJ5LSZndDttYXhfc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7YW5vbl9taW5fc2VxLAomIzQzOwkJX19lbnRyeS0mZ3Q7ZmlsZV9taW5fc2VxLAomIzQzOwkJX19wcmludF9hcnJheShfX2VudHJ5LSZndDtucl9hbm9uLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKJiM0MzsJCV9fcHJpbnRfYXJyYXkoX19lbnRyeS0mZ3Q7bnJfZmlsZSwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7KTsKJiM0MzsKIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbywKIAogCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA0MGQzZjFiNDhhNzRjLi5kMGU1OWJhZjVkNWM2IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMjgxMyw2ICYjNDM7MjgxMywxOCBAQCBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJcmV0dXJuIGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEgLSBscnV2ZWMtJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdICYjNDM7IDE7CiB9CiAKJiM0MzsvKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIGEgZ2VuZXJhdGlvbiwgc3VtbWVkIG92ZXIgem9uZXMgYW5kIGNsYW1wZWQgdG8gJmd0Oz0gMCAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fc2VxX25yX3BhZ2VzKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sIGludCBnZW4sIGludCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IHpvbmU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQomIzQzOwkJc2l6ZSAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJaW50IHR5cGU7CkBAIC00MDg4LDYgJiM0Mzs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRyYWNlX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0Mzt7CiYjNDM7CWludCB0eXBlLCBnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJbQU5PTl9BTkRfRklMRV1bTUFYX05SX0dFTlNdOwomIzQzOwlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsKJiM0MzsJaWYgKCF0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcV9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOykKJiM0MzsJCWZvciAoZ2VuID0gMDsgZ2VuICZsdDsgTUFYX05SX0dFTlM7IGdlbiYjNDM7JiM0MzspCiYjNDM7CQkJbnJbdHlwZV1bZ2VuXSA9IGxydV9nZW5fc2VxX25yX3BhZ2VzKGxydWdlbiwgZ2VuLCB0eXBlKTsKJiM0MzsKJiM0MzsJdHJhY2VfbW1fbWdscnVfaW5jX21heF9zZXEobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksCiYjNDM7CQkJCSAgIGxydWdlbi0mZ3Q7bWF4X3NlcSwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDttaW5fc2VxW0xSVV9HRU5fQU5PTl0sCiYjNDM7CQkJCSAgIGxydWdlbi0mZ3Q7bWluX3NlcVtMUlVfR0VOX0ZJTEVdLAomIzQzOwkJCQkgICBucltMUlVfR0VOX0FOT05dLCBucltMUlVfR0VOX0ZJTEVdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlib29sIHN1Y2Nlc3M7CkBAIC00MTQ3LDYgJiM0Mzs0MTc5LDggQEAgc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MKIAlXUklURV9PTkNFKGxydWdlbi0mZ3Q7dGltZXN0YW1wc1tuZXh0XSwgamlmZmllcyk7CiAJLyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLwogCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bHJ1Z2VuLSZndDttYXhfc2VxLCBscnVnZW4tJmd0O21heF9zZXEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CXRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7CiB1bmxvY2s6CiAJbHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTsKIApAQCAtNDIzOSw3ICYjNDM7NDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiB7Ci0JaW50IGdlbiwgdHlwZSwgem9uZTsKJiM0MzsJaW50IGdlbiwgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCURFRklORV9NQVhfU0VRKGxydXZlYyk7CkBAIC00MjQ4LDggJiM0Mzs0MjgyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MKIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7CiAJCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKIAkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpOwogCQl9CiAJfQogCkBAIC00ODY1LDYgJiM0Mzs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLSZndDtyZWNsYWltX2lkeCwgc2MtJmd0O29yZGVyLCBucl90b19zY2FuLAogCQkJCXNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLAogCQkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKJiM0MzsJdHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksCiYjNDM7CQkJCSAgIHNjLSZndDtyZWNsYWltX2lkeCwgc2MtJmd0O29yZGVyLCBucl90b19zY2FuLAomIzQzOwkJCQkgICBzY2FubmVkLCBzb3J0ZWQsIHNraXBwZWQsIGlzb2xhdGVkLAomIzQzOwkJCQkgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTiwKJiM0MzsJCQkJICAgbHJ1Z2VuLSZndDttYXhfc2VxLCB0aWVyLAomIzQzOwkJCQkgICBscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCiAJKmlzb2xhdGVkcCA9IGlzb2xhdGVkOwogCXJldHVybiBzY2FubmVkOwpAQCAtNTczOCwxOSAmIzQzOzU3NzcsMTYgQEAgc3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJc2VxID0gMDsKIAogCWZvciAoOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewotCQlpbnQgdHlwZSwgem9uZTsKJiM0MzsJCWludCB0eXBlOwogCQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCQl1bnNpZ25lZCBsb25nIGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7CiAKIAkJc2VxX3ByaW50ZihtLCAmIzM0OyAlMTBsdSAlMTB1JiMzNDssIHNlcSwgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gYmlydGgpKTsKIAogCQlmb3IgKHR5cGUgPSAwOyB0eXBlICZsdDsgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspIHsKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpOwogCQkJY2hhciBtYXJrID0gZnVsbCAmYW1wOyZhbXA7IHNlcSAmbHQ7IG1pbl9zZXFbdHlwZV0gPyAmIzM5O3gmIzM5OyA6ICYjMzk7ICYjMzk7OwogCi0JCQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKLQkJCQlzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQogCQkJc2VxX3ByaW50ZihtLCAmIzM0OyAlMTBsdSVjJiMzNDssIHNpemUsIG1hcmspOwogCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpbmNsdXNpb24gaW4gb3VyIGZ1enppbmcgZWZmb3J0cyB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCYjMzk7cyBhbmFseXplIHRoZSBkaWZmLiBXZSBzZWUgYWRkaXRpb25zOiB0d28gbmV3IHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBpbiBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLiBBbHNvLCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBscnVfZ2VuX3NlcV9ucl9wYWdlc2AsIGFuZCB1c2VzIG9mIHRoZXNlIG5ldyBhZGRpdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEFjY29yZGluZyB0byBvdXIgY3JpdGVyaWEsIHdlIGRvbiYjMzk7dCB3YW50IHRvIGZ1enogcGF0Y2hlcyB0aGF0IGFyZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLiBBbmQgbW9yZSBzcGVjaWZpY2FsbHk6ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBUaGF0IGlzIHRoZSBrZXkgdGVzdCBoZXJlLgoKSW5pdGlhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgbWlnaHQgZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnk6IGVzc2VudGlhbGx5IG5ldyB0cmFjZXBvaW50cywgYSBiaXQgb2YgcmVmYWN0b3JpbmcsIGFuZCBhZGRpbmcgYSAzLWxpbmUgc3VtIGZ1bmN0aW9uLiBJdCBhcHBlYXJzIHRvIGJlIG1vc3RseSBhYm91dCBvYnNlcnZhYmlsaXR5LiBIb3dldmVyLCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gRG9lcyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGxydV9nZW5fc2VxX25yX3BhZ2VzYCwgYWN0dWFsbHkgaW1wYWN0IGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/CgpMb29raW5nIGNsb3NlbHkgYXQgYGxydXZlY19ldmljdGFibGVfc2l6ZWAsIGBscnVfZ2VuX3NlcV9zaG93YCwgYW5kIGB0cmFjZV9pbmNfbWF4X3NlcWAgaXQmIzM5O3MganVzdCBhIGRpcmVjdCwgb25lLXRvLW9uZSByZXBsYWNlbWVudCBvZiB0aGUgZm9yIGxvb3AuIFRoZSBoZWxwZXIgZnVuY3Rpb24gc3VtcyBhcnJheSBlbGVtZW50cywgbm90aGluZyBtb3JlLCBub3RoaW5nIGxlc3MuIEl0JiMzOTtzIGEgc3RyYWlnaHQgY29kZSByZWZhY3RvcmluZyB0byBEUlkgdGhlIGNvZGUuIEFuZCB0aGUgdHJhY2Vwb2ludHMgdGhlbXNlbHZlcyBvbmx5IGFkZCBpbnN0cnVtZW50YXRpb24sIG5vdCBhbHRlciBsb2dpYy4KCkluIGBzY2FuX2ZvbGlvc2AsIHRoZSB0cmFjZXBvaW50IHNpbXBseSBsb2dzIGluZm9ybWF0aW9uIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwcm9ncmFtJiMzOTtzIHBhdGguCgpTbywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY29kZSBjaGFuZ2VzIGFwcGVhciBzdHJpY3RseSBjb3NtZXRpYyBpbiB0ZXJtcyBvZiBhbHRlcmluZyBkYXRhIG9yIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgYmVmb3JlIG1ha2luZyBhIGZpbmFsIGRlY2lzaW9uLiBJIHNob3VsZCBwcm9iYWJseSBydW4gYGdpdCBkaWZmYCBvbmUgbW9yZSB0aW1lIG9yIHZlcmlmeSB3aXRoIG90aGVyIHRvb2xzIGZvciBhIHF1aWNrIGRvdWJsZSBjaGVjaywganVzdCBpbiBjYXNlLgoKSW4gY29uY2x1c2lvbiwgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHNlZW1zIGxpbWl0ZWQgdG8gdHJhY2Vwb2ludCBhZGRpdGlvbnMgYW5kIGEgdHJpdmlhbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvZGUgZGVkdXBsaWNhdGlvbiB0aGF0IGRvZXNuJiMzOTt0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKm5vdCogd29ydGggZnV6emluZyBhdCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fbWdscnVfc2Nhbl9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzUwPVRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zOTQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDozOTU6VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zOTYtXG4tLVxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MDAtXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG5tbS92bXNjYW4uYzo0OTAxOlx0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXG5tbS92bXNjYW4uYy00OTAyLVx0XHRcdFx0ICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDAKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGdpdCBoaXN0b3J5IGFuZCBkaWZmIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBub3RoaW5nIGVsc2Ugc25lYWtlZCBpbi4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgY29tbWl0IElEIGlzIGAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzYC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCB0aGUgYml0IGFib3V0OiAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5IGhlcmUsIGFuZCBpZiB0aGF0IGFwcGxpZXMsIHRoZW4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpEb2VzIHRoaXMgcGF0Y2ggKmFjdHVhbGx5KiBkbyBhbnl0aGluZyBvdGhlciB0aGFuIGluamVjdCB0cmFjZXBvaW50cyBhbmQgcmVmYWN0b3IgdGhpcyBoZWxwZXI/IExldCYjMzk7cyBzZWUuLi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgdHdvIHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBhbG9uZyB3aXRoIHRoaXMgbGl0dGxlIHN0YXRpYyBoZWxwZXIgYGxydV9nZW5fc2VxX25yX3BhZ2VzYC4gSXQgc2VlbXMgdGhpcyBoZWxwZXIgaXMgKm9ubHkqIHVzZWQgYnkgdGhlIHRyYWNlcG9pbnRzLCBhbmQgaXQmIzM5O3MgYmFzaWNhbGx5IHRoZSBzYW1lIGxvZ2ljIHRoYXQgd2FzIGFscmVhZHkgb3Blbi1jb2RlZCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMuIE5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFueSBjcml0aWNhbCBpbnZhcmlhbnRzIGFyZSBoYXBwZW5pbmcuCgpSaWdodCwgc28gdW5kZXIgU2VjdGlvbiAyIG9mIHRoZSBndWlkZWxpbmVzLCB0aGF0ICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7IGJpdCBkZWZpbml0ZWx5IGFwcGxpZXMgaGVyZS4gVGhlIHBhdGNoIGp1c3QgYWRkcyB0aGVzZSB0cmFjZXBvaW50cywgYW5kIGV4dHJhY3RzIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBOb3RoaW5nIG1vcmUuIFNvLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIGFuZCBjb25maXJtLgotICAgYFdvcnRoRnV6emluZzogZmFsc2VgCi0gICBgRm9jdXNTeW1ib2xzOiBbXWAKLSAgIGBFbmFibGVDb25maWdzOiBbXWAKLSAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uYAoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjI1NDQ2MDg0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQyMzk5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjI1NDQ2NDg0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMDA0OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM4MzFiNjNiNzc4M2E1MTUzNWQ5ODhmYzdkMzZlMzQxYjRlMjkzM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuaW5kZXggOGE4NzI5OTBiNGJlZS4uOWNmM2Y0NTY0YWZiZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuQEAgLTM5Miw2ICszOTIsMTA3IEBAIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcXG4gXFx0XFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVxcdTAwM2VscnUsIExSVV9OQU1FUykpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChtbV9tZ2xydV9zY2FuX2ZvbGlvcyxcXG4rXFxuK1xcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcXG4rXFx0XFx0aW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4rXFx0XFx0aW50IG9yZGVyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbitcXHRcXHRpbnQgbHJ1LFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXFxuK1xcdFxcdGludCB0aWVyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXEpLFxcbitcXG4rXFx0VFBfQVJHUyhtZW1jZ19pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLFxcbitcXHRcXHRucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZCh1NjQsIG1lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxcbitcXHRcXHRfX2ZpZWxkKGludCwgb3JkZXIpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc29ydGVkKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXFxuK1xcdFxcdF9fZmllbGQoaW50LCBscnUpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcXG4rXFx0XFx0X19maWVsZChpbnQsIHRpZXIpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWluX3NlcSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCA9IG1lbWNnX2lkO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW9yZGVyID0gb3JkZXI7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3JlcXVlc3RlZCA9IG5yX3JlcXVlc3RlZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2Nhbm5lZCA9IG5yX3NjYW5uZWQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NvcnRlZCA9IG5yX3NvcnRlZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2tpcHBlZCA9IG5yX3NraXBwZWQ7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3Rha2VuID0gbnJfdGFrZW47XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxydSA9IGxydTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXRpZXIgPSB0aWVyO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtaW5fc2VxID0gbWluX3NlcTtcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwibWVtY2dfaWQ9JWxsdSBjbGFzc3pvbmU9JWQgb3JkZXI9JWQgbnJfcmVxdWVzdGVkPSVsdSBucl9zY2FubmVkPSVsdSBucl9zb3J0ZWQ9JWx1IG5yX3NraXBwZWQ9JWx1IG5yX3Rha2VuPSVsdSBscnU9JXMgbWF4X3NlcT0lbHUgdGllcj0lZCBtaW5fc2VxPSVsdVxcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1lbWNnX2lkLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW9yZGVyLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vucl9yZXF1ZXN0ZWQsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NjYW5uZWQsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX3NvcnRlZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfc2tpcHBlZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfdGFrZW4sXFxuK1xcdFxcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cXHUwMDNlbHJ1LCBMUlVfTkFNRVMpLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2V0aWVyLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtaW5fc2VxKVxcbispO1xcbitcXG4rVFJBQ0VfRVZFTlQobW1fbWdscnVfaW5jX21heF9zZXEsXFxuK1xcbitcXHRUUF9QUk9UTyh1NjQgbWVtY2dfaWQsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhbm9uX21pbl9zZXEsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9taW5fc2VxLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nICpucl9hbm9uLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nICpucl9maWxlKSxcXG4rXFxuK1xcdFRQX0FSR1MobWVtY2dfaWQsIG1heF9zZXEsIGFub25fbWluX3NlcSwgZmlsZV9taW5fc2VxLCBucl9hbm9uLCBucl9maWxlKSxcXG4rXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQodTY0LCBtZW1jZ19pZClcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXhfc2VxKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGFub25fbWluX3NlcSlcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBmaWxlX21pbl9zZXEpXFxuK1xcdFxcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfYW5vbiwgTUFYX05SX0dFTlMpXFxuK1xcdFxcdF9fYXJyYXkodW5zaWduZWQgbG9uZywgbnJfZmlsZSwgTUFYX05SX0dFTlMpXFxuK1xcdCksXFxuK1xcbitcXHRUUF9mYXN0X2Fzc2lnbihcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWQgPSBtZW1jZ19pZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWFub25fbWluX3NlcSA9IGFub25fbWluX3NlcTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZmlsZV9taW5fc2VxID0gZmlsZV9taW5fc2VxO1xcbitcXHRcXHRtZW1jcHkoX19lbnRyeS1cXHUwMDNlbnJfYW5vbiwgbnJfYW5vbiwgc2l6ZW9mKF9fZW50cnktXFx1MDAzZW5yX2Fub24pKTtcXG4rXFx0XFx0bWVtY3B5KF9fZW50cnktXFx1MDAzZW5yX2ZpbGUsIG5yX2ZpbGUsIHNpemVvZihfX2VudHJ5LVxcdTAwM2Vucl9maWxlKSk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1lbWNnX2lkPSVsbHUgbWF4X3NlcT0lbHUgYW5vbl9taW5fc2VxPSVsdSBmaWxlX21pbl9zZXE9JWx1IG5yX2Fub249JXMgbnJfZmlsZT0lc1xcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1lbWNnX2lkLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vhbm9uX21pbl9zZXEsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWZpbGVfbWluX3NlcSxcXG4rXFx0XFx0X19wcmludF9hcnJheShfX2VudHJ5LVxcdTAwM2Vucl9hbm9uLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSxcXG4rXFx0XFx0X19wcmludF9hcnJheShfX2VudHJ5LVxcdTAwM2Vucl9maWxlLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcXG4rKTtcXG4rXFxuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcXG4gXFxuIFxcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZDBlNTliYWY1ZDVjNiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTI4MTMsNiArMjgxMywxOCBAQCBzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuIFxcdHJldHVybiBscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxIC0gbHJ1dmVjLVxcdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSArIDE7XFxuIH1cXG4gXFxuKy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcXHUwMDNlPSAwICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fc2VxX25yX3BhZ2VzKHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4sIGludCBnZW4sIGludCB0eXBlKVxcbit7XFxuK1xcdGludCB6b25lO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbitcXG4rXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbitcXHRcXHRzaXplICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIHtcXG4gXFx0aW50IHR5cGU7XFxuQEAgLTQwODgsNiArNDEwMCwyNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0cmFjZV9pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuK3tcXG4rXFx0aW50IHR5cGUsIGdlbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBucltBTk9OX0FORF9GSUxFXVtNQVhfTlJfR0VOU107XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcbitcXHRpZiAoIXRyYWNlX21tX21nbHJ1X2luY19tYXhfc2VxX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKylcXG4rXFx0XFx0Zm9yIChnZW4gPSAwOyBnZW4gXFx1MDAzYyBNQVhfTlJfR0VOUzsgZ2VuKyspXFxuK1xcdFxcdFxcdG5yW3R5cGVdW2dlbl0gPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuK1xcbitcXHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLFxcbitcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW1pbl9zZXFbTFJVX0dFTl9BTk9OXSxcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXFxuK1xcdFxcdFxcdFxcdCAgIG5yW0xSVV9HRU5fQU5PTl0sIG5yW0xSVV9HRU5fRklMRV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4ge1xcbiBcXHRib29sIHN1Y2Nlc3M7XFxuQEAgLTQxNDcsNiArNDE3OSw4IEBAIHN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzXFxuIFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW25leHRdLCBqaWZmaWVzKTtcXG4gXFx0LyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqL1xcbiBcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLCBscnVnZW4tXFx1MDAzZW1heF9zZXEgKyAxKTtcXG4rXFxuK1xcdHRyYWNlX2luY19tYXhfc2VxKGxydXZlYyk7XFxuIHVubG9jazpcXG4gXFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuQEAgLTQyMzksNyArNDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbiB7XFxuLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuK1xcdGludCBnZW4sIHR5cGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuQEAgLTQyNDgsOCArNDI4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzXFxuIFxcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcXG4gXFx0XFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4gXFx0XFx0XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbi1cXHRcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuLVxcdFxcdFxcdFxcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xcbitcXHRcXHRcXHR0b3RhbCArPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNDg2NSw2ICs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4gXFx0XFx0XFx0XFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXFxuIFxcdFxcdFxcdFxcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcXG4rXFx0dHJhY2VfbW1fbWdscnVfc2Nhbl9mb2xpb3MobWVtX2Nncm91cF9pZChscnV2ZWNfbWVtY2cobHJ1dmVjKSksXFxuK1xcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcbitcXHRcXHRcXHRcXHQgICBzY2FubmVkLCBzb3J0ZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbitcXHRcXHRcXHRcXHQgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTixcXG4rXFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxLCB0aWVyLFxcbitcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbiBcXG4gXFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG5AQCAtNTczOCwxOSArNTc3NywxNiBAQCBzdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRcXHRzZXEgPSAwO1xcbiBcXG4gXFx0Zm9yICg7IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbi1cXHRcXHRpbnQgdHlwZSwgem9uZTtcXG4rXFx0XFx0aW50IHR5cGU7XFxuIFxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4udGltZXN0YW1wc1tnZW5dKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlMTBsdSAlMTB1XFxcIiwgc2VxLCBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBiaXJ0aCkpO1xcbiBcXG4gXFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XFxuIFxcdFxcdFxcdGNoYXIgbWFyayA9IGZ1bGwgXFx1MDAyNlxcdTAwMjYgc2VxIFxcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICd4JyA6ICcgJztcXG4gXFxuLVxcdFxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4tXFx0XFx0XFx0XFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFxuIFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlMTBsdSVjXFxcIiwgc2l6ZSwgbWFyayk7XFxuIFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjgwODA2MDQ0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjA1ODg3ODU1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNvbGVseSBpbnRyb2R1Y2VzIHR3byB0cmFjZXBvaW50cyAobW1fbWdscnVfc2Nhbl9mb2xpb3MgYW5kIG1tX21nbHJ1X2luY19tYXhfc2VxKSBpbiB0aGUgbXVsdGktZ2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIHZtc2NhbiBjb2RlIGFuZCBleHRyYWN0cyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiAobHJ1X2dlbl9zZXFfbnJfcGFnZXMpIHRvIGNhbGN1bGF0ZSBnZW5lcmF0aW9uIHBhZ2UgY291bnRzLiBJdCBkb2VzIG5vdCBtb2RpZnkga2VybmVsIGNvbnRyb2wgZmxvdywgYWxnb3JpdGhtcywgYXNzZXJ0aW9ucywgb3IgZGF0YSBzdHJ1Y3R1cmVzLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzODMxYjYzYjc3ODNhNTE1MzVkOTg4ZmM3ZDM2ZTM0MWI0ZTI5MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbmluZGV4IDhhODcyOTkwYjRiZWUuLjljZjNmNDU2NGFmYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbkBAIC0zOTIsNiArMzkyLDEwNyBAQCBUUkFDRV9FVkVOVChtbV92bXNjYW5fbHJ1X2lzb2xhdGUsXG4gXHRcdF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cdTAwM2VscnUsIExSVV9OQU1FUykpXG4gKTtcbiBcbitUUkFDRV9FVkVOVChtbV9tZ2xydV9zY2FuX2ZvbGlvcyxcbitcbitcdFRQX1BST1RPKHU2NCBtZW1jZ19pZCxcbitcdFx0aW50IGhpZ2hlc3Rfem9uZWlkeCxcbitcdFx0aW50IG9yZGVyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3NvcnRlZCxcbitcdFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuK1x0XHRpbnQgbHJ1LFxuK1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdGludCB0aWVyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG1pbl9zZXEpLFxuK1xuK1x0VFBfQVJHUyhtZW1jZ19pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLFxuK1x0XHRucl9zb3J0ZWQsIG5yX3NraXBwZWQsIG5yX3Rha2VuLCBscnUsIG1heF9zZXEsIHRpZXIsIG1pbl9zZXEpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZCh1NjQsIG1lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGludCwgaGlnaGVzdF96b25laWR4KVxuK1x0XHRfX2ZpZWxkKGludCwgb3JkZXIpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc29ydGVkKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NraXBwZWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pXG4rXHRcdF9fZmllbGQoaW50LCBscnUpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcbitcdFx0X19maWVsZChpbnQsIHRpZXIpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWluX3NlcSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCA9IG1lbWNnX2lkO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbitcdFx0X19lbnRyeS1cdTAwM2VvcmRlciA9IG9yZGVyO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX3JlcXVlc3RlZCA9IG5yX3JlcXVlc3RlZDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zY2FubmVkID0gbnJfc2Nhbm5lZDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQgPSBucl9zb3J0ZWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2tpcHBlZCA9IG5yX3NraXBwZWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbnJfdGFrZW4gPSBucl90YWtlbjtcbitcdFx0X19lbnRyeS1cdTAwM2VscnUgPSBscnU7XG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XG4rXHRcdF9fZW50cnktXHUwMDNldGllciA9IHRpZXI7XG4rXHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSA9IG1pbl9zZXE7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibWVtY2dfaWQ9JWxsdSBjbGFzc3pvbmU9JWQgb3JkZXI9JWQgbnJfcmVxdWVzdGVkPSVsdSBucl9zY2FubmVkPSVsdSBucl9zb3J0ZWQ9JWx1IG5yX3NraXBwZWQ9JWx1IG5yX3Rha2VuPSVsdSBscnU9JXMgbWF4X3NlcT0lbHUgdGllcj0lZCBtaW5fc2VxPSVsdVwiLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcbitcdFx0X19lbnRyeS1cdTAwM2VvcmRlcixcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9yZXF1ZXN0ZWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2Nhbm5lZCxcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9zb3J0ZWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbnJfc2tpcHBlZCxcbitcdFx0X19lbnRyeS1cdTAwM2Vucl90YWtlbixcbitcdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZWxydSwgTFJVX05BTUVTKSxcbitcdFx0X19lbnRyeS1cdTAwM2VtYXhfc2VxLFxuK1x0XHRfX2VudHJ5LVx1MDAzZXRpZXIsXG4rXHRcdF9fZW50cnktXHUwMDNlbWluX3NlcSlcbispO1xuK1xuK1RSQUNFX0VWRU5UKG1tX21nbHJ1X2luY19tYXhfc2VxLFxuK1xuK1x0VFBfUFJPVE8odTY0IG1lbWNnX2lkLFxuK1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYW5vbl9taW5fc2VxLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZpbGVfbWluX3NlcSxcbitcdFx0dW5zaWduZWQgbG9uZyAqbnJfYW5vbixcbitcdFx0dW5zaWduZWQgbG9uZyAqbnJfZmlsZSksXG4rXG4rXHRUUF9BUkdTKG1lbWNnX2lkLCBtYXhfc2VxLCBhbm9uX21pbl9zZXEsIGZpbGVfbWluX3NlcSwgbnJfYW5vbiwgbnJfZmlsZSksXG4rXG4rXHRUUF9TVFJVQ1RfX2VudHJ5KFxuK1x0XHRfX2ZpZWxkKHU2NCwgbWVtY2dfaWQpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWF4X3NlcSlcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBhbm9uX21pbl9zZXEpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZmlsZV9taW5fc2VxKVxuK1x0XHRfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2Fub24sIE1BWF9OUl9HRU5TKVxuK1x0XHRfX2FycmF5KHVuc2lnbmVkIGxvbmcsIG5yX2ZpbGUsIE1BWF9OUl9HRU5TKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtY2dfaWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSA9IG1heF9zZXE7XG4rXHRcdF9fZW50cnktXHUwMDNlYW5vbl9taW5fc2VxID0gYW5vbl9taW5fc2VxO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWZpbGVfbWluX3NlcSA9IGZpbGVfbWluX3NlcTtcbitcdFx0bWVtY3B5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgbnJfYW5vbiwgc2l6ZW9mKF9fZW50cnktXHUwMDNlbnJfYW5vbikpO1xuK1x0XHRtZW1jcHkoX19lbnRyeS1cdTAwM2Vucl9maWxlLCBucl9maWxlLCBzaXplb2YoX19lbnRyeS1cdTAwM2Vucl9maWxlKSk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibWVtY2dfaWQ9JWxsdSBtYXhfc2VxPSVsdSBhbm9uX21pbl9zZXE9JWx1IGZpbGVfbWluX3NlcT0lbHUgbnJfYW5vbj0lcyBucl9maWxlPSVzXCIsXG4rXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQsXG4rXHRcdF9fZW50cnktXHUwMDNlbWF4X3NlcSxcbitcdFx0X19lbnRyeS1cdTAwM2Vhbm9uX21pbl9zZXEsXG4rXHRcdF9fZW50cnktXHUwMDNlZmlsZV9taW5fc2VxLFxuK1x0XHRfX3ByaW50X2FycmF5KF9fZW50cnktXHUwMDNlbnJfYW5vbiwgTUFYX05SX0dFTlMsIHNpemVvZih1bnNpZ25lZCBsb25nKSksXG4rXHRcdF9fcHJpbnRfYXJyYXkoX19lbnRyeS1cdTAwM2Vucl9maWxlLCBNQVhfTlJfR0VOUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbispO1xuK1xuIFRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93cml0ZV9mb2xpbyxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8pLFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmQwZTU5YmFmNWQ1YzYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0yODEzLDYgKzI4MTMsMTggQEAgc3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0cmV0dXJuIGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSAtIGxydXZlYy1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSArIDE7XG4gfVxuIFxuKy8qIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBnZW5lcmF0aW9uLCBzdW1tZWQgb3ZlciB6b25lcyBhbmQgY2xhbXBlZCB0byBcdTAwM2U9IDAgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX3NlcV9ucl9wYWdlcyhzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuLCBpbnQgZ2VuLCBpbnQgdHlwZSlcbit7XG4rXHRpbnQgem9uZTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXG4rXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbitcdFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0aW50IHR5cGU7XG5AQCAtNDA4OCw2ICs0MTAwLDI2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCB0cmFjZV9pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4re1xuK1x0aW50IHR5cGUsIGdlbjtcbitcdHVuc2lnbmVkIGxvbmcgbnJbQU5PTl9BTkRfRklMRV1bTUFYX05SX0dFTlNdO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXG4rXHRpZiAoIXRyYWNlX21tX21nbHJ1X2luY19tYXhfc2VxX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxuK1x0XHRmb3IgKGdlbiA9IDA7IGdlbiBcdTAwM2MgTUFYX05SX0dFTlM7IGdlbisrKVxuK1x0XHRcdG5yW3R5cGVdW2dlbl0gPSBscnVfZ2VuX3NlcV9ucl9wYWdlcyhscnVnZW4sIGdlbiwgdHlwZSk7XG4rXG4rXHR0cmFjZV9tbV9tZ2xydV9pbmNfbWF4X3NlcShtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtYXhfc2VxLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbTFJVX0dFTl9BTk9OXSxcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtaW5fc2VxW0xSVV9HRU5fRklMRV0sXG4rXHRcdFx0XHQgICBucltMUlVfR0VOX0FOT05dLCBucltMUlVfR0VOX0ZJTEVdKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0Ym9vbCBzdWNjZXNzO1xuQEAgLTQxNDcsNiArNDE3OSw4IEBAIHN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzXG4gXHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW25leHRdLCBqaWZmaWVzKTtcbiBcdC8qIG1ha2Ugc3VyZSBwcmVjZWRpbmcgbW9kaWZpY2F0aW9ucyBhcHBlYXIgKi9cbiBcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmxydWdlbi1cdTAwM2VtYXhfc2VxLCBscnVnZW4tXHUwMDNlbWF4X3NlcSArIDEpO1xuK1xuK1x0dHJhY2VfaW5jX21heF9zZXEobHJ1dmVjKTtcbiB1bmxvY2s6XG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQyMzksNyArNDI3Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IGdlbiwgdHlwZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG5AQCAtNDI0OCw4ICs0MjgyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3NcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcbiBcdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuIFx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4rXHRcdFx0dG90YWwgKz0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNDg2NSw2ICs0ODk4LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4rXHR0cmFjZV9tbV9tZ2xydV9zY2FuX2ZvbGlvcyhtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcbitcdFx0XHRcdCAgIHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbitcdFx0XHRcdCAgIHNjYW5uZWQsIHNvcnRlZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4rXHRcdFx0XHQgICB0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTixcbitcdFx0XHRcdCAgIGxydWdlbi1cdTAwM2VtYXhfc2VxLCB0aWVyLFxuK1x0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFxuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG5AQCAtNTczOCwxOSArNTc3NywxNiBAQCBzdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0XHRzZXEgPSAwO1xuIFxuIFx0Zm9yICg7IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4tXHRcdGludCB0eXBlLCB6b25lO1xuK1x0XHRpbnQgdHlwZTtcbiBcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4gXG4gXHRcdHNlcV9wcmludGYobSwgXCIgJTEwbHUgJTEwdVwiLCBzZXEsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJpcnRoKSk7XG4gXG4gXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbHJ1X2dlbl9zZXFfbnJfcGFnZXMobHJ1Z2VuLCBnZW4sIHR5cGUpO1xuIFx0XHRcdGNoYXIgbWFyayA9IGZ1bGwgXHUwMDI2XHUwMDI2IHNlcSBcdTAwM2MgbWluX3NlcVt0eXBlXSA/ICd4JyA6ICcgJztcbiBcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcbi1cdFx0XHRcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwiICUxMGx1JWNcIiwgc2l6ZSwgbWFyayk7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjI5LjgwODA2MjQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzQyNDExMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGluY2x1c2lvbiBpbiBvdXIgZnV6emluZyBlZmZvcnRzIHdpdGggc3l6a2FsbGVyLiBGaXJzdCwgbGV0J3MgYW5hbHl6ZSB0aGUgZGlmZi4gV2Ugc2VlIGFkZGl0aW9uczogdHdvIG5ldyB0cmFjZXBvaW50cywgYG1tX21nbHJ1X3NjYW5fZm9saW9zYCBhbmQgYG1tX21nbHJ1X2luY19tYXhfc2VxYCwgaW4gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYC4gQWxzbywgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgbHJ1X2dlbl9zZXFfbnJfcGFnZXNgLCBhbmQgdXNlcyBvZiB0aGVzZSBuZXcgYWRkaXRpb25zIGluIGBtbS92bXNjYW4uY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEFjY29yZGluZyB0byBvdXIgY3JpdGVyaWEsIHdlIGRvbid0IHdhbnQgdG8gZnV6eiBwYXRjaGVzIHRoYXQgYXJlIG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMuIEFuZCBtb3JlIHNwZWNpZmljYWxseTogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoYXQgaXMgdGhlIGtleSB0ZXN0IGhlcmUuXG5cbkluaXRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIG1pZ2h0IGZhbGwgaW50byB0aGF0IGNhdGVnb3J5OiBlc3NlbnRpYWxseSBuZXcgdHJhY2Vwb2ludHMsIGEgYml0IG9mIHJlZmFjdG9yaW5nLCBhbmQgYWRkaW5nIGEgMy1saW5lIHN1bSBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSBtb3N0bHkgYWJvdXQgb2JzZXJ2YWJpbGl0eS4gSG93ZXZlciwgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gRG9lcyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGxydV9nZW5fc2VxX25yX3BhZ2VzYCwgYWN0dWFsbHkgaW1wYWN0IGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/XG5cbkxvb2tpbmcgY2xvc2VseSBhdCBgbHJ1dmVjX2V2aWN0YWJsZV9zaXplYCwgYGxydV9nZW5fc2VxX3Nob3dgLCBhbmQgYHRyYWNlX2luY19tYXhfc2VxYCBpdCdzIGp1c3QgYSBkaXJlY3QsIG9uZS10by1vbmUgcmVwbGFjZW1lbnQgb2YgdGhlIGZvciBsb29wLiBUaGUgaGVscGVyIGZ1bmN0aW9uIHN1bXMgYXJyYXkgZWxlbWVudHMsIG5vdGhpbmcgbW9yZSwgbm90aGluZyBsZXNzLiBJdCdzIGEgc3RyYWlnaHQgY29kZSByZWZhY3RvcmluZyB0byBEUlkgdGhlIGNvZGUuIEFuZCB0aGUgdHJhY2Vwb2ludHMgdGhlbXNlbHZlcyBvbmx5IGFkZCBpbnN0cnVtZW50YXRpb24sIG5vdCBhbHRlciBsb2dpYy5cblxuSW4gYHNjYW5fZm9saW9zYCwgdGhlIHRyYWNlcG9pbnQgc2ltcGx5IGxvZ3MgaW5mb3JtYXRpb24gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHByb2dyYW0ncyBwYXRoLlxuXG5TbywgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY29kZSBjaGFuZ2VzIGFwcGVhciBzdHJpY3RseSBjb3NtZXRpYyBpbiB0ZXJtcyBvZiBhbHRlcmluZyBkYXRhIG9yIGNvbnRyb2wgZmxvdy4gTGV0J3MgbWFrZSBzdXJlLCBiZWZvcmUgbWFraW5nIGEgZmluYWwgZGVjaXNpb24uIEkgc2hvdWxkIHByb2JhYmx5IHJ1biBgZ2l0IGRpZmZgIG9uZSBtb3JlIHRpbWUgb3IgdmVyaWZ5IHdpdGggb3RoZXIgdG9vbHMgZm9yIGEgcXVpY2sgZG91YmxlIGNoZWNrLCBqdXN0IGluIGNhc2UuXG5cbkluIGNvbmNsdXNpb24sIGdpdmVuIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyBsaW1pdGVkIHRvIHRyYWNlcG9pbnQgYWRkaXRpb25zIGFuZCBhIHRyaXZpYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBjb2RlIGRlZHVwbGljYXRpb24gdGhhdCBkb2Vzbid0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKm5vdCogd29ydGggZnV6emluZyBhdCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MTguNTUwNDc2MTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkzNTI1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fbWdscnVfc2Nhbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzUwPVRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTM5NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDozOTU6VFJBQ0VfRVZFTlQobW1fbWdscnVfc2Nhbl9mb2xpb3MsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMzk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkwMC1cXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxubW0vdm1zY2FuLmM6NDkwMTpcXHR0cmFjZV9tbV9tZ2xydV9zY2FuX2ZvbGlvcyhtZW1fY2dyb3VwX2lkKGxydXZlY19tZW1jZyhscnV2ZWMpKSxcXG5tbS92bXNjYW4uYy00OTAyLVxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjoyMC4wOTk4MzU3MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDI5Njk4NzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBnaXQgaGlzdG9yeSBhbmQgZGlmZiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gbm90aGluZyBlbHNlIHNuZWFrZWQgaW4uIEknbGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgY29tbWl0IElEIGlzIGAzMzgzMWI2M2I3NzgzYTUxNTM1ZDk4OGZjN2QzNmUzNDFiNGUyOTMzYC5cblxuTm93LCBsZXQncyByZXZpc2l0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgdGhlIGJpdCBhYm91dDogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoYXQncyB0aGUga2V5IGhlcmUsIGFuZCBpZiB0aGF0IGFwcGxpZXMsIHRoZW4gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkRvZXMgdGhpcyBwYXRjaCAqYWN0dWFsbHkqIGRvIGFueXRoaW5nIG90aGVyIHRoYW4gaW5qZWN0IHRyYWNlcG9pbnRzIGFuZCByZWZhY3RvciB0aGlzIGhlbHBlcj8gTGV0J3Mgc2VlLi4uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgdHdvIHRyYWNlcG9pbnRzLCBgbW1fbWdscnVfc2Nhbl9mb2xpb3NgIGFuZCBgbW1fbWdscnVfaW5jX21heF9zZXFgLCBhbG9uZyB3aXRoIHRoaXMgbGl0dGxlIHN0YXRpYyBoZWxwZXIgYGxydV9nZW5fc2VxX25yX3BhZ2VzYC4gSXQgc2VlbXMgdGhpcyBoZWxwZXIgaXMgKm9ubHkqIHVzZWQgYnkgdGhlIHRyYWNlcG9pbnRzLCBhbmQgaXQncyBiYXNpY2FsbHkgdGhlIHNhbWUgbG9naWMgdGhhdCB3YXMgYWxyZWFkeSBvcGVuLWNvZGVkIGluIGEgY291cGxlIG9mIHBsYWNlcy4gTm8gY2hhbmdlcyB0byBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYW55IGNyaXRpY2FsIGludmFyaWFudHMgYXJlIGhhcHBlbmluZy5cblxuUmlnaHQsIHNvIHVuZGVyIFNlY3Rpb24gMiBvZiB0aGUgZ3VpZGVsaW5lcywgdGhhdCBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmdcIiBiaXQgZGVmaW5pdGVseSBhcHBsaWVzIGhlcmUuIFRoZSBwYXRjaCBqdXN0IGFkZHMgdGhlc2UgdHJhY2Vwb2ludHMsIGFuZCBleHRyYWN0cyB0aGlzIGhlbHBlciBmdW5jdGlvbi4gTm90aGluZyBtb3JlLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLlxuXG5MZXQncyBzdW1tYXJpemUgYW5kIGNvbmZpcm0uXG4tICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4tICAgYEZvY3VzU3ltYm9sczogW11gXG4tICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuLSAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uYFxuXG5Pa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwMCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MzAuMzk2ODI0ODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzb2xlbHkgaW50cm9kdWNlcyB0d28gdHJhY2Vwb2ludHMgKG1tX21nbHJ1X3NjYW5fZm9saW9zIGFuZCBtbV9tZ2xydV9pbmNfbWF4X3NlcSkgaW4gdGhlIG11bHRpLWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSB2bXNjYW4gY29kZSBhbmQgZXh0cmFjdHMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gKGxydV9nZW5fc2VxX25yX3BhZ2VzKSB0byBjYWxjdWxhdGUgZ2VuZXJhdGlvbiBwYWdlIGNvdW50cy4gSXQgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbCBjb250cm9sIGZsb3csIGFsZ29yaXRobXMsIGFzc2VydGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc29sZWx5IGludHJvZHVjZXMgdHdvIHRyYWNlcG9pbnRzIChtbV9tZ2xydV9zY2FuX2ZvbGlvcyBhbmQgbW1fbWdscnVfaW5jX21heF9zZXEpIGluIHRoZSBtdWx0aS1nZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgdm1zY2FuIGNvZGUgYW5kIGV4dHJhY3RzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uIChscnVfZ2VuX3NlcV9ucl9wYWdlcykgdG8gY2FsY3VsYXRlIGdlbmVyYXRpb24gcGFnZSBjb3VudHMuIEl0IGRvZXMgbm90IG1vZGlmeSBrZXJuZWwgY29udHJvbCBmbG93LCBhbGdvcml0aG1zLCBhc3NlcnRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjMwLjM5Njg0OTEzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownlk4c[1] Phase: Running StartedAt: 2026-09-11 08:06:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlk4c[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 08:06:41 +0000 UTC FinishedAt: 2026-09-11 08:06:46 +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,}