Name: series-workflow4v6v9 Phase: Failed StartedAt: 2026-06-26 02:50:50 +0000 UTC FinishedAt: 2026-06-26 03:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v6v9[0] Phase: Succeeded StartedAt: 2026-06-26 02:50:50 +0000 UTC FinishedAt: 2026-06-26 03:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v6v9[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 02:50:50 +0000 UTC FinishedAt: 2026-06-26 03:05:06 +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+CgkJCTx0ZD4yMDI2LzA2LzI2IDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgcmVmYWN0b3JpbmcgKGV4dHJhY3RpbmcgYHNraXBfYnVkZHlfcGFnZXNgLCBtb3ZpbmcgYCNpZmRlZmAgYmxvY2tzKSwgcmVuYW1pbmcgb2Ygc3RhdGljIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLCBtYWNybyByZXBsYWNlbWVudHMgKGBNSUdSQVRFX1JFQVNPTl9OT05FYCksIGFuZCBjb3NtZXRpYyBjaGFuZ2VzIHRvIGRlYnVnZnMgb3V0cHV0IGFuZCBwcmludGsgbWVzc2FnZXMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzhjZTczNjE0YmJiZmNjNWYxN2M5NzBiMTVmYmMxMzAzZWM0MTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWM5NjAwMDI1MTI3NTYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTIxLDYgJiM0MzsyMSwxMyBAQFxuICAqL1xuICNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZFxuJiM0MzsgKiBtaWdyYXRlX3JlYXNvbiB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZSBlbnVtIG1lbWJlcnMgKE1SXyogaW5cbiYjNDM7ICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1JR1JBVEVfUkVBU09OX05PTkUgKC0xKVxuJiM0MztcbiBzdHJ1Y3QgcGFnZV9vd25lciB7XG4gXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcbiBcdHNob3J0IGxhc3RfbWlncmF0ZV9yZWFzb247XG5AQCAtMzM5LDcgJiM0MzszNDYsNyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1JR1JBVEVfUkVBU09OX05PTkUsXG4gXHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuQEAgLTQyMiw2ICYjNDM7NDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuJiM0MzsgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcbiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLFxuJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuJiM0MztcdFx0KnBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgJiM0Mzs0OTEsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICYjNDM7NTI5LDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzOSwxMCAmIzQzOzU2MywxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYwOSw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKSB7XG4gXHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcJiMzNDtQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcblwmIzM0OyxcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgJiM0Mzs2NjAsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcXG5cJiMzNDspO1xuIFxuLVx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCYjMzQ7LFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgXHUwMDI2Z2ZwX21hc2ssXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZXBpZCwgcGFnZV9vd25lci1cdTAwM2V0Z2lkLCBwYWdlX293bmVyLVx1MDAzZWNvbW0sXG4tXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiYjNDM7XHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiAmIzQzOzY3NSwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcXG5cJiMzNDspO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuLVx0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4mIzQzO1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbiYjNDM7XHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1JR1JBVEVfUkVBU09OX05PTkUpXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgJiM0Mzs3MjgsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCAmIzQzOzgyNCw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1JR1JBVEVfUkVBU09OX05PTkUsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkxOCw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTQwLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTYyLDI3IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsXG4mIzQzO1x0XHRcdFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X2hhbmRsZXNcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y291bnRfdGhyZXNob2xkXCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWM4Y2U3MzYxNGJiYmZjYzVmMTdjOTcwYjE1ZmJjMTMwM2VjNDE2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDAzOjA0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lYzk2MDAwMjUxMjc1NiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtMjEsNiAmIzQzOzIxLDEzIEBACiAgKi8KICNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpCiAKJiM0MzsvKgomIzQzOyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZAomIzQzOyAqIG1pZ3JhdGVfcmVhc29uIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlIGVudW0gbWVtYmVycyAoTVJfKiBpbgomIzQzOyAqIGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUlHUkFURV9SRUFTT05fTk9ORSAoLTEpCiYjNDM7CiBzdHJ1Y3QgcGFnZV9vd25lciB7CiAJdW5zaWduZWQgc2hvcnQgb3JkZXI7CiAJc2hvcnQgbGFzdF9taWdyYXRlX3JlYXNvbjsKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLAogCQkJCSAgIHRzX25zZWMsIGN1cnJlbnQtJmd0O3BpZCwgY3VycmVudC0mZ3Q7dGdpZCwKIAkJCQkgICBjdXJyZW50LSZndDtjb21tKTsKIAlpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgJmx0OyZsdDsgb3JkZXIpOwpAQCAtNDIyLDYgJiM0Mzs0MjksMjkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suCiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzCiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXIKJiM0MzsgKiBpdGVyYXRpb24gcHVycG9zZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLAomIzQzOyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBvcmRlcjsKJiM0MzsKJiM0MzsJaWYgKCFQYWdlQnVkZHkocGFnZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwomIzQzOwlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCiYjNDM7CQkqcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IG9yZGVyKSAtIDE7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpCiB7CkBAIC00NjEsMTQgJiM0Mzs0OTEsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQlpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyOwotCi0JCQkJZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0JCQkJaWYgKGZyZWVwYWdlX29yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgZnJlZXBhZ2Vfb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC01MDUsMTMgJiM0Mzs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCXNlcV9wdXRjKG0sICYjMzk7XG4mIzM5Oyk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiAvKgogICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dAogICovCiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIAkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQogewotI2lmZGVmIENPTkZJR19NRU1DRwogCXVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYm9vbCBvbmxpbmU7CkBAIC01MzksMTAgJiM0Mzs1NjMsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQluYW1lKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0jZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiYjNDM7CQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsjZW5kaWYKIAogc3RhdGljIHNzaXplX3QKIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTU3OSw3ICYjNDM7NjA5LDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChyZXQgJmd0Oz0gY291bnQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHsKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSkgewogCQlyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsCiAJCQkmIzM0O1BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKQEAgLTYzMCwxMCAmIzQzOzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCWVsc2UKIAkJcHJfYWxlcnQoJiMzNDtwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxuJiMzNDspOwogCi0JcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxuJiMzNDssCiYjNDM7CXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XG4mIzM0OywKIAkJIHBhZ2Vfb3duZXItJmd0O29yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCAmYW1wO2dmcF9tYXNrLAogCQkgcGFnZV9vd25lci0mZ3Q7cGlkLCBwYWdlX293bmVyLSZndDt0Z2lkLCBwYWdlX293bmVyLSZndDtjb21tLAotCQkgcGFnZV9vd25lci0mZ3Q7dHNfbnNlYywgcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjKTsKJiM0MzsJCSBwYWdlX293bmVyLSZndDt0c19uc2VjKTsKIAogCWhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLSZndDtoYW5kbGUpOwogCWlmICghaGFuZGxlKQpAQCAtNjQ1LDEyICYjNDM7Njc1LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJaWYgKCFoYW5kbGUpIHsKIAkJcHJfYWxlcnQoJiMzNDtwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xuJiMzNDspOwogCX0gZWxzZSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XG4mIzM0OywKLQkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCk7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XG4mIzM0OywKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkLCBwYWdlX293bmVyLSZndDtmcmVlX3RnaWQsCiYjNDM7CQkJICBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwogCQlzdGFja19kZXBvdF9wcmludChoYW5kbGUpOwogCX0KIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKQomIzQzOwlpZiAocGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgyNCw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTUlHUkFURV9SRUFTT05fTk9ORSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC0mZ3Q7cGlkLAogCQkJCQkJICAgY3VycmVudC0mZ3Q7dGdpZCwgY3VycmVudC0mZ3Q7Y29tbSk7CiAJCQljb3VudCYjNDM7JiM0Mzs7CiBleHRfcHV0X2NvbnRpbnVlOgpAQCAtODg3LDcgJiM0Mzs5MDEsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcykKIAlyZXR1cm4gc3RhY2s7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDsKIAogc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CkBAIC05MDQsNyAmIzQzOzkxOCw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCW5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKCZhbXA7c3RhY2tfcmVjb3JkLSZndDtjb3VudCkgLSAxOwogCiAJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyAmYW1wOyZhbXA7Ci0JICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKQomIzQzOwkgICAgKG5yX2Jhc2VfcGFnZXMgJmx0OyAxIHx8IG5yX2Jhc2VfcGFnZXMgJmx0OyBwYWdlc190aHJlc2hvbGQpKQogCQlyZXR1cm4gMDsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHsKQEAgLTkyNiwxNiAmIzQzOzk0MCwxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7CiAJLnN0YXJ0CT0gc3RhY2tfc3RhcnQsCiAJLm5leHQJPSBzdGFja19uZXh0LAogCS5zdG9wCT0gc3RhY2tfc3RvcCwKIAkuc2hvdwk9IHN0YWNrX3ByaW50CiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwYWdlX293bmVyX3N0YWNrX29wLAomIzQzOwlpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO3N0YWNrX29wLAogCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7CiAKIAlpZiAoIXJldCkgewpAQCAtOTQ4LDI4ICYjNDM7OTYyLDI3IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHsKLQkub3BlbgkJPSBwYWdlX293bmVyX3N0YWNrX29wZW4sCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHsKJiM0MzsJLm9wZW4JCT0gc3RhY2tfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JKnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7CiYjNDM7CSp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKLQlXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpOwomIzQzOwlXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIAotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsCi0JCQkmYW1wO3BhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgJiMzNDslbGx1JiMzNDspOwotCiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsICZhbXA7dGhyZXNob2xkX2dldCwKJiM0MzsJCQkmYW1wO3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdVxuJiMzNDspOwogCiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKQogewpAQCAtOTg1LDE3ICYjNDM7OTk4LDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfc3RhY2tzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLAotCQkJICAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X2hhbmRsZXMmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLAotCQkJICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtzdGFja19mb3BzKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8CiAJCQkJICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtjb3VudF90aHJlc2hvbGQmIzM0OywgMDYwMCwgZGlyLCBOVUxMLAotCQkJICAgICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7dGhyZXNob2xkX2ZvcHMpOwogCXJldHVybiAwOwogfQogbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMQoJCQkJCQkJb3V0cHV0OiA5NgoJCQkJCQkJdGhvdWdodHM6IDIwOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IGBtbS9wYWdlX293bmVyLmNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX293bmVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgbW9zdGx5IHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIGBNSUdSQVRFX1JFQVNPTl9OT05FYCBpcyBqdXN0IGEgbWFjcm8gc3Vic3RpdHV0aW9uIGZvciBgLTFgLiBObyBpbXBhY3QgdGhlcmUgZnVuY3Rpb25hbGx5LgoKTmV4dCwgd2UgaGF2ZSB0aGUgZXh0cmFjdGlvbiBvZiBgc2tpcF9idWRkeV9wYWdlc2AgZnJvbSBpbmxpbmUgY29kZS4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkuIFRoZSBjb3JlIGxvZ2ljIG9mIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzIGJhc2VkIG9uIG9yZGVyIHJlbWFpbnMgdGhlIHNhbWUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSB1c2FnZSBpbiBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCwgYW5kIHRoZSBiZWhhdmlvciBpcyAqaWRlbnRpY2FsKi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGluIGBpbml0X3BhZ2VzX2luX3pvbmVgIG5vdyBhbGxvd3MgZm9yIGBvcmRlciA9PSAwYCwgYnV0IHRoZSBuZXQgZWZmZWN0IHJlbWFpbnMgdGhlIHNhbWUgYmVjYXVzZSBgKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyAwKSAtIDFgIGJlY29tZXMgYCpwZm4gJiM0Mzs9IDBgLCBhIG5vLW9wLCB3aGljaCB0aGVuIGxlYWRzIHRvIGEgYGNvbnRpbnVlYCwganVzdCBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlLgoKYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIGJlaW5nIHJlZmFjdG9yZWQgdG8gdXNlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBvdXRzaWRlLiBUaGUgc2FtZSBmdW5jdGlvbmFsaXR5IGlzIHByZXNlcnZlZC4KClRoZSBjaGFuZ2VzIHRvIGBfX2R1bXBfcGFnZV9vd25lcmAganVzdCBtb3ZlIHRoZSBgZnJlZV90c19uc2VjYCBwcmludCBmcm9tIHRoZSBhbGxvY2F0aW9uIHRvIHRoZSBmcmVlIHN0YWNrIHRyYWNlIGFsZXJ0LiBJdCYjMzk7cyBqdXN0IGEgZGlhZ25vc3RpYyBvdXRwdXQgY2hhbmdlLgoKVGhlIHJlbmFtZXMgb2YgdmFyaW91cyBgcGFnZV9vd25lcl8qYCBzeW1ib2xzIHRvIHNob3J0ZXIgbmFtZXMgbGlrZSBgc3RhY2tfb3BgLCBgdGhyZXNob2xkX2dldGAsIGFuZCBzdWNoIGFyZSBwdXJlbHkgY29zbWV0aWMuCgpUaGUgZm9ybWF0IHN0cmluZyBjaGFuZ2UgaW4gYERFRklORV9TSU1QTEVfQVRUUklCVVRFYCBmb3IgYHRocmVzaG9sZF9mb3BzYCBpcyBtaW5vcjsgaXQgYWRkcyBhIG5ld2xpbmUgdG8gdGhlIG91dHB1dCBvZiBhIGRlYnVnZnMgZmlsZSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkuCgpBZnRlciBjYXJlZnVsIGFuYWx5c2lzLCB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBhIG1hY3JvIHJlcGxhY2VtZW50LCBhIGNvZGUgcmVmYWN0b3IsIGEgZGlhZ25vc3RpYyBvdXRwdXQgY2hhbmdlLCBhbmQgbmFtZSByZWZhY3RvcmluZy4gVGhlcmUgYXJlICpubyogZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd291bGQgd2FycmFudCBhIGZ1enppbmcgZWZmb3J0LiBUaGUgY29yZSBrZXJuZWwgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAzOjA0OjM2LjcyMjk1NTk1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTk3NjgyOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMzowNDozNi43MjI5NjUxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjkzOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljOGNlNzM2MTRiYmJmY2M1ZjE3Yzk3MGIxNWZiYzEzMDNlYzQxNjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXFxuaW5kZXggMmRkZGNiNjUxMGFhMWUuLmVjOTYwMDAyNTEyNzU2IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0yMSw2ICsyMSwxMyBAQFxcbiAgKi9cXG4gI2RlZmluZSBQQUdFX09XTkVSX1NUQUNLX0RFUFRIICgxNilcXG4gXFxuKy8qXFxuKyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZFxcbisgKiBtaWdyYXRlX3JlYXNvbiB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZSBlbnVtIG1lbWJlcnMgKE1SXyogaW5cXG4rICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXFxuKyAqL1xcbisjZGVmaW5lIE1JR1JBVEVfUkVBU09OX05PTkUgKC0xKVxcbitcXG4gc3RydWN0IHBhZ2Vfb3duZXIge1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcXG4gXFx0c2hvcnQgbGFzdF9taWdyYXRlX3JlYXNvbjtcXG5AQCAtMzM5LDcgKzM0Niw3IEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4gXFxuIFxcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xcbi1cXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXFxuK1xcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLFxcbiBcXHRcXHRcXHRcXHQgICB0c19uc2VjLCBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZXRnaWQsXFxuIFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiBcXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbkBAIC00MjIsNiArNDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cXG4rICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXFxuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXFxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuK1xcdFxcdCpwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuQEAgLTQ2MSwxNCArNDkxLDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xcbi1cXG4tXFx0XFx0XFx0XFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcdFxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTA1LDEzICs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbiAvKlxcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgb25saW5lO1xcbkBAIC01MzksMTAgKzU2MywxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0bmFtZSk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0jZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG5AQCAtNTc5LDcgKzYwOSw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKSB7XFxuIFxcdFxcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXFxuIFxcdFxcdFxcdFxcXCJQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xcbkBAIC02MzAsMTAgKzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXFxcblxcXCIsXFxuK1xcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgXFx1MDAyNmdmcF9tYXNrLFxcbiBcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNlcGlkLCBwYWdlX293bmVyLVxcdTAwM2V0Z2lkLCBwYWdlX293bmVyLVxcdTAwM2Vjb21tLFxcbi1cXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjKTtcXG4rXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXRzX25zZWMpO1xcbiBcXG4gXFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZSk7XFxuIFxcdGlmICghaGFuZGxlKVxcbkBAIC02NDUsMTIgKzY3NSwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcXFxcblxcXCIpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiBcXHRcXHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSlcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODI0LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTUlHUkFURV9SRUFTT05fTk9ORSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2V0Z2lkLCBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0XFx0XFx0Y291bnQrKztcXG4gZXh0X3B1dF9jb250aW51ZTpcXG5AQCAtODg3LDcgKzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxcbiBcXHRyZXR1cm4gc3RhY2s7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XFxuIFxcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbkBAIC05MDQsNyArOTE4LDcgQEAgc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFxcdTAwMjZzdGFja19yZWNvcmQtXFx1MDAzZWNvdW50KSAtIDE7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKVxcbitcXHQgICAgKG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xcbkBAIC05MjYsMTYgKzk0MCwxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7XFxuIFxcdC5zdGFydFxcdD0gc3RhY2tfc3RhcnQsXFxuIFxcdC5uZXh0XFx0PSBzdGFja19uZXh0LFxcbiBcXHQuc3RvcFxcdD0gc3RhY2tfc3RvcCxcXG4gXFx0LnNob3dcXHQ9IHN0YWNrX3ByaW50XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxcbitcXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2c3RhY2tfb3AsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XFxuIFxcbiBcXHRpZiAoIXJldCkge1xcbkBAIC05NDgsMjggKzk2MiwyNyBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xcbi1cXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xcbitcXHQub3BlblxcdFxcdD0gc3RhY2tfb3BlbixcXG4gXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcbiBcXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuIFxcdC5yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4ge1xcbi1cXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcXG4rXFx0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4rc3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIHtcXG4tXFx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcXG4rXFx0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxcbi1cXHRcXHRcXHRcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcXFwiJWxsdVxcXCIpO1xcbi1cXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFxcdTAwMjZ0aHJlc2hvbGRfZ2V0LFxcbitcXHRcXHRcXHRcXHUwMDI2dGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFxcblxcXCIpO1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4ge1xcbkBAIC05ODUsMTcgKzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzX2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY291bnRfdGhyZXNob2xkXFxcIiwgMDYwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDM6MDQ6MzcuMzM2OTA1Mzg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM4MzcyMzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YzhjZTczNjE0YmJiZmNjNWYxN2M5NzBiMTVmYmMxMzAzZWM0MTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lYzk2MDAwMjUxMjc1NiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMjEsNiArMjEsMTMgQEBcbiAgKi9cbiAjZGVmaW5lIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKDE2KVxuIFxuKy8qXG4rICogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCwgYXMgdGhlIHZhbGlkXG4rICogbWlncmF0ZV9yZWFzb24gdmFsdWVzIGFyZSBub24tbmVnYXRpdmUgZW51bSBtZW1iZXJzIChNUl8qIGluXG4rICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXG4rICovXG4rI2RlZmluZSBNSUdSQVRFX1JFQVNPTl9OT05FICgtMSlcbitcbiBzdHJ1Y3QgcGFnZV9vd25lciB7XG4gXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcbiBcdHNob3J0IGxhc3RfbWlncmF0ZV9yZWFzb247XG5AQCAtMzM5LDcgKzM0Niw3IEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbitcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbkBAIC00MjIsNiArNDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuK1x0XHQqcGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgKzQ5MSw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM5LDEwICs1NjMsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjA5LDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSkge1xuIFx0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgKzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCIpO1xuIFxuLVx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwiLFxuK1x0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cIixcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4rXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiArNjc1LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cIixcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbitcdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwiLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4rXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKVxuIFx0XHRwcl9hbGVydChcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyArNzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdFx0fVxuIFxuIFx0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbi1cdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXG4tXHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbitcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICs4MjQsOCBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUbyBhdm9pZCBoYXZpbmcgdG8gZ3JhYiB6b25lLVx1MDAzZWxvY2ssIGJlIGEgbGl0dGxlXG4tXHRcdFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcbi1cdFx0XHQgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzXG4tXHRcdFx0ICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuXG4tXHRcdFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXG4tXHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuK1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICs4NDAsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4gXG4gXHRcdFx0LyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi9cbiBcdFx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBlYXJseV9oYW5kbGUsIDAsIDAsXG4tXHRcdFx0XHRcdFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuK1x0XHRcdFx0XHRcdCAgIE1JR1JBVEVfUkVBU09OX05PTkUsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MTgsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5NDAsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk2MiwyNyBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LFxuK1x0XHRcdFx1MDAyNnRocmVzaG9sZF9zZXQsIFwiJWxsdVxcblwiKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgKzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzX2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJjb3VudF90aHJlc2hvbGRcIiwgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMzowNDozNy4zMzY5MDc3OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM4MzY4NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYG1tL3BhZ2Vfb3duZXIuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX293bmVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgbW9zdGx5IHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgYE1JR1JBVEVfUkVBU09OX05PTkVgIGlzIGp1c3QgYSBtYWNybyBzdWJzdGl0dXRpb24gZm9yIGAtMWAuIE5vIGltcGFjdCB0aGVyZSBmdW5jdGlvbmFsbHkuXG5cbk5leHQsIHdlIGhhdmUgdGhlIGV4dHJhY3Rpb24gb2YgYHNraXBfYnVkZHlfcGFnZXNgIGZyb20gaW5saW5lIGNvZGUuIFRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LiBUaGUgY29yZSBsb2dpYyBvZiBza2lwcGluZyBidWRkeSBwYWdlcyBiYXNlZCBvbiBvcmRlciByZW1haW5zIHRoZSBzYW1lLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSB1c2FnZSBpbiBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCwgYW5kIHRoZSBiZWhhdmlvciBpcyAqaWRlbnRpY2FsKi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGluIGBpbml0X3BhZ2VzX2luX3pvbmVgIG5vdyBhbGxvd3MgZm9yIGBvcmRlciA9PSAwYCwgYnV0IHRoZSBuZXQgZWZmZWN0IHJlbWFpbnMgdGhlIHNhbWUgYmVjYXVzZSBgKnBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyAwKSAtIDFgIGJlY29tZXMgYCpwZm4gKz0gMGAsIGEgbm8tb3AsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYSBgY29udGludWVgLCBqdXN0IGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUuXG5cbmBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBgI2lmZGVmIENPTkZJR19NRU1DR2Agb3V0c2lkZS4gVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZXJ2ZWQuXG5cblRoZSBjaGFuZ2VzIHRvIGBfX2R1bXBfcGFnZV9vd25lcmAganVzdCBtb3ZlIHRoZSBgZnJlZV90c19uc2VjYCBwcmludCBmcm9tIHRoZSBhbGxvY2F0aW9uIHRvIHRoZSBmcmVlIHN0YWNrIHRyYWNlIGFsZXJ0LiBJdCdzIGp1c3QgYSBkaWFnbm9zdGljIG91dHB1dCBjaGFuZ2UuXG5cblRoZSByZW5hbWVzIG9mIHZhcmlvdXMgYHBhZ2Vfb3duZXJfKmAgc3ltYm9scyB0byBzaG9ydGVyIG5hbWVzIGxpa2UgYHN0YWNrX29wYCwgYHRocmVzaG9sZF9nZXRgLCBhbmQgc3VjaCBhcmUgcHVyZWx5IGNvc21ldGljLlxuXG5UaGUgZm9ybWF0IHN0cmluZyBjaGFuZ2UgaW4gYERFRklORV9TSU1QTEVfQVRUUklCVVRFYCBmb3IgYHRocmVzaG9sZF9mb3BzYCBpcyBtaW5vcjsgaXQgYWRkcyBhIG5ld2xpbmUgdG8gdGhlIG91dHB1dCBvZiBhIGRlYnVnZnMgZmlsZSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkuXG5cbkFmdGVyIGNhcmVmdWwgYW5hbHlzaXMsIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGEgbWFjcm8gcmVwbGFjZW1lbnQsIGEgY29kZSByZWZhY3RvciwgYSBkaWFnbm9zdGljIG91dHB1dCBjaGFuZ2UsIGFuZCBuYW1lIHJlZmFjdG9yaW5nLiBUaGVyZSBhcmUgKm5vKiBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3b3VsZCB3YXJyYW50IGEgZnV6emluZyBlZmZvcnQuIFRoZSBjb3JlIGtlcm5lbCBsb2dpYyByZW1haW5zIHVuY2hhbmdlZC4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjEsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDM6MDQ6NTUuNzIwNTk0OTMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v6v9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 02:50:50 +0000 UTC FinishedAt: 2026-06-26 03:04:57 +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+CgkJCTx0ZD4yMDI2LzA2LzI2IDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgcmVmYWN0b3JpbmcgKGV4dHJhY3RpbmcgYHNraXBfYnVkZHlfcGFnZXNgLCBtb3ZpbmcgYCNpZmRlZmAgYmxvY2tzKSwgcmVuYW1pbmcgb2Ygc3RhdGljIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLCBtYWNybyByZXBsYWNlbWVudHMgKGBNSUdSQVRFX1JFQVNPTl9OT05FYCksIGFuZCBjb3NtZXRpYyBjaGFuZ2VzIHRvIGRlYnVnZnMgb3V0cHV0IGFuZCBwcmludGsgbWVzc2FnZXMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzhjZTczNjE0YmJiZmNjNWYxN2M5NzBiMTVmYmMxMzAzZWM0MTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWM5NjAwMDI1MTI3NTYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTIxLDYgJiM0MzsyMSwxMyBAQFxuICAqL1xuICNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZFxuJiM0MzsgKiBtaWdyYXRlX3JlYXNvbiB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZSBlbnVtIG1lbWJlcnMgKE1SXyogaW5cbiYjNDM7ICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1JR1JBVEVfUkVBU09OX05PTkUgKC0xKVxuJiM0MztcbiBzdHJ1Y3QgcGFnZV9vd25lciB7XG4gXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcbiBcdHNob3J0IGxhc3RfbWlncmF0ZV9yZWFzb247XG5AQCAtMzM5LDcgJiM0MzszNDYsNyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1JR1JBVEVfUkVBU09OX05PTkUsXG4gXHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuQEAgLTQyMiw2ICYjNDM7NDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuJiM0MzsgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcbiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLFxuJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuJiM0MztcdFx0KnBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgJiM0Mzs0OTEsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICYjNDM7NTI5LDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzOSwxMCAmIzQzOzU2MywxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYwOSw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKSB7XG4gXHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcJiMzNDtQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcblwmIzM0OyxcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgJiM0Mzs2NjAsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcXG5cJiMzNDspO1xuIFxuLVx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCYjMzQ7LFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgXHUwMDI2Z2ZwX21hc2ssXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZXBpZCwgcGFnZV9vd25lci1cdTAwM2V0Z2lkLCBwYWdlX293bmVyLVx1MDAzZWNvbW0sXG4tXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiYjNDM7XHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiAmIzQzOzY3NSwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcXG5cJiMzNDspO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuLVx0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQpO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4mIzQzO1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbiYjNDM7XHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1JR1JBVEVfUkVBU09OX05PTkUpXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgJiM0Mzs3MjgsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCAmIzQzOzgyNCw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1JR1JBVEVfUkVBU09OX05PTkUsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkxOCw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTQwLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTYyLDI3IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsXG4mIzQzO1x0XHRcdFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X2hhbmRsZXNcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y291bnRfdGhyZXNob2xkXCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWM4Y2U3MzYxNGJiYmZjYzVmMTdjOTcwYjE1ZmJjMTMwM2VjNDE2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDAzOjA0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lYzk2MDAwMjUxMjc1NiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtMjEsNiAmIzQzOzIxLDEzIEBACiAgKi8KICNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpCiAKJiM0MzsvKgomIzQzOyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZAomIzQzOyAqIG1pZ3JhdGVfcmVhc29uIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlIGVudW0gbWVtYmVycyAoTVJfKiBpbgomIzQzOyAqIGluY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUlHUkFURV9SRUFTT05fTk9ORSAoLTEpCiYjNDM7CiBzdHJ1Y3QgcGFnZV9vd25lciB7CiAJdW5zaWduZWQgc2hvcnQgb3JkZXI7CiAJc2hvcnQgbGFzdF9taWdyYXRlX3JlYXNvbjsKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLAogCQkJCSAgIHRzX25zZWMsIGN1cnJlbnQtJmd0O3BpZCwgY3VycmVudC0mZ3Q7dGdpZCwKIAkJCQkgICBjdXJyZW50LSZndDtjb21tKTsKIAlpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgJmx0OyZsdDsgb3JkZXIpOwpAQCAtNDIyLDYgJiM0Mzs0MjksMjkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suCiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzCiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXIKJiM0MzsgKiBpdGVyYXRpb24gcHVycG9zZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLAomIzQzOyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBvcmRlcjsKJiM0MzsKJiM0MzsJaWYgKCFQYWdlQnVkZHkocGFnZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwomIzQzOwlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCiYjNDM7CQkqcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IG9yZGVyKSAtIDE7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpCiB7CkBAIC00NjEsMTQgJiM0Mzs0OTEsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQlpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyOwotCi0JCQkJZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0JCQkJaWYgKGZyZWVwYWdlX29yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgZnJlZXBhZ2Vfb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC01MDUsMTMgJiM0Mzs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCXNlcV9wdXRjKG0sICYjMzk7XG4mIzM5Oyk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiAvKgogICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dAogICovCiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIAkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQogewotI2lmZGVmIENPTkZJR19NRU1DRwogCXVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYm9vbCBvbmxpbmU7CkBAIC01MzksMTAgJiM0Mzs1NjMsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQluYW1lKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0jZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiYjNDM7CQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsjZW5kaWYKIAogc3RhdGljIHNzaXplX3QKIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTU3OSw3ICYjNDM7NjA5LDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChyZXQgJmd0Oz0gY291bnQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHsKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSkgewogCQlyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsCiAJCQkmIzM0O1BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKQEAgLTYzMCwxMCAmIzQzOzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCWVsc2UKIAkJcHJfYWxlcnQoJiMzNDtwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxuJiMzNDspOwogCi0JcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxuJiMzNDssCiYjNDM7CXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XG4mIzM0OywKIAkJIHBhZ2Vfb3duZXItJmd0O29yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCAmYW1wO2dmcF9tYXNrLAogCQkgcGFnZV9vd25lci0mZ3Q7cGlkLCBwYWdlX293bmVyLSZndDt0Z2lkLCBwYWdlX293bmVyLSZndDtjb21tLAotCQkgcGFnZV9vd25lci0mZ3Q7dHNfbnNlYywgcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjKTsKJiM0MzsJCSBwYWdlX293bmVyLSZndDt0c19uc2VjKTsKIAogCWhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLSZndDtoYW5kbGUpOwogCWlmICghaGFuZGxlKQpAQCAtNjQ1LDEyICYjNDM7Njc1LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJaWYgKCFoYW5kbGUpIHsKIAkJcHJfYWxlcnQoJiMzNDtwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xuJiMzNDspOwogCX0gZWxzZSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XG4mIzM0OywKLQkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCk7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XG4mIzM0OywKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkLCBwYWdlX293bmVyLSZndDtmcmVlX3RnaWQsCiYjNDM7CQkJICBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwogCQlzdGFja19kZXBvdF9wcmludChoYW5kbGUpOwogCX0KIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKQomIzQzOwlpZiAocGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgyNCw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTUlHUkFURV9SRUFTT05fTk9ORSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC0mZ3Q7cGlkLAogCQkJCQkJICAgY3VycmVudC0mZ3Q7dGdpZCwgY3VycmVudC0mZ3Q7Y29tbSk7CiAJCQljb3VudCYjNDM7JiM0Mzs7CiBleHRfcHV0X2NvbnRpbnVlOgpAQCAtODg3LDcgJiM0Mzs5MDEsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcykKIAlyZXR1cm4gc3RhY2s7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDsKIAogc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CkBAIC05MDQsNyAmIzQzOzkxOCw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCW5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKCZhbXA7c3RhY2tfcmVjb3JkLSZndDtjb3VudCkgLSAxOwogCiAJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyAmYW1wOyZhbXA7Ci0JICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKQomIzQzOwkgICAgKG5yX2Jhc2VfcGFnZXMgJmx0OyAxIHx8IG5yX2Jhc2VfcGFnZXMgJmx0OyBwYWdlc190aHJlc2hvbGQpKQogCQlyZXR1cm4gMDsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHsKQEAgLTkyNiwxNiAmIzQzOzk0MCwxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7CiAJLnN0YXJ0CT0gc3RhY2tfc3RhcnQsCiAJLm5leHQJPSBzdGFja19uZXh0LAogCS5zdG9wCT0gc3RhY2tfc3RvcCwKIAkuc2hvdwk9IHN0YWNrX3ByaW50CiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwYWdlX293bmVyX3N0YWNrX29wLAomIzQzOwlpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO3N0YWNrX29wLAogCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7CiAKIAlpZiAoIXJldCkgewpAQCAtOTQ4LDI4ICYjNDM7OTYyLDI3IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHsKLQkub3BlbgkJPSBwYWdlX293bmVyX3N0YWNrX29wZW4sCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHsKJiM0MzsJLm9wZW4JCT0gc3RhY2tfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JKnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7CiYjNDM7CSp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKLQlXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpOwomIzQzOwlXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIAotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsCi0JCQkmYW1wO3BhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgJiMzNDslbGx1JiMzNDspOwotCiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsICZhbXA7dGhyZXNob2xkX2dldCwKJiM0MzsJCQkmYW1wO3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdVxuJiMzNDspOwogCiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKQogewpAQCAtOTg1LDE3ICYjNDM7OTk4LDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfc3RhY2tzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLAotCQkJICAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X2hhbmRsZXMmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLAotCQkJICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtzdGFja19mb3BzKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8CiAJCQkJICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtjb3VudF90aHJlc2hvbGQmIzM0OywgMDYwMCwgZGlyLCBOVUxMLAotCQkJICAgICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7dGhyZXNob2xkX2ZvcHMpOwogCXJldHVybiAwOwogfQogbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMQoJCQkJCQkJb3V0cHV0OiA5NgoJCQkJCQkJdGhvdWdodHM6IDIwOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IGBtbS9wYWdlX293bmVyLmNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX293bmVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgbW9zdGx5IHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIGBNSUdSQVRFX1JFQVNPTl9OT05FYCBpcyBqdXN0IGEgbWFjcm8gc3Vic3RpdHV0aW9uIGZvciBgLTFgLiBObyBpbXBhY3QgdGhlcmUgZnVuY3Rpb25hbGx5LgoKTmV4dCwgd2UgaGF2ZSB0aGUgZXh0cmFjdGlvbiBvZiBgc2tpcF9idWRkeV9wYWdlc2AgZnJvbSBpbmxpbmUgY29kZS4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkuIFRoZSBjb3JlIGxvZ2ljIG9mIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzIGJhc2VkIG9uIG9yZGVyIHJlbWFpbnMgdGhlIHNhbWUuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSB1c2FnZSBpbiBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCwgYW5kIHRoZSBiZWhhdmlvciBpcyAqaWRlbnRpY2FsKi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGluIGBpbml0X3BhZ2VzX2luX3pvbmVgIG5vdyBhbGxvd3MgZm9yIGBvcmRlciA9PSAwYCwgYnV0IHRoZSBuZXQgZWZmZWN0IHJlbWFpbnMgdGhlIHNhbWUgYmVjYXVzZSBgKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyAwKSAtIDFgIGJlY29tZXMgYCpwZm4gJiM0Mzs9IDBgLCBhIG5vLW9wLCB3aGljaCB0aGVuIGxlYWRzIHRvIGEgYGNvbnRpbnVlYCwganVzdCBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlLgoKYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIGJlaW5nIHJlZmFjdG9yZWQgdG8gdXNlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBvdXRzaWRlLiBUaGUgc2FtZSBmdW5jdGlvbmFsaXR5IGlzIHByZXNlcnZlZC4KClRoZSBjaGFuZ2VzIHRvIGBfX2R1bXBfcGFnZV9vd25lcmAganVzdCBtb3ZlIHRoZSBgZnJlZV90c19uc2VjYCBwcmludCBmcm9tIHRoZSBhbGxvY2F0aW9uIHRvIHRoZSBmcmVlIHN0YWNrIHRyYWNlIGFsZXJ0LiBJdCYjMzk7cyBqdXN0IGEgZGlhZ25vc3RpYyBvdXRwdXQgY2hhbmdlLgoKVGhlIHJlbmFtZXMgb2YgdmFyaW91cyBgcGFnZV9vd25lcl8qYCBzeW1ib2xzIHRvIHNob3J0ZXIgbmFtZXMgbGlrZSBgc3RhY2tfb3BgLCBgdGhyZXNob2xkX2dldGAsIGFuZCBzdWNoIGFyZSBwdXJlbHkgY29zbWV0aWMuCgpUaGUgZm9ybWF0IHN0cmluZyBjaGFuZ2UgaW4gYERFRklORV9TSU1QTEVfQVRUUklCVVRFYCBmb3IgYHRocmVzaG9sZF9mb3BzYCBpcyBtaW5vcjsgaXQgYWRkcyBhIG5ld2xpbmUgdG8gdGhlIG91dHB1dCBvZiBhIGRlYnVnZnMgZmlsZSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkuCgpBZnRlciBjYXJlZnVsIGFuYWx5c2lzLCB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBhIG1hY3JvIHJlcGxhY2VtZW50LCBhIGNvZGUgcmVmYWN0b3IsIGEgZGlhZ25vc3RpYyBvdXRwdXQgY2hhbmdlLCBhbmQgbmFtZSByZWZhY3RvcmluZy4gVGhlcmUgYXJlICpubyogZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd291bGQgd2FycmFudCBhIGZ1enppbmcgZWZmb3J0LiBUaGUgY29yZSBrZXJuZWwgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDAzOjA0OjM2LjcyMjk1NTk1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTk3NjgyOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMzowNDozNi43MjI5NjUxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjkzOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljOGNlNzM2MTRiYmJmY2M1ZjE3Yzk3MGIxNWZiYzEzMDNlYzQxNjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXFxuaW5kZXggMmRkZGNiNjUxMGFhMWUuLmVjOTYwMDAyNTEyNzU2IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0yMSw2ICsyMSwxMyBAQFxcbiAgKi9cXG4gI2RlZmluZSBQQUdFX09XTkVSX1NUQUNLX0RFUFRIICgxNilcXG4gXFxuKy8qXFxuKyAqIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQsIGFzIHRoZSB2YWxpZFxcbisgKiBtaWdyYXRlX3JlYXNvbiB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZSBlbnVtIG1lbWJlcnMgKE1SXyogaW5cXG4rICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXFxuKyAqL1xcbisjZGVmaW5lIE1JR1JBVEVfUkVBU09OX05PTkUgKC0xKVxcbitcXG4gc3RydWN0IHBhZ2Vfb3duZXIge1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcXG4gXFx0c2hvcnQgbGFzdF9taWdyYXRlX3JlYXNvbjtcXG5AQCAtMzM5LDcgKzM0Niw3IEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4gXFxuIFxcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xcbi1cXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXFxuK1xcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLFxcbiBcXHRcXHRcXHRcXHQgICB0c19uc2VjLCBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZXRnaWQsXFxuIFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiBcXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbkBAIC00MjIsNiArNDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cXG4rICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXFxuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXFxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuK1xcdFxcdCpwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuQEAgLTQ2MSwxNCArNDkxLDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xcbi1cXG4tXFx0XFx0XFx0XFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcdFxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTA1LDEzICs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbiAvKlxcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgb25saW5lO1xcbkBAIC01MzksMTAgKzU2MywxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0bmFtZSk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0jZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG5AQCAtNTc5LDcgKzYwOSw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKSB7XFxuIFxcdFxcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXFxuIFxcdFxcdFxcdFxcXCJQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xcbkBAIC02MzAsMTAgKzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXFxcblxcXCIsXFxuK1xcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgXFx1MDAyNmdmcF9tYXNrLFxcbiBcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNlcGlkLCBwYWdlX293bmVyLVxcdTAwM2V0Z2lkLCBwYWdlX293bmVyLVxcdTAwM2Vjb21tLFxcbi1cXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjKTtcXG4rXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXRzX25zZWMpO1xcbiBcXG4gXFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZSk7XFxuIFxcdGlmICghaGFuZGxlKVxcbkBAIC02NDUsMTIgKzY3NSwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcXFxcblxcXCIpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQpO1xcbitcXHRcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiBcXHRcXHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSlcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODI0LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzg0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTUlHUkFURV9SRUFTT05fTk9ORSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2V0Z2lkLCBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0XFx0XFx0Y291bnQrKztcXG4gZXh0X3B1dF9jb250aW51ZTpcXG5AQCAtODg3LDcgKzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxcbiBcXHRyZXR1cm4gc3RhY2s7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XFxuIFxcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbkBAIC05MDQsNyArOTE4LDcgQEAgc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFxcdTAwMjZzdGFja19yZWNvcmQtXFx1MDAzZWNvdW50KSAtIDE7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKVxcbitcXHQgICAgKG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xcbkBAIC05MjYsMTYgKzk0MCwxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7XFxuIFxcdC5zdGFydFxcdD0gc3RhY2tfc3RhcnQsXFxuIFxcdC5uZXh0XFx0PSBzdGFja19uZXh0LFxcbiBcXHQuc3RvcFxcdD0gc3RhY2tfc3RvcCxcXG4gXFx0LnNob3dcXHQ9IHN0YWNrX3ByaW50XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxcbitcXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2c3RhY2tfb3AsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XFxuIFxcbiBcXHRpZiAoIXJldCkge1xcbkBAIC05NDgsMjggKzk2MiwyNyBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xcbi1cXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xcbitcXHQub3BlblxcdFxcdD0gc3RhY2tfb3BlbixcXG4gXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcbiBcXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuIFxcdC5yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4ge1xcbi1cXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcXG4rXFx0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4rc3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIHtcXG4tXFx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcXG4rXFx0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxcbi1cXHRcXHRcXHRcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcXFwiJWxsdVxcXCIpO1xcbi1cXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFxcdTAwMjZ0aHJlc2hvbGRfZ2V0LFxcbitcXHRcXHRcXHRcXHUwMDI2dGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFxcblxcXCIpO1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4ge1xcbkBAIC05ODUsMTcgKzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzX2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY291bnRfdGhyZXNob2xkXFxcIiwgMDYwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDM6MDQ6MzcuMzM2OTA1Mzg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM4MzcyMzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29kZSByZWZhY3RvcmluZyAoZXh0cmFjdGluZyBgc2tpcF9idWRkeV9wYWdlc2AsIG1vdmluZyBgI2lmZGVmYCBibG9ja3MpLCByZW5hbWluZyBvZiBzdGF0aWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIG1hY3JvIHJlcGxhY2VtZW50cyAoYE1JR1JBVEVfUkVBU09OX05PTkVgKSwgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gZGVidWdmcyBvdXRwdXQgYW5kIHByaW50ayBtZXNzYWdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YzhjZTczNjE0YmJiZmNjNWYxN2M5NzBiMTVmYmMxMzAzZWM0MTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDM6MDQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lYzk2MDAwMjUxMjc1NiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMjEsNiArMjEsMTMgQEBcbiAgKi9cbiAjZGVmaW5lIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKDE2KVxuIFxuKy8qXG4rICogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCwgYXMgdGhlIHZhbGlkXG4rICogbWlncmF0ZV9yZWFzb24gdmFsdWVzIGFyZSBub24tbmVnYXRpdmUgZW51bSBtZW1iZXJzIChNUl8qIGluXG4rICogaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCkuXG4rICovXG4rI2RlZmluZSBNSUdSQVRFX1JFQVNPTl9OT05FICgtMSlcbitcbiBzdHJ1Y3QgcGFnZV9vd25lciB7XG4gXHR1bnNpZ25lZCBzaG9ydCBvcmRlcjtcbiBcdHNob3J0IGxhc3RfbWlncmF0ZV9yZWFzb247XG5AQCAtMzM5LDcgKzM0Niw3IEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbitcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNSUdSQVRFX1JFQVNPTl9OT05FLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbkBAIC00MjIsNiArNDI5LDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuK1x0XHQqcGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgKzQ5MSw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICs1MjksMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM5LDEwICs1NjMsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjA5LDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTUlHUkFURV9SRUFTT05fTk9ORSkge1xuIFx0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgKzY2MCwxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCIpO1xuIFxuLVx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwiLFxuK1x0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cIixcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4rXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiArNjc1LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cIixcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbitcdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwiLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4rXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNSUdSQVRFX1JFQVNPTl9OT05FKVxuIFx0XHRwcl9hbGVydChcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyArNzI4LDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdFx0fVxuIFxuIFx0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbi1cdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXG4tXHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbitcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICs4MjQsOCBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUbyBhdm9pZCBoYXZpbmcgdG8gZ3JhYiB6b25lLVx1MDAzZWxvY2ssIGJlIGEgbGl0dGxlXG4tXHRcdFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcbi1cdFx0XHQgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzXG4tXHRcdFx0ICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuXG4tXHRcdFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXG4tXHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuK1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICs4NDAsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4gXG4gXHRcdFx0LyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi9cbiBcdFx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBlYXJseV9oYW5kbGUsIDAsIDAsXG4tXHRcdFx0XHRcdFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuK1x0XHRcdFx0XHRcdCAgIE1JR1JBVEVfUkVBU09OX05PTkUsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzkwMSw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MTgsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5NDAsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk2MiwyNyBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LFxuK1x0XHRcdFx1MDAyNnRocmVzaG9sZF9zZXQsIFwiJWxsdVxcblwiKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgKzk5OCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzX2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJjb3VudF90aHJlc2hvbGRcIiwgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwMzowNDozNy4zMzY5MDc3OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM4MzY4NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYG1tL3BhZ2Vfb3duZXIuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX293bmVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgbW9zdGx5IHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgYE1JR1JBVEVfUkVBU09OX05PTkVgIGlzIGp1c3QgYSBtYWNybyBzdWJzdGl0dXRpb24gZm9yIGAtMWAuIE5vIGltcGFjdCB0aGVyZSBmdW5jdGlvbmFsbHkuXG5cbk5leHQsIHdlIGhhdmUgdGhlIGV4dHJhY3Rpb24gb2YgYHNraXBfYnVkZHlfcGFnZXNgIGZyb20gaW5saW5lIGNvZGUuIFRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LiBUaGUgY29yZSBsb2dpYyBvZiBza2lwcGluZyBidWRkeSBwYWdlcyBiYXNlZCBvbiBvcmRlciByZW1haW5zIHRoZSBzYW1lLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSB1c2FnZSBpbiBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCwgYW5kIHRoZSBiZWhhdmlvciBpcyAqaWRlbnRpY2FsKi4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGluIGBpbml0X3BhZ2VzX2luX3pvbmVgIG5vdyBhbGxvd3MgZm9yIGBvcmRlciA9PSAwYCwgYnV0IHRoZSBuZXQgZWZmZWN0IHJlbWFpbnMgdGhlIHNhbWUgYmVjYXVzZSBgKnBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyAwKSAtIDFgIGJlY29tZXMgYCpwZm4gKz0gMGAsIGEgbm8tb3AsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYSBgY29udGludWVgLCBqdXN0IGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUuXG5cbmBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHVzZSBgI2lmZGVmIENPTkZJR19NRU1DR2Agb3V0c2lkZS4gVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZXJ2ZWQuXG5cblRoZSBjaGFuZ2VzIHRvIGBfX2R1bXBfcGFnZV9vd25lcmAganVzdCBtb3ZlIHRoZSBgZnJlZV90c19uc2VjYCBwcmludCBmcm9tIHRoZSBhbGxvY2F0aW9uIHRvIHRoZSBmcmVlIHN0YWNrIHRyYWNlIGFsZXJ0LiBJdCdzIGp1c3QgYSBkaWFnbm9zdGljIG91dHB1dCBjaGFuZ2UuXG5cblRoZSByZW5hbWVzIG9mIHZhcmlvdXMgYHBhZ2Vfb3duZXJfKmAgc3ltYm9scyB0byBzaG9ydGVyIG5hbWVzIGxpa2UgYHN0YWNrX29wYCwgYHRocmVzaG9sZF9nZXRgLCBhbmQgc3VjaCBhcmUgcHVyZWx5IGNvc21ldGljLlxuXG5UaGUgZm9ybWF0IHN0cmluZyBjaGFuZ2UgaW4gYERFRklORV9TSU1QTEVfQVRUUklCVVRFYCBmb3IgYHRocmVzaG9sZF9mb3BzYCBpcyBtaW5vcjsgaXQgYWRkcyBhIG5ld2xpbmUgdG8gdGhlIG91dHB1dCBvZiBhIGRlYnVnZnMgZmlsZSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkuXG5cbkFmdGVyIGNhcmVmdWwgYW5hbHlzaXMsIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGEgbWFjcm8gcmVwbGFjZW1lbnQsIGEgY29kZSByZWZhY3RvciwgYSBkaWFnbm9zdGljIG91dHB1dCBjaGFuZ2UsIGFuZCBuYW1lIHJlZmFjdG9yaW5nLiBUaGVyZSBhcmUgKm5vKiBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3b3VsZCB3YXJyYW50IGEgZnV6emluZyBlZmZvcnQuIFRoZSBjb3JlIGtlcm5lbCBsb2dpYyByZW1haW5zIHVuY2hhbmdlZC4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjEsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDM6MDQ6NTUuNzIwNTk0OTMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb2RlIHJlZmFjdG9yaW5nIChleHRyYWN0aW5nIGBza2lwX2J1ZGR5X3BhZ2VzYCwgbW92aW5nIGAjaWZkZWZgIGJsb2NrcyksIHJlbmFtaW5nIG9mIHN0YXRpYyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucywgbWFjcm8gcmVwbGFjZW1lbnRzIChgTUlHUkFURV9SRUFTT05fTk9ORWApLCBhbmQgY29zbWV0aWMgY2hhbmdlcyB0byBkZWJ1Z2ZzIG91dHB1dCBhbmQgcHJpbnRrIG1lc3NhZ2VzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4v6v9[1] Phase: Running StartedAt: 2026-06-26 03:05:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4v6v9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-26 03:05:06 +0000 UTC FinishedAt: 2026-06-26 03:05:15 +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,}