Name: series-workflowhwpgl Phase: Failed StartedAt: 2026-09-13 15:03:36 +0000 UTC FinishedAt: 2026-09-13 15:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwpgl[0] Phase: Succeeded StartedAt: 2026-09-13 15:03:36 +0000 UTC FinishedAt: 2026-09-13 15:06:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwpgl[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 15:03:36 +0000 UTC FinishedAt: 2026-09-13 15:06:24 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5pbmRleCBhNTA1NDBlZjY1MjFjLi5kOTMwNzNkNWU3ZTMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5AQCAtMTA0NCw2MiAmIzQzOzEwNDQsNzkgQEAgY29kZWdlbl9wcm9nc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgcHJvZ19jbnQsIGJvb2wgcG9wdWxhdGVfbGlcbiB9XG4gXG4gc3RhdGljIGludCB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmlkZW50LFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSwgX191MzIgbWFwX3R5cGVfaWQpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSlcbiB7XG4mIzQzO1x0ZW51bSBzdF9vcHNfc2hhZG93X2tpbmQge1xuJiM0MztcdFx0U1RfT1BTX1NIQURPV19TQ0FMQVIsXG4mIzQzO1x0XHRTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLFxuJiM0MztcdFx0U1RfT1BTX1NIQURPV19PUEFRVUUsXG4mIzQzO1x0fTtcbiBcdExJQkJQRl9PUFRTKGJ0Zl9kdW1wX2VtaXRfdHlwZV9kZWNsX29wdHMsIG9wdHMsIC5pbmRlbnRfbGV2ZWwgPSAzKTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XG4tXHRfX3UzMiBvZmZzZXQsIG5leHRfb2Zmc2V0ID0gMDtcbiYjNDM7XHRfX3U2NCBiaXRmaWVsZF9lbmQgPSAwLCBtYXBfYml0cztcbiYjNDM7XHRfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplO1xuJiM0MztcdF9fdTMyIG1hcF9zaXplLCBvZmZzZXQsIG5leHRfb2Zmc2V0ID0gMDtcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptO1xuIFx0c3RydWN0IGJ0Zl9kdW1wICpkID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lO1xuIFx0X191MzIgbWVtYmVyX3R5cGVfaWQ7XG4tXHRpbnQgaSwgZXJyID0gMCwgbjtcbi1cdGludCBzaXplO1xuJiM0MztcdGludCBhbGlnbiwgZXJyID0gMCwgaSwgbWF4X2FsaWduID0gMSwgbiwgc2l6ZTtcbiYjNDM7XHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDtcbiBcbiBcdGQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKCFkKVxuIFx0XHRyZXR1cm4gLWVycm5vO1xuIFxuJiM0MztcdG1hcF9zaXplID0gbWFwX3R5cGUtXHUwMDNlc2l6ZTtcbiYjNDM7XHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XG4gXHRuID0gYnRmX3ZsZW4obWFwX3R5cGUpO1xuIFx0Zm9yIChpID0gMCwgbSA9IGJ0Zl9tZW1iZXJzKG1hcF90eXBlKTsgaSBcdTAwM2MgbjsgaSYjNDM7JiM0MzssIG0mIzQzOyYjNDM7KSB7XG4tXHRcdG1lbWJlcl90eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG0tXHUwMDNldHlwZSwgXHUwMDI2bWVtYmVyX3R5cGVfaWQpO1xuIFx0XHRtZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQobWFwX3R5cGUsIGkpO1xuJiM0MztcdFx0Yml0ZmllbGRfc2l6ZSA9IGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShtYXBfdHlwZSwgaSk7XG4mIzQzO1x0XHRpZiAoYml0ZmllbGRfc2l6ZSkge1xuJiM0MztcdFx0XHRpZiAoKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIGJpdGZpZWxkX2VuZCB8fFxuJiM0MztcdFx0XHQgICAgKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcbiYjNDM7XHRcdFx0ICAgIGJpdF9vZmZzZXQgXHUwMDNlIG1hcF9iaXRzIHx8XG4mIzQzO1x0XHRcdCAgICBiaXRmaWVsZF9zaXplIFx1MDAzZSBtYXBfYml0cyAtIGJpdF9vZmZzZXQpIHtcbiYjNDM7XHRcdFx0XHRwX2VycihcJiMzNDtJbnZhbGlkIGJpdGZpZWxkIGxheW91dCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgbWVtYmVyX25hbWUpO1xuJiM0MztcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Yml0ZmllbGRfZW5kID0gKF9fdTY0KWJpdF9vZmZzZXQgJiM0MzsgYml0ZmllbGRfc2l6ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdG9mZnNldCA9IG0tXHUwMDNlb2Zmc2V0IC8gODtcbi1cdFx0aWYgKG5leHRfb2Zmc2V0IFx1MDAzYyBvZmZzZXQpXG4tXHRcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdGNoYXIgX19wYWRkaW5nXyVkWyV1XTtcXG5cJiMzNDssIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbiYjNDM7XHRcdGlmIChiaXRfb2Zmc2V0ICUgOCB8fCBiaXRfb2Zmc2V0IFx1MDAzYyBiaXRmaWVsZF9lbmQpIHtcbiYjNDM7XHRcdFx0cF9lcnIoXCYjMzQ7SW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9mZnNldCA9IGJpdF9vZmZzZXQgLyA4O1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2MgbmV4dF9vZmZzZXQgfHwgb2Zmc2V0IFx1MDAzZSBtYXBfc2l6ZSkge1xuJiM0MztcdFx0XHRwX2VycihcJiMzNDtJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcJiMzNDssIG1lbWJlcl9uYW1lKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRtZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLVx1MDAzZXR5cGUsIFx1MDAyNm1lbWJlcl90eXBlX2lkKTtcbiBcdFx0c3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHtcbiBcdFx0Y2FzZSBCVEZfS0lORF9JTlQ6XG4gXHRcdGNhc2UgQlRGX0tJTkRfRkxPQVQ6XG4gXHRcdGNhc2UgQlRGX0tJTkRfRU5VTTpcbiBcdFx0Y2FzZSBCVEZfS0lORF9FTlVNNjQ6XG4tXHRcdFx0Lyogc2NhbGFyIHR5cGUgKi9cbi1cdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0XCYjMzQ7KTtcbi1cdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbi1cdFx0XHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFx1MDAyNm9wdHMpO1xuLVx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdHBfZXJyKFwmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFwmIzM0OywgbWVtYmVyX25hbWUsIGVycik7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cHJpbnRmKFwmIzM0OztcXG5cJiMzNDspO1xuLVxuJiM0MztcdFx0XHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xuIFx0XHRcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlcl90eXBlX2lkKTtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0cF9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXG5cJiMzNDssIG1lbWJlcl9uYW1lLCBzaXplKTtcbi1cdFx0XHRcdGVyciA9IHNpemU7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTtcbiYjNDM7XHRcdFx0YWxpZ24gPSBidGZfX2FsaWduX29mKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEJURl9LSU5EX1BUUjpcbiBcdFx0XHRpZiAocmVzb2x2ZV9mdW5jX3B0cihidGYsIG0tXHUwMDNldHlwZSwgTlVMTCkpIHtcbi1cdFx0XHRcdC8qIEZ1bmN0aW9uIHBvaW50ZXIgKi9cbi1cdFx0XHRcdHByaW50ZihcJiMzNDtcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xcblwmIzM0OywgbWVtYmVyX25hbWUpO1xuLVxuLVx0XHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHZvaWQgKik7XG4mIzQzO1x0XHRcdFx0c2hhZG93X2tpbmQgPSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSO1xuJiM0MztcdFx0XHRcdHNpemUgPSBzaXplb2Yodm9pZCAqKTtcbiYjNDM7XHRcdFx0XHRhbGlnbiA9IF9fYWxpZ25vZl9fKHZvaWQgKik7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0LyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3JcbkBAIC0xMTA4LDM0ICYjNDM7MTEyNSw2NCBAQCBzdGF0aWMgaW50IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqaWRlbnQsXG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogVW5zdXBwb3J0ZWQgdHlwZXNcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFR5cGVzIG90aGVyIHRoYW4gc2NhbGFyIHR5cGVzIGFuZCBmdW5jdGlvblxuLVx0XHRcdCAqIHBvaW50ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBvcmRlciB0b1xuLVx0XHRcdCAqIHByZXZlbnQgY29uZmxpY3RzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBjYXVzZWRcbi1cdFx0XHQgKiBieSBtdWx0aXBsZSBkZWZpbml0aW9ucy4gRm9yIGluc3RhbmNlLCBpZiB0aGVcbi1cdFx0XHQgKiBzdHJ1Y3QgdHlwZSBGT08gaXMgdXNlZCBpbiBhIHN0cnVjdF9vcHMgbWFwLFxuLVx0XHRcdCAqIGJwZnRvb2wgaGFzIHRvIGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBGT08sXG4tXHRcdFx0ICogd2hpY2ggbWF5IHJlc3VsdCBpbiBjb25mbGljdHMgaWYgRk9PIGlzIGRlZmluZWRcbi1cdFx0XHQgKiBpbiBkaWZmZXJlbnQgc2tlbGV0b24gZmlsZXMuXG4tXHRcdFx0ICovXG4mIzQzO1x0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7XG4gXHRcdFx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuLVx0XHRcdGlmIChzaXplIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRwX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxcblwmIzM0OywgbWVtYmVyX25hbWUsIHNpemUpO1xuLVx0XHRcdFx0ZXJyID0gc2l6ZTtcbiYjNDM7XHRcdFx0YWxpZ24gPSAxO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2l6ZSBcdTAwM2MgMCB8fCBhbGlnbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBzaXplIFx1MDAzYyAwID8gc2l6ZSA6IGFsaWduO1xuJiM0MztcdFx0XHRwX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBsYXlvdXQgb2YgJXM6ICVkXCYjMzQ7LCBtZW1iZXJfbmFtZSwgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoKF9fdTMyKXNpemUgXHUwMDNlIG1hcF9zaXplIC0gb2Zmc2V0IHx8XG4mIzQzO1x0XHQgICAgKGFsaWduIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgJSBhbGlnbikpIHtcbiYjNDM7XHRcdFx0cF9lcnIoXCYjMzQ7SW52YWxpZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0X29mZnNldCBcdTAwM2Mgb2Zmc2V0KVxuJiM0MztcdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcblwmIzM0OywgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoc2hhZG93X2tpbmQpIHtcbiYjNDM7XHRcdGNhc2UgU1RfT1BTX1NIQURPV19TQ0FMQVI6XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDtcXHRcXHRcXHRcJiMzNDspO1xuJiM0MztcdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbiYjNDM7XHRcdFx0ZXJyID0gYnRmX2R1bXBfX2VtaXRfdHlwZV9kZWNsKGQsIG1lbWJlcl90eXBlX2lkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdHBfZXJyKFwmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICBtZW1iZXJfbmFtZSwgZXJyKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OztcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgU1RfT1BTX1NIQURPV19GVU5DX1BUUjpcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqJXM7XFxuXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBTVF9PUFNfU0hBRE9XX09QQVFVRTpcbiYjNDM7XHRcdFx0LyogQXZvaWQgZW1pdHRpbmcgbmFtZWQgdHlwZXMgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoXG4mIzQzO1x0XHRcdCAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3Vuc3VwcG9ydGVkXyVkWyVkXTtcXG5cJiMzNDssIGksIHNpemUpO1xuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4mIzQzO1x0XHRtYXhfYWxpZ24gPSBtYXgobWF4X2FsaWduLCBhbGlnbik7XG4mIzQzO1x0XHRiaXRmaWVsZF9lbmQgPSAwO1xuIFx0fVxuIFxuLVx0LyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovXG4tXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtYXBfdHlwZV9pZCk7XG4tXHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIChfX3UzMilzaXplKVxuLVx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXG5cJiMzNDssIHNpemUgLSBuZXh0X29mZnNldCk7XG4mIzQzO1x0aWYgKG1hcF9zaXplICUgbWF4X2FsaWduKSB7XG4mIzQzO1x0XHRwX2VycihcJiMzNDtJbnZhbGlkIHNpemUgZm9yIHN0cnVjdF9vcHMgdHlwZSAlc1wmIzM0OywgaWRlbnQpO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG1hcF9zaXplKVxuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdGNoYXIgX19wYWRkaW5nX2VuZFsldV07XFxuXCYjMzQ7LCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbiBcbiBvdXQ6XG4gXHRidGZfZHVtcF9fZnJlZShkKTtcbkBAIC0xMTc3LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIGludCBnZW5fc3Rfb3BzX3NoYWRvd190eXBlKGNvbnN0IGNoYXIgKm9ial9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNcbiBcbiBcdHByaW50ZihcJiMzNDtcXHRcXHRzdHJ1Y3QgJXNfXyVzX18lcyB7XFxuXCYjMzQ7LCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XG4gXG4tXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xuJiM0MztcdGVyciA9IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKGJ0ZiwgaWRlbnQsIG1hcF90eXBlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtMTE3NSw2ICYjNDM7MTE3NSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsICprZXJuX21lbWJlciwgKmtlcm5fZGF0YV9tZW1iZXI7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICprZXJuX3R5cGUsICprZXJuX3Z0eXBlO1xuIFx0X191MzIgaSwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkLCBrZXJuX2RhdGFfb2ZmO1xuJiM0MztcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmogPSBtYXAtXHUwMDNlb2JqO1xuIFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gb2JqLVx1MDAzZWJ0ZjtcbiBcdHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xuQEAgLTExOTUsNiAmIzQzOzExOTYsMjUgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0a2Vybl9idGYgPSBtb2RfYnRmID8gbW9kX2J0Zi1cdTAwM2VidGYgOiBvYmotXHUwMDNlYnRmX3ZtbGludXg7XG4mIzQzO1x0a2Vybl9kYXRhX21lbWJlcl9pZHggPSBrZXJuX2RhdGFfbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl92dHlwZSk7XG4mIzQzO1x0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBhIGJpdGZpZWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXAtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RTVVA7XG4mIzQzO1x0fVxuJiM0MztcdGtlcm5fZGF0YV9iaXRfb2ZmID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KGtlcm5fdnR5cGUsIGtlcm5fZGF0YV9tZW1iZXJfaWR4KTtcbiYjNDM7XHRpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX2JpdF9vZmYgLyA4O1xuJiM0MztcdGlmIChrZXJuX2RhdGFfb2ZmIFx1MDAzZSBrZXJuX3Z0eXBlLVx1MDAzZXNpemUgfHxcbiYjNDM7XHQgICAga2Vybl90eXBlLVx1MDAzZXNpemUgXHUwMDNlIGtlcm5fdnR5cGUtXHUwMDNlc2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCB2YWx1ZSB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXAtXHUwMDNlbmFtZSwga2Vybl92dHlwZS1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxuXCYjMzQ7LFxuIFx0XHQgbWFwLVx1MDAzZW5hbWUsIHN0X29wcy1cdTAwM2V0eXBlX2lkLCBrZXJuX3R5cGVfaWQsIGtlcm5fdnR5cGVfaWQpO1xuQEAgLTEyMDgsMjkgJiM0MzsxMjI4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRkYXRhID0gc3Rfb3BzLVx1MDAzZWRhdGE7XG4tXHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX21lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuIFx0a2Vybl9kYXRhID0gc3Rfb3BzLVx1MDAzZWtlcm5fdmRhdGEgJiM0Mzsga2Vybl9kYXRhX29mZjtcbiBcbiBcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnRmX3ZsZW4odHlwZSk7IGkmIzQzOyYjNDM7LCBtZW1iZXImIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbXR5cGUsICprZXJuX210eXBlO1xuLVx0XHRfX3UzMiBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDtcbiYjNDM7XHRcdF9fdTMyIGJpdF9vZmZzZXQsIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xuIFx0XHR2b2lkICptZGF0YSwgKmtlcm5fbWRhdGE7XG4gXHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiBcdFx0X19zNjQgbXNpemUsIGtlcm5fbXNpemU7XG4mIzQzO1x0XHRfX3U2NCBtYWNjZXNzX3NpemU7XG4gXHRcdF9fdTMyIG1vZmYsIGtlcm5fbW9mZjtcbiBcdFx0X191MzIga2Vybl9tZW1iZXJfaWR4O1xuIFx0XHRjb25zdCBjaGFyICptbmFtZTtcbiBcbiBcdFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0bW9mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRtZGF0YSA9IGRhdGEgJiM0MzsgbW9mZjtcbiYjNDM7XHRcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUodHlwZSwgaSkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogbG9jYWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT1RTVVA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRtc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIFx0XHRpZiAobXNpemUgXHUwMDNjIDApIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgc2l6ZSBvZiBtZW1iZXIgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuIFx0XHRcdHJldHVybiBtc2l6ZTtcbiBcdFx0fVxuJiM0MztcdFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIFx1MDAyNm10eXBlX2lkKTtcbiYjNDM7XHRcdG1hY2Nlc3Nfc2l6ZSA9IG1zaXplO1xuJiM0MztcdFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpIFx1MDAyNlx1MDAyNiBtYWNjZXNzX3NpemUgXHUwMDNjIHNpemVvZihwcm9nKSlcbiYjNDM7XHRcdFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xuJiM0MztcdFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldCh0eXBlLCBpKTtcbiYjNDM7XHRcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtb2ZmID0gYml0X29mZnNldCAvIDg7XG4mIzQzO1x0XHRpZiAobW9mZiBcdTAwM2UgdHlwZS1cdTAwM2VzaXplIHx8IG1hY2Nlc3Nfc2l6ZSBcdTAwM2UgdHlwZS1cdTAwM2VzaXplIC0gbW9mZikge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lLCB0eXBlLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmO1xuIFxuIFx0XHRrZXJuX21lbWJlciA9IGZpbmRfbWVtYmVyX2J5X25hbWUoa2Vybl9idGYsIGtlcm5fdHlwZSwgbW5hbWUpO1xuIFx0XHRpZiAoIWtlcm5fbWVtYmVyKSB7XG5AQCAtMTI1OSwxNyAmIzQzOzEzMDAsMzMgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXG4gXHRcdGtlcm5fbWVtYmVyX2lkeCA9IGtlcm5fbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl90eXBlKTtcbi1cdFx0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSB8fFxuLVx0XHQgICAgYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9UU1VQO1xuIFx0XHR9XG4gXG4tXHRcdGtlcm5fbW9mZiA9IGtlcm5fbWVtYmVyLVx1MDAzZW9mZnNldCAvIDg7XG4mIzQzO1x0XHRrZXJuX21zaXplID0gYnRmX19yZXNvbHZlX3NpemUoa2Vybl9idGYsIGtlcm5fbWVtYmVyLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogZmFpbGVkIHRvIHJlc29sdmUgdGhlIGtlcm5lbCBzaXplIG9mIG1lbWJlciAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4ga2Vybl9tc2l6ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpO1xuJiM0MztcdFx0aWYgKGJpdF9vZmZzZXQgJSA4KSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrZXJuX21vZmYgPSBiaXRfb2Zmc2V0IC8gODtcbiYjNDM7XHRcdGlmIChrZXJuX21vZmYgXHUwMDNlIGtlcm5fdHlwZS1cdTAwM2VzaXplIHx8XG4mIzQzO1x0XHQgICAgKF9fdTY0KWtlcm5fbXNpemUgXHUwMDNlIGtlcm5fdHlwZS1cdTAwM2VzaXplIC0ga2Vybl9tb2ZmKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBrZXJuZWwgc3RydWN0X29wcyB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwga2Vybl90eXBlLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0a2Vybl9tZGF0YSA9IGtlcm5fZGF0YSAmIzQzOyBrZXJuX21vZmY7XG4gXG4tXHRcdG10eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLCBcdTAwMjZtdHlwZV9pZCk7XG4gXHRcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlLFxuIFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrZXJuX210eXBlX2lkKTtcbiBcdFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXHUwMDNlaW5mbykgIT1cbkBAIC0xMjgxLDcgJiM0MzsxMzM4LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXG4gXHRcdGlmIChidGZfaXNfcHRyKG10eXBlKSkge1xuLVx0XHRcdHByb2cgPSAqKHZvaWQgKiopbWRhdGE7XG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZwcm9nLCBtZGF0YSwgc2l6ZW9mKHByb2cpKTtcbiBcdFx0XHQvKiBqdXN0IGxpa2UgZm9yICFrZXJuX21lbWJlciBjYXNlIGFib3ZlLCByZXNldCBkZWNsYXJhdGl2ZWx5XG4gXHRcdFx0ICogc2V0IChhdCBjb21waWxlIHRpbWUpIHByb2dyYW0mIzM5O3MgYXV0bG9hZCB0byBmYWxzZSxcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbkBAIC0xMzUyLDggJiM0MzsxNDA5LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tdHlwZV9pZCk7XG4tXHRcdGlmIChrZXJuX21zaXplIFx1MDAzYyAwIHx8IG1zaXplICE9IGtlcm5fbXNpemUpIHtcbiYjNDM7XHRcdGlmIChtc2l6ZSAhPSBrZXJuX21zaXplKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogRXJyb3IgaW4gc2l6ZSBvZiBtZW1iZXIgJXM6ICV6ZCAhPSAlemQoa2VybmVsKVxcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwgKHNzaXplX3QpbXNpemUsXG4gXHRcdFx0XHQoc3NpemVfdClrZXJuX21zaXplKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcbmluZGV4IDc1YTBkZWE1MTFiM2YuLjQxMDI5ZWJiMjJmMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvZXBvbGwuaFx1MDAzZVxuQEAgLTE1MCw2ICYjNDM7MTUxLDkxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cnVjdF9vcHNfbW9kdWxlICpza2VsO1xuJiM0MztcdGNoYXIgKmxvZyA9IE5VTEw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfbW9kdWxlX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX29wZW5fbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSwgZGF0YSksXG4mIzQzO1x0XHQgICAgICAgMCwgXCYjMzQ7bG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXRcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxuJiM0MztcdFx0ICAgICAgIDgsIFwmIzM0O2xvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShzaXplb2YoKnNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbiYjNDM7XHRcdCAgICAgICBicGZfbWFwX192YWx1ZV9zaXplKHNrZWwtXHUwMDNlbWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtsb2NhbF9iaXRmaWVsZF9zaGFkb3dfc2l6ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZC1cdTAwM2VkYXRhID0gMTtcbiYjNDM7XHRza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZC1cdTAwM2VvbmVieXRlID0gMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9fc2V0X2F1dG9jcmVhdGUoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQsIHRydWUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZW5hYmxlX2xvY2FsX2JpdGZpZWxkX21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbiYjNDM7XHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGVyciwgLUVOT1RTVVAsIFwmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX2xvYWRfbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCYjMzQ7bG9jYWwgYml0ZmllbGQgZXh0cmFfYml0ZmllbGQgaXMgbm90IHN1cHBvcnRlZFwmIzM0OyxcbiYjNDM7XHRcdFx0ICBcJiMzNDtsb2NhbF9iaXRmaWVsZF9yZWplY3Rpb25fbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0ZnJlZShsb2cpO1xuJiM0MztcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX21vZHVsZSAqc2tlbDtcbiYjNDM7XHRzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuJiM0MztcdHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0Y2hhciAqbG9nID0gTlVMTDtcbiYjNDM7XHRpbnQgZXJyLCB0eXBlX2lkO1xuJiM0MztcbiYjNDM7XHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfb3Blbl9iYWRfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnBmX29iamVjdF9fYnRmKHNrZWwtXHUwMDNlb2JqKTtcbiYjNDM7XHR0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgQlRGX0tJTkRfU1RSVUNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVCh0eXBlX2lkLCAwLCBcJiMzNDtmaW5kX2JhZF9vZmZzZXRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0dHlwZSA9IChzdHJ1Y3QgYnRmX3R5cGUgKilidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIodHlwZSwgXCYjMzQ7Z2V0X2JhZF9vZmZzZXRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuJiM0MztcdG1lbWJlci1cdTAwM2VvZmZzZXQgPSB0eXBlLVx1MDAzZXNpemUgKiA4O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2VuYWJsZV9iYWRfb2Zmc2V0X21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbiYjNDM7XHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfbG9hZF9iYWRfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O21lbWJlciBleHRyYSBpcyBvdXRzaWRlIHRoZSA0LWJ5dGUgbG9jYWwgc3RydWN0X29wcyB0eXBlXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O2JhZF9vZmZzZXRfcmVqZWN0aW9uX2xvZ1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGZyZWUobG9nKTtcbiYjNDM7XHRzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgc2lnbmF0dXJlIG9mIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIHRoZVxuICAqIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlIGRlZmluZWQgaW4gdGhlIEJQRiBwcm9ncmFtLiBUaGlzIG1pc21hdGNoXG4gICogc2hvdWxkIGJlIGFsbG93ZWQgYXMgbG9uZyBhcyB0aGUgYmVoYXZpb3Igb2YgdGhlIG9wZXJhdG9yIHByb2dyYW1cbkBAIC0zMDQsNiAmIzQzOzM5MCwxMCBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19sb2FkKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzdHJ1Y3Rfb3BzX25vdF96ZXJvZWRcJiMzNDspKVxuIFx0XHR0ZXN0X3N0cnVjdF9vcHNfbm90X3plcm9lZCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RydWN0X29wc19iYWRfbWVtYmVyX29mZnNldFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlXCYjMzQ7KSlcbiBcdFx0dGVzdF9zdHJ1Y3Rfb3BzX2luY29tcGF0aWJsZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RydWN0X29wc19udWxsX291dF9jYlwmIzM0OykpXG5AQCAtMzE0LDQgJiM0Mzs0MDQsMyBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpXG4gXHRcdHRlc3RfZGV0YWNoX2xpbmsoKTtcbiBcdFJVTl9URVNUUyh1bnN1cHBvcnRlZF9vcHMpO1xuIH1cbi1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5pbmRleCA3MWM0MjBjM2E1YTZjLi44NDZiNWE5MzRkYzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5AQCAtNzYsNiAmIzQzOzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7XG4gXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2xvY2FsX2JpdGZpZWxkIHtcbiYjNDM7XHRpbnQgZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dHJhX2JpdGZpZWxkMjoxO1xuJiM0MztcdGNoYXIgb25lYnl0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2xvY2FsX2JpdGZpZWxkIHRlc3Rtb2RfbG9jYWxfYml0ZmllbGQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dHJhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz8uc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB0ZXN0bW9kX2JhZF9vZmZzZXQ7XG4mIzQzO1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdHZvaWQgKCp0ZXN0XzIpKGludCAqYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKaW5kZXggYTUwNTQwZWY2NTIxYy4uZDkzMDczZDVlN2UzMiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKQEAgLTEwNDQsNjIgJiM0MzsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpCiB9CiAKIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1hcF90eXBlLCBfX3UzMiBtYXBfdHlwZV9pZCkKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSkKIHsKJiM0MzsJZW51bSBzdF9vcHNfc2hhZG93X2tpbmQgewomIzQzOwkJU1RfT1BTX1NIQURPV19TQ0FMQVIsCiYjNDM7CQlTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLAomIzQzOwkJU1RfT1BTX1NIQURPV19PUEFRVUUsCiYjNDM7CX07CiAJTElCQlBGX09QVFMoYnRmX2R1bXBfZW1pdF90eXBlX2RlY2xfb3B0cywgb3B0cywgLmluZGVudF9sZXZlbCA9IDMpOwogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7Ci0JX191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7CiYjNDM7CV9fdTY0IGJpdGZpZWxkX2VuZCA9IDAsIG1hcF9iaXRzOwomIzQzOwlfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplOwomIzQzOwlfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7CiAJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm07CiAJc3RydWN0IGJ0Zl9kdW1wICpkID0gTlVMTDsKIAljb25zdCBjaGFyICptZW1iZXJfbmFtZTsKIAlfX3UzMiBtZW1iZXJfdHlwZV9pZDsKLQlpbnQgaSwgZXJyID0gMCwgbjsKLQlpbnQgc2l6ZTsKJiM0MzsJaW50IGFsaWduLCBlcnIgPSAwLCBpLCBtYXhfYWxpZ24gPSAxLCBuLCBzaXplOwomIzQzOwllbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDsKIAogCWQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpOwogCWlmICghZCkKIAkJcmV0dXJuIC1lcnJubzsKIAomIzQzOwltYXBfc2l6ZSA9IG1hcF90eXBlLSZndDtzaXplOwomIzQzOwltYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7CiAJbiA9IGJ0Zl92bGVuKG1hcF90eXBlKTsKIAlmb3IgKGkgPSAwLCBtID0gYnRmX21lbWJlcnMobWFwX3R5cGUpOyBpICZsdDsgbjsgaSYjNDM7JiM0MzssIG0mIzQzOyYjNDM7KSB7Ci0JCW1lbWJlcl90eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG0tJmd0O3R5cGUsICZhbXA7bWVtYmVyX3R5cGVfaWQpOwogCQltZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLSZndDtuYW1lX29mZik7CiYjNDM7CQliaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KG1hcF90eXBlLCBpKTsKJiM0MzsJCWJpdGZpZWxkX3NpemUgPSBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUobWFwX3R5cGUsIGkpOwomIzQzOwkJaWYgKGJpdGZpZWxkX3NpemUpIHsKJiM0MzsJCQlpZiAoKF9fdTY0KWJpdF9vZmZzZXQgJmx0OyBiaXRmaWVsZF9lbmQgfHwKJiM0MzsJCQkgICAgKF9fdTY0KWJpdF9vZmZzZXQgJmx0OyAoX191NjQpbmV4dF9vZmZzZXQgKiA4IHx8CiYjNDM7CQkJICAgIGJpdF9vZmZzZXQgJmd0OyBtYXBfYml0cyB8fAomIzQzOwkJCSAgICBiaXRmaWVsZF9zaXplICZndDsgbWFwX2JpdHMgLSBiaXRfb2Zmc2V0KSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7SW52YWxpZCBiaXRmaWVsZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssCiYjNDM7CQkJCSAgICAgIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJpdGZpZWxkX2VuZCA9IChfX3U2NCliaXRfb2Zmc2V0ICYjNDM7IGJpdGZpZWxkX3NpemU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJb2Zmc2V0ID0gbS0mZ3Q7b2Zmc2V0IC8gODsKLQkJaWYgKG5leHRfb2Zmc2V0ICZsdDsgb2Zmc2V0KQotCQkJcHJpbnRmKCYjMzQ7XHRcdFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xuJiMzNDssIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTsKJiM0MzsJCWlmIChiaXRfb2Zmc2V0ICUgOCB8fCBiaXRfb2Zmc2V0ICZsdDsgYml0ZmllbGRfZW5kKSB7CiYjNDM7CQkJcF9lcnIoJiMzNDtJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXMmIzM0OywgbWVtYmVyX25hbWUpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBiaXRfb2Zmc2V0IC8gODsKJiM0MzsJCWlmIChvZmZzZXQgJmx0OyBuZXh0X29mZnNldCB8fCBvZmZzZXQgJmd0OyBtYXBfc2l6ZSkgewomIzQzOwkJCXBfZXJyKCYjMzQ7SW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCiYjNDM7CQltZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLSZndDt0eXBlLCAmYW1wO21lbWJlcl90eXBlX2lkKTsKIAkJc3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHsKIAkJY2FzZSBCVEZfS0lORF9JTlQ6CiAJCWNhc2UgQlRGX0tJTkRfRkxPQVQ6CiAJCWNhc2UgQlRGX0tJTkRfRU5VTToKIAkJY2FzZSBCVEZfS0lORF9FTlVNNjQ6Ci0JCQkvKiBzY2FsYXIgdHlwZSAqLwotCQkJcHJpbnRmKCYjMzQ7XHRcdFx0JiMzNDspOwotCQkJb3B0cy5maWVsZF9uYW1lID0gbWVtYmVyX25hbWU7Ci0JCQllcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsICZhbXA7b3B0cyk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJcF9lcnIoJiMzNDtGYWlsZWQgdG8gZW1pdCB0eXBlIGRlY2xhcmF0aW9uIGZvciAlczogJWQmIzM0OywgbWVtYmVyX25hbWUsIGVycik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwcmludGYoJiMzNDs7XG4mIzM0Oyk7Ci0KJiM0MzsJCQlzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSOwogCQkJc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpOwotCQkJaWYgKHNpemUgJmx0OyAwKSB7Ci0JCQkJcF9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxuJiMzNDssIG1lbWJlcl9uYW1lLCBzaXplKTsKLQkJCQllcnIgPSBzaXplOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQluZXh0X29mZnNldCA9IG9mZnNldCAmIzQzOyBzaXplOwomIzQzOwkJCWFsaWduID0gYnRmX19hbGlnbl9vZihidGYsIG1lbWJlcl90eXBlX2lkKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRGX0tJTkRfUFRSOgogCQkJaWYgKHJlc29sdmVfZnVuY19wdHIoYnRmLCBtLSZndDt0eXBlLCBOVUxMKSkgewotCQkJCS8qIEZ1bmN0aW9uIHBvaW50ZXIgKi8KLQkJCQlwcmludGYoJiMzNDtcdFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xuJiMzNDssIG1lbWJlcl9uYW1lKTsKLQotCQkJCW5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemVvZih2b2lkICopOwomIzQzOwkJCQlzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfRlVOQ19QVFI7CiYjNDM7CQkJCXNpemUgPSBzaXplb2Yodm9pZCAqKTsKJiM0MzsJCQkJYWxpZ24gPSBfX2FsaWdub2ZfXyh2b2lkICopOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3IKQEAgLTExMDgsMzQgJiM0MzsxMTI1LDY0IEBAIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCwKIAkJCWZhbGx0aHJvdWdoOwogCiAJCWRlZmF1bHQ6Ci0JCQkvKiBVbnN1cHBvcnRlZCB0eXBlcwotCQkJICoKLQkJCSAqIFR5cGVzIG90aGVyIHRoYW4gc2NhbGFyIHR5cGVzIGFuZCBmdW5jdGlvbgotCQkJICogcG9pbnRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGluIG9yZGVyIHRvCi0JCQkgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkCi0JCQkgKiBieSBtdWx0aXBsZSBkZWZpbml0aW9ucy4gRm9yIGluc3RhbmNlLCBpZiB0aGUKLQkJCSAqIHN0cnVjdCB0eXBlIEZPTyBpcyB1c2VkIGluIGEgc3RydWN0X29wcyBtYXAsCi0JCQkgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLAotCQkJICogd2hpY2ggbWF5IHJlc3VsdCBpbiBjb25mbGljdHMgaWYgRk9PIGlzIGRlZmluZWQKLQkJCSAqIGluIGRpZmZlcmVudCBza2VsZXRvbiBmaWxlcy4KLQkJCSAqLwomIzQzOwkJCXNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7CiAJCQlzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7Ci0JCQlpZiAoc2l6ZSAmbHQ7IDApIHsKLQkJCQlwX2VycigmIzM0O0ZhaWxlZCB0byByZXNvbHZlIHNpemUgb2YgJXM6ICVkXG4mIzM0OywgbWVtYmVyX25hbWUsIHNpemUpOwotCQkJCWVyciA9IHNpemU7CiYjNDM7CQkJYWxpZ24gPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNpemUgJmx0OyAwIHx8IGFsaWduICZsdDsgMCkgewomIzQzOwkJCWVyciA9IHNpemUgJmx0OyAwID8gc2l6ZSA6IGFsaWduOwomIzQzOwkJCXBfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc29sdmUgbGF5b3V0IG9mICVzOiAlZCYjMzQ7LCBtZW1iZXJfbmFtZSwgZXJyKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWlmICgoX191MzIpc2l6ZSAmZ3Q7IG1hcF9zaXplIC0gb2Zmc2V0IHx8CiYjNDM7CQkgICAgKGFsaWduICZndDsgMSAmYW1wOyZhbXA7IG9mZnNldCAlIGFsaWduKSkgewomIzQzOwkJCXBfZXJyKCYjMzQ7SW52YWxpZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG5leHRfb2Zmc2V0ICZsdDsgb2Zmc2V0KQomIzQzOwkJCXByaW50ZigmIzM0O1x0XHRcdGNoYXIgX19wYWRkaW5nXyVkWyV1XTtcbiYjMzQ7LCBpLCBvZmZzZXQgLSBuZXh0X29mZnNldCk7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHNoYWRvd19raW5kKSB7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOgomIzQzOwkJCXByaW50ZigmIzM0O1x0XHRcdCYjMzQ7KTsKJiM0MzsJCQlvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTsKJiM0MzsJCQllcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsICZhbXA7b3B0cyk7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlwX2VycigmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZCYjMzQ7LAomIzQzOwkJCQkgICAgICBtZW1iZXJfbmFtZSwgZXJyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KJiM0MzsJCQlwcmludGYoJiMzNDs7XG4mIzM0Oyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfRlVOQ19QVFI6CiYjNDM7CQkJcHJpbnRmKCYjMzQ7XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcbiYjMzQ7LCBtZW1iZXJfbmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOgomIzQzOwkJCS8qIEF2b2lkIGVtaXR0aW5nIG5hbWVkIHR5cGVzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aAomIzQzOwkJCSAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLgomIzQzOwkJCSAqLwogCQkJcHJpbnRmKCYjMzQ7XHRcdFx0Y2hhciBfX3Vuc3VwcG9ydGVkXyVkWyVkXTtcbiYjMzQ7LCBpLCBzaXplKTsKLQotCQkJbmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKIAkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKIAkJfQomIzQzOwomIzQzOwkJbmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKJiM0MzsJCW1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTsKJiM0MzsJCWJpdGZpZWxkX2VuZCA9IDA7CiAJfQogCi0JLyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovCi0Jc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWFwX3R5cGVfaWQpOwotCWlmIChuZXh0X29mZnNldCAmbHQ7IChfX3UzMilzaXplKQotCQlwcmludGYoJiMzNDtcdFx0XHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xuJiMzNDssIHNpemUgLSBuZXh0X29mZnNldCk7CiYjNDM7CWlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikgewomIzQzOwkJcF9lcnIoJiMzNDtJbnZhbGlkIHNpemUgZm9yIHN0cnVjdF9vcHMgdHlwZSAlcyYjMzQ7LCBpZGVudCk7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKG5leHRfb2Zmc2V0ICZsdDsgbWFwX3NpemUpCiYjNDM7CQlwcmludGYoJiMzNDtcdFx0XHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xuJiMzNDssIG1hcF9zaXplIC0gbmV4dF9vZmZzZXQpOwogCiBvdXQ6CiAJYnRmX2R1bXBfX2ZyZWUoZCk7CkBAIC0xMTc3LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIGludCBnZW5fc3Rfb3BzX3NoYWRvd190eXBlKGNvbnN0IGNoYXIgKm9ial9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGMKIAogCXByaW50ZigmIzM0O1x0XHRzdHJ1Y3QgJXNfXyVzX18lcyB7XG4mIzM0Oywgb2JqX25hbWUsIGlkZW50LCB0eXBlX25hbWUpOwogCi0JZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUsIG1hcF90eXBlX2lkKTsKJiM0MzsJZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtMTE3NSw2ICYjNDM7MTE3NSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyOwogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmtlcm5fdHlwZSwgKmtlcm5fdnR5cGU7CiAJX191MzIgaSwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkLCBrZXJuX2RhdGFfb2ZmOwomIzQzOwlfX3UzMiBrZXJuX2RhdGFfYml0X29mZiwga2Vybl9kYXRhX21lbWJlcl9pZHg7CiAJc3RydWN0IGJwZl9vYmplY3QgKm9iaiA9IG1hcC0mZ3Q7b2JqOwogCWNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG9iai0mZ3Q7YnRmOwogCXN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzOwpAQCAtMTE5NSw2ICYjNDM7MTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApCiAJCXJldHVybiBlcnI7CiAKIAlrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLSZndDtidGYgOiBvYmotJmd0O2J0Zl92bWxpbnV4OwomIzQzOwlrZXJuX2RhdGFfbWVtYmVyX2lkeCA9IGtlcm5fZGF0YV9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3Z0eXBlKTsKJiM0MzsJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIGEgYml0ZmllbGRcbiYjMzQ7LAomIzQzOwkJCW1hcC0mZ3Q7bmFtZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1RTVVA7CiYjNDM7CX0KJiM0MzsJa2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpOwomIzQzOwlpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJbWFwLSZndDtuYW1lKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfYml0X29mZiAvIDg7CiYjNDM7CWlmIChrZXJuX2RhdGFfb2ZmICZndDsga2Vybl92dHlwZS0mZ3Q7c2l6ZSB8fAomIzQzOwkgICAga2Vybl90eXBlLSZndDtzaXplICZndDsga2Vybl92dHlwZS0mZ3Q7c2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIG91dHNpZGUgdGhlICV1LWJ5dGUga2VybmVsIHZhbHVlIHR5cGVcbiYjMzQ7LAomIzQzOwkJCW1hcC0mZ3Q7bmFtZSwga2Vybl92dHlwZS0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogdHlwZV9pZDoldSBrZXJuX3R5cGVfaWQ6JXUga2Vybl92dHlwZV9pZDoldVxuJiMzNDssCiAJCSBtYXAtJmd0O25hbWUsIHN0X29wcy0mZ3Q7dHlwZV9pZCwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkKTsKQEAgLTEyMDgsMjkgJiM0MzsxMjI4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhID0gc3Rfb3BzLSZndDtkYXRhOwotCWtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfbWVtYmVyLSZndDtvZmZzZXQgLyA4OwogCWtlcm5fZGF0YSA9IHN0X29wcy0mZ3Q7a2Vybl92ZGF0YSAmIzQzOyBrZXJuX2RhdGFfb2ZmOwogCiAJbWVtYmVyID0gYnRmX21lbWJlcnModHlwZSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGJ0Zl92bGVuKHR5cGUpOyBpJiM0MzsmIzQzOywgbWVtYmVyJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqa2Vybl9tdHlwZTsKLQkJX191MzIgbXR5cGVfaWQsIGtlcm5fbXR5cGVfaWQ7CiYjNDM7CQlfX3UzMiBiaXRfb2Zmc2V0LCBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDsKIAkJdm9pZCAqbWRhdGEsICprZXJuX21kYXRhOwogCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiAJCV9fczY0IG1zaXplLCBrZXJuX21zaXplOwomIzQzOwkJX191NjQgbWFjY2Vzc19zaXplOwogCQlfX3UzMiBtb2ZmLCBrZXJuX21vZmY7CiAJCV9fdTMyIGtlcm5fbWVtYmVyX2lkeDsKIAkJY29uc3QgY2hhciAqbW5hbWU7CiAKIAkJbW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLSZndDtuYW1lX29mZik7Ci0JCW1vZmYgPSBtZW1iZXItJmd0O29mZnNldCAvIDg7Ci0JCW1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmOwomIzQzOwkJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogbG9jYWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRU5PVFNVUDsKJiM0MzsJCX0KJiM0MzsKIAkJbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlci0mZ3Q7dHlwZSk7CiAJCWlmIChtc2l6ZSAmbHQ7IDApIHsKIAkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogZmFpbGVkIHRvIHJlc29sdmUgdGhlIHNpemUgb2YgbWVtYmVyICVzXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIG1uYW1lKTsKIAkJCXJldHVybiBtc2l6ZTsKIAkJfQomIzQzOwkJbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCAmYW1wO210eXBlX2lkKTsKJiM0MzsJCW1hY2Nlc3Nfc2l6ZSA9IG1zaXplOwomIzQzOwkJaWYgKGJ0Zl9pc19wdHIobXR5cGUpICZhbXA7JmFtcDsgbWFjY2Vzc19zaXplICZsdDsgc2l6ZW9mKHByb2cpKQomIzQzOwkJCW1hY2Nlc3Nfc2l6ZSA9IHNpemVvZihwcm9nKTsKJiM0MzsJCWJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQodHlwZSwgaSk7CiYjNDM7CQlpZiAoYml0X29mZnNldCAlIDgpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJbW9mZiA9IGJpdF9vZmZzZXQgLyA4OwomIzQzOwkJaWYgKG1vZmYgJmd0OyB0eXBlLSZndDtzaXplIHx8IG1hY2Nlc3Nfc2l6ZSAmZ3Q7IHR5cGUtJmd0O3NpemUgLSBtb2ZmKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcbiYjMzQ7LAomIzQzOwkJCQltYXAtJmd0O25hbWUsIG1uYW1lLCB0eXBlLSZndDtzaXplKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCW1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmOwogCiAJCWtlcm5fbWVtYmVyID0gZmluZF9tZW1iZXJfYnlfbmFtZShrZXJuX2J0Ziwga2Vybl90eXBlLCBtbmFtZSk7CiAJCWlmICgha2Vybl9tZW1iZXIpIHsKQEAgLTEyNTksMTcgJiM0MzsxMzAwLDMzIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCiAJCWtlcm5fbWVtYmVyX2lkeCA9IGtlcm5fbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl90eXBlKTsKLQkJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSB8fAotCQkgICAgYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkgewotCQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0OywKJiM0MzsJCWlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiAJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSk7CiAJCQlyZXR1cm4gLUVOT1RTVVA7CiAJCX0KIAotCQlrZXJuX21vZmYgPSBrZXJuX21lbWJlci0mZ3Q7b2Zmc2V0IC8gODsKJiM0MzsJCWtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tZW1iZXItJmd0O3R5cGUpOwomIzQzOwkJaWYgKGtlcm5fbXNpemUgJmx0OyAwKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUga2VybmVsIHNpemUgb2YgbWVtYmVyICVzXG4mIzM0OywKJiM0MzsJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSk7CiYjNDM7CQkJcmV0dXJuIGtlcm5fbXNpemU7CiYjNDM7CQl9CiYjNDM7CQliaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KTsKJiM0MzsJCWlmIChiaXRfb2Zmc2V0ICUgOCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJa2Vybl9tb2ZmID0gYml0X29mZnNldCAvIDg7CiYjNDM7CQlpZiAoa2Vybl9tb2ZmICZndDsga2Vybl90eXBlLSZndDtzaXplIHx8CiYjNDM7CQkgICAgKF9fdTY0KWtlcm5fbXNpemUgJmd0OyBrZXJuX3R5cGUtJmd0O3NpemUgLSBrZXJuX21vZmYpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBrZXJuZWwgc3RydWN0X29wcyB0eXBlXG4mIzM0OywKJiM0MzsJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSwga2Vybl90eXBlLSZndDtzaXplKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJa2Vybl9tZGF0YSA9IGtlcm5fZGF0YSAmIzQzOyBrZXJuX21vZmY7CiAKLQkJbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCAmYW1wO210eXBlX2lkKTsKIAkJa2Vybl9tdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoa2Vybl9idGYsIGtlcm5fbWVtYmVyLSZndDt0eXBlLAogCQkJCQkJICAgICZhbXA7a2Vybl9tdHlwZV9pZCk7CiAJCWlmIChCVEZfSU5GT19LSU5EKG10eXBlLSZndDtpbmZvKSAhPQpAQCAtMTI4MSw3ICYjNDM7MTMzOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCiAJCWlmIChidGZfaXNfcHRyKG10eXBlKSkgewotCQkJcHJvZyA9ICoodm9pZCAqKiltZGF0YTsKJiM0MzsJCQltZW1jcHkoJmFtcDtwcm9nLCBtZGF0YSwgc2l6ZW9mKHByb2cpKTsKIAkJCS8qIGp1c3QgbGlrZSBmb3IgIWtlcm5fbWVtYmVyIGNhc2UgYWJvdmUsIHJlc2V0IGRlY2xhcmF0aXZlbHkKIAkJCSAqIHNldCAoYXQgY29tcGlsZSB0aW1lKSBwcm9ncmFtJiMzOTtzIGF1dGxvYWQgdG8gZmFsc2UsCiAJCQkgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTEwKQEAgLTEzNTIsOCAmIzQzOzE0MDksNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tdHlwZV9pZCk7Ci0JCWlmIChrZXJuX21zaXplICZsdDsgMCB8fCBtc2l6ZSAhPSBrZXJuX21zaXplKSB7CiYjNDM7CQlpZiAobXNpemUgIT0ga2Vybl9tc2l6ZSkgewogCQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBFcnJvciBpbiBzaXplIG9mIG1lbWJlciAlczogJXpkICE9ICV6ZChrZXJuZWwpXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIG1uYW1lLCAoc3NpemVfdCltc2l6ZSwKIAkJCQkoc3NpemVfdClrZXJuX21zaXplKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYwppbmRleCA3NWEwZGVhNTExYjNmLi40MTAyOWViYjIyZjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7c3lzL2Vwb2xsLmgmZ3Q7CkBAIC0xNTAsNiAmIzQzOzE1MSw5MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbm90X3plcm9lZCh2b2lkKQogCXN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7CiYjNDM7CWNoYXIgKmxvZyA9IE5VTEw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2xvY2FsX2JpdGZpZWxkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtJmd0O3N0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIGRhdGEpLAomIzQzOwkJICAgICAgIDAsICYjMzQ7bG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXQmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLSZndDtzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLCBvbmVieXRlKSwKJiM0MzsJCSAgICAgICA4LCAmIzM0O2xvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9FUShzaXplb2YoKnNrZWwtJmd0O3N0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksCiYjNDM7CQkgICAgICAgYnBmX21hcF9fdmFsdWVfc2l6ZShza2VsLSZndDttYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLAomIzQzOwkJICAgICAgICYjMzQ7bG9jYWxfYml0ZmllbGRfc2hhZG93X3NpemUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi8KJiM0MzsJc2tlbC0mZ3Q7c3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLSZndDtkYXRhID0gMTsKJiM0MzsJc2tlbC0mZ3Q7c3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLSZndDtvbmVieXRlID0gMTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9fc2V0X2F1dG9jcmVhdGUoc2tlbC0mZ3Q7bWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2VuYWJsZV9sb2NhbF9iaXRmaWVsZF9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7CiYjNDM7CWxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVOT1RTVVAsICYjMzQ7c3RydWN0X29wc19tb2R1bGVfbG9hZF9sb2NhbF9iaXRmaWVsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0hBU19TVUJTVFIobG9nLCAmIzM0O2xvY2FsIGJpdGZpZWxkIGV4dHJhX2JpdGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQmIzM0OywKJiM0MzsJCQkgICYjMzQ7bG9jYWxfYml0ZmllbGRfcmVqZWN0aW9uX2xvZyYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlmcmVlKGxvZyk7CiYjNDM7CXN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdHJ1Y3Rfb3BzX21vZHVsZSAqc2tlbDsKJiM0MzsJc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjsKJiM0MzsJc3RydWN0IGJ0Zl90eXBlICp0eXBlOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWNoYXIgKmxvZyA9IE5VTEw7CiYjNDM7CWludCBlcnIsIHR5cGVfaWQ7CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2JhZF9vZmZzZXQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWJ0ZiA9IGJwZl9vYmplY3RfX2J0Zihza2VsLSZndDtvYmopOwomIzQzOwl0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsICYjMzQ7YnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCYjMzQ7LAomIzQzOwkJCQkJIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKHR5cGVfaWQsIDAsICYjMzQ7ZmluZF9iYWRfb2Zmc2V0X3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXR5cGUgPSAoc3RydWN0IGJ0Zl90eXBlICopYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0eXBlLCAmIzM0O2dldF9iYWRfb2Zmc2V0X3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpOwomIzQzOwltZW1iZXItJmd0O29mZnNldCA9IHR5cGUtJmd0O3NpemUgKiA4OwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLSZndDttYXBzLnRlc3Rtb2RfYmFkX29mZnNldCwgdHJ1ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtlbmFibGVfYmFkX29mZnNldF9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7CiYjNDM7CWxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9sb2FkX2JhZF9vZmZzZXQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGxvZywgJiMzNDttZW1iZXIgZXh0cmEgaXMgb3V0c2lkZSB0aGUgNC1ieXRlIGxvY2FsIHN0cnVjdF9vcHMgdHlwZSYjMzQ7LAomIzQzOwkJCSAgJiMzNDtiYWRfb2Zmc2V0X3JlamVjdGlvbl9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJZnJlZShsb2cpOwomIzQzOwlzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc2lnbmF0dXJlIG9mIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIHRoZQogICogZnVuY3Rpb24gcG9pbnRlciBwcm90b3R5cGUgZGVmaW5lZCBpbiB0aGUgQlBGIHByb2dyYW0uIFRoaXMgbWlzbWF0Y2gKICAqIHNob3VsZCBiZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRvciBwcm9ncmFtCkBAIC0zMDQsNiAmIzQzOzM5MCwxMCBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpCiAJCXRlc3Rfc3RydWN0X29wc19sb2FkKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdHJ1Y3Rfb3BzX25vdF96ZXJvZWQmIzM0OykpCiAJCXRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCYjMzQ7KSkKJiM0MzsJCXRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQmIzM0OykpCiYjNDM7CQl0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlJiMzNDspKQogCQl0ZXN0X3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdHJ1Y3Rfb3BzX251bGxfb3V0X2NiJiMzNDspKQpAQCAtMzE0LDQgJiM0Mzs0MDQsMyBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpCiAJCXRlc3RfZGV0YWNoX2xpbmsoKTsKIAlSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTsKIH0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwppbmRleCA3MWM0MjBjM2E1YTZjLi44NDZiNWE5MzRkYzgzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwpAQCAtNzYsNiAmIzQzOzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7CiAJLnplcm9lZF9vcCA9ICh2b2lkICopemVyb2VkX29wLAogfTsKIAomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19sb2NhbF9iaXRmaWVsZCB7CiYjNDM7CWludCBkYXRhOwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7CiYjNDM7CXVuc2lnbmVkIGludCBleHRyYV9iaXRmaWVsZDI6MTsKJiM0MzsJY2hhciBvbmVieXRlOwomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Py5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQgdGVzdG1vZF9sb2NhbF9iaXRmaWVsZDsKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB7CiYjNDM7CXVuc2lnbmVkIGludCBleHRyYTsKJiM0Mzt9OwomIzQzOwomIzQzO1NFQygmIzM0Oz8uc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXQgdGVzdG1vZF9iYWRfb2Zmc2V0OwomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2luY29tcGF0aWJsZSB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIAl2b2lkICgqdGVzdF8yKShpbnQgKmEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCB0aGUgdXNlciB3YW50cyBtZSB0byB2ZXQgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZmlsZXMgd2VyZSBldmVuIHRvdWNoZWQuIFRoZSBkaWZmIGhpZ2hsaWdodHM6IGB0b29scy9icGYvYnBmdG9vbC9nZW4uY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNgLgoKV2FpdCwgZXZlcnl0aGluZyBpcyBpbiBgdG9vbHMvYCEgVGhpcyBpcyBzdGFydGluZyB0byBsb29rIHN1c3BpY2lvdXMuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIGxldCYjMzk7cyB2ZXJpZnkgaWYgdGhhdCYjMzk7cyAqdHJ1bHkqIHRoZSBjYXNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvdGhlciBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIGBIRUFEYCB1c2luZyBgZ2l0YCBpZiBwb3NzaWJsZSwgb3IgYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgZGlmZiBvdXRwdXQgaXRzZWxmLgoKT2theSwgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmZXIgdG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQuIFdlJiMzOTtyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJlamVjdCB0aGlzLiBJdCBzYXlzIEkgc2hvdWxkIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgb25seSBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIHVuZGVyIHNwZWNpZmljIG5vbi1rZXJuZWwgY2F0ZWdvcmllcy4gVGhlc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHVzZXItc3BhY2UgY2hhbmdlcyBsaWtlIHNlbGYtdGVzdHMgb3Igc2NyaXB0cyB0aGF0ICpkb24mIzM5O3QqIGltcGFjdCB0aGUga2VybmVsIGltYWdlLCBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZC9LY29uZmlnIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGNvbXBpbGVkIGxvZ2ljLgoKU28sIHNpbmNlIGFsbCBjaGFuZ2VzIGFyZSBpbiBgdG9vbHMvYCwgSSYjMzk7bGwgY2hlY2sgYW5kIGVuc3VyZSB0aG9zZSBmaWxlcyBkb24mIzM5O3QgdHJpZ2dlciBhbnl0aGluZyBuZWdhdGl2ZSBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLiBJIG5lZWQgdG8gYmUgKnN1cmUqIHRoYXQgdGhlcmUgYXJlIG5vIGhpZGRlbiBjaGFuZ2VzIGFueXdoZXJlIGVsc2UuIEkgc2hvdWxkIHJ1biBhIHRvb2wgb3Igc2NyaXB0IHRvIGRvdWJsZS1jaGVjayBgZ2l0IGRpZmZgIG9yIHRoZSBgbG9nYCB0byBhdm9pZCBhbnkgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk1CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDY0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gmIzM5O3MgRnV6emluZyBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXJlIHRoZXNlIGZpbGUgbW9kaWZpY2F0aW9ucyByZXNpZGUuIEkgc2VlIGB0b29scy9icGYvYnBmdG9vbC9nZW4uY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNgLiBDcnVjaWFsbHksIGFsbCBvZiB0aGVzZSBhcmUgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBgdG9vbHMvYnBmL2JwZnRvb2xgIGlzIGEgdXNlci1zcGFjZSB0b29sLiBgdG9vbHMvbGliL2JwZmAgaXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkuIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0c2Agb2J2aW91c2x5IGhvbGRzIHVzZXItc3BhY2Ugc2VsZi10ZXN0cy4gTm9uZSBvZiB0aGlzIGRpcmVjdGx5IHRvdWNoZXMgYW55dGhpbmcgY29yZSB0byB0aGUga2VybmVsOiBubyBga2VybmVsL2AsIG5vIGBuZXQvYCwgbm8gYGRyaXZlcnMvYCwgbm8gYGZzL2AsIGFuZCBubyBgaW5jbHVkZS9gIHRoYXQgd291bGQgYWZmZWN0IHRoZSBrZXJuZWwmIzM5O3MgY29tcGlsYXRpb24gaW50byBgdm1saW51eGAgb3IgYSBrZXJuZWwgbW9kdWxlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgY29uZmlybSB0aGF0IGxpYmJwZiBpcyBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBZZXAsIHVzZXItc3BhY2UgbGlicmFyeSBpdCBpcy4KClRoZSBrZXJuZWwmIzM5O3MgQlBGIHZlcmlmaWVyIGFuZCBgc3RydWN0X29wc2AgaW1wbGVtZW50YXRpb24gbGl2ZSBpbiBga2VybmVsL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHRoZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4KCkFjY29yZGluZyB0byBTZWN0aW9uIDIgb2YgdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBjbGVhciBjYXNlOiAmIzM0O1VzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDsgU28sIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLgoKR2l2ZW4gYFdvcnRoRnV6emluZz1mYWxzZWAsIGxldCYjMzk7cyBjaGVjayB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjcnlzdGFsIGNsZWFyLgoKRm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBbXWAgKG9yIG51bGwpLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXWAsIGFuZCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBoYXZlIHRvIGV4cGxhaW4gdGhhdCBhbGwgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlcnNwYWNlIHRvb2xzLCBsaWJyYXJpZXMsIGFuZCBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL2AgKHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gKSwgYW5kIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy4gVGh1cywgdGhpcyBwYXRjaCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLgoKSSYjMzk7dmUgZ290IGl0LiBObyBzdWJ0bGV0aWVzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG5lZ2F0aXZlIGNhc2UuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6MDU6MzUuNDQ5NTE2ODk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg2NTg2OTI4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGJwZnRvb2wgaW4gdG9vbHMvYnBmL2JwZnRvb2wsIGxpYmJwZiBpbiB0b29scy9saWIvYnBmLCBhbmQgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGRvZXMgbm90IHdhcnJhbnQga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS40NDk1MjI0MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ1NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTU6MDU6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbmluZGV4IGE1MDU0MGVmNjUyMWMuLmQ5MzA3M2Q1ZTdlMzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbkBAIC0xMDQ0LDYyICsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSwgX191MzIgbWFwX3R5cGVfaWQpXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWFwX3R5cGUpXFxuIHtcXG4rXFx0ZW51bSBzdF9vcHNfc2hhZG93X2tpbmQge1xcbitcXHRcXHRTVF9PUFNfU0hBRE9XX1NDQUxBUixcXG4rXFx0XFx0U1RfT1BTX1NIQURPV19GVU5DX1BUUixcXG4rXFx0XFx0U1RfT1BTX1NIQURPV19PUEFRVUUsXFxuK1xcdH07XFxuIFxcdExJQkJQRl9PUFRTKGJ0Zl9kdW1wX2VtaXRfdHlwZV9kZWNsX29wdHMsIG9wdHMsIC5pbmRlbnRfbGV2ZWwgPSAzKTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTtcXG4tXFx0X191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XFxuK1xcdF9fdTY0IGJpdGZpZWxkX2VuZCA9IDAsIG1hcF9iaXRzO1xcbitcXHRfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplO1xcbitcXHRfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptO1xcbiBcXHRzdHJ1Y3QgYnRmX2R1bXAgKmQgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICptZW1iZXJfbmFtZTtcXG4gXFx0X191MzIgbWVtYmVyX3R5cGVfaWQ7XFxuLVxcdGludCBpLCBlcnIgPSAwLCBuO1xcbi1cXHRpbnQgc2l6ZTtcXG4rXFx0aW50IGFsaWduLCBlcnIgPSAwLCBpLCBtYXhfYWxpZ24gPSAxLCBuLCBzaXplO1xcbitcXHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDtcXG4gXFxuIFxcdGQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpO1xcbiBcXHRpZiAoIWQpXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuIFxcbitcXHRtYXBfc2l6ZSA9IG1hcF90eXBlLVxcdTAwM2VzaXplO1xcbitcXHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XFxuIFxcdG4gPSBidGZfdmxlbihtYXBfdHlwZSk7XFxuIFxcdGZvciAoaSA9IDAsIG0gPSBidGZfbWVtYmVycyhtYXBfdHlwZSk7IGkgXFx1MDAzYyBuOyBpKyssIG0rKykge1xcbi1cXHRcXHRtZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLVxcdTAwM2V0eXBlLCBcXHUwMDI2bWVtYmVyX3R5cGVfaWQpO1xcbiBcXHRcXHRtZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLVxcdTAwM2VuYW1lX29mZik7XFxuK1xcdFxcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQobWFwX3R5cGUsIGkpO1xcbitcXHRcXHRiaXRmaWVsZF9zaXplID0gYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKG1hcF90eXBlLCBpKTtcXG4rXFx0XFx0aWYgKGJpdGZpZWxkX3NpemUpIHtcXG4rXFx0XFx0XFx0aWYgKChfX3U2NCliaXRfb2Zmc2V0IFxcdTAwM2MgYml0ZmllbGRfZW5kIHx8XFxuK1xcdFxcdFxcdCAgICAoX191NjQpYml0X29mZnNldCBcXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcXG4rXFx0XFx0XFx0ICAgIGJpdF9vZmZzZXQgXFx1MDAzZSBtYXBfYml0cyB8fFxcbitcXHRcXHRcXHQgICAgYml0ZmllbGRfc2l6ZSBcXHUwMDNlIG1hcF9iaXRzIC0gYml0X29mZnNldCkge1xcbitcXHRcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBiaXRmaWVsZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRiaXRmaWVsZF9lbmQgPSAoX191NjQpYml0X29mZnNldCArIGJpdGZpZWxkX3NpemU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRvZmZzZXQgPSBtLVxcdTAwM2VvZmZzZXQgLyA4O1xcbi1cXHRcXHRpZiAobmV4dF9vZmZzZXQgXFx1MDAzYyBvZmZzZXQpXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcXFxuXFxcIiwgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xcbitcXHRcXHRpZiAoYml0X29mZnNldCAlIDggfHwgYml0X29mZnNldCBcXHUwMDNjIGJpdGZpZWxkX2VuZCkge1xcbitcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIiwgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0ID0gYml0X29mZnNldCAvIDg7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyBuZXh0X29mZnNldCB8fCBvZmZzZXQgXFx1MDAzZSBtYXBfc2l6ZSkge1xcbitcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIiwgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXG4rXFx0XFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cXHUwMDNldHlwZSwgXFx1MDAyNm1lbWJlcl90eXBlX2lkKTtcXG4gXFx0XFx0c3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHtcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9JTlQ6XFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfRkxPQVQ6XFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfRU5VTTpcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9FTlVNNjQ6XFxuLVxcdFxcdFxcdC8qIHNjYWxhciB0eXBlICovXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIik7XFxuLVxcdFxcdFxcdG9wdHMuZmllbGRfbmFtZSA9IG1lbWJlcl9uYW1lO1xcbi1cXHRcXHRcXHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFxcdTAwMjZvcHRzKTtcXG4tXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIGVtaXQgdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXM6ICVkXFxcIiwgbWVtYmVyX25hbWUsIGVycik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiO1xcXFxuXFxcIik7XFxuLVxcbitcXHRcXHRcXHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xcbiBcXHRcXHRcXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXFxcblxcXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcXG4rXFx0XFx0XFx0YWxpZ24gPSBidGZfX2FsaWduX29mKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfUFRSOlxcbiBcXHRcXHRcXHRpZiAocmVzb2x2ZV9mdW5jX3B0cihidGYsIG0tXFx1MDAzZXR5cGUsIE5VTEwpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIEZ1bmN0aW9uIHBvaW50ZXIgKi9cXG4tXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJcXFxcdFxcXFx0XFxcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xcXFxuXFxcIiwgbWVtYmVyX25hbWUpO1xcbi1cXG4tXFx0XFx0XFx0XFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yodm9pZCAqKTtcXG4rXFx0XFx0XFx0XFx0c2hhZG93X2tpbmQgPSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSO1xcbitcXHRcXHRcXHRcXHRzaXplID0gc2l6ZW9mKHZvaWQgKik7XFxuK1xcdFxcdFxcdFxcdGFsaWduID0gX19hbGlnbm9mX18odm9pZCAqKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0LyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3JcXG5AQCAtMTEwOCwzNCArMTEyNSw2NCBAQCBzdGF0aWMgaW50IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqaWRlbnQsXFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0LyogVW5zdXBwb3J0ZWQgdHlwZXNcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogVHlwZXMgb3RoZXIgdGhhbiBzY2FsYXIgdHlwZXMgYW5kIGZ1bmN0aW9uXFxuLVxcdFxcdFxcdCAqIHBvaW50ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBvcmRlciB0b1xcbi1cXHRcXHRcXHQgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkXFxuLVxcdFxcdFxcdCAqIGJ5IG11bHRpcGxlIGRlZmluaXRpb25zLiBGb3IgaW5zdGFuY2UsIGlmIHRoZVxcbi1cXHRcXHRcXHQgKiBzdHJ1Y3QgdHlwZSBGT08gaXMgdXNlZCBpbiBhIHN0cnVjdF9vcHMgbWFwLFxcbi1cXHRcXHRcXHQgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLFxcbi1cXHRcXHRcXHQgKiB3aGljaCBtYXkgcmVzdWx0IGluIGNvbmZsaWN0cyBpZiBGT08gaXMgZGVmaW5lZFxcbi1cXHRcXHRcXHQgKiBpbiBkaWZmZXJlbnQgc2tlbGV0b24gZmlsZXMuXFxuLVxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfT1BBUVVFO1xcbiBcXHRcXHRcXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXFxcblxcXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gc2l6ZTtcXG4rXFx0XFx0XFx0YWxpZ24gPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNpemUgXFx1MDAzYyAwIHx8IGFsaWduIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRlcnIgPSBzaXplIFxcdTAwM2MgMCA/IHNpemUgOiBhbGlnbjtcXG4rXFx0XFx0XFx0cF9lcnIoXFxcIkZhaWxlZCB0byByZXNvbHZlIGxheW91dCBvZiAlczogJWRcXFwiLCBtZW1iZXJfbmFtZSwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKChfX3UzMilzaXplIFxcdTAwM2UgbWFwX3NpemUgLSBvZmZzZXQgfHxcXG4rXFx0XFx0ICAgIChhbGlnbiBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICUgYWxpZ24pKSB7XFxuK1xcdFxcdFxcdHBfZXJyKFxcXCJJbnZhbGlkIGxheW91dCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcXFwiLCBtZW1iZXJfbmFtZSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmV4dF9vZmZzZXQgXFx1MDAzYyBvZmZzZXQpXFxuK1xcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcXFxuXFxcIiwgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xcbitcXG4rXFx0XFx0c3dpdGNoIChzaGFkb3dfa2luZCkge1xcbitcXHRcXHRjYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIpO1xcbitcXHRcXHRcXHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcXG4rXFx0XFx0XFx0ZXJyID0gYnRmX2R1bXBfX2VtaXRfdHlwZV9kZWNsKGQsIG1lbWJlcl90eXBlX2lkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0XFx0cF9lcnIoXFxcIkZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG1lbWJlcl9uYW1lLCBlcnIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwcmludGYoXFxcIjtcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSOlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqJXM7XFxcXG5cXFwiLCBtZW1iZXJfbmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOlxcbitcXHRcXHRcXHQvKiBBdm9pZCBlbWl0dGluZyBuYW1lZCB0eXBlcyB0aGF0IG1pZ2h0IGNvbmZsaWN0IHdpdGhcXG4rXFx0XFx0XFx0ICogZGVmaW5pdGlvbnMgZnJvbSBvdGhlciBza2VsZXRvbnMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdGNoYXIgX191bnN1cHBvcnRlZF8lZFslZF07XFxcXG5cXFwiLCBpLCBzaXplKTtcXG4tXFxuLVxcdFxcdFxcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRuZXh0X29mZnNldCA9IG9mZnNldCArIHNpemU7XFxuK1xcdFxcdG1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTtcXG4rXFx0XFx0Yml0ZmllbGRfZW5kID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovXFxuLVxcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1hcF90eXBlX2lkKTtcXG4tXFx0aWYgKG5leHRfb2Zmc2V0IFxcdTAwM2MgKF9fdTMyKXNpemUpXFxuLVxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXFxcblxcXCIsIHNpemUgLSBuZXh0X29mZnNldCk7XFxuK1xcdGlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikge1xcbitcXHRcXHRwX2VycihcXFwiSW52YWxpZCBzaXplIGZvciBzdHJ1Y3Rfb3BzIHR5cGUgJXNcXFwiLCBpZGVudCk7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmIChuZXh0X29mZnNldCBcXHUwMDNjIG1hcF9zaXplKVxcbitcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdGNoYXIgX19wYWRkaW5nX2VuZFsldV07XFxcXG5cXFwiLCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcXG4gXFxuIG91dDpcXG4gXFx0YnRmX2R1bXBfX2ZyZWUoZCk7XFxuQEAgLTExNzcsNyArMTIyNCw3IEBAIHN0YXRpYyBpbnQgZ2VuX3N0X29wc19zaGFkb3dfdHlwZShjb25zdCBjaGFyICpvYmpfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjXFxuIFxcbiBcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRzdHJ1Y3QgJXNfXyVzX18lcyB7XFxcXG5cXFwiLCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XFxuIFxcbi1cXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xcbitcXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtMTE3NSw2ICsxMTc1LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICprZXJuX3R5cGUsICprZXJuX3Z0eXBlO1xcbiBcXHRfX3UzMiBpLCBrZXJuX3R5cGVfaWQsIGtlcm5fdnR5cGVfaWQsIGtlcm5fZGF0YV9vZmY7XFxuK1xcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iaiA9IG1hcC1cXHUwMDNlb2JqO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGYgPSBvYmotXFx1MDAzZWJ0ZjtcXG4gXFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7XFxuQEAgLTExOTUsNiArMTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLVxcdTAwM2VidGYgOiBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4O1xcbitcXHRrZXJuX2RhdGFfbWVtYmVyX2lkeCA9IGtlcm5fZGF0YV9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3Z0eXBlKTtcXG4rXFx0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBhIGJpdGZpZWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuK1xcdH1cXG4rXFx0a2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpO1xcbitcXHRpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfYml0X29mZiAvIDg7XFxuK1xcdGlmIChrZXJuX2RhdGFfb2ZmIFxcdTAwM2Uga2Vybl92dHlwZS1cXHUwMDNlc2l6ZSB8fFxcbitcXHQgICAga2Vybl90eXBlLVxcdTAwM2VzaXplIFxcdTAwM2Uga2Vybl92dHlwZS1cXHUwMDNlc2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCB2YWx1ZSB0eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIGtlcm5fdnR5cGUtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0cHJfZGVidWcoXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxcXG5cXFwiLFxcbiBcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBzdF9vcHMtXFx1MDAzZXR5cGVfaWQsIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCk7XFxuQEAgLTEyMDgsMjkgKzEyMjgsNTAgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGRhdGEgPSBzdF9vcHMtXFx1MDAzZWRhdGE7XFxuLVxcdGtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfbWVtYmVyLVxcdTAwM2VvZmZzZXQgLyA4O1xcbiBcXHRrZXJuX2RhdGEgPSBzdF9vcHMtXFx1MDAzZWtlcm5fdmRhdGEgKyBrZXJuX2RhdGFfb2ZmO1xcbiBcXG4gXFx0bWVtYmVyID0gYnRmX21lbWJlcnModHlwZSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBidGZfdmxlbih0eXBlKTsgaSsrLCBtZW1iZXIrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqa2Vybl9tdHlwZTtcXG4tXFx0XFx0X191MzIgbXR5cGVfaWQsIGtlcm5fbXR5cGVfaWQ7XFxuK1xcdFxcdF9fdTMyIGJpdF9vZmZzZXQsIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xcbiBcXHRcXHR2b2lkICptZGF0YSwgKmtlcm5fbWRhdGE7XFxuIFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcXG4gXFx0XFx0X19zNjQgbXNpemUsIGtlcm5fbXNpemU7XFxuK1xcdFxcdF9fdTY0IG1hY2Nlc3Nfc2l6ZTtcXG4gXFx0XFx0X191MzIgbW9mZiwga2Vybl9tb2ZmO1xcbiBcXHRcXHRfX3UzMiBrZXJuX21lbWJlcl9pZHg7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKm1uYW1lO1xcbiBcXG4gXFx0XFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVxcdTAwM2VuYW1lX29mZik7XFxuLVxcdFxcdG1vZmYgPSBtZW1iZXItXFx1MDAzZW9mZnNldCAvIDg7XFxuLVxcdFxcdG1kYXRhID0gZGF0YSArIG1vZmY7XFxuK1xcdFxcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUodHlwZSwgaSkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGxvY2FsIGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdG1zaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRpZiAobXNpemUgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgc2l6ZSBvZiBtZW1iZXIgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gbXNpemU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBcXHUwMDI2bXR5cGVfaWQpO1xcbitcXHRcXHRtYWNjZXNzX3NpemUgPSBtc2l6ZTtcXG4rXFx0XFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpIFxcdTAwMjZcXHUwMDI2IG1hY2Nlc3Nfc2l6ZSBcXHUwMDNjIHNpemVvZihwcm9nKSlcXG4rXFx0XFx0XFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xcbitcXHRcXHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHR5cGUsIGkpO1xcbitcXHRcXHRpZiAoYml0X29mZnNldCAlIDgpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBtbmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1vZmYgPSBiaXRfb2Zmc2V0IC8gODtcXG4rXFx0XFx0aWYgKG1vZmYgXFx1MDAzZSB0eXBlLVxcdTAwM2VzaXplIHx8IG1hY2Nlc3Nfc2l6ZSBcXHUwMDNlIHR5cGUtXFx1MDAzZXNpemUgLSBtb2ZmKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIHR5cGUtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xcbiBcXG4gXFx0XFx0a2Vybl9tZW1iZXIgPSBmaW5kX21lbWJlcl9ieV9uYW1lKGtlcm5fYnRmLCBrZXJuX3R5cGUsIG1uYW1lKTtcXG4gXFx0XFx0aWYgKCFrZXJuX21lbWJlcikge1xcbkBAIC0xMjU5LDE3ICsxMzAwLDMzIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0a2Vybl9tZW1iZXJfaWR4ID0ga2Vybl9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3R5cGUpO1xcbi1cXHRcXHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpIHx8XFxuLVxcdFxcdCAgICBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbitcXHRcXHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGtlcm5fbW9mZiA9IGtlcm5fbWVtYmVyLVxcdTAwM2VvZmZzZXQgLyA4O1xcbitcXHRcXHRrZXJuX21zaXplID0gYnRmX19yZXNvbHZlX3NpemUoa2Vybl9idGYsIGtlcm5fbWVtYmVyLVxcdTAwM2V0eXBlKTtcXG4rXFx0XFx0aWYgKGtlcm5fbXNpemUgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUga2VybmVsIHNpemUgb2YgbWVtYmVyICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIG1uYW1lKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGtlcm5fbXNpemU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldChrZXJuX3R5cGUsIGtlcm5fbWVtYmVyX2lkeCk7XFxuK1xcdFxcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBtbmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGtlcm5fbW9mZiA9IGJpdF9vZmZzZXQgLyA4O1xcbitcXHRcXHRpZiAoa2Vybl9tb2ZmIFxcdTAwM2Uga2Vybl90eXBlLVxcdTAwM2VzaXplIHx8XFxuK1xcdFxcdCAgICAoX191NjQpa2Vybl9tc2l6ZSBcXHUwMDNlIGtlcm5fdHlwZS1cXHUwMDNlc2l6ZSAtIGtlcm5fbW9mZikge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCBzdHJ1Y3Rfb3BzIHR5cGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIGtlcm5fdHlwZS1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdFxcdGtlcm5fbWRhdGEgPSBrZXJuX2RhdGEgKyBrZXJuX21vZmY7XFxuIFxcbi1cXHRcXHRtdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIFxcdTAwMjZtdHlwZV9pZCk7XFxuIFxcdFxcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cXHUwMDNldHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrZXJuX210eXBlX2lkKTtcXG4gXFx0XFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXFx1MDAzZWluZm8pICE9XFxuQEAgLTEyODEsNyArMTMzOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpKSB7XFxuLVxcdFxcdFxcdHByb2cgPSAqKHZvaWQgKiopbWRhdGE7XFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2cHJvZywgbWRhdGEsIHNpemVvZihwcm9nKSk7XFxuIFxcdFxcdFxcdC8qIGp1c3QgbGlrZSBmb3IgIWtlcm5fbWVtYmVyIGNhc2UgYWJvdmUsIHJlc2V0IGRlY2xhcmF0aXZlbHlcXG4gXFx0XFx0XFx0ICogc2V0IChhdCBjb21waWxlIHRpbWUpIHByb2dyYW0ncyBhdXRsb2FkIHRvIGZhbHNlLFxcbiBcXHRcXHRcXHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcXG5AQCAtMTM1Miw4ICsxNDA5LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX210eXBlX2lkKTtcXG4tXFx0XFx0aWYgKGtlcm5fbXNpemUgXFx1MDAzYyAwIHx8IG1zaXplICE9IGtlcm5fbXNpemUpIHtcXG4rXFx0XFx0aWYgKG1zaXplICE9IGtlcm5fbXNpemUpIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IEVycm9yIGluIHNpemUgb2YgbWVtYmVyICVzOiAlemQgIT0gJXpkKGtlcm5lbClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIChzc2l6ZV90KW1zaXplLFxcbiBcXHRcXHRcXHRcXHQoc3NpemVfdClrZXJuX21zaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jXFxuaW5kZXggNzVhMGRlYTUxMWIzZi4uNDEwMjllYmIyMmYwMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9lcG9sbC5oXFx1MDAzZVxcbkBAIC0xNTAsNiArMTUxLDkxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKHZvaWQpXFxuIFxcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XFxuK1xcdGNoYXIgKmxvZyA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2xvY2FsX2JpdGZpZWxkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKG9mZnNldG9mKHR5cGVvZigqc2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSwgZGF0YSksXFxuK1xcdFxcdCAgICAgICAwLCBcXFwibG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXRcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtXFx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxcbitcXHRcXHQgICAgICAgOCwgXFxcImxvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2l6ZW9mKCpza2VsLVxcdTAwM2VzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLFxcbitcXHRcXHQgICAgICAgYnBmX21hcF9fdmFsdWVfc2l6ZShza2VsLVxcdTAwM2VtYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLFxcbitcXHRcXHQgICAgICAgXFxcImxvY2FsX2JpdGZpZWxkX3NoYWRvd19zaXplXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVxcdTAwM2VkYXRhID0gMTtcXG4rXFx0c2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVxcdTAwM2VvbmVieXRlID0gMTtcXG4rXFxuK1xcdGVyciA9IGJwZl9tYXBfX3NldF9hdXRvY3JlYXRlKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImVuYWJsZV9sb2NhbF9iaXRmaWVsZF9tYXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKHN0YXJ0X2xpYmJwZl9sb2dfY2FwdHVyZSgpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGVyciA9IHN0cnVjdF9vcHNfbW9kdWxlX19sb2FkKHNrZWwpO1xcbitcXHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FTk9UU1VQLCBcXFwic3RydWN0X29wc19tb2R1bGVfbG9hZF9sb2NhbF9iaXRmaWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXFxcImxvY2FsIGJpdGZpZWxkIGV4dHJhX2JpdGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWRcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJsb2NhbF9iaXRmaWVsZF9yZWplY3Rpb25fbG9nXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRmcmVlKGxvZyk7XFxuK1xcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XFxuK1xcdHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XFxuK1xcdHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRjaGFyICpsb2cgPSBOVUxMO1xcbitcXHRpbnQgZXJyLCB0eXBlX2lkO1xcbitcXG4rXFx0c2tlbCA9IHN0cnVjdF9vcHNfbW9kdWxlX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RydWN0X29wc19tb2R1bGVfb3Blbl9iYWRfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJ0ZiA9IGJwZl9vYmplY3RfX2J0Zihza2VsLVxcdTAwM2VvYmopO1xcbitcXHR0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFxcXCJicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IEJURl9LSU5EX1NUUlVDVCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHR5cGVfaWQsIDAsIFxcXCJmaW5kX2JhZF9vZmZzZXRfdHlwZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHR5cGUgPSAoc3RydWN0IGJ0Zl90eXBlICopYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcXFwiZ2V0X2JhZF9vZmZzZXRfdHlwZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRtZW1iZXIgPSBidGZfbWVtYmVycyh0eXBlKTtcXG4rXFx0bWVtYmVyLVxcdTAwM2VvZmZzZXQgPSB0eXBlLVxcdTAwM2VzaXplICogODtcXG4rXFxuK1xcdGVyciA9IGJwZl9tYXBfX3NldF9hdXRvY3JlYXRlKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZW5hYmxlX2JhZF9vZmZzZXRfbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcXG4rXFx0bG9nID0gc3RvcF9saWJicGZfbG9nX2NhcHR1cmUoKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwic3RydWN0X29wc19tb2R1bGVfbG9hZF9iYWRfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwibWVtYmVyIGV4dHJhIGlzIG91dHNpZGUgdGhlIDQtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJiYWRfb2Zmc2V0X3JlamVjdGlvbl9sb2dcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGZyZWUobG9nKTtcXG4rXFx0c3RydWN0X29wc19tb2R1bGVfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuIC8qIFRoZSBzaWduYXR1cmUgb2YgYW4gaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlXFxuICAqIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlIGRlZmluZWQgaW4gdGhlIEJQRiBwcm9ncmFtLiBUaGlzIG1pc21hdGNoXFxuICAqIHNob3VsZCBiZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRvciBwcm9ncmFtXFxuQEAgLTMwNCw2ICszOTAsMTAgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxcbiBcXHRcXHR0ZXN0X3N0cnVjdF9vcHNfbG9hZCgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X29wc19ub3RfemVyb2VkXFxcIikpXFxuIFxcdFxcdHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkXFxcIikpXFxuK1xcdFxcdHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X29wc19iYWRfbWVtYmVyX29mZnNldFxcXCIpKVxcbitcXHRcXHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0cnVjdF9vcHNfaW5jb21wYXRpYmxlXFxcIikpXFxuIFxcdFxcdHRlc3Rfc3RydWN0X29wc19pbmNvbXBhdGlibGUoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0cnVjdF9vcHNfbnVsbF9vdXRfY2JcXFwiKSlcXG5AQCAtMzE0LDQgKzQwNCwzIEBAIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19tb2R1bGUodm9pZClcXG4gXFx0XFx0dGVzdF9kZXRhY2hfbGluaygpO1xcbiBcXHRSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTtcXG4gfVxcbi1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xcbmluZGV4IDcxYzQyMGMzYTVhNmMuLjg0NmI1YTkzNGRjODMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xcbkBAIC03Niw2ICs3NiwyMyBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19femVyb2VkIHRlc3Rtb2RfemVyb2VkID0ge1xcbiBcXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXFxuIH07XFxuIFxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQge1xcbitcXHRpbnQgZGF0YTtcXG4rXFx0dW5zaWduZWQgaW50IGV4dHJhX2JpdGZpZWxkOjMxO1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQyOjE7XFxuK1xcdGNoYXIgb25lYnl0ZTtcXG4rfTtcXG4rXFxuK1NFQyhcXFwiPy5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQgdGVzdG1vZF9sb2NhbF9iaXRmaWVsZDtcXG4rXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHtcXG4rXFx0dW5zaWduZWQgaW50IGV4dHJhO1xcbit9O1xcbitcXG4rU0VDKFxcXCI/LnN0cnVjdF9vcHMubGlua1xcXCIpXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHRlc3Rtb2RfYmFkX29mZnNldDtcXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHR2b2lkICgqdGVzdF8yKShpbnQgKmEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS44OTk4NzAwNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4MjA4MzIxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGJwZnRvb2wgaW4gdG9vbHMvYnBmL2JwZnRvb2wsIGxpYmJwZiBpbiB0b29scy9saWIvYnBmLCBhbmQgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGRvZXMgbm90IHdhcnJhbnQga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbmluZGV4IGE1MDU0MGVmNjUyMWMuLmQ5MzA3M2Q1ZTdlMzIgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbkBAIC0xMDQ0LDYyICsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpXG4gfVxuIFxuIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWFwX3R5cGUsIF9fdTMyIG1hcF90eXBlX2lkKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSlcbiB7XG4rXHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCB7XG4rXHRcdFNUX09QU19TSEFET1dfU0NBTEFSLFxuK1x0XHRTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLFxuK1x0XHRTVF9PUFNfU0hBRE9XX09QQVFVRSxcbitcdH07XG4gXHRMSUJCUEZfT1BUUyhidGZfZHVtcF9lbWl0X3R5cGVfZGVjbF9vcHRzLCBvcHRzLCAuaW5kZW50X2xldmVsID0gMyk7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuLVx0X191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XG4rXHRfX3U2NCBiaXRmaWVsZF9lbmQgPSAwLCBtYXBfYml0cztcbitcdF9fdTMyIGJpdF9vZmZzZXQsIGJpdGZpZWxkX3NpemU7XG4rXHRfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbTtcbiBcdHN0cnVjdCBidGZfZHVtcCAqZCA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICptZW1iZXJfbmFtZTtcbiBcdF9fdTMyIG1lbWJlcl90eXBlX2lkO1xuLVx0aW50IGksIGVyciA9IDAsIG47XG4tXHRpbnQgc2l6ZTtcbitcdGludCBhbGlnbiwgZXJyID0gMCwgaSwgbWF4X2FsaWduID0gMSwgbiwgc2l6ZTtcbitcdGVudW0gc3Rfb3BzX3NoYWRvd19raW5kIHNoYWRvd19raW5kO1xuIFxuIFx0ZCA9IGJ0Zl9kdW1wX19uZXcoYnRmLCBjb2RlZ2VuX2J0Zl9kdW1wX3ByaW50ZiwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoIWQpXG4gXHRcdHJldHVybiAtZXJybm87XG4gXG4rXHRtYXBfc2l6ZSA9IG1hcF90eXBlLVx1MDAzZXNpemU7XG4rXHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XG4gXHRuID0gYnRmX3ZsZW4obWFwX3R5cGUpO1xuIFx0Zm9yIChpID0gMCwgbSA9IGJ0Zl9tZW1iZXJzKG1hcF90eXBlKTsgaSBcdTAwM2MgbjsgaSsrLCBtKyspIHtcbi1cdFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cdTAwM2V0eXBlLCBcdTAwMjZtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdG1lbWJlcl9uYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIG0tXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KG1hcF90eXBlLCBpKTtcbitcdFx0Yml0ZmllbGRfc2l6ZSA9IGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShtYXBfdHlwZSwgaSk7XG4rXHRcdGlmIChiaXRmaWVsZF9zaXplKSB7XG4rXHRcdFx0aWYgKChfX3U2NCliaXRfb2Zmc2V0IFx1MDAzYyBiaXRmaWVsZF9lbmQgfHxcbitcdFx0XHQgICAgKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcbitcdFx0XHQgICAgYml0X29mZnNldCBcdTAwM2UgbWFwX2JpdHMgfHxcbitcdFx0XHQgICAgYml0ZmllbGRfc2l6ZSBcdTAwM2UgbWFwX2JpdHMgLSBiaXRfb2Zmc2V0KSB7XG4rXHRcdFx0XHRwX2VycihcIkludmFsaWQgYml0ZmllbGQgbGF5b3V0IGZvciBzdHJ1Y3Rfb3BzIG1lbWJlciAlc1wiLFxuK1x0XHRcdFx0ICAgICAgbWVtYmVyX25hbWUpO1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRiaXRmaWVsZF9lbmQgPSAoX191NjQpYml0X29mZnNldCArIGJpdGZpZWxkX3NpemU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdFx0b2Zmc2V0ID0gbS1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG9mZnNldClcbi1cdFx0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ18lZFsldV07XFxuXCIsIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbitcdFx0aWYgKGJpdF9vZmZzZXQgJSA4IHx8IGJpdF9vZmZzZXQgXHUwMDNjIGJpdGZpZWxkX2VuZCkge1xuK1x0XHRcdHBfZXJyKFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCIsIG1lbWJlcl9uYW1lKTtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9mZnNldCA9IGJpdF9vZmZzZXQgLyA4O1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyBuZXh0X29mZnNldCB8fCBvZmZzZXQgXHUwMDNlIG1hcF9zaXplKSB7XG4rXHRcdFx0cF9lcnIoXCJJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcIiwgbWVtYmVyX25hbWUpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcbitcdFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cdTAwM2V0eXBlLCBcdTAwMjZtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdHN3aXRjaCAoYnRmX2tpbmQobWVtYmVyX3R5cGUpKSB7XG4gXHRcdGNhc2UgQlRGX0tJTkRfSU5UOlxuIFx0XHRjYXNlIEJURl9LSU5EX0ZMT0FUOlxuIFx0XHRjYXNlIEJURl9LSU5EX0VOVU06XG4gXHRcdGNhc2UgQlRGX0tJTkRfRU5VTTY0OlxuLVx0XHRcdC8qIHNjYWxhciB0eXBlICovXG4tXHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0XCIpO1xuLVx0XHRcdG9wdHMuZmllbGRfbmFtZSA9IG1lbWJlcl9uYW1lO1xuLVx0XHRcdGVyciA9IGJ0Zl9kdW1wX19lbWl0X3R5cGVfZGVjbChkLCBtZW1iZXJfdHlwZV9pZCwgXHUwMDI2b3B0cyk7XG4tXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0cF9lcnIoXCJGYWlsZWQgdG8gZW1pdCB0eXBlIGRlY2xhcmF0aW9uIGZvciAlczogJWRcIiwgbWVtYmVyX25hbWUsIGVycik7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cHJpbnRmKFwiO1xcblwiKTtcbi1cbitcdFx0XHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xuIFx0XHRcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlcl90eXBlX2lkKTtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0cF9lcnIoXCJGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxcblwiLCBtZW1iZXJfbmFtZSwgc2l6ZSk7XG4tXHRcdFx0XHRlcnIgPSBzaXplO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcbitcdFx0XHRhbGlnbiA9IGJ0Zl9fYWxpZ25fb2YoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgQlRGX0tJTkRfUFRSOlxuIFx0XHRcdGlmIChyZXNvbHZlX2Z1bmNfcHRyKGJ0ZiwgbS1cdTAwM2V0eXBlLCBOVUxMKSkge1xuLVx0XHRcdFx0LyogRnVuY3Rpb24gcG9pbnRlciAqL1xuLVx0XHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcXG5cIiwgbWVtYmVyX25hbWUpO1xuLVxuLVx0XHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yodm9pZCAqKTtcbitcdFx0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19GVU5DX1BUUjtcbitcdFx0XHRcdHNpemUgPSBzaXplb2Yodm9pZCAqKTtcbitcdFx0XHRcdGFsaWduID0gX19hbGlnbm9mX18odm9pZCAqKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBBbGwgcG9pbnRlciB0eXBlcyBhcmUgdW5zdXBwb3J0ZWQgZXhjZXB0IGZvclxuQEAgLTExMDgsMzQgKzExMjUsNjQgQEAgc3RhdGljIGludCB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmlkZW50LFxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIFVuc3VwcG9ydGVkIHR5cGVzXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBUeXBlcyBvdGhlciB0aGFuIHNjYWxhciB0eXBlcyBhbmQgZnVuY3Rpb25cbi1cdFx0XHQgKiBwb2ludGVycyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaW4gb3JkZXIgdG9cbi1cdFx0XHQgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkXG4tXHRcdFx0ICogYnkgbXVsdGlwbGUgZGVmaW5pdGlvbnMuIEZvciBpbnN0YW5jZSwgaWYgdGhlXG4tXHRcdFx0ICogc3RydWN0IHR5cGUgRk9PIGlzIHVzZWQgaW4gYSBzdHJ1Y3Rfb3BzIG1hcCxcbi1cdFx0XHQgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLFxuLVx0XHRcdCAqIHdoaWNoIG1heSByZXN1bHQgaW4gY29uZmxpY3RzIGlmIEZPTyBpcyBkZWZpbmVkXG4tXHRcdFx0ICogaW4gZGlmZmVyZW50IHNrZWxldG9uIGZpbGVzLlxuLVx0XHRcdCAqL1xuK1x0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7XG4gXHRcdFx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuLVx0XHRcdGlmIChzaXplIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRwX2VycihcIkZhaWxlZCB0byByZXNvbHZlIHNpemUgb2YgJXM6ICVkXFxuXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcbi1cdFx0XHRcdGVyciA9IHNpemU7XG4rXHRcdFx0YWxpZ24gPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzaXplIFx1MDAzYyAwIHx8IGFsaWduIFx1MDAzYyAwKSB7XG4rXHRcdFx0ZXJyID0gc2l6ZSBcdTAwM2MgMCA/IHNpemUgOiBhbGlnbjtcbitcdFx0XHRwX2VycihcIkZhaWxlZCB0byByZXNvbHZlIGxheW91dCBvZiAlczogJWRcIiwgbWVtYmVyX25hbWUsIGVycik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aWYgKChfX3UzMilzaXplIFx1MDAzZSBtYXBfc2l6ZSAtIG9mZnNldCB8fFxuK1x0XHQgICAgKGFsaWduIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgJSBhbGlnbikpIHtcbitcdFx0XHRwX2VycihcIkludmFsaWQgbGF5b3V0IGZvciBzdHJ1Y3Rfb3BzIG1lbWJlciAlc1wiLCBtZW1iZXJfbmFtZSk7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG9mZnNldClcbitcdFx0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ18lZFsldV07XFxuXCIsIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbitcbitcdFx0c3dpdGNoIChzaGFkb3dfa2luZCkge1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOlxuK1x0XHRcdHByaW50ZihcIlxcdFxcdFxcdFwiKTtcbitcdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbitcdFx0XHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFx1MDAyNm9wdHMpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHBfZXJyKFwiRmFpbGVkIHRvIGVtaXQgdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXM6ICVkXCIsXG4rXHRcdFx0XHQgICAgICBtZW1iZXJfbmFtZSwgZXJyKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbitcdFx0XHRwcmludGYoXCI7XFxuXCIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfRlVOQ19QVFI6XG4rXHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcXG5cIiwgbWVtYmVyX25hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOlxuK1x0XHRcdC8qIEF2b2lkIGVtaXR0aW5nIG5hbWVkIHR5cGVzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aFxuK1x0XHRcdCAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLlxuK1x0XHRcdCAqL1xuIFx0XHRcdHByaW50ZihcIlxcdFxcdFxcdGNoYXIgX191bnN1cHBvcnRlZF8lZFslZF07XFxuXCIsIGksIHNpemUpO1xuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiBcdFx0fVxuK1xuK1x0XHRuZXh0X29mZnNldCA9IG9mZnNldCArIHNpemU7XG4rXHRcdG1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTtcbitcdFx0Yml0ZmllbGRfZW5kID0gMDtcbiBcdH1cbiBcbi1cdC8qIENhbm5vdCBmYWlsIHNpbmNlIGl0IG11c3QgYmUgYSBzdHJ1Y3QgdHlwZSAqL1xuLVx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWFwX3R5cGVfaWQpO1xuLVx0aWYgKG5leHRfb2Zmc2V0IFx1MDAzYyAoX191MzIpc2l6ZSlcbi1cdFx0cHJpbnRmKFwiXFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXG5cIiwgc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbitcdGlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikge1xuK1x0XHRwX2VycihcIkludmFsaWQgc2l6ZSBmb3Igc3RydWN0X29wcyB0eXBlICVzXCIsIGlkZW50KTtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG1hcF9zaXplKVxuK1x0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xcblwiLCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbiBcbiBvdXQ6XG4gXHRidGZfZHVtcF9fZnJlZShkKTtcbkBAIC0xMTc3LDcgKzEyMjQsNyBAQCBzdGF0aWMgaW50IGdlbl9zdF9vcHNfc2hhZG93X3R5cGUoY29uc3QgY2hhciAqb2JqX25hbWUsIHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY1xuIFxuIFx0cHJpbnRmKFwiXFx0XFx0c3RydWN0ICVzX18lc19fJXMge1xcblwiLCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XG4gXG4tXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xuK1x0ZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uMjc5MWI0ODU4NTkzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xMTc1LDYgKzExNzUsNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqa2Vybl90eXBlLCAqa2Vybl92dHlwZTtcbiBcdF9fdTMyIGksIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCwga2Vybl9kYXRhX29mZjtcbitcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmogPSBtYXAtXHUwMDNlb2JqO1xuIFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gb2JqLVx1MDAzZWJ0ZjtcbiBcdHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xuQEAgLTExOTUsNiArMTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLVx1MDAzZWJ0ZiA6IG9iai1cdTAwM2VidGZfdm1saW51eDtcbitcdGtlcm5fZGF0YV9tZW1iZXJfaWR4ID0ga2Vybl9kYXRhX21lbWJlciAtIGJ0Zl9tZW1iZXJzKGtlcm5fdnR5cGUpO1xuK1x0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcbitcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaXMgYSBiaXRmaWVsZFxcblwiLFxuK1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbitcdFx0cmV0dXJuIC1FTk9UU1VQO1xuK1x0fVxuK1x0a2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpO1xuK1x0aWYgKGtlcm5fZGF0YV9iaXRfb2ZmICUgOCkge1xuK1x0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX2JpdF9vZmYgLyA4O1xuK1x0aWYgKGtlcm5fZGF0YV9vZmYgXHUwMDNlIGtlcm5fdnR5cGUtXHUwMDNlc2l6ZSB8fFxuK1x0ICAgIGtlcm5fdHlwZS1cdTAwM2VzaXplIFx1MDAzZSBrZXJuX3Z0eXBlLVx1MDAzZXNpemUgLSBrZXJuX2RhdGFfb2ZmKSB7XG4rXHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIG91dHNpZGUgdGhlICV1LWJ5dGUga2VybmVsIHZhbHVlIHR5cGVcXG5cIixcbitcdFx0XHRtYXAtXHUwMDNlbmFtZSwga2Vybl92dHlwZS1cdTAwM2VzaXplKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxuXCIsXG4gXHRcdCBtYXAtXHUwMDNlbmFtZSwgc3Rfb3BzLVx1MDAzZXR5cGVfaWQsIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCk7XG5AQCAtMTIwOCwyOSArMTIyOCw1MCBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZGF0YSA9IHN0X29wcy1cdTAwM2VkYXRhO1xuLVx0a2Vybl9kYXRhX29mZiA9IGtlcm5fZGF0YV9tZW1iZXItXHUwMDNlb2Zmc2V0IC8gODtcbiBcdGtlcm5fZGF0YSA9IHN0X29wcy1cdTAwM2VrZXJuX3ZkYXRhICsga2Vybl9kYXRhX29mZjtcbiBcbiBcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnRmX3ZsZW4odHlwZSk7IGkrKywgbWVtYmVyKyspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptdHlwZSwgKmtlcm5fbXR5cGU7XG4tXHRcdF9fdTMyIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xuK1x0XHRfX3UzMiBiaXRfb2Zmc2V0LCBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDtcbiBcdFx0dm9pZCAqbWRhdGEsICprZXJuX21kYXRhO1xuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4gXHRcdF9fczY0IG1zaXplLCBrZXJuX21zaXplO1xuK1x0XHRfX3U2NCBtYWNjZXNzX3NpemU7XG4gXHRcdF9fdTMyIG1vZmYsIGtlcm5fbW9mZjtcbiBcdFx0X191MzIga2Vybl9tZW1iZXJfaWR4O1xuIFx0XHRjb25zdCBjaGFyICptbmFtZTtcbiBcbiBcdFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0bW9mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xuK1x0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBsb2NhbCBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIsXG4rXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuK1x0XHRcdHJldHVybiAtRU5PVFNVUDtcbitcdFx0fVxuK1xuIFx0XHRtc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIFx0XHRpZiAobXNpemUgXHUwMDNjIDApIHtcbiBcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGZhaWxlZCB0byByZXNvbHZlIHRoZSBzaXplIG9mIG1lbWJlciAlc1xcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiBcdFx0XHRyZXR1cm4gbXNpemU7XG4gXHRcdH1cbitcdFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIFx1MDAyNm10eXBlX2lkKTtcbitcdFx0bWFjY2Vzc19zaXplID0gbXNpemU7XG4rXHRcdGlmIChidGZfaXNfcHRyKG10eXBlKSBcdTAwMjZcdTAwMjYgbWFjY2Vzc19zaXplIFx1MDAzYyBzaXplb2YocHJvZykpXG4rXHRcdFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xuK1x0XHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHR5cGUsIGkpO1xuK1x0XHRpZiAoYml0X29mZnNldCAlIDgpIHtcbitcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRtb2ZmID0gYml0X29mZnNldCAvIDg7XG4rXHRcdGlmIChtb2ZmIFx1MDAzZSB0eXBlLVx1MDAzZXNpemUgfHwgbWFjY2Vzc19zaXplIFx1MDAzZSB0eXBlLVx1MDAzZXNpemUgLSBtb2ZmKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwgdHlwZS1cdTAwM2VzaXplKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xuIFxuIFx0XHRrZXJuX21lbWJlciA9IGZpbmRfbWVtYmVyX2J5X25hbWUoa2Vybl9idGYsIGtlcm5fdHlwZSwgbW5hbWUpO1xuIFx0XHRpZiAoIWtlcm5fbWVtYmVyKSB7XG5AQCAtMTI1OSwxNyArMTMwMCwzMyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdH1cbiBcbiBcdFx0a2Vybl9tZW1iZXJfaWR4ID0ga2Vybl9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3R5cGUpO1xuLVx0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpIHx8XG4tXHRcdCAgICBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XG4tXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIsXG4rXHRcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiBcdFx0XHRyZXR1cm4gLUVOT1RTVVA7XG4gXHRcdH1cbiBcbi1cdFx0a2Vybl9tb2ZmID0ga2Vybl9tZW1iZXItXHUwMDNlb2Zmc2V0IC8gODtcbitcdFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlKTtcbitcdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDApIHtcbitcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGZhaWxlZCB0byByZXNvbHZlIHRoZSBrZXJuZWwgc2l6ZSBvZiBtZW1iZXIgJXNcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSk7XG4rXHRcdFx0cmV0dXJuIGtlcm5fbXNpemU7XG4rXHRcdH1cbitcdFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldChrZXJuX3R5cGUsIGtlcm5fbWVtYmVyX2lkeCk7XG4rXHRcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xuK1x0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRrZXJuX21vZmYgPSBiaXRfb2Zmc2V0IC8gODtcbitcdFx0aWYgKGtlcm5fbW9mZiBcdTAwM2Uga2Vybl90eXBlLVx1MDAzZXNpemUgfHxcbitcdFx0ICAgIChfX3U2NClrZXJuX21zaXplIFx1MDAzZSBrZXJuX3R5cGUtXHUwMDNlc2l6ZSAtIGtlcm5fbW9mZikge1xuK1x0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwga2Vybl90eXBlLVx1MDAzZXNpemUpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHRcdGtlcm5fbWRhdGEgPSBrZXJuX2RhdGEgKyBrZXJuX21vZmY7XG4gXG4tXHRcdG10eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLCBcdTAwMjZtdHlwZV9pZCk7XG4gXHRcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlLFxuIFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrZXJuX210eXBlX2lkKTtcbiBcdFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXHUwMDNlaW5mbykgIT1cbkBAIC0xMjgxLDcgKzEzMzgsNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpKSB7XG4tXHRcdFx0cHJvZyA9ICoodm9pZCAqKiltZGF0YTtcbitcdFx0XHRtZW1jcHkoXHUwMDI2cHJvZywgbWRhdGEsIHNpemVvZihwcm9nKSk7XG4gXHRcdFx0LyoganVzdCBsaWtlIGZvciAha2Vybl9tZW1iZXIgY2FzZSBhYm92ZSwgcmVzZXQgZGVjbGFyYXRpdmVseVxuIFx0XHRcdCAqIHNldCAoYXQgY29tcGlsZSB0aW1lKSBwcm9ncmFtJ3MgYXV0bG9hZCB0byBmYWxzZSxcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbkBAIC0xMzUyLDggKzE0MDksNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX210eXBlX2lkKTtcbi1cdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDAgfHwgbXNpemUgIT0ga2Vybl9tc2l6ZSkge1xuK1x0XHRpZiAobXNpemUgIT0ga2Vybl9tc2l6ZSkge1xuIFx0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogRXJyb3IgaW4gc2l6ZSBvZiBtZW1iZXIgJXM6ICV6ZCAhPSAlemQoa2VybmVsKVxcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lLCAoc3NpemVfdCltc2l6ZSxcbiBcdFx0XHRcdChzc2l6ZV90KWtlcm5fbXNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuaW5kZXggNzVhMGRlYTUxMWIzZi4uNDEwMjllYmIyMmYwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvZXBvbGwuaFx1MDAzZVxuQEAgLTE1MCw2ICsxNTEsOTEgQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX25vdF96ZXJvZWQodm9pZClcbiBcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGQodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XG4rXHRjaGFyICpsb2cgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic3RydWN0X29wc19tb2R1bGVfb3Blbl9sb2NhbF9iaXRmaWVsZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIGRhdGEpLFxuK1x0XHQgICAgICAgMCwgXCJsb2NhbF9iaXRmaWVsZF9kYXRhX29mZnNldFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxuK1x0XHQgICAgICAgOCwgXCJsb2NhbF9iaXRmaWVsZF9vbmVieXRlX29mZnNldFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2l6ZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksXG4rXHRcdCAgICAgICBicGZfbWFwX192YWx1ZV9zaXplKHNrZWwtXHUwMDNlbWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbitcdFx0ICAgICAgIFwibG9jYWxfYml0ZmllbGRfc2hhZG93X3NpemVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cbitcdHNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVx1MDAzZWRhdGEgPSAxO1xuK1x0c2tlbC1cdTAwM2VzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQtXHUwMDNlb25lYnl0ZSA9IDE7XG4rXG4rXHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZW5hYmxlX2xvY2FsX2JpdGZpZWxkX21hcFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHN0YXJ0X2xpYmJwZl9sb2dfY2FwdHVyZSgpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbitcdGxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7XG4rXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FTk9UU1VQLCBcInN0cnVjdF9vcHNfbW9kdWxlX2xvYWRfbG9jYWxfYml0ZmllbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJsb2NhbCBiaXRmaWVsZCBleHRyYV9iaXRmaWVsZCBpcyBub3Qgc3VwcG9ydGVkXCIsXG4rXHRcdFx0ICBcImxvY2FsX2JpdGZpZWxkX3JlamVjdGlvbl9sb2dcIik7XG4rXG4rY2xlYW51cDpcbitcdGZyZWUobG9nKTtcbitcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XG4rXHRzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuK1x0c3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuK1x0Y2hhciAqbG9nID0gTlVMTDtcbitcdGludCBlcnIsIHR5cGVfaWQ7XG4rXG4rXHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cnVjdF9vcHNfbW9kdWxlX29wZW5fYmFkX29mZnNldFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YnRmID0gYnBmX29iamVjdF9fYnRmKHNrZWwtXHUwMDNlb2JqKTtcbitcdHR5cGVfaWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0XCIsXG4rXHRcdFx0XHRcdCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKCFBU1NFUlRfR1QodHlwZV9pZCwgMCwgXCJmaW5kX2JhZF9vZmZzZXRfdHlwZVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0dHlwZSA9IChzdHJ1Y3QgYnRmX3R5cGUgKilidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcImdldF9iYWRfb2Zmc2V0X3R5cGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuK1x0bWVtYmVyLVx1MDAzZW9mZnNldCA9IHR5cGUtXHUwMDNlc2l6ZSAqIDg7XG4rXG4rXHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJlbmFibGVfYmFkX29mZnNldF9tYXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7XG4rXHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuK1x0aWYgKCFBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcInN0cnVjdF9vcHNfbW9kdWxlX2xvYWRfYmFkX29mZnNldFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcIm1lbWJlciBleHRyYSBpcyBvdXRzaWRlIHRoZSA0LWJ5dGUgbG9jYWwgc3RydWN0X29wcyB0eXBlXCIsXG4rXHRcdFx0ICBcImJhZF9vZmZzZXRfcmVqZWN0aW9uX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0ZnJlZShsb2cpO1xuK1x0c3RydWN0X29wc19tb2R1bGVfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIC8qIFRoZSBzaWduYXR1cmUgb2YgYW4gaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlXG4gICogZnVuY3Rpb24gcG9pbnRlciBwcm90b3R5cGUgZGVmaW5lZCBpbiB0aGUgQlBGIHByb2dyYW0uIFRoaXMgbWlzbWF0Y2hcbiAgKiBzaG91bGQgYmUgYWxsb3dlZCBhcyBsb25nIGFzIHRoZSBiZWhhdmlvciBvZiB0aGUgb3BlcmF0b3IgcHJvZ3JhbVxuQEAgLTMwNCw2ICszOTAsMTAgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxuIFx0XHR0ZXN0X3N0cnVjdF9vcHNfbG9hZCgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzdHJ1Y3Rfb3BzX25vdF96ZXJvZWRcIikpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInN0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGRcIikpXG4rXHRcdHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzdHJ1Y3Rfb3BzX2JhZF9tZW1iZXJfb2Zmc2V0XCIpKVxuK1x0XHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X29wc19pbmNvbXBhdGlibGVcIikpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19pbmNvbXBhdGlibGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X29wc19udWxsX291dF9jYlwiKSlcbkBAIC0zMTQsNCArNDA0LDMgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxuIFx0XHR0ZXN0X2RldGFjaF9saW5rKCk7XG4gXHRSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xuaW5kZXggNzFjNDIwYzNhNWE2Yy4uODQ2YjVhOTM0ZGM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xuQEAgLTc2LDYgKzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7XG4gXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXG4gfTtcbiBcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQge1xuK1x0aW50IGRhdGE7XG4rXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7XG4rXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQyOjE7XG4rXHRjaGFyIG9uZWJ5dGU7XG4rfTtcbitcbitTRUMoXCI/LnN0cnVjdF9vcHMubGlua1wiKVxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19sb2NhbF9iaXRmaWVsZCB0ZXN0bW9kX2xvY2FsX2JpdGZpZWxkO1xuK1xuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHtcbitcdHVuc2lnbmVkIGludCBleHRyYTtcbit9O1xuK1xuK1NFQyhcIj8uc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXQgdGVzdG1vZF9iYWRfb2Zmc2V0O1xuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdHZvaWQgKCp0ZXN0XzIpKGludCAqYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS44OTk4NzE5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDk3MjgwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHZldCB0aGlzIHBhdGNoIHNlcmllcyBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IGZpbGVzIHdlcmUgZXZlbiB0b3VjaGVkLiBUaGUgZGlmZiBoaWdobGlnaHRzOiBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jYC5cblxuV2FpdCwgZXZlcnl0aGluZyBpcyBpbiBgdG9vbHMvYCEgVGhpcyBpcyBzdGFydGluZyB0byBsb29rIHN1c3BpY2lvdXMuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIGxldCdzIHZlcmlmeSBpZiB0aGF0J3MgKnRydWx5KiB0aGUgY2FzZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgZmlsZXMgd2VyZSBtb2RpZmllZCBpbiBgSEVBRGAgdXNpbmcgYGdpdGAgaWYgcG9zc2libGUsIG9yIGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGRpZmYgb3V0cHV0IGl0c2VsZi5cblxuT2theSwgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmZXIgdG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQuIFdlJ3JlIGxvb2tpbmcgZm9yIHJlYXNvbnMgdG8gcmVqZWN0IHRoaXMuIEl0IHNheXMgSSBzaG91bGQgZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGlmICphbGwqIG1vZGlmaWVkIGNvZGUgZmFsbHMgdW5kZXIgc3BlY2lmaWMgbm9uLWtlcm5lbCBjYXRlZ29yaWVzLiBUaGVzZSBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdXNlci1zcGFjZSBjaGFuZ2VzIGxpa2Ugc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgKmRvbid0KiBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSwgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYnVpbGQvS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJ3QgY2hhbmdlIGNvbXBpbGVkIGxvZ2ljLlxuXG5Tbywgc2luY2UgYWxsIGNoYW5nZXMgYXJlIGluIGB0b29scy9gLCBJJ2xsIGNoZWNrIGFuZCBlbnN1cmUgdGhvc2UgZmlsZXMgZG9uJ3QgdHJpZ2dlciBhbnl0aGluZyBuZWdhdGl2ZSBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgY3JpdGVyaWEuIEkgbmVlZCB0byBiZSAqc3VyZSogdGhhdCB0aGVyZSBhcmUgbm8gaGlkZGVuIGNoYW5nZXMgYW55d2hlcmUgZWxzZS4gSSBzaG91bGQgcnVuIGEgdG9vbCBvciBzY3JpcHQgdG8gZG91YmxlLWNoZWNrIGBnaXQgZGlmZmAgb3IgdGhlIGBsb2dgIHRvIGF2b2lkIGFueSBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTo0Mi4zOTcxNTU4NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5NjIxMTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfc3Rfb3BzX3NoYWRvd192YXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6MDU6NDIuNDcxMTI2NDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2MzcwMjY3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoJ3MgRnV6emluZyBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBmaWxlIG1vZGlmaWNhdGlvbnMgcmVzaWRlLiBJIHNlZSBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jYC4gQ3J1Y2lhbGx5LCBhbGwgb2YgdGhlc2UgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5Ob3csIEknbSB0aGlua2luZywgYHRvb2xzL2JwZi9icGZ0b29sYCBpcyBhIHVzZXItc3BhY2UgdG9vbC4gYHRvb2xzL2xpYi9icGZgIGlzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5LiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHNgIG9idmlvdXNseSBob2xkcyB1c2VyLXNwYWNlIHNlbGYtdGVzdHMuIE5vbmUgb2YgdGhpcyBkaXJlY3RseSB0b3VjaGVzIGFueXRoaW5nIGNvcmUgdG8gdGhlIGtlcm5lbDogbm8gYGtlcm5lbC9gLCBubyBgbmV0L2AsIG5vIGBkcml2ZXJzL2AsIG5vIGBmcy9gLCBhbmQgbm8gYGluY2x1ZGUvYCB0aGF0IHdvdWxkIGFmZmVjdCB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gaW50byBgdm1saW51eGAgb3IgYSBrZXJuZWwgbW9kdWxlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBjb25maXJtIHRoYXQgbGliYnBmIGlzIG5vdCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFllcCwgdXNlci1zcGFjZSBsaWJyYXJ5IGl0IGlzLlxuXG5UaGUga2VybmVsJ3MgQlBGIHZlcmlmaWVyIGFuZCBgc3RydWN0X29wc2AgaW1wbGVtZW50YXRpb24gbGl2ZSBpbiBga2VybmVsL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHRoZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuQWNjb3JkaW5nIHRvIFNlY3Rpb24gMiBvZiB0aGUgZ3VpZGVsaW5lcywgdGhpcyBpcyBhIGNsZWFyIGNhc2U6IFwiVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIiBTbywgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuXG5cbkdpdmVuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBsZXQncyBjaGVjayB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjcnlzdGFsIGNsZWFyLlxuXG5Gb3IgYFdvcnRoRnV6emluZz1mYWxzZWAsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtdYCAob3IgbnVsbCksIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFtdYCwgYW5kIHRoZSBgUmVhc29uaW5nYCB3aWxsIGhhdmUgdG8gZXhwbGFpbiB0aGF0IGFsbCBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB1c2Vyc3BhY2UgdG9vbHMsIGxpYnJhcmllcywgYW5kIHNlbGZ0ZXN0cyB1bmRlciBgdG9vbHMvYCAoc3BlY2lmaWNhbGx5IGB0b29scy9icGYvYnBmdG9vbC9gLCBgdG9vbHMvbGliL2JwZi9gLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ApLCBhbmQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLiBUaHVzLCB0aGlzIHBhdGNoIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXG5cbkkndmUgZ290IGl0LiBObyBzdWJ0bGV0aWVzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG5lZ2F0aXZlIGNhc2UuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk1LCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNjoxNC4xMDgxNTY5NzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgYnBmdG9vbCBpbiB0b29scy9icGYvYnBmdG9vbCwgbGliYnBmIGluIHRvb2xzL2xpYi9icGYsIGFuZCBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikuIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgZG9lcyBub3Qgd2FycmFudCBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgYnBmdG9vbCBpbiB0b29scy9icGYvYnBmdG9vbCwgbGliYnBmIGluIHRvb2xzL2xpYi9icGYsIGFuZCBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikuIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgZG9lcyBub3Qgd2FycmFudCBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjA2OjE0LjEwODE5MzU1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwpgl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 15:03:36 +0000 UTC FinishedAt: 2026-09-13 15:06:14 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5pbmRleCBhNTA1NDBlZjY1MjFjLi5kOTMwNzNkNWU3ZTMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5AQCAtMTA0NCw2MiAmIzQzOzEwNDQsNzkgQEAgY29kZWdlbl9wcm9nc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgcHJvZ19jbnQsIGJvb2wgcG9wdWxhdGVfbGlcbiB9XG4gXG4gc3RhdGljIGludCB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmlkZW50LFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSwgX191MzIgbWFwX3R5cGVfaWQpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSlcbiB7XG4mIzQzO1x0ZW51bSBzdF9vcHNfc2hhZG93X2tpbmQge1xuJiM0MztcdFx0U1RfT1BTX1NIQURPV19TQ0FMQVIsXG4mIzQzO1x0XHRTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLFxuJiM0MztcdFx0U1RfT1BTX1NIQURPV19PUEFRVUUsXG4mIzQzO1x0fTtcbiBcdExJQkJQRl9PUFRTKGJ0Zl9kdW1wX2VtaXRfdHlwZV9kZWNsX29wdHMsIG9wdHMsIC5pbmRlbnRfbGV2ZWwgPSAzKTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XG4tXHRfX3UzMiBvZmZzZXQsIG5leHRfb2Zmc2V0ID0gMDtcbiYjNDM7XHRfX3U2NCBiaXRmaWVsZF9lbmQgPSAwLCBtYXBfYml0cztcbiYjNDM7XHRfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplO1xuJiM0MztcdF9fdTMyIG1hcF9zaXplLCBvZmZzZXQsIG5leHRfb2Zmc2V0ID0gMDtcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptO1xuIFx0c3RydWN0IGJ0Zl9kdW1wICpkID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lO1xuIFx0X191MzIgbWVtYmVyX3R5cGVfaWQ7XG4tXHRpbnQgaSwgZXJyID0gMCwgbjtcbi1cdGludCBzaXplO1xuJiM0MztcdGludCBhbGlnbiwgZXJyID0gMCwgaSwgbWF4X2FsaWduID0gMSwgbiwgc2l6ZTtcbiYjNDM7XHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDtcbiBcbiBcdGQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKCFkKVxuIFx0XHRyZXR1cm4gLWVycm5vO1xuIFxuJiM0MztcdG1hcF9zaXplID0gbWFwX3R5cGUtXHUwMDNlc2l6ZTtcbiYjNDM7XHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XG4gXHRuID0gYnRmX3ZsZW4obWFwX3R5cGUpO1xuIFx0Zm9yIChpID0gMCwgbSA9IGJ0Zl9tZW1iZXJzKG1hcF90eXBlKTsgaSBcdTAwM2MgbjsgaSYjNDM7JiM0MzssIG0mIzQzOyYjNDM7KSB7XG4tXHRcdG1lbWJlcl90eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG0tXHUwMDNldHlwZSwgXHUwMDI2bWVtYmVyX3R5cGVfaWQpO1xuIFx0XHRtZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQobWFwX3R5cGUsIGkpO1xuJiM0MztcdFx0Yml0ZmllbGRfc2l6ZSA9IGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShtYXBfdHlwZSwgaSk7XG4mIzQzO1x0XHRpZiAoYml0ZmllbGRfc2l6ZSkge1xuJiM0MztcdFx0XHRpZiAoKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIGJpdGZpZWxkX2VuZCB8fFxuJiM0MztcdFx0XHQgICAgKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcbiYjNDM7XHRcdFx0ICAgIGJpdF9vZmZzZXQgXHUwMDNlIG1hcF9iaXRzIHx8XG4mIzQzO1x0XHRcdCAgICBiaXRmaWVsZF9zaXplIFx1MDAzZSBtYXBfYml0cyAtIGJpdF9vZmZzZXQpIHtcbiYjNDM7XHRcdFx0XHRwX2VycihcJiMzNDtJbnZhbGlkIGJpdGZpZWxkIGxheW91dCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgbWVtYmVyX25hbWUpO1xuJiM0MztcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Yml0ZmllbGRfZW5kID0gKF9fdTY0KWJpdF9vZmZzZXQgJiM0MzsgYml0ZmllbGRfc2l6ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdG9mZnNldCA9IG0tXHUwMDNlb2Zmc2V0IC8gODtcbi1cdFx0aWYgKG5leHRfb2Zmc2V0IFx1MDAzYyBvZmZzZXQpXG4tXHRcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdGNoYXIgX19wYWRkaW5nXyVkWyV1XTtcXG5cJiMzNDssIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbiYjNDM7XHRcdGlmIChiaXRfb2Zmc2V0ICUgOCB8fCBiaXRfb2Zmc2V0IFx1MDAzYyBiaXRmaWVsZF9lbmQpIHtcbiYjNDM7XHRcdFx0cF9lcnIoXCYjMzQ7SW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9mZnNldCA9IGJpdF9vZmZzZXQgLyA4O1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2MgbmV4dF9vZmZzZXQgfHwgb2Zmc2V0IFx1MDAzZSBtYXBfc2l6ZSkge1xuJiM0MztcdFx0XHRwX2VycihcJiMzNDtJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcJiMzNDssIG1lbWJlcl9uYW1lKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRtZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLVx1MDAzZXR5cGUsIFx1MDAyNm1lbWJlcl90eXBlX2lkKTtcbiBcdFx0c3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHtcbiBcdFx0Y2FzZSBCVEZfS0lORF9JTlQ6XG4gXHRcdGNhc2UgQlRGX0tJTkRfRkxPQVQ6XG4gXHRcdGNhc2UgQlRGX0tJTkRfRU5VTTpcbiBcdFx0Y2FzZSBCVEZfS0lORF9FTlVNNjQ6XG4tXHRcdFx0Lyogc2NhbGFyIHR5cGUgKi9cbi1cdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0XCYjMzQ7KTtcbi1cdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbi1cdFx0XHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFx1MDAyNm9wdHMpO1xuLVx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdHBfZXJyKFwmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFwmIzM0OywgbWVtYmVyX25hbWUsIGVycik7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cHJpbnRmKFwmIzM0OztcXG5cJiMzNDspO1xuLVxuJiM0MztcdFx0XHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xuIFx0XHRcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlcl90eXBlX2lkKTtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0cF9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXG5cJiMzNDssIG1lbWJlcl9uYW1lLCBzaXplKTtcbi1cdFx0XHRcdGVyciA9IHNpemU7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTtcbiYjNDM7XHRcdFx0YWxpZ24gPSBidGZfX2FsaWduX29mKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEJURl9LSU5EX1BUUjpcbiBcdFx0XHRpZiAocmVzb2x2ZV9mdW5jX3B0cihidGYsIG0tXHUwMDNldHlwZSwgTlVMTCkpIHtcbi1cdFx0XHRcdC8qIEZ1bmN0aW9uIHBvaW50ZXIgKi9cbi1cdFx0XHRcdHByaW50ZihcJiMzNDtcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xcblwmIzM0OywgbWVtYmVyX25hbWUpO1xuLVxuLVx0XHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHZvaWQgKik7XG4mIzQzO1x0XHRcdFx0c2hhZG93X2tpbmQgPSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSO1xuJiM0MztcdFx0XHRcdHNpemUgPSBzaXplb2Yodm9pZCAqKTtcbiYjNDM7XHRcdFx0XHRhbGlnbiA9IF9fYWxpZ25vZl9fKHZvaWQgKik7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0LyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3JcbkBAIC0xMTA4LDM0ICYjNDM7MTEyNSw2NCBAQCBzdGF0aWMgaW50IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqaWRlbnQsXG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogVW5zdXBwb3J0ZWQgdHlwZXNcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFR5cGVzIG90aGVyIHRoYW4gc2NhbGFyIHR5cGVzIGFuZCBmdW5jdGlvblxuLVx0XHRcdCAqIHBvaW50ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBvcmRlciB0b1xuLVx0XHRcdCAqIHByZXZlbnQgY29uZmxpY3RzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBjYXVzZWRcbi1cdFx0XHQgKiBieSBtdWx0aXBsZSBkZWZpbml0aW9ucy4gRm9yIGluc3RhbmNlLCBpZiB0aGVcbi1cdFx0XHQgKiBzdHJ1Y3QgdHlwZSBGT08gaXMgdXNlZCBpbiBhIHN0cnVjdF9vcHMgbWFwLFxuLVx0XHRcdCAqIGJwZnRvb2wgaGFzIHRvIGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBGT08sXG4tXHRcdFx0ICogd2hpY2ggbWF5IHJlc3VsdCBpbiBjb25mbGljdHMgaWYgRk9PIGlzIGRlZmluZWRcbi1cdFx0XHQgKiBpbiBkaWZmZXJlbnQgc2tlbGV0b24gZmlsZXMuXG4tXHRcdFx0ICovXG4mIzQzO1x0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7XG4gXHRcdFx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuLVx0XHRcdGlmIChzaXplIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRwX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxcblwmIzM0OywgbWVtYmVyX25hbWUsIHNpemUpO1xuLVx0XHRcdFx0ZXJyID0gc2l6ZTtcbiYjNDM7XHRcdFx0YWxpZ24gPSAxO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2l6ZSBcdTAwM2MgMCB8fCBhbGlnbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBzaXplIFx1MDAzYyAwID8gc2l6ZSA6IGFsaWduO1xuJiM0MztcdFx0XHRwX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBsYXlvdXQgb2YgJXM6ICVkXCYjMzQ7LCBtZW1iZXJfbmFtZSwgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoKF9fdTMyKXNpemUgXHUwMDNlIG1hcF9zaXplIC0gb2Zmc2V0IHx8XG4mIzQzO1x0XHQgICAgKGFsaWduIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgJSBhbGlnbikpIHtcbiYjNDM7XHRcdFx0cF9lcnIoXCYjMzQ7SW52YWxpZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0X29mZnNldCBcdTAwM2Mgb2Zmc2V0KVxuJiM0MztcdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcblwmIzM0OywgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoc2hhZG93X2tpbmQpIHtcbiYjNDM7XHRcdGNhc2UgU1RfT1BTX1NIQURPV19TQ0FMQVI6XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDtcXHRcXHRcXHRcJiMzNDspO1xuJiM0MztcdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbiYjNDM7XHRcdFx0ZXJyID0gYnRmX2R1bXBfX2VtaXRfdHlwZV9kZWNsKGQsIG1lbWJlcl90eXBlX2lkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdHBfZXJyKFwmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICBtZW1iZXJfbmFtZSwgZXJyKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OztcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgU1RfT1BTX1NIQURPV19GVU5DX1BUUjpcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqJXM7XFxuXCYjMzQ7LCBtZW1iZXJfbmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBTVF9PUFNfU0hBRE9XX09QQVFVRTpcbiYjNDM7XHRcdFx0LyogQXZvaWQgZW1pdHRpbmcgbmFtZWQgdHlwZXMgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoXG4mIzQzO1x0XHRcdCAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3Vuc3VwcG9ydGVkXyVkWyVkXTtcXG5cJiMzNDssIGksIHNpemUpO1xuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4mIzQzO1x0XHRtYXhfYWxpZ24gPSBtYXgobWF4X2FsaWduLCBhbGlnbik7XG4mIzQzO1x0XHRiaXRmaWVsZF9lbmQgPSAwO1xuIFx0fVxuIFxuLVx0LyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovXG4tXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtYXBfdHlwZV9pZCk7XG4tXHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIChfX3UzMilzaXplKVxuLVx0XHRwcmludGYoXCYjMzQ7XFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXG5cJiMzNDssIHNpemUgLSBuZXh0X29mZnNldCk7XG4mIzQzO1x0aWYgKG1hcF9zaXplICUgbWF4X2FsaWduKSB7XG4mIzQzO1x0XHRwX2VycihcJiMzNDtJbnZhbGlkIHNpemUgZm9yIHN0cnVjdF9vcHMgdHlwZSAlc1wmIzM0OywgaWRlbnQpO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG1hcF9zaXplKVxuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcdFxcdFxcdGNoYXIgX19wYWRkaW5nX2VuZFsldV07XFxuXCYjMzQ7LCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbiBcbiBvdXQ6XG4gXHRidGZfZHVtcF9fZnJlZShkKTtcbkBAIC0xMTc3LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIGludCBnZW5fc3Rfb3BzX3NoYWRvd190eXBlKGNvbnN0IGNoYXIgKm9ial9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNcbiBcbiBcdHByaW50ZihcJiMzNDtcXHRcXHRzdHJ1Y3QgJXNfXyVzX18lcyB7XFxuXCYjMzQ7LCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XG4gXG4tXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xuJiM0MztcdGVyciA9IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKGJ0ZiwgaWRlbnQsIG1hcF90eXBlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtMTE3NSw2ICYjNDM7MTE3NSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsICprZXJuX21lbWJlciwgKmtlcm5fZGF0YV9tZW1iZXI7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICprZXJuX3R5cGUsICprZXJuX3Z0eXBlO1xuIFx0X191MzIgaSwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkLCBrZXJuX2RhdGFfb2ZmO1xuJiM0MztcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmogPSBtYXAtXHUwMDNlb2JqO1xuIFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gb2JqLVx1MDAzZWJ0ZjtcbiBcdHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xuQEAgLTExOTUsNiAmIzQzOzExOTYsMjUgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0a2Vybl9idGYgPSBtb2RfYnRmID8gbW9kX2J0Zi1cdTAwM2VidGYgOiBvYmotXHUwMDNlYnRmX3ZtbGludXg7XG4mIzQzO1x0a2Vybl9kYXRhX21lbWJlcl9pZHggPSBrZXJuX2RhdGFfbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl92dHlwZSk7XG4mIzQzO1x0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBhIGJpdGZpZWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXAtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RTVVA7XG4mIzQzO1x0fVxuJiM0MztcdGtlcm5fZGF0YV9iaXRfb2ZmID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KGtlcm5fdnR5cGUsIGtlcm5fZGF0YV9tZW1iZXJfaWR4KTtcbiYjNDM7XHRpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX2JpdF9vZmYgLyA4O1xuJiM0MztcdGlmIChrZXJuX2RhdGFfb2ZmIFx1MDAzZSBrZXJuX3Z0eXBlLVx1MDAzZXNpemUgfHxcbiYjNDM7XHQgICAga2Vybl90eXBlLVx1MDAzZXNpemUgXHUwMDNlIGtlcm5fdnR5cGUtXHUwMDNlc2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCB2YWx1ZSB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtYXAtXHUwMDNlbmFtZSwga2Vybl92dHlwZS1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHByX2RlYnVnKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxuXCYjMzQ7LFxuIFx0XHQgbWFwLVx1MDAzZW5hbWUsIHN0X29wcy1cdTAwM2V0eXBlX2lkLCBrZXJuX3R5cGVfaWQsIGtlcm5fdnR5cGVfaWQpO1xuQEAgLTEyMDgsMjkgJiM0MzsxMjI4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRkYXRhID0gc3Rfb3BzLVx1MDAzZWRhdGE7XG4tXHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX21lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuIFx0a2Vybl9kYXRhID0gc3Rfb3BzLVx1MDAzZWtlcm5fdmRhdGEgJiM0Mzsga2Vybl9kYXRhX29mZjtcbiBcbiBcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnRmX3ZsZW4odHlwZSk7IGkmIzQzOyYjNDM7LCBtZW1iZXImIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbXR5cGUsICprZXJuX210eXBlO1xuLVx0XHRfX3UzMiBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDtcbiYjNDM7XHRcdF9fdTMyIGJpdF9vZmZzZXQsIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xuIFx0XHR2b2lkICptZGF0YSwgKmtlcm5fbWRhdGE7XG4gXHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiBcdFx0X19zNjQgbXNpemUsIGtlcm5fbXNpemU7XG4mIzQzO1x0XHRfX3U2NCBtYWNjZXNzX3NpemU7XG4gXHRcdF9fdTMyIG1vZmYsIGtlcm5fbW9mZjtcbiBcdFx0X191MzIga2Vybl9tZW1iZXJfaWR4O1xuIFx0XHRjb25zdCBjaGFyICptbmFtZTtcbiBcbiBcdFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0bW9mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRtZGF0YSA9IGRhdGEgJiM0MzsgbW9mZjtcbiYjNDM7XHRcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUodHlwZSwgaSkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogbG9jYWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT1RTVVA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRtc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIFx0XHRpZiAobXNpemUgXHUwMDNjIDApIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgc2l6ZSBvZiBtZW1iZXIgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuIFx0XHRcdHJldHVybiBtc2l6ZTtcbiBcdFx0fVxuJiM0MztcdFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIFx1MDAyNm10eXBlX2lkKTtcbiYjNDM7XHRcdG1hY2Nlc3Nfc2l6ZSA9IG1zaXplO1xuJiM0MztcdFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpIFx1MDAyNlx1MDAyNiBtYWNjZXNzX3NpemUgXHUwMDNjIHNpemVvZihwcm9nKSlcbiYjNDM7XHRcdFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xuJiM0MztcdFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldCh0eXBlLCBpKTtcbiYjNDM7XHRcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtb2ZmID0gYml0X29mZnNldCAvIDg7XG4mIzQzO1x0XHRpZiAobW9mZiBcdTAwM2UgdHlwZS1cdTAwM2VzaXplIHx8IG1hY2Nlc3Nfc2l6ZSBcdTAwM2UgdHlwZS1cdTAwM2VzaXplIC0gbW9mZikge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lLCB0eXBlLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmO1xuIFxuIFx0XHRrZXJuX21lbWJlciA9IGZpbmRfbWVtYmVyX2J5X25hbWUoa2Vybl9idGYsIGtlcm5fdHlwZSwgbW5hbWUpO1xuIFx0XHRpZiAoIWtlcm5fbWVtYmVyKSB7XG5AQCAtMTI1OSwxNyAmIzQzOzEzMDAsMzMgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXG4gXHRcdGtlcm5fbWVtYmVyX2lkeCA9IGtlcm5fbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl90eXBlKTtcbi1cdFx0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSB8fFxuLVx0XHQgICAgYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9UU1VQO1xuIFx0XHR9XG4gXG4tXHRcdGtlcm5fbW9mZiA9IGtlcm5fbWVtYmVyLVx1MDAzZW9mZnNldCAvIDg7XG4mIzQzO1x0XHRrZXJuX21zaXplID0gYnRmX19yZXNvbHZlX3NpemUoa2Vybl9idGYsIGtlcm5fbWVtYmVyLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogZmFpbGVkIHRvIHJlc29sdmUgdGhlIGtlcm5lbCBzaXplIG9mIG1lbWJlciAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4ga2Vybl9tc2l6ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpO1xuJiM0MztcdFx0aWYgKGJpdF9vZmZzZXQgJSA4KSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrZXJuX21vZmYgPSBiaXRfb2Zmc2V0IC8gODtcbiYjNDM7XHRcdGlmIChrZXJuX21vZmYgXHUwMDNlIGtlcm5fdHlwZS1cdTAwM2VzaXplIHx8XG4mIzQzO1x0XHQgICAgKF9fdTY0KWtlcm5fbXNpemUgXHUwMDNlIGtlcm5fdHlwZS1cdTAwM2VzaXplIC0ga2Vybl9tb2ZmKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBrZXJuZWwgc3RydWN0X29wcyB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwga2Vybl90eXBlLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0a2Vybl9tZGF0YSA9IGtlcm5fZGF0YSAmIzQzOyBrZXJuX21vZmY7XG4gXG4tXHRcdG10eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLCBcdTAwMjZtdHlwZV9pZCk7XG4gXHRcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlLFxuIFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrZXJuX210eXBlX2lkKTtcbiBcdFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXHUwMDNlaW5mbykgIT1cbkBAIC0xMjgxLDcgJiM0MzsxMzM4LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHR9XG4gXG4gXHRcdGlmIChidGZfaXNfcHRyKG10eXBlKSkge1xuLVx0XHRcdHByb2cgPSAqKHZvaWQgKiopbWRhdGE7XG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZwcm9nLCBtZGF0YSwgc2l6ZW9mKHByb2cpKTtcbiBcdFx0XHQvKiBqdXN0IGxpa2UgZm9yICFrZXJuX21lbWJlciBjYXNlIGFib3ZlLCByZXNldCBkZWNsYXJhdGl2ZWx5XG4gXHRcdFx0ICogc2V0IChhdCBjb21waWxlIHRpbWUpIHByb2dyYW0mIzM5O3MgYXV0bG9hZCB0byBmYWxzZSxcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbkBAIC0xMzUyLDggJiM0MzsxNDA5LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tdHlwZV9pZCk7XG4tXHRcdGlmIChrZXJuX21zaXplIFx1MDAzYyAwIHx8IG1zaXplICE9IGtlcm5fbXNpemUpIHtcbiYjNDM7XHRcdGlmIChtc2l6ZSAhPSBrZXJuX21zaXplKSB7XG4gXHRcdFx0cHJfd2FybihcJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogRXJyb3IgaW4gc2l6ZSBvZiBtZW1iZXIgJXM6ICV6ZCAhPSAlemQoa2VybmVsKVxcblwmIzM0OyxcbiBcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwgKHNzaXplX3QpbXNpemUsXG4gXHRcdFx0XHQoc3NpemVfdClrZXJuX21zaXplKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcbmluZGV4IDc1YTBkZWE1MTFiM2YuLjQxMDI5ZWJiMjJmMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvZXBvbGwuaFx1MDAzZVxuQEAgLTE1MCw2ICYjNDM7MTUxLDkxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cnVjdF9vcHNfbW9kdWxlICpza2VsO1xuJiM0MztcdGNoYXIgKmxvZyA9IE5VTEw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfbW9kdWxlX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX29wZW5fbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSwgZGF0YSksXG4mIzQzO1x0XHQgICAgICAgMCwgXCYjMzQ7bG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXRcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxuJiM0MztcdFx0ICAgICAgIDgsIFwmIzM0O2xvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShzaXplb2YoKnNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbiYjNDM7XHRcdCAgICAgICBicGZfbWFwX192YWx1ZV9zaXplKHNrZWwtXHUwMDNlbWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtsb2NhbF9iaXRmaWVsZF9zaGFkb3dfc2l6ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZC1cdTAwM2VkYXRhID0gMTtcbiYjNDM7XHRza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZC1cdTAwM2VvbmVieXRlID0gMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9fc2V0X2F1dG9jcmVhdGUoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQsIHRydWUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZW5hYmxlX2xvY2FsX2JpdGZpZWxkX21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbiYjNDM7XHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGVyciwgLUVOT1RTVVAsIFwmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX2xvYWRfbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCYjMzQ7bG9jYWwgYml0ZmllbGQgZXh0cmFfYml0ZmllbGQgaXMgbm90IHN1cHBvcnRlZFwmIzM0OyxcbiYjNDM7XHRcdFx0ICBcJiMzNDtsb2NhbF9iaXRmaWVsZF9yZWplY3Rpb25fbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0ZnJlZShsb2cpO1xuJiM0MztcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX21vZHVsZSAqc2tlbDtcbiYjNDM7XHRzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuJiM0MztcdHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0Y2hhciAqbG9nID0gTlVMTDtcbiYjNDM7XHRpbnQgZXJyLCB0eXBlX2lkO1xuJiM0MztcbiYjNDM7XHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfb3Blbl9iYWRfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnBmX29iamVjdF9fYnRmKHNrZWwtXHUwMDNlb2JqKTtcbiYjNDM7XHR0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgQlRGX0tJTkRfU1RSVUNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVCh0eXBlX2lkLCAwLCBcJiMzNDtmaW5kX2JhZF9vZmZzZXRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0dHlwZSA9IChzdHJ1Y3QgYnRmX3R5cGUgKilidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIodHlwZSwgXCYjMzQ7Z2V0X2JhZF9vZmZzZXRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuJiM0MztcdG1lbWJlci1cdTAwM2VvZmZzZXQgPSB0eXBlLVx1MDAzZXNpemUgKiA4O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2VuYWJsZV9iYWRfb2Zmc2V0X21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbiYjNDM7XHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfbG9hZF9iYWRfb2Zmc2V0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O21lbWJlciBleHRyYSBpcyBvdXRzaWRlIHRoZSA0LWJ5dGUgbG9jYWwgc3RydWN0X29wcyB0eXBlXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O2JhZF9vZmZzZXRfcmVqZWN0aW9uX2xvZ1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGZyZWUobG9nKTtcbiYjNDM7XHRzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgc2lnbmF0dXJlIG9mIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIHRoZVxuICAqIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlIGRlZmluZWQgaW4gdGhlIEJQRiBwcm9ncmFtLiBUaGlzIG1pc21hdGNoXG4gICogc2hvdWxkIGJlIGFsbG93ZWQgYXMgbG9uZyBhcyB0aGUgYmVoYXZpb3Igb2YgdGhlIG9wZXJhdG9yIHByb2dyYW1cbkBAIC0zMDQsNiAmIzQzOzM5MCwxMCBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19sb2FkKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzdHJ1Y3Rfb3BzX25vdF96ZXJvZWRcJiMzNDspKVxuIFx0XHR0ZXN0X3N0cnVjdF9vcHNfbm90X3plcm9lZCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RydWN0X29wc19iYWRfbWVtYmVyX29mZnNldFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlXCYjMzQ7KSlcbiBcdFx0dGVzdF9zdHJ1Y3Rfb3BzX2luY29tcGF0aWJsZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RydWN0X29wc19udWxsX291dF9jYlwmIzM0OykpXG5AQCAtMzE0LDQgJiM0Mzs0MDQsMyBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpXG4gXHRcdHRlc3RfZGV0YWNoX2xpbmsoKTtcbiBcdFJVTl9URVNUUyh1bnN1cHBvcnRlZF9vcHMpO1xuIH1cbi1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5pbmRleCA3MWM0MjBjM2E1YTZjLi44NDZiNWE5MzRkYzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5AQCAtNzYsNiAmIzQzOzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7XG4gXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2xvY2FsX2JpdGZpZWxkIHtcbiYjNDM7XHRpbnQgZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dHJhX2JpdGZpZWxkMjoxO1xuJiM0MztcdGNoYXIgb25lYnl0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2xvY2FsX2JpdGZpZWxkIHRlc3Rtb2RfbG9jYWxfYml0ZmllbGQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGV4dHJhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz8uc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB0ZXN0bW9kX2JhZF9vZmZzZXQ7XG4mIzQzO1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdHZvaWQgKCp0ZXN0XzIpKGludCAqYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKaW5kZXggYTUwNTQwZWY2NTIxYy4uZDkzMDczZDVlN2UzMiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMKQEAgLTEwNDQsNjIgJiM0MzsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpCiB9CiAKIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1hcF90eXBlLCBfX3UzMiBtYXBfdHlwZV9pZCkKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSkKIHsKJiM0MzsJZW51bSBzdF9vcHNfc2hhZG93X2tpbmQgewomIzQzOwkJU1RfT1BTX1NIQURPV19TQ0FMQVIsCiYjNDM7CQlTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLAomIzQzOwkJU1RfT1BTX1NIQURPV19PUEFRVUUsCiYjNDM7CX07CiAJTElCQlBGX09QVFMoYnRmX2R1bXBfZW1pdF90eXBlX2RlY2xfb3B0cywgb3B0cywgLmluZGVudF9sZXZlbCA9IDMpOwogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7Ci0JX191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7CiYjNDM7CV9fdTY0IGJpdGZpZWxkX2VuZCA9IDAsIG1hcF9iaXRzOwomIzQzOwlfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplOwomIzQzOwlfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7CiAJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm07CiAJc3RydWN0IGJ0Zl9kdW1wICpkID0gTlVMTDsKIAljb25zdCBjaGFyICptZW1iZXJfbmFtZTsKIAlfX3UzMiBtZW1iZXJfdHlwZV9pZDsKLQlpbnQgaSwgZXJyID0gMCwgbjsKLQlpbnQgc2l6ZTsKJiM0MzsJaW50IGFsaWduLCBlcnIgPSAwLCBpLCBtYXhfYWxpZ24gPSAxLCBuLCBzaXplOwomIzQzOwllbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDsKIAogCWQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpOwogCWlmICghZCkKIAkJcmV0dXJuIC1lcnJubzsKIAomIzQzOwltYXBfc2l6ZSA9IG1hcF90eXBlLSZndDtzaXplOwomIzQzOwltYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7CiAJbiA9IGJ0Zl92bGVuKG1hcF90eXBlKTsKIAlmb3IgKGkgPSAwLCBtID0gYnRmX21lbWJlcnMobWFwX3R5cGUpOyBpICZsdDsgbjsgaSYjNDM7JiM0MzssIG0mIzQzOyYjNDM7KSB7Ci0JCW1lbWJlcl90eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG0tJmd0O3R5cGUsICZhbXA7bWVtYmVyX3R5cGVfaWQpOwogCQltZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLSZndDtuYW1lX29mZik7CiYjNDM7CQliaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KG1hcF90eXBlLCBpKTsKJiM0MzsJCWJpdGZpZWxkX3NpemUgPSBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUobWFwX3R5cGUsIGkpOwomIzQzOwkJaWYgKGJpdGZpZWxkX3NpemUpIHsKJiM0MzsJCQlpZiAoKF9fdTY0KWJpdF9vZmZzZXQgJmx0OyBiaXRmaWVsZF9lbmQgfHwKJiM0MzsJCQkgICAgKF9fdTY0KWJpdF9vZmZzZXQgJmx0OyAoX191NjQpbmV4dF9vZmZzZXQgKiA4IHx8CiYjNDM7CQkJICAgIGJpdF9vZmZzZXQgJmd0OyBtYXBfYml0cyB8fAomIzQzOwkJCSAgICBiaXRmaWVsZF9zaXplICZndDsgbWFwX2JpdHMgLSBiaXRfb2Zmc2V0KSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7SW52YWxpZCBiaXRmaWVsZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssCiYjNDM7CQkJCSAgICAgIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJpdGZpZWxkX2VuZCA9IChfX3U2NCliaXRfb2Zmc2V0ICYjNDM7IGJpdGZpZWxkX3NpemU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJb2Zmc2V0ID0gbS0mZ3Q7b2Zmc2V0IC8gODsKLQkJaWYgKG5leHRfb2Zmc2V0ICZsdDsgb2Zmc2V0KQotCQkJcHJpbnRmKCYjMzQ7XHRcdFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xuJiMzNDssIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTsKJiM0MzsJCWlmIChiaXRfb2Zmc2V0ICUgOCB8fCBiaXRfb2Zmc2V0ICZsdDsgYml0ZmllbGRfZW5kKSB7CiYjNDM7CQkJcF9lcnIoJiMzNDtJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXMmIzM0OywgbWVtYmVyX25hbWUpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgPSBiaXRfb2Zmc2V0IC8gODsKJiM0MzsJCWlmIChvZmZzZXQgJmx0OyBuZXh0X29mZnNldCB8fCBvZmZzZXQgJmd0OyBtYXBfc2l6ZSkgewomIzQzOwkJCXBfZXJyKCYjMzQ7SW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQogCiYjNDM7CQltZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLSZndDt0eXBlLCAmYW1wO21lbWJlcl90eXBlX2lkKTsKIAkJc3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHsKIAkJY2FzZSBCVEZfS0lORF9JTlQ6CiAJCWNhc2UgQlRGX0tJTkRfRkxPQVQ6CiAJCWNhc2UgQlRGX0tJTkRfRU5VTToKIAkJY2FzZSBCVEZfS0lORF9FTlVNNjQ6Ci0JCQkvKiBzY2FsYXIgdHlwZSAqLwotCQkJcHJpbnRmKCYjMzQ7XHRcdFx0JiMzNDspOwotCQkJb3B0cy5maWVsZF9uYW1lID0gbWVtYmVyX25hbWU7Ci0JCQllcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsICZhbXA7b3B0cyk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJcF9lcnIoJiMzNDtGYWlsZWQgdG8gZW1pdCB0eXBlIGRlY2xhcmF0aW9uIGZvciAlczogJWQmIzM0OywgbWVtYmVyX25hbWUsIGVycik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwcmludGYoJiMzNDs7XG4mIzM0Oyk7Ci0KJiM0MzsJCQlzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSOwogCQkJc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpOwotCQkJaWYgKHNpemUgJmx0OyAwKSB7Ci0JCQkJcF9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxuJiMzNDssIG1lbWJlcl9uYW1lLCBzaXplKTsKLQkJCQllcnIgPSBzaXplOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQluZXh0X29mZnNldCA9IG9mZnNldCAmIzQzOyBzaXplOwomIzQzOwkJCWFsaWduID0gYnRmX19hbGlnbl9vZihidGYsIG1lbWJlcl90eXBlX2lkKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRGX0tJTkRfUFRSOgogCQkJaWYgKHJlc29sdmVfZnVuY19wdHIoYnRmLCBtLSZndDt0eXBlLCBOVUxMKSkgewotCQkJCS8qIEZ1bmN0aW9uIHBvaW50ZXIgKi8KLQkJCQlwcmludGYoJiMzNDtcdFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xuJiMzNDssIG1lbWJlcl9uYW1lKTsKLQotCQkJCW5leHRfb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHNpemVvZih2b2lkICopOwomIzQzOwkJCQlzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfRlVOQ19QVFI7CiYjNDM7CQkJCXNpemUgPSBzaXplb2Yodm9pZCAqKTsKJiM0MzsJCQkJYWxpZ24gPSBfX2FsaWdub2ZfXyh2b2lkICopOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3IKQEAgLTExMDgsMzQgJiM0MzsxMTI1LDY0IEBAIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCwKIAkJCWZhbGx0aHJvdWdoOwogCiAJCWRlZmF1bHQ6Ci0JCQkvKiBVbnN1cHBvcnRlZCB0eXBlcwotCQkJICoKLQkJCSAqIFR5cGVzIG90aGVyIHRoYW4gc2NhbGFyIHR5cGVzIGFuZCBmdW5jdGlvbgotCQkJICogcG9pbnRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGluIG9yZGVyIHRvCi0JCQkgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkCi0JCQkgKiBieSBtdWx0aXBsZSBkZWZpbml0aW9ucy4gRm9yIGluc3RhbmNlLCBpZiB0aGUKLQkJCSAqIHN0cnVjdCB0eXBlIEZPTyBpcyB1c2VkIGluIGEgc3RydWN0X29wcyBtYXAsCi0JCQkgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLAotCQkJICogd2hpY2ggbWF5IHJlc3VsdCBpbiBjb25mbGljdHMgaWYgRk9PIGlzIGRlZmluZWQKLQkJCSAqIGluIGRpZmZlcmVudCBza2VsZXRvbiBmaWxlcy4KLQkJCSAqLwomIzQzOwkJCXNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7CiAJCQlzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7Ci0JCQlpZiAoc2l6ZSAmbHQ7IDApIHsKLQkJCQlwX2VycigmIzM0O0ZhaWxlZCB0byByZXNvbHZlIHNpemUgb2YgJXM6ICVkXG4mIzM0OywgbWVtYmVyX25hbWUsIHNpemUpOwotCQkJCWVyciA9IHNpemU7CiYjNDM7CQkJYWxpZ24gPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNpemUgJmx0OyAwIHx8IGFsaWduICZsdDsgMCkgewomIzQzOwkJCWVyciA9IHNpemUgJmx0OyAwID8gc2l6ZSA6IGFsaWduOwomIzQzOwkJCXBfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc29sdmUgbGF5b3V0IG9mICVzOiAlZCYjMzQ7LCBtZW1iZXJfbmFtZSwgZXJyKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWlmICgoX191MzIpc2l6ZSAmZ3Q7IG1hcF9zaXplIC0gb2Zmc2V0IHx8CiYjNDM7CQkgICAgKGFsaWduICZndDsgMSAmYW1wOyZhbXA7IG9mZnNldCAlIGFsaWduKSkgewomIzQzOwkJCXBfZXJyKCYjMzQ7SW52YWxpZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzJiMzNDssIG1lbWJlcl9uYW1lKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG5leHRfb2Zmc2V0ICZsdDsgb2Zmc2V0KQomIzQzOwkJCXByaW50ZigmIzM0O1x0XHRcdGNoYXIgX19wYWRkaW5nXyVkWyV1XTtcbiYjMzQ7LCBpLCBvZmZzZXQgLSBuZXh0X29mZnNldCk7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHNoYWRvd19raW5kKSB7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOgomIzQzOwkJCXByaW50ZigmIzM0O1x0XHRcdCYjMzQ7KTsKJiM0MzsJCQlvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTsKJiM0MzsJCQllcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsICZhbXA7b3B0cyk7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlwX2VycigmIzM0O0ZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZCYjMzQ7LAomIzQzOwkJCQkgICAgICBtZW1iZXJfbmFtZSwgZXJyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KJiM0MzsJCQlwcmludGYoJiMzNDs7XG4mIzM0Oyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfRlVOQ19QVFI6CiYjNDM7CQkJcHJpbnRmKCYjMzQ7XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcbiYjMzQ7LCBtZW1iZXJfbmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOgomIzQzOwkJCS8qIEF2b2lkIGVtaXR0aW5nIG5hbWVkIHR5cGVzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aAomIzQzOwkJCSAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLgomIzQzOwkJCSAqLwogCQkJcHJpbnRmKCYjMzQ7XHRcdFx0Y2hhciBfX3Vuc3VwcG9ydGVkXyVkWyVkXTtcbiYjMzQ7LCBpLCBzaXplKTsKLQotCQkJbmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKIAkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKIAkJfQomIzQzOwomIzQzOwkJbmV4dF9vZmZzZXQgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKJiM0MzsJCW1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTsKJiM0MzsJCWJpdGZpZWxkX2VuZCA9IDA7CiAJfQogCi0JLyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovCi0Jc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWFwX3R5cGVfaWQpOwotCWlmIChuZXh0X29mZnNldCAmbHQ7IChfX3UzMilzaXplKQotCQlwcmludGYoJiMzNDtcdFx0XHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xuJiMzNDssIHNpemUgLSBuZXh0X29mZnNldCk7CiYjNDM7CWlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikgewomIzQzOwkJcF9lcnIoJiMzNDtJbnZhbGlkIHNpemUgZm9yIHN0cnVjdF9vcHMgdHlwZSAlcyYjMzQ7LCBpZGVudCk7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKG5leHRfb2Zmc2V0ICZsdDsgbWFwX3NpemUpCiYjNDM7CQlwcmludGYoJiMzNDtcdFx0XHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xuJiMzNDssIG1hcF9zaXplIC0gbmV4dF9vZmZzZXQpOwogCiBvdXQ6CiAJYnRmX2R1bXBfX2ZyZWUoZCk7CkBAIC0xMTc3LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIGludCBnZW5fc3Rfb3BzX3NoYWRvd190eXBlKGNvbnN0IGNoYXIgKm9ial9uYW1lLCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGMKIAogCXByaW50ZigmIzM0O1x0XHRzdHJ1Y3QgJXNfXyVzX18lcyB7XG4mIzM0Oywgb2JqX25hbWUsIGlkZW50LCB0eXBlX25hbWUpOwogCi0JZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUsIG1hcF90eXBlX2lkKTsKJiM0MzsJZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtMTE3NSw2ICYjNDM7MTE3NSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyOwogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmtlcm5fdHlwZSwgKmtlcm5fdnR5cGU7CiAJX191MzIgaSwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkLCBrZXJuX2RhdGFfb2ZmOwomIzQzOwlfX3UzMiBrZXJuX2RhdGFfYml0X29mZiwga2Vybl9kYXRhX21lbWJlcl9pZHg7CiAJc3RydWN0IGJwZl9vYmplY3QgKm9iaiA9IG1hcC0mZ3Q7b2JqOwogCWNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG9iai0mZ3Q7YnRmOwogCXN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzOwpAQCAtMTE5NSw2ICYjNDM7MTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApCiAJCXJldHVybiBlcnI7CiAKIAlrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLSZndDtidGYgOiBvYmotJmd0O2J0Zl92bWxpbnV4OwomIzQzOwlrZXJuX2RhdGFfbWVtYmVyX2lkeCA9IGtlcm5fZGF0YV9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3Z0eXBlKTsKJiM0MzsJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIGEgYml0ZmllbGRcbiYjMzQ7LAomIzQzOwkJCW1hcC0mZ3Q7bmFtZSk7CiYjNDM7CQlyZXR1cm4gLUVOT1RTVVA7CiYjNDM7CX0KJiM0MzsJa2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpOwomIzQzOwlpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJbWFwLSZndDtuYW1lKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfYml0X29mZiAvIDg7CiYjNDM7CWlmIChrZXJuX2RhdGFfb2ZmICZndDsga2Vybl92dHlwZS0mZ3Q7c2l6ZSB8fAomIzQzOwkgICAga2Vybl90eXBlLSZndDtzaXplICZndDsga2Vybl92dHlwZS0mZ3Q7c2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIG91dHNpZGUgdGhlICV1LWJ5dGUga2VybmVsIHZhbHVlIHR5cGVcbiYjMzQ7LAomIzQzOwkJCW1hcC0mZ3Q7bmFtZSwga2Vybl92dHlwZS0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJcHJfZGVidWcoJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogdHlwZV9pZDoldSBrZXJuX3R5cGVfaWQ6JXUga2Vybl92dHlwZV9pZDoldVxuJiMzNDssCiAJCSBtYXAtJmd0O25hbWUsIHN0X29wcy0mZ3Q7dHlwZV9pZCwga2Vybl90eXBlX2lkLCBrZXJuX3Z0eXBlX2lkKTsKQEAgLTEyMDgsMjkgJiM0MzsxMjI4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhID0gc3Rfb3BzLSZndDtkYXRhOwotCWtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfbWVtYmVyLSZndDtvZmZzZXQgLyA4OwogCWtlcm5fZGF0YSA9IHN0X29wcy0mZ3Q7a2Vybl92ZGF0YSAmIzQzOyBrZXJuX2RhdGFfb2ZmOwogCiAJbWVtYmVyID0gYnRmX21lbWJlcnModHlwZSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGJ0Zl92bGVuKHR5cGUpOyBpJiM0MzsmIzQzOywgbWVtYmVyJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqa2Vybl9tdHlwZTsKLQkJX191MzIgbXR5cGVfaWQsIGtlcm5fbXR5cGVfaWQ7CiYjNDM7CQlfX3UzMiBiaXRfb2Zmc2V0LCBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDsKIAkJdm9pZCAqbWRhdGEsICprZXJuX21kYXRhOwogCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiAJCV9fczY0IG1zaXplLCBrZXJuX21zaXplOwomIzQzOwkJX191NjQgbWFjY2Vzc19zaXplOwogCQlfX3UzMiBtb2ZmLCBrZXJuX21vZmY7CiAJCV9fdTMyIGtlcm5fbWVtYmVyX2lkeDsKIAkJY29uc3QgY2hhciAqbW5hbWU7CiAKIAkJbW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLSZndDtuYW1lX29mZik7Ci0JCW1vZmYgPSBtZW1iZXItJmd0O29mZnNldCAvIDg7Ci0JCW1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmOwomIzQzOwkJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogbG9jYWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRU5PVFNVUDsKJiM0MzsJCX0KJiM0MzsKIAkJbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlci0mZ3Q7dHlwZSk7CiAJCWlmIChtc2l6ZSAmbHQ7IDApIHsKIAkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogZmFpbGVkIHRvIHJlc29sdmUgdGhlIHNpemUgb2YgbWVtYmVyICVzXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIG1uYW1lKTsKIAkJCXJldHVybiBtc2l6ZTsKIAkJfQomIzQzOwkJbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCAmYW1wO210eXBlX2lkKTsKJiM0MzsJCW1hY2Nlc3Nfc2l6ZSA9IG1zaXplOwomIzQzOwkJaWYgKGJ0Zl9pc19wdHIobXR5cGUpICZhbXA7JmFtcDsgbWFjY2Vzc19zaXplICZsdDsgc2l6ZW9mKHByb2cpKQomIzQzOwkJCW1hY2Nlc3Nfc2l6ZSA9IHNpemVvZihwcm9nKTsKJiM0MzsJCWJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQodHlwZSwgaSk7CiYjNDM7CQlpZiAoYml0X29mZnNldCAlIDgpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJbW9mZiA9IGJpdF9vZmZzZXQgLyA4OwomIzQzOwkJaWYgKG1vZmYgJmd0OyB0eXBlLSZndDtzaXplIHx8IG1hY2Nlc3Nfc2l6ZSAmZ3Q7IHR5cGUtJmd0O3NpemUgLSBtb2ZmKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcbiYjMzQ7LAomIzQzOwkJCQltYXAtJmd0O25hbWUsIG1uYW1lLCB0eXBlLSZndDtzaXplKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCW1kYXRhID0gZGF0YSAmIzQzOyBtb2ZmOwogCiAJCWtlcm5fbWVtYmVyID0gZmluZF9tZW1iZXJfYnlfbmFtZShrZXJuX2J0Ziwga2Vybl90eXBlLCBtbmFtZSk7CiAJCWlmICgha2Vybl9tZW1iZXIpIHsKQEAgLTEyNTksMTcgJiM0MzsxMzAwLDMzIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCiAJCWtlcm5fbWVtYmVyX2lkeCA9IGtlcm5fbWVtYmVyIC0gYnRmX21lbWJlcnMoa2Vybl90eXBlKTsKLQkJaWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZSh0eXBlLCBpKSB8fAotCQkgICAgYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkgewotCQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0OywKJiM0MzsJCWlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCiAJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSk7CiAJCQlyZXR1cm4gLUVOT1RTVVA7CiAJCX0KIAotCQlrZXJuX21vZmYgPSBrZXJuX21lbWJlci0mZ3Q7b2Zmc2V0IC8gODsKJiM0MzsJCWtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tZW1iZXItJmd0O3R5cGUpOwomIzQzOwkJaWYgKGtlcm5fbXNpemUgJmx0OyAwKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUga2VybmVsIHNpemUgb2YgbWVtYmVyICVzXG4mIzM0OywKJiM0MzsJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSk7CiYjNDM7CQkJcmV0dXJuIGtlcm5fbXNpemU7CiYjNDM7CQl9CiYjNDM7CQliaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KTsKJiM0MzsJCWlmIChiaXRfb2Zmc2V0ICUgOCkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxuJiMzNDssCiYjNDM7CQkJCW1hcC0mZ3Q7bmFtZSwgbW5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJa2Vybl9tb2ZmID0gYml0X29mZnNldCAvIDg7CiYjNDM7CQlpZiAoa2Vybl9tb2ZmICZndDsga2Vybl90eXBlLSZndDtzaXplIHx8CiYjNDM7CQkgICAgKF9fdTY0KWtlcm5fbXNpemUgJmd0OyBrZXJuX3R5cGUtJmd0O3NpemUgLSBrZXJuX21vZmYpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7c3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBrZXJuZWwgc3RydWN0X29wcyB0eXBlXG4mIzM0OywKJiM0MzsJCQkJbWFwLSZndDtuYW1lLCBtbmFtZSwga2Vybl90eXBlLSZndDtzaXplKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJa2Vybl9tZGF0YSA9IGtlcm5fZGF0YSAmIzQzOyBrZXJuX21vZmY7CiAKLQkJbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCAmYW1wO210eXBlX2lkKTsKIAkJa2Vybl9tdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoa2Vybl9idGYsIGtlcm5fbWVtYmVyLSZndDt0eXBlLAogCQkJCQkJICAgICZhbXA7a2Vybl9tdHlwZV9pZCk7CiAJCWlmIChCVEZfSU5GT19LSU5EKG10eXBlLSZndDtpbmZvKSAhPQpAQCAtMTI4MSw3ICYjNDM7MTMzOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJfQogCiAJCWlmIChidGZfaXNfcHRyKG10eXBlKSkgewotCQkJcHJvZyA9ICoodm9pZCAqKiltZGF0YTsKJiM0MzsJCQltZW1jcHkoJmFtcDtwcm9nLCBtZGF0YSwgc2l6ZW9mKHByb2cpKTsKIAkJCS8qIGp1c3QgbGlrZSBmb3IgIWtlcm5fbWVtYmVyIGNhc2UgYWJvdmUsIHJlc2V0IGRlY2xhcmF0aXZlbHkKIAkJCSAqIHNldCAoYXQgY29tcGlsZSB0aW1lKSBwcm9ncmFtJiMzOTtzIGF1dGxvYWQgdG8gZmFsc2UsCiAJCQkgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTEwKQEAgLTEzNTIsOCAmIzQzOzE0MDksNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWtlcm5fbXNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShrZXJuX2J0Ziwga2Vybl9tdHlwZV9pZCk7Ci0JCWlmIChrZXJuX21zaXplICZsdDsgMCB8fCBtc2l6ZSAhPSBrZXJuX21zaXplKSB7CiYjNDM7CQlpZiAobXNpemUgIT0ga2Vybl9tc2l6ZSkgewogCQkJcHJfd2FybigmIzM0O3N0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBFcnJvciBpbiBzaXplIG9mIG1lbWJlciAlczogJXpkICE9ICV6ZChrZXJuZWwpXG4mIzM0OywKIAkJCQltYXAtJmd0O25hbWUsIG1uYW1lLCAoc3NpemVfdCltc2l6ZSwKIAkJCQkoc3NpemVfdClrZXJuX21zaXplKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYwppbmRleCA3NWEwZGVhNTExYjNmLi40MTAyOWViYjIyZjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7c3lzL2Vwb2xsLmgmZ3Q7CkBAIC0xNTAsNiAmIzQzOzE1MSw5MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbm90X3plcm9lZCh2b2lkKQogCXN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7CiYjNDM7CWNoYXIgKmxvZyA9IE5VTEw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2xvY2FsX2JpdGZpZWxkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtJmd0O3N0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIGRhdGEpLAomIzQzOwkJICAgICAgIDAsICYjMzQ7bG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXQmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLSZndDtzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLCBvbmVieXRlKSwKJiM0MzsJCSAgICAgICA4LCAmIzM0O2xvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9FUShzaXplb2YoKnNrZWwtJmd0O3N0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksCiYjNDM7CQkgICAgICAgYnBmX21hcF9fdmFsdWVfc2l6ZShza2VsLSZndDttYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLAomIzQzOwkJICAgICAgICYjMzQ7bG9jYWxfYml0ZmllbGRfc2hhZG93X3NpemUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi8KJiM0MzsJc2tlbC0mZ3Q7c3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLSZndDtkYXRhID0gMTsKJiM0MzsJc2tlbC0mZ3Q7c3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLSZndDtvbmVieXRlID0gMTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9fc2V0X2F1dG9jcmVhdGUoc2tlbC0mZ3Q7bWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2VuYWJsZV9sb2NhbF9iaXRmaWVsZF9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7CiYjNDM7CWxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVOT1RTVVAsICYjMzQ7c3RydWN0X29wc19tb2R1bGVfbG9hZF9sb2NhbF9iaXRmaWVsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0hBU19TVUJTVFIobG9nLCAmIzM0O2xvY2FsIGJpdGZpZWxkIGV4dHJhX2JpdGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQmIzM0OywKJiM0MzsJCQkgICYjMzQ7bG9jYWxfYml0ZmllbGRfcmVqZWN0aW9uX2xvZyYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlmcmVlKGxvZyk7CiYjNDM7CXN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdHJ1Y3Rfb3BzX21vZHVsZSAqc2tlbDsKJiM0MzsJc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjsKJiM0MzsJc3RydWN0IGJ0Zl90eXBlICp0eXBlOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CWNoYXIgKmxvZyA9IE5VTEw7CiYjNDM7CWludCBlcnIsIHR5cGVfaWQ7CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2JhZF9vZmZzZXQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWJ0ZiA9IGJwZl9vYmplY3RfX2J0Zihza2VsLSZndDtvYmopOwomIzQzOwl0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsICYjMzQ7YnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCYjMzQ7LAomIzQzOwkJCQkJIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKHR5cGVfaWQsIDAsICYjMzQ7ZmluZF9iYWRfb2Zmc2V0X3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXR5cGUgPSAoc3RydWN0IGJ0Zl90eXBlICopYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0eXBlLCAmIzM0O2dldF9iYWRfb2Zmc2V0X3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CW1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpOwomIzQzOwltZW1iZXItJmd0O29mZnNldCA9IHR5cGUtJmd0O3NpemUgKiA4OwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLSZndDttYXBzLnRlc3Rtb2RfYmFkX29mZnNldCwgdHJ1ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtlbmFibGVfYmFkX29mZnNldF9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7CiYjNDM7CWxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDtzdHJ1Y3Rfb3BzX21vZHVsZV9sb2FkX2JhZF9vZmZzZXQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGxvZywgJiMzNDttZW1iZXIgZXh0cmEgaXMgb3V0c2lkZSB0aGUgNC1ieXRlIGxvY2FsIHN0cnVjdF9vcHMgdHlwZSYjMzQ7LAomIzQzOwkJCSAgJiMzNDtiYWRfb2Zmc2V0X3JlamVjdGlvbl9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJZnJlZShsb2cpOwomIzQzOwlzdHJ1Y3Rfb3BzX21vZHVsZV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc2lnbmF0dXJlIG9mIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIHRoZQogICogZnVuY3Rpb24gcG9pbnRlciBwcm90b3R5cGUgZGVmaW5lZCBpbiB0aGUgQlBGIHByb2dyYW0uIFRoaXMgbWlzbWF0Y2gKICAqIHNob3VsZCBiZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRvciBwcm9ncmFtCkBAIC0zMDQsNiAmIzQzOzM5MCwxMCBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpCiAJCXRlc3Rfc3RydWN0X29wc19sb2FkKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdHJ1Y3Rfb3BzX25vdF96ZXJvZWQmIzM0OykpCiAJCXRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCYjMzQ7KSkKJiM0MzsJCXRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQmIzM0OykpCiYjNDM7CQl0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlJiMzNDspKQogCQl0ZXN0X3N0cnVjdF9vcHNfaW5jb21wYXRpYmxlKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdHJ1Y3Rfb3BzX251bGxfb3V0X2NiJiMzNDspKQpAQCAtMzE0LDQgJiM0Mzs0MDQsMyBAQCB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlKHZvaWQpCiAJCXRlc3RfZGV0YWNoX2xpbmsoKTsKIAlSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTsKIH0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwppbmRleCA3MWM0MjBjM2E1YTZjLi44NDZiNWE5MzRkYzgzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuYwpAQCAtNzYsNiAmIzQzOzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7CiAJLnplcm9lZF9vcCA9ICh2b2lkICopemVyb2VkX29wLAogfTsKIAomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19sb2NhbF9iaXRmaWVsZCB7CiYjNDM7CWludCBkYXRhOwomIzQzOwl1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7CiYjNDM7CXVuc2lnbmVkIGludCBleHRyYV9iaXRmaWVsZDI6MTsKJiM0MzsJY2hhciBvbmVieXRlOwomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Py5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQgdGVzdG1vZF9sb2NhbF9iaXRmaWVsZDsKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fYmFkX29mZnNldCB7CiYjNDM7CXVuc2lnbmVkIGludCBleHRyYTsKJiM0Mzt9OwomIzQzOwomIzQzO1NFQygmIzM0Oz8uc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXQgdGVzdG1vZF9iYWRfb2Zmc2V0OwomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2luY29tcGF0aWJsZSB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIAl2b2lkICgqdGVzdF8yKShpbnQgKmEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCB0aGUgdXNlciB3YW50cyBtZSB0byB2ZXQgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgbW92ZSBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZmlsZXMgd2VyZSBldmVuIHRvdWNoZWQuIFRoZSBkaWZmIGhpZ2hsaWdodHM6IGB0b29scy9icGYvYnBmdG9vbC9nZW4uY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNgLgoKV2FpdCwgZXZlcnl0aGluZyBpcyBpbiBgdG9vbHMvYCEgVGhpcyBpcyBzdGFydGluZyB0byBsb29rIHN1c3BpY2lvdXMuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIGxldCYjMzk7cyB2ZXJpZnkgaWYgdGhhdCYjMzk7cyAqdHJ1bHkqIHRoZSBjYXNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvdGhlciBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIGBIRUFEYCB1c2luZyBgZ2l0YCBpZiBwb3NzaWJsZSwgb3IgYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgZGlmZiBvdXRwdXQgaXRzZWxmLgoKT2theSwgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmZXIgdG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQuIFdlJiMzOTtyZSBsb29raW5nIGZvciByZWFzb25zIHRvIHJlamVjdCB0aGlzLiBJdCBzYXlzIEkgc2hvdWxkIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAgb25seSBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIHVuZGVyIHNwZWNpZmljIG5vbi1rZXJuZWwgY2F0ZWdvcmllcy4gVGhlc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHVzZXItc3BhY2UgY2hhbmdlcyBsaWtlIHNlbGYtdGVzdHMgb3Igc2NyaXB0cyB0aGF0ICpkb24mIzM5O3QqIGltcGFjdCB0aGUga2VybmVsIGltYWdlLCBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZC9LY29uZmlnIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGNvbXBpbGVkIGxvZ2ljLgoKU28sIHNpbmNlIGFsbCBjaGFuZ2VzIGFyZSBpbiBgdG9vbHMvYCwgSSYjMzk7bGwgY2hlY2sgYW5kIGVuc3VyZSB0aG9zZSBmaWxlcyBkb24mIzM5O3QgdHJpZ2dlciBhbnl0aGluZyBuZWdhdGl2ZSBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLiBJIG5lZWQgdG8gYmUgKnN1cmUqIHRoYXQgdGhlcmUgYXJlIG5vIGhpZGRlbiBjaGFuZ2VzIGFueXdoZXJlIGVsc2UuIEkgc2hvdWxkIHJ1biBhIHRvb2wgb3Igc2NyaXB0IHRvIGRvdWJsZS1jaGVjayBgZ2l0IGRpZmZgIG9yIHRoZSBgbG9nYCB0byBhdm9pZCBhbnkgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk1CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDY0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gmIzM5O3MgRnV6emluZyBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXJlIHRoZXNlIGZpbGUgbW9kaWZpY2F0aW9ucyByZXNpZGUuIEkgc2VlIGB0b29scy9icGYvYnBmdG9vbC9nZW4uY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNgLiBDcnVjaWFsbHksIGFsbCBvZiB0aGVzZSBhcmUgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBgdG9vbHMvYnBmL2JwZnRvb2xgIGlzIGEgdXNlci1zcGFjZSB0b29sLiBgdG9vbHMvbGliL2JwZmAgaXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkuIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0c2Agb2J2aW91c2x5IGhvbGRzIHVzZXItc3BhY2Ugc2VsZi10ZXN0cy4gTm9uZSBvZiB0aGlzIGRpcmVjdGx5IHRvdWNoZXMgYW55dGhpbmcgY29yZSB0byB0aGUga2VybmVsOiBubyBga2VybmVsL2AsIG5vIGBuZXQvYCwgbm8gYGRyaXZlcnMvYCwgbm8gYGZzL2AsIGFuZCBubyBgaW5jbHVkZS9gIHRoYXQgd291bGQgYWZmZWN0IHRoZSBrZXJuZWwmIzM5O3MgY29tcGlsYXRpb24gaW50byBgdm1saW51eGAgb3IgYSBrZXJuZWwgbW9kdWxlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgY29uZmlybSB0aGF0IGxpYmJwZiBpcyBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBZZXAsIHVzZXItc3BhY2UgbGlicmFyeSBpdCBpcy4KClRoZSBrZXJuZWwmIzM5O3MgQlBGIHZlcmlmaWVyIGFuZCBgc3RydWN0X29wc2AgaW1wbGVtZW50YXRpb24gbGl2ZSBpbiBga2VybmVsL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHRoZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4KCkFjY29yZGluZyB0byBTZWN0aW9uIDIgb2YgdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBjbGVhciBjYXNlOiAmIzM0O1VzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDsgU28sIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLgoKR2l2ZW4gYFdvcnRoRnV6emluZz1mYWxzZWAsIGxldCYjMzk7cyBjaGVjayB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjcnlzdGFsIGNsZWFyLgoKRm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBbXWAgKG9yIG51bGwpLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXWAsIGFuZCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBoYXZlIHRvIGV4cGxhaW4gdGhhdCBhbGwgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlcnNwYWNlIHRvb2xzLCBsaWJyYXJpZXMsIGFuZCBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL2AgKHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gKSwgYW5kIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy4gVGh1cywgdGhpcyBwYXRjaCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLgoKSSYjMzk7dmUgZ290IGl0LiBObyBzdWJ0bGV0aWVzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG5lZ2F0aXZlIGNhc2UuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBicGZ0b29sIGluIHRvb2xzL2JwZi9icGZ0b29sLCBsaWJicGYgaW4gdG9vbHMvbGliL2JwZiwgYW5kIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBkb2VzIG5vdCB3YXJyYW50IGtlcm5lbCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6MDU6MzUuNDQ5NTE2ODk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg2NTg2OTI4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGJwZnRvb2wgaW4gdG9vbHMvYnBmL2JwZnRvb2wsIGxpYmJwZiBpbiB0b29scy9saWIvYnBmLCBhbmQgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGRvZXMgbm90IHdhcnJhbnQga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS40NDk1MjI0MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ1NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTU6MDU6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbmluZGV4IGE1MDU0MGVmNjUyMWMuLmQ5MzA3M2Q1ZTdlMzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbkBAIC0xMDQ0LDYyICsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSwgX191MzIgbWFwX3R5cGVfaWQpXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWFwX3R5cGUpXFxuIHtcXG4rXFx0ZW51bSBzdF9vcHNfc2hhZG93X2tpbmQge1xcbitcXHRcXHRTVF9PUFNfU0hBRE9XX1NDQUxBUixcXG4rXFx0XFx0U1RfT1BTX1NIQURPV19GVU5DX1BUUixcXG4rXFx0XFx0U1RfT1BTX1NIQURPV19PUEFRVUUsXFxuK1xcdH07XFxuIFxcdExJQkJQRl9PUFRTKGJ0Zl9kdW1wX2VtaXRfdHlwZV9kZWNsX29wdHMsIG9wdHMsIC5pbmRlbnRfbGV2ZWwgPSAzKTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTtcXG4tXFx0X191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XFxuK1xcdF9fdTY0IGJpdGZpZWxkX2VuZCA9IDAsIG1hcF9iaXRzO1xcbitcXHRfX3UzMiBiaXRfb2Zmc2V0LCBiaXRmaWVsZF9zaXplO1xcbitcXHRfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptO1xcbiBcXHRzdHJ1Y3QgYnRmX2R1bXAgKmQgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICptZW1iZXJfbmFtZTtcXG4gXFx0X191MzIgbWVtYmVyX3R5cGVfaWQ7XFxuLVxcdGludCBpLCBlcnIgPSAwLCBuO1xcbi1cXHRpbnQgc2l6ZTtcXG4rXFx0aW50IGFsaWduLCBlcnIgPSAwLCBpLCBtYXhfYWxpZ24gPSAxLCBuLCBzaXplO1xcbitcXHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCBzaGFkb3dfa2luZDtcXG4gXFxuIFxcdGQgPSBidGZfZHVtcF9fbmV3KGJ0ZiwgY29kZWdlbl9idGZfZHVtcF9wcmludGYsIE5VTEwsIE5VTEwpO1xcbiBcXHRpZiAoIWQpXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuIFxcbitcXHRtYXBfc2l6ZSA9IG1hcF90eXBlLVxcdTAwM2VzaXplO1xcbitcXHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XFxuIFxcdG4gPSBidGZfdmxlbihtYXBfdHlwZSk7XFxuIFxcdGZvciAoaSA9IDAsIG0gPSBidGZfbWVtYmVycyhtYXBfdHlwZSk7IGkgXFx1MDAzYyBuOyBpKyssIG0rKykge1xcbi1cXHRcXHRtZW1iZXJfdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtLVxcdTAwM2V0eXBlLCBcXHUwMDI2bWVtYmVyX3R5cGVfaWQpO1xcbiBcXHRcXHRtZW1iZXJfbmFtZSA9IGJ0Zl9fbmFtZV9ieV9vZmZzZXQoYnRmLCBtLVxcdTAwM2VuYW1lX29mZik7XFxuK1xcdFxcdGJpdF9vZmZzZXQgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQobWFwX3R5cGUsIGkpO1xcbitcXHRcXHRiaXRmaWVsZF9zaXplID0gYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKG1hcF90eXBlLCBpKTtcXG4rXFx0XFx0aWYgKGJpdGZpZWxkX3NpemUpIHtcXG4rXFx0XFx0XFx0aWYgKChfX3U2NCliaXRfb2Zmc2V0IFxcdTAwM2MgYml0ZmllbGRfZW5kIHx8XFxuK1xcdFxcdFxcdCAgICAoX191NjQpYml0X29mZnNldCBcXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcXG4rXFx0XFx0XFx0ICAgIGJpdF9vZmZzZXQgXFx1MDAzZSBtYXBfYml0cyB8fFxcbitcXHRcXHRcXHQgICAgYml0ZmllbGRfc2l6ZSBcXHUwMDNlIG1hcF9iaXRzIC0gYml0X29mZnNldCkge1xcbitcXHRcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBiaXRmaWVsZCBsYXlvdXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRiaXRmaWVsZF9lbmQgPSAoX191NjQpYml0X29mZnNldCArIGJpdGZpZWxkX3NpemU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRvZmZzZXQgPSBtLVxcdTAwM2VvZmZzZXQgLyA4O1xcbi1cXHRcXHRpZiAobmV4dF9vZmZzZXQgXFx1MDAzYyBvZmZzZXQpXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcXFxuXFxcIiwgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xcbitcXHRcXHRpZiAoYml0X29mZnNldCAlIDggfHwgYml0X29mZnNldCBcXHUwMDNjIGJpdGZpZWxkX2VuZCkge1xcbitcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIiwgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0ID0gYml0X29mZnNldCAvIDg7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyBuZXh0X29mZnNldCB8fCBvZmZzZXQgXFx1MDAzZSBtYXBfc2l6ZSkge1xcbitcXHRcXHRcXHRwX2VycihcXFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXFxcIiwgbWVtYmVyX25hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXG4rXFx0XFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cXHUwMDNldHlwZSwgXFx1MDAyNm1lbWJlcl90eXBlX2lkKTtcXG4gXFx0XFx0c3dpdGNoIChidGZfa2luZChtZW1iZXJfdHlwZSkpIHtcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9JTlQ6XFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfRkxPQVQ6XFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfRU5VTTpcXG4gXFx0XFx0Y2FzZSBCVEZfS0lORF9FTlVNNjQ6XFxuLVxcdFxcdFxcdC8qIHNjYWxhciB0eXBlICovXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIik7XFxuLVxcdFxcdFxcdG9wdHMuZmllbGRfbmFtZSA9IG1lbWJlcl9uYW1lO1xcbi1cXHRcXHRcXHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFxcdTAwMjZvcHRzKTtcXG4tXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIGVtaXQgdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXM6ICVkXFxcIiwgbWVtYmVyX25hbWUsIGVycik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiO1xcXFxuXFxcIik7XFxuLVxcbitcXHRcXHRcXHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xcbiBcXHRcXHRcXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXFxcblxcXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcXG4rXFx0XFx0XFx0YWxpZ24gPSBidGZfX2FsaWduX29mKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgQlRGX0tJTkRfUFRSOlxcbiBcXHRcXHRcXHRpZiAocmVzb2x2ZV9mdW5jX3B0cihidGYsIG0tXFx1MDAzZXR5cGUsIE5VTEwpKSB7XFxuLVxcdFxcdFxcdFxcdC8qIEZ1bmN0aW9uIHBvaW50ZXIgKi9cXG4tXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJcXFxcdFxcXFx0XFxcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKiVzO1xcXFxuXFxcIiwgbWVtYmVyX25hbWUpO1xcbi1cXG4tXFx0XFx0XFx0XFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yodm9pZCAqKTtcXG4rXFx0XFx0XFx0XFx0c2hhZG93X2tpbmQgPSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSO1xcbitcXHRcXHRcXHRcXHRzaXplID0gc2l6ZW9mKHZvaWQgKik7XFxuK1xcdFxcdFxcdFxcdGFsaWduID0gX19hbGlnbm9mX18odm9pZCAqKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0LyogQWxsIHBvaW50ZXIgdHlwZXMgYXJlIHVuc3VwcG9ydGVkIGV4Y2VwdCBmb3JcXG5AQCAtMTEwOCwzNCArMTEyNSw2NCBAQCBzdGF0aWMgaW50IHdhbGtfc3Rfb3BzX3NoYWRvd192YXJzKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqaWRlbnQsXFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0LyogVW5zdXBwb3J0ZWQgdHlwZXNcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogVHlwZXMgb3RoZXIgdGhhbiBzY2FsYXIgdHlwZXMgYW5kIGZ1bmN0aW9uXFxuLVxcdFxcdFxcdCAqIHBvaW50ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBvcmRlciB0b1xcbi1cXHRcXHRcXHQgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkXFxuLVxcdFxcdFxcdCAqIGJ5IG11bHRpcGxlIGRlZmluaXRpb25zLiBGb3IgaW5zdGFuY2UsIGlmIHRoZVxcbi1cXHRcXHRcXHQgKiBzdHJ1Y3QgdHlwZSBGT08gaXMgdXNlZCBpbiBhIHN0cnVjdF9vcHMgbWFwLFxcbi1cXHRcXHRcXHQgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLFxcbi1cXHRcXHRcXHQgKiB3aGljaCBtYXkgcmVzdWx0IGluIGNvbmZsaWN0cyBpZiBGT08gaXMgZGVmaW5lZFxcbi1cXHRcXHRcXHQgKiBpbiBkaWZmZXJlbnQgc2tlbGV0b24gZmlsZXMuXFxuLVxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfT1BBUVVFO1xcbiBcXHRcXHRcXHRzaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRwX2VycihcXFwiRmFpbGVkIHRvIHJlc29sdmUgc2l6ZSBvZiAlczogJWRcXFxcblxcXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gc2l6ZTtcXG4rXFx0XFx0XFx0YWxpZ24gPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNpemUgXFx1MDAzYyAwIHx8IGFsaWduIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRlcnIgPSBzaXplIFxcdTAwM2MgMCA/IHNpemUgOiBhbGlnbjtcXG4rXFx0XFx0XFx0cF9lcnIoXFxcIkZhaWxlZCB0byByZXNvbHZlIGxheW91dCBvZiAlczogJWRcXFwiLCBtZW1iZXJfbmFtZSwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKChfX3UzMilzaXplIFxcdTAwM2UgbWFwX3NpemUgLSBvZmZzZXQgfHxcXG4rXFx0XFx0ICAgIChhbGlnbiBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICUgYWxpZ24pKSB7XFxuK1xcdFxcdFxcdHBfZXJyKFxcXCJJbnZhbGlkIGxheW91dCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcXFwiLCBtZW1iZXJfbmFtZSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmV4dF9vZmZzZXQgXFx1MDAzYyBvZmZzZXQpXFxuK1xcdFxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfJWRbJXVdO1xcXFxuXFxcIiwgaSwgb2Zmc2V0IC0gbmV4dF9vZmZzZXQpO1xcbitcXG4rXFx0XFx0c3dpdGNoIChzaGFkb3dfa2luZCkge1xcbitcXHRcXHRjYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIpO1xcbitcXHRcXHRcXHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcXG4rXFx0XFx0XFx0ZXJyID0gYnRmX2R1bXBfX2VtaXRfdHlwZV9kZWNsKGQsIG1lbWJlcl90eXBlX2lkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdFxcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0XFx0cF9lcnIoXFxcIkZhaWxlZCB0byBlbWl0IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG1lbWJlcl9uYW1lLCBlcnIpO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwcmludGYoXFxcIjtcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSOlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqJXM7XFxcXG5cXFwiLCBtZW1iZXJfbmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOlxcbitcXHRcXHRcXHQvKiBBdm9pZCBlbWl0dGluZyBuYW1lZCB0eXBlcyB0aGF0IG1pZ2h0IGNvbmZsaWN0IHdpdGhcXG4rXFx0XFx0XFx0ICogZGVmaW5pdGlvbnMgZnJvbSBvdGhlciBza2VsZXRvbnMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdGNoYXIgX191bnN1cHBvcnRlZF8lZFslZF07XFxcXG5cXFwiLCBpLCBzaXplKTtcXG4tXFxuLVxcdFxcdFxcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRuZXh0X29mZnNldCA9IG9mZnNldCArIHNpemU7XFxuK1xcdFxcdG1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTtcXG4rXFx0XFx0Yml0ZmllbGRfZW5kID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQ2Fubm90IGZhaWwgc2luY2UgaXQgbXVzdCBiZSBhIHN0cnVjdCB0eXBlICovXFxuLVxcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1hcF90eXBlX2lkKTtcXG4tXFx0aWYgKG5leHRfb2Zmc2V0IFxcdTAwM2MgKF9fdTMyKXNpemUpXFxuLVxcdFxcdHByaW50ZihcXFwiXFxcXHRcXFxcdFxcXFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXFxcblxcXCIsIHNpemUgLSBuZXh0X29mZnNldCk7XFxuK1xcdGlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikge1xcbitcXHRcXHRwX2VycihcXFwiSW52YWxpZCBzaXplIGZvciBzdHJ1Y3Rfb3BzIHR5cGUgJXNcXFwiLCBpZGVudCk7XFxuK1xcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmIChuZXh0X29mZnNldCBcXHUwMDNjIG1hcF9zaXplKVxcbitcXHRcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRcXFxcdGNoYXIgX19wYWRkaW5nX2VuZFsldV07XFxcXG5cXFwiLCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcXG4gXFxuIG91dDpcXG4gXFx0YnRmX2R1bXBfX2ZyZWUoZCk7XFxuQEAgLTExNzcsNyArMTIyNCw3IEBAIHN0YXRpYyBpbnQgZ2VuX3N0X29wc19zaGFkb3dfdHlwZShjb25zdCBjaGFyICpvYmpfbmFtZSwgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjXFxuIFxcbiBcXHRwcmludGYoXFxcIlxcXFx0XFxcXHRzdHJ1Y3QgJXNfXyVzX18lcyB7XFxcXG5cXFwiLCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XFxuIFxcbi1cXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xcbitcXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGI3NDljMDE3NDJlZTAuLjI3OTFiNDg1ODU5MzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtMTE3NSw2ICsxMTc1LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICprZXJuX3R5cGUsICprZXJuX3Z0eXBlO1xcbiBcXHRfX3UzMiBpLCBrZXJuX3R5cGVfaWQsIGtlcm5fdnR5cGVfaWQsIGtlcm5fZGF0YV9vZmY7XFxuK1xcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcXG4gXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iaiA9IG1hcC1cXHUwMDNlb2JqO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmICpidGYgPSBvYmotXFx1MDAzZWJ0ZjtcXG4gXFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7XFxuQEAgLTExOTUsNiArMTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLVxcdTAwM2VidGYgOiBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4O1xcbitcXHRrZXJuX2RhdGFfbWVtYmVyX2lkeCA9IGtlcm5fZGF0YV9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3Z0eXBlKTtcXG4rXFx0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBhIGJpdGZpZWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuK1xcdH1cXG4rXFx0a2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpO1xcbitcXHRpZiAoa2Vybl9kYXRhX2JpdF9vZmYgJSA4KSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaGFzIGEgbm9uLWJ5dGUtYWxpZ25lZCBvZmZzZXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfYml0X29mZiAvIDg7XFxuK1xcdGlmIChrZXJuX2RhdGFfb2ZmIFxcdTAwM2Uga2Vybl92dHlwZS1cXHUwMDNlc2l6ZSB8fFxcbitcXHQgICAga2Vybl90eXBlLVxcdTAwM2VzaXplIFxcdTAwM2Uga2Vybl92dHlwZS1cXHUwMDNlc2l6ZSAtIGtlcm5fZGF0YV9vZmYpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCB2YWx1ZSB0eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIGtlcm5fdnR5cGUtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0cHJfZGVidWcoXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxcXG5cXFwiLFxcbiBcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBzdF9vcHMtXFx1MDAzZXR5cGVfaWQsIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCk7XFxuQEAgLTEyMDgsMjkgKzEyMjgsNTAgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGRhdGEgPSBzdF9vcHMtXFx1MDAzZWRhdGE7XFxuLVxcdGtlcm5fZGF0YV9vZmYgPSBrZXJuX2RhdGFfbWVtYmVyLVxcdTAwM2VvZmZzZXQgLyA4O1xcbiBcXHRrZXJuX2RhdGEgPSBzdF9vcHMtXFx1MDAzZWtlcm5fdmRhdGEgKyBrZXJuX2RhdGFfb2ZmO1xcbiBcXG4gXFx0bWVtYmVyID0gYnRmX21lbWJlcnModHlwZSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBidGZfdmxlbih0eXBlKTsgaSsrLCBtZW1iZXIrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqa2Vybl9tdHlwZTtcXG4tXFx0XFx0X191MzIgbXR5cGVfaWQsIGtlcm5fbXR5cGVfaWQ7XFxuK1xcdFxcdF9fdTMyIGJpdF9vZmZzZXQsIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xcbiBcXHRcXHR2b2lkICptZGF0YSwgKmtlcm5fbWRhdGE7XFxuIFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcXG4gXFx0XFx0X19zNjQgbXNpemUsIGtlcm5fbXNpemU7XFxuK1xcdFxcdF9fdTY0IG1hY2Nlc3Nfc2l6ZTtcXG4gXFx0XFx0X191MzIgbW9mZiwga2Vybl9tb2ZmO1xcbiBcXHRcXHRfX3UzMiBrZXJuX21lbWJlcl9pZHg7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKm1uYW1lO1xcbiBcXG4gXFx0XFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVxcdTAwM2VuYW1lX29mZik7XFxuLVxcdFxcdG1vZmYgPSBtZW1iZXItXFx1MDAzZW9mZnNldCAvIDg7XFxuLVxcdFxcdG1kYXRhID0gZGF0YSArIG1vZmY7XFxuK1xcdFxcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUodHlwZSwgaSkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGxvY2FsIGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdG1zaXplID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpO1xcbiBcXHRcXHRpZiAobXNpemUgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgc2l6ZSBvZiBtZW1iZXIgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gbXNpemU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBcXHUwMDI2bXR5cGVfaWQpO1xcbitcXHRcXHRtYWNjZXNzX3NpemUgPSBtc2l6ZTtcXG4rXFx0XFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpIFxcdTAwMjZcXHUwMDI2IG1hY2Nlc3Nfc2l6ZSBcXHUwMDNjIHNpemVvZihwcm9nKSlcXG4rXFx0XFx0XFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xcbitcXHRcXHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHR5cGUsIGkpO1xcbitcXHRcXHRpZiAoYml0X29mZnNldCAlIDgpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBtbmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1vZmYgPSBiaXRfb2Zmc2V0IC8gODtcXG4rXFx0XFx0aWYgKG1vZmYgXFx1MDAzZSB0eXBlLVxcdTAwM2VzaXplIHx8IG1hY2Nlc3Nfc2l6ZSBcXHUwMDNlIHR5cGUtXFx1MDAzZXNpemUgLSBtb2ZmKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIHR5cGUtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xcbiBcXG4gXFx0XFx0a2Vybl9tZW1iZXIgPSBmaW5kX21lbWJlcl9ieV9uYW1lKGtlcm5fYnRmLCBrZXJuX3R5cGUsIG1uYW1lKTtcXG4gXFx0XFx0aWYgKCFrZXJuX21lbWJlcikge1xcbkBAIC0xMjU5LDE3ICsxMzAwLDMzIEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0a2Vybl9tZW1iZXJfaWR4ID0ga2Vybl9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3R5cGUpO1xcbi1cXHRcXHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpIHx8XFxuLVxcdFxcdCAgICBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbitcXHRcXHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKGtlcm5fdHlwZSwga2Vybl9tZW1iZXJfaWR4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGJpdGZpZWxkICVzIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVA7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGtlcm5fbW9mZiA9IGtlcm5fbWVtYmVyLVxcdTAwM2VvZmZzZXQgLyA4O1xcbitcXHRcXHRrZXJuX21zaXplID0gYnRmX19yZXNvbHZlX3NpemUoa2Vybl9idGYsIGtlcm5fbWVtYmVyLVxcdTAwM2V0eXBlKTtcXG4rXFx0XFx0aWYgKGtlcm5fbXNpemUgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUga2VybmVsIHNpemUgb2YgbWVtYmVyICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW5hbWUsIG1uYW1lKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGtlcm5fbXNpemU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldChrZXJuX3R5cGUsIGtlcm5fbWVtYmVyX2lkeCk7XFxuK1xcdFxcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VuYW1lLCBtbmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGtlcm5fbW9mZiA9IGJpdF9vZmZzZXQgLyA4O1xcbitcXHRcXHRpZiAoa2Vybl9tb2ZmIFxcdTAwM2Uga2Vybl90eXBlLVxcdTAwM2VzaXplIHx8XFxuK1xcdFxcdCAgICAoX191NjQpa2Vybl9tc2l6ZSBcXHUwMDNlIGtlcm5fdHlwZS1cXHUwMDNlc2l6ZSAtIGtlcm5fbW9mZikge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCBzdHJ1Y3Rfb3BzIHR5cGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIGtlcm5fdHlwZS1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdFxcdGtlcm5fbWRhdGEgPSBrZXJuX2RhdGEgKyBrZXJuX21vZmY7XFxuIFxcbi1cXHRcXHRtdHlwZSA9IHNraXBfbW9kc19hbmRfdHlwZWRlZnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIFxcdTAwMjZtdHlwZV9pZCk7XFxuIFxcdFxcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cXHUwMDNldHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrZXJuX210eXBlX2lkKTtcXG4gXFx0XFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXFx1MDAzZWluZm8pICE9XFxuQEAgLTEyODEsNyArMTMzOCw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpKSB7XFxuLVxcdFxcdFxcdHByb2cgPSAqKHZvaWQgKiopbWRhdGE7XFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2cHJvZywgbWRhdGEsIHNpemVvZihwcm9nKSk7XFxuIFxcdFxcdFxcdC8qIGp1c3QgbGlrZSBmb3IgIWtlcm5fbWVtYmVyIGNhc2UgYWJvdmUsIHJlc2V0IGRlY2xhcmF0aXZlbHlcXG4gXFx0XFx0XFx0ICogc2V0IChhdCBjb21waWxlIHRpbWUpIHByb2dyYW0ncyBhdXRsb2FkIHRvIGZhbHNlLFxcbiBcXHRcXHRcXHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcXG5AQCAtMTM1Miw4ICsxNDA5LDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX210eXBlX2lkKTtcXG4tXFx0XFx0aWYgKGtlcm5fbXNpemUgXFx1MDAzYyAwIHx8IG1zaXplICE9IGtlcm5fbXNpemUpIHtcXG4rXFx0XFx0aWYgKG1zaXplICE9IGtlcm5fbXNpemUpIHtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IEVycm9yIGluIHNpemUgb2YgbWVtYmVyICVzOiAlemQgIT0gJXpkKGtlcm5lbClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdG1hcC1cXHUwMDNlbmFtZSwgbW5hbWUsIChzc2l6ZV90KW1zaXplLFxcbiBcXHRcXHRcXHRcXHQoc3NpemVfdClrZXJuX21zaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jXFxuaW5kZXggNzVhMGRlYTUxMWIzZi4uNDEwMjllYmIyMmYwMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9lcG9sbC5oXFx1MDAzZVxcbkBAIC0xNTAsNiArMTUxLDkxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKHZvaWQpXFxuIFxcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XFxuK1xcdGNoYXIgKmxvZyA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJzdHJ1Y3Rfb3BzX21vZHVsZV9vcGVuX2xvY2FsX2JpdGZpZWxkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKG9mZnNldG9mKHR5cGVvZigqc2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSwgZGF0YSksXFxuK1xcdFxcdCAgICAgICAwLCBcXFwibG9jYWxfYml0ZmllbGRfZGF0YV9vZmZzZXRcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShvZmZzZXRvZih0eXBlb2YoKnNrZWwtXFx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxcbitcXHRcXHQgICAgICAgOCwgXFxcImxvY2FsX2JpdGZpZWxkX29uZWJ5dGVfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2l6ZW9mKCpza2VsLVxcdTAwM2VzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLFxcbitcXHRcXHQgICAgICAgYnBmX21hcF9fdmFsdWVfc2l6ZShza2VsLVxcdTAwM2VtYXBzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQpLFxcbitcXHRcXHQgICAgICAgXFxcImxvY2FsX2JpdGZpZWxkX3NoYWRvd19zaXplXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVxcdTAwM2VkYXRhID0gMTtcXG4rXFx0c2tlbC1cXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVxcdTAwM2VvbmVieXRlID0gMTtcXG4rXFxuK1xcdGVyciA9IGJwZl9tYXBfX3NldF9hdXRvY3JlYXRlKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImVuYWJsZV9sb2NhbF9iaXRmaWVsZF9tYXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKHN0YXJ0X2xpYmJwZl9sb2dfY2FwdHVyZSgpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGVyciA9IHN0cnVjdF9vcHNfbW9kdWxlX19sb2FkKHNrZWwpO1xcbitcXHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FTk9UU1VQLCBcXFwic3RydWN0X29wc19tb2R1bGVfbG9hZF9sb2NhbF9iaXRmaWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXFxcImxvY2FsIGJpdGZpZWxkIGV4dHJhX2JpdGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWRcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJsb2NhbF9iaXRmaWVsZF9yZWplY3Rpb25fbG9nXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRmcmVlKGxvZyk7XFxuK1xcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XFxuK1xcdHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XFxuK1xcdHN0cnVjdCBidGZfdHlwZSAqdHlwZTtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRjaGFyICpsb2cgPSBOVUxMO1xcbitcXHRpbnQgZXJyLCB0eXBlX2lkO1xcbitcXG4rXFx0c2tlbCA9IHN0cnVjdF9vcHNfbW9kdWxlX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RydWN0X29wc19tb2R1bGVfb3Blbl9iYWRfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJ0ZiA9IGJwZl9vYmplY3RfX2J0Zihza2VsLVxcdTAwM2VvYmopO1xcbitcXHR0eXBlX2lkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFxcXCJicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IEJURl9LSU5EX1NUUlVDVCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHR5cGVfaWQsIDAsIFxcXCJmaW5kX2JhZF9vZmZzZXRfdHlwZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHR5cGUgPSAoc3RydWN0IGJ0Zl90eXBlICopYnRmX190eXBlX2J5X2lkKGJ0ZiwgdHlwZV9pZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcXFwiZ2V0X2JhZF9vZmZzZXRfdHlwZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRtZW1iZXIgPSBidGZfbWVtYmVycyh0eXBlKTtcXG4rXFx0bWVtYmVyLVxcdTAwM2VvZmZzZXQgPSB0eXBlLVxcdTAwM2VzaXplICogODtcXG4rXFxuK1xcdGVyciA9IGJwZl9tYXBfX3NldF9hdXRvY3JlYXRlKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZW5hYmxlX2JhZF9vZmZzZXRfbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcXG4rXFx0bG9nID0gc3RvcF9saWJicGZfbG9nX2NhcHR1cmUoKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwic3RydWN0X29wc19tb2R1bGVfbG9hZF9iYWRfb2Zmc2V0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwibWVtYmVyIGV4dHJhIGlzIG91dHNpZGUgdGhlIDQtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJiYWRfb2Zmc2V0X3JlamVjdGlvbl9sb2dcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGZyZWUobG9nKTtcXG4rXFx0c3RydWN0X29wc19tb2R1bGVfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuIC8qIFRoZSBzaWduYXR1cmUgb2YgYW4gaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlXFxuICAqIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlIGRlZmluZWQgaW4gdGhlIEJQRiBwcm9ncmFtLiBUaGlzIG1pc21hdGNoXFxuICAqIHNob3VsZCBiZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRvciBwcm9ncmFtXFxuQEAgLTMwNCw2ICszOTAsMTAgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxcbiBcXHRcXHR0ZXN0X3N0cnVjdF9vcHNfbG9hZCgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X29wc19ub3RfemVyb2VkXFxcIikpXFxuIFxcdFxcdHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzdHJ1Y3Rfb3BzX2xvY2FsX2JpdGZpZWxkXFxcIikpXFxuK1xcdFxcdHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X29wc19iYWRfbWVtYmVyX29mZnNldFxcXCIpKVxcbitcXHRcXHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0cnVjdF9vcHNfaW5jb21wYXRpYmxlXFxcIikpXFxuIFxcdFxcdHRlc3Rfc3RydWN0X29wc19pbmNvbXBhdGlibGUoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0cnVjdF9vcHNfbnVsbF9vdXRfY2JcXFwiKSlcXG5AQCAtMzE0LDQgKzQwNCwzIEBAIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19tb2R1bGUodm9pZClcXG4gXFx0XFx0dGVzdF9kZXRhY2hfbGluaygpO1xcbiBcXHRSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTtcXG4gfVxcbi1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xcbmluZGV4IDcxYzQyMGMzYTVhNmMuLjg0NmI1YTkzNGRjODMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xcbkBAIC03Niw2ICs3NiwyMyBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19femVyb2VkIHRlc3Rtb2RfemVyb2VkID0ge1xcbiBcXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXFxuIH07XFxuIFxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQge1xcbitcXHRpbnQgZGF0YTtcXG4rXFx0dW5zaWduZWQgaW50IGV4dHJhX2JpdGZpZWxkOjMxO1xcbitcXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQyOjE7XFxuK1xcdGNoYXIgb25lYnl0ZTtcXG4rfTtcXG4rXFxuK1NFQyhcXFwiPy5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQgdGVzdG1vZF9sb2NhbF9iaXRmaWVsZDtcXG4rXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHtcXG4rXFx0dW5zaWduZWQgaW50IGV4dHJhO1xcbit9O1xcbitcXG4rU0VDKFxcXCI/LnN0cnVjdF9vcHMubGlua1xcXCIpXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHRlc3Rtb2RfYmFkX29mZnNldDtcXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHR2b2lkICgqdGVzdF8yKShpbnQgKmEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS44OTk4NzAwNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4MjA4MzIxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGJwZnRvb2wgaW4gdG9vbHMvYnBmL2JwZnRvb2wsIGxpYmJwZiBpbiB0b29scy9saWIvYnBmLCBhbmQgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGRvZXMgbm90IHdhcnJhbnQga2VybmVsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkMDE4ZmI4NTRlODc5YmEzZmY3ZjMxNTRmYzdjY2E3ODY3ZGU5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTowNTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbmluZGV4IGE1MDU0MGVmNjUyMWMuLmQ5MzA3M2Q1ZTdlMzIgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbkBAIC0xMDQ0LDYyICsxMDQ0LDc5IEBAIGNvZGVnZW5fcHJvZ3Nfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IHByb2dfY250LCBib29sIHBvcHVsYXRlX2xpXG4gfVxuIFxuIHN0YXRpYyBpbnQgd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICppZGVudCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWFwX3R5cGUsIF9fdTMyIG1hcF90eXBlX2lkKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptYXBfdHlwZSlcbiB7XG4rXHRlbnVtIHN0X29wc19zaGFkb3dfa2luZCB7XG4rXHRcdFNUX09QU19TSEFET1dfU0NBTEFSLFxuK1x0XHRTVF9PUFNfU0hBRE9XX0ZVTkNfUFRSLFxuK1x0XHRTVF9PUFNfU0hBRE9XX09QQVFVRSxcbitcdH07XG4gXHRMSUJCUEZfT1BUUyhidGZfZHVtcF9lbWl0X3R5cGVfZGVjbF9vcHRzLCBvcHRzLCAuaW5kZW50X2xldmVsID0gMyk7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuLVx0X191MzIgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XG4rXHRfX3U2NCBiaXRmaWVsZF9lbmQgPSAwLCBtYXBfYml0cztcbitcdF9fdTMyIGJpdF9vZmZzZXQsIGJpdGZpZWxkX3NpemU7XG4rXHRfX3UzMiBtYXBfc2l6ZSwgb2Zmc2V0LCBuZXh0X29mZnNldCA9IDA7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbTtcbiBcdHN0cnVjdCBidGZfZHVtcCAqZCA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICptZW1iZXJfbmFtZTtcbiBcdF9fdTMyIG1lbWJlcl90eXBlX2lkO1xuLVx0aW50IGksIGVyciA9IDAsIG47XG4tXHRpbnQgc2l6ZTtcbitcdGludCBhbGlnbiwgZXJyID0gMCwgaSwgbWF4X2FsaWduID0gMSwgbiwgc2l6ZTtcbitcdGVudW0gc3Rfb3BzX3NoYWRvd19raW5kIHNoYWRvd19raW5kO1xuIFxuIFx0ZCA9IGJ0Zl9kdW1wX19uZXcoYnRmLCBjb2RlZ2VuX2J0Zl9kdW1wX3ByaW50ZiwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoIWQpXG4gXHRcdHJldHVybiAtZXJybm87XG4gXG4rXHRtYXBfc2l6ZSA9IG1hcF90eXBlLVx1MDAzZXNpemU7XG4rXHRtYXBfYml0cyA9IChfX3U2NCltYXBfc2l6ZSAqIDg7XG4gXHRuID0gYnRmX3ZsZW4obWFwX3R5cGUpO1xuIFx0Zm9yIChpID0gMCwgbSA9IGJ0Zl9tZW1iZXJzKG1hcF90eXBlKTsgaSBcdTAwM2MgbjsgaSsrLCBtKyspIHtcbi1cdFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cdTAwM2V0eXBlLCBcdTAwMjZtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdG1lbWJlcl9uYW1lID0gYnRmX19uYW1lX2J5X29mZnNldChidGYsIG0tXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KG1hcF90eXBlLCBpKTtcbitcdFx0Yml0ZmllbGRfc2l6ZSA9IGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShtYXBfdHlwZSwgaSk7XG4rXHRcdGlmIChiaXRmaWVsZF9zaXplKSB7XG4rXHRcdFx0aWYgKChfX3U2NCliaXRfb2Zmc2V0IFx1MDAzYyBiaXRmaWVsZF9lbmQgfHxcbitcdFx0XHQgICAgKF9fdTY0KWJpdF9vZmZzZXQgXHUwMDNjIChfX3U2NCluZXh0X29mZnNldCAqIDggfHxcbitcdFx0XHQgICAgYml0X29mZnNldCBcdTAwM2UgbWFwX2JpdHMgfHxcbitcdFx0XHQgICAgYml0ZmllbGRfc2l6ZSBcdTAwM2UgbWFwX2JpdHMgLSBiaXRfb2Zmc2V0KSB7XG4rXHRcdFx0XHRwX2VycihcIkludmFsaWQgYml0ZmllbGQgbGF5b3V0IGZvciBzdHJ1Y3Rfb3BzIG1lbWJlciAlc1wiLFxuK1x0XHRcdFx0ICAgICAgbWVtYmVyX25hbWUpO1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRiaXRmaWVsZF9lbmQgPSAoX191NjQpYml0X29mZnNldCArIGJpdGZpZWxkX3NpemU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdFx0b2Zmc2V0ID0gbS1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG9mZnNldClcbi1cdFx0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ18lZFsldV07XFxuXCIsIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbitcdFx0aWYgKGJpdF9vZmZzZXQgJSA4IHx8IGJpdF9vZmZzZXQgXHUwMDNjIGJpdGZpZWxkX2VuZCkge1xuK1x0XHRcdHBfZXJyKFwiSW52YWxpZCBvZmZzZXQgZm9yIHN0cnVjdF9vcHMgbWVtYmVyICVzXCIsIG1lbWJlcl9uYW1lKTtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9mZnNldCA9IGJpdF9vZmZzZXQgLyA4O1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyBuZXh0X29mZnNldCB8fCBvZmZzZXQgXHUwMDNlIG1hcF9zaXplKSB7XG4rXHRcdFx0cF9lcnIoXCJJbnZhbGlkIG9mZnNldCBmb3Igc3RydWN0X29wcyBtZW1iZXIgJXNcIiwgbWVtYmVyX25hbWUpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcbitcdFx0bWVtYmVyX3R5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbS1cdTAwM2V0eXBlLCBcdTAwMjZtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdHN3aXRjaCAoYnRmX2tpbmQobWVtYmVyX3R5cGUpKSB7XG4gXHRcdGNhc2UgQlRGX0tJTkRfSU5UOlxuIFx0XHRjYXNlIEJURl9LSU5EX0ZMT0FUOlxuIFx0XHRjYXNlIEJURl9LSU5EX0VOVU06XG4gXHRcdGNhc2UgQlRGX0tJTkRfRU5VTTY0OlxuLVx0XHRcdC8qIHNjYWxhciB0eXBlICovXG4tXHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0XCIpO1xuLVx0XHRcdG9wdHMuZmllbGRfbmFtZSA9IG1lbWJlcl9uYW1lO1xuLVx0XHRcdGVyciA9IGJ0Zl9kdW1wX19lbWl0X3R5cGVfZGVjbChkLCBtZW1iZXJfdHlwZV9pZCwgXHUwMDI2b3B0cyk7XG4tXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0cF9lcnIoXCJGYWlsZWQgdG8gZW1pdCB0eXBlIGRlY2xhcmF0aW9uIGZvciAlczogJWRcIiwgbWVtYmVyX25hbWUsIGVycik7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0cHJpbnRmKFwiO1xcblwiKTtcbi1cbitcdFx0XHRzaGFkb3dfa2luZCA9IFNUX09QU19TSEFET1dfU0NBTEFSO1xuIFx0XHRcdHNpemUgPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIG1lbWJlcl90eXBlX2lkKTtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0cF9lcnIoXCJGYWlsZWQgdG8gcmVzb2x2ZSBzaXplIG9mICVzOiAlZFxcblwiLCBtZW1iZXJfbmFtZSwgc2l6ZSk7XG4tXHRcdFx0XHRlcnIgPSBzaXplO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcbitcdFx0XHRhbGlnbiA9IGJ0Zl9fYWxpZ25fb2YoYnRmLCBtZW1iZXJfdHlwZV9pZCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgQlRGX0tJTkRfUFRSOlxuIFx0XHRcdGlmIChyZXNvbHZlX2Z1bmNfcHRyKGJ0ZiwgbS1cdTAwM2V0eXBlLCBOVUxMKSkge1xuLVx0XHRcdFx0LyogRnVuY3Rpb24gcG9pbnRlciAqL1xuLVx0XHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcXG5cIiwgbWVtYmVyX25hbWUpO1xuLVxuLVx0XHRcdFx0bmV4dF9vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yodm9pZCAqKTtcbitcdFx0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19GVU5DX1BUUjtcbitcdFx0XHRcdHNpemUgPSBzaXplb2Yodm9pZCAqKTtcbitcdFx0XHRcdGFsaWduID0gX19hbGlnbm9mX18odm9pZCAqKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBBbGwgcG9pbnRlciB0eXBlcyBhcmUgdW5zdXBwb3J0ZWQgZXhjZXB0IGZvclxuQEAgLTExMDgsMzQgKzExMjUsNjQgQEAgc3RhdGljIGludCB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmlkZW50LFxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIFVuc3VwcG9ydGVkIHR5cGVzXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBUeXBlcyBvdGhlciB0aGFuIHNjYWxhciB0eXBlcyBhbmQgZnVuY3Rpb25cbi1cdFx0XHQgKiBwb2ludGVycyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaW4gb3JkZXIgdG9cbi1cdFx0XHQgKiBwcmV2ZW50IGNvbmZsaWN0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgY2F1c2VkXG4tXHRcdFx0ICogYnkgbXVsdGlwbGUgZGVmaW5pdGlvbnMuIEZvciBpbnN0YW5jZSwgaWYgdGhlXG4tXHRcdFx0ICogc3RydWN0IHR5cGUgRk9PIGlzIHVzZWQgaW4gYSBzdHJ1Y3Rfb3BzIG1hcCxcbi1cdFx0XHQgKiBicGZ0b29sIGhhcyB0byBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgRk9PLFxuLVx0XHRcdCAqIHdoaWNoIG1heSByZXN1bHQgaW4gY29uZmxpY3RzIGlmIEZPTyBpcyBkZWZpbmVkXG4tXHRcdFx0ICogaW4gZGlmZmVyZW50IHNrZWxldG9uIGZpbGVzLlxuLVx0XHRcdCAqL1xuK1x0XHRcdHNoYWRvd19raW5kID0gU1RfT1BTX1NIQURPV19PUEFRVUU7XG4gXHRcdFx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyX3R5cGVfaWQpO1xuLVx0XHRcdGlmIChzaXplIFx1MDAzYyAwKSB7XG4tXHRcdFx0XHRwX2VycihcIkZhaWxlZCB0byByZXNvbHZlIHNpemUgb2YgJXM6ICVkXFxuXCIsIG1lbWJlcl9uYW1lLCBzaXplKTtcbi1cdFx0XHRcdGVyciA9IHNpemU7XG4rXHRcdFx0YWxpZ24gPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzaXplIFx1MDAzYyAwIHx8IGFsaWduIFx1MDAzYyAwKSB7XG4rXHRcdFx0ZXJyID0gc2l6ZSBcdTAwM2MgMCA/IHNpemUgOiBhbGlnbjtcbitcdFx0XHRwX2VycihcIkZhaWxlZCB0byByZXNvbHZlIGxheW91dCBvZiAlczogJWRcIiwgbWVtYmVyX25hbWUsIGVycik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aWYgKChfX3UzMilzaXplIFx1MDAzZSBtYXBfc2l6ZSAtIG9mZnNldCB8fFxuK1x0XHQgICAgKGFsaWduIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgJSBhbGlnbikpIHtcbitcdFx0XHRwX2VycihcIkludmFsaWQgbGF5b3V0IGZvciBzdHJ1Y3Rfb3BzIG1lbWJlciAlc1wiLCBtZW1iZXJfbmFtZSk7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG9mZnNldClcbitcdFx0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ18lZFsldV07XFxuXCIsIGksIG9mZnNldCAtIG5leHRfb2Zmc2V0KTtcbitcbitcdFx0c3dpdGNoIChzaGFkb3dfa2luZCkge1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfU0NBTEFSOlxuK1x0XHRcdHByaW50ZihcIlxcdFxcdFxcdFwiKTtcbitcdFx0XHRvcHRzLmZpZWxkX25hbWUgPSBtZW1iZXJfbmFtZTtcbitcdFx0XHRlcnIgPSBidGZfZHVtcF9fZW1pdF90eXBlX2RlY2woZCwgbWVtYmVyX3R5cGVfaWQsIFx1MDAyNm9wdHMpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHBfZXJyKFwiRmFpbGVkIHRvIGVtaXQgdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXM6ICVkXCIsXG4rXHRcdFx0XHQgICAgICBtZW1iZXJfbmFtZSwgZXJyKTtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbitcdFx0XHRwcmludGYoXCI7XFxuXCIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfRlVOQ19QVFI6XG4rXHRcdFx0cHJpbnRmKFwiXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtIColcztcXG5cIiwgbWVtYmVyX25hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNUX09QU19TSEFET1dfT1BBUVVFOlxuK1x0XHRcdC8qIEF2b2lkIGVtaXR0aW5nIG5hbWVkIHR5cGVzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aFxuK1x0XHRcdCAqIGRlZmluaXRpb25zIGZyb20gb3RoZXIgc2tlbGV0b25zLlxuK1x0XHRcdCAqL1xuIFx0XHRcdHByaW50ZihcIlxcdFxcdFxcdGNoYXIgX191bnN1cHBvcnRlZF8lZFslZF07XFxuXCIsIGksIHNpemUpO1xuLVxuLVx0XHRcdG5leHRfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiBcdFx0fVxuK1xuK1x0XHRuZXh0X29mZnNldCA9IG9mZnNldCArIHNpemU7XG4rXHRcdG1heF9hbGlnbiA9IG1heChtYXhfYWxpZ24sIGFsaWduKTtcbitcdFx0Yml0ZmllbGRfZW5kID0gMDtcbiBcdH1cbiBcbi1cdC8qIENhbm5vdCBmYWlsIHNpbmNlIGl0IG11c3QgYmUgYSBzdHJ1Y3QgdHlwZSAqL1xuLVx0c2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWFwX3R5cGVfaWQpO1xuLVx0aWYgKG5leHRfb2Zmc2V0IFx1MDAzYyAoX191MzIpc2l6ZSlcbi1cdFx0cHJpbnRmKFwiXFx0XFx0XFx0Y2hhciBfX3BhZGRpbmdfZW5kWyV1XTtcXG5cIiwgc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbitcdGlmIChtYXBfc2l6ZSAlIG1heF9hbGlnbikge1xuK1x0XHRwX2VycihcIkludmFsaWQgc2l6ZSBmb3Igc3RydWN0X29wcyB0eXBlICVzXCIsIGlkZW50KTtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAobmV4dF9vZmZzZXQgXHUwMDNjIG1hcF9zaXplKVxuK1x0XHRwcmludGYoXCJcXHRcXHRcXHRjaGFyIF9fcGFkZGluZ19lbmRbJXVdO1xcblwiLCBtYXBfc2l6ZSAtIG5leHRfb2Zmc2V0KTtcbiBcbiBvdXQ6XG4gXHRidGZfZHVtcF9fZnJlZShkKTtcbkBAIC0xMTc3LDcgKzEyMjQsNyBAQCBzdGF0aWMgaW50IGdlbl9zdF9vcHNfc2hhZG93X3R5cGUoY29uc3QgY2hhciAqb2JqX25hbWUsIHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY1xuIFxuIFx0cHJpbnRmKFwiXFx0XFx0c3RydWN0ICVzX18lc19fJXMge1xcblwiLCBvYmpfbmFtZSwgaWRlbnQsIHR5cGVfbmFtZSk7XG4gXG4tXHRlcnIgPSB3YWxrX3N0X29wc19zaGFkb3dfdmFycyhidGYsIGlkZW50LCBtYXBfdHlwZSwgbWFwX3R5cGVfaWQpO1xuK1x0ZXJyID0gd2Fsa19zdF9vcHNfc2hhZG93X3ZhcnMoYnRmLCBpZGVudCwgbWFwX3R5cGUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uMjc5MWI0ODU4NTkzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xMTc1LDYgKzExNzUsNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLCAqa2Vybl9tZW1iZXIsICprZXJuX2RhdGFfbWVtYmVyO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqa2Vybl90eXBlLCAqa2Vybl92dHlwZTtcbiBcdF9fdTMyIGksIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCwga2Vybl9kYXRhX29mZjtcbitcdF9fdTMyIGtlcm5fZGF0YV9iaXRfb2ZmLCBrZXJuX2RhdGFfbWVtYmVyX2lkeDtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmogPSBtYXAtXHUwMDNlb2JqO1xuIFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gb2JqLVx1MDAzZWJ0ZjtcbiBcdHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xuQEAgLTExOTUsNiArMTE5NiwyNSBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRrZXJuX2J0ZiA9IG1vZF9idGYgPyBtb2RfYnRmLVx1MDAzZWJ0ZiA6IG9iai1cdTAwM2VidGZfdm1saW51eDtcbitcdGtlcm5fZGF0YV9tZW1iZXJfaWR4ID0ga2Vybl9kYXRhX21lbWJlciAtIGJ0Zl9tZW1iZXJzKGtlcm5fdnR5cGUpO1xuK1x0aWYgKGJ0Zl9tZW1iZXJfYml0ZmllbGRfc2l6ZShrZXJuX3Z0eXBlLCBrZXJuX2RhdGFfbWVtYmVyX2lkeCkpIHtcbitcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgZGF0YSBtZW1iZXIgaXMgYSBiaXRmaWVsZFxcblwiLFxuK1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbitcdFx0cmV0dXJuIC1FTk9UU1VQO1xuK1x0fVxuK1x0a2Vybl9kYXRhX2JpdF9vZmYgPSBidGZfbWVtYmVyX2JpdF9vZmZzZXQoa2Vybl92dHlwZSwga2Vybl9kYXRhX21lbWJlcl9pZHgpO1xuK1x0aWYgKGtlcm5fZGF0YV9iaXRfb2ZmICUgOCkge1xuK1x0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGtlcm5lbCBkYXRhIG1lbWJlciBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdG1hcC1cdTAwM2VuYW1lKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRrZXJuX2RhdGFfb2ZmID0ga2Vybl9kYXRhX2JpdF9vZmYgLyA4O1xuK1x0aWYgKGtlcm5fZGF0YV9vZmYgXHUwMDNlIGtlcm5fdnR5cGUtXHUwMDNlc2l6ZSB8fFxuK1x0ICAgIGtlcm5fdHlwZS1cdTAwM2VzaXplIFx1MDAzZSBrZXJuX3Z0eXBlLVx1MDAzZXNpemUgLSBrZXJuX2RhdGFfb2ZmKSB7XG4rXHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIGRhdGEgbWVtYmVyIGlzIG91dHNpZGUgdGhlICV1LWJ5dGUga2VybmVsIHZhbHVlIHR5cGVcXG5cIixcbitcdFx0XHRtYXAtXHUwMDNlbmFtZSwga2Vybl92dHlwZS1cdTAwM2VzaXplKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRwcl9kZWJ1ZyhcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiB0eXBlX2lkOiV1IGtlcm5fdHlwZV9pZDoldSBrZXJuX3Z0eXBlX2lkOiV1XFxuXCIsXG4gXHRcdCBtYXAtXHUwMDNlbmFtZSwgc3Rfb3BzLVx1MDAzZXR5cGVfaWQsIGtlcm5fdHlwZV9pZCwga2Vybl92dHlwZV9pZCk7XG5AQCAtMTIwOCwyOSArMTIyOCw1MCBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZGF0YSA9IHN0X29wcy1cdTAwM2VkYXRhO1xuLVx0a2Vybl9kYXRhX29mZiA9IGtlcm5fZGF0YV9tZW1iZXItXHUwMDNlb2Zmc2V0IC8gODtcbiBcdGtlcm5fZGF0YSA9IHN0X29wcy1cdTAwM2VrZXJuX3ZkYXRhICsga2Vybl9kYXRhX29mZjtcbiBcbiBcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnRmX3ZsZW4odHlwZSk7IGkrKywgbWVtYmVyKyspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptdHlwZSwgKmtlcm5fbXR5cGU7XG4tXHRcdF9fdTMyIG10eXBlX2lkLCBrZXJuX210eXBlX2lkO1xuK1x0XHRfX3UzMiBiaXRfb2Zmc2V0LCBtdHlwZV9pZCwga2Vybl9tdHlwZV9pZDtcbiBcdFx0dm9pZCAqbWRhdGEsICprZXJuX21kYXRhO1xuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4gXHRcdF9fczY0IG1zaXplLCBrZXJuX21zaXplO1xuK1x0XHRfX3U2NCBtYWNjZXNzX3NpemU7XG4gXHRcdF9fdTMyIG1vZmYsIGtlcm5fbW9mZjtcbiBcdFx0X191MzIga2Vybl9tZW1iZXJfaWR4O1xuIFx0XHRjb25zdCBjaGFyICptbmFtZTtcbiBcbiBcdFx0bW5hbWUgPSBidGZfX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0bW9mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQgLyA4O1xuLVx0XHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xuK1x0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBsb2NhbCBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIsXG4rXHRcdFx0XHRtYXAtXHUwMDNlbmFtZSwgbW5hbWUpO1xuK1x0XHRcdHJldHVybiAtRU5PVFNVUDtcbitcdFx0fVxuK1xuIFx0XHRtc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIFx0XHRpZiAobXNpemUgXHUwMDNjIDApIHtcbiBcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGZhaWxlZCB0byByZXNvbHZlIHRoZSBzaXplIG9mIG1lbWJlciAlc1xcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiBcdFx0XHRyZXR1cm4gbXNpemU7XG4gXHRcdH1cbitcdFx0bXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIFx1MDAyNm10eXBlX2lkKTtcbitcdFx0bWFjY2Vzc19zaXplID0gbXNpemU7XG4rXHRcdGlmIChidGZfaXNfcHRyKG10eXBlKSBcdTAwMjZcdTAwMjYgbWFjY2Vzc19zaXplIFx1MDAzYyBzaXplb2YocHJvZykpXG4rXHRcdFx0bWFjY2Vzc19zaXplID0gc2l6ZW9mKHByb2cpO1xuK1x0XHRiaXRfb2Zmc2V0ID0gYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHR5cGUsIGkpO1xuK1x0XHRpZiAoYml0X29mZnNldCAlIDgpIHtcbitcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRtb2ZmID0gYml0X29mZnNldCAvIDg7XG4rXHRcdGlmIChtb2ZmIFx1MDAzZSB0eXBlLVx1MDAzZXNpemUgfHwgbWFjY2Vzc19zaXplIFx1MDAzZSB0eXBlLVx1MDAzZXNpemUgLSBtb2ZmKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBtZW1iZXIgJXMgaXMgb3V0c2lkZSB0aGUgJXUtYnl0ZSBsb2NhbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwgdHlwZS1cdTAwM2VzaXplKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRtZGF0YSA9IGRhdGEgKyBtb2ZmO1xuIFxuIFx0XHRrZXJuX21lbWJlciA9IGZpbmRfbWVtYmVyX2J5X25hbWUoa2Vybl9idGYsIGtlcm5fdHlwZSwgbW5hbWUpO1xuIFx0XHRpZiAoIWtlcm5fbWVtYmVyKSB7XG5AQCAtMTI1OSwxNyArMTMwMCwzMyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdH1cbiBcbiBcdFx0a2Vybl9tZW1iZXJfaWR4ID0ga2Vybl9tZW1iZXIgLSBidGZfbWVtYmVycyhrZXJuX3R5cGUpO1xuLVx0XHRpZiAoYnRmX21lbWJlcl9iaXRmaWVsZF9zaXplKHR5cGUsIGkpIHx8XG4tXHRcdCAgICBidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XG4tXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBiaXRmaWVsZCAlcyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIsXG4rXHRcdGlmIChidGZfbWVtYmVyX2JpdGZpZWxkX3NpemUoa2Vybl90eXBlLCBrZXJuX21lbWJlcl9pZHgpKSB7XG4rXHRcdFx0cHJfd2FybihcInN0cnVjdF9vcHMgaW5pdF9rZXJuICVzOiBrZXJuZWwgYml0ZmllbGQgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbiBcdFx0XHRyZXR1cm4gLUVOT1RTVVA7XG4gXHRcdH1cbiBcbi1cdFx0a2Vybl9tb2ZmID0ga2Vybl9tZW1iZXItXHUwMDNlb2Zmc2V0IC8gODtcbitcdFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlKTtcbitcdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDApIHtcbitcdFx0XHRwcl93YXJuKFwic3RydWN0X29wcyBpbml0X2tlcm4gJXM6IGZhaWxlZCB0byByZXNvbHZlIHRoZSBrZXJuZWwgc2l6ZSBvZiBtZW1iZXIgJXNcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSk7XG4rXHRcdFx0cmV0dXJuIGtlcm5fbXNpemU7XG4rXHRcdH1cbitcdFx0Yml0X29mZnNldCA9IGJ0Zl9tZW1iZXJfYml0X29mZnNldChrZXJuX3R5cGUsIGtlcm5fbWVtYmVyX2lkeCk7XG4rXHRcdGlmIChiaXRfb2Zmc2V0ICUgOCkge1xuK1x0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBoYXMgYSBub24tYnl0ZS1hbGlnbmVkIG9mZnNldFxcblwiLFxuK1x0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRrZXJuX21vZmYgPSBiaXRfb2Zmc2V0IC8gODtcbitcdFx0aWYgKGtlcm5fbW9mZiBcdTAwM2Uga2Vybl90eXBlLVx1MDAzZXNpemUgfHxcbitcdFx0ICAgIChfX3U2NClrZXJuX21zaXplIFx1MDAzZSBrZXJuX3R5cGUtXHUwMDNlc2l6ZSAtIGtlcm5fbW9mZikge1xuK1x0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczoga2VybmVsIG1lbWJlciAlcyBpcyBvdXRzaWRlIHRoZSAldS1ieXRlIGtlcm5lbCBzdHJ1Y3Rfb3BzIHR5cGVcXG5cIixcbitcdFx0XHRcdG1hcC1cdTAwM2VuYW1lLCBtbmFtZSwga2Vybl90eXBlLVx1MDAzZXNpemUpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHRcdGtlcm5fbWRhdGEgPSBrZXJuX2RhdGEgKyBrZXJuX21vZmY7XG4gXG4tXHRcdG10eXBlID0gc2tpcF9tb2RzX2FuZF90eXBlZGVmcyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLCBcdTAwMjZtdHlwZV9pZCk7XG4gXHRcdGtlcm5fbXR5cGUgPSBza2lwX21vZHNfYW5kX3R5cGVkZWZzKGtlcm5fYnRmLCBrZXJuX21lbWJlci1cdTAwM2V0eXBlLFxuIFx0XHRcdFx0XHRcdCAgICBcdTAwMjZrZXJuX210eXBlX2lkKTtcbiBcdFx0aWYgKEJURl9JTkZPX0tJTkQobXR5cGUtXHUwMDNlaW5mbykgIT1cbkBAIC0xMjgxLDcgKzEzMzgsNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGJ0Zl9pc19wdHIobXR5cGUpKSB7XG4tXHRcdFx0cHJvZyA9ICoodm9pZCAqKiltZGF0YTtcbitcdFx0XHRtZW1jcHkoXHUwMDI2cHJvZywgbWRhdGEsIHNpemVvZihwcm9nKSk7XG4gXHRcdFx0LyoganVzdCBsaWtlIGZvciAha2Vybl9tZW1iZXIgY2FzZSBhYm92ZSwgcmVzZXQgZGVjbGFyYXRpdmVseVxuIFx0XHRcdCAqIHNldCAoYXQgY29tcGlsZSB0aW1lKSBwcm9ncmFtJ3MgYXV0bG9hZCB0byBmYWxzZSxcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbkBAIC0xMzUyLDggKzE0MDksNyBAQCBzdGF0aWMgaW50IGJwZl9tYXBfX2luaXRfa2Vybl9zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0a2Vybl9tc2l6ZSA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGtlcm5fYnRmLCBrZXJuX210eXBlX2lkKTtcbi1cdFx0aWYgKGtlcm5fbXNpemUgXHUwMDNjIDAgfHwgbXNpemUgIT0ga2Vybl9tc2l6ZSkge1xuK1x0XHRpZiAobXNpemUgIT0ga2Vybl9tc2l6ZSkge1xuIFx0XHRcdHByX3dhcm4oXCJzdHJ1Y3Rfb3BzIGluaXRfa2VybiAlczogRXJyb3IgaW4gc2l6ZSBvZiBtZW1iZXIgJXM6ICV6ZCAhPSAlemQoa2VybmVsKVxcblwiLFxuIFx0XHRcdFx0bWFwLVx1MDAzZW5hbWUsIG1uYW1lLCAoc3NpemVfdCltc2l6ZSxcbiBcdFx0XHRcdChzc2l6ZV90KWtlcm5fbXNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuaW5kZXggNzVhMGRlYTUxMWIzZi4uNDEwMjllYmIyMmYwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tb2R1bGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvZXBvbGwuaFx1MDAzZVxuQEAgLTE1MCw2ICsxNTEsOTEgQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX25vdF96ZXJvZWQodm9pZClcbiBcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGQodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XG4rXHRjaGFyICpsb2cgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic3RydWN0X29wc19tb2R1bGVfb3Blbl9sb2NhbF9iaXRmaWVsZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIGRhdGEpLFxuK1x0XHQgICAgICAgMCwgXCJsb2NhbF9iaXRmaWVsZF9kYXRhX29mZnNldFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEob2Zmc2V0b2YodHlwZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksIG9uZWJ5dGUpLFxuK1x0XHQgICAgICAgOCwgXCJsb2NhbF9iaXRmaWVsZF9vbmVieXRlX29mZnNldFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2l6ZW9mKCpza2VsLVx1MDAzZXN0cnVjdF9vcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCksXG4rXHRcdCAgICAgICBicGZfbWFwX192YWx1ZV9zaXplKHNrZWwtXHUwMDNlbWFwcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkKSxcbitcdFx0ICAgICAgIFwibG9jYWxfYml0ZmllbGRfc2hhZG93X3NpemVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIE5vcm1hbCBmaWVsZHMgYXJvdW5kIHRoZSB1bnN1cHBvcnRlZCBiaXRmaWVsZCByZW1haW4gYWNjZXNzaWJsZS4gKi9cbitcdHNrZWwtXHUwMDNlc3RydWN0X29wcy50ZXN0bW9kX2xvY2FsX2JpdGZpZWxkLVx1MDAzZWRhdGEgPSAxO1xuK1x0c2tlbC1cdTAwM2VzdHJ1Y3Rfb3BzLnRlc3Rtb2RfbG9jYWxfYml0ZmllbGQtXHUwMDNlb25lYnl0ZSA9IDE7XG4rXG4rXHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9sb2NhbF9iaXRmaWVsZCwgdHJ1ZSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZW5hYmxlX2xvY2FsX2JpdGZpZWxkX21hcFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHN0YXJ0X2xpYmJwZl9sb2dfY2FwdHVyZSgpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRlcnIgPSBzdHJ1Y3Rfb3BzX21vZHVsZV9fbG9hZChza2VsKTtcbitcdGxvZyA9IHN0b3BfbGliYnBmX2xvZ19jYXB0dXJlKCk7XG4rXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FTk9UU1VQLCBcInN0cnVjdF9vcHNfbW9kdWxlX2xvYWRfbG9jYWxfYml0ZmllbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZywgXCJsb2NhbCBiaXRmaWVsZCBleHRyYV9iaXRmaWVsZCBpcyBub3Qgc3VwcG9ydGVkXCIsXG4rXHRcdFx0ICBcImxvY2FsX2JpdGZpZWxkX3JlamVjdGlvbl9sb2dcIik7XG4rXG4rY2xlYW51cDpcbitcdGZyZWUobG9nKTtcbitcdHN0cnVjdF9vcHNfbW9kdWxlX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19tb2R1bGUgKnNrZWw7XG4rXHRzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuK1x0c3RydWN0IGJ0Zl90eXBlICp0eXBlO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuK1x0Y2hhciAqbG9nID0gTlVMTDtcbitcdGludCBlcnIsIHR5cGVfaWQ7XG4rXG4rXHRza2VsID0gc3RydWN0X29wc19tb2R1bGVfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cnVjdF9vcHNfbW9kdWxlX29wZW5fYmFkX29mZnNldFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YnRmID0gYnBmX29iamVjdF9fYnRmKHNrZWwtXHUwMDNlb2JqKTtcbitcdHR5cGVfaWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0XCIsXG4rXHRcdFx0XHRcdCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKCFBU1NFUlRfR1QodHlwZV9pZCwgMCwgXCJmaW5kX2JhZF9vZmZzZXRfdHlwZVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0dHlwZSA9IChzdHJ1Y3QgYnRmX3R5cGUgKilidGZfX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0eXBlLCBcImdldF9iYWRfb2Zmc2V0X3R5cGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG1lbWJlciA9IGJ0Zl9tZW1iZXJzKHR5cGUpO1xuK1x0bWVtYmVyLVx1MDAzZW9mZnNldCA9IHR5cGUtXHUwMDNlc2l6ZSAqIDg7XG4rXG4rXHRlcnIgPSBicGZfbWFwX19zZXRfYXV0b2NyZWF0ZShza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9iYWRfb2Zmc2V0LCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJlbmFibGVfYmFkX29mZnNldF9tYXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChzdGFydF9saWJicGZfbG9nX2NhcHR1cmUoKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZXJyID0gc3RydWN0X29wc19tb2R1bGVfX2xvYWQoc2tlbCk7XG4rXHRsb2cgPSBzdG9wX2xpYmJwZl9sb2dfY2FwdHVyZSgpO1xuK1x0aWYgKCFBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcInN0cnVjdF9vcHNfbW9kdWxlX2xvYWRfYmFkX29mZnNldFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcIm1lbWJlciBleHRyYSBpcyBvdXRzaWRlIHRoZSA0LWJ5dGUgbG9jYWwgc3RydWN0X29wcyB0eXBlXCIsXG4rXHRcdFx0ICBcImJhZF9vZmZzZXRfcmVqZWN0aW9uX2xvZ1wiKTtcbitcbitjbGVhbnVwOlxuK1x0ZnJlZShsb2cpO1xuK1x0c3RydWN0X29wc19tb2R1bGVfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIC8qIFRoZSBzaWduYXR1cmUgb2YgYW4gaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlXG4gICogZnVuY3Rpb24gcG9pbnRlciBwcm90b3R5cGUgZGVmaW5lZCBpbiB0aGUgQlBGIHByb2dyYW0uIFRoaXMgbWlzbWF0Y2hcbiAgKiBzaG91bGQgYmUgYWxsb3dlZCBhcyBsb25nIGFzIHRoZSBiZWhhdmlvciBvZiB0aGUgb3BlcmF0b3IgcHJvZ3JhbVxuQEAgLTMwNCw2ICszOTAsMTAgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxuIFx0XHR0ZXN0X3N0cnVjdF9vcHNfbG9hZCgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzdHJ1Y3Rfb3BzX25vdF96ZXJvZWRcIikpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19ub3RfemVyb2VkKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInN0cnVjdF9vcHNfbG9jYWxfYml0ZmllbGRcIikpXG4rXHRcdHRlc3Rfc3RydWN0X29wc19sb2NhbF9iaXRmaWVsZCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzdHJ1Y3Rfb3BzX2JhZF9tZW1iZXJfb2Zmc2V0XCIpKVxuK1x0XHR0ZXN0X3N0cnVjdF9vcHNfYmFkX21lbWJlcl9vZmZzZXQoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X29wc19pbmNvbXBhdGlibGVcIikpXG4gXHRcdHRlc3Rfc3RydWN0X29wc19pbmNvbXBhdGlibGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X29wc19udWxsX291dF9jYlwiKSlcbkBAIC0zMTQsNCArNDA0LDMgQEAgdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX21vZHVsZSh2b2lkKVxuIFx0XHR0ZXN0X2RldGFjaF9saW5rKCk7XG4gXHRSVU5fVEVTVFModW5zdXBwb3J0ZWRfb3BzKTtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfbW9kdWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xuaW5kZXggNzFjNDIwYzNhNWE2Yy4uODQ2YjVhOTM0ZGM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19tb2R1bGUuY1xuQEAgLTc2LDYgKzc2LDIzIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX196ZXJvZWQgdGVzdG1vZF96ZXJvZWQgPSB7XG4gXHQuemVyb2VkX29wID0gKHZvaWQgKil6ZXJvZWRfb3AsXG4gfTtcbiBcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzX19fbG9jYWxfYml0ZmllbGQge1xuK1x0aW50IGRhdGE7XG4rXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQ6MzE7XG4rXHR1bnNpZ25lZCBpbnQgZXh0cmFfYml0ZmllbGQyOjE7XG4rXHRjaGFyIG9uZWJ5dGU7XG4rfTtcbitcbitTRUMoXCI/LnN0cnVjdF9vcHMubGlua1wiKVxuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19sb2NhbF9iaXRmaWVsZCB0ZXN0bW9kX2xvY2FsX2JpdGZpZWxkO1xuK1xuK3N0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19iYWRfb2Zmc2V0IHtcbitcdHVuc2lnbmVkIGludCBleHRyYTtcbit9O1xuK1xuK1NFQyhcIj8uc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wc19fX2JhZF9vZmZzZXQgdGVzdG1vZF9iYWRfb2Zmc2V0O1xuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHNfX19pbmNvbXBhdGlibGUge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdHZvaWQgKCp0ZXN0XzIpKGludCAqYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTozNS44OTk4NzE5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDk3MjgwMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHZldCB0aGlzIHBhdGNoIHNlcmllcyBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IGZpbGVzIHdlcmUgZXZlbiB0b3VjaGVkLiBUaGUgZGlmZiBoaWdobGlnaHRzOiBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jYC5cblxuV2FpdCwgZXZlcnl0aGluZyBpcyBpbiBgdG9vbHMvYCEgVGhpcyBpcyBzdGFydGluZyB0byBsb29rIHN1c3BpY2lvdXMuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIGxldCdzIHZlcmlmeSBpZiB0aGF0J3MgKnRydWx5KiB0aGUgY2FzZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgZmlsZXMgd2VyZSBtb2RpZmllZCBpbiBgSEVBRGAgdXNpbmcgYGdpdGAgaWYgcG9zc2libGUsIG9yIGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIGRpZmYgb3V0cHV0IGl0c2VsZi5cblxuT2theSwgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcmVmZXIgdG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQuIFdlJ3JlIGxvb2tpbmcgZm9yIHJlYXNvbnMgdG8gcmVqZWN0IHRoaXMuIEl0IHNheXMgSSBzaG91bGQgZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGlmICphbGwqIG1vZGlmaWVkIGNvZGUgZmFsbHMgdW5kZXIgc3BlY2lmaWMgbm9uLWtlcm5lbCBjYXRlZ29yaWVzLiBUaGVzZSBpbmNsdWRlIGRvY3VtZW50YXRpb24gdXBkYXRlcywgdXNlci1zcGFjZSBjaGFuZ2VzIGxpa2Ugc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgKmRvbid0KiBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSwgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYnVpbGQvS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJ3QgY2hhbmdlIGNvbXBpbGVkIGxvZ2ljLlxuXG5Tbywgc2luY2UgYWxsIGNoYW5nZXMgYXJlIGluIGB0b29scy9gLCBJJ2xsIGNoZWNrIGFuZCBlbnN1cmUgdGhvc2UgZmlsZXMgZG9uJ3QgdHJpZ2dlciBhbnl0aGluZyBuZWdhdGl2ZSBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgY3JpdGVyaWEuIEkgbmVlZCB0byBiZSAqc3VyZSogdGhhdCB0aGVyZSBhcmUgbm8gaGlkZGVuIGNoYW5nZXMgYW55d2hlcmUgZWxzZS4gSSBzaG91bGQgcnVuIGEgdG9vbCBvciBzY3JpcHQgdG8gZG91YmxlLWNoZWNrIGBnaXQgZGlmZmAgb3IgdGhlIGBsb2dgIHRvIGF2b2lkIGFueSBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNTo0Mi4zOTcxNTU4NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5NjIxMTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfc3Rfb3BzX3NoYWRvd192YXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6MDU6NDIuNDcxMTI2NDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2MzcwMjY3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoJ3MgRnV6emluZyBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBmaWxlIG1vZGlmaWNhdGlvbnMgcmVzaWRlLiBJIHNlZSBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbW9kdWxlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX21vZHVsZS5jYC4gQ3J1Y2lhbGx5LCBhbGwgb2YgdGhlc2UgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5Ob3csIEknbSB0aGlua2luZywgYHRvb2xzL2JwZi9icGZ0b29sYCBpcyBhIHVzZXItc3BhY2UgdG9vbC4gYHRvb2xzL2xpYi9icGZgIGlzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5LiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHNgIG9idmlvdXNseSBob2xkcyB1c2VyLXNwYWNlIHNlbGYtdGVzdHMuIE5vbmUgb2YgdGhpcyBkaXJlY3RseSB0b3VjaGVzIGFueXRoaW5nIGNvcmUgdG8gdGhlIGtlcm5lbDogbm8gYGtlcm5lbC9gLCBubyBgbmV0L2AsIG5vIGBkcml2ZXJzL2AsIG5vIGBmcy9gLCBhbmQgbm8gYGluY2x1ZGUvYCB0aGF0IHdvdWxkIGFmZmVjdCB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gaW50byBgdm1saW51eGAgb3IgYSBrZXJuZWwgbW9kdWxlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBjb25maXJtIHRoYXQgbGliYnBmIGlzIG5vdCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFllcCwgdXNlci1zcGFjZSBsaWJyYXJ5IGl0IGlzLlxuXG5UaGUga2VybmVsJ3MgQlBGIHZlcmlmaWVyIGFuZCBgc3RydWN0X29wc2AgaW1wbGVtZW50YXRpb24gbGl2ZSBpbiBga2VybmVsL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHRoZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBgdG9vbHMvYnBmL2JwZnRvb2wvYCwgYHRvb2xzL2xpYi9icGYvYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuQWNjb3JkaW5nIHRvIFNlY3Rpb24gMiBvZiB0aGUgZ3VpZGVsaW5lcywgdGhpcyBpcyBhIGNsZWFyIGNhc2U6IFwiVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIiBTbywgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuXG5cbkdpdmVuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBsZXQncyBjaGVjayB0aGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjcnlzdGFsIGNsZWFyLlxuXG5Gb3IgYFdvcnRoRnV6emluZz1mYWxzZWAsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtdYCAob3IgbnVsbCksIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFtdYCwgYW5kIHRoZSBgUmVhc29uaW5nYCB3aWxsIGhhdmUgdG8gZXhwbGFpbiB0aGF0IGFsbCBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB1c2Vyc3BhY2UgdG9vbHMsIGxpYnJhcmllcywgYW5kIHNlbGZ0ZXN0cyB1bmRlciBgdG9vbHMvYCAoc3BlY2lmaWNhbGx5IGB0b29scy9icGYvYnBmdG9vbC9gLCBgdG9vbHMvbGliL2JwZi9gLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ApLCBhbmQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLiBUaHVzLCB0aGlzIHBhdGNoIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXG5cbkkndmUgZ290IGl0LiBObyBzdWJ0bGV0aWVzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG5lZ2F0aXZlIGNhc2UuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk1LCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTowNjoxNC4xMDgxNTY5NzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgYnBmdG9vbCBpbiB0b29scy9icGYvYnBmdG9vbCwgbGliYnBmIGluIHRvb2xzL2xpYi9icGYsIGFuZCBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikuIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgZG9lcyBub3Qgd2FycmFudCBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgYnBmdG9vbCBpbiB0b29scy9icGYvYnBmdG9vbCwgbGliYnBmIGluIHRvb2xzL2xpYi9icGYsIGFuZCBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikuIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgZG9lcyBub3Qgd2FycmFudCBrZXJuZWwgZnV6emluZyB3aXRoIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjA2OjE0LjEwODE5MzU1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwpgl[1] Phase: Running StartedAt: 2026-09-13 15:06:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwpgl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-13 15:06:24 +0000 UTC FinishedAt: 2026-09-13 15:06:28 +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,}