Name: series-workflow5hh2r Phase: Failed StartedAt: 2026-09-08 21:04:39 +0000 UTC FinishedAt: 2026-09-08 21:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5hh2r[0] Phase: Succeeded StartedAt: 2026-09-08 21:04:39 +0000 UTC FinishedAt: 2026-09-08 21:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5hh2r[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 21:04:39 +0000 UTC FinishedAt: 2026-09-08 21:06:32 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWNmNmUwYTYxMGUxMTg1YWM4NGMyZDlmNjY5ZjAyNjA1NTYwMTA5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmNcbmluZGV4IDg0MTdkZTkyZDAyODIuLjQxY2MzMTQwOTI1ZmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNDgyNyw3ICYjNDM7NDgyNyw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRhMSA9IGJ0Zl9hcnJheSh0MSk7XG4tXHRcdGEyID0gYnRmX2FycmF5KHQxKTtcbiYjNDM7XHRcdGEyID0gYnRmX2FycmF5KHQyKTtcbiBcbiBcdFx0aWYgKGExLVx1MDAzZWluZGV4X3R5cGUgIT0gYTItXHUwMDNlaW5kZXhfdHlwZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZWluZGV4X3R5cGUsIGEyLVx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuaW5kZXggNjdiOTAxNWNiZDk4MC4uZGY2YWQzOGQyODdkYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuQEAgLTcwNjIsNiAmIzQzOzcwNjIsMTMyIEBAIHN0YXRpYyBzdHJ1Y3QgYnRmX2RlZHVwX3Rlc3QgZGVkdXBfdGVzdHNbXSA9IHtcbiBcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwbG9uZyBpbnRcJiMzNDspLFxuIFx0fSxcbiB9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblwmIzM0OyxcbiYjNDM7XHQuaW5wdXQgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHQvKiBzaWduZWQgaW50ICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHQvKiB1bnNpZ25lZCBpbnQgKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbiYjNDM7XHRcdFx0Lyogc2lnbmVkIGludFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0LyogZHVwbGljYXRlIHNpZ25lZCBpbnRbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdC8qIHVuc2lnbmVkIGludFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHNpZ25lZCBpbnQgYlsxXTsgfSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcJiMzNDspLFxuJiM0MztcdH0sXG4mIzQzO1x0LmV4cGVjdCA9IHtcbiYjNDM7XHRcdC5yYXdfdHlwZXMgPSB7XG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0Mzt9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiB3aXRoIHNhbWUgaW5kZXggdHlwZVwmIzM0OyxcbiYjNDM7XHQuaW5wdXQgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcdFx0XHRcdC8qIFs0XSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4mIzQzO1x0XHRcdC8qIHN0cnVjdCBzIHsgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcJiMzNDspLFxuJiM0MztcdH0sXG4mIzQzO1x0LmV4cGVjdCA9IHtcbiYjNDM7XHRcdC5yYXdfdHlwZXMgPSB7XG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0Mzt9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGlkZW50aWNhbCBhcnJheSBlbGVtZW50IGNvbXBhcmlzb25cJiMzNDssXG4mIzQzO1x0LmlucHV0ID0ge1xuJiM0MztcdFx0LnJhd190eXBlcyA9IHtcbiYjNDM7XHRcdFx0LyogaW50ICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHQvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXHRcdFx0LyogWzJdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcbiYjNDM7XHRcdFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDQsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4mIzQzO1x0XHRcdC8qIHN0cnVjdCBlbGVtIHsgaW50IHg7IH0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs0XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4mIzQzO1x0XHRcdC8qIGR1cGxpY2F0ZSBzdHJ1Y3QgY29udGFpbmVyICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDYsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNywgMzIpLFxuJiM0MztcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW1bMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDgsIDEsIDEpLFx0XHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQyg5LCAxLCAxKSxcdFx0XHRcdC8qIFs3XSAqL1xuJiM0MztcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs4XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcdFx0XHQvKiBbOV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDBjb250YWluZXJcXDBmaXJzdFxcMHNlY29uZFxcMGVsZW1cXDB4XCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0MztcdC5leHBlY3QgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMiksIDIsIDgpLFx0XHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAzMiksXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQyg0LCAxLCAxKSxcdFx0XHRcdC8qIFszXSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwY29udGFpbmVyXFwwZmlyc3RcXDBzZWNvbmRcXDBlbGVtXFwweFwmIzM0OyksXG4mIzQzO1x0fSxcbiYjNDM7fSxcbiB7XG4gXHQuZGVzY3IgPSBcJiMzNDtkZWR1cDogc3RydWN0IGV4YW1wbGUgIzFcJiMzNDssXG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVjZjZlMGE2MTBlMTE4NWFjODRjMmQ5ZjY2OWYwMjYwNTU2MDEwOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmMKaW5kZXggODQxN2RlOTJkMDI4Mi4uNDFjYzMxNDA5MjVmYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jCkBAIC00ODI3LDcgJiM0Mzs0ODI3LDcgQEAgc3RhdGljIGJvb2wgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBpZDEsIF9fdTMyIGlkMiwKIAkJCXJldHVybiBmYWxzZTsKIAogCQlhMSA9IGJ0Zl9hcnJheSh0MSk7Ci0JCWEyID0gYnRmX2FycmF5KHQxKTsKJiM0MzsJCWEyID0gYnRmX2FycmF5KHQyKTsKIAogCQlpZiAoYTEtJmd0O2luZGV4X3R5cGUgIT0gYTItJmd0O2luZGV4X3R5cGUgJmFtcDsmYW1wOwogCQkgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgYTEtJmd0O2luZGV4X3R5cGUsIGEyLSZndDtpbmRleF90eXBlLCBkZXB0aCAtIDEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwppbmRleCA2N2I5MDE1Y2JkOTgwLi5kZjZhZDM4ZDI4N2RhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwpAQCAtNzA2Miw2ICYjNDM7NzA2MiwxMzIgQEAgc3RhdGljIHN0cnVjdCBidGZfZGVkdXBfdGVzdCBkZWR1cF90ZXN0c1tdID0gewogCQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDBsb25nIGludCYjMzQ7KSwKIAl9LAogfSwKJiM0Mzt7CiYjNDM7CS5kZXNjciA9ICYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiYjMzQ7LAomIzQzOwkuaW5wdXQgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCS8qIHNpZ25lZCBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQkvKiB1bnNpZ25lZCBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksCQkvKiBbMl0gKi8KJiM0MzsJCQkvKiBzaWduZWQgaW50WzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLAkJCQkvKiBbM10gKi8KJiM0MzsJCQkvKiBkdXBsaWNhdGUgc2lnbmVkIGludFsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSwJCQkJLyogWzRdICovCiYjNDM7CQkJLyogdW5zaWduZWQgaW50WzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLAkJCQkvKiBbNV0gKi8KJiM0MzsJCQkvKiBzdHJ1Y3QgcyB7IHNpZ25lZCBpbnQgYVsxXTsgc2lnbmVkIGludCBiWzFdOyB9ICovCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs2XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLAomIzQzOwkJCS8qIHN0cnVjdCBzIHsgc2lnbmVkIGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSwJCQkvKiBbN10gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNCwgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDB1bnNpZ25lZCBpbnRcMHNcMGFcMGImIzM0OyksCiYjNDM7CX0sCiYjNDM7CS5leHBlY3QgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSwJCS8qIFsyXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSwJCQkJLyogWzNdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLAkJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzVdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs2XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNCwgMzIpLAomIzQzOwkJCUJURl9FTkRfUkFXLAomIzQzOwkJfSwKJiM0MzsJCUJURl9TVFJfU0VDKCYjMzQ7XDBpbnRcMHVuc2lnbmVkIGludFwwc1wwYVwwYiYjMzQ7KSwKJiM0MzsJfSwKJiM0Mzt9LAomIzQzO3sKJiM0MzsJLmRlc2NyID0gJiMzNDtkZWR1cDogYXJyYXkgZWxlbWVudCBjb21wYXJpc29uIHdpdGggc2FtZSBpbmRleCB0eXBlJiMzNDssCiYjNDM7CS5pbnB1dCA9IHsKJiM0MzsJCS5yYXdfdHlwZXMgPSB7CiYjNDM7CQkJQlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovCiYjNDM7CQkJQlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLAkJLyogWzJdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLAkJCQkvKiBbM10gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksCQkJCS8qIFs0XSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygyLCAxLCAxKSwJCQkJLyogWzVdICovCiYjNDM7CQkJLyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzZdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksCiYjNDM7CQkJLyogc3RydWN0IHMgeyBpbnQgYVsxXTsgdW5zaWduZWQgaW50IGJbMV07IH0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzddICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA1LCAzMiksCiYjNDM7CQkJQlRGX0VORF9SQVcsCiYjNDM7CQl9LAomIzQzOwkJQlRGX1NUUl9TRUMoJiMzNDtcMGludFwwdW5zaWduZWQgaW50XDBzXDBhXDBiJiMzNDspLAomIzQzOwl9LAomIzQzOwkuZXhwZWN0ID0gewomIzQzOwkJLnJhd190eXBlcyA9IHsKJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksCQkJCS8qIFszXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygyLCAxLCAxKSwJCQkJLyogWzRdICovCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs1XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLAomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSwJCQkvKiBbNl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDB1bnNpZ25lZCBpbnRcMHNcMGFcMGImIzM0OyksCiYjNDM7CX0sCiYjNDM7fSwKJiM0Mzt7CiYjNDM7CS5kZXNjciA9ICYjMzQ7ZGVkdXA6IGlkZW50aWNhbCBhcnJheSBlbGVtZW50IGNvbXBhcmlzb24mIzM0OywKJiM0MzsJLmlucHV0ID0gewomIzQzOwkJLnJhd190eXBlcyA9IHsKJiM0MzsJCQkvKiBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQkvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSwJCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSwKJiM0MzsJCQkvKiBzdHJ1Y3QgZWxlbVsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQyg0LCAxLCAxKSwJCQkJLyogWzNdICovCiYjNDM7CQkJLyogc3RydWN0IGVsZW0geyBpbnQgeDsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJLyogZHVwbGljYXRlIHN0cnVjdCBjb250YWluZXIgKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksCQkJLyogWzVdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDYsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCA3LCAzMiksCiYjNDM7CQkJLyogZHVwbGljYXRlIHN0cnVjdCBlbGVtWzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDgsIDEsIDEpLAkJCQkvKiBbNl0gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoOSwgMSwgMSksCQkJCS8qIFs3XSAqLwomIzQzOwkJCS8qIGR1cGxpY2F0ZSBzdHJ1Y3QgZWxlbSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbOF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLAkJCS8qIFs5XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDBjb250YWluZXJcMGZpcnN0XDBzZWNvbmRcMGVsZW1cMHgmIzM0OyksCiYjNDM7CX0sCiYjNDM7CS5leHBlY3QgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSwJCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSwKJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksCQkJCS8qIFszXSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJQlRGX0VORF9SQVcsCiYjNDM7CQl9LAomIzQzOwkJQlRGX1NUUl9TRUMoJiMzNDtcMGludFwwY29udGFpbmVyXDBmaXJzdFwwc2Vjb25kXDBlbGVtXDB4JiMzNDspLAomIzQzOwl9LAomIzQzO30sCiB7CiAJLmRlc2NyID0gJiMzNDtkZWR1cDogc3RydWN0IGV4YW1wbGUgIzEmIzM0OywKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZS4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIHRvdWNoaW5nIHR3byBmaWxlczogYHRvb2xzL2xpYi9icGYvYnRmLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNgLiBUaGUgZmlyc3QgZmlsZSwgc3BlY2lmaWNhbGx5LCBoYXMgYSBzbWFsbCBjaGFuZ2Ugd2l0aGluIHRoZSBgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlc2AgZnVuY3Rpb24uIFRoZSBzZWNvbmQgZmlsZSBhZGRzIHNvbWUgdGVzdHMuCgpOb3csIG15IHJhZGFyJiMzOTtzIHVwLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIGltbWVkaWF0ZWx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgKnN0cmljdGx5KiBsaW1pdGVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLgoKQm90aCBmaWxlcyBhcmUgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGZsYWcgcmlnaHQgdGhlcmUg4oCTIGdlbmVyYWxseSwgY29kZSBpbiBgdG9vbHMvYCBpcyBhIHJlZCBoZXJyaW5nIGluIHRlcm1zIG9mIG5lZWRpbmcgaW1tZWRpYXRlIGZ1enppbmcuIEhvd2V2ZXIsIEkga25vdyB0aGUgQlBGIGxhbmRzY2FwZSB3ZWxsIGVub3VnaCB0byByZWFsaXplIHRoZXJlJiMzOTtzIGEga2VybmVsIGNvbXBvbmVudCBhbmQgYSB1c2VyLXNwYWNlIGNvbXBvbmVudC4gVGhlIGtleSBpcyB0byBkaXN0aW5ndWlzaCB0aGVtLiBga2VybmVsL2JwZi9idGYuY2AgaXMgdGhlICprZXJuZWwqIHNpZGUgb2YgdGhpbmdzLCBidXQgYHRvb2xzL2xpYi9icGYvYCBpcyB3aGVyZSB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBsaXZlcy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBwdXJlbHkgYSB1c2VyLXNwYWNlIGZ1bmN0aW9uLiBJZiBpdCAqb25seSogZXhpc3RzIHdpdGhpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgQlRGIGltcGxlbWVudGF0aW9uLCB0aGVuIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDt1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cyYjMzQ7IGNhdGVnb3J5LCBhbmQgSSBjYW4gY29uZmlkZW50bHkgbWFyayB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBub3QgYWxzbyBkZWZpbmVkIGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy9saWIvYnBmL2J0Zi5jPTQ3NzY9c3RhdGljIGlubGluZSBfX3UxNiBidGZfZndkX2tpbmQoc3RydWN0IGJ0Zl90eXBlICp0KVxuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDc4MC1cbnRvb2xzL2xpYi9icGYvYnRmLmM6NDc4MTpzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLCBpbnQgZGVwdGgpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ3ODIte1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzMi1cdFx0aWYgKGExLVx1MDAzZWluZGV4X3R5cGUgIT0gYTItXHUwMDNlaW5kZXhfdHlwZSBcdTAwMjZcdTAwMjZcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzMzpcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZWluZGV4X3R5cGUsIGEyLVx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzQtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzNi1cdFx0aWYgKGExLVx1MDAzZXR5cGUgIT0gYTItXHUwMDNldHlwZSBcdTAwMjZcdTAwMjZcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzNzpcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZXR5cGUsIGEyLVx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg1NC1cdFx0XHRcdGNvbnRpbnVlO1xudG9vbHMvbGliL2JwZi9idGYuYzo0ODU1Olx0XHRcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBtMS1cdTAwM2V0eXBlLCBtMi1cdTAwM2V0eXBlLCBkZXB0aCAtIDEpKSB7XG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTYtXHRcdFx0XHRpZiAodDEtXHUwMDNlbmFtZV9vZmYpIHtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NzUtXHRcdGlmICh0MS1cdTAwM2V0eXBlICE9IHQyLVx1MDAzZXR5cGUgXHUwMDI2XHUwMDI2XG50b29scy9saWIvYnBmL2J0Zi5jOjQ4NzY6XHRcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCB0MS1cdTAwM2V0eXBlLCB0Mi1cdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxudG9vbHMvbGliL2JwZi9idGYuYy00ODc3LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4ODMtXHRcdFx0XHRjb250aW51ZTtcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDg4NDpcdFx0XHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgcDEtXHUwMDNldHlwZSwgcDItXHUwMDNldHlwZSwgZGVwdGggLSAxKSlcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg4NS1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jPTQ5ODg9c3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCxcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTUwMTgtXHRcdCAqL1xudG9vbHMvbGliL2JwZi9idGYuYzo1MDE5Olx0XHRpZiAoYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBoeXBvdF90eXBlX2lkLCBjYW5kX2lkLCAxNikpXG50b29scy9saWIvYnBmL2J0Zi5jLTUwMjAtXHRcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0MwoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBSZWxldmFuY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNoYW5nZSBpcyAqc29sZWx5KiB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYnRmLmNgLiBMb29raW5nIGZ1cnRoZXIsIHRoZSBlbnRpcmUgcGF0Y2gmIzM5O3MgaW1wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvbGliL2JwZi9idGYuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY2AuIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiYjMzk7cyBTZWN0aW9uIDIsIGEgcGF0Y2ggZ2V0cyBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgICpvbmx5KiBpZiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUgYXJlYXMuIFRoaXMgY292ZXJzIERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIHNwZWxsaW5nIGNvcnJlY3Rpb25zLCBhbmQgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYHNhbXBsZXMvYCwgYHNjcmlwdHMvYCwgYW5kIGB1c3IvYCwgKnByb3ZpZGVkKiB0aGV5IGRvbiYjMzk7dCBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCBvciBtb2R1bGVzKS4KClRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyB1c2VyLXNwYWNlIHRvb2xzIGFuZCBsaWJyYXJpZXMgKHNwZWNpZmljYWxseSBsaWJicGYmIzM5O3MgQlRGIGRlZHVwbGljYXRpb24pIGFsb25nIHdpdGggc2VsZnRlc3RzLCBhbmQgaW1wb3J0YW50bHksIGl0ICpkb2VzIG5vdCogdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGlzIGZpcm1seSBwdXRzIGl0IGludG8gdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGNhdGVnb3J5LgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJJiMzOTtsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGVpdGhlciBhbiBlbXB0eSBhcnJheSBvciBudWxsLCBhbmQgbGlrZXdpc2UgYEZvY3VzU3ltYm9sc2AgdG8gZW1wdHkgb3IgbnVsbC4gVGhlIHJlYXNvbmluZyBJJiMzOTtsbCBwcm92aWRlIHdpbGwgYmUgY2xlYXIgYW5kIGNvbmNpc2U6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYCAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uKSBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgKEJQRiBzZWxmdGVzdHMpLiBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IHJlbGV2YW50IGZvciBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci4mIzM0OyBBbmQgZmluYWxseSwgYFdvcnRoRnV6emluZ2Agd2lsbCBiZSBzZXQgdG8gYGZhbHNlYC4KClJlYWR5IHRvIGV4ZWN1dGUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNTo1Ni41MTc1NjMyOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczMTYyMTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDU6NTYuNTE3NTY3NzU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4NDI2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWNmNmUwYTYxMGUxMTg1YWM4NGMyZDlmNjY5ZjAyNjA1NTYwMTA5NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuaW5kZXggODQxN2RlOTJkMDI4Mi4uNDFjYzMxNDA5MjVmYiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9idGYuY1xcbkBAIC00ODI3LDcgKzQ4MjcsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHRhMSA9IGJ0Zl9hcnJheSh0MSk7XFxuLVxcdFxcdGEyID0gYnRmX2FycmF5KHQxKTtcXG4rXFx0XFx0YTIgPSBidGZfYXJyYXkodDIpO1xcbiBcXG4gXFx0XFx0aWYgKGExLVxcdTAwM2VpbmRleF90eXBlICE9IGEyLVxcdTAwM2VpbmRleF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBhMS1cXHUwMDNlaW5kZXhfdHlwZSwgYTItXFx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcXG5pbmRleCA2N2I5MDE1Y2JkOTgwLi5kZjZhZDM4ZDI4N2RhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcXG5AQCAtNzA2Miw2ICs3MDYyLDEzMiBAQCBzdGF0aWMgc3RydWN0IGJ0Zl9kZWR1cF90ZXN0IGRlZHVwX3Rlc3RzW10gPSB7XFxuIFxcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwbG9uZyBpbnRcXFwiKSxcXG4gXFx0fSxcXG4gfSxcXG4re1xcbitcXHQuZGVzY3IgPSBcXFwiZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblxcXCIsXFxuK1xcdC5pbnB1dCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0Lyogc2lnbmVkIGludCAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cXG4rXFx0XFx0XFx0LyogdW5zaWduZWQgaW50ICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0Lyogc2lnbmVkIGludFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzNdICovXFxuK1xcdFxcdFxcdC8qIGR1cGxpY2F0ZSBzaWduZWQgaW50WzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0LyogdW5zaWduZWQgaW50WzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygyLCAyLCAxKSxcXHRcXHRcXHRcXHQvKiBbNV0gKi9cXG4rXFx0XFx0XFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHNpZ25lZCBpbnQgYlsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzZdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcXG4rXFx0XFx0XFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbN10gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDB1bnNpZ25lZCBpbnRcXFxcMHNcXFxcMGFcXFxcMGJcXFwiKSxcXG4rXFx0fSxcXG4rXFx0LmV4cGVjdCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFszXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXFx0XFx0XFx0XFx0LyogWzRdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbNV0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzZdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX0VORF9SQVcsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwdW5zaWduZWQgaW50XFxcXDBzXFxcXDBhXFxcXDBiXFxcIiksXFxuK1xcdH0sXFxuK30sXFxuK3tcXG4rXFx0LmRlc2NyID0gXFxcImRlZHVwOiBhcnJheSBlbGVtZW50IGNvbXBhcmlzb24gd2l0aCBzYW1lIGluZGV4IHR5cGVcXFwiLFxcbitcXHQuaW5wdXQgPSB7XFxuK1xcdFxcdC5yYXdfdHlwZXMgPSB7XFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbM10gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs0XSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdC8qIHN0cnVjdCBzIHsgaW50IGFbMV07IGludCBiWzFdOyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbNl0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgcyB7IGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzddICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCA0LCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX0VORF9SQVcsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwdW5zaWduZWQgaW50XFxcXDBzXFxcXDBhXFxcXDBiXFxcIiksXFxuK1xcdH0sXFxuK1xcdC5leHBlY3QgPSB7XFxuK1xcdFxcdC5yYXdfdHlwZXMgPSB7XFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbM10gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs0XSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFxcdFxcdFxcdC8qIFs2XSAqL1xcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA0LCAzMiksXFxuK1xcdFxcdFxcdEJURl9FTkRfUkFXLFxcbitcXHRcXHR9LFxcbitcXHRcXHRCVEZfU1RSX1NFQyhcXFwiXFxcXDBpbnRcXFxcMHVuc2lnbmVkIGludFxcXFwwc1xcXFwwYVxcXFwwYlxcXCIpLFxcbitcXHR9LFxcbit9LFxcbit7XFxuK1xcdC5kZXNjciA9IFxcXCJkZWR1cDogaWRlbnRpY2FsIGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblxcXCIsXFxuK1xcdC5pbnB1dCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0LyogaW50ICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXFx0XFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcXG4rXFx0XFx0XFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDQsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFszXSAqL1xcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgZWxlbSB7IGludCB4OyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHQvKiBkdXBsaWNhdGUgc3RydWN0IGNvbnRhaW5lciAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCA2LCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDcsIDMyKSxcXG4rXFx0XFx0XFx0LyogZHVwbGljYXRlIHN0cnVjdCBlbGVtWzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQyg4LCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbNl0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDksIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs3XSAqL1xcbitcXHRcXHRcXHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cXG4rXFx0XFx0XFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFxcdFxcdFxcdC8qIFs4XSAqL1xcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbOV0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDBjb250YWluZXJcXFxcMGZpcnN0XFxcXDBzZWNvbmRcXFxcMGVsZW1cXFxcMHhcXFwiKSxcXG4rXFx0fSxcXG4rXFx0LmV4cGVjdCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcXHRcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMzIpLFxcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzNdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDBjb250YWluZXJcXFxcMGZpcnN0XFxcXDBzZWNvbmRcXFxcMGVsZW1cXFxcMHhcXFwiKSxcXG4rXFx0fSxcXG4rfSxcXG4ge1xcbiBcXHQuZGVzY3IgPSBcXFwiZGVkdXA6IHN0cnVjdCBleGFtcGxlICMxXFxcIixcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDU6NTcuOTM2Njk0ODI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzMxMjQ2ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjZjZlMGE2MTBlMTE4NWFjODRjMmQ5ZjY2OWYwMjYwNTU2MDEwOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmNcbmluZGV4IDg0MTdkZTkyZDAyODIuLjQxY2MzMTQwOTI1ZmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNDgyNyw3ICs0ODI3LDcgQEAgc3RhdGljIGJvb2wgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBpZDEsIF9fdTMyIGlkMixcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdGExID0gYnRmX2FycmF5KHQxKTtcbi1cdFx0YTIgPSBidGZfYXJyYXkodDEpO1xuK1x0XHRhMiA9IGJ0Zl9hcnJheSh0Mik7XG4gXG4gXHRcdGlmIChhMS1cdTAwM2VpbmRleF90eXBlICE9IGEyLVx1MDAzZWluZGV4X3R5cGUgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBhMS1cdTAwM2VpbmRleF90eXBlLCBhMi1cdTAwM2VpbmRleF90eXBlLCBkZXB0aCAtIDEpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcbmluZGV4IDY3YjkwMTVjYmQ5ODAuLmRmNmFkMzhkMjg3ZGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcbkBAIC03MDYyLDYgKzcwNjIsMTMyIEBAIHN0YXRpYyBzdHJ1Y3QgYnRmX2RlZHVwX3Rlc3QgZGVkdXBfdGVzdHNbXSA9IHtcbiBcdFx0QlRGX1NUUl9TRUMoXCJcXDBpbnRcXDBsb25nIGludFwiKSxcbiBcdH0sXG4gfSxcbit7XG4rXHQuZGVzY3IgPSBcImRlZHVwOiBhcnJheSBlbGVtZW50IGNvbXBhcmlzb25cIixcbitcdC5pbnB1dCA9IHtcbitcdFx0LnJhd190eXBlcyA9IHtcbitcdFx0XHQvKiBzaWduZWQgaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0LyogdW5zaWduZWQgaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbitcdFx0XHQvKiBzaWduZWQgaW50WzFdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4rXHRcdFx0LyogZHVwbGljYXRlIHNpZ25lZCBpbnRbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbNF0gKi9cbitcdFx0XHQvKiB1bnNpZ25lZCBpbnRbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHQvKiBzdHJ1Y3QgcyB7IHNpZ25lZCBpbnQgYVsxXTsgc2lnbmVkIGludCBiWzFdOyB9ICovXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuK1x0XHRcdC8qIHN0cnVjdCBzIHsgc2lnbmVkIGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNCwgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSxcbitcdFx0XHRCVEZfRU5EX1JBVyxcbitcdFx0fSxcbitcdFx0QlRGX1NUUl9TRUMoXCJcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcIiksXG4rXHR9LFxuK1x0LmV4cGVjdCA9IHtcbitcdFx0LnJhd190eXBlcyA9IHtcbitcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuK1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcdFx0XHRcdC8qIFszXSAqL1xuK1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygyLCAyLCAxKSxcdFx0XHRcdC8qIFs0XSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA0LCAzMiksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCIpLFxuK1x0fSxcbit9LFxuK3tcbitcdC5kZXNjciA9IFwiZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiB3aXRoIHNhbWUgaW5kZXggdHlwZVwiLFxuK1x0LmlucHV0ID0ge1xuK1x0XHQucmF3X3R5cGVzID0ge1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcdFx0LyogWzJdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFx0XHRcdFx0LyogWzVdICovXG4rXHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4rXHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgdW5zaWduZWQgaW50IGJbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzddICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA1LCAzMiksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCIpLFxuK1x0fSxcbitcdC5leHBlY3QgPSB7XG4rXHRcdC5yYXdfdHlwZXMgPSB7XG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXHRcdFx0XHQvKiBbNF0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzVdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNCwgMzIpLFxuK1x0XHRcdEJURl9FTkRfUkFXLFxuK1x0XHR9LFxuK1x0XHRCVEZfU1RSX1NFQyhcIlxcMGludFxcMHVuc2lnbmVkIGludFxcMHNcXDBhXFwwYlwiKSxcbitcdH0sXG4rfSxcbit7XG4rXHQuZGVzY3IgPSBcImRlZHVwOiBpZGVudGljYWwgYXJyYXkgZWxlbWVudCBjb21wYXJpc29uXCIsXG4rXHQuaW5wdXQgPSB7XG4rXHRcdC5yYXdfdHlwZXMgPSB7XG4rXHRcdFx0LyogaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0Lyogc3RydWN0IGNvbnRhaW5lciB7IHN0cnVjdCBlbGVtIGZpcnN0WzFdOyBzdHJ1Y3QgZWxlbSBzZWNvbmRbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXHRcdFx0LyogWzJdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAzMiksXG4rXHRcdFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHQvKiBzdHJ1Y3QgZWxlbSB7IGludCB4OyB9ICovXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs0XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSxcbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGNvbnRhaW5lciAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgNiwgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDcsIDMyKSxcbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW1bMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoOCwgMSwgMSksXHRcdFx0XHQvKiBbNl0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoOSwgMSwgMSksXHRcdFx0XHQvKiBbN10gKi9cbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzhdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcdFx0XHQvKiBbOV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwY29udGFpbmVyXFwwZmlyc3RcXDBzZWNvbmRcXDBlbGVtXFwweFwiKSxcbitcdH0sXG4rXHQuZXhwZWN0ID0ge1xuK1x0XHQucmF3X3R5cGVzID0ge1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbMl0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzRdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuK1x0XHRcdEJURl9FTkRfUkFXLFxuK1x0XHR9LFxuK1x0XHRCVEZfU1RSX1NFQyhcIlxcMGludFxcMGNvbnRhaW5lclxcMGZpcnN0XFwwc2Vjb25kXFwwZWxlbVxcMHhcIiksXG4rXHR9LFxuK30sXG4ge1xuIFx0LmRlc2NyID0gXCJkZWR1cDogc3RydWN0IGV4YW1wbGUgIzFcIixcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNTo1Ny45MzY2OTU5ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjYxNjAwMDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyB0b3VjaGluZyB0d28gZmlsZXM6IGB0b29scy9saWIvYnBmL2J0Zi5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jYC4gVGhlIGZpcnN0IGZpbGUsIHNwZWNpZmljYWxseSwgaGFzIGEgc21hbGwgY2hhbmdlIHdpdGhpbiB0aGUgYGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXNgIGZ1bmN0aW9uLiBUaGUgc2Vjb25kIGZpbGUgYWRkcyBzb21lIHRlc3RzLlxuXG5Ob3csIG15IHJhZGFyJ3MgdXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gaW1tZWRpYXRlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSAqc3RyaWN0bHkqIGxpbWl0ZWQgdG8gdXNlci1zcGFjZSB0b29scyBhbmQgdGVzdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cblxuQm90aCBmaWxlcyBhcmUgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhhdCdzIGEgZmxhZyByaWdodCB0aGVyZSDigJMgZ2VuZXJhbGx5LCBjb2RlIGluIGB0b29scy9gIGlzIGEgcmVkIGhlcnJpbmcgaW4gdGVybXMgb2YgbmVlZGluZyBpbW1lZGlhdGUgZnV6emluZy4gSG93ZXZlciwgSSBrbm93IHRoZSBCUEYgbGFuZHNjYXBlIHdlbGwgZW5vdWdoIHRvIHJlYWxpemUgdGhlcmUncyBhIGtlcm5lbCBjb21wb25lbnQgYW5kIGEgdXNlci1zcGFjZSBjb21wb25lbnQuIFRoZSBrZXkgaXMgdG8gZGlzdGluZ3Vpc2ggdGhlbS4gYGtlcm5lbC9icGYvYnRmLmNgIGlzIHRoZSAqa2VybmVsKiBzaWRlIG9mIHRoaW5ncywgYnV0IGB0b29scy9saWIvYnBmL2AgaXMgd2hlcmUgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgbGl2ZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBwdXJlbHkgYSB1c2VyLXNwYWNlIGZ1bmN0aW9uLiBJZiBpdCAqb25seSogZXhpc3RzIHdpdGhpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwncyBCVEYgaW1wbGVtZW50YXRpb24sIHRoZW4gdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcInVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzXCIgY2F0ZWdvcnksIGFuZCBJIGNhbiBjb25maWRlbnRseSBtYXJrIHRoaXMgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXNgIGlzIG5vdCBhbHNvIGRlZmluZWQgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA2OjE0LjU1MjY5OTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM4Mzg5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy9saWIvYnBmL2J0Zi5jPTQ3NzY9c3RhdGljIGlubGluZSBfX3UxNiBidGZfZndkX2tpbmQoc3RydWN0IGJ0Zl90eXBlICp0KVxcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00NzgwLVxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDc4MTpzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLCBpbnQgZGVwdGgpXFxudG9vbHMvbGliL2JwZi9idGYuYy00NzgyLXtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzMi1cXHRcXHRpZiAoYTEtXFx1MDAzZWluZGV4X3R5cGUgIT0gYTItXFx1MDAzZWluZGV4X3R5cGUgXFx1MDAyNlxcdTAwMjZcXG50b29scy9saWIvYnBmL2J0Zi5jOjQ4MzM6XFx0XFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVxcdTAwM2VpbmRleF90eXBlLCBhMi1cXHUwMDNlaW5kZXhfdHlwZSwgZGVwdGggLSAxKSlcXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzQtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODM2LVxcdFxcdGlmIChhMS1cXHUwMDNldHlwZSAhPSBhMi1cXHUwMDNldHlwZSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzNzpcXHRcXHQgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgYTEtXFx1MDAzZXR5cGUsIGEyLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxudG9vbHMvbGliL2JwZi9idGYuYzo0ODU1OlxcdFxcdFxcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBtMS1cXHUwMDNldHlwZSwgbTItXFx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpIHtcXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTYtXFx0XFx0XFx0XFx0aWYgKHQxLVxcdTAwM2VuYW1lX29mZikge1xcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODc1LVxcdFxcdGlmICh0MS1cXHUwMDNldHlwZSAhPSB0Mi1cXHUwMDNldHlwZSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDg3NjpcXHRcXHQgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgdDEtXFx1MDAzZXR5cGUsIHQyLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg3Ny1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4ODMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxudG9vbHMvbGliL2JwZi9idGYuYzo0ODg0OlxcdFxcdFxcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBwMS1cXHUwMDNldHlwZSwgcDItXFx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODg1LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnRmLmM9NDk4OD1zdGF0aWMgaW50IGJ0Zl9kZWR1cF9pc19lcXVpdihzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBjYW5kX2lkLFxcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy01MDE4LVxcdFxcdCAqL1xcbnRvb2xzL2xpYi9icGYvYnRmLmM6NTAxOTpcXHRcXHRpZiAoYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBoeXBvdF90eXBlX2lkLCBjYW5kX2lkLCAxNikpXFxudG9vbHMvbGliL2JwZi9idGYuYy01MDIwLVxcdFxcdFxcdHJldHVybiAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNjoxNy4wNDY1NDg4NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjAyNTkxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBSZWxldmFuY2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjaGFuZ2UgaXMgKnNvbGVseSogd2l0aGluIGB0b29scy9saWIvYnBmL2J0Zi5jYC4gTG9va2luZyBmdXJ0aGVyLCB0aGUgZW50aXJlIHBhdGNoJ3MgaW1wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvbGliL2JwZi9idGYuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY2AuIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbidzIFNlY3Rpb24gMiwgYSBwYXRjaCBnZXRzIGZsYWdnZWQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgKm9ubHkqIGlmIGFsbCBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGVzZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBhcmVhcy4gVGhpcyBjb3ZlcnMgRG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgc3BlbGxpbmcgY29ycmVjdGlvbnMsIGFuZCBpbXBvcnRhbnRseSwgdXNlci1zcGFjZSBkaXJlY3RvcmllcyBsaWtlIGB0b29scy9gLCBgc2FtcGxlcy9gLCBgc2NyaXB0cy9gLCBhbmQgYHVzci9gLCAqcHJvdmlkZWQqIHRoZXkgZG9uJ3QgaW1wYWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXggb3IgbW9kdWxlcykuXG5cblRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyB1c2VyLXNwYWNlIHRvb2xzIGFuZCBsaWJyYXJpZXMgKHNwZWNpZmljYWxseSBsaWJicGYncyBCVEYgZGVkdXBsaWNhdGlvbikgYWxvbmcgd2l0aCBzZWxmdGVzdHMsIGFuZCBpbXBvcnRhbnRseSwgaXQgKmRvZXMgbm90KiB0b3VjaCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoaXMgZmlybWx5IHB1dHMgaXQgaW50byB0aGUgYFdvcnRoRnV6emluZz1mYWxzZWAgY2F0ZWdvcnkuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gZWl0aGVyIGFuIGVtcHR5IGFycmF5IG9yIG51bGwsIGFuZCBsaWtld2lzZSBgRm9jdXNTeW1ib2xzYCB0byBlbXB0eSBvciBudWxsLiBUaGUgcmVhc29uaW5nIEknbGwgcHJvdmlkZSB3aWxsIGJlIGNsZWFyIGFuZCBjb25jaXNlOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIGB0b29scy9saWIvYnBmL2AgKGxpYmJwZiBCVEYgZGVkdXBsaWNhdGlvbikgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIChCUEYgc2VsZnRlc3RzKS4gSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCByZWxldmFudCBmb3Iga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIgQW5kIGZpbmFsbHksIGBXb3J0aEZ1enppbmdgIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblJlYWR5IHRvIGV4ZWN1dGUgdGhlIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MywiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDY6MjEuMjQ5MTQyODQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZi8gKGxpYmJwZiBCVEYgZGVkdXBsaWNhdGlvbiBsb2dpYykgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAoQlBGIHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIG1ha2luZyBpdCBvdXQgb2Ygc2NvcGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDY6MjEuMjQ5MTY1MTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5hh2r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 21:04:39 +0000 UTC FinishedAt: 2026-09-08 21:06:22 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWNmNmUwYTYxMGUxMTg1YWM4NGMyZDlmNjY5ZjAyNjA1NTYwMTA5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmNcbmluZGV4IDg0MTdkZTkyZDAyODIuLjQxY2MzMTQwOTI1ZmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNDgyNyw3ICYjNDM7NDgyNyw3IEBAIHN0YXRpYyBib29sIGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgaWQxLCBfX3UzMiBpZDIsXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRhMSA9IGJ0Zl9hcnJheSh0MSk7XG4tXHRcdGEyID0gYnRmX2FycmF5KHQxKTtcbiYjNDM7XHRcdGEyID0gYnRmX2FycmF5KHQyKTtcbiBcbiBcdFx0aWYgKGExLVx1MDAzZWluZGV4X3R5cGUgIT0gYTItXHUwMDNlaW5kZXhfdHlwZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZWluZGV4X3R5cGUsIGEyLVx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuaW5kZXggNjdiOTAxNWNiZDk4MC4uZGY2YWQzOGQyODdkYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuQEAgLTcwNjIsNiAmIzQzOzcwNjIsMTMyIEBAIHN0YXRpYyBzdHJ1Y3QgYnRmX2RlZHVwX3Rlc3QgZGVkdXBfdGVzdHNbXSA9IHtcbiBcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwbG9uZyBpbnRcJiMzNDspLFxuIFx0fSxcbiB9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblwmIzM0OyxcbiYjNDM7XHQuaW5wdXQgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHQvKiBzaWduZWQgaW50ICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHQvKiB1bnNpZ25lZCBpbnQgKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbiYjNDM7XHRcdFx0Lyogc2lnbmVkIGludFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0LyogZHVwbGljYXRlIHNpZ25lZCBpbnRbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdC8qIHVuc2lnbmVkIGludFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHNpZ25lZCBpbnQgYlsxXTsgfSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcJiMzNDspLFxuJiM0MztcdH0sXG4mIzQzO1x0LmV4cGVjdCA9IHtcbiYjNDM7XHRcdC5yYXdfdHlwZXMgPSB7XG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0Mzt9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiB3aXRoIHNhbWUgaW5kZXggdHlwZVwmIzM0OyxcbiYjNDM7XHQuaW5wdXQgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcdFx0XHRcdC8qIFs0XSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4mIzQzO1x0XHRcdC8qIHN0cnVjdCBzIHsgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcJiMzNDspLFxuJiM0MztcdH0sXG4mIzQzO1x0LmV4cGVjdCA9IHtcbiYjNDM7XHRcdC5yYXdfdHlwZXMgPSB7XG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0Mzt9LFxuJiM0Mzt7XG4mIzQzO1x0LmRlc2NyID0gXCYjMzQ7ZGVkdXA6IGlkZW50aWNhbCBhcnJheSBlbGVtZW50IGNvbXBhcmlzb25cJiMzNDssXG4mIzQzO1x0LmlucHV0ID0ge1xuJiM0MztcdFx0LnJhd190eXBlcyA9IHtcbiYjNDM7XHRcdFx0LyogaW50ICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuJiM0MztcdFx0XHQvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXHRcdFx0LyogWzJdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCAzLCAwKSxcbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcbiYjNDM7XHRcdFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDQsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4mIzQzO1x0XHRcdC8qIHN0cnVjdCBlbGVtIHsgaW50IHg7IH0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs0XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4mIzQzO1x0XHRcdC8qIGR1cGxpY2F0ZSBzdHJ1Y3QgY29udGFpbmVyICovXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDYsIDApLFxuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNywgMzIpLFxuJiM0MztcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW1bMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDgsIDEsIDEpLFx0XHRcdFx0LyogWzZdICovXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQyg5LCAxLCAxKSxcdFx0XHRcdC8qIFs3XSAqL1xuJiM0MztcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs4XSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4mIzQzO1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcdFx0XHQvKiBbOV0gKi9cbiYjNDM7XHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuJiM0MztcdFx0XHRCVEZfRU5EX1JBVyxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRCVEZfU1RSX1NFQyhcJiMzNDtcXDBpbnRcXDBjb250YWluZXJcXDBmaXJzdFxcMHNlY29uZFxcMGVsZW1cXDB4XCYjMzQ7KSxcbiYjNDM7XHR9LFxuJiM0MztcdC5leHBlY3QgPSB7XG4mIzQzO1x0XHQucmF3X3R5cGVzID0ge1xuJiM0MztcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbiYjNDM7XHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMiksIDIsIDgpLFx0XHRcdC8qIFsyXSAqL1xuJiM0MztcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAzMiksXG4mIzQzO1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQyg0LCAxLCAxKSxcdFx0XHRcdC8qIFszXSAqL1xuJiM0MztcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzRdICovXG4mIzQzO1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSxcbiYjNDM7XHRcdFx0QlRGX0VORF9SQVcsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0QlRGX1NUUl9TRUMoXCYjMzQ7XFwwaW50XFwwY29udGFpbmVyXFwwZmlyc3RcXDBzZWNvbmRcXDBlbGVtXFwweFwmIzM0OyksXG4mIzQzO1x0fSxcbiYjNDM7fSxcbiB7XG4gXHQuZGVzY3IgPSBcJiMzNDtkZWR1cDogc3RydWN0IGV4YW1wbGUgIzFcJiMzNDssXG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVjZjZlMGE2MTBlMTE4NWFjODRjMmQ5ZjY2OWYwMjYwNTU2MDEwOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmMKaW5kZXggODQxN2RlOTJkMDI4Mi4uNDFjYzMxNDA5MjVmYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2J0Zi5jCkBAIC00ODI3LDcgJiM0Mzs0ODI3LDcgQEAgc3RhdGljIGJvb2wgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBpZDEsIF9fdTMyIGlkMiwKIAkJCXJldHVybiBmYWxzZTsKIAogCQlhMSA9IGJ0Zl9hcnJheSh0MSk7Ci0JCWEyID0gYnRmX2FycmF5KHQxKTsKJiM0MzsJCWEyID0gYnRmX2FycmF5KHQyKTsKIAogCQlpZiAoYTEtJmd0O2luZGV4X3R5cGUgIT0gYTItJmd0O2luZGV4X3R5cGUgJmFtcDsmYW1wOwogCQkgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgYTEtJmd0O2luZGV4X3R5cGUsIGEyLSZndDtpbmRleF90eXBlLCBkZXB0aCAtIDEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwppbmRleCA2N2I5MDE1Y2JkOTgwLi5kZjZhZDM4ZDI4N2RhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwpAQCAtNzA2Miw2ICYjNDM7NzA2MiwxMzIgQEAgc3RhdGljIHN0cnVjdCBidGZfZGVkdXBfdGVzdCBkZWR1cF90ZXN0c1tdID0gewogCQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDBsb25nIGludCYjMzQ7KSwKIAl9LAogfSwKJiM0Mzt7CiYjNDM7CS5kZXNjciA9ICYjMzQ7ZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiYjMzQ7LAomIzQzOwkuaW5wdXQgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCS8qIHNpZ25lZCBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQkvKiB1bnNpZ25lZCBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksCQkvKiBbMl0gKi8KJiM0MzsJCQkvKiBzaWduZWQgaW50WzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLAkJCQkvKiBbM10gKi8KJiM0MzsJCQkvKiBkdXBsaWNhdGUgc2lnbmVkIGludFsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSwJCQkJLyogWzRdICovCiYjNDM7CQkJLyogdW5zaWduZWQgaW50WzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLAkJCQkvKiBbNV0gKi8KJiM0MzsJCQkvKiBzdHJ1Y3QgcyB7IHNpZ25lZCBpbnQgYVsxXTsgc2lnbmVkIGludCBiWzFdOyB9ICovCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs2XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLAomIzQzOwkJCS8qIHN0cnVjdCBzIHsgc2lnbmVkIGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSwJCQkvKiBbN10gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNCwgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDB1bnNpZ25lZCBpbnRcMHNcMGFcMGImIzM0OyksCiYjNDM7CX0sCiYjNDM7CS5leHBlY3QgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSwJCS8qIFsyXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSwJCQkJLyogWzNdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDIsIDIsIDEpLAkJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzVdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs2XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNCwgMzIpLAomIzQzOwkJCUJURl9FTkRfUkFXLAomIzQzOwkJfSwKJiM0MzsJCUJURl9TVFJfU0VDKCYjMzQ7XDBpbnRcMHVuc2lnbmVkIGludFwwc1wwYVwwYiYjMzQ7KSwKJiM0MzsJfSwKJiM0Mzt9LAomIzQzO3sKJiM0MzsJLmRlc2NyID0gJiMzNDtkZWR1cDogYXJyYXkgZWxlbWVudCBjb21wYXJpc29uIHdpdGggc2FtZSBpbmRleCB0eXBlJiMzNDssCiYjNDM7CS5pbnB1dCA9IHsKJiM0MzsJCS5yYXdfdHlwZXMgPSB7CiYjNDM7CQkJQlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovCiYjNDM7CQkJQlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLAkJLyogWzJdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLAkJCQkvKiBbM10gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksCQkJCS8qIFs0XSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygyLCAxLCAxKSwJCQkJLyogWzVdICovCiYjNDM7CQkJLyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzZdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksCiYjNDM7CQkJLyogc3RydWN0IHMgeyBpbnQgYVsxXTsgdW5zaWduZWQgaW50IGJbMV07IH0gKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksCQkJLyogWzddICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA1LCAzMiksCiYjNDM7CQkJQlRGX0VORF9SQVcsCiYjNDM7CQl9LAomIzQzOwkJQlRGX1NUUl9TRUMoJiMzNDtcMGludFwwdW5zaWduZWQgaW50XDBzXDBhXDBiJiMzNDspLAomIzQzOwl9LAomIzQzOwkuZXhwZWN0ID0gewomIzQzOwkJLnJhd190eXBlcyA9IHsKJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksCQkJCS8qIFszXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQygyLCAxLCAxKSwJCQkJLyogWzRdICovCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLAkJCS8qIFs1XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSwKJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLAomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSwJCQkvKiBbNl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDB1bnNpZ25lZCBpbnRcMHNcMGFcMGImIzM0OyksCiYjNDM7CX0sCiYjNDM7fSwKJiM0Mzt7CiYjNDM7CS5kZXNjciA9ICYjMzQ7ZGVkdXA6IGlkZW50aWNhbCBhcnJheSBlbGVtZW50IGNvbXBhcmlzb24mIzM0OywKJiM0MzsJLmlucHV0ID0gewomIzQzOwkJLnJhd190eXBlcyA9IHsKJiM0MzsJCQkvKiBpbnQgKi8KJiM0MzsJCQlCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi8KJiM0MzsJCQkvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSwJCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSwKJiM0MzsJCQkvKiBzdHJ1Y3QgZWxlbVsxXSAqLwomIzQzOwkJCUJURl9UWVBFX0FSUkFZX0VOQyg0LCAxLCAxKSwJCQkJLyogWzNdICovCiYjNDM7CQkJLyogc3RydWN0IGVsZW0geyBpbnQgeDsgfSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJLyogZHVwbGljYXRlIHN0cnVjdCBjb250YWluZXIgKi8KJiM0MzsJCQlCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksCQkJLyogWzVdICovCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDYsIDApLAomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCA3LCAzMiksCiYjNDM7CQkJLyogZHVwbGljYXRlIHN0cnVjdCBlbGVtWzFdICovCiYjNDM7CQkJQlRGX1RZUEVfQVJSQVlfRU5DKDgsIDEsIDEpLAkJCQkvKiBbNl0gKi8KJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoOSwgMSwgMSksCQkJCS8qIFs3XSAqLwomIzQzOwkJCS8qIGR1cGxpY2F0ZSBzdHJ1Y3QgZWxlbSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbOF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJQlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLAkJCS8qIFs5XSAqLwomIzQzOwkJCUJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSwKJiM0MzsJCQlCVEZfRU5EX1JBVywKJiM0MzsJCX0sCiYjNDM7CQlCVEZfU1RSX1NFQygmIzM0O1wwaW50XDBjb250YWluZXJcMGZpcnN0XDBzZWNvbmRcMGVsZW1cMHgmIzM0OyksCiYjNDM7CX0sCiYjNDM7CS5leHBlY3QgPSB7CiYjNDM7CQkucmF3X3R5cGVzID0gewomIzQzOwkJCUJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSwJCQkvKiBbMl0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksCiYjNDM7CQkJQlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSwKJiM0MzsJCQlCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksCQkJCS8qIFszXSAqLwomIzQzOwkJCUJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSwJCQkvKiBbNF0gKi8KJiM0MzsJCQlCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksCiYjNDM7CQkJQlRGX0VORF9SQVcsCiYjNDM7CQl9LAomIzQzOwkJQlRGX1NUUl9TRUMoJiMzNDtcMGludFwwY29udGFpbmVyXDBmaXJzdFwwc2Vjb25kXDBlbGVtXDB4JiMzNDspLAomIzQzOwl9LAomIzQzO30sCiB7CiAJLmRlc2NyID0gJiMzNDtkZWR1cDogc3RydWN0IGV4YW1wbGUgIzEmIzM0OywKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZS4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIHRvdWNoaW5nIHR3byBmaWxlczogYHRvb2xzL2xpYi9icGYvYnRmLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNgLiBUaGUgZmlyc3QgZmlsZSwgc3BlY2lmaWNhbGx5LCBoYXMgYSBzbWFsbCBjaGFuZ2Ugd2l0aGluIHRoZSBgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlc2AgZnVuY3Rpb24uIFRoZSBzZWNvbmQgZmlsZSBhZGRzIHNvbWUgdGVzdHMuCgpOb3csIG15IHJhZGFyJiMzOTtzIHVwLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIGltbWVkaWF0ZWx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgKnN0cmljdGx5KiBsaW1pdGVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLgoKQm90aCBmaWxlcyBhcmUgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGZsYWcgcmlnaHQgdGhlcmUg4oCTIGdlbmVyYWxseSwgY29kZSBpbiBgdG9vbHMvYCBpcyBhIHJlZCBoZXJyaW5nIGluIHRlcm1zIG9mIG5lZWRpbmcgaW1tZWRpYXRlIGZ1enppbmcuIEhvd2V2ZXIsIEkga25vdyB0aGUgQlBGIGxhbmRzY2FwZSB3ZWxsIGVub3VnaCB0byByZWFsaXplIHRoZXJlJiMzOTtzIGEga2VybmVsIGNvbXBvbmVudCBhbmQgYSB1c2VyLXNwYWNlIGNvbXBvbmVudC4gVGhlIGtleSBpcyB0byBkaXN0aW5ndWlzaCB0aGVtLiBga2VybmVsL2JwZi9idGYuY2AgaXMgdGhlICprZXJuZWwqIHNpZGUgb2YgdGhpbmdzLCBidXQgYHRvb2xzL2xpYi9icGYvYCBpcyB3aGVyZSB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBsaXZlcy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBwdXJlbHkgYSB1c2VyLXNwYWNlIGZ1bmN0aW9uLiBJZiBpdCAqb25seSogZXhpc3RzIHdpdGhpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgQlRGIGltcGxlbWVudGF0aW9uLCB0aGVuIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDt1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cyYjMzQ7IGNhdGVnb3J5LCBhbmQgSSBjYW4gY29uZmlkZW50bHkgbWFyayB0aGlzIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBub3QgYWxzbyBkZWZpbmVkIGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy9saWIvYnBmL2J0Zi5jPTQ3NzY9c3RhdGljIGlubGluZSBfX3UxNiBidGZfZndkX2tpbmQoc3RydWN0IGJ0Zl90eXBlICp0KVxuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDc4MC1cbnRvb2xzL2xpYi9icGYvYnRmLmM6NDc4MTpzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLCBpbnQgZGVwdGgpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ3ODIte1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzMi1cdFx0aWYgKGExLVx1MDAzZWluZGV4X3R5cGUgIT0gYTItXHUwMDNlaW5kZXhfdHlwZSBcdTAwMjZcdTAwMjZcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzMzpcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZWluZGV4X3R5cGUsIGEyLVx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzQtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzNi1cdFx0aWYgKGExLVx1MDAzZXR5cGUgIT0gYTItXHUwMDNldHlwZSBcdTAwMjZcdTAwMjZcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzNzpcdFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVx1MDAzZXR5cGUsIGEyLVx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg1NC1cdFx0XHRcdGNvbnRpbnVlO1xudG9vbHMvbGliL2JwZi9idGYuYzo0ODU1Olx0XHRcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBtMS1cdTAwM2V0eXBlLCBtMi1cdTAwM2V0eXBlLCBkZXB0aCAtIDEpKSB7XG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTYtXHRcdFx0XHRpZiAodDEtXHUwMDNlbmFtZV9vZmYpIHtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NzUtXHRcdGlmICh0MS1cdTAwM2V0eXBlICE9IHQyLVx1MDAzZXR5cGUgXHUwMDI2XHUwMDI2XG50b29scy9saWIvYnBmL2J0Zi5jOjQ4NzY6XHRcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCB0MS1cdTAwM2V0eXBlLCB0Mi1cdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxudG9vbHMvbGliL2JwZi9idGYuYy00ODc3LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4ODMtXHRcdFx0XHRjb250aW51ZTtcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDg4NDpcdFx0XHRpZiAoIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgcDEtXHUwMDNldHlwZSwgcDItXHUwMDNldHlwZSwgZGVwdGggLSAxKSlcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg4NS1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jPTQ5ODg9c3RhdGljIGludCBidGZfZGVkdXBfaXNfZXF1aXYoc3RydWN0IGJ0Zl9kZWR1cCAqZCwgX191MzIgY2FuZF9pZCxcbi0tXG50b29scy9saWIvYnBmL2J0Zi5jLTUwMTgtXHRcdCAqL1xudG9vbHMvbGliL2JwZi9idGYuYzo1MDE5Olx0XHRpZiAoYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBoeXBvdF90eXBlX2lkLCBjYW5kX2lkLCAxNikpXG50b29scy9saWIvYnBmL2J0Zi5jLTUwMjAtXHRcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0MwoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBSZWxldmFuY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNoYW5nZSBpcyAqc29sZWx5KiB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYnRmLmNgLiBMb29raW5nIGZ1cnRoZXIsIHRoZSBlbnRpcmUgcGF0Y2gmIzM5O3MgaW1wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvbGliL2JwZi9idGYuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY2AuIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiYjMzk7cyBTZWN0aW9uIDIsIGEgcGF0Y2ggZ2V0cyBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgICpvbmx5KiBpZiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gdGhlc2Ugbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUgYXJlYXMuIFRoaXMgY292ZXJzIERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIHNwZWxsaW5nIGNvcnJlY3Rpb25zLCBhbmQgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYHNhbXBsZXMvYCwgYHNjcmlwdHMvYCwgYW5kIGB1c3IvYCwgKnByb3ZpZGVkKiB0aGV5IGRvbiYjMzk7dCBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCBvciBtb2R1bGVzKS4KClRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyB1c2VyLXNwYWNlIHRvb2xzIGFuZCBsaWJyYXJpZXMgKHNwZWNpZmljYWxseSBsaWJicGYmIzM5O3MgQlRGIGRlZHVwbGljYXRpb24pIGFsb25nIHdpdGggc2VsZnRlc3RzLCBhbmQgaW1wb3J0YW50bHksIGl0ICpkb2VzIG5vdCogdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGlzIGZpcm1seSBwdXRzIGl0IGludG8gdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGNhdGVnb3J5LgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJJiMzOTtsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGVpdGhlciBhbiBlbXB0eSBhcnJheSBvciBudWxsLCBhbmQgbGlrZXdpc2UgYEZvY3VzU3ltYm9sc2AgdG8gZW1wdHkgb3IgbnVsbC4gVGhlIHJlYXNvbmluZyBJJiMzOTtsbCBwcm92aWRlIHdpbGwgYmUgY2xlYXIgYW5kIGNvbmNpc2U6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYCAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uKSBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgKEJQRiBzZWxmdGVzdHMpLiBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IHJlbGV2YW50IGZvciBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci4mIzM0OyBBbmQgZmluYWxseSwgYFdvcnRoRnV6emluZ2Agd2lsbCBiZSBzZXQgdG8gYGZhbHNlYC4KClJlYWR5IHRvIGV4ZWN1dGUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNTo1Ni41MTc1NjMyOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczMTYyMTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDU6NTYuNTE3NTY3NzU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4NDI2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWNmNmUwYTYxMGUxMTg1YWM4NGMyZDlmNjY5ZjAyNjA1NTYwMTA5NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnRmLmMgYi90b29scy9saWIvYnBmL2J0Zi5jXFxuaW5kZXggODQxN2RlOTJkMDI4Mi4uNDFjYzMxNDA5MjVmYiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9idGYuY1xcbkBAIC00ODI3LDcgKzQ4MjcsNyBAQCBzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHRhMSA9IGJ0Zl9hcnJheSh0MSk7XFxuLVxcdFxcdGEyID0gYnRmX2FycmF5KHQxKTtcXG4rXFx0XFx0YTIgPSBidGZfYXJyYXkodDIpO1xcbiBcXG4gXFx0XFx0aWYgKGExLVxcdTAwM2VpbmRleF90eXBlICE9IGEyLVxcdTAwM2VpbmRleF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBhMS1cXHUwMDNlaW5kZXhfdHlwZSwgYTItXFx1MDAzZWluZGV4X3R5cGUsIGRlcHRoIC0gMSkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcXG5pbmRleCA2N2I5MDE1Y2JkOTgwLi5kZjZhZDM4ZDI4N2RhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcXG5AQCAtNzA2Miw2ICs3MDYyLDEzMiBAQCBzdGF0aWMgc3RydWN0IGJ0Zl9kZWR1cF90ZXN0IGRlZHVwX3Rlc3RzW10gPSB7XFxuIFxcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwbG9uZyBpbnRcXFwiKSxcXG4gXFx0fSxcXG4gfSxcXG4re1xcbitcXHQuZGVzY3IgPSBcXFwiZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblxcXCIsXFxuK1xcdC5pbnB1dCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0Lyogc2lnbmVkIGludCAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cXG4rXFx0XFx0XFx0LyogdW5zaWduZWQgaW50ICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0Lyogc2lnbmVkIGludFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzNdICovXFxuK1xcdFxcdFxcdC8qIGR1cGxpY2F0ZSBzaWduZWQgaW50WzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0LyogdW5zaWduZWQgaW50WzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygyLCAyLCAxKSxcXHRcXHRcXHRcXHQvKiBbNV0gKi9cXG4rXFx0XFx0XFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHNpZ25lZCBpbnQgYlsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzZdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcXG4rXFx0XFx0XFx0Lyogc3RydWN0IHMgeyBzaWduZWQgaW50IGFbMV07IHVuc2lnbmVkIGludCBiWzFdOyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbN10gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNSwgMzIpLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDB1bnNpZ25lZCBpbnRcXFxcMHNcXFxcMGFcXFxcMGJcXFwiKSxcXG4rXFx0fSxcXG4rXFx0LmV4cGVjdCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFszXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXFx0XFx0XFx0XFx0LyogWzRdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbNV0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzZdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDQsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX0VORF9SQVcsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwdW5zaWduZWQgaW50XFxcXDBzXFxcXDBhXFxcXDBiXFxcIiksXFxuK1xcdH0sXFxuK30sXFxuK3tcXG4rXFx0LmRlc2NyID0gXFxcImRlZHVwOiBhcnJheSBlbGVtZW50IGNvbXBhcmlzb24gd2l0aCBzYW1lIGluZGV4IHR5cGVcXFwiLFxcbitcXHQuaW5wdXQgPSB7XFxuK1xcdFxcdC5yYXdfdHlwZXMgPSB7XFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbM10gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs0XSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdC8qIHN0cnVjdCBzIHsgaW50IGFbMV07IGludCBiWzFdOyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcXHRcXHRcXHQvKiBbNl0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgcyB7IGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzddICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCA0LCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX0VORF9SQVcsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdEJURl9TVFJfU0VDKFxcXCJcXFxcMGludFxcXFwwdW5zaWduZWQgaW50XFxcXDBzXFxcXDBhXFxcXDBiXFxcIiksXFxuK1xcdH0sXFxuK1xcdC5leHBlY3QgPSB7XFxuK1xcdFxcdC5yYXdfdHlwZXMgPSB7XFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbM10gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs0XSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcXG4rXFx0XFx0XFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFxcdFxcdFxcdC8qIFs2XSAqL1xcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA0LCAzMiksXFxuK1xcdFxcdFxcdEJURl9FTkRfUkFXLFxcbitcXHRcXHR9LFxcbitcXHRcXHRCVEZfU1RSX1NFQyhcXFwiXFxcXDBpbnRcXFxcMHVuc2lnbmVkIGludFxcXFwwc1xcXFwwYVxcXFwwYlxcXCIpLFxcbitcXHR9LFxcbit9LFxcbit7XFxuK1xcdC5kZXNjciA9IFxcXCJkZWR1cDogaWRlbnRpY2FsIGFycmF5IGVsZW1lbnQgY29tcGFyaXNvblxcXCIsXFxuK1xcdC5pbnB1dCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0LyogaW50ICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgY29udGFpbmVyIHsgc3RydWN0IGVsZW0gZmlyc3RbMV07IHN0cnVjdCBlbGVtIHNlY29uZFsxXTsgfSAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXFx0XFx0XFx0LyogWzJdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCAzLCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcXG4rXFx0XFx0XFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDQsIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFszXSAqL1xcbitcXHRcXHRcXHQvKiBzdHJ1Y3QgZWxlbSB7IGludCB4OyB9ICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHQvKiBkdXBsaWNhdGUgc3RydWN0IGNvbnRhaW5lciAqL1xcbitcXHRcXHRcXHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXFx0XFx0XFx0LyogWzVdICovXFxuK1xcdFxcdFxcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDMpLCA2LCAwKSxcXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDcsIDMyKSxcXG4rXFx0XFx0XFx0LyogZHVwbGljYXRlIHN0cnVjdCBlbGVtWzFdICovXFxuK1xcdFxcdFxcdEJURl9UWVBFX0FSUkFZX0VOQyg4LCAxLCAxKSxcXHRcXHRcXHRcXHQvKiBbNl0gKi9cXG4rXFx0XFx0XFx0QlRGX1RZUEVfQVJSQVlfRU5DKDksIDEsIDEpLFxcdFxcdFxcdFxcdC8qIFs3XSAqL1xcbitcXHRcXHRcXHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cXG4rXFx0XFx0XFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFxcdFxcdFxcdC8qIFs4XSAqL1xcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbOV0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDBjb250YWluZXJcXFxcMGZpcnN0XFxcXDBzZWNvbmRcXFxcMGVsZW1cXFxcMHhcXFwiKSxcXG4rXFx0fSxcXG4rXFx0LmV4cGVjdCA9IHtcXG4rXFx0XFx0LnJhd190eXBlcyA9IHtcXG4rXFx0XFx0XFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcXHRcXHRcXHQvKiBbMl0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDMsIDApLFxcbitcXHRcXHRcXHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMzIpLFxcbitcXHRcXHRcXHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXFx0XFx0XFx0XFx0LyogWzNdICovXFxuK1xcdFxcdFxcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcXHRcXHRcXHQvKiBbNF0gKi9cXG4rXFx0XFx0XFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxcbitcXHRcXHRcXHRCVEZfRU5EX1JBVyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0QlRGX1NUUl9TRUMoXFxcIlxcXFwwaW50XFxcXDBjb250YWluZXJcXFxcMGZpcnN0XFxcXDBzZWNvbmRcXFxcMGVsZW1cXFxcMHhcXFwiKSxcXG4rXFx0fSxcXG4rfSxcXG4ge1xcbiBcXHQuZGVzY3IgPSBcXFwiZGVkdXA6IHN0cnVjdCBleGFtcGxlICMxXFxcIixcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDU6NTcuOTM2Njk0ODI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzMxMjQ2ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYvIChsaWJicGYgQlRGIGRlZHVwbGljYXRpb24gbG9naWMpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKEJQRiBzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgaXQgb3V0IG9mIHNjb3BlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjZjZlMGE2MTBlMTE4NWFjODRjMmQ5ZjY2OWYwMjYwNTU2MDEwOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA1OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9idGYuYyBiL3Rvb2xzL2xpYi9icGYvYnRmLmNcbmluZGV4IDg0MTdkZTkyZDAyODIuLjQxY2MzMTQwOTI1ZmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2J0Zi5jXG4rKysgYi90b29scy9saWIvYnBmL2J0Zi5jXG5AQCAtNDgyNyw3ICs0ODI3LDcgQEAgc3RhdGljIGJvb2wgYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBpZDEsIF9fdTMyIGlkMixcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdGExID0gYnRmX2FycmF5KHQxKTtcbi1cdFx0YTIgPSBidGZfYXJyYXkodDEpO1xuK1x0XHRhMiA9IGJ0Zl9hcnJheSh0Mik7XG4gXG4gXHRcdGlmIChhMS1cdTAwM2VpbmRleF90eXBlICE9IGEyLVx1MDAzZWluZGV4X3R5cGUgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBhMS1cdTAwM2VpbmRleF90eXBlLCBhMi1cdTAwM2VpbmRleF90eXBlLCBkZXB0aCAtIDEpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcbmluZGV4IDY3YjkwMTVjYmQ5ODAuLmRmNmFkMzhkMjg3ZGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmNcbkBAIC03MDYyLDYgKzcwNjIsMTMyIEBAIHN0YXRpYyBzdHJ1Y3QgYnRmX2RlZHVwX3Rlc3QgZGVkdXBfdGVzdHNbXSA9IHtcbiBcdFx0QlRGX1NUUl9TRUMoXCJcXDBpbnRcXDBsb25nIGludFwiKSxcbiBcdH0sXG4gfSxcbit7XG4rXHQuZGVzY3IgPSBcImRlZHVwOiBhcnJheSBlbGVtZW50IGNvbXBhcmlzb25cIixcbitcdC5pbnB1dCA9IHtcbitcdFx0LnJhd190eXBlcyA9IHtcbitcdFx0XHQvKiBzaWduZWQgaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0LyogdW5zaWduZWQgaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbitcdFx0XHQvKiBzaWduZWQgaW50WzFdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4rXHRcdFx0LyogZHVwbGljYXRlIHNpZ25lZCBpbnRbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbNF0gKi9cbitcdFx0XHQvKiB1bnNpZ25lZCBpbnRbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMiwgMSksXHRcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHQvKiBzdHJ1Y3QgcyB7IHNpZ25lZCBpbnQgYVsxXTsgc2lnbmVkIGludCBiWzFdOyB9ICovXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgMywgMzIpLFxuK1x0XHRcdC8qIHN0cnVjdCBzIHsgc2lnbmVkIGludCBhWzFdOyB1bnNpZ25lZCBpbnQgYlsxXTsgfSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbN10gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgNCwgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDUsIDMyKSxcbitcdFx0XHRCVEZfRU5EX1JBVyxcbitcdFx0fSxcbitcdFx0QlRGX1NUUl9TRUMoXCJcXDBpbnRcXDB1bnNpZ25lZCBpbnRcXDBzXFwwYVxcMGJcIiksXG4rXHR9LFxuK1x0LmV4cGVjdCA9IHtcbitcdFx0LnJhd190eXBlcyA9IHtcbitcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDEpLCBCVEZfSU5UX1NJR05FRCwgMCwgMzIsIDQpLCAvKiBbMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9JTlRfRU5DKE5BTUVfTlRIKDIpLCAwLCAwLCAzMiwgNCksXHRcdC8qIFsyXSAqL1xuK1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygxLCAxLCAxKSxcdFx0XHRcdC8qIFszXSAqL1xuK1x0XHRcdEJURl9UWVBFX0FSUkFZX0VOQygyLCAyLCAxKSxcdFx0XHRcdC8qIFs0XSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDMpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg0KSwgMywgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNSksIDMsIDMyKSxcbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA0LCAzMiksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCIpLFxuK1x0fSxcbit9LFxuK3tcbitcdC5kZXNjciA9IFwiZGVkdXA6IGFycmF5IGVsZW1lbnQgY29tcGFyaXNvbiB3aXRoIHNhbWUgaW5kZXggdHlwZVwiLFxuK1x0LmlucHV0ID0ge1xuK1x0XHQucmF3X3R5cGVzID0ge1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMiksIDAsIDAsIDMyLCA0KSxcdFx0LyogWzJdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzNdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDEsIDEsIDEpLFx0XHRcdFx0LyogWzRdICovXG4rXHRcdFx0QlRGX1RZUEVfQVJSQVlfRU5DKDIsIDEsIDEpLFx0XHRcdFx0LyogWzVdICovXG4rXHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgaW50IGJbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzZdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4rXHRcdFx0Lyogc3RydWN0IHMgeyBpbnQgYVsxXTsgdW5zaWduZWQgaW50IGJbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzddICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDQsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCA1LCAzMiksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwdW5zaWduZWQgaW50XFwwc1xcMGFcXDBiXCIpLFxuK1x0fSxcbitcdC5leHBlY3QgPSB7XG4rXHRcdC5yYXdfdHlwZXMgPSB7XG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgyKSwgMCwgMCwgMzIsIDQpLFx0XHQvKiBbMl0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMSwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoMiwgMSwgMSksXHRcdFx0XHQvKiBbNF0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgzKSwgMiwgOCksXHRcdFx0LyogWzVdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDUpLCAzLCAzMiksXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoMyksIDIsIDgpLFx0XHRcdC8qIFs2XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAwKSxcbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg1KSwgNCwgMzIpLFxuK1x0XHRcdEJURl9FTkRfUkFXLFxuK1x0XHR9LFxuK1x0XHRCVEZfU1RSX1NFQyhcIlxcMGludFxcMHVuc2lnbmVkIGludFxcMHNcXDBhXFwwYlwiKSxcbitcdH0sXG4rfSxcbit7XG4rXHQuZGVzY3IgPSBcImRlZHVwOiBpZGVudGljYWwgYXJyYXkgZWxlbWVudCBjb21wYXJpc29uXCIsXG4rXHQuaW5wdXQgPSB7XG4rXHRcdC5yYXdfdHlwZXMgPSB7XG4rXHRcdFx0LyogaW50ICovXG4rXHRcdFx0QlRGX1RZUEVfSU5UX0VOQyhOQU1FX05USCgxKSwgQlRGX0lOVF9TSUdORUQsIDAsIDMyLCA0KSwgLyogWzFdICovXG4rXHRcdFx0Lyogc3RydWN0IGNvbnRhaW5lciB7IHN0cnVjdCBlbGVtIGZpcnN0WzFdOyBzdHJ1Y3QgZWxlbSBzZWNvbmRbMV07IH0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCgyKSwgMiwgOCksXHRcdFx0LyogWzJdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoMyksIDMsIDApLFxuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDQpLCAzLCAzMiksXG4rXHRcdFx0Lyogc3RydWN0IGVsZW1bMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHQvKiBzdHJ1Y3QgZWxlbSB7IGludCB4OyB9ICovXG4rXHRcdFx0QlRGX1NUUlVDVF9FTkMoTkFNRV9OVEgoNSksIDEsIDQpLFx0XHRcdC8qIFs0XSAqL1xuK1x0XHRcdEJURl9NRU1CRVJfRU5DKE5BTUVfTlRIKDYpLCAxLCAwKSxcbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGNvbnRhaW5lciAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbNV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgNiwgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDcsIDMyKSxcbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW1bMV0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoOCwgMSwgMSksXHRcdFx0XHQvKiBbNl0gKi9cbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoOSwgMSwgMSksXHRcdFx0XHQvKiBbN10gKi9cbitcdFx0XHQvKiBkdXBsaWNhdGUgc3RydWN0IGVsZW0gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzhdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDUpLCAxLCA0KSxcdFx0XHQvKiBbOV0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCg2KSwgMSwgMCksXG4rXHRcdFx0QlRGX0VORF9SQVcsXG4rXHRcdH0sXG4rXHRcdEJURl9TVFJfU0VDKFwiXFwwaW50XFwwY29udGFpbmVyXFwwZmlyc3RcXDBzZWNvbmRcXDBlbGVtXFwweFwiKSxcbitcdH0sXG4rXHQuZXhwZWN0ID0ge1xuK1x0XHQucmF3X3R5cGVzID0ge1xuK1x0XHRcdEJURl9UWVBFX0lOVF9FTkMoTkFNRV9OVEgoMSksIEJURl9JTlRfU0lHTkVELCAwLCAzMiwgNCksIC8qIFsxXSAqL1xuK1x0XHRcdEJURl9TVFJVQ1RfRU5DKE5BTUVfTlRIKDIpLCAyLCA4KSxcdFx0XHQvKiBbMl0gKi9cbitcdFx0XHRCVEZfTUVNQkVSX0VOQyhOQU1FX05USCgzKSwgMywgMCksXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNCksIDMsIDMyKSxcbitcdFx0XHRCVEZfVFlQRV9BUlJBWV9FTkMoNCwgMSwgMSksXHRcdFx0XHQvKiBbM10gKi9cbitcdFx0XHRCVEZfU1RSVUNUX0VOQyhOQU1FX05USCg1KSwgMSwgNCksXHRcdFx0LyogWzRdICovXG4rXHRcdFx0QlRGX01FTUJFUl9FTkMoTkFNRV9OVEgoNiksIDEsIDApLFxuK1x0XHRcdEJURl9FTkRfUkFXLFxuK1x0XHR9LFxuK1x0XHRCVEZfU1RSX1NFQyhcIlxcMGludFxcMGNvbnRhaW5lclxcMGZpcnN0XFwwc2Vjb25kXFwwZWxlbVxcMHhcIiksXG4rXHR9LFxuK30sXG4ge1xuIFx0LmRlc2NyID0gXCJkZWR1cDogc3RydWN0IGV4YW1wbGUgIzFcIixcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNTo1Ny45MzY2OTU5ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjYxNjAwMDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyB0b3VjaGluZyB0d28gZmlsZXM6IGB0b29scy9saWIvYnBmL2J0Zi5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jYC4gVGhlIGZpcnN0IGZpbGUsIHNwZWNpZmljYWxseSwgaGFzIGEgc21hbGwgY2hhbmdlIHdpdGhpbiB0aGUgYGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXNgIGZ1bmN0aW9uLiBUaGUgc2Vjb25kIGZpbGUgYWRkcyBzb21lIHRlc3RzLlxuXG5Ob3csIG15IHJhZGFyJ3MgdXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gaW1tZWRpYXRlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSAqc3RyaWN0bHkqIGxpbWl0ZWQgdG8gdXNlci1zcGFjZSB0b29scyBhbmQgdGVzdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cblxuQm90aCBmaWxlcyBhcmUgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhhdCdzIGEgZmxhZyByaWdodCB0aGVyZSDigJMgZ2VuZXJhbGx5LCBjb2RlIGluIGB0b29scy9gIGlzIGEgcmVkIGhlcnJpbmcgaW4gdGVybXMgb2YgbmVlZGluZyBpbW1lZGlhdGUgZnV6emluZy4gSG93ZXZlciwgSSBrbm93IHRoZSBCUEYgbGFuZHNjYXBlIHdlbGwgZW5vdWdoIHRvIHJlYWxpemUgdGhlcmUncyBhIGtlcm5lbCBjb21wb25lbnQgYW5kIGEgdXNlci1zcGFjZSBjb21wb25lbnQuIFRoZSBrZXkgaXMgdG8gZGlzdGluZ3Vpc2ggdGhlbS4gYGtlcm5lbC9icGYvYnRmLmNgIGlzIHRoZSAqa2VybmVsKiBzaWRlIG9mIHRoaW5ncywgYnV0IGB0b29scy9saWIvYnBmL2AgaXMgd2hlcmUgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgbGl2ZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzYCBpcyBwdXJlbHkgYSB1c2VyLXNwYWNlIGZ1bmN0aW9uLiBJZiBpdCAqb25seSogZXhpc3RzIHdpdGhpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwncyBCVEYgaW1wbGVtZW50YXRpb24sIHRoZW4gdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcInVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzXCIgY2F0ZWdvcnksIGFuZCBJIGNhbiBjb25maWRlbnRseSBtYXJrIHRoaXMgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXNgIGlzIG5vdCBhbHNvIGRlZmluZWQgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA2OjE0LjU1MjY5OTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM4Mzg5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy9saWIvYnBmL2J0Zi5jPTQ3NzY9c3RhdGljIGlubGluZSBfX3UxNiBidGZfZndkX2tpbmQoc3RydWN0IGJ0Zl90eXBlICp0KVxcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00NzgwLVxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDc4MTpzdGF0aWMgYm9vbCBidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKHN0cnVjdCBidGZfZGVkdXAgKmQsIF9fdTMyIGlkMSwgX191MzIgaWQyLCBpbnQgZGVwdGgpXFxudG9vbHMvbGliL2JwZi9idGYuYy00NzgyLXtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzMi1cXHRcXHRpZiAoYTEtXFx1MDAzZWluZGV4X3R5cGUgIT0gYTItXFx1MDAzZWluZGV4X3R5cGUgXFx1MDAyNlxcdTAwMjZcXG50b29scy9saWIvYnBmL2J0Zi5jOjQ4MzM6XFx0XFx0ICAgICFidGZfZGVkdXBfaWRlbnRpY2FsX3R5cGVzKGQsIGExLVxcdTAwM2VpbmRleF90eXBlLCBhMi1cXHUwMDNlaW5kZXhfdHlwZSwgZGVwdGggLSAxKSlcXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4MzQtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODM2LVxcdFxcdGlmIChhMS1cXHUwMDNldHlwZSAhPSBhMi1cXHUwMDNldHlwZSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDgzNzpcXHRcXHQgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgYTEtXFx1MDAzZXR5cGUsIGEyLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDgzOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxudG9vbHMvbGliL2JwZi9idGYuYzo0ODU1OlxcdFxcdFxcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBtMS1cXHUwMDNldHlwZSwgbTItXFx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpIHtcXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4NTYtXFx0XFx0XFx0XFx0aWYgKHQxLVxcdTAwM2VuYW1lX29mZikge1xcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODc1LVxcdFxcdGlmICh0MS1cXHUwMDNldHlwZSAhPSB0Mi1cXHUwMDNldHlwZSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL2xpYi9icGYvYnRmLmM6NDg3NjpcXHRcXHQgICAgIWJ0Zl9kZWR1cF9pZGVudGljYWxfdHlwZXMoZCwgdDEtXFx1MDAzZXR5cGUsIHQyLVxcdTAwM2V0eXBlLCBkZXB0aCAtIDEpKVxcbnRvb2xzL2xpYi9icGYvYnRmLmMtNDg3Ny1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG50b29scy9saWIvYnBmL2J0Zi5jLTQ4ODMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxudG9vbHMvbGliL2JwZi9idGYuYzo0ODg0OlxcdFxcdFxcdGlmICghYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBwMS1cXHUwMDNldHlwZSwgcDItXFx1MDAzZXR5cGUsIGRlcHRoIC0gMSkpXFxudG9vbHMvbGliL2JwZi9idGYuYy00ODg1LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnRmLmM9NDk4OD1zdGF0aWMgaW50IGJ0Zl9kZWR1cF9pc19lcXVpdihzdHJ1Y3QgYnRmX2RlZHVwICpkLCBfX3UzMiBjYW5kX2lkLFxcbi0tXFxudG9vbHMvbGliL2JwZi9idGYuYy01MDE4LVxcdFxcdCAqL1xcbnRvb2xzL2xpYi9icGYvYnRmLmM6NTAxOTpcXHRcXHRpZiAoYnRmX2RlZHVwX2lkZW50aWNhbF90eXBlcyhkLCBoeXBvdF90eXBlX2lkLCBjYW5kX2lkLCAxNikpXFxudG9vbHMvbGliL2JwZi9idGYuYy01MDIwLVxcdFxcdFxcdHJldHVybiAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowNjoxNy4wNDY1NDg4NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjAyNTkxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBSZWxldmFuY2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjaGFuZ2UgaXMgKnNvbGVseSogd2l0aGluIGB0b29scy9saWIvYnBmL2J0Zi5jYC4gTG9va2luZyBmdXJ0aGVyLCB0aGUgZW50aXJlIHBhdGNoJ3MgaW1wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvbGliL2JwZi9idGYuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuY2AuIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbidzIFNlY3Rpb24gMiwgYSBwYXRjaCBnZXRzIGZsYWdnZWQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgKm9ubHkqIGlmIGFsbCBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB0aGVzZSBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBhcmVhcy4gVGhpcyBjb3ZlcnMgRG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgc3BlbGxpbmcgY29ycmVjdGlvbnMsIGFuZCBpbXBvcnRhbnRseSwgdXNlci1zcGFjZSBkaXJlY3RvcmllcyBsaWtlIGB0b29scy9gLCBgc2FtcGxlcy9gLCBgc2NyaXB0cy9gLCBhbmQgYHVzci9gLCAqcHJvdmlkZWQqIHRoZXkgZG9uJ3QgaW1wYWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXggb3IgbW9kdWxlcykuXG5cblRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyB1c2VyLXNwYWNlIHRvb2xzIGFuZCBsaWJyYXJpZXMgKHNwZWNpZmljYWxseSBsaWJicGYncyBCVEYgZGVkdXBsaWNhdGlvbikgYWxvbmcgd2l0aCBzZWxmdGVzdHMsIGFuZCBpbXBvcnRhbnRseSwgaXQgKmRvZXMgbm90KiB0b3VjaCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoaXMgZmlybWx5IHB1dHMgaXQgaW50byB0aGUgYFdvcnRoRnV6emluZz1mYWxzZWAgY2F0ZWdvcnkuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gZWl0aGVyIGFuIGVtcHR5IGFycmF5IG9yIG51bGwsIGFuZCBsaWtld2lzZSBgRm9jdXNTeW1ib2xzYCB0byBlbXB0eSBvciBudWxsLiBUaGUgcmVhc29uaW5nIEknbGwgcHJvdmlkZSB3aWxsIGJlIGNsZWFyIGFuZCBjb25jaXNlOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIGB0b29scy9saWIvYnBmL2AgKGxpYmJwZiBCVEYgZGVkdXBsaWNhdGlvbikgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIChCUEYgc2VsZnRlc3RzKS4gSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCByZWxldmFudCBmb3Iga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIgQW5kIGZpbmFsbHksIGBXb3J0aEZ1enppbmdgIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblJlYWR5IHRvIGV4ZWN1dGUgdGhlIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MywiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDY6MjEuMjQ5MTQyODQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZi8gKGxpYmJwZiBCVEYgZGVkdXBsaWNhdGlvbiBsb2dpYykgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAoQlBGIHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIG1ha2luZyBpdCBvdXQgb2Ygc2NvcGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmLyAobGliYnBmIEJURiBkZWR1cGxpY2F0aW9uIGxvZ2ljKSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIChCUEYgc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIGl0IG91dCBvZiBzY29wZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDY6MjEuMjQ5MTY1MTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5hh2r[1] Phase: Running StartedAt: 2026-09-08 21:06:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5hh2r[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 21:06:32 +0000 UTC FinishedAt: 2026-09-08 21:06:36 +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,}