Name: series-workflowbkl5b Phase: Failed StartedAt: 2026-08-13 06:43:23 +0000 UTC FinishedAt: 2026-08-13 07:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkl5b[0] Phase: Succeeded StartedAt: 2026-08-13 06:43:23 +0000 UTC FinishedAt: 2026-08-13 07:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkl5b[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 06:43:23 +0000 UTC FinishedAt: 2026-08-13 07:28:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNzoyODowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDU0OTM1OGNjOGMyMS4uYWU2YTA5MWI2NDg1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWRcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHVtZW0tXHUwMDNlYnVmZmVyID0gYnVmZmVyO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgJiM0MzsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjtcbiBcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiBcdGNmZy5yeF9zaXplID0geHNrLVx1MDAzZXJ4cXNpemU7XG5AQCAtMTcwLDcgJiM0MzsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJiMzOTt0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3RcbiYjNDM7XHRcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XG4mIzQzO1x0XHQgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXImIzM5O3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdFxuJiM0MztcdFx0ICogdmlhIHVtZW1fcmVmLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2hhcmVkKVxuJiM0MztcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHR4c2stXHUwMDNleHNrID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2hhcmVkKSB7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4mIzQzO1x0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG5AQCAtMjAzLDYgJiM0MzsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfcngpXG4ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LFxuJiM0MztcdCAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGxcbiYjNDM7XHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cdTAwM2VpZmluZGV4O1xuIFx0dTMyIGksIGo7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfSU5URVJGQUNFUzsgaSYjNDM7JiM0MzspIHtcbkBAIC0yMTQsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcbiBcdFx0aWZvYmotXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXJlbGVhc2VfcnggPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2V2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMO1xuJiM0MztcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgJiM0Mzs2MDIsMTIxIEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiB7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbiYjNDM7XHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuJiM0MztcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbi1cdFx0cGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuLVx0XHRcdFx0XHRcdCAgIHBrdF9zdHJlYW0tXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xuLVx0XHRpZiAoIXBrdF9zdHJlYW0pXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsIHUzMiBwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0dTMyIGksIHBrdHNfc29jazA7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwa3RzX3NvY2swID0gdG90YWxfcGt0cyAvIDQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBuYl9wa3RzID0gKGkgPT0gMCkgPyBwa3RzX3NvY2swIDogKHRvdGFsX3BrdHMgLSBwa3RzX3NvY2swKTtcbiYjNDM7XG4mIzQzO1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTQ2Nyw2ICYjNDM7MTU5MCwxNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3R4X2ludmFsaWRfZGVzY3Moc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldHVybiBURVNUX1BBU1M7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZm9iamVjdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gY291bnQ7IGkgXHUwMDNlIDA7IGktLSlcbiYjNDM7XHRcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqZWN0LVx1MDAzZXhza19hcnJbaSAtIDFdKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNTk5LDYgJiM0MzsxNzMzLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbiYjNDM7XHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICYjNDM7MTgwNSwxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVycikpO1xuIFx0fVxuIFxuJiM0MztcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuJiM0MztcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiAmIzQzOzE4NDAsNjEgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4mIzQzO1xuJiM0MztcdGlmICgheHNrKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4mIzQzO1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcdGlmICghdW1lbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4mIzQzO1x0aWYgKCF4c2stXHUwMDNldW1lbV9yZWYpIHtcbiYjNDM7XHRcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZXVtZW0pIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4mIzQzO1x0XHRcdFx0ICogZGVsZXRlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiYjNDM7XHRcdFx0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0dW1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZWJ1ZmZlciBcdTAwMjZcdTAwMjYgdW1lbS1cdTAwM2VtbWFwX3NpemUpIHtcbiYjNDM7XHRcdFx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbiYjNDM7XHRcdFx0dW1lbS1cdTAwM2VtbWFwX3NpemUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHNrLVx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XG4mIzQzO1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlmb2JqKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC1cdTAwM2VuYl9zb2NrZXRzKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE3NjgsMjcgJiM0MzsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbi17XG4tXHR1MzIgaTtcbi1cbi1cdGlmICghaWZvYmogfHwgIXRlc3QpXG4tXHRcdHJldHVybjtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspXG4tXHRcdHhza19zb2NrZXRfX2RlbGV0ZShpZm9iai1cdTAwM2V4c2tfYXJyW2ldLnhzayk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuLXtcbi1cdGlmICghaWZvYmoxKVxuLVx0XHRyZXR1cm47XG4tXG4tXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XG4tXHRpZiAoaWZvYmoyIFx1MDAyNlx1MDAyNiAhaWZvYmoyLVx1MDAzZXNoYXJlZF91bWVtKVxuLVx0XHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbiB7XG5AQCAtMTg0MCwxMyAmIzQzOzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbiYjNDM7XHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpZm9iajIpIHtcbiYjNDM7XHRpZiAoaWZvYmoyIFx1MDAyNlx1MDAyNiAhdGVzdC1cdTAwM2VmYWlsKSB7XG4gXHRcdC8qU3Bhd24gVFggdGhyZWFkICovXG4gXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnQxLCBOVUxMLCBpZm9iajItXHUwMDNlZnVuY19wdHIsIHRlc3QpO1xuIFx0XHRwdGhyZWFkX2pvaW4odDEsIE5VTEwpO1xuQEAgLTE4NTUsOSAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbiBcbiBcdGlmICh0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXHUwMDNlZmFpbCkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4gXHR9XG4gXG4gXHRpZiAodGVzdC1cdTAwM2VmYWlsKVxuQEAgLTE5NjYsOSAmIzQzOzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG4gXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbkBAIC0yMjI2LDYgJiM0MzsyMzkwLDE2OCBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNlIE1BWF9TT0NLRVRTKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcblwmIzM0OywgX19mdW5jX18sIHRlc3QtXHUwMDNlbmJfc29ja2V0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCF0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxuJiM0MztcdFx0ICAgICF0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgaSk7XG4mIzQzO1x0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQodm9pZCljdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjZmctXHUwMDNlc2hvcnRfbGVuLCBjZmctXHUwMDNlbG9uZ19sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbiYjNDM7XHRcdFx0XHRcdCBjZmctXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcbiYjNDM7XHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtXzAsICpyeF9zdHJlYW1fMTtcbiYjNDM7XG4mIzQzO1x0KHZvaWQpY3R4O1xuJiM0MztcbiYjNDM7XHR0eF9zdHJlYW1fMCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xuJiM0MztcdHR4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4mIzQzO1x0cnhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbiYjNDM7XHRyeF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfc3RyZWFtXzEtXHUwMDNlbmJfdmFsaWRfZW50cmllcyBcdTAwM2M9IHR4X3N0cmVhbV8wLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cyBcdTAwM2M9IHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHJ4X3N0cmVhbV8xLVx1MDAzZW5iX3J4X3BrdHMsIHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpO1xuJiM0MztcdFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGJwZl9tYXAgKnhza21hcF90eCwgdTMyIG5iX3NvY2tldHMsXG4mIzQzO1x0XHRcdFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHRlc3QtXHUwMDNldG90YWxfc3RlcHMgPSAxO1xuJiM0MztcdHRlc3QtXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XG4mIzQzO1xuJiM0MztcdHRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZSh0ZXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiYjNDM7XHRpZiAocG9zdF9mbilcbiYjNDM7XHRcdHJldCA9IHBvc3RfZm4odGVzdCwgcmV0LCBjdHgpO1xuJiM0MztcbiYjNDM7XHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0ge1xuJiM0MztcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbiYjNDM7XHRcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwsIFx1MDAyNmxlbl9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0ge1xuJiM0MztcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuJiM0MztcdFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4mIzQzO1x0XHRcdFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp0eF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial90eCBcdTAwMjZcdTAwMjYgdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2sgP1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzayA/XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2V1bWVtIDogTlVMTDtcbiYjNDM7XHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4mIzQzO1x0Ym9vbCByeF91bmFsaWduZWQgPSByeF91bWVtID8gcnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHRlc3Rfc3BlY19zZXRfdW5hbGlnbmVkKHRlc3QpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGlmICh0eF91bWVtKVxuJiM0MztcdFx0dHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHR4X3VuYWxpZ25lZDtcbiYjNDM7XHRpZiAocnhfdW1lbSlcbiYjNDM7XHRcdHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSByeF91bmFsaWduZWQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiB7XG4gXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VzaGFyZWRfdW1lbTtcbkBAIC0yNTA2LDkgJiM0MzsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uOTNkY2Y2NmI0ZTYyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4c2suaFwmIzM0O1xuQEAgLTc5LDYgJiM0Mzs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuJiM0Mzt0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3Bvc3RfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCB2b2lkICpjdHgpO1xuIFxuIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XG5AQCAtOTMsNiAmIzQzOzk3LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XG4gXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcbiBcdHU4IHNyY19tYWNbRVRIX0FMRU5dO1xuIFx0Ym9vbCBjaGVja19jb25zdW1lcjtcbiYjNDM7XHRib29sIHVtZW1fcmVmOyAvKiB0cnVlIGlmIHRoaXMgc2xvdCBob2xkcyBhIGNvdW50ZWQgVU1FTSByZWZlcmVuY2UgKi9cbiB9O1xuIFxuIGludCBraWNrX3J4KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XG5AQCAtMTA0LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuJiM0MztcdHJlZmNvdW50X3QgdXNlcnM7XG4gXHR1MzIgbnVtX2ZyYW1lcztcbiBcdHUzMiBmcmFtZV9oZWFkcm9vbTtcbiBcdHZvaWQgKmJ1ZmZlcjtcbkBAIC0xNTksNyAmIzQzOzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xuIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQgKmJ1ZmZlciwgdTY0IHNpemUpO1xuIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLFxuIFx0XHRcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XG4tXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4mIzQzO1x0aWYgKHBrdF9sZW4gXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4mIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNFxuJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50XG4gXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxuIFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4mIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTtcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMSwyNCBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbi1cdHVtZW0tXHUwMDNlZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuJiM0MztcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbiYjNDM7XHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuJiM0MztcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXHUwMDI2dW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbiYjNDM7XHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZm9iai1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbiYjNDM7XHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4mIzQzO1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcdTAwMjZ4c2ssIFx1MDAyNnVtZW0sIGlmb2JqLCBmYWxzZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0emNfYXZhaWwgPSB0cnVlO1xuIFxuLVx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuLVx0ZnJlZSh4c2spO1xuLW91dDpcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRmcmVlKHVtZW0pO1xuJiM0MztcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4mIzQzO1x0eHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbiYjNDM7XG4gXHRyZXR1cm4gemNfYXZhaWw7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTliMDM1NWVlOTljZDFhNTQwNjRlZDcwMDJmYjMwZGEzNDI0ZTQwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA3OjI4OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDU0OTM1OGNjOGMyMS4uYWU2YTA5MWI2NDg1MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQKIAkJcmV0dXJuIHJldDsKIAogCXVtZW0tJmd0O2J1ZmZlciA9IGJ1ZmZlcjsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dW1lbS0mZ3Q7dXNlcnMsIDEpOwogCWlmIChpZm9iai0mZ3Q7c2hhcmVkX3VtZW0gJmFtcDsmYW1wOyBpZm9iai0mZ3Q7cnhfb24pIHsKIAkJdW1lbS0mZ3Q7YmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pOwogCQl1bWVtLSZndDtuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTsKQEAgLTE1NCw2ICYjNDM7MTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0KIAlzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307CiAJc3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjsKIAlzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyOwomIzQzOwlpbnQgcmV0OwogCiAJeHNrLSZndDt1bWVtID0gdW1lbTsKIAljZmcucnhfc2l6ZSA9IHhzay0mZ3Q7cnhxc2l6ZTsKQEAgLTE3MCw3ICYjNDM7MTcyLDI2IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAKIAl0eHIgPSBpZm9iamVjdC0mZ3Q7dHhfb24gPyAmYW1wO3hzay0mZ3Q7dHggOiBOVUxMOwogCXJ4ciA9IGlmb2JqZWN0LSZndDtyeF9vbiA/ICZhbXA7eHNrLSZndDtyeCA6IE5VTEw7Ci0JcmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJcmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKCZhbXA7eHNrLSZndDt4c2ssIGlmb2JqZWN0LSZndDtpZmluZGV4LCAwLCB1bWVtLSZndDt1bWVtLCByeHIsIHR4ciwgJmFtcDtjZmcpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQkvKgomIzQzOwkJICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJiMzOTt0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3QKJiM0MzsJCSAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5CiYjNDM7CQkgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXImIzM5O3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdAomIzQzOwkJICogdmlhIHVtZW1fcmVmLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2hhcmVkKQomIzQzOwkJCXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQl4c2stJmd0O3hzayA9IE5VTEw7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGFyZWQpIHsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO3VtZW0tJmd0O3VzZXJzKTsKJiM0MzsJCXhzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X3Jpbmdfc2l6ZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQpAQCAtMjAzLDYgJiM0MzsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQogc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LAogCQkJICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KQogewomIzQzOwkvKgomIzQzOwkgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsCiYjNDM7CSAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGwKJiM0MzsJICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuCiYjNDM7CSAqLwomIzQzOwlib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtJmd0O2lmaW5kZXggPT0gaWZvYmpfcngtJmd0O2lmaW5kZXg7CiAJdTMyIGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTUFYX0lOVEVSRkFDRVM7IGkmIzQzOyYjNDM7KSB7CkBAIC0yMTQsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJaWZvYmotJmd0O3VzZV9maWxsX3JpbmcgPSB0cnVlOwogCQlpZm9iai0mZ3Q7cmVsZWFzZV9yeCA9IHRydWU7CiAJCWlmb2JqLSZndDt2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMOwomIzQzOwkJaWZvYmotJmd0O3NoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7CiAJCWlmb2JqLSZndDt1c2VfbWV0YWRhdGEgPSBmYWxzZTsKIAogCQlpZiAoaSA9PSAwKSB7CkBAIC01NzQsMjYgJiM0Mzs2MDIsMTIxIEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAogc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwomIzQzOwkJdHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwKJiM0MzsJCQkJCQkgICAgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlwa3Rfc3RyZWFtID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbTsKJiM0MzsJCXJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCiYjNDM7CQkJCQkJICAgICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwomIzQzOwkJaWYgKCFyeF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07CiYjNDM7CQl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7CiYjNDM7CQlpZiAocnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2xlbl9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHNob3J0X2xlbiwgdTMyIGxvbmdfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwogCXN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtOwogCXUzMiBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcGt0X2xlbiA9IGkgPyBsb25nX2xlbiA6IHNob3J0X2xlbjsKJiM0MzsKIAkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07Ci0JCXBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCi0JCQkJCQkgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7Ci0JCWlmICghcGt0X3N0cmVhbSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwogCiAJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CQlyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsIHUzMiBwa3RfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgcGt0c19zb2NrMDsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IHRvdGFsX3BrdHMgJmx0OyA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7CiYjNDM7CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE0NjcsNiAmIzQzOzE1OTAsMTcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0dXJuIFRFU1RfUEFTUzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZiAoIWlmb2JqZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBjb3VudDsgaSAmZ3Q7IDA7IGktLSkKJiM0MzsJCXhza19kZWxldGVfc29ja2V0KCZhbXA7aWZvYmplY3QtJmd0O3hza19hcnJbaSAtIDFdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwKIAkJCSAgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIGJvb2wgdHgpCiB7CkBAIC0xNTk5LDYgJiM0MzsxNzMzLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKJiM0MzsJLyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi8KJiM0MzsJaWZvYmplY3QtJmd0O3hzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwogCiAJcmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpOwogCWlmIChyZXQpCkBAIC0xNjY5LDEyICYjNDM7MTgwNSwxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpCiAJCQkJICAgICAgIHN0cmVycm9yKC1lcnIpKTsKIAl9CiAKJiM0MzsJLyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovCiYjNDM7CWlmIChlcnIpCiYjNDM7CQl0ZXN0LSZndDtmYWlsID0gdHJ1ZTsKJiM0MzsKIAlpZiAodGVzdC0mZ3Q7dXNlX2JhcnJpZXIpCiAJCXB0aHJlYWRfYmFycmllcl93YWl0KCZhbXA7YmFycik7CiAKIAkvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi8KIAlpZiAoZXJyKSB7Ci0JCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwogCQlwdGhyZWFkX2V4aXQoTlVMTCk7CiAJfQogCkBAIC0xNzAxLDEyICYjNDM7MTg0MCw2MSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpCiAJcHRocmVhZF9leGl0KE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7dm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spCiB7Ci0Jc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai0mZ3Q7eHNrLSZndDt1bWVtOwomIzQzOwlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTsKJiM0MzsKJiM0MzsJaWYgKCF4c2spCiYjNDM7CQlyZXR1cm47CiAKLQl4c2tfdW1lbV9fZGVsZXRlKHVtZW0tJmd0O3VtZW0pOwotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CXVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHhzay0mZ3Q7eHNrKQomIzQzOwkJeHNrX3NvY2tldF9fZGVsZXRlKHhzay0mZ3Q7eHNrKTsKJiM0MzsJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwomIzQzOwkvKiBTa2lwIHNsb3RzIHRoYXQgbmV2ZXIgYWNxdWlyZWQgYSBVTUVNIHJlZmVyZW5jZSAocHJlLWluaXRpYWxpemVkIGJ1dCB1bmNvbmZpZ3VyZWQpLiAqLwomIzQzOwlpZiAoIXhzay0mZ3Q7dW1lbV9yZWYpIHsKJiM0MzsJCXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkgewomIzQzOwkJaWYgKHVtZW0tJmd0O3VtZW0pIHsKJiM0MzsJCQlpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKJiM0MzsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7eHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxuJiMzNDssCiYjNDM7CQkJCQkgICAgICAgZXJyKTsKJiM0MzsJCQkJLyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5CiYjNDM7CQkJCSAqIGRlbGV0ZS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXJlZmNvdW50X3NldCgmYW1wO3VtZW0tJmd0O3VzZXJzLCAxKTsKJiM0MzsJCQkJeHNrLSZndDt1bWVtX3JlZiA9IHRydWU7CiYjNDM7CQkJCXhzay0mZ3Q7dW1lbSA9IHVtZW07CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQkJdW1lbS0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW1lbS0mZ3Q7YnVmZmVyICZhbXA7JmFtcDsgdW1lbS0mZ3Q7bW1hcF9zaXplKSB7CiYjNDM7CQkJbXVubWFwKHVtZW0tJmd0O2J1ZmZlciwgdW1lbS0mZ3Q7bW1hcF9zaXplKTsKJiM0MzsJCQl1bWVtLSZndDtidWZmZXIgPSBOVUxMOwomIzQzOwkJCXVtZW0tJmd0O21tYXBfc2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJeHNrLSZndDt1bWVtX3JlZiA9IGZhbHNlOwomIzQzOwl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7ewomIzQzOwlpZiAoIWlmb2JqKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC0mZ3Q7bmJfc29ja2V0cyk7CiB9CiAKIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE3NjgsMjcgJiM0MzsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3IKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCi17Ci0JdTMyIGk7Ci0KLQlpZiAoIWlmb2JqIHx8ICF0ZXN0KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspCi0JCXhza19zb2NrZXRfX2RlbGV0ZShpZm9iai0mZ3Q7eHNrX2FycltpXS54c2spOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMikKLXsKLQlpZiAoIWlmb2JqMSkKLQkJcmV0dXJuOwotCi0JdGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpOwotCWlmIChpZm9iajIgJmFtcDsmYW1wOyAhaWZvYmoyLSZndDtzaGFyZWRfdW1lbSkKLQkJdGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpOwotfQotCiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLAogCQkJCSAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKQogewpAQCAtMTg0MCwxMyAmIzQzOzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAkJaWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KCZhbXA7YmFycikpIHsKIAkJCXRlc3QtJmd0O3VzZV9iYXJyaWVyID0gZmFsc2U7CiAJCQlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwotCQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQkJY2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpOwomIzQzOwkJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAkJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAJCX0KIAl9CiAKLQlpZiAoaWZvYmoyKSB7CiYjNDM7CWlmIChpZm9iajIgJmFtcDsmYW1wOyAhdGVzdC0mZ3Q7ZmFpbCkgewogCQkvKlNwYXduIFRYIHRocmVhZCAqLwogCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3QxLCBOVUxMLCBpZm9iajItJmd0O2Z1bmNfcHRyLCB0ZXN0KTsKIAkJcHRocmVhZF9qb2luKHQxLCBOVUxMKTsKQEAgLTE4NTUsOSAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaQogCXB0aHJlYWRfam9pbih0MCwgTlVMTCk7CiAKIAlpZiAodGVzdC0mZ3Q7dG90YWxfc3RlcHMgPT0gdGVzdC0mZ3Q7Y3VycmVudF9zdGVwIHx8IHRlc3QtJmd0O2ZhaWwpIHsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7Ci0JCWNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpOwogCX0KIAogCWlmICh0ZXN0LSZndDtmYWlsKQpAQCAtMTk2Niw5ICYjNDM7MjEzMSw4IEBAIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAogCWlmIChzd2FwX3hza19yZXNvdXJjZXModGVzdCkpIHsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCk7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl91bWVtKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwogCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwogCX0KIApAQCAtMjIyNiw2ICYjNDM7MjM5MCwxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmd0OyBNQVhfU09DS0VUUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxuJiMzNDssIF9fZnVuY19fLCB0ZXN0LSZndDtuYl9zb2NrZXRzKTsKJiM0MzsJCXJldHVybiBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHwKJiM0MzsJCSAgICAhdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxuJiMzNDssIF9fZnVuY19fLCBpKTsKJiM0MzsJCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnID0gY3R4OwomIzQzOwomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy0mZ3Q7c2hvcnRfbGVuLCBjZmctJmd0O2xvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4OwomIzQzOwomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEodGVzdCwgY2ZnLSZndDt0b3RhbF9wa3RzLAomIzQzOwkJCQkJIGNmZy0mZ3Q7cGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7CiYjNDM7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJdHhfc3RyZWFtXzAgPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FyclswXS5wa3Rfc3RyZWFtOwomIzQzOwl0eF9zdHJlYW1fMSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyWzFdLnBrdF9zdHJlYW07CiYjNDM7CXJ4X3N0cmVhbV8wID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbMF0ucGt0X3N0cmVhbTsKJiM0MzsJcnhfc3RyZWFtXzEgPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclsxXS5wa3Rfc3RyZWFtOwomIzQzOwomIzQzOwlpZiAodHhfc3RyZWFtXzEtJmd0O25iX3ZhbGlkX2VudHJpZXMgJmx0Oz0gdHhfc3RyZWFtXzAtJmd0O25iX3ZhbGlkX2VudHJpZXMpCiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzICZsdDs9IHJ4X3N0cmVhbV8wLSZndDtuYl9yeF9wa3RzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC0mZ3Q7bmJfcnhfcGt0cyk7CiYjNDM7CQlyZXQgPSBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cywKJiM0MzsJCQkJc2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLAomIzQzOwkJCQljb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0LSZndDt0b3RhbF9zdGVwcyA9IDE7CiYjNDM7CXRlc3QtJmd0O25iX3NvY2tldHMgPSBuYl9zb2NrZXRzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpOwomIzQzOwomIzQzOwlyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTsKJiM0MzsJaWYgKHBvc3RfZm4pCiYjNDM7CQlyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTsKJiM0MzsKJiM0MzsJcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0gewomIzQzOwkJLnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSwKJiM0MzsJCS5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLAomIzQzOwkJCQkgICAgTlVMTCwgJmFtcDtsZW5fY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHsKJiM0MzsJCS50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCwKJiM0MzsJCS5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCwKJiM0MzsJCQkJICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsICZhbXA7dW5ldmVuX2Rpc3RfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LSZndDtpZm9ial90eCAmYW1wOyZhbXA7IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2sgPwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7dW1lbSA6IE5VTEw7CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC0mZ3Q7aWZvYmpfcnggJmFtcDsmYW1wOyB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrID8KJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3VtZW0gOiBOVUxMOwomIzQzOwlib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAodHhfdW1lbSkKJiM0MzsJCXR4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkOwomIzQzOwlpZiAocnhfdW1lbSkKJiM0MzsJCXJ4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI1MDYsOSAmIzQzOzI4MzIsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwKJiM0MzsJCQkJCSAgIGNvbnN0IHZvaWQgKmN0eCk7CiAKIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gewogCXN0cnVjdCB4c2tfcmluZ19jb25zIHJ4OwpAQCAtOTMsNiAmIzQzOzk3LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7CiAJdTggZHN0X21hY1tFVEhfQUxFTl07CiAJdTggc3JjX21hY1tFVEhfQUxFTl07CiAJYm9vbCBjaGVja19jb25zdW1lcjsKJiM0MzsJYm9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovCiB9OwogCiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwpAQCAtMTA0LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7CiAJc3RydWN0IHhza191bWVtICp1bWVtOwogCXU2NCBuZXh0X2J1ZmZlcjsKIAl1NjQgbW1hcF9zaXplOwomIzQzOwlyZWZjb3VudF90IHVzZXJzOwogCXUzMiBudW1fZnJhbWVzOwogCXUzMiBmcmFtZV9oZWFkcm9vbTsKIAl2b2lkICpidWZmZXI7CkBAIC0xNTksNyAmIzQzOzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpOwogaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7CiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwKIAkJCSBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7Ci0KJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7CiAKIHN0cnVjdCBwa3QgewogCWludCBvZmZzZXQ7CkBAIC0xNzksNiAmIzQzOzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7CiAJYm9vbCB2ZXJiYXRpbTsKIH07CiAKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7CiYjNDM7CXUzMiBzaG9ydF9sZW47CiYjNDM7CXUzMiBsb25nX2xlbjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggewomIzQzOwl1MzIgdG90YWxfcGt0czsKJiM0MzsJdTMyIHBrdF9sZW47CiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKQogewogCXJldHVybiBvcHRpb25zICZhbXA7IFhEUF9QS1RfQ09OVEQ7CkBAIC0yNjgsNiAmIzQzOzI4NCwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogCiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpOwogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTsKQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7CiAJey5uYW1lID0gJiMzNDtYRFBfUFJPR19DTEVBTlVQJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LAogCXsubmFtZSA9ICYjMzQ7WERQX0RST1BfSEFMRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfZHJvcH0sCiAJey5uYW1lID0gJiMzNDtYRFBfU0hBUkVEX1VNRU0mIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFMmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV9MRU5HVEhfQkFTRUQmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV9VTkVWRU5fRElTVCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZH0sCiAJey5uYW1lID0gJiMzNDtYRFBfTUVUQURBVEFfQ09QWSYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LAogCXsubmFtZSA9ICYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX2FsaWduZWRfaW52X2Rlc2NfbWJ9LApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCkBAIC0xMCw3ICYjNDM7MTAsNyBAQAogCiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDIpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTsKIAlfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTsKIAlfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpOwogfSB4c2sgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CkBAIC03NSw2ICYjNDM7NzUsMTkgQEAgU0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgaWR4LCBYRFBfRFJPUCk7CiB9CiAKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykgaW50IHhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB4ZHBfbWQgKnhkcCkKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CV9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7CiYjNDM7CiYjNDM7CS8qIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aC4gKi8KJiM0MzsJaWYgKHBrdF9sZW4gJmx0Oz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKQomIzQzOwkJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIDAsIFhEUF9EUk9QKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIDEsIFhEUF9EUk9QKTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDt4ZHAuZnJhZ3MmIzM0OykgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKQogewogCV9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaAppbmRleCA0NTgxMGZmNTUyZGFlLi5iZDliNWRjZjhjOGVlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaApAQCAtMyw3ICYjNDM7Myw4IEBACiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfCiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfCiAKLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMgomIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNAomIzQzOyNkZWZpbmUgU0hBUkVEX1VNRU1fTEVOX1NQTElUIDY0CiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi8KIAogc3RydWN0IHhkcF9pbmZvIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwpAQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50CiAKICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXykKIAotc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCkKJiM0MztzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQogewogCXNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFOwogCWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRTsKLQlzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7Ci0Jc3RydWN0IHhza191bWVtX2luZm8gKnVtZW07CiYjNDM7CXN0cnVjdCB4c2tfc29ja2V0X2luZm8geHNrID0ge307CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTsKIAlib29sIHpjX2F2YWlsID0gZmFsc2U7CiAJdm9pZCAqYnVmczsKIAlpbnQgcmV0OwpAQCAtMTMxLDMyICYjNDM7MTMxLDI0IEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJaWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRCkKIAkJZXhpdF93aXRoX2Vycm9yKGVycm5vKTsKIAotCXVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7Ci0JaWYgKCF1bWVtKSB7Ci0JCW11bm1hcChidWZzLCB1bWVtX3N6KTsKLQkJZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7Ci0JfQotCXVtZW0tJmd0O2ZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFOwotCXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7CiYjNDM7CXVtZW0ubW1hcF9zaXplID0gdW1lbV9zejsKJiM0MzsJdW1lbS5mcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqLCAmYW1wO3VtZW0sIGJ1ZnMsIHVtZW1fc3opOwogCWlmIChyZXQpCiAJCWV4aXRfd2l0aF9lcnJvcigtcmV0KTsKIAotCXhzayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHhza19zb2NrZXRfaW5mbykpOwotCWlmICgheHNrKQotCQlnb3RvIG91dDsKLQlpZm9iamVjdC0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7Ci0JaWZvYmplY3QtJmd0O3J4X29uID0gdHJ1ZTsKLQl4c2stJmd0O3J4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7CiYjNDM7CXhzay51bWVtX3JlZiA9IHRydWU7CiYjNDM7CiYjNDM7CWlmb2JqLSZndDtiaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTsKJiM0MzsJaWZvYmotJmd0O3J4X29uID0gdHJ1ZTsKJiM0MzsJeHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoJmFtcDt4c2ssICZhbXA7dW1lbSwgaWZvYmosIGZhbHNlKTsKIAlpZiAoIXJldCkKIAkJemNfYXZhaWwgPSB0cnVlOwogCi0JeHNrX3NvY2tldF9fZGVsZXRlKHhzay0mZ3Q7eHNrKTsKLQlmcmVlKHhzayk7Ci1vdXQ6Ci0JbXVubWFwKHVtZW0tJmd0O2J1ZmZlciwgdW1lbV9zeik7Ci0JeHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKLQlmcmVlKHVtZW0pOwomIzQzOwkvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqLwomIzQzOwl4c2tfZGVsZXRlX3NvY2tldCgmYW1wO3hzayk7CiYjNDM7CiAJcmV0dXJuIHpjX2F2YWlsOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDIwCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogQSBRdWljayBEZWNpc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FzZS4gVGhlc2UgYXJlICpzZWxmdGVzdHMqLCByaWdodD8gVGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlLCB0aGV5JiMzOTtyZSB1c2Vyc3BhY2UgdGVzdHMuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogZG9lcyB0aGUgcGF0Y2ggbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbD8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiBmb3IgZnV6emluZy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIG5vLCBzZWxmdGVzdHMgYXJlIHRlc3RzOyBzbywgdGhleSBkb24mIzM5O3QgKmRpcmVjdGx5KiBhbHRlciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBhZmZlY3RlZCBpbiB0aGlzIHBhdGNoLiBPa2F5LCBpdCYjMzk7cyBqdXN0IHRoZSBzZWxmdGVzdCBmaWxlczogYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gTm9wZSwgc3RpbGwgb25seSBzZWxmdGVzdHMuCgpMZXQgbWUgcmVmcmVzaCBteXNlbGYgb24gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY29uZGl0aW9ucy4gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuLi4gbm90aGluZyBpbiB0aGlzIGxpc3QgZXhwbGljaXRseSBtZW50aW9ucyAmIzM0O3NlbGZ0ZXN0cywmIzM0OyBidXQgdGhleSYjMzk7cmUgbm90ICprZXJuZWwqIGNvZGUuIFNvLCBhZ2FpbiwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbjogJiMzNDtkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkJiMzNDssIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICYjMzQ7bm8mIzM0Oy4gU2VsZnRlc3QgY2hhbmdlcyBhcmUgbm90IGtlcm5lbCBjaGFuZ2VzLgoKWWVwLCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNzoyODowNC43MDA3Mzc4MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTc0MzY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA0LjcwMDc0NDMxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQxOTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDc6Mjg6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi5hZTZhMDkxYjY0ODUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR1bWVtLVxcdTAwM2VidWZmZXIgPSBidWZmZXI7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMsIDEpO1xcbiBcXHRpZiAoaWZvYmotXFx1MDAzZXNoYXJlZF91bWVtIFxcdTAwMjZcXHUwMDI2IGlmb2JqLVxcdTAwM2VyeF9vbikge1xcbiBcXHRcXHR1bWVtLVxcdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xcbkBAIC0xNTQsNiArMTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eHNrLVxcdTAwM2V1bWVtID0gdW1lbTtcXG4gXFx0Y2ZnLnJ4X3NpemUgPSB4c2stXFx1MDAzZXJ4cXNpemU7XFxuQEAgLTE3MCw3ICsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFxuIFxcdHR4ciA9IGlmb2JqZWN0LVxcdTAwM2V0eF9vbiA/IFxcdTAwMjZ4c2stXFx1MDAzZXR4IDogTlVMTDtcXG4gXFx0cnhyID0gaWZvYmplY3QtXFx1MDAzZXJ4X29uID8gXFx1MDAyNnhzay1cXHUwMDNlcnggOiBOVUxMO1xcbi1cXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0cmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24ndCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90XFxuK1xcdFxcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XFxuK1xcdFxcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlcidzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXRcXG4rXFx0XFx0ICogdmlhIHVtZW1fcmVmLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0XFx0eHNrLVxcdTAwM2V1bWVtID0gTlVMTDtcXG4rXFx0XFx0eHNrLVxcdTAwM2V4c2sgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2hhcmVkKSB7XFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpO1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuQEAgLTIwMyw2ICsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcXG4ge1xcbitcXHQvKlxcbitcXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXFxuK1xcdCAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGxcXG4rXFx0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXFxuK1xcdCAqL1xcbitcXHRib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtXFx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHUzMiBpLCBqO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpKyspIHtcXG5AQCAtMjE0LDYgKzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xcbiBcXHRcXHRpZm9iai1cXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2V2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMO1xcbitcXHRcXHRpZm9iai1cXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0aWYgKGkgPT0gMCkge1xcbkBAIC01NzQsMjYgKzYwMiwxMjEgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXG4gc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIHtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghdHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCB1MzIgc2hvcnRfbGVuLCB1MzIgbG9uZ19sZW4pXFxuK3tcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcXG4gXFx0dTMyIGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xcbitcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiB0b3RhbF9wa3RzLCB1MzIgcGt0X2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHUzMiBpLCBwa3RzX3NvY2swO1xcbitcXG4rXFx0aWYgKHRlc3QtXFx1MDAzZW5iX3NvY2tldHMgXFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXFx1MDAzYyA0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dTMyIG5iX3BrdHMgPSAoaSA9PSAwKSA/IHBrdHNfc29jazAgOiAodG90YWxfcGt0cyAtIHBrdHNfc29jazApO1xcbitcXG4rXFx0XFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG5AQCAtMTQ2Nyw2ICsxNTkwLDE3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfdHhfaW52YWxpZF9kZXNjcyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxcbiBcXHRyZXR1cm4gVEVTVF9QQVNTO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAoIWlmb2JqZWN0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSBjb3VudDsgaSBcXHUwMDNlIDA7IGktLSlcXG4rXFx0XFx0eHNrX2RlbGV0ZV9zb2NrZXQoXFx1MDAyNmlmb2JqZWN0LVxcdTAwM2V4c2tfYXJyW2kgLSAxXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxcbiB7XFxuQEAgLTE1OTksNiArMTczMyw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cXG4rXFx0aWZvYmplY3QtXFx1MDAzZXhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbiBcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xNjY5LDEyICsxODA1LDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRlc3QtXFx1MDAzZWZhaWwgPSB0cnVlO1xcbitcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyKVxcbiBcXHRcXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcXHUwMDI2YmFycik7XFxuIFxcbiBcXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gXFx0XFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzAxLDEyICsxODQwLDYxIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxcbiB7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXFx1MDAzZXhzay1cXHUwMDNldW1lbTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XFxuK1xcbitcXHRpZiAoIXhzaylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4tXFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0dW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFx0aWYgKCF1bWVtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoeHNrLVxcdTAwM2V4c2spXFxuK1xcdFxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuK1xcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4rXFxuK1xcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXFxuK1xcdGlmICgheHNrLVxcdTAwM2V1bWVtX3JlZikge1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzKSkge1xcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNldW1lbSkge1xcbitcXHRcXHRcXHRpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcInhza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBlcnIpO1xcbitcXHRcXHRcXHRcXHQvKiBLZWVwIG93bmVyc2hpcCBleHBsaWNpdCBzbyBhIGxhdGVyIGNsZWFudXAgcGFzcyBjYW4gcmV0cnlcXG4rXFx0XFx0XFx0XFx0ICogZGVsZXRlLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2VycywgMSk7XFxuK1xcdFxcdFxcdFxcdHhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSB1bWVtO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVtZW0tXFx1MDAzZWJ1ZmZlciBcXHUwMDI2XFx1MDAyNiB1bWVtLVxcdTAwM2VtbWFwX3NpemUpIHtcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4re1xcbitcXHRpZiAoIWlmb2JqKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC1cXHUwMDNlbmJfc29ja2V0cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG5AQCAtMTc2OCwyNyArMTk1Niw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4te1xcbi1cXHR1MzIgaTtcXG4tXFxuLVxcdGlmICghaWZvYmogfHwgIXRlc3QpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspXFxuLVxcdFxcdHhza19zb2NrZXRfX2RlbGV0ZShpZm9iai1cXHUwMDNleHNrX2FycltpXS54c2spO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcXG4te1xcbi1cXHRpZiAoIWlmb2JqMSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xcbi1cXHRpZiAoaWZvYmoyIFxcdTAwMjZcXHUwMDI2ICFpZm9iajItXFx1MDAzZXNoYXJlZF91bWVtKVxcbi1cXHRcXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbiB7XFxuQEAgLTE4NDAsMTMgKzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0XFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFxcdTAwMjZiYXJyKSkge1xcbiBcXHRcXHRcXHR0ZXN0LVxcdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xcbiBcXHRcXHRcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbi1cXHRcXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcXG4rXFx0XFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpZm9iajIpIHtcXG4rXFx0aWYgKGlmb2JqMiBcXHUwMDI2XFx1MDAyNiAhdGVzdC1cXHUwMDNlZmFpbCkge1xcbiBcXHRcXHQvKlNwYXduIFRYIHRocmVhZCAqL1xcbiBcXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dDEsIE5VTEwsIGlmb2JqMi1cXHUwMDNlZnVuY19wdHIsIHRlc3QpO1xcbiBcXHRcXHRwdGhyZWFkX2pvaW4odDEsIE5VTEwpO1xcbkBAIC0xODU1LDkgKzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxcbiBcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXFx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVxcdTAwM2VmYWlsKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xcbi1cXHRcXHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh0ZXN0LVxcdTAwM2VmYWlsKVxcbkBAIC0xOTY2LDkgKzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcbiBcXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMjYsNiArMjM5MCwxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNlIE1BWF9TT0NLRVRTKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcXFxuXFxcIiwgX19mdW5jX18sIHRlc3QtXFx1MDAzZW5iX3NvY2tldHMpO1xcbitcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdGlmICghdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxcbitcXHRcXHQgICAgIXRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBbJXNdIG1pc3Npbmcgc3RyZWFtIGZvciBzb2NrZXQgJXVcXFxcblxcXCIsIF9fZnVuY19fLCBpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0KHZvaWQpY3R4O1xcbitcXG4rXFx0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVxcdTAwM2VzaG9ydF9sZW4sIGNmZy1cXHUwMDNlbG9uZ19sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xcbitcXG4rXFx0cmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGNmZy1cXHUwMDNldG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0IGNmZy1cXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1fMCwgKnJ4X3N0cmVhbV8xO1xcbitcXG4rXFx0KHZvaWQpY3R4O1xcbitcXG4rXFx0dHhfc3RyZWFtXzAgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xcbitcXHR0eF9zdHJlYW1fMSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XFxuK1xcdHJ4X3N0cmVhbV8wID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcXG4rXFx0cnhfc3RyZWFtXzEgPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xcbitcXG4rXFx0aWYgKHR4X3N0cmVhbV8xLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzIFxcdTAwM2M9IHR4X3N0cmVhbV8wLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzKVxcbitcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbitcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcnhfc3RyZWFtXzEtXFx1MDAzZW5iX3J4X3BrdHMgXFx1MDAzYz0gcnhfc3RyZWFtXzAtXFx1MDAzZW5iX3J4X3BrdHMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHJ4X3N0cmVhbV8xLVxcdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cXHUwMDNlbmJfcnhfcGt0cyk7XFxuK1xcdFxcdHJldCA9IFRFU1RfRkFJTFVSRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcXG4rXFx0XFx0XFx0XFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcXG4rXFx0dGVzdC1cXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xcbitcXG4rXFx0cmV0ID0gc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHRlc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuK1xcdGlmIChwb3N0X2ZuKVxcbitcXHRcXHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcXG4rXFxuK1xcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7XFxuK1xcdFxcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXFxuK1xcdFxcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgIE5VTEwsIFxcdTAwMjZsZW5fY3R4KTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB1bmV2ZW5fZGlzdF9jdHggPSB7XFxuK1xcdFxcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcXG4rXFx0XFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFxcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LVxcdTAwM2VpZm9ial90eCBcXHUwMDI2XFx1MDAyNiB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrID9cXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhzay1cXHUwMDNldW1lbSA6IE5VTEw7XFxuK1xcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfcnggXFx1MDAyNlxcdTAwMjYgdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzayA/XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZXVtZW0gOiBOVUxMO1xcbitcXHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xcbitcXHRib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XFxuK1xcbitcXHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAodHhfdW1lbSlcXG4rXFx0XFx0dHhfdW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XFxuK1xcdGlmIChyeF91bWVtKVxcbitcXHRcXHRyeF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA9IHJ4X3VuYWxpZ25lZDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIHtcXG4gXFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2VzaGFyZWRfdW1lbTtcXG5AQCAtMjUwNiw5ICsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrLVxcdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xcbiBcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xcbiBcXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl94ZHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4va3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4c2suaFxcXCJcXG5AQCAtNzksNiArODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xcbiB0eXBlZGVmIGludCAoKnZhbGlkYXRpb25fZnVuY190KShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKTtcXG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XFxuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcXG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICpjdHgpO1xcbiBcXG4gc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xcbkBAIC05Myw2ICs5Nyw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xcbiBcXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcXG4gXFx0dTggc3JjX21hY1tFVEhfQUxFTl07XFxuIFxcdGJvb2wgY2hlY2tfY29uc3VtZXI7XFxuK1xcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xcbiB9O1xcbiBcXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG5AQCAtMTA0LDYgKzEwOSw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHtcXG4gXFx0c3RydWN0IHhza191bWVtICp1bWVtO1xcbiBcXHR1NjQgbmV4dF9idWZmZXI7XFxuIFxcdHU2NCBtbWFwX3NpemU7XFxuK1xcdHJlZmNvdW50X3QgdXNlcnM7XFxuIFxcdHUzMiBudW1fZnJhbWVzO1xcbiBcXHR1MzIgZnJhbWVfaGVhZHJvb207XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG5AQCAtMTU5LDcgKzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcXG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XFxuLVxcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XFxuIFxcbiBzdHJ1Y3QgcGt0IHtcXG4gXFx0aW50IG9mZnNldDtcXG5AQCAtMTc5LDYgKzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XFxuIFxcdGJvb2wgdmVyYmF0aW07XFxuIH07XFxuIFxcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XFxuK1xcdHUzMiBzaG9ydF9sZW47XFxuK1xcdHUzMiBsb25nX2xlbjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xcbitcXHR1MzIgdG90YWxfcGt0cztcXG4rXFx0dTMyIHBrdF9sZW47XFxuK307XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucylcXG4ge1xcbiBcXHRyZXR1cm4gb3B0aW9ucyBcXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XFxuQEAgLTI2OCw2ICsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIFxcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xcbkBAIC0yOTEsNiArMzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfUFJPR19DTEVBTlVQXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfRFJPUF9IQUxGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX1NIQVJFRF9VTUVNXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1xcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9VTkFMSUdORURcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX01FVEFEQVRBX0NPUFlcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYn0sXFxuIFxcdHsubmFtZSA9IFxcXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG5pbmRleCAwMjNkOGJlZmQ0Y2FiLi44YmFiMmJjZjUyYWIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuQEAgLTEwLDcgKzEwLDcgQEBcXG4gXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG4tXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XFxuIFxcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKGludCkpO1xcbiBcXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xcbiB9IHhzayBTRUMoXFxcIi5tYXBzXFxcIik7XFxuQEAgLTc1LDYgKzc1LDE5IEBAIFNFQyhcXFwieGRwXFxcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCBpZHgsIFhEUF9EUk9QKTtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XFxuK1xcbitcXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXFxuK1xcdGlmIChwa3RfbGVuIFxcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMCwgWERQX0RST1ApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcXG4rfVxcbitcXG4gU0VDKFxcXCJ4ZHAuZnJhZ3NcXFwiKSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIHtcXG4gXFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG5pbmRleCA0NTgxMGZmNTUyZGFlLi5iZDliNWRjZjhjOGVlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG5AQCAtMyw3ICszLDggQEBcXG4gI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IX1xcbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXFxuIFxcbi0jZGVmaW5lIE1BWF9TT0NLRVRTIDJcXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XFxuKyNkZWZpbmUgU0hBUkVEX1VNRU1fTEVOX1NQTElUIDY0XFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovXFxuIFxcbiBzdHJ1Y3QgeGRwX2luZm8ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcXG4gXFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcXG4gXFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuK3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHtcXG4gXFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XFxuIFxcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRTtcXG4tXFx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xcbi1cXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcXG4rXFx0c3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xcbiBcXHRib29sIHpjX2F2YWlsID0gZmFsc2U7XFxuIFxcdHZvaWQgKmJ1ZnM7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEzMSwzMiArMTMxLDI0IEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XFxuIFxcbi1cXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xcbi1cXHRpZiAoIXVtZW0pIHtcXG4tXFx0XFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xcbi1cXHRcXHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcXG4tXFx0fVxcbi1cXHR1bWVtLVxcdTAwM2VmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4rXFx0dW1lbS5tbWFwX3NpemUgPSB1bWVtX3N6O1xcbitcXHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xcbitcXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFxcdTAwMjZ1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbiBcXG4tXFx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XFxuLVxcdGlmICgheHNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWZvYmplY3QtXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbi1cXHR4c2stXFx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpO1xcbitcXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xcbitcXG4rXFx0aWZvYmotXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbitcXHRpZm9iai1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbitcXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xcbitcXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcXHUwMDI2eHNrLCBcXHUwMDI2dW1lbSwgaWZvYmosIGZhbHNlKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHpjX2F2YWlsID0gdHJ1ZTtcXG4gXFxuLVxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuLVxcdGZyZWUoeHNrKTtcXG4tb3V0Olxcbi1cXHRtdW5tYXAodW1lbS1cXHUwMDNlYnVmZmVyLCB1bWVtX3N6KTtcXG4tXFx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4tXFx0ZnJlZSh1bWVtKTtcXG4rXFx0LyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi9cXG4rXFx0eHNrX2RlbGV0ZV9zb2NrZXQoXFx1MDAyNnhzayk7XFxuK1xcbiBcXHRyZXR1cm4gemNfYXZhaWw7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA2LjMxNDk5OTcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyMDE0NzExMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNzoyODowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi5hZTZhMDkxYjY0ODUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR1bWVtLVx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcbitcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgKzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbitcdGludCByZXQ7XG4gXG4gXHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4gXHRjZmcucnhfc2l6ZSA9IHhzay1cdTAwM2VyeHFzaXplO1xuQEAgLTE3MCw3ICsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuK1x0aWYgKHJldCkge1xuK1x0XHQvKlxuK1x0XHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24ndCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90XG4rXHRcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XG4rXHRcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlcidzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXRcbitcdFx0ICogdmlhIHVtZW1fcmVmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNoYXJlZClcbitcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHNoYXJlZCkge1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4rXHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiArMjI0LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4rXHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4rXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbitcdCAqL1xuK1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xuQEAgLTIxNCw2ICsyNDEsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbitcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgKzYwMiwxMjEgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuK1xuIFx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbiBcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiB0b3RhbF9wa3RzLCB1MzIgcGt0X2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0dTMyIGksIHBrdHNfc29jazA7XG4rXG4rXHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXHUwMDNjIDQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0dTMyIG5iX3BrdHMgPSAoaSA9PSAwKSA/IHBrdHNfc29jazAgOiAodG90YWxfcGt0cyAtIHBrdHNfc29jazApO1xuK1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNDY3LDYgKzE1OTAsMTcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXR1cm4gVEVTVF9QQVNTO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHRpZiAoIWlmb2JqZWN0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSBjb3VudDsgaSBcdTAwM2UgMDsgaS0tKVxuK1x0XHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2kgLSAxXSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxuIFx0XHRcdCAgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIGJvb2wgdHgpXG4ge1xuQEAgLTE1OTksNiArMTczMyw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbitcdGlmb2JqZWN0LVx1MDAzZXhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4gXG4gXHRyZXQgPSB4c2tfY29uZmlndXJlKHRlc3QsIGlmb2JqZWN0LCB1bWVtLCBmYWxzZSk7XG4gXHRpZiAocmV0KVxuQEAgLTE2NjksMTIgKzE4MDUsMTUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcbiBcdH1cbiBcbitcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuK1x0aWYgKGVycilcbitcdFx0dGVzdC1cdTAwM2VmYWlsID0gdHJ1ZTtcbitcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiArMTg0MCw2MSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iailcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaylcbiB7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLVx1MDAzZXhzay1cdTAwM2V1bWVtO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXG4rXHRpZiAoIXhzaylcbitcdFx0cmV0dXJuO1xuIFxuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4rXHR1bWVtID0geHNrLVx1MDAzZXVtZW07XG4rXHRpZiAoIXVtZW0pXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh4c2stXHUwMDNleHNrKVxuK1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4rXHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcbitcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4rXHRpZiAoIXhzay1cdTAwM2V1bWVtX3JlZikge1xuK1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbitcdFx0aWYgKHVtZW0tXHUwMDNldW1lbSkge1xuK1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4rXG4rXHRcdFx0aWYgKGVycikge1xuK1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCJ4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgICBlcnIpO1xuK1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4rXHRcdFx0XHQgKiBkZWxldGUuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbitcdFx0XHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4rXHRcdFx0XHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0aWYgKHVtZW0tXHUwMDNlYnVmZmVyIFx1MDAyNlx1MDAyNiB1bWVtLVx1MDAzZW1tYXBfc2l6ZSkge1xuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbitcdFx0XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG4rXHRcdH1cbitcdH1cbitcbitcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuK1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4re1xuK1x0aWYgKCFpZm9iailcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goaWZvYmosIHRlc3QtXHUwMDNlbmJfc29ja2V0cyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNzY4LDI3ICsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbi17XG4tXHR1MzIgaTtcbi1cbi1cdGlmICghaWZvYmogfHwgIXRlc3QpXG4tXHRcdHJldHVybjtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKVxuLVx0XHR4c2tfc29ja2V0X19kZWxldGUoaWZvYmotXHUwMDNleHNrX2FycltpXS54c2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbi17XG4tXHRpZiAoIWlmb2JqMSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xuLVx0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIWlmb2JqMi1cdTAwM2VzaGFyZWRfdW1lbSlcbi1cdFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4ge1xuQEAgLTE4NDAsMTMgKzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbitcdFx0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4gXHRcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGlmb2JqMikge1xuK1x0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIXRlc3QtXHUwMDNlZmFpbCkge1xuIFx0XHQvKlNwYXduIFRYIHRocmVhZCAqL1xuIFx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVx1MDAzZWZ1bmNfcHRyLCB0ZXN0KTtcbiBcdFx0cHRocmVhZF9qb2luKHQxLCBOVUxMKTtcbkBAIC0xODU1LDkgKzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbiBcbiBcdGlmICh0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXHUwMDNlZmFpbCkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbitcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY2LDkgKzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG4gXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNiw2ICsyMzkwLDE2OCBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzZSBNQVhfU09DS0VUUykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxuXCIsIF9fZnVuY19fLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuK1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKCF0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxuK1x0XHQgICAgIXRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxuXCIsIF9fZnVuY19fLCBpKTtcbitcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0KHZvaWQpY3R4O1xuK1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVx1MDAzZXNob3J0X2xlbiwgY2ZnLVx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbitcdFx0XHRcdFx0IGNmZy1cdTAwM2Vwa3RfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1fMCwgKnJ4X3N0cmVhbV8xO1xuK1xuK1x0KHZvaWQpY3R4O1xuK1xuK1x0dHhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbitcdHR4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4rXHRyeF9zdHJlYW1fMCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xuK1x0cnhfc3RyZWFtXzEgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcbitcbitcdGlmICh0eF9zdHJlYW1fMS1cdTAwM2VuYl92YWxpZF9lbnRyaWVzIFx1MDAzYz0gdHhfc3RyZWFtXzAtXHUwMDNlbmJfdmFsaWRfZW50cmllcylcbitcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzIFx1MDAzYz0gcnhfc3RyZWFtXzAtXHUwMDNlbmJfcnhfcGt0cykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcblwiLFxuK1x0XHRcdCAgICAgICByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKTtcbitcdFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxuK1x0XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxuK1x0XHRcdFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxuK1x0XHRcdFx0Y29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHR0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcbitcdHRlc3QtXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XG4rXG4rXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xuK1xuK1x0cmV0ID0gc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHRlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbitcdGlmIChwb3N0X2ZuKVxuK1x0XHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcbitcbitcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbitcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuK1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4rXHRcdFx0XHQgICAgTlVMTCwgXHUwMDI2bGVuX2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbitcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuK1x0XHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4rXHRcdFx0XHQgICAgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdCwgXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrID9cbitcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqcnhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfcnggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrID9cbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4rXHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4rXHRib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XG4rXG4rXHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssXG4rXHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHR4X3VtZW0pXG4rXHRcdHR4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XG4rXHRpZiAocnhfdW1lbSlcbitcdFx0cnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHJ4X3VuYWxpZ25lZDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjUwNiw5ICsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL2tzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbkBAIC03OSw2ICs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9zZXFfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxuK1x0XHRcdFx0XHQgICBjb25zdCB2b2lkICpjdHgpO1xuIFxuIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XG5AQCAtOTMsNiArOTcsNyBAQCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHU4IGRzdF9tYWNbRVRIX0FMRU5dO1xuIFx0dTggc3JjX21hY1tFVEhfQUxFTl07XG4gXHRib29sIGNoZWNrX2NvbnN1bWVyO1xuK1x0Ym9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovXG4gfTtcbiBcbiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spO1xuQEAgLTEwNCw2ICsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuK1x0cmVmY291bnRfdCB1c2VycztcbiBcdHUzMiBudW1fZnJhbWVzO1xuIFx0dTMyIGZyYW1lX2hlYWRyb29tO1xuIFx0dm9pZCAqYnVmZmVyO1xuQEAgLTE1OSw3ICsxNjUsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuLVxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgKzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XG4gXHRib29sIHZlcmJhdGltO1xuIH07XG4gXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xuK1x0dTMyIHNob3J0X2xlbjtcbitcdHUzMiBsb25nX2xlbjtcbit9O1xuK1xuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xuK1x0dTMyIHRvdGFsX3BrdHM7XG4rXHR1MzIgcGt0X2xlbjtcbit9O1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxuIHtcbiBcdHJldHVybiBvcHRpb25zIFx1MDAyNiBYRFBfUEtUX0NPTlREO1xuQEAgLTI2OCw2ICsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XG5AQCAtMjkxLDYgKzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xuIFx0ey5uYW1lID0gXCJYRFBfUFJPR19DTEVBTlVQXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxuIFx0ey5uYW1lID0gXCJYRFBfRFJPUF9IQUxGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwiWERQX1NIQVJFRF9VTUVNXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1wiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkFMSUdORURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG5AQCAtMTAsNyArMTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcbiBcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XG4gfSB4c2sgU0VDKFwiLm1hcHNcIik7XG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuK1NFQyhcInhkcFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbitcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XG4rXG4rXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4rXHRpZiAocGt0X2xlbiBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xuK31cbitcbiBTRUMoXCJ4ZHAuZnJhZ3NcIikgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgKzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcbiBcbiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbitzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzEsMjQgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4tXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbitcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4rXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4rXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuK1xuK1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4rXHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4rXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xuK1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCBcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbitcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4rXHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZ4c2spO1xuK1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA2LjMxNTAwMTA1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDE0NDgyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBBIFF1aWNrIERlY2lzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQncyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBUaGVzZSBhcmUgKnNlbGZ0ZXN0cyosIHJpZ2h0PyBUaGV5J3JlIG5vdCBrZXJuZWwgY29kZSwgdGhleSdyZSB1c2Vyc3BhY2UgdGVzdHMuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogZG9lcyB0aGUgcGF0Y2ggbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbD8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiBmb3IgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgbm8sIHNlbGZ0ZXN0cyBhcmUgdGVzdHM7IHNvLCB0aGV5IGRvbid0ICpkaXJlY3RseSogYWx0ZXIga2VybmVsIGZ1bmN0aW9uYWxpdHkuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZmlsZXMgYWZmZWN0ZWQgaW4gdGhpcyBwYXRjaC4gT2theSwgaXQncyBqdXN0IHRoZSBzZWxmdGVzdCBmaWxlczogYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gTm9wZSwgc3RpbGwgb25seSBzZWxmdGVzdHMuXG5cbkxldCBtZSByZWZyZXNoIG15c2VsZiBvbiB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjb25kaXRpb25zLiBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocy4uLiBub3RoaW5nIGluIHRoaXMgbGlzdCBleHBsaWNpdGx5IG1lbnRpb25zIFwic2VsZnRlc3RzLFwiIGJ1dCB0aGV5J3JlIG5vdCAqa2VybmVsKiBjb2RlLiBTbywgYWdhaW4sIGJhc2VkIG9uIHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbjogXCJkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkXCIsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIFwibm9cIi4gU2VsZnRlc3QgY2hhbmdlcyBhcmUgbm90IGtlcm5lbCBjaGFuZ2VzLlxuXG5ZZXAsIEknbSBjb25maWRlbnQuIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIERvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDc6Mjg6MTUuNTE2NDUyMjM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNzoyODoxNS41MTY0NzI0MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbkl5b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 06:43:23 +0000 UTC FinishedAt: 2026-08-13 07:28:16 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNzoyODowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDU0OTM1OGNjOGMyMS4uYWU2YTA5MWI2NDg1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWRcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHVtZW0tXHUwMDNlYnVmZmVyID0gYnVmZmVyO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgJiM0MzsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjtcbiBcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiBcdGNmZy5yeF9zaXplID0geHNrLVx1MDAzZXJ4cXNpemU7XG5AQCAtMTcwLDcgJiM0MzsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJiMzOTt0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3RcbiYjNDM7XHRcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XG4mIzQzO1x0XHQgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXImIzM5O3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdFxuJiM0MztcdFx0ICogdmlhIHVtZW1fcmVmLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2hhcmVkKVxuJiM0MztcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHR4c2stXHUwMDNleHNrID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2hhcmVkKSB7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4mIzQzO1x0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG5AQCAtMjAzLDYgJiM0MzsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfcngpXG4ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LFxuJiM0MztcdCAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGxcbiYjNDM7XHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cdTAwM2VpZmluZGV4O1xuIFx0dTMyIGksIGo7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfSU5URVJGQUNFUzsgaSYjNDM7JiM0MzspIHtcbkBAIC0yMTQsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcbiBcdFx0aWZvYmotXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXJlbGVhc2VfcnggPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2V2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMO1xuJiM0MztcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgJiM0Mzs2MDIsMTIxIEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiB7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbiYjNDM7XHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuJiM0MztcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbi1cdFx0cGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuLVx0XHRcdFx0XHRcdCAgIHBrdF9zdHJlYW0tXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xuLVx0XHRpZiAoIXBrdF9zdHJlYW0pXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsIHUzMiBwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4mIzQzO1x0dTMyIGksIHBrdHNfc29jazA7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwa3RzX3NvY2swID0gdG90YWxfcGt0cyAvIDQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBuYl9wa3RzID0gKGkgPT0gMCkgPyBwa3RzX3NvY2swIDogKHRvdGFsX3BrdHMgLSBwa3RzX3NvY2swKTtcbiYjNDM7XG4mIzQzO1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTQ2Nyw2ICYjNDM7MTU5MCwxNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3R4X2ludmFsaWRfZGVzY3Moc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldHVybiBURVNUX1BBU1M7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZm9iamVjdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gY291bnQ7IGkgXHUwMDNlIDA7IGktLSlcbiYjNDM7XHRcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqZWN0LVx1MDAzZXhza19hcnJbaSAtIDFdKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNTk5LDYgJiM0MzsxNzMzLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbiYjNDM7XHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICYjNDM7MTgwNSwxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVycikpO1xuIFx0fVxuIFxuJiM0MztcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuJiM0MztcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiAmIzQzOzE4NDAsNjEgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4mIzQzO1xuJiM0MztcdGlmICgheHNrKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4mIzQzO1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcdGlmICghdW1lbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4mIzQzO1x0aWYgKCF4c2stXHUwMDNldW1lbV9yZWYpIHtcbiYjNDM7XHRcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZXVtZW0pIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4mIzQzO1x0XHRcdFx0ICogZGVsZXRlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiYjNDM7XHRcdFx0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0dW1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZWJ1ZmZlciBcdTAwMjZcdTAwMjYgdW1lbS1cdTAwM2VtbWFwX3NpemUpIHtcbiYjNDM7XHRcdFx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbiYjNDM7XHRcdFx0dW1lbS1cdTAwM2VtbWFwX3NpemUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHNrLVx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XG4mIzQzO1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlmb2JqKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC1cdTAwM2VuYl9zb2NrZXRzKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE3NjgsMjcgJiM0MzsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbi17XG4tXHR1MzIgaTtcbi1cbi1cdGlmICghaWZvYmogfHwgIXRlc3QpXG4tXHRcdHJldHVybjtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspXG4tXHRcdHhza19zb2NrZXRfX2RlbGV0ZShpZm9iai1cdTAwM2V4c2tfYXJyW2ldLnhzayk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuLXtcbi1cdGlmICghaWZvYmoxKVxuLVx0XHRyZXR1cm47XG4tXG4tXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XG4tXHRpZiAoaWZvYmoyIFx1MDAyNlx1MDAyNiAhaWZvYmoyLVx1MDAzZXNoYXJlZF91bWVtKVxuLVx0XHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbiB7XG5AQCAtMTg0MCwxMyAmIzQzOzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbiYjNDM7XHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpZm9iajIpIHtcbiYjNDM7XHRpZiAoaWZvYmoyIFx1MDAyNlx1MDAyNiAhdGVzdC1cdTAwM2VmYWlsKSB7XG4gXHRcdC8qU3Bhd24gVFggdGhyZWFkICovXG4gXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnQxLCBOVUxMLCBpZm9iajItXHUwMDNlZnVuY19wdHIsIHRlc3QpO1xuIFx0XHRwdGhyZWFkX2pvaW4odDEsIE5VTEwpO1xuQEAgLTE4NTUsOSAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbiBcbiBcdGlmICh0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXHUwMDNlZmFpbCkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4gXHR9XG4gXG4gXHRpZiAodGVzdC1cdTAwM2VmYWlsKVxuQEAgLTE5NjYsOSAmIzQzOzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG4gXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbkBAIC0yMjI2LDYgJiM0MzsyMzkwLDE2OCBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNlIE1BWF9TT0NLRVRTKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcblwmIzM0OywgX19mdW5jX18sIHRlc3QtXHUwMDNlbmJfc29ja2V0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCF0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxuJiM0MztcdFx0ICAgICF0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgaSk7XG4mIzQzO1x0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQodm9pZCljdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjZmctXHUwMDNlc2hvcnRfbGVuLCBjZmctXHUwMDNlbG9uZ19sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbiYjNDM7XHRcdFx0XHRcdCBjZmctXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcbiYjNDM7XHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtXzAsICpyeF9zdHJlYW1fMTtcbiYjNDM7XG4mIzQzO1x0KHZvaWQpY3R4O1xuJiM0MztcbiYjNDM7XHR0eF9zdHJlYW1fMCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xuJiM0MztcdHR4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4mIzQzO1x0cnhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbiYjNDM7XHRyeF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfc3RyZWFtXzEtXHUwMDNlbmJfdmFsaWRfZW50cmllcyBcdTAwM2M9IHR4X3N0cmVhbV8wLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cyBcdTAwM2M9IHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHJ4X3N0cmVhbV8xLVx1MDAzZW5iX3J4X3BrdHMsIHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpO1xuJiM0MztcdFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGJwZl9tYXAgKnhza21hcF90eCwgdTMyIG5iX3NvY2tldHMsXG4mIzQzO1x0XHRcdFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHRlc3QtXHUwMDNldG90YWxfc3RlcHMgPSAxO1xuJiM0MztcdHRlc3QtXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XG4mIzQzO1xuJiM0MztcdHRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZSh0ZXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiYjNDM7XHRpZiAocG9zdF9mbilcbiYjNDM7XHRcdHJldCA9IHBvc3RfZm4odGVzdCwgcmV0LCBjdHgpO1xuJiM0MztcbiYjNDM7XHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0ge1xuJiM0MztcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbiYjNDM7XHRcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwsIFx1MDAyNmxlbl9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0ge1xuJiM0MztcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuJiM0MztcdFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4mIzQzO1x0XHRcdFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp0eF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial90eCBcdTAwMjZcdTAwMjYgdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2sgP1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzayA/XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2V1bWVtIDogTlVMTDtcbiYjNDM7XHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4mIzQzO1x0Ym9vbCByeF91bmFsaWduZWQgPSByeF91bWVtID8gcnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHRlc3Rfc3BlY19zZXRfdW5hbGlnbmVkKHRlc3QpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuJiM0MztcdFx0XHRcdCAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGlmICh0eF91bWVtKVxuJiM0MztcdFx0dHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHR4X3VuYWxpZ25lZDtcbiYjNDM7XHRpZiAocnhfdW1lbSlcbiYjNDM7XHRcdHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSByeF91bmFsaWduZWQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiB7XG4gXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VzaGFyZWRfdW1lbTtcbkBAIC0yNTA2LDkgJiM0MzsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uOTNkY2Y2NmI0ZTYyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4c2suaFwmIzM0O1xuQEAgLTc5LDYgJiM0Mzs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuJiM0Mzt0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3Bvc3RfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCB2b2lkICpjdHgpO1xuIFxuIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XG5AQCAtOTMsNiAmIzQzOzk3LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XG4gXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcbiBcdHU4IHNyY19tYWNbRVRIX0FMRU5dO1xuIFx0Ym9vbCBjaGVja19jb25zdW1lcjtcbiYjNDM7XHRib29sIHVtZW1fcmVmOyAvKiB0cnVlIGlmIHRoaXMgc2xvdCBob2xkcyBhIGNvdW50ZWQgVU1FTSByZWZlcmVuY2UgKi9cbiB9O1xuIFxuIGludCBraWNrX3J4KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XG5AQCAtMTA0LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuJiM0MztcdHJlZmNvdW50X3QgdXNlcnM7XG4gXHR1MzIgbnVtX2ZyYW1lcztcbiBcdHUzMiBmcmFtZV9oZWFkcm9vbTtcbiBcdHZvaWQgKmJ1ZmZlcjtcbkBAIC0xNTksNyAmIzQzOzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xuIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQgKmJ1ZmZlciwgdTY0IHNpemUpO1xuIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLFxuIFx0XHRcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XG4tXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4mIzQzO1x0aWYgKHBrdF9sZW4gXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4mIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNFxuJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50XG4gXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxuIFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4mIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTtcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMSwyNCBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbi1cdHVtZW0tXHUwMDNlZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuJiM0MztcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbiYjNDM7XHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuJiM0MztcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXHUwMDI2dW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbiYjNDM7XHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZm9iai1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbiYjNDM7XHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4mIzQzO1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcdTAwMjZ4c2ssIFx1MDAyNnVtZW0sIGlmb2JqLCBmYWxzZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0emNfYXZhaWwgPSB0cnVlO1xuIFxuLVx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuLVx0ZnJlZSh4c2spO1xuLW91dDpcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRmcmVlKHVtZW0pO1xuJiM0MztcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4mIzQzO1x0eHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbiYjNDM7XG4gXHRyZXR1cm4gemNfYXZhaWw7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTliMDM1NWVlOTljZDFhNTQwNjRlZDcwMDJmYjMwZGEzNDI0ZTQwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA3OjI4OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDU0OTM1OGNjOGMyMS4uYWU2YTA5MWI2NDg1MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQKIAkJcmV0dXJuIHJldDsKIAogCXVtZW0tJmd0O2J1ZmZlciA9IGJ1ZmZlcjsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dW1lbS0mZ3Q7dXNlcnMsIDEpOwogCWlmIChpZm9iai0mZ3Q7c2hhcmVkX3VtZW0gJmFtcDsmYW1wOyBpZm9iai0mZ3Q7cnhfb24pIHsKIAkJdW1lbS0mZ3Q7YmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pOwogCQl1bWVtLSZndDtuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTsKQEAgLTE1NCw2ICYjNDM7MTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0KIAlzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307CiAJc3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjsKIAlzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyOwomIzQzOwlpbnQgcmV0OwogCiAJeHNrLSZndDt1bWVtID0gdW1lbTsKIAljZmcucnhfc2l6ZSA9IHhzay0mZ3Q7cnhxc2l6ZTsKQEAgLTE3MCw3ICYjNDM7MTcyLDI2IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAKIAl0eHIgPSBpZm9iamVjdC0mZ3Q7dHhfb24gPyAmYW1wO3hzay0mZ3Q7dHggOiBOVUxMOwogCXJ4ciA9IGlmb2JqZWN0LSZndDtyeF9vbiA/ICZhbXA7eHNrLSZndDtyeCA6IE5VTEw7Ci0JcmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJcmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKCZhbXA7eHNrLSZndDt4c2ssIGlmb2JqZWN0LSZndDtpZmluZGV4LCAwLCB1bWVtLSZndDt1bWVtLCByeHIsIHR4ciwgJmFtcDtjZmcpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQkvKgomIzQzOwkJICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJiMzOTt0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3QKJiM0MzsJCSAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5CiYjNDM7CQkgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXImIzM5O3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdAomIzQzOwkJICogdmlhIHVtZW1fcmVmLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2hhcmVkKQomIzQzOwkJCXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQl4c2stJmd0O3hzayA9IE5VTEw7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGFyZWQpIHsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO3VtZW0tJmd0O3VzZXJzKTsKJiM0MzsJCXhzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X3Jpbmdfc2l6ZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQpAQCAtMjAzLDYgJiM0MzsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQogc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LAogCQkJICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KQogewomIzQzOwkvKgomIzQzOwkgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsCiYjNDM7CSAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGwKJiM0MzsJICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuCiYjNDM7CSAqLwomIzQzOwlib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtJmd0O2lmaW5kZXggPT0gaWZvYmpfcngtJmd0O2lmaW5kZXg7CiAJdTMyIGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTUFYX0lOVEVSRkFDRVM7IGkmIzQzOyYjNDM7KSB7CkBAIC0yMTQsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJaWZvYmotJmd0O3VzZV9maWxsX3JpbmcgPSB0cnVlOwogCQlpZm9iai0mZ3Q7cmVsZWFzZV9yeCA9IHRydWU7CiAJCWlmb2JqLSZndDt2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMOwomIzQzOwkJaWZvYmotJmd0O3NoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7CiAJCWlmb2JqLSZndDt1c2VfbWV0YWRhdGEgPSBmYWxzZTsKIAogCQlpZiAoaSA9PSAwKSB7CkBAIC01NzQsMjYgJiM0Mzs2MDIsMTIxIEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAogc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwomIzQzOwkJdHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwKJiM0MzsJCQkJCQkgICAgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlwa3Rfc3RyZWFtID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbTsKJiM0MzsJCXJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCiYjNDM7CQkJCQkJICAgICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwomIzQzOwkJaWYgKCFyeF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07CiYjNDM7CQl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7CiYjNDM7CQlpZiAocnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2xlbl9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHNob3J0X2xlbiwgdTMyIGxvbmdfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwogCXN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtOwogCXUzMiBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcGt0X2xlbiA9IGkgPyBsb25nX2xlbiA6IHNob3J0X2xlbjsKJiM0MzsKIAkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07Ci0JCXBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCi0JCQkJCQkgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7Ci0JCWlmICghcGt0X3N0cmVhbSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwogCiAJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CQlyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsIHUzMiBwa3RfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgcGt0c19zb2NrMDsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IHRvdGFsX3BrdHMgJmx0OyA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7CiYjNDM7CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE0NjcsNiAmIzQzOzE1OTAsMTcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0dXJuIFRFU1RfUEFTUzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZiAoIWlmb2JqZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBjb3VudDsgaSAmZ3Q7IDA7IGktLSkKJiM0MzsJCXhza19kZWxldGVfc29ja2V0KCZhbXA7aWZvYmplY3QtJmd0O3hza19hcnJbaSAtIDFdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwKIAkJCSAgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIGJvb2wgdHgpCiB7CkBAIC0xNTk5LDYgJiM0MzsxNzMzLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKJiM0MzsJLyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi8KJiM0MzsJaWZvYmplY3QtJmd0O3hzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwogCiAJcmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpOwogCWlmIChyZXQpCkBAIC0xNjY5LDEyICYjNDM7MTgwNSwxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpCiAJCQkJICAgICAgIHN0cmVycm9yKC1lcnIpKTsKIAl9CiAKJiM0MzsJLyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovCiYjNDM7CWlmIChlcnIpCiYjNDM7CQl0ZXN0LSZndDtmYWlsID0gdHJ1ZTsKJiM0MzsKIAlpZiAodGVzdC0mZ3Q7dXNlX2JhcnJpZXIpCiAJCXB0aHJlYWRfYmFycmllcl93YWl0KCZhbXA7YmFycik7CiAKIAkvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi8KIAlpZiAoZXJyKSB7Ci0JCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwogCQlwdGhyZWFkX2V4aXQoTlVMTCk7CiAJfQogCkBAIC0xNzAxLDEyICYjNDM7MTg0MCw2MSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpCiAJcHRocmVhZF9leGl0KE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7dm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spCiB7Ci0Jc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai0mZ3Q7eHNrLSZndDt1bWVtOwomIzQzOwlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTsKJiM0MzsKJiM0MzsJaWYgKCF4c2spCiYjNDM7CQlyZXR1cm47CiAKLQl4c2tfdW1lbV9fZGVsZXRlKHVtZW0tJmd0O3VtZW0pOwotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CXVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHhzay0mZ3Q7eHNrKQomIzQzOwkJeHNrX3NvY2tldF9fZGVsZXRlKHhzay0mZ3Q7eHNrKTsKJiM0MzsJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwomIzQzOwkvKiBTa2lwIHNsb3RzIHRoYXQgbmV2ZXIgYWNxdWlyZWQgYSBVTUVNIHJlZmVyZW5jZSAocHJlLWluaXRpYWxpemVkIGJ1dCB1bmNvbmZpZ3VyZWQpLiAqLwomIzQzOwlpZiAoIXhzay0mZ3Q7dW1lbV9yZWYpIHsKJiM0MzsJCXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkgewomIzQzOwkJaWYgKHVtZW0tJmd0O3VtZW0pIHsKJiM0MzsJCQlpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKJiM0MzsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7eHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxuJiMzNDssCiYjNDM7CQkJCQkgICAgICAgZXJyKTsKJiM0MzsJCQkJLyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5CiYjNDM7CQkJCSAqIGRlbGV0ZS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXJlZmNvdW50X3NldCgmYW1wO3VtZW0tJmd0O3VzZXJzLCAxKTsKJiM0MzsJCQkJeHNrLSZndDt1bWVtX3JlZiA9IHRydWU7CiYjNDM7CQkJCXhzay0mZ3Q7dW1lbSA9IHVtZW07CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQkJdW1lbS0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW1lbS0mZ3Q7YnVmZmVyICZhbXA7JmFtcDsgdW1lbS0mZ3Q7bW1hcF9zaXplKSB7CiYjNDM7CQkJbXVubWFwKHVtZW0tJmd0O2J1ZmZlciwgdW1lbS0mZ3Q7bW1hcF9zaXplKTsKJiM0MzsJCQl1bWVtLSZndDtidWZmZXIgPSBOVUxMOwomIzQzOwkJCXVtZW0tJmd0O21tYXBfc2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJeHNrLSZndDt1bWVtX3JlZiA9IGZhbHNlOwomIzQzOwl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7ewomIzQzOwlpZiAoIWlmb2JqKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC0mZ3Q7bmJfc29ja2V0cyk7CiB9CiAKIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE3NjgsMjcgJiM0MzsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3IKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCi17Ci0JdTMyIGk7Ci0KLQlpZiAoIWlmb2JqIHx8ICF0ZXN0KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspCi0JCXhza19zb2NrZXRfX2RlbGV0ZShpZm9iai0mZ3Q7eHNrX2FycltpXS54c2spOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMikKLXsKLQlpZiAoIWlmb2JqMSkKLQkJcmV0dXJuOwotCi0JdGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpOwotCWlmIChpZm9iajIgJmFtcDsmYW1wOyAhaWZvYmoyLSZndDtzaGFyZWRfdW1lbSkKLQkJdGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpOwotfQotCiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLAogCQkJCSAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKQogewpAQCAtMTg0MCwxMyAmIzQzOzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAkJaWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KCZhbXA7YmFycikpIHsKIAkJCXRlc3QtJmd0O3VzZV9iYXJyaWVyID0gZmFsc2U7CiAJCQlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwotCQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQkJY2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpOwomIzQzOwkJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAkJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAJCX0KIAl9CiAKLQlpZiAoaWZvYmoyKSB7CiYjNDM7CWlmIChpZm9iajIgJmFtcDsmYW1wOyAhdGVzdC0mZ3Q7ZmFpbCkgewogCQkvKlNwYXduIFRYIHRocmVhZCAqLwogCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3QxLCBOVUxMLCBpZm9iajItJmd0O2Z1bmNfcHRyLCB0ZXN0KTsKIAkJcHRocmVhZF9qb2luKHQxLCBOVUxMKTsKQEAgLTE4NTUsOSAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaQogCXB0aHJlYWRfam9pbih0MCwgTlVMTCk7CiAKIAlpZiAodGVzdC0mZ3Q7dG90YWxfc3RlcHMgPT0gdGVzdC0mZ3Q7Y3VycmVudF9zdGVwIHx8IHRlc3QtJmd0O2ZhaWwpIHsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7Ci0JCWNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpOwogCX0KIAogCWlmICh0ZXN0LSZndDtmYWlsKQpAQCAtMTk2Niw5ICYjNDM7MjEzMSw4IEBAIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAogCWlmIChzd2FwX3hza19yZXNvdXJjZXModGVzdCkpIHsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCk7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl91bWVtKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwogCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwogCX0KIApAQCAtMjIyNiw2ICYjNDM7MjM5MCwxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmd0OyBNQVhfU09DS0VUUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxuJiMzNDssIF9fZnVuY19fLCB0ZXN0LSZndDtuYl9zb2NrZXRzKTsKJiM0MzsJCXJldHVybiBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHwKJiM0MzsJCSAgICAhdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxuJiMzNDssIF9fZnVuY19fLCBpKTsKJiM0MzsJCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnID0gY3R4OwomIzQzOwomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy0mZ3Q7c2hvcnRfbGVuLCBjZmctJmd0O2xvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4OwomIzQzOwomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEodGVzdCwgY2ZnLSZndDt0b3RhbF9wa3RzLAomIzQzOwkJCQkJIGNmZy0mZ3Q7cGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7CiYjNDM7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJdHhfc3RyZWFtXzAgPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FyclswXS5wa3Rfc3RyZWFtOwomIzQzOwl0eF9zdHJlYW1fMSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyWzFdLnBrdF9zdHJlYW07CiYjNDM7CXJ4X3N0cmVhbV8wID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbMF0ucGt0X3N0cmVhbTsKJiM0MzsJcnhfc3RyZWFtXzEgPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclsxXS5wa3Rfc3RyZWFtOwomIzQzOwomIzQzOwlpZiAodHhfc3RyZWFtXzEtJmd0O25iX3ZhbGlkX2VudHJpZXMgJmx0Oz0gdHhfc3RyZWFtXzAtJmd0O25iX3ZhbGlkX2VudHJpZXMpCiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzICZsdDs9IHJ4X3N0cmVhbV8wLSZndDtuYl9yeF9wa3RzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC0mZ3Q7bmJfcnhfcGt0cyk7CiYjNDM7CQlyZXQgPSBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cywKJiM0MzsJCQkJc2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLAomIzQzOwkJCQljb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0LSZndDt0b3RhbF9zdGVwcyA9IDE7CiYjNDM7CXRlc3QtJmd0O25iX3NvY2tldHMgPSBuYl9zb2NrZXRzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpOwomIzQzOwomIzQzOwlyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTsKJiM0MzsJaWYgKHBvc3RfZm4pCiYjNDM7CQlyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTsKJiM0MzsKJiM0MzsJcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0gewomIzQzOwkJLnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSwKJiM0MzsJCS5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLAomIzQzOwkJCQkgICAgTlVMTCwgJmFtcDtsZW5fY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHsKJiM0MzsJCS50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCwKJiM0MzsJCS5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCwKJiM0MzsJCQkJICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsICZhbXA7dW5ldmVuX2Rpc3RfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LSZndDtpZm9ial90eCAmYW1wOyZhbXA7IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2sgPwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7dW1lbSA6IE5VTEw7CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC0mZ3Q7aWZvYmpfcnggJmFtcDsmYW1wOyB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrID8KJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3VtZW0gOiBOVUxMOwomIzQzOwlib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAodHhfdW1lbSkKJiM0MzsJCXR4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkOwomIzQzOwlpZiAocnhfdW1lbSkKJiM0MzsJCXJ4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI1MDYsOSAmIzQzOzI4MzIsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwKJiM0MzsJCQkJCSAgIGNvbnN0IHZvaWQgKmN0eCk7CiAKIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gewogCXN0cnVjdCB4c2tfcmluZ19jb25zIHJ4OwpAQCAtOTMsNiAmIzQzOzk3LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7CiAJdTggZHN0X21hY1tFVEhfQUxFTl07CiAJdTggc3JjX21hY1tFVEhfQUxFTl07CiAJYm9vbCBjaGVja19jb25zdW1lcjsKJiM0MzsJYm9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovCiB9OwogCiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwpAQCAtMTA0LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7CiAJc3RydWN0IHhza191bWVtICp1bWVtOwogCXU2NCBuZXh0X2J1ZmZlcjsKIAl1NjQgbW1hcF9zaXplOwomIzQzOwlyZWZjb3VudF90IHVzZXJzOwogCXUzMiBudW1fZnJhbWVzOwogCXUzMiBmcmFtZV9oZWFkcm9vbTsKIAl2b2lkICpidWZmZXI7CkBAIC0xNTksNyAmIzQzOzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpOwogaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7CiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwKIAkJCSBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7Ci0KJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7CiAKIHN0cnVjdCBwa3QgewogCWludCBvZmZzZXQ7CkBAIC0xNzksNiAmIzQzOzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7CiAJYm9vbCB2ZXJiYXRpbTsKIH07CiAKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7CiYjNDM7CXUzMiBzaG9ydF9sZW47CiYjNDM7CXUzMiBsb25nX2xlbjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggewomIzQzOwl1MzIgdG90YWxfcGt0czsKJiM0MzsJdTMyIHBrdF9sZW47CiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKQogewogCXJldHVybiBvcHRpb25zICZhbXA7IFhEUF9QS1RfQ09OVEQ7CkBAIC0yNjgsNiAmIzQzOzI4NCwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogCiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpOwogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTsKQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7CiAJey5uYW1lID0gJiMzNDtYRFBfUFJPR19DTEVBTlVQJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LAogCXsubmFtZSA9ICYjMzQ7WERQX0RST1BfSEFMRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfZHJvcH0sCiAJey5uYW1lID0gJiMzNDtYRFBfU0hBUkVEX1VNRU0mIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFMmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV9MRU5HVEhfQkFTRUQmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSwKJiM0MzsJey5uYW1lID0gJiMzNDtTSEFSRURfVU1FTV9VTkVWRU5fRElTVCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZH0sCiAJey5uYW1lID0gJiMzNDtYRFBfTUVUQURBVEFfQ09QWSYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LAogCXsubmFtZSA9ICYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX2FsaWduZWRfaW52X2Rlc2NfbWJ9LApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCkBAIC0xMCw3ICYjNDM7MTAsNyBAQAogCiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDIpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTsKIAlfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTsKIAlfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpOwogfSB4c2sgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CkBAIC03NSw2ICYjNDM7NzUsMTkgQEAgU0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgaWR4LCBYRFBfRFJPUCk7CiB9CiAKJiM0MztTRUMoJiMzNDt4ZHAmIzM0OykgaW50IHhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB4ZHBfbWQgKnhkcCkKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CV9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7CiYjNDM7CiYjNDM7CS8qIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aC4gKi8KJiM0MzsJaWYgKHBrdF9sZW4gJmx0Oz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKQomIzQzOwkJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIDAsIFhEUF9EUk9QKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIDEsIFhEUF9EUk9QKTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDt4ZHAuZnJhZ3MmIzM0OykgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKQogewogCV9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaAppbmRleCA0NTgxMGZmNTUyZGFlLi5iZDliNWRjZjhjOGVlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaApAQCAtMyw3ICYjNDM7Myw4IEBACiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfCiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfCiAKLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMgomIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNAomIzQzOyNkZWZpbmUgU0hBUkVEX1VNRU1fTEVOX1NQTElUIDY0CiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi8KIAogc3RydWN0IHhkcF9pbmZvIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwpAQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50CiAKICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXykKIAotc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCkKJiM0MztzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQogewogCXNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFOwogCWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRTsKLQlzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7Ci0Jc3RydWN0IHhza191bWVtX2luZm8gKnVtZW07CiYjNDM7CXN0cnVjdCB4c2tfc29ja2V0X2luZm8geHNrID0ge307CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTsKIAlib29sIHpjX2F2YWlsID0gZmFsc2U7CiAJdm9pZCAqYnVmczsKIAlpbnQgcmV0OwpAQCAtMTMxLDMyICYjNDM7MTMxLDI0IEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJaWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRCkKIAkJZXhpdF93aXRoX2Vycm9yKGVycm5vKTsKIAotCXVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7Ci0JaWYgKCF1bWVtKSB7Ci0JCW11bm1hcChidWZzLCB1bWVtX3N6KTsKLQkJZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7Ci0JfQotCXVtZW0tJmd0O2ZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFOwotCXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7CiYjNDM7CXVtZW0ubW1hcF9zaXplID0gdW1lbV9zejsKJiM0MzsJdW1lbS5mcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqLCAmYW1wO3VtZW0sIGJ1ZnMsIHVtZW1fc3opOwogCWlmIChyZXQpCiAJCWV4aXRfd2l0aF9lcnJvcigtcmV0KTsKIAotCXhzayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHhza19zb2NrZXRfaW5mbykpOwotCWlmICgheHNrKQotCQlnb3RvIG91dDsKLQlpZm9iamVjdC0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7Ci0JaWZvYmplY3QtJmd0O3J4X29uID0gdHJ1ZTsKLQl4c2stJmd0O3J4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7CiYjNDM7CXhzay51bWVtX3JlZiA9IHRydWU7CiYjNDM7CiYjNDM7CWlmb2JqLSZndDtiaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTsKJiM0MzsJaWZvYmotJmd0O3J4X29uID0gdHJ1ZTsKJiM0MzsJeHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoJmFtcDt4c2ssICZhbXA7dW1lbSwgaWZvYmosIGZhbHNlKTsKIAlpZiAoIXJldCkKIAkJemNfYXZhaWwgPSB0cnVlOwogCi0JeHNrX3NvY2tldF9fZGVsZXRlKHhzay0mZ3Q7eHNrKTsKLQlmcmVlKHhzayk7Ci1vdXQ6Ci0JbXVubWFwKHVtZW0tJmd0O2J1ZmZlciwgdW1lbV9zeik7Ci0JeHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKLQlmcmVlKHVtZW0pOwomIzQzOwkvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqLwomIzQzOwl4c2tfZGVsZXRlX3NvY2tldCgmYW1wO3hzayk7CiYjNDM7CiAJcmV0dXJuIHpjX2F2YWlsOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDIwCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogQSBRdWljayBEZWNpc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FzZS4gVGhlc2UgYXJlICpzZWxmdGVzdHMqLCByaWdodD8gVGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlLCB0aGV5JiMzOTtyZSB1c2Vyc3BhY2UgdGVzdHMuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogZG9lcyB0aGUgcGF0Y2ggbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbD8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiBmb3IgZnV6emluZy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIG5vLCBzZWxmdGVzdHMgYXJlIHRlc3RzOyBzbywgdGhleSBkb24mIzM5O3QgKmRpcmVjdGx5KiBhbHRlciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBhZmZlY3RlZCBpbiB0aGlzIHBhdGNoLiBPa2F5LCBpdCYjMzk7cyBqdXN0IHRoZSBzZWxmdGVzdCBmaWxlczogYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gTm9wZSwgc3RpbGwgb25seSBzZWxmdGVzdHMuCgpMZXQgbWUgcmVmcmVzaCBteXNlbGYgb24gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY29uZGl0aW9ucy4gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuLi4gbm90aGluZyBpbiB0aGlzIGxpc3QgZXhwbGljaXRseSBtZW50aW9ucyAmIzM0O3NlbGZ0ZXN0cywmIzM0OyBidXQgdGhleSYjMzk7cmUgbm90ICprZXJuZWwqIGNvZGUuIFNvLCBhZ2FpbiwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbjogJiMzNDtkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkJiMzNDssIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICYjMzQ7bm8mIzM0Oy4gU2VsZnRlc3QgY2hhbmdlcyBhcmUgbm90IGtlcm5lbCBjaGFuZ2VzLgoKWWVwLCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA3OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNzoyODowNC43MDA3Mzc4MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTc0MzY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA0LjcwMDc0NDMxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQxOTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDc6Mjg6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi5hZTZhMDkxYjY0ODUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR1bWVtLVxcdTAwM2VidWZmZXIgPSBidWZmZXI7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMsIDEpO1xcbiBcXHRpZiAoaWZvYmotXFx1MDAzZXNoYXJlZF91bWVtIFxcdTAwMjZcXHUwMDI2IGlmb2JqLVxcdTAwM2VyeF9vbikge1xcbiBcXHRcXHR1bWVtLVxcdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xcbkBAIC0xNTQsNiArMTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eHNrLVxcdTAwM2V1bWVtID0gdW1lbTtcXG4gXFx0Y2ZnLnJ4X3NpemUgPSB4c2stXFx1MDAzZXJ4cXNpemU7XFxuQEAgLTE3MCw3ICsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFxuIFxcdHR4ciA9IGlmb2JqZWN0LVxcdTAwM2V0eF9vbiA/IFxcdTAwMjZ4c2stXFx1MDAzZXR4IDogTlVMTDtcXG4gXFx0cnhyID0gaWZvYmplY3QtXFx1MDAzZXJ4X29uID8gXFx1MDAyNnhzay1cXHUwMDNlcnggOiBOVUxMO1xcbi1cXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0cmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24ndCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90XFxuK1xcdFxcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XFxuK1xcdFxcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlcidzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXRcXG4rXFx0XFx0ICogdmlhIHVtZW1fcmVmLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0XFx0eHNrLVxcdTAwM2V1bWVtID0gTlVMTDtcXG4rXFx0XFx0eHNrLVxcdTAwM2V4c2sgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2hhcmVkKSB7XFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpO1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuQEAgLTIwMyw2ICsyMjQsMTIgQEAgaW50IGh3X3Jpbmdfc2l6ZV9yZXNldChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcXG4ge1xcbitcXHQvKlxcbitcXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXFxuK1xcdCAqIHNoYXJlZCBVTUVNIGlzIHRoZSBiYXNlbGluZSBtb2RlIGZvciB0aGlzIHRlc3QgaGFybmVzcy4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gc3RpbGxcXG4rXFx0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXFxuK1xcdCAqL1xcbitcXHRib29sIHNoYXJlZF9kZWZhdWx0ID0gaWZvYmpfdHgtXFx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHUzMiBpLCBqO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpKyspIHtcXG5AQCAtMjE0LDYgKzI0MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xcbiBcXHRcXHRpZm9iai1cXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2V2YWxpZGF0aW9uX2Z1bmMgPSBOVUxMO1xcbitcXHRcXHRpZm9iai1cXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0aWYgKGkgPT0gMCkge1xcbkBAIC01NzQsMjYgKzYwMiwxMjEgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXG4gc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIHtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghdHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCB1MzIgc2hvcnRfbGVuLCB1MzIgbG9uZ19sZW4pXFxuK3tcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcXG4gXFx0dTMyIGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xcbitcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiB0b3RhbF9wa3RzLCB1MzIgcGt0X2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHUzMiBpLCBwa3RzX3NvY2swO1xcbitcXG4rXFx0aWYgKHRlc3QtXFx1MDAzZW5iX3NvY2tldHMgXFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXFx1MDAzYyA0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dTMyIG5iX3BrdHMgPSAoaSA9PSAwKSA/IHBrdHNfc29jazAgOiAodG90YWxfcGt0cyAtIHBrdHNfc29jazApO1xcbitcXG4rXFx0XFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG5AQCAtMTQ2Nyw2ICsxNTkwLDE3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfdHhfaW52YWxpZF9kZXNjcyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxcbiBcXHRyZXR1cm4gVEVTVF9QQVNTO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAoIWlmb2JqZWN0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSBjb3VudDsgaSBcXHUwMDNlIDA7IGktLSlcXG4rXFx0XFx0eHNrX2RlbGV0ZV9zb2NrZXQoXFx1MDAyNmlmb2JqZWN0LVxcdTAwM2V4c2tfYXJyW2kgLSAxXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxcbiB7XFxuQEAgLTE1OTksNiArMTczMyw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cXG4rXFx0aWZvYmplY3QtXFx1MDAzZXhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbiBcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xNjY5LDEyICsxODA1LDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRlc3QtXFx1MDAzZWZhaWwgPSB0cnVlO1xcbitcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyKVxcbiBcXHRcXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcXHUwMDI2YmFycik7XFxuIFxcbiBcXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gXFx0XFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzAxLDEyICsxODQwLDYxIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxcbiB7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXFx1MDAzZXhzay1cXHUwMDNldW1lbTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XFxuK1xcbitcXHRpZiAoIXhzaylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4tXFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0dW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFx0aWYgKCF1bWVtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoeHNrLVxcdTAwM2V4c2spXFxuK1xcdFxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuK1xcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4rXFxuK1xcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXFxuK1xcdGlmICgheHNrLVxcdTAwM2V1bWVtX3JlZikge1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzKSkge1xcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNldW1lbSkge1xcbitcXHRcXHRcXHRpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcInhza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBlcnIpO1xcbitcXHRcXHRcXHRcXHQvKiBLZWVwIG93bmVyc2hpcCBleHBsaWNpdCBzbyBhIGxhdGVyIGNsZWFudXAgcGFzcyBjYW4gcmV0cnlcXG4rXFx0XFx0XFx0XFx0ICogZGVsZXRlLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2VycywgMSk7XFxuK1xcdFxcdFxcdFxcdHhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSB1bWVtO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVtZW0tXFx1MDAzZWJ1ZmZlciBcXHUwMDI2XFx1MDAyNiB1bWVtLVxcdTAwM2VtbWFwX3NpemUpIHtcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4re1xcbitcXHRpZiAoIWlmb2JqKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iaiwgdGVzdC1cXHUwMDNlbmJfc29ja2V0cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG5AQCAtMTc2OCwyNyArMTk1Niw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4te1xcbi1cXHR1MzIgaTtcXG4tXFxuLVxcdGlmICghaWZvYmogfHwgIXRlc3QpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspXFxuLVxcdFxcdHhza19zb2NrZXRfX2RlbGV0ZShpZm9iai1cXHUwMDNleHNrX2FycltpXS54c2spO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcXG4te1xcbi1cXHRpZiAoIWlmb2JqMSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xcbi1cXHRpZiAoaWZvYmoyIFxcdTAwMjZcXHUwMDI2ICFpZm9iajItXFx1MDAzZXNoYXJlZF91bWVtKVxcbi1cXHRcXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbiB7XFxuQEAgLTE4NDAsMTMgKzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0XFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFxcdTAwMjZiYXJyKSkge1xcbiBcXHRcXHRcXHR0ZXN0LVxcdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xcbiBcXHRcXHRcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbi1cXHRcXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcXG4rXFx0XFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpZm9iajIpIHtcXG4rXFx0aWYgKGlmb2JqMiBcXHUwMDI2XFx1MDAyNiAhdGVzdC1cXHUwMDNlZmFpbCkge1xcbiBcXHRcXHQvKlNwYXduIFRYIHRocmVhZCAqL1xcbiBcXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dDEsIE5VTEwsIGlmb2JqMi1cXHUwMDNlZnVuY19wdHIsIHRlc3QpO1xcbiBcXHRcXHRwdGhyZWFkX2pvaW4odDEsIE5VTEwpO1xcbkBAIC0xODU1LDkgKzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxcbiBcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXFx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVxcdTAwM2VmYWlsKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xcbi1cXHRcXHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh0ZXN0LVxcdTAwM2VmYWlsKVxcbkBAIC0xOTY2LDkgKzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcbiBcXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMjYsNiArMjM5MCwxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNlIE1BWF9TT0NLRVRTKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcXFxuXFxcIiwgX19mdW5jX18sIHRlc3QtXFx1MDAzZW5iX3NvY2tldHMpO1xcbitcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdGlmICghdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxcbitcXHRcXHQgICAgIXRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBbJXNdIG1pc3Npbmcgc3RyZWFtIGZvciBzb2NrZXQgJXVcXFxcblxcXCIsIF9fZnVuY19fLCBpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0KHZvaWQpY3R4O1xcbitcXG4rXFx0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVxcdTAwM2VzaG9ydF9sZW4sIGNmZy1cXHUwMDNlbG9uZ19sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xcbitcXG4rXFx0cmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGNmZy1cXHUwMDNldG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0IGNmZy1cXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1fMCwgKnJ4X3N0cmVhbV8xO1xcbitcXG4rXFx0KHZvaWQpY3R4O1xcbitcXG4rXFx0dHhfc3RyZWFtXzAgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xcbitcXHR0eF9zdHJlYW1fMSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XFxuK1xcdHJ4X3N0cmVhbV8wID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcXG4rXFx0cnhfc3RyZWFtXzEgPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xcbitcXG4rXFx0aWYgKHR4X3N0cmVhbV8xLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzIFxcdTAwM2M9IHR4X3N0cmVhbV8wLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzKVxcbitcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbitcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcnhfc3RyZWFtXzEtXFx1MDAzZW5iX3J4X3BrdHMgXFx1MDAzYz0gcnhfc3RyZWFtXzAtXFx1MDAzZW5iX3J4X3BrdHMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHJ4X3N0cmVhbV8xLVxcdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cXHUwMDNlbmJfcnhfcGt0cyk7XFxuK1xcdFxcdHJldCA9IFRFU1RfRkFJTFVSRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcXG4rXFx0XFx0XFx0XFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcXG4rXFx0dGVzdC1cXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xcbitcXG4rXFx0cmV0ID0gc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHRlc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuK1xcdGlmIChwb3N0X2ZuKVxcbitcXHRcXHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcXG4rXFxuK1xcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7XFxuK1xcdFxcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXFxuK1xcdFxcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgIE5VTEwsIFxcdTAwMjZsZW5fY3R4KTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB1bmV2ZW5fZGlzdF9jdHggPSB7XFxuK1xcdFxcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcXG4rXFx0XFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFxcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LVxcdTAwM2VpZm9ial90eCBcXHUwMDI2XFx1MDAyNiB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrID9cXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhzay1cXHUwMDNldW1lbSA6IE5VTEw7XFxuK1xcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfcnggXFx1MDAyNlxcdTAwMjYgdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzayA/XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZXVtZW0gOiBOVUxMO1xcbitcXHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xcbitcXHRib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XFxuK1xcbitcXHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAodHhfdW1lbSlcXG4rXFx0XFx0dHhfdW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XFxuK1xcdGlmIChyeF91bWVtKVxcbitcXHRcXHRyeF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA9IHJ4X3VuYWxpZ25lZDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIHtcXG4gXFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2VzaGFyZWRfdW1lbTtcXG5AQCAtMjUwNiw5ICsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrLVxcdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xcbiBcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xcbiBcXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl94ZHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4va3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4c2suaFxcXCJcXG5AQCAtNzksNiArODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xcbiB0eXBlZGVmIGludCAoKnZhbGlkYXRpb25fZnVuY190KShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKTtcXG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XFxuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcXG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICpjdHgpO1xcbiBcXG4gc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xcbkBAIC05Myw2ICs5Nyw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xcbiBcXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcXG4gXFx0dTggc3JjX21hY1tFVEhfQUxFTl07XFxuIFxcdGJvb2wgY2hlY2tfY29uc3VtZXI7XFxuK1xcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xcbiB9O1xcbiBcXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG5AQCAtMTA0LDYgKzEwOSw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHtcXG4gXFx0c3RydWN0IHhza191bWVtICp1bWVtO1xcbiBcXHR1NjQgbmV4dF9idWZmZXI7XFxuIFxcdHU2NCBtbWFwX3NpemU7XFxuK1xcdHJlZmNvdW50X3QgdXNlcnM7XFxuIFxcdHUzMiBudW1fZnJhbWVzO1xcbiBcXHR1MzIgZnJhbWVfaGVhZHJvb207XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG5AQCAtMTU5LDcgKzE2NSw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcXG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XFxuLVxcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XFxuIFxcbiBzdHJ1Y3QgcGt0IHtcXG4gXFx0aW50IG9mZnNldDtcXG5AQCAtMTc5LDYgKzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XFxuIFxcdGJvb2wgdmVyYmF0aW07XFxuIH07XFxuIFxcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XFxuK1xcdHUzMiBzaG9ydF9sZW47XFxuK1xcdHUzMiBsb25nX2xlbjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xcbitcXHR1MzIgdG90YWxfcGt0cztcXG4rXFx0dTMyIHBrdF9sZW47XFxuK307XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucylcXG4ge1xcbiBcXHRyZXR1cm4gb3B0aW9ucyBcXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XFxuQEAgLTI2OCw2ICsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIFxcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xcbkBAIC0yOTEsNiArMzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfUFJPR19DTEVBTlVQXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfRFJPUF9IQUxGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX1NIQVJFRF9VTUVNXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1xcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9VTkFMSUdORURcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX01FVEFEQVRBX0NPUFlcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYn0sXFxuIFxcdHsubmFtZSA9IFxcXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG5pbmRleCAwMjNkOGJlZmQ0Y2FiLi44YmFiMmJjZjUyYWIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuQEAgLTEwLDcgKzEwLDcgQEBcXG4gXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG4tXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XFxuIFxcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKGludCkpO1xcbiBcXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xcbiB9IHhzayBTRUMoXFxcIi5tYXBzXFxcIik7XFxuQEAgLTc1LDYgKzc1LDE5IEBAIFNFQyhcXFwieGRwXFxcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCBpZHgsIFhEUF9EUk9QKTtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XFxuK1xcbitcXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXFxuK1xcdGlmIChwa3RfbGVuIFxcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMCwgWERQX0RST1ApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcXG4rfVxcbitcXG4gU0VDKFxcXCJ4ZHAuZnJhZ3NcXFwiKSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIHtcXG4gXFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG5pbmRleCA0NTgxMGZmNTUyZGFlLi5iZDliNWRjZjhjOGVlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG5AQCAtMyw3ICszLDggQEBcXG4gI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IX1xcbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXFxuIFxcbi0jZGVmaW5lIE1BWF9TT0NLRVRTIDJcXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XFxuKyNkZWZpbmUgU0hBUkVEX1VNRU1fTEVOX1NQTElUIDY0XFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovXFxuIFxcbiBzdHJ1Y3QgeGRwX2luZm8ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcXG4gXFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcXG4gXFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuK3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHtcXG4gXFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XFxuIFxcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRTtcXG4tXFx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xcbi1cXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcXG4rXFx0c3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xcbiBcXHRib29sIHpjX2F2YWlsID0gZmFsc2U7XFxuIFxcdHZvaWQgKmJ1ZnM7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEzMSwzMiArMTMxLDI0IEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XFxuIFxcbi1cXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xcbi1cXHRpZiAoIXVtZW0pIHtcXG4tXFx0XFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xcbi1cXHRcXHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcXG4tXFx0fVxcbi1cXHR1bWVtLVxcdTAwM2VmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4rXFx0dW1lbS5tbWFwX3NpemUgPSB1bWVtX3N6O1xcbitcXHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xcbitcXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFxcdTAwMjZ1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbiBcXG4tXFx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XFxuLVxcdGlmICgheHNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWZvYmplY3QtXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbi1cXHR4c2stXFx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpO1xcbitcXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xcbitcXG4rXFx0aWZvYmotXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbitcXHRpZm9iai1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbitcXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xcbitcXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcXHUwMDI2eHNrLCBcXHUwMDI2dW1lbSwgaWZvYmosIGZhbHNlKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHpjX2F2YWlsID0gdHJ1ZTtcXG4gXFxuLVxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuLVxcdGZyZWUoeHNrKTtcXG4tb3V0Olxcbi1cXHRtdW5tYXAodW1lbS1cXHUwMDNlYnVmZmVyLCB1bWVtX3N6KTtcXG4tXFx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4tXFx0ZnJlZSh1bWVtKTtcXG4rXFx0LyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi9cXG4rXFx0eHNrX2RlbGV0ZV9zb2NrZXQoXFx1MDAyNnhzayk7XFxuK1xcbiBcXHRyZXR1cm4gemNfYXZhaWw7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA2LjMxNDk5OTcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyMDE0NzExMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5YjAzNTVlZTk5Y2QxYTU0MDY0ZWQ3MDAyZmIzMGRhMzQyNGU0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNzoyODowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi5hZTZhMDkxYjY0ODUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR1bWVtLVx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcbitcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgKzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbitcdGludCByZXQ7XG4gXG4gXHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4gXHRjZmcucnhfc2l6ZSA9IHhzay1cdTAwM2VyeHFzaXplO1xuQEAgLTE3MCw3ICsxNzIsMjYgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuK1x0aWYgKHJldCkge1xuK1x0XHQvKlxuK1x0XHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24ndCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90XG4rXHRcdCAqIGFzIGhhdmluZyBubyByZWZlcmVuY2UuIEZvciB0aGUgb3duZXIgKG5vbi1zaGFyZWQpIHRoZSByZWZlcmVuY2Ugd2FzIHRha2VuIGJ5XG4rXHRcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlcidzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXRcbitcdFx0ICogdmlhIHVtZW1fcmVmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNoYXJlZClcbitcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHNoYXJlZCkge1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4rXHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiArMjI0LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4rXHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4rXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbitcdCAqL1xuK1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xuQEAgLTIxNCw2ICsyNDEsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbitcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgKzYwMiwxMjEgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuK1xuIFx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbiBcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiB0b3RhbF9wa3RzLCB1MzIgcGt0X2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0dTMyIGksIHBrdHNfc29jazA7XG4rXG4rXHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXHUwMDNjIDQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0dTMyIG5iX3BrdHMgPSAoaSA9PSAwKSA/IHBrdHNfc29jazAgOiAodG90YWxfcGt0cyAtIHBrdHNfc29jazApO1xuK1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNDY3LDYgKzE1OTAsMTcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXR1cm4gVEVTVF9QQVNTO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCB1MzIgY291bnQpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHRpZiAoIWlmb2JqZWN0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSBjb3VudDsgaSBcdTAwM2UgMDsgaS0tKVxuK1x0XHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2kgLSAxXSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxuIFx0XHRcdCAgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIGJvb2wgdHgpXG4ge1xuQEAgLTE1OTksNiArMTczMyw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iamVjdCwgdW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbitcdGlmb2JqZWN0LVx1MDAzZXhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4gXG4gXHRyZXQgPSB4c2tfY29uZmlndXJlKHRlc3QsIGlmb2JqZWN0LCB1bWVtLCBmYWxzZSk7XG4gXHRpZiAocmV0KVxuQEAgLTE2NjksMTIgKzE4MDUsMTUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcbiBcdH1cbiBcbitcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuK1x0aWYgKGVycilcbitcdFx0dGVzdC1cdTAwM2VmYWlsID0gdHJ1ZTtcbitcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiArMTg0MCw2MSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iailcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaylcbiB7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLVx1MDAzZXhzay1cdTAwM2V1bWVtO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXG4rXHRpZiAoIXhzaylcbitcdFx0cmV0dXJuO1xuIFxuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtLVx1MDAzZW1tYXBfc2l6ZSk7XG4rXHR1bWVtID0geHNrLVx1MDAzZXVtZW07XG4rXHRpZiAoIXVtZW0pXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh4c2stXHUwMDNleHNrKVxuK1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4rXHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcbitcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4rXHRpZiAoIXhzay1cdTAwM2V1bWVtX3JlZikge1xuK1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbitcdFx0aWYgKHVtZW0tXHUwMDNldW1lbSkge1xuK1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4rXG4rXHRcdFx0aWYgKGVycikge1xuK1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCJ4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgICBlcnIpO1xuK1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4rXHRcdFx0XHQgKiBkZWxldGUuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbitcdFx0XHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4rXHRcdFx0XHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0aWYgKHVtZW0tXHUwMDNlYnVmZmVyIFx1MDAyNlx1MDAyNiB1bWVtLVx1MDAzZW1tYXBfc2l6ZSkge1xuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbitcdFx0XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG4rXHRcdH1cbitcdH1cbitcbitcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuK1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4re1xuK1x0aWYgKCFpZm9iailcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goaWZvYmosIHRlc3QtXHUwMDNlbmJfc29ja2V0cyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNzY4LDI3ICsxOTU2LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbi17XG4tXHR1MzIgaTtcbi1cbi1cdGlmICghaWZvYmogfHwgIXRlc3QpXG4tXHRcdHJldHVybjtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKVxuLVx0XHR4c2tfc29ja2V0X19kZWxldGUoaWZvYmotXHUwMDNleHNrX2FycltpXS54c2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbi17XG4tXHRpZiAoIWlmb2JqMSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xuLVx0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIWlmb2JqMi1cdTAwM2VzaGFyZWRfdW1lbSlcbi1cdFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4ge1xuQEAgLTE4NDAsMTMgKzIwMDcsMTIgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbitcdFx0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4gXHRcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGlmb2JqMikge1xuK1x0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIXRlc3QtXHUwMDNlZmFpbCkge1xuIFx0XHQvKlNwYXduIFRYIHRocmVhZCAqL1xuIFx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVx1MDAzZWZ1bmNfcHRyLCB0ZXN0KTtcbiBcdFx0cHRocmVhZF9qb2luKHQxLCBOVUxMKTtcbkBAIC0xODU1LDkgKzIwMjEsOCBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbiBcbiBcdGlmICh0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID09IHRlc3QtXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXHUwMDNlZmFpbCkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTtcbitcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY2LDkgKzIxMzEsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG4gXHRpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNiw2ICsyMzkwLDE2OCBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzZSBNQVhfU09DS0VUUykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxuXCIsIF9fZnVuY19fLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuK1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKCF0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSB8fFxuK1x0XHQgICAgIXRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxuXCIsIF9fZnVuY19fLCBpKTtcbitcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0KHZvaWQpY3R4O1xuK1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVx1MDAzZXNob3J0X2xlbiwgY2ZnLVx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbitcdFx0XHRcdFx0IGNmZy1cdTAwM2Vwa3RfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1fMCwgKnJ4X3N0cmVhbV8xO1xuK1xuK1x0KHZvaWQpY3R4O1xuK1xuK1x0dHhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbitcdHR4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4rXHRyeF9zdHJlYW1fMCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xuK1x0cnhfc3RyZWFtXzEgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcbitcbitcdGlmICh0eF9zdHJlYW1fMS1cdTAwM2VuYl92YWxpZF9lbnRyaWVzIFx1MDAzYz0gdHhfc3RyZWFtXzAtXHUwMDNlbmJfdmFsaWRfZW50cmllcylcbitcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzIFx1MDAzYz0gcnhfc3RyZWFtXzAtXHUwMDNlbmJfcnhfcGt0cykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxcblwiLFxuK1x0XHRcdCAgICAgICByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKTtcbitcdFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LFxuK1x0XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxuK1x0XHRcdFx0c2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLFxuK1x0XHRcdFx0Y29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHR0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcbitcdHRlc3QtXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XG4rXG4rXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xuK1xuK1x0cmV0ID0gc2hhcmVkX3VtZW1fdGVzdF9wcmVwYXJlKHRlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbitcdGlmIChwb3N0X2ZuKVxuK1x0XHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcbitcbitcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCwgTlVMTCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbitcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuK1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4rXHRcdFx0XHQgICAgTlVMTCwgXHUwMDI2bGVuX2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbitcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuK1x0XHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4rXHRcdFx0XHQgICAgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdCwgXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrID9cbitcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqcnhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfcnggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrID9cbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4rXHRib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4rXHRib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XG4rXG4rXHRyZXQgPSBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssXG4rXHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHR4X3VtZW0pXG4rXHRcdHR4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XG4rXHRpZiAocnhfdW1lbSlcbitcdFx0cnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHJ4X3VuYWxpZ25lZDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjUwNiw5ICsyODMyLDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjkzZGNmNjZiNGU2MjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL2tzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbkBAIC03OSw2ICs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9zZXFfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxuK1x0XHRcdFx0XHQgICBjb25zdCB2b2lkICpjdHgpO1xuIFxuIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XG5AQCAtOTMsNiArOTcsNyBAQCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHU4IGRzdF9tYWNbRVRIX0FMRU5dO1xuIFx0dTggc3JjX21hY1tFVEhfQUxFTl07XG4gXHRib29sIGNoZWNrX2NvbnN1bWVyO1xuK1x0Ym9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovXG4gfTtcbiBcbiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spO1xuQEAgLTEwNCw2ICsxMDksNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuK1x0cmVmY291bnRfdCB1c2VycztcbiBcdHUzMiBudW1fZnJhbWVzO1xuIFx0dTMyIGZyYW1lX2hlYWRyb29tO1xuIFx0dm9pZCAqYnVmZmVyO1xuQEAgLTE1OSw3ICsxNjUsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuLVxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgKzE4NSwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XG4gXHRib29sIHZlcmJhdGltO1xuIH07XG4gXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xuK1x0dTMyIHNob3J0X2xlbjtcbitcdHUzMiBsb25nX2xlbjtcbit9O1xuK1xuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xuK1x0dTMyIHRvdGFsX3BrdHM7XG4rXHR1MzIgcGt0X2xlbjtcbit9O1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxuIHtcbiBcdHJldHVybiBvcHRpb25zIFx1MDAyNiBYRFBfUEtUX0NPTlREO1xuQEAgLTI2OCw2ICsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XG5AQCAtMjkxLDYgKzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xuIFx0ey5uYW1lID0gXCJYRFBfUFJPR19DTEVBTlVQXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxuIFx0ey5uYW1lID0gXCJYRFBfRFJPUF9IQUxGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwiWERQX1NIQVJFRF9VTUVNXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1wiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkFMSUdORURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG5AQCAtMTAsNyArMTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcbiBcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XG4gfSB4c2sgU0VDKFwiLm1hcHNcIik7XG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuK1NFQyhcInhkcFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbitcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XG4rXG4rXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4rXHRpZiAocGt0X2xlbiBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xuK31cbitcbiBTRUMoXCJ4ZHAuZnJhZ3NcIikgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgKzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLmE4NmVhZjE0MWU5MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcbiBcbiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbitzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzEsMjQgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4tXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbitcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4rXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4rXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuK1xuK1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4rXHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4rXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xuK1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCBcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbitcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4rXHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZ4c2spO1xuK1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA3OjI4OjA2LjMxNTAwMTA1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDE0NDgyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBBIFF1aWNrIERlY2lzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQncyB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBUaGVzZSBhcmUgKnNlbGZ0ZXN0cyosIHJpZ2h0PyBUaGV5J3JlIG5vdCBrZXJuZWwgY29kZSwgdGhleSdyZSB1c2Vyc3BhY2UgdGVzdHMuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogZG9lcyB0aGUgcGF0Y2ggbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbD8gVGhpcyBpcyB0aGUgY29yZSBxdWVzdGlvbiBmb3IgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgbm8sIHNlbGZ0ZXN0cyBhcmUgdGVzdHM7IHNvLCB0aGV5IGRvbid0ICpkaXJlY3RseSogYWx0ZXIga2VybmVsIGZ1bmN0aW9uYWxpdHkuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZmlsZXMgYWZmZWN0ZWQgaW4gdGhpcyBwYXRjaC4gT2theSwgaXQncyBqdXN0IHRoZSBzZWxmdGVzdCBmaWxlczogYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gTm9wZSwgc3RpbGwgb25seSBzZWxmdGVzdHMuXG5cbkxldCBtZSByZWZyZXNoIG15c2VsZiBvbiB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjb25kaXRpb25zLiBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocy4uLiBub3RoaW5nIGluIHRoaXMgbGlzdCBleHBsaWNpdGx5IG1lbnRpb25zIFwic2VsZnRlc3RzLFwiIGJ1dCB0aGV5J3JlIG5vdCAqa2VybmVsKiBjb2RlLiBTbywgYWdhaW4sIGJhc2VkIG9uIHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbjogXCJkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkXCIsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIFwibm9cIi4gU2VsZnRlc3QgY2hhbmdlcyBhcmUgbm90IGtlcm5lbCBjaGFuZ2VzLlxuXG5ZZXAsIEknbSBjb25maWRlbnQuIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIERvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDc6Mjg6MTUuNTE2NDUyMjM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNzoyODoxNS41MTY0NzI0MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbkl5b[1] Phase: Running StartedAt: 2026-08-13 07:28:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkl5b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 07:28:59 +0000 UTC FinishedAt: 2026-08-13 07:29:03 +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,}