Name: series-workflowjhnrg Phase: Failed StartedAt: 2026-09-14 07:40:58 +0000 UTC FinishedAt: 2026-09-14 08:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhnrg[0] Phase: Succeeded StartedAt: 2026-09-14 07:40:58 +0000 UTC FinishedAt: 2026-09-14 08:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhnrg[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 07:40:58 +0000 UTC FinishedAt: 2026-09-14 08:00:15 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMzYyNGIxOWE0NzZjYTM3NzZkY2RlYjY2Y2Y1OWI1NjNmZDkwYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzo1OToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTg4OSw3ICYjNDM7MTg4OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdHRocF9zYXZlX3NldHRpbmdzKCk7XG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAocG1kc2l6ZSkge1xuIFx0XHQvKiBPbmx5IGlmIFRIUCBpcyBzdXBwb3J0ZWQuICovXG4gXHRcdHRocF9yZWFkX3NldHRpbmdzKFx1MDAyNmRlZmF1bHRfc2V0dGluZ3MpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmE5NTZlNWM3NGM2NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0cG1kX3BhZ2VzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSB8fCAhcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMTk1LDE0ICYjNDM7MjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdGNoYXIgKnB0cjtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4mIzQzO1x0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4gXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxuIFx0XHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXHUwMDNlZmQsIHNpemUpLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5hZDE0MzcyYjc1ZDllIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5AQCAtNTY5LDcgJiM0Mzs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuIFxuIFx0Zm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSBcdTAwM2MgMjsgJiM0MzsmIzQzO21pZ3JhdGUpIHtcbiBcdFx0Zm9yICh1c2VfdGhwID0gMDsgdXNlX3RocCBcdTAwM2MgMjsgJiM0MzsmIzQzO3VzZV90aHApIHtcbi1cdFx0XHRucGFnZXMgPSBBTElHTih1c2VfdGhwID8gcmVhZF9wbWRfcGFnZXNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcbiYjNDM7XHRcdFx0bnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxuIFx0XHRcdFx0ICAgICAgIHNlbGYtXHUwMDNlcGFnZV9zaXplKSBcdTAwM2VcdTAwM2Ugc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuIFx0XHRcdEFTU0VSVF9ORShucGFnZXMsIDApO1xuIFx0XHRcdHNpemUgPSBucGFnZXMgXHUwMDNjXHUwMDNjIHNlbGYtXHUwMDNlcGFnZV9zaGlmdDtcbkBAIC03MzAsNyAmIzQzOzczMCw3IEBAIFRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gMiAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYyhzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTE5NDEsNyAmIzQzOzE5NDEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lbXB0eSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0xOTg0LDcgJiM0MzsxOTg0LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVybylcbiBcdGludCByZXQ7XG4gXHRpbnQgdmFsO1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFELFxuQEAgLTIwMzgsNyAmIzQzOzIwMzgsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mcmVlKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yMDkxLDcgJiM0MzsyMDkxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIxNjEsNyAmIzQzOzIxNjEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX3BhcnRpYWxfdW5tYXBfZmF1bHQpXG4ge1xuIFx0c3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjtcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdW5tYXBfc2l6ZTtcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0c1szXTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbkBAIC0yMjI2LDcgJiM0MzsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXRzWzNdO1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFx0dm9pZCAqb2xkX3B0ciwgKm5ld19wdHIgPSBOVUxMO1xuQEAgLTIzMjMsNyAmIzQzOzIzMjMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yNDEzLDcgJiM0MzsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFELFxuQEAgLTI2MDksNyAmIzQzOzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpelxuIFRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbiB7XG4gXHRzdHJ1Y3QgYmVuY2htYXJrX3Jlc3VsdHMgdGhwX3Jlc3VsdHMsIHJlZ3VsYXJfcmVzdWx0cztcbi1cdHNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZV90IHRocF9zaXplID0gcG1kX3BzaXplKCk7XG4gXHRpbnQgaXRlcmF0aW9ucyA9IDU7XG4gXG4gXHRpZiAoIXRocF9zaXplKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTMzMCw3ICYjNDM7MTMzMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRocGFnZV9wbWRfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4gXHRocGFnZV9wbWRfbnIgPSBocGFnZV9wbWRfc2l6ZSAvIHBhZ2Vfc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42MTdlMzExMzhhZjA2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtNTIxLDE5ICYjNDM7NTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiBcdG1hcF9zaXplICo9IE1CO1xuIFx0c2l6ZV90IGxlbiA9IG1hcF9zaXplO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuJiM0MztcdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0TUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xuJiM0MztcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgJiM0MzsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXJyKDIsIFwmIzM0O2luaXRpYWwgbW1hcFwmIzM0Oyk7XG5AQCAtNTQ3LDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFxuIFx0bl9ub3JtYWxfcGFnZXMgPSAwO1xuIFx0bl9odWdlX3BhZ2VzID0gMDtcbi1cdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXHUwMDNjIG1hcF9wdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7XG4mIzQzO1x0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiBcdFx0aWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSBcdTAwM2MgMClcbiBcdFx0XHRuX25vcm1hbF9wYWdlcyYjNDM7JiM0Mzs7XG4gXHRcdGVsc2VcbkBAIC01NzgsMTEgJiM0Mzs1ODIsMTEgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0F2ZXJhZ2Ugc3BlZWQ6ICAlLjNmIE1pQi9zXFxuXCYjMzQ7LCAobWFwX3NpemUgLyBNQikgL1xuIFx0XHRcdFx0XHQgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7XG4gXG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7XG4mIzQzO1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfUEFTUztcbiBcbiBlcnJfb3V0OlxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IEhQQUdFX1NJWkUpO1xuJiM0MztcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX0ZBSUw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLjQyODBkMmM4N2IyMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC0yMjksNyAmIzQzOzIyOSw3IEBAIFRFU1RfRl9USU1FT1VUKG1pZ3JhdGlvbiwgcHJpdmF0ZV9hbm9uX3RocCwgMipSVU5USU1FKVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuIFxuLVx0cG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFwbWRzaXplKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCYjMzQ7KTtcbiBcbkBAIC0yNjMsNyAmIzQzOzI2Myw3IEBAIFRFU1RfRl9USU1FT1VUKG1pZ3JhdGlvbiwgc2hhcmVkX2Fub25fdGhwLCAyKlJVTlRJTUUpXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVwmIzM0Oyk7XG4gXG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXBtZHNpemUpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jXG5AQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGVyciwgdGVzdHMgPSAyO1xuIFxuIFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0dGhwc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0dGhwc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKHRocHNpemUpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7W0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB0aHBzaXplIC8gMTAyNCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi5kMGUzNGRkNTg1MGIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xNjU0LDcgJiM0MzsxNjU0LDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0aHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmQwMjkwYzQ1NjdiZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtMTMzLDcgJiM0MzsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcbi1cdHNlbGYtXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1VuYWJsZSB0byByZWFkIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiBcbkBAIC0yNDEsNyAmIzQzOzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcbi1cdHNlbGYtXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1VuYWJsZSB0byByZWFkIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG5pbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG5AQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpXG4gXHRcdHZvaWQgKm1hcF9hZGRyO1xuIFx0fSBpbmZvO1xuIFxuLVx0aHVnZV9wYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdGh1Z2VfcGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoaHVnZV9wYWdlX3NpemUgXHUwMDNjPSAwKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7Q291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxcblwmIzM0Oyk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM3OCw4ICYjNDM7Mzc4LDggQEAgZmlcbiBDQVRFR09SWT1cJiMzNDttZW1mZF9zZWNyZXRcJiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuJiM0MztDQVRFR09SWT1cJiMzNDtrc21cJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IDVmMjc4OTEzYzRkNzUuLjY3MGZjYWQwODNiNTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTg4LDcgJiM0Mzs4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZV90IGhwYWdlX2xlbiA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9sZW4pXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0cGFnZXNoaWZ0ID0gZmZzKHBhZ2VzaXplKSAtIDE7XG4tXHRwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uNDBjYTIyNGE2MWY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMzUsMTIgJiM0MzszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRzaXplX3QgbWFwX2xlbjtcbiBcdGludCBwYWdlbWFwX2ZkO1xuIFx0aW50IGR1cmF0aW9uID0gMDtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7XG4gXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4gXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcbiBcdGlmIChyYW0gXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXG4gXHRcdHJhbSA9IFNJWkVfTUFYIC8gNDtcbkBAIC03MCwyMyAmIzQzOzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdH1cbiBcbiBcdHdhcm54KFwmIzM0O2FsbG9jYXRlICV6ZCB0cmFuc2h1Z2UgcGFnZXMsIHVzaW5nICV6ZCBNaUIgdmlydHVhbCBtZW1vcnlcJiMzNDtcbi1cdCAgICAgIFwmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW1cJiMzNDssIGxlbiBcdTAwM2VcdTAwM2UgSFBBR0VfU0hJRlQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4tXHQgICAgICByYW0gXHUwMDNlXHUwMDNlICgyMCAmIzQzOyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xuJiM0MztcdCAgICAgIFwmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW1cJiMzNDssIGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4mIzQzO1x0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgJiM0MzsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTtcbiBcbiBcdHBhZ2VtYXBfZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0OywgT19SRE9OTFkpO1xuIFx0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIHBhZ2VtYXBcXG5cJiMzNDspO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiYjNDM7XHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcbiYjNDM7XHRwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiBcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2luaXRpYWwgbW1hcFwmIzM0Oyk7XG4tXHRwdHIgJiM0Mzs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7XG4mIzQzO1x0cHRyICYjNDM7PSBocGFnZV9zaXplIC0gKHVpbnRwdHJfdClwdHIgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hZHZpc2UocHRyLCBsZW4sIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9IVUdFUEFHRVwmIzM0Oyk7XG4gXG4tXHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoSFBBR0VfU0hJRlQgLSAxKTtcbiYjNDM7XHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcbiBcdG1hcCA9IG1hbGxvYyhtYXBfbGVuKTtcbiBcdGlmICghbWFwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bWFwIG1hbGxvY1xcblwmIzM0Oyk7XG5AQCAtOTksNyAmIzQzOzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZhKTtcbi1cdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRmb3IgKHAgPSBwdHI7IHAgXHUwMDNjIHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiBcdFx0XHRpbnQ2NF90IHBmbjtcbiBcbiBcdFx0XHRwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7XG5AQCAtMTA3LDcgJiM0MzsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aWYgKHBmbiBcdTAwM2MgMCkge1xuIFx0XHRcdFx0bnJfZmFpbGVkJiM0MzsmIzQzOztcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0c2l6ZV90IGlkeCA9IHBmbiBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpO1xuJiM0MztcdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKTtcbiBcbiBcdFx0XHRcdG5yX3N1Y2NlZWQmIzQzOyYjNDM7O1xuIFx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IG1hcF9sZW4pIHtcbkBAIC0xMjMsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXG4tXHRcdFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0XHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXG4gXHRcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9ET05UTkVFRFwmIzM0Oyk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmIpO1xuQEAgLTEzMSw3ICYjNDM7MTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslLjNmIHMvbG9vcCwgJS4zZiBtcy9wYWdlLCAlMTAuM2YgTWlCL3NcXHRcJiMzNDtcbiBcdFx0XHQgICAgICAgXCYjMzQ7JTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiYjNDM7XHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFx0XHQgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7XG4gXG4gXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXHUwMDNlPSBkdXJhdGlvbikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5pbmRleCAxZmI5NjdlZjQ5ODU0Li4wYjhiYmI1NWMzMzU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKVxuIHN0YXRpYyBpbnQgc2htZW1fYWxsb2NhdGVfYXJlYSh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKiphbGxvY19hcmVhLCBib29sIGlzX3NyYylcbiB7XG4gXHR2b2lkICphcmVhX2FsaWFzID0gTlVMTDtcbi1cdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplX3QgYnl0ZXMgPSBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpc19zcmMgPyAwIDogYnl0ZXM7XG4gXHRjaGFyICpwID0gTlVMTCwgKnBfYWxpYXMgPSBOVUxMO1xuIFx0aW50IG1lbV9mZCA9IHVmZmRfbWVtX2ZkX2NyZWF0ZShieXRlcyAqIDIsIGZhbHNlKTtcbkBAIC0xOTQsMTAgJiM0MzsxOTQsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcbiBcbiBzdGF0aWMgdm9pZCBzaG1lbV9jaGVja19wbWRfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKnAsIGludCBleHBlY3RfbnJfaHBhZ2VzKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4tXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4mIzQzO1x0XHRcdCAgICAgIHBtZF9wc2l6ZSgpKSlcbiBcdFx0ZXJyKFwmIzM0O0RpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXCYjMzQ7LFxuIFx0XHQgICAgZXhwZWN0X25yX2hwYWdlcyk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC02NDYsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRcdHVmZmRfdGVzdF9vcHMtXHUwMDNlY2hlY2tfcG1kX21hcHBpbmcoZ29wdHMsXG4gXHRcdFx0XHRcdFx0IGdvcHRzLVx1MDAzZWFyZWFfZHN0LFxuIFx0XHRcdFx0XHRcdCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSAvXG4tXHRcdFx0XHRcdFx0IHJlYWRfcG1kX3BhZ2VzaXplKCkpO1xuJiM0MztcdFx0XHRcdFx0XHQgcG1kX3BzaXplKCkpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbkBAIC0xOTc1LDcgJiM0MzsxOTc1LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21cbiBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21zZyAqbXNnLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCB1ZmZkX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSk7XG4mIzQzO1x0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcG1kX3BzaXplKCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTIwODYsNyAmIzQzOzIwODYsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYXJnc190XG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0ZXJyKFwmIzM0O21hZHZpc2UoTUFEVl9IVUdFUEFHRSkgZmFpbHVyZVwmIzM0Oyk7XG4tXHR1ZmZkX21vdmVfdGVzdF9jb21tb24oZ29wdHMsIHRhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpLFxuJiM0MztcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5AQCAtMjA5NCw3ICYjNDM7MjA5NCw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfc3BsaXRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hXG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpKVxuIFx0XHRlcnIoXCYjMzQ7bWFkdmlzZShNQURWX05PSFVHRVBBR0UpIGZhaWx1cmVcJiMzNDspO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbiYjNDM7XHR1ZmZkX21vdmVfdGVzdF9jb21tb24oZ29wdHMsIHRhcmdzLCBwbWRfcHNpemUoKSxcbiBcdFx0XHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5pbmRleCA1NzJjMjUxNmU4NzRkLi5mNDZlZGQzZWU2ZDgxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTM4LDcgJiM0MzszOCw3IEBAIHN0YXRpYyBpbnQgZGV0ZWN0X3RocF9zaXplcyhzaXplX3Qgc2l6ZXNbXSwgaW50IG1heClcbiBcdGludCBpO1xuIFxuIFx0LyogdGhwIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLiAqL1xuLVx0aWYgKCFyZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdGlmICghcG1kX3BzaXplKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3JkZXJzID0gdGhwX3N1cHBvcnRlZF9vcmRlcnMoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO3VpbnQ2NF90IF9fcG1kX3BzaXplO1xuJiM0Mzt1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XG4gXG4gdWludDY0X3QgcGFnZW1hcF9nZXRfZW50cnkoaW50IGZkLCBjaGFyICpzdGFydClcbiB7XG5AQCAtMTU1LDEyICYjNDM7MTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiYjNDM7dWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZmc2woc2l6ZSkgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50NjRfdCBwbWRfcHNpemUodm9pZClcbiB7XG4gXHRpbnQgZmQ7XG4gXHRjaGFyIGJ1ZlsyMF07XG4gXHRzc2l6ZV90IG51bV9yZWFkO1xuIFxuJiM0MztcdGlmIChfX3BtZF9wc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBfX3BtZF9wc2l6ZTtcbiYjNDM7XG4gXHRmZCA9IG9wZW4oUE1EX1NJWkVfRklMRV9QQVRILCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3Myw3ICYjNDM7MTg2LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXG4gXHRidWZbbnVtX3JlYWRdID0gJiMzOTtcXDAmIzM5OztcbiBcdGNsb3NlKGZkKTtcbiBcbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuJiM0MztcdF9fcG1kX3BzaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoX19wbWRfcHNoaWZ0KVxuJiM0MztcdFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFfX3BtZF9wc2l6ZSlcbiYjNDM7XHRcdF9fcG1kX3BzaXplID0gcG1kX3BzaXplKCk7XG4mIzQzO1xuJiM0MztcdGlmICghX19wbWRfcHNpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0X19wbWRfcHNoaWZ0ID0gc2l6ZV90b19zaGlmdChfX3BtZF9wc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BtZF9wc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00MTIsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbkBAIC00MjUsNyAmIzQzOzQ1Niw3IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuQEAgLTQzOCw3ICYjNDM7NDY5LDcgQEAgYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuQEAgLTQ1MiwxNCAmIzQzOzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wc2hpZnQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiBcbiBcdC8qIGRyb3AgcG1kICovXG4tXHRpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIHRyYW5zaHVnZVxcblwmIzM0Oyk7XG4gXG4tXHRpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKVxuJiM0MztcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtNQURWX0hVR0VQQUdFXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIGFsbG9jYXRlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSAqL1xuQEAgLTQ3MSw3ICYjNDM7NTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSAmIzQzOyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pIFx1MDAyNiAoKDEgXHUwMDNjXHUwMDNjIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKSkgLSAxKSkpXG4mIzQzO1x0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcdTAwMjYgKCgxIFx1MDAzY1x1MDAzYyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKVxuIFx0XHRyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTtcbiBcbiBcdHJldHVybiAtMTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDlhNDlhZjg4NzAyZTQuLjAwNDhlMGU4Mjc3MDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTMxLDYgJiM0MzszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaXplO1xuJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcHNoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OCw3ICYjNDM7OTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4mIzQzO3VpbnQ2NF90IHNpemVfdG9fc2hpZnQodWludDY0X3Qgc2l6ZSk7XG4mIzQzO3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKTtcbiYjNDM7dWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiAmIzQzOzE2MSw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxMzYyNGIxOWE0NzZjYTM3NzZkY2RlYjY2Y2Y1OWI1NjNmZDkwYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNzo1OToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uZTQyZWRlY2NmZDdhMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTE4ODksNyAmIzQzOzE4ODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJdGhwX3NhdmVfc2V0dGluZ3MoKTsKIAogCXBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQlwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJcG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmIChwbWRzaXplKSB7CiAJCS8qIE9ubHkgaWYgVEhQIGlzIHN1cHBvcnRlZC4gKi8KIAkJdGhwX3JlYWRfc2V0dGluZ3MoJmFtcDtkZWZhdWx0X3NldHRpbmdzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggMTk2MDYzNWE5NTNlYi4uYTk1NmU1Yzc0YzY1NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgaW50IG1haW4odm9pZCkKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghdGhwX2F2YWlsYWJsZSgpIHx8ICFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCkBAIC0yMTk1LDE0ICYjNDM7MjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKQogVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGNvbGxhcHNlKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCWNoYXIgKnB0cjsKIAlpbnQgaTsKIAogCWlmICghdGhwX2F2YWlsYWJsZSgpKQogCQlTS0lQKHJldHVybiwgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc2l6ZSA9IDIgKiBocGFnZV9zaXplOwomIzQzOwludW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplOwomIzQzOwogCS8qIE5lZWQgZmlsZSB0byBiZSBjb3JyZWN0IHNpemUgZm9yIHRlc3RzIGZvciBub24tYW5vbi4gKi8KIAlpZiAodmFyaWFudC0mZ3Q7YmFja2luZyAhPSBBTk9OX0JBQ0tFRCkKIAkJQVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLSZndDtmZCwgc2l6ZSksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwppbmRleCBlMjY0MmVjYTBkMDJiLi5hZDE0MzcyYjc1ZDllIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwpAQCAtNTY5LDcgJiM0Mzs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKQogCiAJZm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSAmbHQ7IDI7ICYjNDM7JiM0MzttaWdyYXRlKSB7CiAJCWZvciAodXNlX3RocCA9IDA7IHVzZV90aHAgJmx0OyAyOyAmIzQzOyYjNDM7dXNlX3RocCkgewotCQkJbnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHJlYWRfcG1kX3BhZ2VzaXplKCkgOiBITU1fQlVGRkVSX1NJWkUsCiYjNDM7CQkJbnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLAogCQkJCSAgICAgICBzZWxmLSZndDtwYWdlX3NpemUpICZndDsmZ3Q7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiAJCQlBU1NFUlRfTkUobnBhZ2VzLCAwKTsKIAkJCXNpemUgPSBucGFnZXMgJmx0OyZsdDsgc2VsZi0mZ3Q7cGFnZV9zaGlmdDsKQEAgLTczMCw3ICYjNDM7NzMwLDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKQogCWludCAqcHRyOwogCWludCByZXQ7CiAKLQlzaXplID0gMiAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemUgPSAyICogcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKHNpemUsIHNpemUsCiAJCQkJICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLApAQCAtMTk0MSw3ICYjNDM7MTk0MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2VtcHR5KQogCWludCAqcHRyOwogCWludCByZXQ7CiAKLQlzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJYnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCwKQEAgLTE5ODQsNyAmIzQzOzE5ODQsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvKQogCWludCByZXQ7CiAJaW50IHZhbDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLAogCQkJCSAgUFJPVF9SRUFELApAQCAtMjAzOCw3ICYjNDM7MjAzOCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZyZWUpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLAogCQkJCSAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTIwOTEsNyAmIzQzOzIwOTEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mYXVsdCkKIAlpbnQgKnB0cjsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsCiAJCQkJICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLApAQCAtMjE2MSw3ICYjNDM7MjE2MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcGFydGlhbF91bm1hcF9mYXVsdCkKIHsKIAlzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCXVuc2lnbmVkIGxvbmcgdW5tYXBfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldHNbM107CiAJdW5zaWduZWQgbG9uZyBpOwpAQCAtMjIyNiw3ICYjNDM7MjIyNiw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcmVtYXBfZmF1bHQpCiB7CiAJc3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldHNbM107CiAJdW5zaWduZWQgbG9uZyBpOwogCXZvaWQgKm9sZF9wdHIsICpuZXdfcHRyID0gTlVMTDsKQEAgLTIzMjMsNyAmIzQzOzIzMjMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCkBAIC0yNDEzLDcgJiM0MzsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCwKQEAgLTI2MDksNyAmIzQzOzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpegogVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogewogCXN0cnVjdCBiZW5jaG1hcmtfcmVzdWx0cyB0aHBfcmVzdWx0cywgcmVndWxhcl9yZXN1bHRzOwotCXNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemVfdCB0aHBfc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWludCBpdGVyYXRpb25zID0gNTsKIAogCWlmICghdGhwX3NpemUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMTMzMCw3ICYjNDM7MTMzMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWhwYWdlX3BtZF9zaXplID0gcG1kX3BzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiAJaHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCmluZGV4IDVmZDc3OTJhMGQ0NzkuLjYxN2UzMTEzOGFmMDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCkBAIC01MjEsMTkgJiM0Mzs1MjEsMjMgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCwKIAlzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7CiAJaW50IHBhZ2VtYXBfZmQsIG5fbm9ybWFsX3BhZ2VzLCBuX2h1Z2VfcGFnZXM7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkgewogCQlrc2Z0X3ByaW50X21zZygmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiBLU0ZUX1NLSVA7CiAJfQogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKIAltYXBfc2l6ZSAqPSBNQjsKIAlzaXplX3QgbGVuID0gbWFwX3NpemU7CiAKLQlsZW4gLT0gbGVuICUgSFBBR0VfU0laRTsKLQltYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwlsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTsKJiM0MzsJbWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJCU1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKLQltYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7CiYjNDM7CW1hcF9wdHIgPSBtYXBfcHRyX29yaWcgJiM0MzsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTsKIAogCWlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRCkKIAkJZXJyKDIsICYjMzQ7aW5pdGlhbCBtbWFwJiMzNDspOwpAQCAtNTQ3LDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCiAJbl9ub3JtYWxfcGFnZXMgPSAwOwogCW5faHVnZV9wYWdlcyA9IDA7Ci0JZm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCAmbHQ7IG1hcF9wdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7CiYjNDM7CWZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgJmx0OyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewogCQlpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpICZsdDsgMCkKIAkJCW5fbm9ybWFsX3BhZ2VzJiM0MzsmIzQzOzsKIAkJZWxzZQpAQCAtNTc4LDExICYjNDM7NTgyLDExIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsCiAJa3NmdF9wcmludF9tc2coJiMzNDtBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xuJiMzNDssIChtYXBfc2l6ZSAvIE1CKSAvCiAJCQkJCSAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTsKIAotCW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTsKJiM0MzsJbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpOwogCXJldHVybiBLU0ZUX1BBU1M7CiAKIGVycl9vdXQ6Ci0JbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IEhQQUdFX1NJWkUpOwomIzQzOwltdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSk7CiAJcmV0dXJuIEtTRlRfRkFJTDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCBmMTlkNTNjNjk1NzY0Li40MjgwZDJjODdiMjJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHByaXZhdGVfYW5vbl90aHAsIDIqUlVOVElNRSkKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlJiMzNDspOwogCi0JcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXBtZHNpemUgPSBwbWRfcHNpemUoKTsKIAlpZiAoIXBtZHNpemUpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZCYjMzQ7KTsKIApAQCAtMjYzLDcgJiM0MzsyNjMsNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHNoYXJlZF9hbm9uX3RocCwgMipSVU5USU1FKQogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiAKLQlwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJcG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghcG1kc2l6ZSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMKaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYwpAQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBpbnQgbWFpbih2b2lkKQogCWludCBlcnIsIHRlc3RzID0gMjsKIAogCXBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQl0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJdGhwc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICh0aHBzaXplKSB7CiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXG4mIzM0OywKIAkJCSAgICAgICB0aHBzaXplIC8gMTAyNCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZDlhNGZiNzgyZWNmZS4uZDBlMzRkZDU4NTBiMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMTY1NCw3ICYjNDM7MTY1NCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJa3NmdF9wcmludF9oZWFkZXIoKTsKIAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0JaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmIChpbml0X3VmZmQoKSkKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggODJjNmU5NmVhNmViMy4uZDAyOTBjNDU2N2JkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfY29tcGxldGVseSkKIAlpZiAoIXRocF9hdmFpbGFibGUoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXNlbGYtJmd0O3BtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzZWxmLSZndDtwbWRzaXplID0gcG1kX3BzaXplKCk7CiAJaWYgKCFzZWxmLSZndDtwbWRzaXplKQogCQlTS0lQKHJldHVybiwgJiMzNDtVbmFibGUgdG8gcmVhZCBQTUQgc2l6ZVxuJiMzNDspOwogCkBAIC0yNDEsNyAmIzQzOzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpCiAJaWYgKCF0aHBfYXZhaWxhYmxlKCkpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAKLQlzZWxmLSZndDtwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJc2VsZi0mZ3Q7cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghc2VsZi0mZ3Q7cG1kc2l6ZSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcbiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwppbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwpAQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpCiAJCXZvaWQgKm1hcF9hZGRyOwogCX0gaW5mbzsKIAotCWh1Z2VfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJaHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAlpZiAoaHVnZV9wYWdlX3NpemUgJmx0Oz0gMCkKIAkJU0tJUChyZXR1cm4sICYjMzQ7Q291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxuJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDA5MzVkYmVmNDg4NGYuLmQ3YmVlZGQ1ZTE3OGIgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC0zNzgsOCAmIzQzOzM3OCw4IEBAIGZpCiBDQVRFR09SWT0mIzM0O21lbWZkX3NlY3JldCYjMzQ7IHJ1bl90ZXN0IC4vbWVtZmRfc2VjcmV0CiBmaQogCi0jIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDEwMAotQ0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyAxMDAKJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMgomIzQzO0NBVEVHT1JZPSYjMzQ7a3NtJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyCiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDAKIENBVEVHT1JZPSYjMzQ7a3NtJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLVAgLXMgMTAwCiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKaW5kZXggNWYyNzg5MTNjNGQ3NS4uNjcwZmNhZDA4M2I1OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtODgsNyAmIzQzOzg4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCQlyZXR1cm47CiAJfQogCi0Jc2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemVfdCBocGFnZV9sZW4gPSBwbWRfcHNpemUoKTsKIAlpZiAoIWhwYWdlX2xlbikKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwogCXBhZ2VzaGlmdCA9IGZmcyhwYWdlc2l6ZSkgLSAxOwotCXBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghcG1kX3BhZ2VzaXplKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjQwY2EyMjRhNjFmNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTM1LDEyICYjNDM7MzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNpemVfdCBtYXBfbGVuOwogCWludCBwYWdlbWFwX2ZkOwogCWludCBkdXJhdGlvbiA9IDA7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7CiAKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJaWYgKCF0aHBfaXNfZW5hYmxlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAKJiM0MzsJaWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKIAlyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTsKIAlpZiAocmFtICZndDsgU0laRV9NQVggLyBwc2l6ZSgpIC8gNCkKIAkJcmFtID0gU0laRV9NQVggLyA0OwpAQCAtNzAsMjMgJiM0Mzs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfQogCiAJd2FybngoJiMzNDthbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5JiMzNDsKLQkgICAgICAmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW0mIzM0OywgbGVuICZndDsmZ3Q7IEhQQUdFX1NISUZULCBsZW4gJmd0OyZndDsgMjAsCi0JICAgICAgcmFtICZndDsmZ3Q7ICgyMCAmIzQzOyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpOwomIzQzOwkgICAgICAmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW0mIzM0OywgbGVuICZndDsmZ3Q7IGhwYWdlX3NoaWZ0LCBsZW4gJmd0OyZndDsgMjAsCiYjNDM7CSAgICAgIHJhbSAmZ3Q7Jmd0OyAoMjAgJiM0MzsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTsKIAogCXBhZ2VtYXBfZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcFxuJiMzNDspOwogCi0JbGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7Ci0JcHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7CiYjNDM7CWxlbiAtPSBsZW4gJSBocGFnZV9zaXplOwomIzQzOwlwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTsKIAlpZiAocHRyID09IE1BUF9GQUlMRUQpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2luaXRpYWwgbW1hcCYjMzQ7KTsKLQlwdHIgJiM0Mzs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7CiYjNDM7CXB0ciAmIzQzOz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTsKIAogCWlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9IVUdFUEFHRSYjMzQ7KTsKIAotCW1hcF9sZW4gPSByYW0gJmd0OyZndDsgKEhQQUdFX1NISUZUIC0gMSk7CiYjNDM7CW1hcF9sZW4gPSByYW0gJmd0OyZndDsgKGhwYWdlX3NoaWZ0IC0gMSk7CiAJbWFwID0gbWFsbG9jKG1hcF9sZW4pOwogCWlmICghbWFwKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttYXAgbWFsbG9jXG4mIzM0Oyk7CkBAIC05OSw3ICYjNDM7MTA0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltZW1zZXQobWFwLCAwLCBtYXBfbGVuKTsKIAogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDthKTsKLQkJZm9yIChwID0gcHRyOyBwICZsdDsgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkgewomIzQzOwkJZm9yIChwID0gcHRyOyBwICZsdDsgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewogCQkJaW50NjRfdCBwZm47CiAKIAkJCXBmbiA9IGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKTsKQEAgLTEwNyw3ICYjNDM7MTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKHBmbiAmbHQ7IDApIHsKIAkJCQlucl9mYWlsZWQmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKLQkJCQlzaXplX3QgaWR4ID0gcGZuICZndDsmZ3Q7IChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTsKJiM0MzsJCQkJc2l6ZV90IGlkeCA9IHBmbiAmZ3Q7Jmd0OyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7CiAKIAkJCQlucl9zdWNjZWVkJiM0MzsmIzQzOzsKIAkJCQlpZiAoaWR4ICZndDs9IG1hcF9sZW4pIHsKQEAgLTEyMyw3ICYjNDM7MTI4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJfQogCiAJCQkvKiBzcGxpdCB0cmFuc2h1Z2UgcGFnZSwga2VlcCBsYXN0IHBhZ2UgKi8KLQkJCWlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSkKJiM0MzsJCQlpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpCiAJCQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9ET05UTkVFRCYjMzQ7KTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtiKTsKQEAgLTEzMSw3ICYjNDM7MTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXHQmIzM0OwogCQkJICAgICAgICYjMzQ7JTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcbiYjMzQ7LAotCQkJICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiAmZ3Q7Jmd0OyBIUEFHRV9TSElGVCksIGxlbiAvIHMgLyAoMSAmbHQ7Jmx0OyAyMCksCiYjNDM7CQkJICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiAmZ3Q7Jmd0OyBocGFnZV9zaGlmdCksIGxlbiAvIHMgLyAoMSAmbHQ7Jmx0OyAyMCksCiAJCQkgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7CiAKIAkJaWYgKGR1cmF0aW9uICZndDsgMCAmYW1wOyZhbXA7IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjICZndDs9IGR1cmF0aW9uKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwppbmRleCAxZmI5NjdlZjQ5ODU0Li4wYjhiYmI1NWMzMzU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKQogc3RhdGljIGludCBzaG1lbV9hbGxvY2F0ZV9hcmVhKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqKmFsbG9jX2FyZWEsIGJvb2wgaXNfc3JjKQogewogCXZvaWQgKmFyZWFfYWxpYXMgPSBOVUxMOwotCXNpemVfdCBieXRlcyA9IGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsIGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplX3QgYnl0ZXMgPSBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpc19zcmMgPyAwIDogYnl0ZXM7CiAJY2hhciAqcCA9IE5VTEwsICpwX2FsaWFzID0gTlVMTDsKIAlpbnQgbWVtX2ZkID0gdWZmZF9tZW1fZmRfY3JlYXRlKGJ5dGVzICogMiwgZmFsc2UpOwpAQCAtMTk0LDEwICYjNDM7MTk0LDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0Jc2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLAotCQkJICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpCiYjNDM7CQkJICAgICAgcG1kX3BzaXplKCkpKQogCQllcnIoJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlcyYjMzQ7LAogCQkgICAgZXhwZWN0X25yX2hwYWdlcyk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCkBAIC02NDYsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJCXVmZmRfdGVzdF9vcHMtJmd0O2NoZWNrX3BtZF9tYXBwaW5nKGdvcHRzLAogCQkJCQkJIGdvcHRzLSZndDthcmVhX2RzdCwKIAkJCQkJCSBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplIC8KLQkJCQkJCSByZWFkX3BtZF9wYWdlc2l6ZSgpKTsKJiM0MzsJCQkJCQkgcG1kX3BzaXplKCkpOwogCQkvKgogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KQEAgLTE5NzUsNyAmIzQzOzE5NzUsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbQogc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9oYW5kbGVfZmF1bHQodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBzdHJ1Y3QgdWZmZF9tc2cgKm1zZywKIAkJCQkgICAgICAgc3RydWN0IHVmZmRfYXJncyAqYXJncykKIHsKLQl1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0X2NvbW1vbihnb3B0cywgbXNnLCBhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpKTsKJiM0MzsJdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcG1kX3BzaXplKCkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjA4Niw3ICYjNDM7MjA4Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hcmdzX3QKIHsKIAlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3QsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQllcnIoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGZhaWx1cmUmIzM0Oyk7Ci0JdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSwKJiM0MzsJdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcG1kX3BzaXplKCksCiAJCQkgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7CiB9CiAKQEAgLTIwOTQsNyAmIzQzOzIwOTQsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3NwbGl0X3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYQogewogCWlmIChtYWR2aXNlKGdvcHRzLSZndDthcmVhX2RzdCwgZ29wdHMtJmd0O25yX3BhZ2VzICogZ29wdHMtJmd0O3BhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKIAkJZXJyKCYjMzQ7bWFkdmlzZShNQURWX05PSFVHRVBBR0UpIGZhaWx1cmUmIzM0Oyk7Ci0JdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSwKJiM0MzsJdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcG1kX3BzaXplKCksCiAJCQkgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCmluZGV4IDU3MmMyNTE2ZTg3NGQuLmY0NmVkZDNlZTZkODEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtMzgsNyAmIzQzOzM4LDcgQEAgc3RhdGljIGludCBkZXRlY3RfdGhwX3NpemVzKHNpemVfdCBzaXplc1tdLCBpbnQgbWF4KQogCWludCBpOwogCiAJLyogdGhwIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLiAqLwotCWlmICghcmVhZF9wbWRfcGFnZXNpemUoKSkKJiM0MzsJaWYgKCFwbWRfcHNpemUoKSkKIAkJcmV0dXJuIDA7CiAKIAlvcmRlcnMgPSB0aHBfc3VwcG9ydGVkX29yZGVycygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBACiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7dWludDY0X3QgX19wbWRfcHNpemU7CiYjNDM7dWludDY0X3QgX19wbWRfcHNoaWZ0OwogCiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KQogewpAQCAtMTU1LDEyICYjNDM7MTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpCiYjNDM7dWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKQomIzQzO3sKJiM0MzsJaWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGZmc2woc2l6ZSkgLSAxOwomIzQzO30KJiM0MzsKJiM0Mzt1aW50NjRfdCBwbWRfcHNpemUodm9pZCkKIHsKIAlpbnQgZmQ7CiAJY2hhciBidWZbMjBdOwogCXNzaXplX3QgbnVtX3JlYWQ7CiAKJiM0MzsJaWYgKF9fcG1kX3BzaXplKQomIzQzOwkJcmV0dXJuIF9fcG1kX3BzaXplOwomIzQzOwogCWZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAwOwpAQCAtMTczLDcgJiM0MzsxODYsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCkKIAlidWZbbnVtX3JlYWRdID0gJiMzOTtcMCYjMzk7OwogCWNsb3NlKGZkKTsKIAotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwlfX3BtZF9wc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKF9fcG1kX3BzaGlmdCkKJiM0MzsJCXJldHVybiBfX3BtZF9wc2hpZnQ7CiYjNDM7CiYjNDM7CWlmICghX19wbWRfcHNpemUpCiYjNDM7CQlfX3BtZF9wc2l6ZSA9IHBtZF9wc2l6ZSgpOwomIzQzOwomIzQzOwlpZiAoIV9fcG1kX3BzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CV9fcG1kX3BzaGlmdCA9IHNpemVfdG9fc2hpZnQoX19wbWRfcHNpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gX19wbWRfcHNoaWZ0OwogfQogCiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCkBAIC00MTIsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAogCiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwpAQCAtNDI1LDcgJiM0Mzs0NTYsNyBAQCBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogCiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwpAQCAtNDM4LDcgJiM0Mzs0NjksNyBAQCBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogCiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghcG1kX3BhZ2VzaXplKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKQEAgLTQ1MiwxNCAmIzQzOzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZQogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKIHsKIAl1aW50NjRfdCBlbnRbMl07CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7CiYjNDM7CiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpCiYjNDM7CQlyZXR1cm4gLTE7CiAKIAkvKiBkcm9wIHBtZCAqLwotCWlmIChtbWFwKHB0ciwgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJaWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8CiAJCSBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgdHJhbnNodWdlXG4mIzM0Oyk7CiAKLQlpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKQomIzQzOwlpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtNQURWX0hVR0VQQUdFXG4mIzM0Oyk7CiAKIAkvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi8KQEAgLTQ3MSw3ICYjNDM7NTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKIAogCWlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSAmYW1wOyZhbXA7IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pICZhbXA7JmFtcDsKIAkgICAgUEFHRU1BUF9QRk4oZW50WzBdKSAmIzQzOyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgJmFtcDsmYW1wOwotCSAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgJmFtcDsgKCgxICZsdDsmbHQ7IChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKSkgLSAxKSkpCiYjNDM7CSAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgJmFtcDsgKCgxICZsdDsmbHQ7IChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKSkgLSAxKSkpCiAJCXJldHVybiBQQUdFTUFQX1BGTihlbnRbMF0pOwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjAwNDhlMGU4Mjc3MDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7CiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcHNpemU7CiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDsKIAogLyoKICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpCkBAIC04OCw3ICYjNDM7OTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Ci11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKJiM0Mzt1aW50NjRfdCBzaXplX3RvX3NoaWZ0KHVpbnQ2NF90IHNpemUpOwomIzQzO3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKTsKJiM0Mzt1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpOwogdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTsKIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CkBAIC0xNTcsMTIgJiM0MzsxNjEsNiBAQCBpbnQga3NtX3N0b3Aodm9pZCk7CiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7CiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKIAotLyoKLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplCi0gKi8KLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjEKLSNkZWZpbmUgSFBBR0VfU0laRSAoMSAmbHQ7Jmx0OyBIUEFHRV9TSElGVCkKLQogI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KQkoKChlbnQpICZhbXA7ICgxdWxsICZsdDsmbHQ7IDYzKSkgIT0gMCkKICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KQkoKGVudCkgJmFtcDsgKCgxdWxsICZsdDsmbHQ7IDU1KSAtIDEpKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCBhcHBsaWVkIGFzIHRoZSBIRUFEIGNvbW1pdCwgaXMgd29ydGggZnV6emluZy4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBhbiBldmFsdWF0aW9uLCBhbmQgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcHJvdmlkZWQgYGdpdCBkaWZmYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgZXZlcnkgbW9kaWZpZWQgZmlsZSBmYWxscyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLi4uYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBuZWdhdGl2ZSBjcml0ZXJpb24gYmFzZWQgb24gdGhlIHJ1bGVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmcmVzaCB0aGUgcnVsZXMgcmVnYXJkaW5nIHdoZW4gdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY3JpdGVyaWEgaGVyZSBpcyBhbnkgY29kZSBzdHJpY3RseSB3aXRoaW4gJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBXZSYjMzk7dmUgZ290IGBjb3cuY2AsIGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBndWFyZC1yZWdpb25zLmNgLCBgaG1tLXRlc3RzLmNgLCBga2h1Z2VwYWdlZC5jYCwgYGtzbV90ZXN0cy5jYCwgYG1pZ3JhdGlvbi5jYCwgYG1rZGlydHkuY2AsIGBwYWdlbWFwX2lvY3RsLmNgLCBgcHJjdGxfdGhwX2Rpc2FibGUuY2AsIGBwcm9jZXNzX21hZHYuY2AsIGBydW5fdm10ZXN0cy5zaGAsIGBzb2Z0LWRpcnR5LmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB0cmFuc2h1Z2Utc3RyZXNzLmNgLCBgdWZmZC1jb21tb24uY2AsIGB1ZmZkLXVuaXQtdGVzdHMuY2AsIGB1ZmZkLXdwLW1yZW1hcC5jYCwgYHZtX3V0aWwuY2AsIGFuZCBgdm1fdXRpbC5oYC4KClllcCwgYWxsIG9mIHRoZW0gYXJlIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFRoZXNlIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIENydWNpYWxseSwgdGhleSBkbyAqbm90KiBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2Vyc3BhY2UgdGVzdCBpbmZyYXN0cnVjdHVyZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlc2UgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlcnNwYWNlIHNlbGYtdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBub25lIG9mIHRoZSBjaGFuZ2VzIGludm9sdmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIG91ciBhdHRlbnRpb24sIHNvIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgYXJyYXkuIFNpbWlsYXJseSwgc2luY2UgdGhlc2UgYXJlIHNlbGYtdGVzdHMsIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBhY3RpdmF0ZSB0aGlzIGNvZGUsIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGFycmF5LgoKTGV0JiMzOTtzIGVuc3VyZSB3ZSBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuIEl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LiBUaGUgcGFyYW1ldGVycyBhcmU6IGBFbmFibGVDb25maWdzYCAoYXJyYXkgb2Ygc3RyaW5ncywgbnVsbGFibGUpLCBgRm9jdXNTeW1ib2xzYCAoYXJyYXkgb2Ygc3RyaW5ncywgbnVsbGFibGUpLCBgUmVhc29uaW5nYCAoc3RyaW5nKSwgYW5kIGBXb3J0aEZ1enppbmdgIChib29sZWFuKS4gVGhlIHNpZ25hdHVyZSBpcyBjb3JyZWN0LCBhbmQgbXkgYW5hbHlzaXMgZml0cyBwZXJmZWN0bHkgd2l0aGluIHRoZSBleHBlY3RlZCBmb3JtYXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzo1OToxMC44MjAyOTEyOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAzMzIxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6NTk6MTAuODIwMjk1ODI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkxMzE0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTM2MjRiMTlhNDc2Y2EzNzc2ZGNkZWI2NmNmNTliNTYzZmQ5MGE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA3OjU5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5AQCAtMTg4OSw3ICsxODg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHR0aHBfc2F2ZV9zZXR0aW5ncygpO1xcbiBcXG4gXFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAocG1kc2l6ZSkge1xcbiBcXHRcXHQvKiBPbmx5IGlmIFRIUCBpcyBzdXBwb3J0ZWQuICovXFxuIFxcdFxcdHRocF9yZWFkX3NldHRpbmdzKFxcdTAwMjZkZWZhdWx0X3NldHRpbmdzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmE5NTZlNWM3NGM2NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0yMzUsNyArMjM1LDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuLVxcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkgfHwgIXBtZF9wYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggYjcyNGQ2MmQyYjc1NS4uZWVlMjllZjg4Y2IyMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5AQCAtMjE5NSwxNCArMjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxcbiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVxcdTAwM2VwYWdlX3NpemU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFO1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcXG4gXFx0Y2hhciAqcHRyO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICghdGhwX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNpemUgPSAyICogaHBhZ2Vfc2l6ZTtcXG4rXFx0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4rXFxuIFxcdC8qIE5lZWQgZmlsZSB0byBiZSBjb3JyZWN0IHNpemUgZm9yIHRlc3RzIGZvciBub24tYW5vbi4gKi9cXG4gXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWJhY2tpbmcgIT0gQU5PTl9CQUNLRUQpXFxuIFxcdFxcdEFTU0VSVF9FUShmdHJ1bmNhdGUoc2VsZi1cXHUwMDNlZmQsIHNpemUpLCAwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmFkMTQzNzJiNzVkOWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbkBAIC01NjksNyArNTY5LDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4gXFxuIFxcdGZvciAobWlncmF0ZSA9IDA7IG1pZ3JhdGUgXFx1MDAzYyAyOyArK21pZ3JhdGUpIHtcXG4gXFx0XFx0Zm9yICh1c2VfdGhwID0gMDsgdXNlX3RocCBcXHUwMDNjIDI7ICsrdXNlX3RocCkge1xcbi1cXHRcXHRcXHRucGFnZXMgPSBBTElHTih1c2VfdGhwID8gcmVhZF9wbWRfcGFnZXNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcXG4rXFx0XFx0XFx0bnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc2VsZi1cXHUwMDNlcGFnZV9zaXplKSBcXHUwMDNlXFx1MDAzZSBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbiBcXHRcXHRcXHRBU1NFUlRfTkUobnBhZ2VzLCAwKTtcXG4gXFx0XFx0XFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbkBAIC03MzAsNyArNzMwLDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKVxcbiBcXHRpbnQgKnB0cjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IDIgKiBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2Moc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbkBAIC0xOTQxLDcgKzE5NDEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lbXB0eSlcXG4gXFx0aW50ICpwdHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQsXFxuQEAgLTE5ODQsNyArMTk4NCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX3plcm8pXFxuIFxcdGludCByZXQ7XFxuIFxcdGludCB2YWw7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQsXFxuQEAgLTIwMzgsNyArMjAzOCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZyZWUpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjA5MSw3ICsyMDkxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjE2MSw3ICsyMTYxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9wYXJ0aWFsX3VubWFwX2ZhdWx0KVxcbiB7XFxuIFxcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB1bm1hcF9zaXplO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG5AQCAtMjIyNiw3ICsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcztcXG4tXFx0dW5zaWduZWQgbG9uZyBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0c1szXTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHR2b2lkICpvbGRfcHRyLCAqbmV3X3B0ciA9IE5VTEw7XFxuQEAgLTIzMjMsNyArMjMyMyw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2VycilcXG4gXFx0aW50ICpwdHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgMiAqIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjQxMyw3ICsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIDIgKiBzaXplLFxcbiBcXHRcXHRcXHRcXHQgIFBST1RfUkVBRCxcXG5AQCAtMjYwOSw3ICsyNjA5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcnVuX21pZ3JhdGlvbl9iZW5jaG1hcmsoaW50IGZkLCBpbnQgdXNlX3RocCwgc2l6ZV90IGJ1ZmZlcl9zaXpcXG4gVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiB7XFxuIFxcdHN0cnVjdCBiZW5jaG1hcmtfcmVzdWx0cyB0aHBfcmVzdWx0cywgcmVndWxhcl9yZXN1bHRzO1xcbi1cXHRzaXplX3QgdGhwX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzaXplX3QgdGhwX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aW50IGl0ZXJhdGlvbnMgPSA1O1xcbiBcXG4gXFx0aWYgKCF0aHBfc2l6ZSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMTMzMCw3ICsxMzMwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRocGFnZV9wbWRfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjE3ZTMxMTM4YWYwNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTUyMSwxOSArNTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcdHN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lLCBlbmRfdGltZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7XFxuIFxcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuIFxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIEtTRlRfU0tJUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFocGFnZV9zaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4gXFx0bWFwX3NpemUgKj0gTUI7XFxuIFxcdHNpemVfdCBsZW4gPSBtYXBfc2l6ZTtcXG4gXFxuLVxcdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xcbi1cXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xcbitcXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdFxcdE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyArIEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7XFxuK1xcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xcbiBcXG4gXFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxcbiBcXHRcXHRlcnIoMiwgXFxcImluaXRpYWwgbW1hcFxcXCIpO1xcbkBAIC01NDcsNyArNTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcXG4gXFxuIFxcdG5fbm9ybWFsX3BhZ2VzID0gMDtcXG4gXFx0bl9odWdlX3BhZ2VzID0gMDtcXG4tXFx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gSFBBR0VfU0laRSkge1xcbitcXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFxcdTAwM2MgbWFwX3B0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XFxuIFxcdFxcdGlmIChhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRuX25vcm1hbF9wYWdlcysrO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTU3OCwxMSArNTgyLDExIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xcXFxuXFxcIiwgKG1hcF9zaXplIC8gTUIpIC9cXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgICgoZG91YmxlKXNjYW5fdGltZV9ucyAvIE5TRUNfUEVSX1NFQykpO1xcbiBcXG4tXFx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XFxuK1xcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xcbiBcXHRyZXR1cm4gS1NGVF9QQVNTO1xcbiBcXG4gZXJyX291dDpcXG4tXFx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XFxuK1xcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xcbiBcXHRyZXR1cm4gS1NGVF9GQUlMO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uNDI4MGQyYzg3YjIyYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHByaXZhdGVfYW5vbl90aHAsIDIqUlVOVElNRSlcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcIik7XFxuIFxcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZHNpemUpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBzaGFyZWRfYW5vbl90aHAsIDIqUlVOVElNRSlcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcIik7XFxuIFxcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZHNpemUpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmNcXG5pbmRleCA2OGRkNDQ3YTU0NTQyLi40OWVmNjQzYTZlNjM5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xcbkBAIC0zMzAsNyArMzMwLDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0aW50IGVyciwgdGVzdHMgPSAyO1xcbiBcXG4gXFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbi1cXHR0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0dGhwc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAodGhwc2l6ZSkge1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgdGhwc2l6ZSAvIDEwMjQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi5kMGUzNGRkNTg1MGIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGlmIChpbml0X3VmZmQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5kMDI5MGM0NTY3YmQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXFxuIFxcdGlmICghdGhwX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHNlbGYtXFx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzZWxmLVxcdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XFxuIFxcdGlmICghc2VsZi1cXHUwMDNlcG1kc2l6ZSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJVbmFibGUgdG8gcmVhZCBQTUQgc2l6ZVxcXFxuXFxcIik7XFxuIFxcbkBAIC0yNDEsNyArMjQxLDcgQEAgRklYVFVSRV9TRVRVUChwcmN0bF90aHBfZGlzYWJsZV9leGNlcHRfbWFkdmlzZSlcXG4gXFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VsZi1cXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNlbGYtXFx1MDAzZXBtZHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKCFzZWxmLVxcdTAwM2VwbWRzaXplKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlVuYWJsZSB0byByZWFkIFBNRCBzaXplXFxcXG5cXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcXG5pbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcXG5AQCAtMTQxLDcgKzE0MSw3IEBAIFRFU1RfRihwcm9jZXNzX21hZHZpc2UsIHJlbW90ZV9jb2xsYXBzZSlcXG4gXFx0XFx0dm9pZCAqbWFwX2FkZHI7XFxuIFxcdH0gaW5mbztcXG4gXFxuLVxcdGh1Z2VfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0aHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKGh1Z2VfcGFnZV9zaXplIFxcdTAwM2M9IDApXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxcXFxuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTM3OCw4ICszNzgsOCBAQCBmaVxcbiBDQVRFR09SWT1cXFwibWVtZmRfc2VjcmV0XFxcIiBydW5fdGVzdCAuL21lbWZkX3NlY3JldFxcbiBmaVxcbiBcXG4tIyBLU00gS1NNX01FUkdFX1RJTUVfSFVHRV9QQUdFUyB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcXG4tQ0FURUdPUlk9XFxcImtzbVxcXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgMTAwXFxuKyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyXFxuK0NBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDUxMlxcbiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcXG4gQ0FURUdPUlk9XFxcImtzbVxcXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLVAgLXMgMTAwXFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uNjcwZmNhZDA4M2I1OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemVfdCBocGFnZV9sZW4gPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKCFocGFnZV9sZW4pXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjI5NWE2NzY5ZDY3MGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFxuIFxcdHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0cGFnZXNoaWZ0ID0gZmZzKHBhZ2VzaXplKSAtIDE7XFxuLVxcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZF9wYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uNDBjYTIyNGE2MWY0OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMzUsMTIgKzM1LDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0c2l6ZV90IG1hcF9sZW47XFxuIFxcdGludCBwYWdlbWFwX2ZkO1xcbiBcXHRpbnQgZHVyYXRpb24gPSAwO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BzaGlmdCgpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFxuIFxcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbiBcXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcXG4gXFx0aWYgKHJhbSBcXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXFxuIFxcdFxcdHJhbSA9IFNJWkVfTUFYIC8gNDtcXG5AQCAtNzAsMjMgKzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0fVxcbiBcXG4gXFx0d2FybngoXFxcImFsbG9jYXRlICV6ZCB0cmFuc2h1Z2UgcGFnZXMsIHVzaW5nICV6ZCBNaUIgdmlydHVhbCBtZW1vcnlcXFwiXFxuLVxcdCAgICAgIFxcXCIgYW5kICV6ZCBNaUIgb2YgcmFtXFxcIiwgbGVuIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXFx1MDAzZVxcdTAwM2UgMjAsXFxuLVxcdCAgICAgIHJhbSBcXHUwMDNlXFx1MDAzZSAoMjAgKyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xcbitcXHQgICAgICBcXFwiIGFuZCAlemQgTWlCIG9mIHJhbVxcXCIsIGxlbiBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdCwgbGVuIFxcdTAwM2VcXHUwMDNlIDIwLFxcbitcXHQgICAgICByYW0gXFx1MDAzZVxcdTAwM2UgKDIwICsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTtcXG4gXFxuIFxcdHBhZ2VtYXBfZmQgPSBvcGVuKFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiLCBPX1JET05MWSk7XFxuIFxcdGlmIChwYWdlbWFwX2ZkIFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJvcGVuIHBhZ2VtYXBcXFxcblxcXCIpO1xcbiBcXG4tXFx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XFxuLVxcdHB0ciA9IG1tYXAoTlVMTCwgbGVuICsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XFxuK1xcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xcbitcXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xcbiBcXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiaW5pdGlhbCBtbWFwXFxcIik7XFxuLVxcdHB0ciArPSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFO1xcbitcXHRwdHIgKz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcXG4gXFxuIFxcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJNQURWX0hVR0VQQUdFXFxcIik7XFxuIFxcbi1cXHRtYXBfbGVuID0gcmFtIFxcdTAwM2VcXHUwMDNlIChIUEFHRV9TSElGVCAtIDEpO1xcbitcXHRtYXBfbGVuID0gcmFtIFxcdTAwM2VcXHUwMDNlIChocGFnZV9zaGlmdCAtIDEpO1xcbiBcXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XFxuIFxcdGlmICghbWFwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1hcCBtYWxsb2NcXFxcblxcXCIpO1xcbkBAIC05OSw3ICsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xcbiBcXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZhKTtcXG4tXFx0XFx0Zm9yIChwID0gcHRyOyBwIFxcdTAwM2MgcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcXG4rXFx0XFx0Zm9yIChwID0gcHRyOyBwIFxcdTAwM2MgcHRyICsgbGVuOyBwICs9IGhwYWdlX3NpemUpIHtcXG4gXFx0XFx0XFx0aW50NjRfdCBwZm47XFxuIFxcbiBcXHRcXHRcXHRwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7XFxuQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGlmIChwZm4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRzaXplX3QgaWR4ID0gcGZuIFxcdTAwM2VcXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IGlkeCA9IHBmbiBcXHUwMDNlXFx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XFxuIFxcbiBcXHRcXHRcXHRcXHRucl9zdWNjZWVkKys7XFxuIFxcdFxcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gbWFwX2xlbikge1xcbkBAIC0xMjMsNyArMTI4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHQvKiBzcGxpdCB0cmFuc2h1Z2UgcGFnZSwga2VlcCBsYXN0IHBhZ2UgKi9cXG4tXFx0XFx0XFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxcbitcXHRcXHRcXHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXFxuIFxcdFxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9ET05UTkVFRFxcXCIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2Yik7XFxuQEAgLTEzMSw3ICsxMzYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFxcXHRcXFwiXFxuIFxcdFxcdFxcdCAgICAgICBcXFwiJTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXFx1MDAzZVxcdTAwM2UgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgXFx1MDAzY1xcdTAwM2MgMjApLFxcbitcXHRcXHRcXHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFxcdTAwM2VcXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFxcdTAwM2NcXHUwMDNjIDIwKSxcXG4gXFx0XFx0XFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xcbiBcXG4gXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBiLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyBcXHUwMDNlPSBkdXJhdGlvbikge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbmluZGV4IDFmYjk2N2VmNDk4NTQuLjBiOGJiYjU1YzMzNTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG5AQCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX3JlbGVhc2VfcGFnZXModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpyZWxfYXJlYSlcXG4gc3RhdGljIGludCBzaG1lbV9hbGxvY2F0ZV9hcmVhKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqKmFsbG9jX2FyZWEsIGJvb2wgaXNfc3JjKVxcbiB7XFxuIFxcdHZvaWQgKmFyZWFfYWxpYXMgPSBOVUxMO1xcbi1cXHRzaXplX3QgYnl0ZXMgPSBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZV90IGJ5dGVzID0gZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlzX3NyYyA/IDAgOiBieXRlcztcXG4gXFx0Y2hhciAqcCA9IE5VTEwsICpwX2FsaWFzID0gTlVMTDtcXG4gXFx0aW50IG1lbV9mZCA9IHVmZmRfbWVtX2ZkX2NyZWF0ZShieXRlcyAqIDIsIGZhbHNlKTtcXG5AQCAtMTk0LDEwICsxOTQsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcXG4gXFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXFxuIHtcXG4tXFx0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLFxcbi1cXHRcXHRcXHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcXG4rXFx0XFx0XFx0ICAgICAgcG1kX3BzaXplKCkpKVxcbiBcXHRcXHRlcnIoXFxcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXFxcIixcXG4gXFx0XFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcXG5pbmRleCA2ZjIzNjBmOWI3NWRiLi5kY2IxNzU1YzM1ZmI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcXG5AQCAtNjQ2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXFxuIFxcdFxcdHVmZmRfdGVzdF9vcHMtXFx1MDAzZWNoZWNrX3BtZF9tYXBwaW5nKGdvcHRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZ29wdHMtXFx1MDAzZWFyZWFfZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSAvXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCByZWFkX3BtZF9wYWdlc2l6ZSgpKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHBtZF9wc2l6ZSgpKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxcbiBcXHRcXHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cXG5AQCAtMTk3NSw3ICsxOTc1LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21cXG4gc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9oYW5kbGVfZmF1bHQodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBzdHJ1Y3QgdWZmZF9tc2cgKm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1ZmZkX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSk7XFxuK1xcdHVmZmRfbW92ZV9oYW5kbGVfZmF1bHRfY29tbW9uKGdvcHRzLCBtc2csIGFyZ3MsIHBtZF9wc2l6ZSgpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG5AQCAtMjA4Niw3ICsyMDg2LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmZF90ZXN0X2FyZ3NfdFxcbiB7XFxuIFxcdGlmIChtYWR2aXNlKGdvcHRzLVxcdTAwM2VhcmVhX2RzdCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGVycihcXFwibWFkdmlzZShNQURWX0hVR0VQQUdFKSBmYWlsdXJlXFxcIik7XFxuLVxcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHJlYWRfcG1kX3BhZ2VzaXplKCksXFxuK1xcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxcbiBcXHRcXHRcXHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XFxuIH1cXG4gXFxuQEAgLTIwOTQsNyArMjA5NCw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfc3BsaXRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hXFxuIHtcXG4gXFx0aWYgKG1hZHZpc2UoZ29wdHMtXFx1MDAzZWFyZWFfZHN0LCBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpKVxcbiBcXHRcXHRlcnIoXFxcIm1hZHZpc2UoTUFEVl9OT0hVR0VQQUdFKSBmYWlsdXJlXFxcIik7XFxuLVxcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHJlYWRfcG1kX3BhZ2VzaXplKCksXFxuK1xcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxcbiBcXHRcXHRcXHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuaW5kZXggNTcyYzI1MTZlODc0ZC4uZjQ2ZWRkM2VlNmQ4MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBpbnQgZGV0ZWN0X3RocF9zaXplcyhzaXplX3Qgc2l6ZXNbXSwgaW50IG1heClcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKiB0aHAgbm90IHN1cHBvcnRlZCBhdCBhbGwuICovXFxuLVxcdGlmICghcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0aWYgKCFwbWRfcHNpemUoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRvcmRlcnMgPSB0aHBfc3VwcG9ydGVkX29yZGVycygpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xZmVmMTI2NjQyOWY0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0yMSw2ICsyMSw4IEBAXFxuIFxcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XFxuK3VpbnQ2NF90IF9fcG1kX3BzaXplO1xcbit1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XFxuIFxcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxcbiB7XFxuQEAgLTE1NSwxMiArMTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxcbit1aW50NjRfdCBzaXplX3RvX3NoaWZ0KHVpbnQ2NF90IHNpemUpXFxuK3tcXG4rXFx0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGZmc2woc2l6ZSkgLSAxO1xcbit9XFxuK1xcbit1aW50NjRfdCBwbWRfcHNpemUodm9pZClcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuIFxcdGNoYXIgYnVmWzIwXTtcXG4gXFx0c3NpemVfdCBudW1fcmVhZDtcXG4gXFxuK1xcdGlmIChfX3BtZF9wc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIF9fcG1kX3BzaXplO1xcbitcXG4gXFx0ZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzMsNyArMTg2LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXFxuIFxcdGJ1ZltudW1fcmVhZF0gPSAnXFxcXDAnO1xcbiBcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFx0X19wbWRfcHNpemUgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BzaXplO1xcbit9XFxuK1xcbit1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9fcG1kX3BzaGlmdClcXG4rXFx0XFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcXG4rXFxuK1xcdGlmICghX19wbWRfcHNpemUpXFxuK1xcdFxcdF9fcG1kX3BzaXplID0gcG1kX3BzaXplKCk7XFxuK1xcbitcXHRpZiAoIV9fcG1kX3BzaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdF9fcG1kX3BzaGlmdCA9IHNpemVfdG9fc2hpZnQoX19wbWRfcHNpemUpO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxcbkBAIC00MTIsNyArNDQzLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuIFxcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtNDI1LDcgKzQ1Niw3IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIFxcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtNDM4LDcgKzQ2OSw3IEBAIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIFxcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGlmICghcG1kX3BhZ2VzaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuQEAgLTQ1MiwxNCArNDgzLDE5IEBAIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIHtcXG4gXFx0dWludDY0X3QgZW50WzJdO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BzaGlmdCgpO1xcbitcXG4rXFx0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0LyogZHJvcCBwbWQgKi9cXG4tXFx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRpZiAobW1hcChwdHIsIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCBNQVBfRklYRUQgfCBNQVBfQU5PTllNT1VTIHxcXG4gXFx0XFx0IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURSwgLTEsIDApICE9IHB0cilcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwIHRyYW5zaHVnZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKVxcbitcXHRpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk1BRFZfSFVHRVBBR0VcXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogYWxsb2NhdGUgdHJhbnNwYXJlbnQgaHVnZSBwYWdlICovXFxuQEAgLTQ3MSw3ICs1MDcsNyBAQCBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxcbiBcXG4gXFx0aWYgKFBBR0VNQVBfUFJFU0VOVChlbnRbMF0pIFxcdTAwMjZcXHUwMDI2IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBQQUdFTUFQX1BGTihlbnRbMF0pICsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXFx1MDAyNiAoKDEgXFx1MDAzY1xcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcXG4rXFx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcXHUwMDI2ICgoMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKVxcbiBcXHRcXHRyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTtcXG4gXFxuIFxcdHJldHVybiAtMTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuaW5kZXggOWE0OWFmODg3MDJlNC4uMDA0OGUwZTgyNzcwMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5AQCAtMzEsNiArMzEsOCBAQFxcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XFxuK2V4dGVybiB1aW50NjRfdCBfX3BtZF9wc2l6ZTtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDtcXG4gXFxuIC8qXFxuICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpXFxuQEAgLTg4LDcgKzkwLDkgQEAgYm9vbCBwYWdlbWFwX2lzX3BvcHVsYXRlZChpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcXG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XFxuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcXG4rdWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKTtcXG4rdWludDY0X3QgcG1kX3BzaXplKHZvaWQpO1xcbit1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpO1xcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuQEAgLTE1NywxMiArMTYxLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiBcXG4tLypcXG4tICogT24gcHBjNjQgdGhpcyB3aWxsIG9ubHkgd29yayB3aXRoIHJhZGl4IDJNIGh1Z2VwYWdlIHNpemVcXG4tICovXFxuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcXG4tI2RlZmluZSBIUEFHRV9TSVpFICgxIFxcdTAwM2NcXHUwMDNjIEhQQUdFX1NISUZUKVxcbi1cXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjU5OjExLjM3OTk0MjU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzE0MzY1ODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTM2MjRiMTlhNDc2Y2EzNzc2ZGNkZWI2NmNmNTliNTYzZmQ5MGE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDc6NTk6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTg4OSw3ICsxODg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0dGhwX3NhdmVfc2V0dGluZ3MoKTtcbiBcbiBcdHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKHBtZHNpemUpIHtcbiBcdFx0LyogT25seSBpZiBUSFAgaXMgc3VwcG9ydGVkLiAqL1xuIFx0XHR0aHBfcmVhZF9zZXR0aW5ncyhcdTAwMjZkZWZhdWx0X3NldHRpbmdzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCAxOTYwNjM1YTk1M2ViLi5hOTU2ZTVjNzRjNjU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjM1LDcgKzIzNSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2F2YWlsYWJsZSgpIHx8ICFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMTk1LDE0ICsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pXG4gVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGNvbGxhcHNlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHNpemUgPSAyICogSFBBR0VfU0laRTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0Y2hhciAqcHRyO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4rXHRudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuK1xuIFx0LyogTmVlZCBmaWxlIHRvIGJlIGNvcnJlY3Qgc2l6ZSBmb3IgdGVzdHMgZm9yIG5vbi1hbm9uLiAqL1xuIFx0aWYgKHZhcmlhbnQtXHUwMDNlYmFja2luZyAhPSBBTk9OX0JBQ0tFRClcbiBcdFx0QVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLVx1MDAzZWZkLCBzaXplKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uYWQxNDM3MmI3NWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTU2OSw3ICs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuIFxuIFx0Zm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSBcdTAwM2MgMjsgKyttaWdyYXRlKSB7XG4gXHRcdGZvciAodXNlX3RocCA9IDA7IHVzZV90aHAgXHUwMDNjIDI7ICsrdXNlX3RocCkge1xuLVx0XHRcdG5wYWdlcyA9IEFMSUdOKHVzZV90aHAgPyByZWFkX3BtZF9wYWdlc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxuK1x0XHRcdG5wYWdlcyA9IEFMSUdOKHVzZV90aHAgPyBwbWRfcHNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcbiBcdFx0XHRcdCAgICAgICBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkgXHUwMDNlXHUwMDNlIHNlbGYtXHUwMDNlcGFnZV9zaGlmdDtcbiBcdFx0XHRBU1NFUlRfTkUobnBhZ2VzLCAwKTtcbiBcdFx0XHRzaXplID0gbnBhZ2VzIFx1MDAzY1x1MDAzYyBzZWxmLVx1MDAzZXBhZ2Vfc2hpZnQ7XG5AQCAtNzMwLDcgKzczMCw3IEBAIFRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSAyICogcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMTk0MSw3ICsxOTQxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZW1wdHkpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0xOTg0LDcgKzE5ODQsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvKVxuIFx0aW50IHJldDtcbiBcdGludCB2YWw7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0yMDM4LDcgKzIwMzgsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mcmVlKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIwOTEsNyArMjA5MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZhdWx0KVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIxNjEsNyArMjE2MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcGFydGlhbF91bm1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHVubWFwX3NpemU7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XG4gXHR1bnNpZ25lZCBsb25nIGk7XG5AQCAtMjIyNiw3ICsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXHR2b2lkICpvbGRfcHRyLCAqbmV3X3B0ciA9IE5VTEw7XG5AQCAtMjMyMyw3ICsyMzIzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZXJyKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yNDEzLDcgKzI0MTMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvX2VycilcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgMiAqIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0yNjA5LDcgKzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpelxuIFRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbiB7XG4gXHRzdHJ1Y3QgYmVuY2htYXJrX3Jlc3VsdHMgdGhwX3Jlc3VsdHMsIHJlZ3VsYXJfcmVzdWx0cztcbi1cdHNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgdGhwX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGludCBpdGVyYXRpb25zID0gNTtcbiBcbiBcdGlmICghdGhwX3NpemUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBmODI2NzNmNWY2YjQ3Li43NmMxZmJjYzUyNjBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHBhZ2VfcG1kX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghaHBhZ2VfcG1kX3NpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbiBcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IDVmZDc3OTJhMGQ0NzkuLjYxN2UzMTEzOGFmMDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC01MjEsMTkgKzUyMSwyMyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7XG4gXHRpbnQgcGFnZW1hcF9mZCwgbl9ub3JtYWxfcGFnZXMsIG5faHVnZV9wYWdlcztcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gS1NGVF9TS0lQO1xuIFx0fVxuIFxuK1x0aWYgKCFocGFnZV9zaXplKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCIpO1xuK1xuIFx0bWFwX3NpemUgKj0gTUI7XG4gXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XG4gXG4tXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcbi1cdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICsgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuK1x0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xuK1x0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyArIGhwYWdlX3NpemUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIGhwYWdlX3NpemU7XG4gXG4gXHRpZiAobWFwX3B0cl9vcmlnID09IE1BUF9GQUlMRUQpXG4gXHRcdGVycigyLCBcImluaXRpYWwgbW1hcFwiKTtcbkBAIC01NDcsNyArNTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcbiBcdG5fbm9ybWFsX3BhZ2VzID0gMDtcbiBcdG5faHVnZV9wYWdlcyA9IDA7XG4tXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcbitcdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFx1MDAzYyAwKVxuIFx0XHRcdG5fbm9ybWFsX3BhZ2VzKys7XG4gXHRcdGVsc2VcbkBAIC01NzgsMTEgKzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0a3NmdF9wcmludF9tc2coXCJBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xcblwiLCAobWFwX3NpemUgLyBNQikgL1xuIFx0XHRcdFx0XHQgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7XG4gXG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBIUEFHRV9TSVpFKTtcbitcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfUEFTUztcbiBcbiBlcnJfb3V0OlxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XG4rXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX0ZBSUw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLjQyODBkMmM4N2IyMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBwcml2YXRlX2Fub25fdGhwLCAyKlJVTlRJTUUpXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXCIpO1xuIFxuLVx0cG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXBtZHNpemUpXG4gXHRcdFNLSVAocmV0dXJuLCBcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFwiKTtcbiBcbkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBzaGFyZWRfYW5vbl90aHAsIDIqUlVOVElNRSlcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcIik7XG4gXG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHBtZHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jXG5AQCAtMzMwLDcgKzMzMCw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZXJyLCB0ZXN0cyA9IDI7XG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHR0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHRocHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICh0aHBzaXplKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiW0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxuXCIsXG4gXHRcdFx0ICAgICAgIHRocHNpemUgLyAxMDI0KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGQ5YTRmYjc4MmVjZmUuLmQwZTM0ZGQ1ODUwYjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTE2NTQsNyArMTY1NCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5kMDI5MGM0NTY3YmQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTEzMyw3ICsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4tXHRzZWxmLVx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcXG5cIik7XG4gXG5AQCAtMjQxLDcgKzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4tXHRzZWxmLVx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuY1xuaW5kZXggM2ZmZmQ1ZjdlNmZiNC4uN2UzMmJhZDhhYjJhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuY1xuQEAgLTE0MSw3ICsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpXG4gXHRcdHZvaWQgKm1hcF9hZGRyO1xuIFx0fSBpbmZvO1xuIFxuLVx0aHVnZV9wYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmIChodWdlX3BhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4gXHRcdFNLSVAocmV0dXJuLCBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgYSB2YWxpZCBodWdlIHBhZ2Ugc2l6ZS5cXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM3OCw4ICszNzgsOCBAQCBmaVxuIENBVEVHT1JZPVwibWVtZmRfc2VjcmV0XCIgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyAxMDBcbisjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuK0NBVEVHT1JZPVwia3NtXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtUCAtcyAxMDBcbiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li42NzBmY2FkMDgzYjU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgaHBhZ2VfbGVuID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIWhwYWdlX2xlbilcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRwYWdlc2hpZnQgPSBmZnMocGFnZXNpemUpIC0gMTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi40MGNhMjI0YTYxZjQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0zNSwxMiArMzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0c2l6ZV90IG1hcF9sZW47XG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBkdXJhdGlvbiA9IDA7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wc2hpZnQoKTtcbiBcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCIpO1xuK1xuIFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XG4gXHRpZiAocmFtIFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxuIFx0XHRyYW0gPSBTSVpFX01BWCAvIDQ7XG5AQCAtNzAsMjMgKzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdH1cbiBcbiBcdHdhcm54KFwiYWxsb2NhdGUgJXpkIHRyYW5zaHVnZSBwYWdlcywgdXNpbmcgJXpkIE1pQiB2aXJ0dWFsIG1lbW9yeVwiXG4tXHQgICAgICBcIiBhbmQgJXpkIE1pQiBvZiByYW1cIiwgbGVuIFx1MDAzZVx1MDAzZSBIUEFHRV9TSElGVCwgbGVuIFx1MDAzZVx1MDAzZSAyMCxcbi1cdCAgICAgIHJhbSBcdTAwM2VcdTAwM2UgKDIwICsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcbitcdCAgICAgIFwiIGFuZCAlemQgTWlCIG9mIHJhbVwiLCBsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0LCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuK1x0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgKyBocGFnZV9zaGlmdCAtIHBzaGlmdCgpIC0gMSkpO1xuIFxuIFx0cGFnZW1hcF9mZCA9IG9wZW4oXCIvcHJvYy9zZWxmL3BhZ2VtYXBcIiwgT19SRE9OTFkpO1xuIFx0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcFxcblwiKTtcbiBcbi1cdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xuLVx0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBIUEFHRV9TSVpFLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbitcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuK1x0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiBcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiaW5pdGlhbCBtbWFwXCIpO1xuLVx0cHRyICs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7XG4rXHRwdHIgKz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTUFEVl9IVUdFUEFHRVwiKTtcbiBcbi1cdG1hcF9sZW4gPSByYW0gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIDEpO1xuK1x0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gMSk7XG4gXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XG4gXHRpZiAoIW1hcClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibWFwIG1hbGxvY1xcblwiKTtcbkBAIC05OSw3ICsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YSk7XG4tXHRcdGZvciAocCA9IHB0cjsgcCBcdTAwM2MgcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcbitcdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRcdGludDY0X3QgcGZuO1xuIFxuIFx0XHRcdHBmbiA9IGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKTtcbkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGlmIChwZm4gXHUwMDNjIDApIHtcbiBcdFx0XHRcdG5yX2ZhaWxlZCsrO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7XG4rXHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XG4gXG4gXHRcdFx0XHRucl9zdWNjZWVkKys7XG4gXHRcdFx0XHRpZiAoaWR4IFx1MDAzZT0gbWFwX2xlbikge1xuQEAgLTEyMyw3ICsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIHNwbGl0IHRyYW5zaHVnZSBwYWdlLCBrZWVwIGxhc3QgcGFnZSAqL1xuLVx0XHRcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbitcdFx0XHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXG4gXHRcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX0RPTlRORUVEXCIpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiKTtcbkBAIC0xMzEsNyArMTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0XHRrc2Z0X3ByaW50X21zZyhcIiUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1xcdFwiXG4gXHRcdFx0ICAgICAgIFwiJTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXG5cIixcbi1cdFx0XHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFx1MDAzZVx1MDAzZSBIUEFHRV9TSElGVCksIGxlbiAvIHMgLyAoMSBcdTAwM2NcdTAwM2MgMjApLFxuK1x0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4gXHRcdFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xuIFxuIFx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjIFx1MDAzZT0gZHVyYXRpb24pIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuaW5kZXggMWZiOTY3ZWY0OTg1NC4uMGI4YmJiNTVjMzM1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKVxuIHN0YXRpYyBpbnQgc2htZW1fYWxsb2NhdGVfYXJlYSh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKiphbGxvY19hcmVhLCBib29sIGlzX3NyYylcbiB7XG4gXHR2b2lkICphcmVhX2FsaWFzID0gTlVMTDtcbi1cdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlzX3NyYyA/IDAgOiBieXRlcztcbiBcdGNoYXIgKnAgPSBOVUxMLCAqcF9hbGlhcyA9IE5VTEw7XG4gXHRpbnQgbWVtX2ZkID0gdWZmZF9tZW1fZmRfY3JlYXRlKGJ5dGVzICogMiwgZmFsc2UpO1xuQEAgLTE5NCwxMCArMTk0LDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsXG4gXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcbiB7XG4tXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4tXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4rXHRcdFx0ICAgICAgcG1kX3BzaXplKCkpKVxuIFx0XHRlcnIoXCJEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wiLFxuIFx0XHQgICAgZXhwZWN0X25yX2hwYWdlcyk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC02NDYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdFx0dWZmZF90ZXN0X29wcy1cdTAwM2VjaGVja19wbWRfbWFwcGluZyhnb3B0cyxcbiBcdFx0XHRcdFx0XHQgZ29wdHMtXHUwMDNlYXJlYV9kc3QsXG4gXHRcdFx0XHRcdFx0IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplIC9cbi1cdFx0XHRcdFx0XHQgcmVhZF9wbWRfcGFnZXNpemUoKSk7XG4rXHRcdFx0XHRcdFx0IHBtZF9wc2l6ZSgpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbkBAIC0xOTc1LDcgKzE5NzUsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbVxuIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbXNnICptc2csXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHVmZmRfYXJncyAqYXJncylcbiB7XG4tXHR1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0X2NvbW1vbihnb3B0cywgbXNnLCBhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpKTtcbitcdHVmZmRfbW92ZV9oYW5kbGVfZmF1bHRfY29tbW9uKGdvcHRzLCBtc2csIGFyZ3MsIHBtZF9wc2l6ZSgpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0yMDg2LDcgKzIwODYsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYXJnc190XG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0ZXJyKFwibWFkdmlzZShNQURWX0hVR0VQQUdFKSBmYWlsdXJlXCIpO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbitcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5AQCAtMjA5NCw3ICsyMDk0LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9zcGxpdF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmZF90ZXN0X2FcbiB7XG4gXHRpZiAobWFkdmlzZShnb3B0cy1cdTAwM2VhcmVhX2RzdCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4gXHRcdGVycihcIm1hZHZpc2UoTUFEVl9OT0hVR0VQQUdFKSBmYWlsdXJlXCIpO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbitcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbmluZGV4IDU3MmMyNTE2ZTg3NGQuLmY0NmVkZDNlZTZkODEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5AQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgaW50IGRldGVjdF90aHBfc2l6ZXMoc2l6ZV90IHNpemVzW10sIGludCBtYXgpXG4gXHRpbnQgaTtcbiBcbiBcdC8qIHRocCBub3Qgc3VwcG9ydGVkIGF0IGFsbC4gKi9cbi1cdGlmICghcmVhZF9wbWRfcGFnZXNpemUoKSlcbitcdGlmICghcG1kX3BzaXplKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3JkZXJzID0gdGhwX3N1cHBvcnRlZF9vcmRlcnMoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgKzIxLDggQEBcbiBcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbit1aW50NjRfdCBfX3BtZF9wc2l6ZTtcbit1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XG4gXG4gdWludDY0X3QgcGFnZW1hcF9nZXRfZW50cnkoaW50IGZkLCBjaGFyICpzdGFydClcbiB7XG5AQCAtMTU1LDEyICsxNTcsMjMgQEAgYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuK3VpbnQ2NF90IHNpemVfdG9fc2hpZnQodWludDY0X3Qgc2l6ZSlcbit7XG4rXHRpZiAoX19idWlsdGluX3BvcGNvdW50bGwoc2l6ZSkgIT0gMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gZmZzbChzaXplKSAtIDE7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKVxuIHtcbiBcdGludCBmZDtcbiBcdGNoYXIgYnVmWzIwXTtcbiBcdHNzaXplX3QgbnVtX3JlYWQ7XG4gXG4rXHRpZiAoX19wbWRfcHNpemUpXG4rXHRcdHJldHVybiBfX3BtZF9wc2l6ZTtcbitcbiBcdGZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTczLDcgKzE4NiwyNSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuIFx0YnVmW251bV9yZWFkXSA9ICdcXDAnO1xuIFx0Y2xvc2UoZmQpO1xuIFxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4rXHRfX3BtZF9wc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4rXG4rXHRyZXR1cm4gX19wbWRfcHNpemU7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wc2hpZnQodm9pZClcbit7XG4rXHRpZiAoX19wbWRfcHNoaWZ0KVxuK1x0XHRyZXR1cm4gX19wbWRfcHNoaWZ0O1xuK1xuK1x0aWYgKCFfX3BtZF9wc2l6ZSlcbitcdFx0X19wbWRfcHNpemUgPSBwbWRfcHNpemUoKTtcbitcbitcdGlmICghX19wbWRfcHNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0X19wbWRfcHNoaWZ0ID0gc2l6ZV90b19zaGlmdChfX3BtZF9wc2l6ZSk7XG4rXG4rXHRyZXR1cm4gX19wbWRfcHNoaWZ0O1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpXG5AQCAtNDEyLDcgKzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbkBAIC00MjUsNyArNDU2LDcgQEAgYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiBcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG5AQCAtNDM4LDcgKzQ2OSw3IEBAIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gXG4gYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbkBAIC00NTIsMTQgKzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgdHJhbnNodWdlXFxuXCIpO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbitcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfSFVHRVBBR0VcXG5cIik7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyArNTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSArIDEgPT0gUEFHRU1BUF9QRk4oZW50WzFdKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcbitcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4wMDQ4ZTBlODI3NzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbitleHRlcm4gdWludDY0X3QgX19wbWRfcHNpemU7XG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDtcbiBcbiAvKlxuICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpXG5AQCAtODgsNyArOTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4rdWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKTtcbit1aW50NjRfdCBwbWRfcHNpemUodm9pZCk7XG4rdWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiArMTYxLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xuIGludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiBcbi0vKlxuLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplXG4tICovXG4tI2RlZmluZSBIUEFHRV9TSElGVCAyMVxuLSNkZWZpbmUgSFBBR0VfU0laRSAoMSBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjU5OjExLjM3OTk0NDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxNDM2MzQwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgYXBwbGllZCBhcyB0aGUgSEVBRCBjb21taXQsIGlzIHdvcnRoIGZ1enppbmcuIFRoZSB1c2VyIGlzIGFza2luZyBmb3IgYW4gZXZhbHVhdGlvbiwgYW5kIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGBnaXQgZGlmZmAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGV2ZXJ5IG1vZGlmaWVkIGZpbGUgZmFsbHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy4uLmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgbmVnYXRpdmUgY3JpdGVyaW9uIGJhc2VkIG9uIHRoZSBydWxlcy5cblxuTGV0J3MgcXVpY2tseSByZWZyZXNoIHRoZSBydWxlcyByZWdhcmRpbmcgd2hlbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjcml0ZXJpYSBoZXJlIGlzIGFueSBjb2RlIHN0cmljdGx5IHdpdGhpbiBcIlVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCJcblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBXZSd2ZSBnb3QgYGNvdy5jYCwgYGZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jYCwgYGd1YXJkLXJlZ2lvbnMuY2AsIGBobW0tdGVzdHMuY2AsIGBraHVnZXBhZ2VkLmNgLCBga3NtX3Rlc3RzLmNgLCBgbWlncmF0aW9uLmNgLCBgbWtkaXJ0eS5jYCwgYHBhZ2VtYXBfaW9jdGwuY2AsIGBwcmN0bF90aHBfZGlzYWJsZS5jYCwgYHByb2Nlc3NfbWFkdi5jYCwgYHJ1bl92bXRlc3RzLnNoYCwgYHNvZnQtZGlydHkuY2AsIGBzcGxpdF9odWdlX3BhZ2VfdGVzdC5jYCwgYHRyYW5zaHVnZS1zdHJlc3MuY2AsIGB1ZmZkLWNvbW1vbi5jYCwgYHVmZmQtdW5pdC10ZXN0cy5jYCwgYHVmZmQtd3AtbXJlbWFwLmNgLCBgdm1fdXRpbC5jYCwgYW5kIGB2bV91dGlsLmhgLlxuXG5ZZXAsIGFsbCBvZiB0aGVtIGFyZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBUaGVzZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgdXNlci1zcGFjZSBzZWxmLXRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBDcnVjaWFsbHksIHRoZXkgZG8gKm5vdCogaW1wYWN0IHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gdXNlcnNwYWNlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlc2UgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlcnNwYWNlIHNlbGYtdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBub25lIG9mIHRoZSBjaGFuZ2VzIGludm9sdmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIG91ciBhdHRlbnRpb24sIHNvIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgYXJyYXkuIFNpbWlsYXJseSwgc2luY2UgdGhlc2UgYXJlIHNlbGYtdGVzdHMsIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBhY3RpdmF0ZSB0aGlzIGNvZGUsIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGFycmF5LlxuXG5MZXQncyBlbnN1cmUgd2Ugc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gVGhlIHBhcmFtZXRlcnMgYXJlOiBgRW5hYmxlQ29uZmlnc2AgKGFycmF5IG9mIHN0cmluZ3MsIG51bGxhYmxlKSwgYEZvY3VzU3ltYm9sc2AgKGFycmF5IG9mIHN0cmluZ3MsIG51bGxhYmxlKSwgYFJlYXNvbmluZ2AgKHN0cmluZyksIGFuZCBgV29ydGhGdXp6aW5nYCAoYm9vbGVhbikuIFRoZSBzaWduYXR1cmUgaXMgY29ycmVjdCwgYW5kIG15IGFuYWx5c2lzIGZpdHMgcGVyZmVjdGx5IHdpdGhpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEzLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6NTk6MTguNTIzNTgwNTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzo1OToxOC41MjM2MDMwOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowjhnrg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 07:40:58 +0000 UTC FinishedAt: 2026-09-14 07:59:19 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMzYyNGIxOWE0NzZjYTM3NzZkY2RlYjY2Y2Y1OWI1NjNmZDkwYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzo1OToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTg4OSw3ICYjNDM7MTg4OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdHRocF9zYXZlX3NldHRpbmdzKCk7XG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAocG1kc2l6ZSkge1xuIFx0XHQvKiBPbmx5IGlmIFRIUCBpcyBzdXBwb3J0ZWQuICovXG4gXHRcdHRocF9yZWFkX3NldHRpbmdzKFx1MDAyNmRlZmF1bHRfc2V0dGluZ3MpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmE5NTZlNWM3NGM2NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0cG1kX3BhZ2VzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSB8fCAhcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMTk1LDE0ICYjNDM7MjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdGNoYXIgKnB0cjtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4mIzQzO1x0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4gXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxuIFx0XHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXHUwMDNlZmQsIHNpemUpLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5hZDE0MzcyYjc1ZDllIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5AQCAtNTY5LDcgJiM0Mzs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuIFxuIFx0Zm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSBcdTAwM2MgMjsgJiM0MzsmIzQzO21pZ3JhdGUpIHtcbiBcdFx0Zm9yICh1c2VfdGhwID0gMDsgdXNlX3RocCBcdTAwM2MgMjsgJiM0MzsmIzQzO3VzZV90aHApIHtcbi1cdFx0XHRucGFnZXMgPSBBTElHTih1c2VfdGhwID8gcmVhZF9wbWRfcGFnZXNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcbiYjNDM7XHRcdFx0bnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxuIFx0XHRcdFx0ICAgICAgIHNlbGYtXHUwMDNlcGFnZV9zaXplKSBcdTAwM2VcdTAwM2Ugc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuIFx0XHRcdEFTU0VSVF9ORShucGFnZXMsIDApO1xuIFx0XHRcdHNpemUgPSBucGFnZXMgXHUwMDNjXHUwMDNjIHNlbGYtXHUwMDNlcGFnZV9zaGlmdDtcbkBAIC03MzAsNyAmIzQzOzczMCw3IEBAIFRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gMiAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYyhzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTE5NDEsNyAmIzQzOzE5NDEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lbXB0eSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0xOTg0LDcgJiM0MzsxOTg0LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVybylcbiBcdGludCByZXQ7XG4gXHRpbnQgdmFsO1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFELFxuQEAgLTIwMzgsNyAmIzQzOzIwMzgsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mcmVlKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yMDkxLDcgJiM0MzsyMDkxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIxNjEsNyAmIzQzOzIxNjEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX3BhcnRpYWxfdW5tYXBfZmF1bHQpXG4ge1xuIFx0c3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjtcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdW5tYXBfc2l6ZTtcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0c1szXTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbkBAIC0yMjI2LDcgJiM0MzsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXRzWzNdO1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFx0dm9pZCAqb2xkX3B0ciwgKm5ld19wdHIgPSBOVUxMO1xuQEAgLTIzMjMsNyAmIzQzOzIzMjMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yNDEzLDcgJiM0MzsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFELFxuQEAgLTI2MDksNyAmIzQzOzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpelxuIFRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbiB7XG4gXHRzdHJ1Y3QgYmVuY2htYXJrX3Jlc3VsdHMgdGhwX3Jlc3VsdHMsIHJlZ3VsYXJfcmVzdWx0cztcbi1cdHNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZV90IHRocF9zaXplID0gcG1kX3BzaXplKCk7XG4gXHRpbnQgaXRlcmF0aW9ucyA9IDU7XG4gXG4gXHRpZiAoIXRocF9zaXplKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTMzMCw3ICYjNDM7MTMzMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdGhwYWdlX3BtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRocGFnZV9wbWRfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4gXHRocGFnZV9wbWRfbnIgPSBocGFnZV9wbWRfc2l6ZSAvIHBhZ2Vfc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42MTdlMzExMzhhZjA2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtNTIxLDE5ICYjNDM7NTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiBcdG1hcF9zaXplICo9IE1CO1xuIFx0c2l6ZV90IGxlbiA9IG1hcF9zaXplO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuJiM0MztcdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0TUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xuJiM0MztcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgJiM0MzsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXJyKDIsIFwmIzM0O2luaXRpYWwgbW1hcFwmIzM0Oyk7XG5AQCAtNTQ3LDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFxuIFx0bl9ub3JtYWxfcGFnZXMgPSAwO1xuIFx0bl9odWdlX3BhZ2VzID0gMDtcbi1cdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXHUwMDNjIG1hcF9wdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7XG4mIzQzO1x0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiBcdFx0aWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSBcdTAwM2MgMClcbiBcdFx0XHRuX25vcm1hbF9wYWdlcyYjNDM7JiM0Mzs7XG4gXHRcdGVsc2VcbkBAIC01NzgsMTEgJiM0Mzs1ODIsMTEgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0F2ZXJhZ2Ugc3BlZWQ6ICAlLjNmIE1pQi9zXFxuXCYjMzQ7LCAobWFwX3NpemUgLyBNQikgL1xuIFx0XHRcdFx0XHQgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7XG4gXG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7XG4mIzQzO1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfUEFTUztcbiBcbiBlcnJfb3V0OlxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IEhQQUdFX1NJWkUpO1xuJiM0MztcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX0ZBSUw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLjQyODBkMmM4N2IyMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC0yMjksNyAmIzQzOzIyOSw3IEBAIFRFU1RfRl9USU1FT1VUKG1pZ3JhdGlvbiwgcHJpdmF0ZV9hbm9uX3RocCwgMipSVU5USU1FKVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuIFxuLVx0cG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFwbWRzaXplKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCYjMzQ7KTtcbiBcbkBAIC0yNjMsNyAmIzQzOzI2Myw3IEBAIFRFU1RfRl9USU1FT1VUKG1pZ3JhdGlvbiwgc2hhcmVkX2Fub25fdGhwLCAyKlJVTlRJTUUpXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVwmIzM0Oyk7XG4gXG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXBtZHNpemUpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jXG5AQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGVyciwgdGVzdHMgPSAyO1xuIFxuIFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0dGhwc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0dGhwc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKHRocHNpemUpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7W0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB0aHBzaXplIC8gMTAyNCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi5kMGUzNGRkNTg1MGIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xNjU0LDcgJiM0MzsxNjU0LDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0aHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmQwMjkwYzQ1NjdiZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtMTMzLDcgJiM0MzsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcbi1cdHNlbGYtXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1VuYWJsZSB0byByZWFkIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiBcbkBAIC0yNDEsNyAmIzQzOzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcbi1cdHNlbGYtXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O1VuYWJsZSB0byByZWFkIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG5pbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG5AQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpXG4gXHRcdHZvaWQgKm1hcF9hZGRyO1xuIFx0fSBpbmZvO1xuIFxuLVx0aHVnZV9wYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdGh1Z2VfcGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoaHVnZV9wYWdlX3NpemUgXHUwMDNjPSAwKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7Q291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxcblwmIzM0Oyk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM3OCw4ICYjNDM7Mzc4LDggQEAgZmlcbiBDQVRFR09SWT1cJiMzNDttZW1mZF9zZWNyZXRcJiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuJiM0MztDQVRFR09SWT1cJiMzNDtrc21cJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IDVmMjc4OTEzYzRkNzUuLjY3MGZjYWQwODNiNTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTg4LDcgJiM0Mzs4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0c2l6ZV90IGhwYWdlX2xlbiA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9sZW4pXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0cGFnZXNoaWZ0ID0gZmZzKHBhZ2VzaXplKSAtIDE7XG4tXHRwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uNDBjYTIyNGE2MWY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMzUsMTIgJiM0MzszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRzaXplX3QgbWFwX2xlbjtcbiBcdGludCBwYWdlbWFwX2ZkO1xuIFx0aW50IGR1cmF0aW9uID0gMDtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7XG4gXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4gXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcbiBcdGlmIChyYW0gXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXG4gXHRcdHJhbSA9IFNJWkVfTUFYIC8gNDtcbkBAIC03MCwyMyAmIzQzOzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdH1cbiBcbiBcdHdhcm54KFwmIzM0O2FsbG9jYXRlICV6ZCB0cmFuc2h1Z2UgcGFnZXMsIHVzaW5nICV6ZCBNaUIgdmlydHVhbCBtZW1vcnlcJiMzNDtcbi1cdCAgICAgIFwmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW1cJiMzNDssIGxlbiBcdTAwM2VcdTAwM2UgSFBBR0VfU0hJRlQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4tXHQgICAgICByYW0gXHUwMDNlXHUwMDNlICgyMCAmIzQzOyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xuJiM0MztcdCAgICAgIFwmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW1cJiMzNDssIGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4mIzQzO1x0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgJiM0MzsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTtcbiBcbiBcdHBhZ2VtYXBfZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0OywgT19SRE9OTFkpO1xuIFx0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtvcGVuIHBhZ2VtYXBcXG5cJiMzNDspO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiYjNDM7XHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcbiYjNDM7XHRwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiBcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2luaXRpYWwgbW1hcFwmIzM0Oyk7XG4tXHRwdHIgJiM0Mzs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7XG4mIzQzO1x0cHRyICYjNDM7PSBocGFnZV9zaXplIC0gKHVpbnRwdHJfdClwdHIgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hZHZpc2UocHRyLCBsZW4sIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9IVUdFUEFHRVwmIzM0Oyk7XG4gXG4tXHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoSFBBR0VfU0hJRlQgLSAxKTtcbiYjNDM7XHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcbiBcdG1hcCA9IG1hbGxvYyhtYXBfbGVuKTtcbiBcdGlmICghbWFwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bWFwIG1hbGxvY1xcblwmIzM0Oyk7XG5AQCAtOTksNyAmIzQzOzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZhKTtcbi1cdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRmb3IgKHAgPSBwdHI7IHAgXHUwMDNjIHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHtcbiBcdFx0XHRpbnQ2NF90IHBmbjtcbiBcbiBcdFx0XHRwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7XG5AQCAtMTA3LDcgJiM0MzsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aWYgKHBmbiBcdTAwM2MgMCkge1xuIFx0XHRcdFx0bnJfZmFpbGVkJiM0MzsmIzQzOztcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0c2l6ZV90IGlkeCA9IHBmbiBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpO1xuJiM0MztcdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKTtcbiBcbiBcdFx0XHRcdG5yX3N1Y2NlZWQmIzQzOyYjNDM7O1xuIFx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IG1hcF9sZW4pIHtcbkBAIC0xMjMsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXG4tXHRcdFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0XHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXG4gXHRcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9ET05UTkVFRFwmIzM0Oyk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmIpO1xuQEAgLTEzMSw3ICYjNDM7MTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslLjNmIHMvbG9vcCwgJS4zZiBtcy9wYWdlLCAlMTAuM2YgTWlCL3NcXHRcJiMzNDtcbiBcdFx0XHQgICAgICAgXCYjMzQ7JTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiYjNDM7XHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFx0XHQgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7XG4gXG4gXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXHUwMDNlPSBkdXJhdGlvbikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5pbmRleCAxZmI5NjdlZjQ5ODU0Li4wYjhiYmI1NWMzMzU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKVxuIHN0YXRpYyBpbnQgc2htZW1fYWxsb2NhdGVfYXJlYSh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKiphbGxvY19hcmVhLCBib29sIGlzX3NyYylcbiB7XG4gXHR2b2lkICphcmVhX2FsaWFzID0gTlVMTDtcbi1cdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplX3QgYnl0ZXMgPSBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpc19zcmMgPyAwIDogYnl0ZXM7XG4gXHRjaGFyICpwID0gTlVMTCwgKnBfYWxpYXMgPSBOVUxMO1xuIFx0aW50IG1lbV9mZCA9IHVmZmRfbWVtX2ZkX2NyZWF0ZShieXRlcyAqIDIsIGZhbHNlKTtcbkBAIC0xOTQsMTAgJiM0MzsxOTQsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcbiBcbiBzdGF0aWMgdm9pZCBzaG1lbV9jaGVja19wbWRfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKnAsIGludCBleHBlY3RfbnJfaHBhZ2VzKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4tXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4mIzQzO1x0XHRcdCAgICAgIHBtZF9wc2l6ZSgpKSlcbiBcdFx0ZXJyKFwmIzM0O0RpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXCYjMzQ7LFxuIFx0XHQgICAgZXhwZWN0X25yX2hwYWdlcyk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC02NDYsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRcdHVmZmRfdGVzdF9vcHMtXHUwMDNlY2hlY2tfcG1kX21hcHBpbmcoZ29wdHMsXG4gXHRcdFx0XHRcdFx0IGdvcHRzLVx1MDAzZWFyZWFfZHN0LFxuIFx0XHRcdFx0XHRcdCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSAvXG4tXHRcdFx0XHRcdFx0IHJlYWRfcG1kX3BhZ2VzaXplKCkpO1xuJiM0MztcdFx0XHRcdFx0XHQgcG1kX3BzaXplKCkpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbkBAIC0xOTc1LDcgJiM0MzsxOTc1LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21cbiBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21zZyAqbXNnLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCB1ZmZkX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSk7XG4mIzQzO1x0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcG1kX3BzaXplKCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTIwODYsNyAmIzQzOzIwODYsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYXJnc190XG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0ZXJyKFwmIzM0O21hZHZpc2UoTUFEVl9IVUdFUEFHRSkgZmFpbHVyZVwmIzM0Oyk7XG4tXHR1ZmZkX21vdmVfdGVzdF9jb21tb24oZ29wdHMsIHRhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpLFxuJiM0MztcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5AQCAtMjA5NCw3ICYjNDM7MjA5NCw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfc3BsaXRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hXG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpKVxuIFx0XHRlcnIoXCYjMzQ7bWFkdmlzZShNQURWX05PSFVHRVBBR0UpIGZhaWx1cmVcJiMzNDspO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbiYjNDM7XHR1ZmZkX21vdmVfdGVzdF9jb21tb24oZ29wdHMsIHRhcmdzLCBwbWRfcHNpemUoKSxcbiBcdFx0XHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5pbmRleCA1NzJjMjUxNmU4NzRkLi5mNDZlZGQzZWU2ZDgxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTM4LDcgJiM0MzszOCw3IEBAIHN0YXRpYyBpbnQgZGV0ZWN0X3RocF9zaXplcyhzaXplX3Qgc2l6ZXNbXSwgaW50IG1heClcbiBcdGludCBpO1xuIFxuIFx0LyogdGhwIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLiAqL1xuLVx0aWYgKCFyZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdGlmICghcG1kX3BzaXplKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3JkZXJzID0gdGhwX3N1cHBvcnRlZF9vcmRlcnMoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO3VpbnQ2NF90IF9fcG1kX3BzaXplO1xuJiM0Mzt1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XG4gXG4gdWludDY0X3QgcGFnZW1hcF9nZXRfZW50cnkoaW50IGZkLCBjaGFyICpzdGFydClcbiB7XG5AQCAtMTU1LDEyICYjNDM7MTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiYjNDM7dWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZmc2woc2l6ZSkgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50NjRfdCBwbWRfcHNpemUodm9pZClcbiB7XG4gXHRpbnQgZmQ7XG4gXHRjaGFyIGJ1ZlsyMF07XG4gXHRzc2l6ZV90IG51bV9yZWFkO1xuIFxuJiM0MztcdGlmIChfX3BtZF9wc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBfX3BtZF9wc2l6ZTtcbiYjNDM7XG4gXHRmZCA9IG9wZW4oUE1EX1NJWkVfRklMRV9QQVRILCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3Myw3ICYjNDM7MTg2LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXG4gXHRidWZbbnVtX3JlYWRdID0gJiMzOTtcXDAmIzM5OztcbiBcdGNsb3NlKGZkKTtcbiBcbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuJiM0MztcdF9fcG1kX3BzaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoX19wbWRfcHNoaWZ0KVxuJiM0MztcdFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFfX3BtZF9wc2l6ZSlcbiYjNDM7XHRcdF9fcG1kX3BzaXplID0gcG1kX3BzaXplKCk7XG4mIzQzO1xuJiM0MztcdGlmICghX19wbWRfcHNpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0X19wbWRfcHNoaWZ0ID0gc2l6ZV90b19zaGlmdChfX3BtZF9wc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BtZF9wc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00MTIsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxuXCYjMzQ7KTtcbkBAIC00MjUsNyAmIzQzOzQ1Niw3IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuQEAgLTQzOCw3ICYjNDM7NDY5LDcgQEAgYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiBcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuQEAgLTQ1MiwxNCAmIzQzOzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wc2hpZnQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiBcbiBcdC8qIGRyb3AgcG1kICovXG4tXHRpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIHRyYW5zaHVnZVxcblwmIzM0Oyk7XG4gXG4tXHRpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKVxuJiM0MztcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtNQURWX0hVR0VQQUdFXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIGFsbG9jYXRlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSAqL1xuQEAgLTQ3MSw3ICYjNDM7NTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSAmIzQzOyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pIFx1MDAyNiAoKDEgXHUwMDNjXHUwMDNjIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKSkgLSAxKSkpXG4mIzQzO1x0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcdTAwMjYgKCgxIFx1MDAzY1x1MDAzYyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKVxuIFx0XHRyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTtcbiBcbiBcdHJldHVybiAtMTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IDlhNDlhZjg4NzAyZTQuLjAwNDhlMGU4Mjc3MDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTMxLDYgJiM0MzszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaXplO1xuJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcHNoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OCw3ICYjNDM7OTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4mIzQzO3VpbnQ2NF90IHNpemVfdG9fc2hpZnQodWludDY0X3Qgc2l6ZSk7XG4mIzQzO3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKTtcbiYjNDM7dWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiAmIzQzOzE2MSw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxMzYyNGIxOWE0NzZjYTM3NzZkY2RlYjY2Y2Y1OWI1NjNmZDkwYTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNzo1OToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uZTQyZWRlY2NmZDdhMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTE4ODksNyAmIzQzOzE4ODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJdGhwX3NhdmVfc2V0dGluZ3MoKTsKIAogCXBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQlwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJcG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmIChwbWRzaXplKSB7CiAJCS8qIE9ubHkgaWYgVEhQIGlzIHN1cHBvcnRlZC4gKi8KIAkJdGhwX3JlYWRfc2V0dGluZ3MoJmFtcDtkZWZhdWx0X3NldHRpbmdzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggMTk2MDYzNWE5NTNlYi4uYTk1NmU1Yzc0YzY1NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgaW50IG1haW4odm9pZCkKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghdGhwX2F2YWlsYWJsZSgpIHx8ICFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCkBAIC0yMTk1LDE0ICYjNDM7MjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKQogVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGNvbGxhcHNlKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCWNoYXIgKnB0cjsKIAlpbnQgaTsKIAogCWlmICghdGhwX2F2YWlsYWJsZSgpKQogCQlTS0lQKHJldHVybiwgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJc2l6ZSA9IDIgKiBocGFnZV9zaXplOwomIzQzOwludW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplOwomIzQzOwogCS8qIE5lZWQgZmlsZSB0byBiZSBjb3JyZWN0IHNpemUgZm9yIHRlc3RzIGZvciBub24tYW5vbi4gKi8KIAlpZiAodmFyaWFudC0mZ3Q7YmFja2luZyAhPSBBTk9OX0JBQ0tFRCkKIAkJQVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLSZndDtmZCwgc2l6ZSksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwppbmRleCBlMjY0MmVjYTBkMDJiLi5hZDE0MzcyYjc1ZDllIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwpAQCAtNTY5LDcgJiM0Mzs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKQogCiAJZm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSAmbHQ7IDI7ICYjNDM7JiM0MzttaWdyYXRlKSB7CiAJCWZvciAodXNlX3RocCA9IDA7IHVzZV90aHAgJmx0OyAyOyAmIzQzOyYjNDM7dXNlX3RocCkgewotCQkJbnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHJlYWRfcG1kX3BhZ2VzaXplKCkgOiBITU1fQlVGRkVSX1NJWkUsCiYjNDM7CQkJbnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLAogCQkJCSAgICAgICBzZWxmLSZndDtwYWdlX3NpemUpICZndDsmZ3Q7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiAJCQlBU1NFUlRfTkUobnBhZ2VzLCAwKTsKIAkJCXNpemUgPSBucGFnZXMgJmx0OyZsdDsgc2VsZi0mZ3Q7cGFnZV9zaGlmdDsKQEAgLTczMCw3ICYjNDM7NzMwLDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKQogCWludCAqcHRyOwogCWludCByZXQ7CiAKLQlzaXplID0gMiAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemUgPSAyICogcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKHNpemUsIHNpemUsCiAJCQkJICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLApAQCAtMTk0MSw3ICYjNDM7MTk0MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2VtcHR5KQogCWludCAqcHRyOwogCWludCByZXQ7CiAKLQlzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJYnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCwKQEAgLTE5ODQsNyAmIzQzOzE5ODQsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvKQogCWludCByZXQ7CiAJaW50IHZhbDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLAogCQkJCSAgUFJPVF9SRUFELApAQCAtMjAzOCw3ICYjNDM7MjAzOCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZyZWUpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLAogCQkJCSAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTIwOTEsNyAmIzQzOzIwOTEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mYXVsdCkKIAlpbnQgKnB0cjsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsCiAJCQkJICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLApAQCAtMjE2MSw3ICYjNDM7MjE2MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcGFydGlhbF91bm1hcF9mYXVsdCkKIHsKIAlzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCXVuc2lnbmVkIGxvbmcgdW5tYXBfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldHNbM107CiAJdW5zaWduZWQgbG9uZyBpOwpAQCAtMjIyNiw3ICYjNDM7MjIyNiw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcmVtYXBfZmF1bHQpCiB7CiAJc3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldHNbM107CiAJdW5zaWduZWQgbG9uZyBpOwogCXZvaWQgKm9sZF9wdHIsICpuZXdfcHRyID0gTlVMTDsKQEAgLTIzMjMsNyAmIzQzOzIzMjMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCkBAIC0yNDEzLDcgJiM0MzsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpCiAJaW50ICpwdHI7CiAJaW50IHJldDsKIAotCXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplID0gcG1kX3BzaXplKCk7CiAKIAlidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSwKIAkJCQkgIFBST1RfUkVBRCwKQEAgLTI2MDksNyAmIzQzOzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpegogVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogewogCXN0cnVjdCBiZW5jaG1hcmtfcmVzdWx0cyB0aHBfcmVzdWx0cywgcmVndWxhcl9yZXN1bHRzOwotCXNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemVfdCB0aHBfc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWludCBpdGVyYXRpb25zID0gNTsKIAogCWlmICghdGhwX3NpemUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMTMzMCw3ICYjNDM7MTMzMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKLQlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWhwYWdlX3BtZF9zaXplID0gcG1kX3BzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXG4mIzM0Oyk7CiAJaHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCmluZGV4IDVmZDc3OTJhMGQ0NzkuLjYxN2UzMTEzOGFmMDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jCkBAIC01MjEsMTkgJiM0Mzs1MjEsMjMgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCwKIAlzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7CiAJaW50IHBhZ2VtYXBfZmQsIG5fbm9ybWFsX3BhZ2VzLCBuX2h1Z2VfcGFnZXM7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkgewogCQlrc2Z0X3ByaW50X21zZygmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiBLU0ZUX1NLSVA7CiAJfQogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKIAltYXBfc2l6ZSAqPSBNQjsKIAlzaXplX3QgbGVuID0gbWFwX3NpemU7CiAKLQlsZW4gLT0gbGVuICUgSFBBR0VfU0laRTsKLQltYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwlsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTsKJiM0MzsJbWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJCU1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKLQltYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7CiYjNDM7CW1hcF9wdHIgPSBtYXBfcHRyX29yaWcgJiM0MzsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTsKIAogCWlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRCkKIAkJZXJyKDIsICYjMzQ7aW5pdGlhbCBtbWFwJiMzNDspOwpAQCAtNTQ3LDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCiAJbl9ub3JtYWxfcGFnZXMgPSAwOwogCW5faHVnZV9wYWdlcyA9IDA7Ci0JZm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCAmbHQ7IG1hcF9wdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBIUEFHRV9TSVpFKSB7CiYjNDM7CWZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgJmx0OyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewogCQlpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpICZsdDsgMCkKIAkJCW5fbm9ybWFsX3BhZ2VzJiM0MzsmIzQzOzsKIAkJZWxzZQpAQCAtNTc4LDExICYjNDM7NTgyLDExIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsCiAJa3NmdF9wcmludF9tc2coJiMzNDtBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xuJiMzNDssIChtYXBfc2l6ZSAvIE1CKSAvCiAJCQkJCSAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTsKIAotCW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTsKJiM0MzsJbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpOwogCXJldHVybiBLU0ZUX1BBU1M7CiAKIGVycl9vdXQ6Ci0JbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IEhQQUdFX1NJWkUpOwomIzQzOwltdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSk7CiAJcmV0dXJuIEtTRlRfRkFJTDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCBmMTlkNTNjNjk1NzY0Li40MjgwZDJjODdiMjJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHByaXZhdGVfYW5vbl90aHAsIDIqUlVOVElNRSkKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlJiMzNDspOwogCi0JcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXBtZHNpemUgPSBwbWRfcHNpemUoKTsKIAlpZiAoIXBtZHNpemUpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZCYjMzQ7KTsKIApAQCAtMjYzLDcgJiM0MzsyNjMsNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHNoYXJlZF9hbm9uX3RocCwgMipSVU5USU1FKQogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiAKLQlwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJcG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghcG1kc2l6ZSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMKaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYwpAQCAtMzMwLDcgJiM0MzszMzAsNyBAQCBpbnQgbWFpbih2b2lkKQogCWludCBlcnIsIHRlc3RzID0gMjsKIAogCXBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQl0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJdGhwc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICh0aHBzaXplKSB7CiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXG4mIzM0OywKIAkJCSAgICAgICB0aHBzaXplIC8gMTAyNCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZDlhNGZiNzgyZWNmZS4uZDBlMzRkZDU4NTBiMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMTY1NCw3ICYjNDM7MTY1NCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJa3NmdF9wcmludF9oZWFkZXIoKTsKIAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0JaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmIChpbml0X3VmZmQoKSkKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1c2VyZmF1bHRmZFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggODJjNmU5NmVhNmViMy4uZDAyOTBjNDU2N2JkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfY29tcGxldGVseSkKIAlpZiAoIXRocF9hdmFpbGFibGUoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXNlbGYtJmd0O3BtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzZWxmLSZndDtwbWRzaXplID0gcG1kX3BzaXplKCk7CiAJaWYgKCFzZWxmLSZndDtwbWRzaXplKQogCQlTS0lQKHJldHVybiwgJiMzNDtVbmFibGUgdG8gcmVhZCBQTUQgc2l6ZVxuJiMzNDspOwogCkBAIC0yNDEsNyAmIzQzOzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpCiAJaWYgKCF0aHBfYXZhaWxhYmxlKCkpCiAJCVNLSVAocmV0dXJuLCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAKLQlzZWxmLSZndDtwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJc2VsZi0mZ3Q7cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghc2VsZi0mZ3Q7cG1kc2l6ZSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcbiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwppbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYwpAQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpCiAJCXZvaWQgKm1hcF9hZGRyOwogCX0gaW5mbzsKIAotCWh1Z2VfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJaHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKIAlpZiAoaHVnZV9wYWdlX3NpemUgJmx0Oz0gMCkKIAkJU0tJUChyZXR1cm4sICYjMzQ7Q291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxuJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDA5MzVkYmVmNDg4NGYuLmQ3YmVlZGQ1ZTE3OGIgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC0zNzgsOCAmIzQzOzM3OCw4IEBAIGZpCiBDQVRFR09SWT0mIzM0O21lbWZkX3NlY3JldCYjMzQ7IHJ1bl90ZXN0IC4vbWVtZmRfc2VjcmV0CiBmaQogCi0jIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDEwMAotQ0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyAxMDAKJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMgomIzQzO0NBVEVHT1JZPSYjMzQ7a3NtJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyCiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDAKIENBVEVHT1JZPSYjMzQ7a3NtJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLVAgLXMgMTAwCiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKaW5kZXggNWYyNzg5MTNjNGQ3NS4uNjcwZmNhZDA4M2I1OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtODgsNyAmIzQzOzg4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9odWdlcGFnZShpbnQgcGFnZW1hcF9mZCwgaW50IHBhZ2VzaXplKQogCQlyZXR1cm47CiAJfQogCi0Jc2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXNpemVfdCBocGFnZV9sZW4gPSBwbWRfcHNpemUoKTsKIAlpZiAoIWhwYWdlX2xlbikKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkJiMzNDspOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwogCXBhZ2VzaGlmdCA9IGZmcyhwYWdlc2l6ZSkgLSAxOwotCXBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCWlmICghcG1kX3BhZ2VzaXplKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjQwY2EyMjRhNjFmNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTM1LDEyICYjNDM7MzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNpemVfdCBtYXBfbGVuOwogCWludCBwYWdlbWFwX2ZkOwogCWludCBkdXJhdGlvbiA9IDA7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7CiAKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJaWYgKCF0aHBfaXNfZW5hYmxlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAKJiM0MzsJaWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKIAlyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTsKIAlpZiAocmFtICZndDsgU0laRV9NQVggLyBwc2l6ZSgpIC8gNCkKIAkJcmFtID0gU0laRV9NQVggLyA0OwpAQCAtNzAsMjMgJiM0Mzs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfQogCiAJd2FybngoJiMzNDthbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5JiMzNDsKLQkgICAgICAmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW0mIzM0OywgbGVuICZndDsmZ3Q7IEhQQUdFX1NISUZULCBsZW4gJmd0OyZndDsgMjAsCi0JICAgICAgcmFtICZndDsmZ3Q7ICgyMCAmIzQzOyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpOwomIzQzOwkgICAgICAmIzM0OyBhbmQgJXpkIE1pQiBvZiByYW0mIzM0OywgbGVuICZndDsmZ3Q7IGhwYWdlX3NoaWZ0LCBsZW4gJmd0OyZndDsgMjAsCiYjNDM7CSAgICAgIHJhbSAmZ3Q7Jmd0OyAoMjAgJiM0MzsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTsKIAogCXBhZ2VtYXBfZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAocGFnZW1hcF9mZCAmbHQ7IDApCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O29wZW4gcGFnZW1hcFxuJiMzNDspOwogCi0JbGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7Ci0JcHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7CiYjNDM7CWxlbiAtPSBsZW4gJSBocGFnZV9zaXplOwomIzQzOwlwdHIgPSBtbWFwKE5VTEwsIGxlbiAmIzQzOyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTsKIAlpZiAocHRyID09IE1BUF9GQUlMRUQpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2luaXRpYWwgbW1hcCYjMzQ7KTsKLQlwdHIgJiM0Mzs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7CiYjNDM7CXB0ciAmIzQzOz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTsKIAogCWlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9IVUdFUEFHRSYjMzQ7KTsKIAotCW1hcF9sZW4gPSByYW0gJmd0OyZndDsgKEhQQUdFX1NISUZUIC0gMSk7CiYjNDM7CW1hcF9sZW4gPSByYW0gJmd0OyZndDsgKGhwYWdlX3NoaWZ0IC0gMSk7CiAJbWFwID0gbWFsbG9jKG1hcF9sZW4pOwogCWlmICghbWFwKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttYXAgbWFsbG9jXG4mIzM0Oyk7CkBAIC05OSw3ICYjNDM7MTA0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltZW1zZXQobWFwLCAwLCBtYXBfbGVuKTsKIAogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDthKTsKLQkJZm9yIChwID0gcHRyOyBwICZsdDsgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkgewomIzQzOwkJZm9yIChwID0gcHRyOyBwICZsdDsgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkgewogCQkJaW50NjRfdCBwZm47CiAKIAkJCXBmbiA9IGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKTsKQEAgLTEwNyw3ICYjNDM7MTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKHBmbiAmbHQ7IDApIHsKIAkJCQlucl9mYWlsZWQmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKLQkJCQlzaXplX3QgaWR4ID0gcGZuICZndDsmZ3Q7IChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTsKJiM0MzsJCQkJc2l6ZV90IGlkeCA9IHBmbiAmZ3Q7Jmd0OyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7CiAKIAkJCQlucl9zdWNjZWVkJiM0MzsmIzQzOzsKIAkJCQlpZiAoaWR4ICZndDs9IG1hcF9sZW4pIHsKQEAgLTEyMyw3ICYjNDM7MTI4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJfQogCiAJCQkvKiBzcGxpdCB0cmFuc2h1Z2UgcGFnZSwga2VlcCBsYXN0IHBhZ2UgKi8KLQkJCWlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSkKJiM0MzsJCQlpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpCiAJCQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9ET05UTkVFRCYjMzQ7KTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtiKTsKQEAgLTEzMSw3ICYjNDM7MTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXHQmIzM0OwogCQkJICAgICAgICYjMzQ7JTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcbiYjMzQ7LAotCQkJICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiAmZ3Q7Jmd0OyBIUEFHRV9TSElGVCksIGxlbiAvIHMgLyAoMSAmbHQ7Jmx0OyAyMCksCiYjNDM7CQkJICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiAmZ3Q7Jmd0OyBocGFnZV9zaGlmdCksIGxlbiAvIHMgLyAoMSAmbHQ7Jmx0OyAyMCksCiAJCQkgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7CiAKIAkJaWYgKGR1cmF0aW9uICZndDsgMCAmYW1wOyZhbXA7IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjICZndDs9IGR1cmF0aW9uKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwppbmRleCAxZmI5NjdlZjQ5ODU0Li4wYjhiYmI1NWMzMzU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKQogc3RhdGljIGludCBzaG1lbV9hbGxvY2F0ZV9hcmVhKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqKmFsbG9jX2FyZWEsIGJvb2wgaXNfc3JjKQogewogCXZvaWQgKmFyZWFfYWxpYXMgPSBOVUxMOwotCXNpemVfdCBieXRlcyA9IGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsIGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplX3QgYnl0ZXMgPSBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpc19zcmMgPyAwIDogYnl0ZXM7CiAJY2hhciAqcCA9IE5VTEwsICpwX2FsaWFzID0gTlVMTDsKIAlpbnQgbWVtX2ZkID0gdWZmZF9tZW1fZmRfY3JlYXRlKGJ5dGVzICogMiwgZmFsc2UpOwpAQCAtMTk0LDEwICYjNDM7MTk0LDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0Jc2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwlzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLAotCQkJICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpCiYjNDM7CQkJICAgICAgcG1kX3BzaXplKCkpKQogCQllcnIoJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlcyYjMzQ7LAogCQkgICAgZXhwZWN0X25yX2hwYWdlcyk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jCkBAIC02NDYsNyAmIzQzOzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJCXVmZmRfdGVzdF9vcHMtJmd0O2NoZWNrX3BtZF9tYXBwaW5nKGdvcHRzLAogCQkJCQkJIGdvcHRzLSZndDthcmVhX2RzdCwKIAkJCQkJCSBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplIC8KLQkJCQkJCSByZWFkX3BtZF9wYWdlc2l6ZSgpKTsKJiM0MzsJCQkJCQkgcG1kX3BzaXplKCkpOwogCQkvKgogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KQEAgLTE5NzUsNyAmIzQzOzE5NzUsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbQogc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9oYW5kbGVfZmF1bHQodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBzdHJ1Y3QgdWZmZF9tc2cgKm1zZywKIAkJCQkgICAgICAgc3RydWN0IHVmZmRfYXJncyAqYXJncykKIHsKLQl1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0X2NvbW1vbihnb3B0cywgbXNnLCBhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpKTsKJiM0MzsJdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcG1kX3BzaXplKCkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjA4Niw3ICYjNDM7MjA4Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hcmdzX3QKIHsKIAlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3QsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQllcnIoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGZhaWx1cmUmIzM0Oyk7Ci0JdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSwKJiM0MzsJdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcG1kX3BzaXplKCksCiAJCQkgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7CiB9CiAKQEAgLTIwOTQsNyAmIzQzOzIwOTQsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3NwbGl0X3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYQogewogCWlmIChtYWR2aXNlKGdvcHRzLSZndDthcmVhX2RzdCwgZ29wdHMtJmd0O25yX3BhZ2VzICogZ29wdHMtJmd0O3BhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKIAkJZXJyKCYjMzQ7bWFkdmlzZShNQURWX05PSFVHRVBBR0UpIGZhaWx1cmUmIzM0Oyk7Ci0JdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSwKJiM0MzsJdWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcG1kX3BzaXplKCksCiAJCQkgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCmluZGV4IDU3MmMyNTE2ZTg3NGQuLmY0NmVkZDNlZTZkODEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtMzgsNyAmIzQzOzM4LDcgQEAgc3RhdGljIGludCBkZXRlY3RfdGhwX3NpemVzKHNpemVfdCBzaXplc1tdLCBpbnQgbWF4KQogCWludCBpOwogCiAJLyogdGhwIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLiAqLwotCWlmICghcmVhZF9wbWRfcGFnZXNpemUoKSkKJiM0MzsJaWYgKCFwbWRfcHNpemUoKSkKIAkJcmV0dXJuIDA7CiAKIAlvcmRlcnMgPSB0aHBfc3VwcG9ydGVkX29yZGVycygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBACiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7dWludDY0X3QgX19wbWRfcHNpemU7CiYjNDM7dWludDY0X3QgX19wbWRfcHNoaWZ0OwogCiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KQogewpAQCAtMTU1LDEyICYjNDM7MTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpCiYjNDM7dWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKQomIzQzO3sKJiM0MzsJaWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGZmc2woc2l6ZSkgLSAxOwomIzQzO30KJiM0MzsKJiM0Mzt1aW50NjRfdCBwbWRfcHNpemUodm9pZCkKIHsKIAlpbnQgZmQ7CiAJY2hhciBidWZbMjBdOwogCXNzaXplX3QgbnVtX3JlYWQ7CiAKJiM0MzsJaWYgKF9fcG1kX3BzaXplKQomIzQzOwkJcmV0dXJuIF9fcG1kX3BzaXplOwomIzQzOwogCWZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAwOwpAQCAtMTczLDcgJiM0MzsxODYsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCkKIAlidWZbbnVtX3JlYWRdID0gJiMzOTtcMCYjMzk7OwogCWNsb3NlKGZkKTsKIAotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwlfX3BtZF9wc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKF9fcG1kX3BzaGlmdCkKJiM0MzsJCXJldHVybiBfX3BtZF9wc2hpZnQ7CiYjNDM7CiYjNDM7CWlmICghX19wbWRfcHNpemUpCiYjNDM7CQlfX3BtZF9wc2l6ZSA9IHBtZF9wc2l6ZSgpOwomIzQzOwomIzQzOwlpZiAoIV9fcG1kX3BzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CV9fcG1kX3BzaGlmdCA9IHNpemVfdG9fc2hpZnQoX19wbWRfcHNpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gX19wbWRfcHNoaWZ0OwogfQogCiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCkBAIC00MTIsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLAogCiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwpAQCAtNDI1LDcgJiM0Mzs0NTYsNyBAQCBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogCiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogewotCXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CXVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpOwogCiAJaWYgKCFwbWRfcGFnZXNpemUpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxuJiMzNDspOwpAQCAtNDM4LDcgJiM0Mzs0NjksNyBAQCBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQogCiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwomIzQzOwl1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTsKIAogCWlmICghcG1kX3BhZ2VzaXplKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcbiYjMzQ7KTsKQEAgLTQ1MiwxNCAmIzQzOzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZQogaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKIHsKIAl1aW50NjRfdCBlbnRbMl07CiYjNDM7CWNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7CiYjNDM7CiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpCiYjNDM7CQlyZXR1cm4gLTE7CiAKIAkvKiBkcm9wIHBtZCAqLwotCWlmIChtbWFwKHB0ciwgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJaWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8CiAJCSBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgdHJhbnNodWdlXG4mIzM0Oyk7CiAKLQlpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKQomIzQzOwlpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtNQURWX0hVR0VQQUdFXG4mIzM0Oyk7CiAKIAkvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi8KQEAgLTQ3MSw3ICYjNDM7NTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCkKIAogCWlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSAmYW1wOyZhbXA7IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pICZhbXA7JmFtcDsKIAkgICAgUEFHRU1BUF9QRk4oZW50WzBdKSAmIzQzOyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgJmFtcDsmYW1wOwotCSAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgJmFtcDsgKCgxICZsdDsmbHQ7IChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKSkgLSAxKSkpCiYjNDM7CSAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgJmFtcDsgKCgxICZsdDsmbHQ7IChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKSkgLSAxKSkpCiAJCXJldHVybiBQQUdFTUFQX1BGTihlbnRbMF0pOwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjAwNDhlMGU4Mjc3MDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7CiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcHNpemU7CiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDsKIAogLyoKICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpCkBAIC04OCw3ICYjNDM7OTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Ci11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKJiM0Mzt1aW50NjRfdCBzaXplX3RvX3NoaWZ0KHVpbnQ2NF90IHNpemUpOwomIzQzO3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKTsKJiM0Mzt1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpOwogdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTsKIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CkBAIC0xNTcsMTIgJiM0MzsxNjEsNiBAQCBpbnQga3NtX3N0b3Aodm9pZCk7CiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7CiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKIAotLyoKLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplCi0gKi8KLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjEKLSNkZWZpbmUgSFBBR0VfU0laRSAoMSAmbHQ7Jmx0OyBIUEFHRV9TSElGVCkKLQogI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KQkoKChlbnQpICZhbXA7ICgxdWxsICZsdDsmbHQ7IDYzKSkgIT0gMCkKICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KQkoKGVudCkgJmFtcDsgKCgxdWxsICZsdDsmbHQ7IDU1KSAtIDEpKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCBhcHBsaWVkIGFzIHRoZSBIRUFEIGNvbW1pdCwgaXMgd29ydGggZnV6emluZy4gVGhlIHVzZXIgaXMgYXNraW5nIGZvciBhbiBldmFsdWF0aW9uLCBhbmQgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcHJvdmlkZWQgYGdpdCBkaWZmYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgZXZlcnkgbW9kaWZpZWQgZmlsZSBmYWxscyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLi4uYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBuZWdhdGl2ZSBjcml0ZXJpb24gYmFzZWQgb24gdGhlIHJ1bGVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVmcmVzaCB0aGUgcnVsZXMgcmVnYXJkaW5nIHdoZW4gdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY3JpdGVyaWEgaGVyZSBpcyBhbnkgY29kZSBzdHJpY3RseSB3aXRoaW4gJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBXZSYjMzk7dmUgZ290IGBjb3cuY2AsIGBmb2xpb19zcGxpdF9yYWNlX3Rlc3QuY2AsIGBndWFyZC1yZWdpb25zLmNgLCBgaG1tLXRlc3RzLmNgLCBga2h1Z2VwYWdlZC5jYCwgYGtzbV90ZXN0cy5jYCwgYG1pZ3JhdGlvbi5jYCwgYG1rZGlydHkuY2AsIGBwYWdlbWFwX2lvY3RsLmNgLCBgcHJjdGxfdGhwX2Rpc2FibGUuY2AsIGBwcm9jZXNzX21hZHYuY2AsIGBydW5fdm10ZXN0cy5zaGAsIGBzb2Z0LWRpcnR5LmNgLCBgc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY2AsIGB0cmFuc2h1Z2Utc3RyZXNzLmNgLCBgdWZmZC1jb21tb24uY2AsIGB1ZmZkLXVuaXQtdGVzdHMuY2AsIGB1ZmZkLXdwLW1yZW1hcC5jYCwgYHZtX3V0aWwuY2AsIGFuZCBgdm1fdXRpbC5oYC4KClllcCwgYWxsIG9mIHRoZW0gYXJlIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFRoZXNlIGFyZSwgd2l0aG91dCBhIGRvdWJ0LCB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIENydWNpYWxseSwgdGhleSBkbyAqbm90KiBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2Vyc3BhY2UgdGVzdCBpbmZyYXN0cnVjdHVyZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlc2UgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlcnNwYWNlIHNlbGYtdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBub25lIG9mIHRoZSBjaGFuZ2VzIGludm9sdmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIG91ciBhdHRlbnRpb24sIHNvIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgYXJyYXkuIFNpbWlsYXJseSwgc2luY2UgdGhlc2UgYXJlIHNlbGYtdGVzdHMsIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBhY3RpdmF0ZSB0aGlzIGNvZGUsIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGFycmF5LgoKTGV0JiMzOTtzIGVuc3VyZSB3ZSBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuIEl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LiBUaGUgcGFyYW1ldGVycyBhcmU6IGBFbmFibGVDb25maWdzYCAoYXJyYXkgb2Ygc3RyaW5ncywgbnVsbGFibGUpLCBgRm9jdXNTeW1ib2xzYCAoYXJyYXkgb2Ygc3RyaW5ncywgbnVsbGFibGUpLCBgUmVhc29uaW5nYCAoc3RyaW5nKSwgYW5kIGBXb3J0aEZ1enppbmdgIChib29sZWFuKS4gVGhlIHNpZ25hdHVyZSBpcyBjb3JyZWN0LCBhbmQgbXkgYW5hbHlzaXMgZml0cyBwZXJmZWN0bHkgd2l0aGluIHRoZSBleHBlY3RlZCBmb3JtYXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzo1OToxMC44MjAyOTEyOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAzMzIxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6NTk6MTAuODIwMjk1ODI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkxMzE0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTM2MjRiMTlhNDc2Y2EzNzc2ZGNkZWI2NmNmNTliNTYzZmQ5MGE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA3OjU5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5AQCAtMTg4OSw3ICsxODg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHR0aHBfc2F2ZV9zZXR0aW5ncygpO1xcbiBcXG4gXFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAocG1kc2l6ZSkge1xcbiBcXHRcXHQvKiBPbmx5IGlmIFRIUCBpcyBzdXBwb3J0ZWQuICovXFxuIFxcdFxcdHRocF9yZWFkX3NldHRpbmdzKFxcdTAwMjZkZWZhdWx0X3NldHRpbmdzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmE5NTZlNWM3NGM2NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0yMzUsNyArMjM1LDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuLVxcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkgfHwgIXBtZF9wYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggYjcyNGQ2MmQyYjc1NS4uZWVlMjllZjg4Y2IyMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5AQCAtMjE5NSwxNCArMjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxcbiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVxcdTAwM2VwYWdlX3NpemU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFO1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcXG4gXFx0Y2hhciAqcHRyO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICghdGhwX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNpemUgPSAyICogaHBhZ2Vfc2l6ZTtcXG4rXFx0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4rXFxuIFxcdC8qIE5lZWQgZmlsZSB0byBiZSBjb3JyZWN0IHNpemUgZm9yIHRlc3RzIGZvciBub24tYW5vbi4gKi9cXG4gXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWJhY2tpbmcgIT0gQU5PTl9CQUNLRUQpXFxuIFxcdFxcdEFTU0VSVF9FUShmdHJ1bmNhdGUoc2VsZi1cXHUwMDNlZmQsIHNpemUpLCAwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmFkMTQzNzJiNzVkOWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbkBAIC01NjksNyArNTY5LDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4gXFxuIFxcdGZvciAobWlncmF0ZSA9IDA7IG1pZ3JhdGUgXFx1MDAzYyAyOyArK21pZ3JhdGUpIHtcXG4gXFx0XFx0Zm9yICh1c2VfdGhwID0gMDsgdXNlX3RocCBcXHUwMDNjIDI7ICsrdXNlX3RocCkge1xcbi1cXHRcXHRcXHRucGFnZXMgPSBBTElHTih1c2VfdGhwID8gcmVhZF9wbWRfcGFnZXNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcXG4rXFx0XFx0XFx0bnBhZ2VzID0gQUxJR04odXNlX3RocCA/IHBtZF9wc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc2VsZi1cXHUwMDNlcGFnZV9zaXplKSBcXHUwMDNlXFx1MDAzZSBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbiBcXHRcXHRcXHRBU1NFUlRfTkUobnBhZ2VzLCAwKTtcXG4gXFx0XFx0XFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbkBAIC03MzAsNyArNzMwLDcgQEAgVEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKVxcbiBcXHRpbnQgKnB0cjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IDIgKiBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2Moc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbkBAIC0xOTQxLDcgKzE5NDEsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lbXB0eSlcXG4gXFx0aW50ICpwdHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQsXFxuQEAgLTE5ODQsNyArMTk4NCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX3plcm8pXFxuIFxcdGludCByZXQ7XFxuIFxcdGludCB2YWw7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBQUk9UX1JFQUQsXFxuQEAgLTIwMzgsNyArMjAzOCw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZyZWUpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjA5MSw3ICsyMDkxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjE2MSw3ICsyMTYxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9wYXJ0aWFsX3VubWFwX2ZhdWx0KVxcbiB7XFxuIFxcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB1bm1hcF9zaXplO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG5AQCAtMjIyNiw3ICsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcztcXG4tXFx0dW5zaWduZWQgbG9uZyBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0c1szXTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHR2b2lkICpvbGRfcHRyLCAqbmV3X3B0ciA9IE5VTEw7XFxuQEAgLTIzMjMsNyArMjMyMyw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2VycilcXG4gXFx0aW50ICpwdHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgMiAqIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG5AQCAtMjQxMyw3ICsyNDEzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXFxuIFxcdGludCAqcHRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIDIgKiBzaXplLFxcbiBcXHRcXHRcXHRcXHQgIFBST1RfUkVBRCxcXG5AQCAtMjYwOSw3ICsyNjA5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcnVuX21pZ3JhdGlvbl9iZW5jaG1hcmsoaW50IGZkLCBpbnQgdXNlX3RocCwgc2l6ZV90IGJ1ZmZlcl9zaXpcXG4gVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiB7XFxuIFxcdHN0cnVjdCBiZW5jaG1hcmtfcmVzdWx0cyB0aHBfcmVzdWx0cywgcmVndWxhcl9yZXN1bHRzO1xcbi1cXHRzaXplX3QgdGhwX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzaXplX3QgdGhwX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aW50IGl0ZXJhdGlvbnMgPSA1O1xcbiBcXG4gXFx0aWYgKCF0aHBfc2l6ZSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggZjgyNjczZjVmNmI0Ny4uNzZjMWZiY2M1MjYwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMTMzMCw3ICsxMzMwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRocGFnZV9wbWRfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjE3ZTMxMTM4YWYwNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTUyMSwxOSArNTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcdHN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lLCBlbmRfdGltZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7XFxuIFxcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuIFxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIEtTRlRfU0tJUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFocGFnZV9zaXplKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4gXFx0bWFwX3NpemUgKj0gTUI7XFxuIFxcdHNpemVfdCBsZW4gPSBtYXBfc2l6ZTtcXG4gXFxuLVxcdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xcbi1cXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xcbitcXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdFxcdE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyArIEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7XFxuK1xcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xcbiBcXG4gXFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxcbiBcXHRcXHRlcnIoMiwgXFxcImluaXRpYWwgbW1hcFxcXCIpO1xcbkBAIC01NDcsNyArNTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcXG4gXFxuIFxcdG5fbm9ybWFsX3BhZ2VzID0gMDtcXG4gXFx0bl9odWdlX3BhZ2VzID0gMDtcXG4tXFx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gSFBBR0VfU0laRSkge1xcbitcXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFxcdTAwM2MgbWFwX3B0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XFxuIFxcdFxcdGlmIChhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRuX25vcm1hbF9wYWdlcysrO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTU3OCwxMSArNTgyLDExIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xcXFxuXFxcIiwgKG1hcF9zaXplIC8gTUIpIC9cXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgICgoZG91YmxlKXNjYW5fdGltZV9ucyAvIE5TRUNfUEVSX1NFQykpO1xcbiBcXG4tXFx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XFxuK1xcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xcbiBcXHRyZXR1cm4gS1NGVF9QQVNTO1xcbiBcXG4gZXJyX291dDpcXG4tXFx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XFxuK1xcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xcbiBcXHRyZXR1cm4gS1NGVF9GQUlMO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uNDI4MGQyYzg3YjIyYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBURVNUX0ZfVElNRU9VVChtaWdyYXRpb24sIHByaXZhdGVfYW5vbl90aHAsIDIqUlVOVElNRSlcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcIik7XFxuIFxcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZHNpemUpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBzaGFyZWRfYW5vbl90aHAsIDIqUlVOVElNRSlcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcIik7XFxuIFxcbi1cXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZHNpemUpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ta2RpcnR5LmNcXG5pbmRleCA2OGRkNDQ3YTU0NTQyLi40OWVmNjQzYTZlNjM5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xcbkBAIC0zMzAsNyArMzMwLDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0aW50IGVyciwgdGVzdHMgPSAyO1xcbiBcXG4gXFx0cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbi1cXHR0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0dGhwc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAodGhwc2l6ZSkge1xcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgdGhwc2l6ZSAvIDEwMjQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi5kMGUzNGRkNTg1MGIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4tXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGlmIChpbml0X3VmZmQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5kMDI5MGM0NTY3YmQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXFxuIFxcdGlmICghdGhwX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHNlbGYtXFx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzZWxmLVxcdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XFxuIFxcdGlmICghc2VsZi1cXHUwMDNlcG1kc2l6ZSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJVbmFibGUgdG8gcmVhZCBQTUQgc2l6ZVxcXFxuXFxcIik7XFxuIFxcbkBAIC0yNDEsNyArMjQxLDcgQEAgRklYVFVSRV9TRVRVUChwcmN0bF90aHBfZGlzYWJsZV9leGNlcHRfbWFkdmlzZSlcXG4gXFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VsZi1cXHUwMDNlcG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNlbGYtXFx1MDAzZXBtZHNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKCFzZWxmLVxcdTAwM2VwbWRzaXplKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIlVuYWJsZSB0byByZWFkIFBNRCBzaXplXFxcXG5cXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcXG5pbmRleCAzZmZmZDVmN2U2ZmI0Li43ZTMyYmFkOGFiMmE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmNcXG5AQCAtMTQxLDcgKzE0MSw3IEBAIFRFU1RfRihwcm9jZXNzX21hZHZpc2UsIHJlbW90ZV9jb2xsYXBzZSlcXG4gXFx0XFx0dm9pZCAqbWFwX2FkZHI7XFxuIFxcdH0gaW5mbztcXG4gXFxuLVxcdGh1Z2VfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0aHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKGh1Z2VfcGFnZV9zaXplIFxcdTAwM2M9IDApXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIGh1Z2UgcGFnZSBzaXplLlxcXFxuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTM3OCw4ICszNzgsOCBAQCBmaVxcbiBDQVRFR09SWT1cXFwibWVtZmRfc2VjcmV0XFxcIiBydW5fdGVzdCAuL21lbWZkX3NlY3JldFxcbiBmaVxcbiBcXG4tIyBLU00gS1NNX01FUkdFX1RJTUVfSFVHRV9QQUdFUyB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcXG4tQ0FURUdPUlk9XFxcImtzbVxcXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgMTAwXFxuKyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyXFxuK0NBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDUxMlxcbiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcXG4gQ0FURUdPUlk9XFxcImtzbVxcXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLVAgLXMgMTAwXFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uNjcwZmNhZDA4M2I1OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHNpemVfdCBocGFnZV9sZW4gPSBwbWRfcHNpemUoKTtcXG4gXFx0aWYgKCFocGFnZV9sZW4pXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IGMwMWQyMjdkN2ZkNmQuLjI5NWE2NzY5ZDY3MGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFxuIFxcdHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0cGFnZXNoaWZ0ID0gZmZzKHBhZ2VzaXplKSAtIDE7XFxuLVxcdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHRpZiAoIXBtZF9wYWdlc2l6ZSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uNDBjYTIyNGE2MWY0OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMzUsMTIgKzM1LDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0c2l6ZV90IG1hcF9sZW47XFxuIFxcdGludCBwYWdlbWFwX2ZkO1xcbiBcXHRpbnQgZHVyYXRpb24gPSAwO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BzaGlmdCgpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFxuIFxcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbiBcXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcXG4gXFx0aWYgKHJhbSBcXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXFxuIFxcdFxcdHJhbSA9IFNJWkVfTUFYIC8gNDtcXG5AQCAtNzAsMjMgKzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0fVxcbiBcXG4gXFx0d2FybngoXFxcImFsbG9jYXRlICV6ZCB0cmFuc2h1Z2UgcGFnZXMsIHVzaW5nICV6ZCBNaUIgdmlydHVhbCBtZW1vcnlcXFwiXFxuLVxcdCAgICAgIFxcXCIgYW5kICV6ZCBNaUIgb2YgcmFtXFxcIiwgbGVuIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXFx1MDAzZVxcdTAwM2UgMjAsXFxuLVxcdCAgICAgIHJhbSBcXHUwMDNlXFx1MDAzZSAoMjAgKyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xcbitcXHQgICAgICBcXFwiIGFuZCAlemQgTWlCIG9mIHJhbVxcXCIsIGxlbiBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdCwgbGVuIFxcdTAwM2VcXHUwMDNlIDIwLFxcbitcXHQgICAgICByYW0gXFx1MDAzZVxcdTAwM2UgKDIwICsgaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSAtIDEpKTtcXG4gXFxuIFxcdHBhZ2VtYXBfZmQgPSBvcGVuKFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiLCBPX1JET05MWSk7XFxuIFxcdGlmIChwYWdlbWFwX2ZkIFxcdTAwM2MgMClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJvcGVuIHBhZ2VtYXBcXFxcblxcXCIpO1xcbiBcXG4tXFx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XFxuLVxcdHB0ciA9IG1tYXAoTlVMTCwgbGVuICsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XFxuK1xcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xcbitcXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xcbiBcXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiaW5pdGlhbCBtbWFwXFxcIik7XFxuLVxcdHB0ciArPSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFO1xcbitcXHRwdHIgKz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcXG4gXFxuIFxcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJNQURWX0hVR0VQQUdFXFxcIik7XFxuIFxcbi1cXHRtYXBfbGVuID0gcmFtIFxcdTAwM2VcXHUwMDNlIChIUEFHRV9TSElGVCAtIDEpO1xcbitcXHRtYXBfbGVuID0gcmFtIFxcdTAwM2VcXHUwMDNlIChocGFnZV9zaGlmdCAtIDEpO1xcbiBcXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XFxuIFxcdGlmICghbWFwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1hcCBtYWxsb2NcXFxcblxcXCIpO1xcbkBAIC05OSw3ICsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xcbiBcXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZhKTtcXG4tXFx0XFx0Zm9yIChwID0gcHRyOyBwIFxcdTAwM2MgcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcXG4rXFx0XFx0Zm9yIChwID0gcHRyOyBwIFxcdTAwM2MgcHRyICsgbGVuOyBwICs9IGhwYWdlX3NpemUpIHtcXG4gXFx0XFx0XFx0aW50NjRfdCBwZm47XFxuIFxcbiBcXHRcXHRcXHRwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7XFxuQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGlmIChwZm4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRzaXplX3QgaWR4ID0gcGZuIFxcdTAwM2VcXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IGlkeCA9IHBmbiBcXHUwMDNlXFx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XFxuIFxcbiBcXHRcXHRcXHRcXHRucl9zdWNjZWVkKys7XFxuIFxcdFxcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gbWFwX2xlbikge1xcbkBAIC0xMjMsNyArMTI4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHQvKiBzcGxpdCB0cmFuc2h1Z2UgcGFnZSwga2VlcCBsYXN0IHBhZ2UgKi9cXG4tXFx0XFx0XFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxcbitcXHRcXHRcXHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXFxuIFxcdFxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9ET05UTkVFRFxcXCIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2Yik7XFxuQEAgLTEzMSw3ICsxMzYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFxcXHRcXFwiXFxuIFxcdFxcdFxcdCAgICAgICBcXFwiJTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXFx1MDAzZVxcdTAwM2UgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgXFx1MDAzY1xcdTAwM2MgMjApLFxcbitcXHRcXHRcXHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFxcdTAwM2VcXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFxcdTAwM2NcXHUwMDNjIDIwKSxcXG4gXFx0XFx0XFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xcbiBcXG4gXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBiLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyBcXHUwMDNlPSBkdXJhdGlvbikge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbmluZGV4IDFmYjk2N2VmNDk4NTQuLjBiOGJiYjU1YzMzNTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG5AQCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX3JlbGVhc2VfcGFnZXModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpyZWxfYXJlYSlcXG4gc3RhdGljIGludCBzaG1lbV9hbGxvY2F0ZV9hcmVhKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqKmFsbG9jX2FyZWEsIGJvb2wgaXNfc3JjKVxcbiB7XFxuIFxcdHZvaWQgKmFyZWFfYWxpYXMgPSBOVUxMO1xcbi1cXHRzaXplX3QgYnl0ZXMgPSBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFx0c2l6ZV90IGJ5dGVzID0gZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlzX3NyYyA/IDAgOiBieXRlcztcXG4gXFx0Y2hhciAqcCA9IE5VTEwsICpwX2FsaWFzID0gTlVMTDtcXG4gXFx0aW50IG1lbV9mZCA9IHVmZmRfbWVtX2ZkX2NyZWF0ZShieXRlcyAqIDIsIGZhbHNlKTtcXG5AQCAtMTk0LDEwICsxOTQsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fYWxpYXNfbWFwcGluZyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIF9fdTY0ICpzdGFydCxcXG4gXFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXFxuIHtcXG4tXFx0c2l6ZV90IGxlbiA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgbGVuLCBleHBlY3RfbnJfaHBhZ2VzLFxcbi1cXHRcXHRcXHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcXG4rXFx0XFx0XFx0ICAgICAgcG1kX3BzaXplKCkpKVxcbiBcXHRcXHRlcnIoXFxcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXFxcIixcXG4gXFx0XFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcXG5pbmRleCA2ZjIzNjBmOWI3NWRiLi5kY2IxNzU1YzM1ZmI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcXG5AQCAtNjQ2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXFxuIFxcdFxcdHVmZmRfdGVzdF9vcHMtXFx1MDAzZWNoZWNrX3BtZF9tYXBwaW5nKGdvcHRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZ29wdHMtXFx1MDAzZWFyZWFfZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSAvXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCByZWFkX3BtZF9wYWdlc2l6ZSgpKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHBtZF9wc2l6ZSgpKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxcbiBcXHRcXHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cXG5AQCAtMTk3NSw3ICsxOTc1LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX2hhbmRsZV9mYXVsdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHN0cnVjdCB1ZmZkX21cXG4gc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9oYW5kbGVfZmF1bHQodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBzdHJ1Y3QgdWZmZF9tc2cgKm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1ZmZkX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0dWZmZF9tb3ZlX2hhbmRsZV9mYXVsdF9jb21tb24oZ29wdHMsIG1zZywgYXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSk7XFxuK1xcdHVmZmRfbW92ZV9oYW5kbGVfZmF1bHRfY29tbW9uKGdvcHRzLCBtc2csIGFyZ3MsIHBtZF9wc2l6ZSgpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG5AQCAtMjA4Niw3ICsyMDg2LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmZF90ZXN0X2FyZ3NfdFxcbiB7XFxuIFxcdGlmIChtYWR2aXNlKGdvcHRzLVxcdTAwM2VhcmVhX2RzdCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGVycihcXFwibWFkdmlzZShNQURWX0hVR0VQQUdFKSBmYWlsdXJlXFxcIik7XFxuLVxcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHJlYWRfcG1kX3BhZ2VzaXplKCksXFxuK1xcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxcbiBcXHRcXHRcXHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XFxuIH1cXG4gXFxuQEAgLTIwOTQsNyArMjA5NCw3IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfc3BsaXRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZmRfdGVzdF9hXFxuIHtcXG4gXFx0aWYgKG1hZHZpc2UoZ29wdHMtXFx1MDAzZWFyZWFfZHN0LCBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpKVxcbiBcXHRcXHRlcnIoXFxcIm1hZHZpc2UoTUFEVl9OT0hVR0VQQUdFKSBmYWlsdXJlXFxcIik7XFxuLVxcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHJlYWRfcG1kX3BhZ2VzaXplKCksXFxuK1xcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxcbiBcXHRcXHRcXHQgICAgICB1ZmZkX21vdmVfcG1kX2hhbmRsZV9mYXVsdCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuaW5kZXggNTcyYzI1MTZlODc0ZC4uZjQ2ZWRkM2VlNmQ4MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBpbnQgZGV0ZWN0X3RocF9zaXplcyhzaXplX3Qgc2l6ZXNbXSwgaW50IG1heClcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKiB0aHAgbm90IHN1cHBvcnRlZCBhdCBhbGwuICovXFxuLVxcdGlmICghcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0aWYgKCFwbWRfcHNpemUoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRvcmRlcnMgPSB0aHBfc3VwcG9ydGVkX29yZGVycygpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi4xZmVmMTI2NjQyOWY0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0yMSw2ICsyMSw4IEBAXFxuIFxcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XFxuK3VpbnQ2NF90IF9fcG1kX3BzaXplO1xcbit1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XFxuIFxcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxcbiB7XFxuQEAgLTE1NSwxMiArMTU3LDIzIEBAIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxcbit1aW50NjRfdCBzaXplX3RvX3NoaWZ0KHVpbnQ2NF90IHNpemUpXFxuK3tcXG4rXFx0aWYgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHNpemUpICE9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGZmc2woc2l6ZSkgLSAxO1xcbit9XFxuK1xcbit1aW50NjRfdCBwbWRfcHNpemUodm9pZClcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuIFxcdGNoYXIgYnVmWzIwXTtcXG4gXFx0c3NpemVfdCBudW1fcmVhZDtcXG4gXFxuK1xcdGlmIChfX3BtZF9wc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIF9fcG1kX3BzaXplO1xcbitcXG4gXFx0ZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzMsNyArMTg2LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXFxuIFxcdGJ1ZltudW1fcmVhZF0gPSAnXFxcXDAnO1xcbiBcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFx0X19wbWRfcHNpemUgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BzaXplO1xcbit9XFxuK1xcbit1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9fcG1kX3BzaGlmdClcXG4rXFx0XFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcXG4rXFxuK1xcdGlmICghX19wbWRfcHNpemUpXFxuK1xcdFxcdF9fcG1kX3BzaXplID0gcG1kX3BzaXplKCk7XFxuK1xcbitcXHRpZiAoIV9fcG1kX3BzaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdF9fcG1kX3BzaGlmdCA9IHNpemVfdG9fc2hpZnQoX19wbWRfcHNpemUpO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BzaGlmdDtcXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxcbkBAIC00MTIsNyArNDQzLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfbGFyZ2VfZm9saW9zKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsXFxuIFxcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtNDI1LDcgKzQ1Niw3IEBAIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIFxcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCFwbWRfcGFnZXNpemUpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtNDM4LDcgKzQ2OSw3IEBAIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIFxcbiBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcXG4gXFxuIFxcdGlmICghcG1kX3BhZ2VzaXplKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuQEAgLTQ1MiwxNCArNDgzLDE5IEBAIGJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIHtcXG4gXFx0dWludDY0X3QgZW50WzJdO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BzaGlmdCgpO1xcbitcXG4rXFx0aWYgKCFocGFnZV9zaXplIHx8ICFocGFnZV9zaGlmdClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0LyogZHJvcCBwbWQgKi9cXG4tXFx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRpZiAobW1hcChwdHIsIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCBNQVBfRklYRUQgfCBNQVBfQU5PTllNT1VTIHxcXG4gXFx0XFx0IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURSwgLTEsIDApICE9IHB0cilcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwIHRyYW5zaHVnZVxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAobWFkdmlzZShwdHIsIEhQQUdFX1NJWkUsIE1BRFZfSFVHRVBBR0UpKVxcbitcXHRpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk1BRFZfSFVHRVBBR0VcXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogYWxsb2NhdGUgdHJhbnNwYXJlbnQgaHVnZSBwYWdlICovXFxuQEAgLTQ3MSw3ICs1MDcsNyBAQCBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxcbiBcXG4gXFx0aWYgKFBBR0VNQVBfUFJFU0VOVChlbnRbMF0pIFxcdTAwMjZcXHUwMDI2IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBQQUdFTUFQX1BGTihlbnRbMF0pICsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXFx1MDAyNiAoKDEgXFx1MDAzY1xcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcXG4rXFx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcXHUwMDI2ICgoMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKVxcbiBcXHRcXHRyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTtcXG4gXFxuIFxcdHJldHVybiAtMTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuaW5kZXggOWE0OWFmODg3MDJlNC4uMDA0OGUwZTgyNzcwMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5AQCAtMzEsNiArMzEsOCBAQFxcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XFxuK2V4dGVybiB1aW50NjRfdCBfX3BtZF9wc2l6ZTtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDtcXG4gXFxuIC8qXFxuICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpXFxuQEAgLTg4LDcgKzkwLDkgQEAgYm9vbCBwYWdlbWFwX2lzX3BvcHVsYXRlZChpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcXG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XFxuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcXG4rdWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKTtcXG4rdWludDY0X3QgcG1kX3BzaXplKHZvaWQpO1xcbit1aW50NjRfdCBwbWRfcHNoaWZ0KHZvaWQpO1xcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuQEAgLTE1NywxMiArMTYxLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiBcXG4tLypcXG4tICogT24gcHBjNjQgdGhpcyB3aWxsIG9ubHkgd29yayB3aXRoIHJhZGl4IDJNIGh1Z2VwYWdlIHNpemVcXG4tICovXFxuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcXG4tI2RlZmluZSBIUEFHRV9TSVpFICgxIFxcdTAwM2NcXHUwMDNjIEhQQUdFX1NISUZUKVxcbi1cXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjU5OjExLjM3OTk0MjU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzE0MzY1ODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYnVpbGQgYXJ0aWZhY3RzIGFmZmVjdGluZyB2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTM2MjRiMTlhNDc2Y2EzNzc2ZGNkZWI2NmNmNTliNTYzZmQ5MGE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDc6NTk6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li5lNDJlZGVjY2ZkN2EyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTg4OSw3ICsxODg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0dGhwX3NhdmVfc2V0dGluZ3MoKTtcbiBcbiBcdHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0cG1kc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFx0aWYgKHBtZHNpemUpIHtcbiBcdFx0LyogT25seSBpZiBUSFAgaXMgc3VwcG9ydGVkLiAqL1xuIFx0XHR0aHBfcmVhZF9zZXR0aW5ncyhcdTAwMjZkZWZhdWx0X3NldHRpbmdzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCAxOTYwNjM1YTk1M2ViLi5hOTU2ZTVjNzRjNjU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjM1LDcgKzIzNSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2F2YWlsYWJsZSgpIHx8ICFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiNzI0ZDYyZDJiNzU1Li5lZWUyOWVmODhjYjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMTk1LDE0ICsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pXG4gVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGNvbGxhcHNlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHNpemUgPSAyICogSFBBR0VfU0laRTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0Y2hhciAqcHRyO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4rXHRudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuK1xuIFx0LyogTmVlZCBmaWxlIHRvIGJlIGNvcnJlY3Qgc2l6ZSBmb3IgdGVzdHMgZm9yIG5vbi1hbm9uLiAqL1xuIFx0aWYgKHZhcmlhbnQtXHUwMDNlYmFja2luZyAhPSBBTk9OX0JBQ0tFRClcbiBcdFx0QVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLVx1MDAzZWZkLCBzaXplKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uYWQxNDM3MmI3NWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTU2OSw3ICs1NjksNyBAQCBURVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuIFxuIFx0Zm9yIChtaWdyYXRlID0gMDsgbWlncmF0ZSBcdTAwM2MgMjsgKyttaWdyYXRlKSB7XG4gXHRcdGZvciAodXNlX3RocCA9IDA7IHVzZV90aHAgXHUwMDNjIDI7ICsrdXNlX3RocCkge1xuLVx0XHRcdG5wYWdlcyA9IEFMSUdOKHVzZV90aHAgPyByZWFkX3BtZF9wYWdlc2l6ZSgpIDogSE1NX0JVRkZFUl9TSVpFLFxuK1x0XHRcdG5wYWdlcyA9IEFMSUdOKHVzZV90aHAgPyBwbWRfcHNpemUoKSA6IEhNTV9CVUZGRVJfU0laRSxcbiBcdFx0XHRcdCAgICAgICBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkgXHUwMDNlXHUwMDNlIHNlbGYtXHUwMDNlcGFnZV9zaGlmdDtcbiBcdFx0XHRBU1NFUlRfTkUobnBhZ2VzLCAwKTtcbiBcdFx0XHRzaXplID0gbnBhZ2VzIFx1MDAzY1x1MDAzYyBzZWxmLVx1MDAzZXBhZ2Vfc2hpZnQ7XG5AQCAtNzMwLDcgKzczMCw3IEBAIFRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSAyICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSAyICogcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMTk0MSw3ICsxOTQxLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZW1wdHkpXG4gXHRpbnQgKnB0cjtcbiBcdGludCByZXQ7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0xOTg0LDcgKzE5ODQsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvKVxuIFx0aW50IHJldDtcbiBcdGludCB2YWw7XG4gXG4tXHRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGJ1ZmZlciA9IGhtbV9idWZmZXJfYWxsb2MoMiAqIHNpemUsIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0yMDM4LDcgKzIwMzgsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mcmVlKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIwOTEsNyArMjA5MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZhdWx0KVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCBzaXplLFxuIFx0XHRcdFx0ICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuQEAgLTIxNjEsNyArMjE2MSw3IEBAIFRFU1RfRihobW0sIG1pZ3JhdGVfcGFydGlhbF91bm1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHVubWFwX3NpemU7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XG4gXHR1bnNpZ25lZCBsb25nIGk7XG5AQCAtMjIyNiw3ICsyMjI2LDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9yZW1hcF9mYXVsdClcbiB7XG4gXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4tXHR1bnNpZ25lZCBsb25nIHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldHNbM107XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXHR2b2lkICpvbGRfcHRyLCAqbmV3X3B0ciA9IE5VTEw7XG5AQCAtMjMyMyw3ICsyMzIzLDcgQEAgVEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZXJyKVxuIFx0aW50ICpwdHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplID0gcG1kX3BzaXplKCk7XG4gXG4gXHRidWZmZXIgPSBobW1fYnVmZmVyX2FsbG9jKDIgKiBzaXplLCAyICogc2l6ZSxcbiBcdFx0XHRcdCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yNDEzLDcgKzI0MTMsNyBAQCBURVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV96ZXJvX2VycilcbiBcdGludCAqcHRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0YnVmZmVyID0gaG1tX2J1ZmZlcl9hbGxvYygyICogc2l6ZSwgMiAqIHNpemUsXG4gXHRcdFx0XHQgIFBST1RfUkVBRCxcbkBAIC0yNjA5LDcgKzI2MDksNyBAQCBzdGF0aWMgaW5saW5lIGludCBydW5fbWlncmF0aW9uX2JlbmNobWFyayhpbnQgZmQsIGludCB1c2VfdGhwLCBzaXplX3QgYnVmZmVyX3NpelxuIFRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbiB7XG4gXHRzdHJ1Y3QgYmVuY2htYXJrX3Jlc3VsdHMgdGhwX3Jlc3VsdHMsIHJlZ3VsYXJfcmVzdWx0cztcbi1cdHNpemVfdCB0aHBfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgdGhwX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGludCBpdGVyYXRpb25zID0gNTtcbiBcbiBcdGlmICghdGhwX3NpemUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBmODI2NzNmNWY2YjQ3Li43NmMxZmJjYzUyNjBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuLVx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHBhZ2VfcG1kX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghaHBhZ2VfcG1kX3NpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbiBcdGhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IDVmZDc3OTJhMGQ0NzkuLjYxN2UzMTEzOGFmMDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC01MjEsMTkgKzUyMSwyMyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3RpbWVfbnM7XG4gXHRpbnQgcGFnZW1hcF9mZCwgbl9ub3JtYWxfcGFnZXMsIG5faHVnZV9wYWdlcztcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gS1NGVF9TS0lQO1xuIFx0fVxuIFxuK1x0aWYgKCFocGFnZV9zaXplKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCIpO1xuK1xuIFx0bWFwX3NpemUgKj0gTUI7XG4gXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XG4gXG4tXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcbi1cdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICsgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuK1x0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xuK1x0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyArIGhwYWdlX3NpemUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIGhwYWdlX3NpemU7XG4gXG4gXHRpZiAobWFwX3B0cl9vcmlnID09IE1BUF9GQUlMRUQpXG4gXHRcdGVycigyLCBcImluaXRpYWwgbW1hcFwiKTtcbkBAIC01NDcsNyArNTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcbiBcdG5fbm9ybWFsX3BhZ2VzID0gMDtcbiBcdG5faHVnZV9wYWdlcyA9IDA7XG4tXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcbitcdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFx1MDAzYyAwKVxuIFx0XHRcdG5fbm9ybWFsX3BhZ2VzKys7XG4gXHRcdGVsc2VcbkBAIC01NzgsMTEgKzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0a3NmdF9wcmludF9tc2coXCJBdmVyYWdlIHNwZWVkOiAgJS4zZiBNaUIvc1xcblwiLCAobWFwX3NpemUgLyBNQikgL1xuIFx0XHRcdFx0XHQgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7XG4gXG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBIUEFHRV9TSVpFKTtcbitcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfUEFTUztcbiBcbiBlcnJfb3V0OlxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XG4rXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX0ZBSUw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLjQyODBkMmM4N2IyMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBwcml2YXRlX2Fub25fdGhwLCAyKlJVTlRJTUUpXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXCIpO1xuIFxuLVx0cG1kc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXBtZHNpemUpXG4gXHRcdFNLSVAocmV0dXJuLCBcIlJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFwiKTtcbiBcbkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GX1RJTUVPVVQobWlncmF0aW9uLCBzaGFyZWRfYW5vbl90aHAsIDIqUlVOVElNRSlcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcIik7XG4gXG4tXHRwbWRzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHBtZHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuaW5kZXggNjhkZDQ0N2E1NDU0Mi4uNDllZjY0M2E2ZTYzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21rZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWtkaXJ0eS5jXG5AQCAtMzMwLDcgKzMzMCw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZXJyLCB0ZXN0cyA9IDI7XG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4tXHR0aHBzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHRocHNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICh0aHBzaXplKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiW0lORk9dIGRldGVjdGVkIFRIUCBzaXplOiAlenUgS2lCXFxuXCIsXG4gXHRcdFx0ICAgICAgIHRocHNpemUgLyAxMDI0KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGQ5YTRmYjc4MmVjZmUuLmQwZTM0ZGQ1ODUwYjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTE2NTQsNyArMTY1NCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbi1cdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKGluaXRfdWZmZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBpbml0aWFsaXplIHVzZXJmYXVsdGZkXFxuXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5kMDI5MGM0NTY3YmQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTEzMyw3ICsxMzMsNyBAQCBGSVhUVVJFX1NFVFVQKHByY3RsX3RocF9kaXNhYmxlX2NvbXBsZXRlbHkpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4tXHRzZWxmLVx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcXG5cIik7XG4gXG5AQCAtMjQxLDcgKzI0MSw3IEBAIEZJWFRVUkVfU0VUVVAocHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2UpXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4tXHRzZWxmLVx1MDAzZXBtZHNpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0c2VsZi1cdTAwM2VwbWRzaXplID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIXNlbGYtXHUwMDNlcG1kc2l6ZSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVW5hYmxlIHRvIHJlYWQgUE1EIHNpemVcXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuY1xuaW5kZXggM2ZmZmQ1ZjdlNmZiNC4uN2UzMmJhZDhhYjJhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuY1xuQEAgLTE0MSw3ICsxNDEsNyBAQCBURVNUX0YocHJvY2Vzc19tYWR2aXNlLCByZW1vdGVfY29sbGFwc2UpXG4gXHRcdHZvaWQgKm1hcF9hZGRyO1xuIFx0fSBpbmZvO1xuIFxuLVx0aHVnZV9wYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aHVnZV9wYWdlX3NpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmIChodWdlX3BhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4gXHRcdFNLSVAocmV0dXJuLCBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgYSB2YWxpZCBodWdlIHBhZ2Ugc2l6ZS5cXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggMDkzNWRiZWY0ODg0Zi4uZDdiZWVkZDVlMTc4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM3OCw4ICszNzgsOCBAQCBmaVxuIENBVEVHT1JZPVwibWVtZmRfc2VjcmV0XCIgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyAxMDBcbisjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuK0NBVEVHT1JZPVwia3NtXCIgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtUCAtcyAxMDBcbiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCA1ZjI3ODkxM2M0ZDc1Li42NzBmY2FkMDgzYjU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0c2l6ZV90IGhwYWdlX2xlbiA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgaHBhZ2VfbGVuID0gcG1kX3BzaXplKCk7XG4gXHRpZiAoIWhwYWdlX2xlbilcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUmVhZGluZyBQTUQgcGFnZXNpemUgZmFpbGVkXCIpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi4yOTVhNjc2OWQ2NzBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gXHRwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRwYWdlc2hpZnQgPSBmZnMocGFnZXNpemUpIC0gMTtcbi1cdHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJSZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi40MGNhMjI0YTYxZjQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0zNSwxMiArMzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0c2l6ZV90IG1hcF9sZW47XG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBkdXJhdGlvbiA9IDA7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wc2hpZnQoKTtcbiBcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxuXCIpO1xuK1xuIFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XG4gXHRpZiAocmFtIFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxuIFx0XHRyYW0gPSBTSVpFX01BWCAvIDQ7XG5AQCAtNzAsMjMgKzc1LDIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdH1cbiBcbiBcdHdhcm54KFwiYWxsb2NhdGUgJXpkIHRyYW5zaHVnZSBwYWdlcywgdXNpbmcgJXpkIE1pQiB2aXJ0dWFsIG1lbW9yeVwiXG4tXHQgICAgICBcIiBhbmQgJXpkIE1pQiBvZiByYW1cIiwgbGVuIFx1MDAzZVx1MDAzZSBIUEFHRV9TSElGVCwgbGVuIFx1MDAzZVx1MDAzZSAyMCxcbi1cdCAgICAgIHJhbSBcdTAwM2VcdTAwM2UgKDIwICsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcbitcdCAgICAgIFwiIGFuZCAlemQgTWlCIG9mIHJhbVwiLCBsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0LCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuK1x0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgKyBocGFnZV9zaGlmdCAtIHBzaGlmdCgpIC0gMSkpO1xuIFxuIFx0cGFnZW1hcF9mZCA9IG9wZW4oXCIvcHJvYy9zZWxmL3BhZ2VtYXBcIiwgT19SRE9OTFkpO1xuIFx0aWYgKHBhZ2VtYXBfZmQgXHUwMDNjIDApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm9wZW4gcGFnZW1hcFxcblwiKTtcbiBcbi1cdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xuLVx0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBIUEFHRV9TSVpFLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbitcdGxlbiAtPSBsZW4gJSBocGFnZV9zaXplO1xuK1x0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcbiBcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiaW5pdGlhbCBtbWFwXCIpO1xuLVx0cHRyICs9IEhQQUdFX1NJWkUgLSAodWludHB0cl90KXB0ciAlIEhQQUdFX1NJWkU7XG4rXHRwdHIgKz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTUFEVl9IVUdFUEFHRVwiKTtcbiBcbi1cdG1hcF9sZW4gPSByYW0gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIDEpO1xuK1x0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gMSk7XG4gXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XG4gXHRpZiAoIW1hcClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibWFwIG1hbGxvY1xcblwiKTtcbkBAIC05OSw3ICsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YSk7XG4tXHRcdGZvciAocCA9IHB0cjsgcCBcdTAwM2MgcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcbitcdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRcdGludDY0X3QgcGZuO1xuIFxuIFx0XHRcdHBmbiA9IGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKTtcbkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGlmIChwZm4gXHUwMDNjIDApIHtcbiBcdFx0XHRcdG5yX2ZhaWxlZCsrO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7XG4rXHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XG4gXG4gXHRcdFx0XHRucl9zdWNjZWVkKys7XG4gXHRcdFx0XHRpZiAoaWR4IFx1MDAzZT0gbWFwX2xlbikge1xuQEAgLTEyMyw3ICsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIHNwbGl0IHRyYW5zaHVnZSBwYWdlLCBrZWVwIGxhc3QgcGFnZSAqL1xuLVx0XHRcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbitcdFx0XHRpZiAobWFkdmlzZShwLCBocGFnZV9zaXplIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpXG4gXHRcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX0RPTlRORUVEXCIpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiKTtcbkBAIC0xMzEsNyArMTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuIFx0XHRrc2Z0X3ByaW50X21zZyhcIiUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1xcdFwiXG4gXHRcdFx0ICAgICAgIFwiJTRkIHN1Y2NlZWQsICU0ZCBmYWlsZWQsICU0ZCBkaWZmZXJlbnQgcGFnZXNcXG5cIixcbi1cdFx0XHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFx1MDAzZVx1MDAzZSBIUEFHRV9TSElGVCksIGxlbiAvIHMgLyAoMSBcdTAwM2NcdTAwM2MgMjApLFxuK1x0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4gXHRcdFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xuIFxuIFx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjIFx1MDAzZT0gZHVyYXRpb24pIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uY1xuaW5kZXggMWZiOTY3ZWY0OTg1NC4uMGI4YmJiNTVjMzM1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZV9wYWdlcyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnJlbF9hcmVhKVxuIHN0YXRpYyBpbnQgc2htZW1fYWxsb2NhdGVfYXJlYSh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHZvaWQgKiphbGxvY19hcmVhLCBib29sIGlzX3NyYylcbiB7XG4gXHR2b2lkICphcmVhX2FsaWFzID0gTlVMTDtcbi1cdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHNpemVfdCBieXRlcyA9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBocGFnZV9zaXplID0gcG1kX3BzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGlzX3NyYyA/IDAgOiBieXRlcztcbiBcdGNoYXIgKnAgPSBOVUxMLCAqcF9hbGlhcyA9IE5VTEw7XG4gXHRpbnQgbWVtX2ZkID0gdWZmZF9tZW1fZmRfY3JlYXRlKGJ5dGVzICogMiwgZmFsc2UpO1xuQEAgLTE5NCwxMCArMTk0LDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsXG4gXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcbiB7XG4tXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRzaXplX3QgbGVuID0gZXhwZWN0X25yX2hwYWdlcyAqIHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBsZW4sIGV4cGVjdF9ucl9ocGFnZXMsXG4tXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4rXHRcdFx0ICAgICAgcG1kX3BzaXplKCkpKVxuIFx0XHRlcnIoXCJEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wiLFxuIFx0XHQgICAgZXhwZWN0X25yX2hwYWdlcyk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IDZmMjM2MGY5Yjc1ZGIuLmRjYjE3NTVjMzVmYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC02NDYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdFx0dWZmZF90ZXN0X29wcy1cdTAwM2VjaGVja19wbWRfbWFwcGluZyhnb3B0cyxcbiBcdFx0XHRcdFx0XHQgZ29wdHMtXHUwMDNlYXJlYV9kc3QsXG4gXHRcdFx0XHRcdFx0IGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplIC9cbi1cdFx0XHRcdFx0XHQgcmVhZF9wbWRfcGFnZXNpemUoKSk7XG4rXHRcdFx0XHRcdFx0IHBtZF9wc2l6ZSgpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbkBAIC0xOTc1LDcgKzE5NzUsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbVxuIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgc3RydWN0IHVmZmRfbXNnICptc2csXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHVmZmRfYXJncyAqYXJncylcbiB7XG4tXHR1ZmZkX21vdmVfaGFuZGxlX2ZhdWx0X2NvbW1vbihnb3B0cywgbXNnLCBhcmdzLCByZWFkX3BtZF9wYWdlc2l6ZSgpKTtcbitcdHVmZmRfbW92ZV9oYW5kbGVfZmF1bHRfY29tbW9uKGdvcHRzLCBtc2csIGFyZ3MsIHBtZF9wc2l6ZSgpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0yMDg2LDcgKzIwODYsNyBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfcG1kX3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZkX3Rlc3RfYXJnc190XG4ge1xuIFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3QsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0ZXJyKFwibWFkdmlzZShNQURWX0hVR0VQQUdFKSBmYWlsdXJlXCIpO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbitcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5AQCAtMjA5NCw3ICsyMDk0LDcgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3BtZF9zcGxpdF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmZF90ZXN0X2FcbiB7XG4gXHRpZiAobWFkdmlzZShnb3B0cy1cdTAwM2VhcmVhX2RzdCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4gXHRcdGVycihcIm1hZHZpc2UoTUFEVl9OT0hVR0VQQUdFKSBmYWlsdXJlXCIpO1xuLVx0dWZmZF9tb3ZlX3Rlc3RfY29tbW9uKGdvcHRzLCB0YXJncywgcmVhZF9wbWRfcGFnZXNpemUoKSxcbitcdHVmZmRfbW92ZV90ZXN0X2NvbW1vbihnb3B0cywgdGFyZ3MsIHBtZF9wc2l6ZSgpLFxuIFx0XHRcdCAgICAgIHVmZmRfbW92ZV9wbWRfaGFuZGxlX2ZhdWx0KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbmluZGV4IDU3MmMyNTE2ZTg3NGQuLmY0NmVkZDNlZTZkODEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5AQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgaW50IGRldGVjdF90aHBfc2l6ZXMoc2l6ZV90IHNpemVzW10sIGludCBtYXgpXG4gXHRpbnQgaTtcbiBcbiBcdC8qIHRocCBub3Qgc3VwcG9ydGVkIGF0IGFsbC4gKi9cbi1cdGlmICghcmVhZF9wbWRfcGFnZXNpemUoKSlcbitcdGlmICghcG1kX3BzaXplKCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3JkZXJzID0gdGhwX3N1cHBvcnRlZF9vcmRlcnMoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLjFmZWYxMjY2NDI5ZjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgKzIxLDggQEBcbiBcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbit1aW50NjRfdCBfX3BtZF9wc2l6ZTtcbit1aW50NjRfdCBfX3BtZF9wc2hpZnQ7XG4gXG4gdWludDY0X3QgcGFnZW1hcF9nZXRfZW50cnkoaW50IGZkLCBjaGFyICpzdGFydClcbiB7XG5AQCAtMTU1LDEyICsxNTcsMjMgQEAgYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi11aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuK3VpbnQ2NF90IHNpemVfdG9fc2hpZnQodWludDY0X3Qgc2l6ZSlcbit7XG4rXHRpZiAoX19idWlsdGluX3BvcGNvdW50bGwoc2l6ZSkgIT0gMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gZmZzbChzaXplKSAtIDE7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wc2l6ZSh2b2lkKVxuIHtcbiBcdGludCBmZDtcbiBcdGNoYXIgYnVmWzIwXTtcbiBcdHNzaXplX3QgbnVtX3JlYWQ7XG4gXG4rXHRpZiAoX19wbWRfcHNpemUpXG4rXHRcdHJldHVybiBfX3BtZF9wc2l6ZTtcbitcbiBcdGZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTczLDcgKzE4NiwyNSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuIFx0YnVmW251bV9yZWFkXSA9ICdcXDAnO1xuIFx0Y2xvc2UoZmQpO1xuIFxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4rXHRfX3BtZF9wc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4rXG4rXHRyZXR1cm4gX19wbWRfcHNpemU7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wc2hpZnQodm9pZClcbit7XG4rXHRpZiAoX19wbWRfcHNoaWZ0KVxuK1x0XHRyZXR1cm4gX19wbWRfcHNoaWZ0O1xuK1xuK1x0aWYgKCFfX3BtZF9wc2l6ZSlcbitcdFx0X19wbWRfcHNpemUgPSBwbWRfcHNpemUoKTtcbitcbitcdGlmICghX19wbWRfcHNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0X19wbWRfcHNoaWZ0ID0gc2l6ZV90b19zaGlmdChfX3BtZF9wc2l6ZSk7XG4rXG4rXHRyZXR1cm4gX19wbWRfcHNoaWZ0O1xuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpXG5AQCAtNDEyLDcgKzQ0Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLFxuIFxuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbkBAIC00MjUsNyArNDU2LDcgQEAgYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiBcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHR1aW50NjRfdCBwbWRfcGFnZXNpemUgPSBwbWRfcHNpemUoKTtcbiBcbiBcdGlmICghcG1kX3BhZ2VzaXplKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkaW5nIFBNRCBwYWdlc2l6ZSBmYWlsZWRcXG5cIik7XG5AQCAtNDM4LDcgKzQ2OSw3IEBAIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4gXG4gYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0dWludDY0X3QgcG1kX3BhZ2VzaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVpbnQ2NF90IHBtZF9wYWdlc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuIFxuIFx0aWYgKCFwbWRfcGFnZXNpemUpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgUE1EIHBhZ2VzaXplIGZhaWxlZFxcblwiKTtcbkBAIC00NTIsMTQgKzQ4MywxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHBtZF9wc2l6ZSgpO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcHNoaWZ0KCk7XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgdHJhbnNodWdlXFxuXCIpO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbitcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfSFVHRVBBR0VcXG5cIik7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyArNTA3LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSArIDEgPT0gUEFHRU1BUF9QRk4oZW50WzFdKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcbitcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4wMDQ4ZTBlODI3NzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbitleHRlcm4gdWludDY0X3QgX19wbWRfcHNpemU7XG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BzaGlmdDtcbiBcbiAvKlxuICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpXG5AQCAtODgsNyArOTAsOSBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4tdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4rdWludDY0X3Qgc2l6ZV90b19zaGlmdCh1aW50NjRfdCBzaXplKTtcbit1aW50NjRfdCBwbWRfcHNpemUodm9pZCk7XG4rdWludDY0X3QgcG1kX3BzaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiArMTYxLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xuIGludCBnZXRfaGFyZHdhcmVfY29ycnVwdGVkX3NpemUodW5zaWduZWQgbG9uZyAqdmFsKTtcbiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiBcbi0vKlxuLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplXG4tICovXG4tI2RlZmluZSBIUEFHRV9TSElGVCAyMVxuLSNkZWZpbmUgSFBBR0VfU0laRSAoMSBcdTAwM2NcdTAwM2MgSFBBR0VfU0hJRlQpXG4tXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjU5OjExLjM3OTk0NDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxNDM2MzQwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgYXBwbGllZCBhcyB0aGUgSEVBRCBjb21taXQsIGlzIHdvcnRoIGZ1enppbmcuIFRoZSB1c2VyIGlzIGFza2luZyBmb3IgYW4gZXZhbHVhdGlvbiwgYW5kIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGBnaXQgZGlmZmAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGV2ZXJ5IG1vZGlmaWVkIGZpbGUgZmFsbHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy4uLmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgbmVnYXRpdmUgY3JpdGVyaW9uIGJhc2VkIG9uIHRoZSBydWxlcy5cblxuTGV0J3MgcXVpY2tseSByZWZyZXNoIHRoZSBydWxlcyByZWdhcmRpbmcgd2hlbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjcml0ZXJpYSBoZXJlIGlzIGFueSBjb2RlIHN0cmljdGx5IHdpdGhpbiBcIlVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCJcblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBXZSd2ZSBnb3QgYGNvdy5jYCwgYGZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jYCwgYGd1YXJkLXJlZ2lvbnMuY2AsIGBobW0tdGVzdHMuY2AsIGBraHVnZXBhZ2VkLmNgLCBga3NtX3Rlc3RzLmNgLCBgbWlncmF0aW9uLmNgLCBgbWtkaXJ0eS5jYCwgYHBhZ2VtYXBfaW9jdGwuY2AsIGBwcmN0bF90aHBfZGlzYWJsZS5jYCwgYHByb2Nlc3NfbWFkdi5jYCwgYHJ1bl92bXRlc3RzLnNoYCwgYHNvZnQtZGlydHkuY2AsIGBzcGxpdF9odWdlX3BhZ2VfdGVzdC5jYCwgYHRyYW5zaHVnZS1zdHJlc3MuY2AsIGB1ZmZkLWNvbW1vbi5jYCwgYHVmZmQtdW5pdC10ZXN0cy5jYCwgYHVmZmQtd3AtbXJlbWFwLmNgLCBgdm1fdXRpbC5jYCwgYW5kIGB2bV91dGlsLmhgLlxuXG5ZZXAsIGFsbCBvZiB0aGVtIGFyZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBUaGVzZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgdXNlci1zcGFjZSBzZWxmLXRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBDcnVjaWFsbHksIHRoZXkgZG8gKm5vdCogaW1wYWN0IHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gdXNlcnNwYWNlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlc2UgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdXNlcnNwYWNlIHNlbGYtdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBub25lIG9mIHRoZSBjaGFuZ2VzIGludm9sdmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm8gc3BlY2lmaWMgc3ltYm9scyBuZWVkIG91ciBhdHRlbnRpb24sIHNvIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYW4gZW1wdHkgYXJyYXkuIFNpbWlsYXJseSwgc2luY2UgdGhlc2UgYXJlIHNlbGYtdGVzdHMsIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBhY3RpdmF0ZSB0aGlzIGNvZGUsIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGFuIGVtcHR5IGFycmF5LlxuXG5MZXQncyBlbnN1cmUgd2Ugc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sLiBJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gVGhlIHBhcmFtZXRlcnMgYXJlOiBgRW5hYmxlQ29uZmlnc2AgKGFycmF5IG9mIHN0cmluZ3MsIG51bGxhYmxlKSwgYEZvY3VzU3ltYm9sc2AgKGFycmF5IG9mIHN0cmluZ3MsIG51bGxhYmxlKSwgYFJlYXNvbmluZ2AgKHN0cmluZyksIGFuZCBgV29ydGhGdXp6aW5nYCAoYm9vbGVhbikuIFRoZSBzaWduYXR1cmUgaXMgY29ycmVjdCwgYW5kIG15IGFuYWx5c2lzIGZpdHMgcGVyZmVjdGx5IHdpdGhpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEzLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6NTk6MTguNTIzNTgwNTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBidWlsZCBhcnRpZmFjdHMgYWZmZWN0aW5nIHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzo1OToxOC41MjM2MDMwOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowjhnrg[1] Phase: Running StartedAt: 2026-09-14 08:00:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhnrg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 08:00:15 +0000 UTC FinishedAt: 2026-09-14 08:00:23 +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,}