Name: series-workflowjgr8p Phase: Failed StartedAt: 2026-07-31 22:02:11 +0000 UTC FinishedAt: 2026-07-31 22:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjgr8p[0] Phase: Succeeded StartedAt: 2026-07-31 22:02:11 +0000 UTC FinishedAt: 2026-07-31 22:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjgr8p[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 22:02:11 +0000 UTC FinishedAt: 2026-07-31 22:18:11 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2I2MDJkZmQ1Y2VjZGJiMDhlYmU5ZTg2MDA5ZjFlNDFhMzJkODFjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDIyOjE3OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggY2UwMzVlMWI0ZWFmNi4uYzUxMjM2YjYxNjUxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgJiM0MzszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgX19wZ3Byb3QoUFRFX1JET05MWSksXG4mIzQzO1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gLypcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDQzNjJjMjZhYTk5MmQuLmJkMzgxN2UwNjA1MmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuQEAgLTg5LDYgJiM0Mzs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQuLjU5ODdmNGM4NGY2ZmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjY2Miw2ICYjNDM7MjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gX19zZXRfcGFnZXNfbnAocGFnZSwgbnIpO1xuIH1cbiBcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGVtcGFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuJiM0MztcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XG4mIzQzO1x0XHQudmFkZHIgPSBcdTAwMjZ0ZW1wYWRkcixcbiYjNDM7XHRcdC5wZ2QgPSBOVUxMLFxuJiM0MztcdFx0Lm51bXBhZ2VzID0gbnJfcGFnZXMsXG4mIzQzO1x0XHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcbiYjNDM7XHRcdC5tYXNrX2NsciA9IF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLFxuJiM0MztcdFx0LmZsYWdzID0gQ1BBX05PX0NIRUNLX0FMSUFTLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgJiM0Mzs0MCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxuJiM0MzsgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxuJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxuJiM0MzsgKlxuJiM0MzsgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIHJhbmdlIHN0YXJ0aW5nIGF0IEBhZGRyIHJlYWQtb25seSB3aXRob3V0IGludmFsaWRhdGluZ1xuJiM0MzsgKiBUTEJzLiBDYWxsZXJzIG11c3QgZWl0aGVyIGVuc3VyZSB0aGF0IG5vIHN0YWxlIHdyaXRhYmxlIHRyYW5zbGF0aW9ucyBjYW5cbiYjNDM7ICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gZGlyZWN0LW1hcCBwZXJtaXNzaW9uIGNoYW5nZXMgYXJlIHVuc3VwcG9ydGVkLFxuJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU2LDYgJiM0Mzs3NCwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzOy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgZ2VuZXJpYyBmYWxsYmFjayBmb3IgdGhlIF9ub2ZsdXNoIGNvbnRyYWN0LiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuJiM0MzsjZW5kaWZcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovXG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggOTcwZTA3NzAxOWI3NS4uMmRmYzdhNDIxOGMzZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MCw4ICYjNDM7NDAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG5AQCAtOTMyLDYgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuIFx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbkBAIC05NDAsOCAmIzQzOzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG4gXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxuJiM0MztcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogSGlnaG1lbSBmb2xpb3MgaGF2ZSBubyBwZXJtYW5lbnQgZGlyZWN0LW1hcCBtYXBwaW5nIHRvIHByb3RlY3QuICovXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oaWdobWVtKGh1Z2VfemVyb19mb2xpbykpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZvbGlvIHdhcyB6ZXJvZWQgdGhyb3VnaCB0aGUgd3JpdGFibGUgZGlyZWN0IG1hcC4gRmx1c2hcbiYjNDM7XHRcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCgodm9pZCAqKWFkZHIsIEhQQUdFX1BNRF9OUik7XG4mIzQzO1x0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjYwMmRmZDVjZWNkYmIwOGViZTllODYwMDlmMWU0MWEzMmQ4MWM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjI6MTc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTsKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTsKIAogaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwppbmRleCBjZTAzNWUxYjRlYWY2Li5jNTEyMzZiNjE2NTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCkBAIC0zNjUsNiAmIzQzOzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKJiM0MzsJCQkJIF9fcGdwcm90KFBURV9SRE9OTFkpLAomIzQzOwkJCQkgX19wZ3Byb3QoUFRFX1dSSVRFKSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIC8qCiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAppbmRleCA0MzYyYzI2YWE5OTJkLi5iZDM4MTdlMDYwNTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCkBAIC04OSw2ICYjNDM7ODksOCBAQCBpbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwogaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7CiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQuLjU5ODdmNGM4NGY2ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwpAQCAtMjY2Miw2ICYjNDM7MjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKJiM0MzsJc3RydWN0IGNwYV9kYXRhIGNwYSA9IHsKJiM0MzsJCS52YWRkciA9ICZhbXA7dGVtcGFkZHIsCiYjNDM7CQkucGdkID0gTlVMTCwKJiM0MzsJCS5udW1wYWdlcyA9IG5yX3BhZ2VzLAomIzQzOwkJLm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksCiYjNDM7CQkubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSwKJiM0MzsJCS5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUywKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKQEAgLTQwLDYgJiM0Mzs0MCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seQomIzQzOyAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwCiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHIKJiM0MzsgKgomIzQzOyAqIE1ha2UgdGhlIGRpcmVjdC1tYXAgcmFuZ2Ugc3RhcnRpbmcgYXQgQGFkZHIgcmVhZC1vbmx5IHdpdGhvdXQgaW52YWxpZGF0aW5nCiYjNDM7ICogVExCcy4gQ2FsbGVycyBtdXN0IGVpdGhlciBlbnN1cmUgdGhhdCBubyBzdGFsZSB3cml0YWJsZSB0cmFuc2xhdGlvbnMgY2FuCiYjNDM7ICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIGRpcmVjdC1tYXAgcGVybWlzc2lvbiBjaGFuZ2VzIGFyZSB1bnN1cHBvcnRlZCwKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTU2LDYgJiM0Mzs3NCwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpCiB9CiAjZGVmaW5lIGNhbl9zZXRfZGlyZWN0X21hcCBjYW5fc2V0X2RpcmVjdF9tYXAKICNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAomIzQzOy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgZ2VuZXJpYyBmYWxsYmFjayBmb3IgdGhlIF9ub2ZsdXNoIGNvbnRyYWN0LiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoCiYjNDM7I2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA5NzBlMDc3MDE5Yjc1Li4yZGZjN2E0MjE4YzNkIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTQwLDggJiM0Mzs0MCwxMCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jX3RhZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCkBAIC05MzIsNiAmIzQzOzkzNCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpCiAJc2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwogCQkvKgogCQkgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90CiAJCSAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLgpAQCAtOTQwLDggJiM0Mzs5NDQsMjIgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZCkKIAkJICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhcwogCQkgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuCiAJCSAqLwotCQlpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkKJiM0MzsJCWlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7CiAJCQlwcl93YXJuKCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEhpZ2htZW0gZm9saW9zIGhhdmUgbm8gcGVybWFuZW50IGRpcmVjdC1tYXAgbWFwcGluZyB0byBwcm90ZWN0LiAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKWZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaAomIzQzOwkJICogYWZ0ZXIgdGhlIHBhZ2UtdGFibGUgdXBkYXRlIHRvIGludmFsaWRhdGUgc3RhbGUgdHJhbnNsYXRpb25zLgomIzQzOwkJICovCiYjNDM7CQlzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTsKJiM0MzsJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBIUEFHRV9QTURfU0laRSk7CiAJCXJldHVybiAwOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJvb3QtVGltZSBNZW1vcnkgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCB3aGljaCBpcyBiZWluZyB1c2VkIGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIG1lbW9yeSBwcm90ZWN0aW9uIOKAkyBtYWtpbmcgdGhlIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gVGhpcyBoYXBwZW5zIGR1cmluZyBib290LCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7aXMgZnV6emluZyBldmVuIGFwcGxpY2FibGUgaGVyZT8mIzM0Oy4gRnV6emluZyBnZW5lcmFsbHkgdGFyZ2V0cyBydW50aW1lIGJlaGF2aW9ycywgc3lzY2FsbHMsIHRoaW5ncyB0aGF0IGFyZSBjb25zdGFudGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHN5c3RlbS4gVGhpcywgb24gdGhlIG90aGVyIGhhbmQsIGlzIGEgb25lLXRpbWUgdGhpbmcgdGhhdCBydW5zIGR1cmluZyBib290LiBTbywgSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgZm9yIGZ1enppbmcuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyBpcyBgdGhwX3Nocmlua2VyX2luaXRgICpvbmx5KiB1c2VkIGhlcmU/IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB5ZXMsIHdpdGhpbiAqdGhpcyogcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSB1c2VkIGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIEJ1dCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGRpZmYgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKT2theSwgSSYjMzk7bSBub3cgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgY2FsbCBpcyBpbmRlZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIG5ldyBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBoYXMgYmVlbiBhZGRlZCB0byBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIHRoZSB1c2FnZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgd2l0aGluIGFuIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKWAgYmxvY2suCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBhY3R1YWxseSAqaXMqLiBJIG5lZWQgdG8gZmluZCBpdHMgZGVmaW5pdGlvbi4gSSYjMzk7bGwgdXNlIG15IGdyZXBwZXIgdG9vbCB0byBnZXQgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzcxPWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4tLVxubW0vS2NvbmZpZy03NzMtXG5tbS9LY29uZmlnOjc3NDpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctNzc1LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbWFpbiBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNzc0LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBhIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGZlYXR1cmUsIGFzIHRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwbGFjZSBmb3IgcmVsYXRlZCB0b3BpY3MuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIG9wdGlvbnMsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBob29rZWQgdG9nZXRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGxpZSB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuIDc3MjpcdFx0ZGVmX2Jvb2wgblxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIDc3NTpcdFx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuIDc3NjpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDc3NzpcdFx0aGVscFxuIDc3ODpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXG4gNzc5Olx0XHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcbiA3ODA6XHRcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXG4gNzgxOlx0XHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXG4gNzgyOlx0XG4gNzgzOlx0XHQgIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIGh1Z2UgemVybyBmb2xpbyBpcyBhbGxvY2F0ZWRcbiA3ODQ6XHRcdCAgb25jZSBhbmQgbmV2ZXIgZnJlZWQuIE9uZSBmdWxsIGh1Z2UgcGFnZSYjMzk7cyB3b3J0aCBvZiBtZW1vcnkgc2hhbGxcbiA3ODU6XHRcdCAgYmUgdXNlZC5cbiA3ODY6XHRcbiA3ODc6XHRcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXG4gNzg4Olx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQYXRjaDogV29ydGggdGhlIEVmZm9ydD8qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGlzIGNsZWFybHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgYWltZWQgYXQgcHJldmVudGluZyBhY2NpZGVudGFsIHdyaXRlcyBhbmQgdGh1cywgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSByZXBlYXRlZGx5IHJlYWNoYWJsZSwgd2hpY2ggd291bGQgbWFrZSBpdCBmdXp6YWJsZT8KClRoZSBwYXRjaCBhZGRzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSB3YXkgaXQmIzM5O3MgdXNlZCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIG9uY2UgZHVyaW5nIGJvb3QuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGZ1enppbmcgc2VlbXMgbGVzcyBpbXBhY3RmdWwsIHNpbmNlIGl0JiMzOTtzIGp1c3QgYSBwZXJtaXNzaW9uIGNoYW5nZSB0aGF0IG9jY3VycyBiZWZvcmUgdGhlIGZ1enplciBldmVuIGhhcyBhIGNoYW5jZSB0byBydW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGluaXRpYWxpemluZyBzb21ldGhpbmcuCgpIb3dldmVyLi4uIGlmIHRoaXMgcmVhZC1vbmx5IHNldHRpbmcgY2F0Y2hlcyBhbnkgYWNjaWRlbnRhbCB3cml0ZXMsIHRoYXQgKmlzKiBhIGhhcmRlbmluZyBmZWF0dXJlIHRoYXQgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgYnkgdHJpZ2dlcmluZyB0aG9zZSB3cml0ZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgd3JpdGVzIHRvIHRoaXMgZm9saW8sIGFuZCB0aGUga2VybmVsIHdvdWxkIHBhbmljIGFzIGEgcmVzdWx0LCB0aGF0ICppcyogYSBidWcgdGhlIGZ1enplciBjb3VsZCBleHBvc2UuCgpUaGUgcHJvYmxlbSBpcywgdGhpcyBwYXRjaCAqaXMqIGp1c3QgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZi4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBib290LXRpbWUgbmF0dXJlIG9mIHRoaXMgY29kZSBtYWtlIGl0IHdvcnRoIGZ1enppbmc/CgpJIHJlY2FsbCB0aGUgY2hlY2sgZm9yICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEl0IGxpc3RzIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkbiYjMzk7dCogZnV6eiwgdGhpbmdzIGxpa2UgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDssICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7LCAmIzM0O0RvY3VtZW50YXRpb24gbW9kaWZpY2F0aW9ucyYjMzQ7LCAmIzM0O0NoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMmIzM0Oywgb3IgJiMzNDsucmVtb3ZlJiMzNDsgY29kZS4gQnV0IGl0IGRvZXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleGNsdWRlICYjMzQ7Ym9vdC10aW1lIG9ubHkgaW5pdGlhbGl6YXRpb24uJiMzNDsKClRoZW4sIEkgcmVtZW1iZXIsIHRoZSBrZXkgaGVyZSBpcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIFRoaXMgaXMgYSBuZXcgQVBJLiBCdXQgKmlzKiBpdCB1c2VkIGFueXdoZXJlIGVsc2U/IEl0JiMzOTtzIGNhbGxlZCAqb25seSogaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gTm93IHRoZSBrZXkgaXMsIGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IExldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTE2PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxNzppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE4OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xOS1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYz0zNTg9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjctXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MzY4OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMzY5LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTE9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MjppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MzojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk0LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU3PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NjU6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Mzc9c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00My0vKipcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjQ0OiAqIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggLSBtYWtlIGEgZGlyZWN0LW1hcCByYW5nZSByZWFkLW9ubHlcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTQ1LSAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTQtICovXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo1NTpzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC01Ni1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9NzE9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc3LVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzg6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC03OS0vKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjgwOnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTgxLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjg2OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Ny0jZW5kaWZcbi0tXG5tbS9odWdlX21lbW9yeS5jPTkyMz1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTYwLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTYxOlx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTYyLVx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIENvZGUqKgoKT2theSwgc28gdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgbGltaXRlZCB0byBgdGhwX3Nocmlua2VyX2luaXRgLiBTaW5jZSBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoYF9faW5pdGApLCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGR1cmluZyBib290LCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBuby4gRnV6emluZyBnZW5lcmFsbHkgZm9jdXNlcyBvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUsIHRyaWdnZXJlZCBieSBzeXNjYWxscyBvciBvdGhlciBpbnB1dHMuIElmIGEgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGJvb3QsIGEgZnV6emVyIGNhbiYjMzk7dCB0YXJnZXQgaXQuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKmRvZXMqIGludHJvZHVjZSBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIHdoaWNoIGlzIG5ldyBjb2RlIGxvY2F0ZWQgaW4gYm90aCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBOb3cgKnRoYXQqIHNvdW5kcyBsaWtlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEJ1dCB3YWl0Li4uIGFyZSB0aG9zZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSAqb3RoZXIqIHRoYW4gYHRocF9zaHJpbmtlcl9pbml0YD8gTm8sIGl0IGxvb2tzIGxpa2UgdGhleSBhcmUgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0YCBhcyB3ZWxsLgoKU28sIGluIGVzc2VuY2UsIHRoZXJlIGFyZSBubyBydW50aW1lLWFjY2Vzc2libGUgZnVuY3Rpb25zIGhlcmUgdGhhdCBhIGZ1enplciBjb3VsZCBkaXJlY3RseSB0cmlnZ2VyLiBJZiBJIHdlcmUgdG8gaW5kaWNhdGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OywgdGhlIHJlYXNvbiB3b3VsZCBiZSB0aGF0IHRoZSBjb2RlIGlzICpvbmx5KiBleGVjdXRlZCBvbmNlIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBub3QgYnkgdGhlIGZ1enplci4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc25lYWt5IGNoYW5nZXMgaGVyZS4gT2theSwgbm9wZSwgaXQmIzM5O3MganVzdCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGl0cyB1c2UgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gSG1tbSwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHJlLXRyaWdnZXIgYHRocF9zaHJpbmtlcl9pbml0YD8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBtb2R1bGVfaW5pdGAgb3IgYSBgc3Vic3lzX2luaXRjYWxsYCBvciBzaW1pbGFyLiBJdOKAmXMgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQgSSBjYW4gcmVhc29uYWJseSBleHBlY3QgdG8gaGFwcGVuIGFmdGVyIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIExldCYjMzk7cyBtb3ZlIG9uIGFuZCB0YWtlIGEgbG9vayBhdCBgbW0vaHVnZV9tZW1vcnkuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdH1cbiA5MjE6XHQjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG4gOTIyOlx0XG4gOTIzOlx0c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiA5MjQ6XHR7XG4gOTI1Olx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxuIDkyNjpcdFx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4gOTI3Olx0XHRcdFx0XHRcdFx0IFNIUklOS0VSX05PTlNMQUIsXG4gOTI4Olx0XHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4gOTI5Olx0XHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIDkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MzE6XHRcbiA5MzI6XHRcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbiA5MzM6XHRcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XG4gOTM0Olx0XHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4gOTM1Olx0XG4gOTM2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKSB7XG4gOTM3Olx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiA5Mzg6XHRcbiA5Mzk6XHRcdFx0LypcbiA5NDA6XHRcdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuIDk0MTpcdFx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbiA5NDI6XHRcdFx0ICpcbiA5NDM6XHRcdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4gOTQ0Olx0XHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbiA5NDU6XHRcdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuIDk0NjpcdFx0XHQgKi9cbiA5NDc6XHRcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiA5NDg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbiA5NDk6XHRcdFx0XHRyZXR1cm4gMDtcbiA5NTA6XHRcdFx0fVxuIDk1MTpcdFxuIDk1MjpcdFx0XHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cbiA5NTM6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxuIDk1NDpcdFx0XHRcdHJldHVybiAwO1xuIDk1NTpcdFxuIDk1NjpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pO1xuIDk1NzpcdFx0XHQvKlxuIDk1ODpcdFx0XHQgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaFxuIDk1OTpcdFx0XHQgKiBhZnRlciB0aGUgcGFnZS10YWJsZSB1cGRhdGUgdG8gaW52YWxpZGF0ZSBzdGFsZSB0cmFuc2xhdGlvbnMuXG4gOTYwOlx0XHRcdCAqL1xuIDk2MTpcdFx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbiA5NjI6XHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IEhQQUdFX1BNRF9TSVpFKTtcbiA5NjM6XHRcdFx0cmV0dXJuIDA7XG4gOTY0Olx0XHR9XG4gOTY1Olx0XG4gOTY2Olx0XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDt0aHAtemVyb1wmIzM0Oyk7XG4gOTY3Olx0XHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuIDk2ODpcdFx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiA5Njk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzEKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA2MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW52b2x2aW5nIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0JiMzOTtzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleGVjdXRlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIGFkZGVkIGZ1bmN0aW9uLCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSB0aGlzIGNvZGUgcnVucyBvbmx5IGF0IGJvb3QsIGEgZnV6emVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGl0IGRpcmVjdGx5IG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbiBpdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dlciBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIEkgY29uc2lkZXJlZCBpZiB0aGVyZSB3YXMgYW5vdGhlciB0cmlnZ2VyIHBhdGguIE5vcGUuCgpTbywgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmcuIEkgd2FzIGxlYW5pbmcgdG93YXJkcyBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGFzIGl0JiMzOTtzIGJvb3QtdGltZSBjb2RlLiBUaGUgcHJvbXB0IGRvZXMgbGlzdCBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHByb21wdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYm9vdC10aW1lIGNvZGUuIEJ1dCBpZiBJIHNhaWQgYFdvcnRoRnV6emluZzogdHJ1ZWAsIEkmIzM5O2QgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IHdvdWxkIHRob3NlIGJlPyAgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgPyBJdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdDsgdGhlIGZ1enplciBjYW4mIzM5O3QgdGFyZ2V0IGl0LiAgYHRocF9zaHJpbmtlcl9pbml0YD8gU2FtZSBwcm9ibGVtOiBgX19pbml0YCBmdW5jdGlvbnMgYXJlbiYjMzk7dCB0eXBpY2FsbHkgZnV6emVkLgoKVGhpcyBzdHJlbmd0aGVucyBteSBpbmNsaW5hdGlvbiBmb3IgYFdvcnRoRnV6emluZzogZmFsc2VgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiAgSSYjMzk7bGwgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYC4gT2theSwgaXQmIzM5O3MgKm9ubHkqIHVzZWQgd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGJvb3QtdGltZSBvbmx5LgoKVGhlcmVmb3JlLCBteSBkZWNpc2lvbiBpcyAqKmBXb3J0aEZ1enppbmc6IGZhbHNlYCoqLgoKVGhlIHJlYXNvbiBJJiMzOTttIGdpdmluZyBpczogVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgYHRocF9zaHJpbmtlcl9pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gYW5kIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY291bGQgdHJpZ2dlciBvciBtZWFuaW5nZnVsbHkgZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjI6MTc6MjQuNTYxMDYwMDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NzcwODU0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzoyNC41NjEwNjY2NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTMwNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNiNjAyZGZkNWNlY2RiYjA4ZWJlOWU4NjAwOWYxZTQxYTMyZDgxYzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjI6MTc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xcbmluZGV4IGNlMDM1ZTFiNGVhZjYuLmM1MTIzNmI2MTY1MTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuQEAgLTM2NSw2ICszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbiBcXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xcbiB9XFxuIFxcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgX19wZ3Byb3QoUFRFX1JET05MWSksXFxuK1xcdFxcdFxcdFxcdCBfX3BncHJvdChQVEVfV1JJVEUpKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gLypcXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbmluZGV4IDQzNjJjMjZhYTk5MmQuLmJkMzgxN2UwNjA1MmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuQEAgLTg5LDYgKzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBkMDIzYTQwYTFlMDM0Li41OTg3ZjRjODRmNmZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XFxuK1xcdFxcdC52YWRkciA9IFxcdTAwMjZ0ZW1wYWRkcixcXG4rXFx0XFx0LnBnZCA9IE5VTEwsXFxuK1xcdFxcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxcbitcXHRcXHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcXG4rXFx0XFx0Lm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksXFxuK1xcdFxcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuQEAgLTQwLDYgKzQwLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxcbisgKlxcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIHJhbmdlIHN0YXJ0aW5nIGF0IEBhZGRyIHJlYWQtb25seSB3aXRob3V0IGludmFsaWRhdGluZ1xcbisgKiBUTEJzLiBDYWxsZXJzIG11c3QgZWl0aGVyIGVuc3VyZSB0aGF0IG5vIHN0YWxlIHdyaXRhYmxlIHRyYW5zbGF0aW9ucyBjYW5cXG4rICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gZGlyZWN0LW1hcCBwZXJtaXNzaW9uIGNoYW5nZXMgYXJlIHVuc3VwcG9ydGVkLFxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNTYsNiArNzQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbiB9XFxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxcbiAjZW5kaWZcXG4rXFxuKyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cXG4rc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4rI2VuZGlmXFxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggOTcwZTA3NzAxOWI3NS4uMmRmYzdhNDIxOGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MCw4ICs0MCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG5AQCAtOTMyLDYgKzkzNCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxcbiBcXHRcXHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cXG5AQCAtOTQwLDggKzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbiBcXHRcXHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXFxuIFxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxcbitcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmb2xpbyB3YXMgemVyb2VkIHRocm91Z2ggdGhlIHdyaXRhYmxlIGRpcmVjdCBtYXAuIEZsdXNoXFxuK1xcdFxcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goKHZvaWQgKilhZGRyLCBIUEFHRV9QTURfTlIpO1xcbitcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzoyNC45NjMyNDAzMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDU3NDkwMDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiNjAyZGZkNWNlY2RiYjA4ZWJlOWU4NjAwOWYxZTQxYTMyZDgxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMjoxNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggY2UwMzVlMWI0ZWFmNi4uYzUxMjM2YjYxNjUxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9SRE9OTFkpLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIC8qXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5pbmRleCA0MzYyYzI2YWE5OTJkLi5iZDM4MTdlMDYwNTJjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC04OSw2ICs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0Li41OTg3ZjRjODRmNmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gX19zZXRfcGFnZXNfbnAocGFnZSwgbnIpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdGVtcGFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuK1x0c3RydWN0IGNwYV9kYXRhIGNwYSA9IHtcbitcdFx0LnZhZGRyID0gXHUwMDI2dGVtcGFkZHIsXG4rXHRcdC5wZ2QgPSBOVUxMLFxuK1x0XHQubnVtcGFnZXMgPSBucl9wYWdlcyxcbitcdFx0Lm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksXG4rXHRcdC5tYXNrX2NsciA9IF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLFxuK1x0XHQuZmxhZ3MgPSBDUEFfTk9fQ0hFQ0tfQUxJQVMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgKzQwLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxuKyAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbisgKlxuKyAqIE1ha2UgdGhlIGRpcmVjdC1tYXAgcmFuZ2Ugc3RhcnRpbmcgYXQgQGFkZHIgcmVhZC1vbmx5IHdpdGhvdXQgaW52YWxpZGF0aW5nXG4rICogVExCcy4gQ2FsbGVycyBtdXN0IGVpdGhlciBlbnN1cmUgdGhhdCBubyBzdGFsZSB3cml0YWJsZSB0cmFuc2xhdGlvbnMgY2FuXG4rICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIGRpcmVjdC1tYXAgcGVybWlzc2lvbiBjaGFuZ2VzIGFyZSB1bnN1cHBvcnRlZCxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtNTYsNiArNzQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxuIH1cbiAjZGVmaW5lIGNhbl9zZXRfZGlyZWN0X21hcCBjYW5fc2V0X2RpcmVjdF9tYXBcbiAjZW5kaWZcbitcbisjaWZuZGVmIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuKyNlbmRpZlxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA5NzBlMDc3MDE5Yjc1Li4yZGZjN2E0MjE4YzNkIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQwLDggKzQwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuQEAgLTkzMiw2ICs5MzQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcbiBcdFx0ICogaW5pdGlhbGl6ZSB0aGUgc2hyaW5rZXIuXG5AQCAtOTQwLDggKzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG4gXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxuK1x0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xuIFx0XHRcdHByX3dhcm4oXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaFxuK1x0XHQgKiBhZnRlciB0aGUgcGFnZS10YWJsZSB1cGRhdGUgdG8gaW52YWxpZGF0ZSBzdGFsZSB0cmFuc2xhdGlvbnMuXG4rXHRcdCAqL1xuK1x0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbitcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjI0Ljk2MzI0MTc2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzk5ODUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbnRyb2R1Y2luZyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIHdoaWNoIGlzIGJlaW5nIHVzZWQgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgbWVtb3J5IHByb3RlY3Rpb24g4oCTIG1ha2luZyB0aGUgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGhhcHBlbnMgZHVyaW5nIGJvb3QsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImlzIGZ1enppbmcgZXZlbiBhcHBsaWNhYmxlIGhlcmU/XCIuIEZ1enppbmcgZ2VuZXJhbGx5IHRhcmdldHMgcnVudGltZSBiZWhhdmlvcnMsIHN5c2NhbGxzLCB0aGluZ3MgdGhhdCBhcmUgY29uc3RhbnRseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0uIFRoaXMsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhIG9uZS10aW1lIHRoaW5nIHRoYXQgcnVucyBkdXJpbmcgYm9vdC4gU28sIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyBpcyBgdGhwX3Nocmlua2VyX2luaXRgICpvbmx5KiB1c2VkIGhlcmU/IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB5ZXMsIHdpdGhpbiAqdGhpcyogcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IHVzZWQgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gQnV0IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cbk9rYXksIEknbSBub3cgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgY2FsbCBpcyBpbmRlZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIG5ldyBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBoYXMgYmVlbiBhZGRlZCB0byBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgaXQncyB1c2VkIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhlIHVzYWdlIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyB3aXRoaW4gYW4gYGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpYCBibG9jay5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYWN0dWFsbHkgKmlzKi4gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbGwgdXNlIG15IGdyZXBwZXIgdG9vbCB0byBnZXQgdGhlIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozMi4xMDMyMjg5MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODY2OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzE9Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG4tLVxcbm1tL0tjb25maWctNzczLVxcbm1tL0tjb25maWc6Nzc0OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctNzc1LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozMy44NjE5MDQwMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1OTE2MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBjb25maWd1cmF0aW9uIHNwYWNlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIHRoZSBtYWluIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDc3NC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGEga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZSwgYXMgdGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBsYWNlIGZvciByZWxhdGVkIHRvcGljcy4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBvcHRpb25zLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCBnZW1zIGxpZSB3aXRoaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozNi45Njc4MjI4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFxuIDc3MTpcXHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbiA3NzI6XFx0XFx0ZGVmX2Jvb2wgblxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gNzc1OlxcdFxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbiA3NzY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA3Nzc6XFx0XFx0aGVscFxcbiA3Nzg6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXFxuIDc3OTpcXHRcXHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcXG4gNzgwOlxcdFxcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXFxuIDc4MTpcXHRcXHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxcbiA3ODQ6XFx0XFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJ3Mgd29ydGggb2YgbWVtb3J5IHNoYWxsXFxuIDc4NTpcXHRcXHQgIGJlIHVzZWQuXFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXFxuIDc4ODpcXHRcXHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cXG4gNzg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozNi45Njc5MjY2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzE0MzcwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogV29ydGggdGhlIEVmZm9ydD8qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGlzIGNsZWFybHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgYWltZWQgYXQgcHJldmVudGluZyBhY2NpZGVudGFsIHdyaXRlcyBhbmQgdGh1cywgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSByZXBlYXRlZGx5IHJlYWNoYWJsZSwgd2hpY2ggd291bGQgbWFrZSBpdCBmdXp6YWJsZT9cblxuVGhlIHBhdGNoIGFkZHMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBhbmQgdGhlIHdheSBpdCdzIHVzZWQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY2FsbGVkIG9uY2UgZHVyaW5nIGJvb3QuIElmIHRoYXQncyB0aGUgY2FzZSwgZnV6emluZyBzZWVtcyBsZXNzIGltcGFjdGZ1bCwgc2luY2UgaXQncyBqdXN0IGEgcGVybWlzc2lvbiBjaGFuZ2UgdGhhdCBvY2N1cnMgYmVmb3JlIHRoZSBmdXp6ZXIgZXZlbiBoYXMgYSBjaGFuY2UgdG8gcnVuLiBJdCdzIGVzc2VudGlhbGx5IGluaXRpYWxpemluZyBzb21ldGhpbmcuXG5cbkhvd2V2ZXIuLi4gaWYgdGhpcyByZWFkLW9ubHkgc2V0dGluZyBjYXRjaGVzIGFueSBhY2NpZGVudGFsIHdyaXRlcywgdGhhdCAqaXMqIGEgaGFyZGVuaW5nIGZlYXR1cmUgdGhhdCB0aGUgZnV6emVyIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBieSB0cmlnZ2VyaW5nIHRob3NlIHdyaXRlcy4gSWYgdGhlIGZ1enplciBjYW4gdHJpZ2dlciB3cml0ZXMgdG8gdGhpcyBmb2xpbywgYW5kIHRoZSBrZXJuZWwgd291bGQgcGFuaWMgYXMgYSByZXN1bHQsIHRoYXQgKmlzKiBhIGJ1ZyB0aGUgZnV6emVyIGNvdWxkIGV4cG9zZS5cblxuVGhlIHByb2JsZW0gaXMsIHRoaXMgcGF0Y2ggKmlzKiBqdXN0IHRoZSBpbml0aWFsaXphdGlvbiBpdHNlbGYuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYm9vdC10aW1lIG5hdHVyZSBvZiB0aGlzIGNvZGUgbWFrZSBpdCB3b3J0aCBmdXp6aW5nP1xuXG5JIHJlY2FsbCB0aGUgY2hlY2sgZm9yIFwiV29ydGhGdXp6aW5nXCIuIEl0IGxpc3RzIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkbid0KiBmdXp6LCB0aGluZ3MgbGlrZSBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiwgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzXCIsIFwiRG9jdW1lbnRhdGlvbiBtb2RpZmljYXRpb25zXCIsIFwiQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50c1wiLCBvciBcIi5yZW1vdmVcIiBjb2RlLiBCdXQgaXQgZG9lc24ndCAqZXhwbGljaXRseSogZXhjbHVkZSBcImJvb3QtdGltZSBvbmx5IGluaXRpYWxpemF0aW9uLlwiXG5cblRoZW4sIEkgcmVtZW1iZXIsIHRoZSBrZXkgaGVyZSBpcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIFRoaXMgaXMgYSBuZXcgQVBJLiBCdXQgKmlzKiBpdCB1c2VkIGFueXdoZXJlIGVsc2U/IEl0J3MgY2FsbGVkICpvbmx5KiBpbiBgdGhwX3Nocmlua2VyX2luaXRgLiBOb3cgdGhlIGtleSBpcywgaXMgYHRocF9zaHJpbmtlcl9pbml0YCBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdD8gTGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzo0My42ODIyOTk5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkwMTYxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9MTY9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxNzppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxODojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTE5LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MzU4PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjctXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjM2ODppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjkte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkxPWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjkyOmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MzojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC05NC1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU3PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NjU6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Mzc9c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTQzLS8qKlxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjQ0OiAqIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggLSBtYWtlIGEgZGlyZWN0LW1hcCByYW5nZSByZWFkLW9ubHlcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00NS0gKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTQtICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NTU6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9NzE9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzctXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzg6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzktLyogU2VlIHRoZSBjb21tZW50IGFib3ZlIHRoZSBnZW5lcmljIGZhbGxiYWNrIGZvciB0aGUgX25vZmx1c2ggY29udHJhY3QuICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODA6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTgxLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtODUtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODY6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Ny0jZW5kaWZcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTIzPXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk2MC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjk2MTpcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcXG5tbS9odWdlX21lbW9yeS5jLTk2Mi1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjQ1LjQ3MjQ2NjcyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDg3ODY3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIENvZGUqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBsaW1pdGVkIHRvIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNpbmNlIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGBfX2luaXRgKSwgaXQncyBvbmx5IGNhbGxlZCBvbmNlIGR1cmluZyBib290LCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBuby4gRnV6emluZyBnZW5lcmFsbHkgZm9jdXNlcyBvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUsIHRyaWdnZXJlZCBieSBzeXNjYWxscyBvciBvdGhlciBpbnB1dHMuIElmIGEgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGJvb3QsIGEgZnV6emVyIGNhbid0IHRhcmdldCBpdC5cblxuSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCB3aGljaCBpcyBuZXcgY29kZSBsb2NhdGVkIGluIGJvdGggYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gTm93ICp0aGF0KiBzb3VuZHMgbGlrZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBCdXQgd2FpdC4uLiBhcmUgdGhvc2UgY2FsbGVkIGZyb20gYW55d2hlcmUgKm90aGVyKiB0aGFuIGB0aHBfc2hyaW5rZXJfaW5pdGA/IE5vLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAgYXMgd2VsbC5cblxuU28sIGluIGVzc2VuY2UsIHRoZXJlIGFyZSBubyBydW50aW1lLWFjY2Vzc2libGUgZnVuY3Rpb25zIGhlcmUgdGhhdCBhIGZ1enplciBjb3VsZCBkaXJlY3RseSB0cmlnZ2VyLiBJZiBJIHdlcmUgdG8gaW5kaWNhdGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiwgdGhlIHJlYXNvbiB3b3VsZCBiZSB0aGF0IHRoZSBjb2RlIGlzICpvbmx5KiBleGVjdXRlZCBvbmNlIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBub3QgYnkgdGhlIGZ1enplci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHNuZWFreSBjaGFuZ2VzIGhlcmUuIE9rYXksIG5vcGUsIGl0J3MganVzdCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGl0cyB1c2UgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gSG1tbSwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHJlLXRyaWdnZXIgYHRocF9zaHJpbmtlcl9pbml0YD8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCdzIGEgYG1vZHVsZV9pbml0YCBvciBhIGBzdWJzeXNfaW5pdGNhbGxgIG9yIHNpbWlsYXIuIEl04oCZcyBkZWZpbml0ZWx5IG5vdCBzb21ldGhpbmcgdGhhdCBJIGNhbiByZWFzb25hYmx5IGV4cGVjdCB0byBoYXBwZW4gYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBzZXF1ZW5jZS4gTGV0J3MgbW92ZSBvbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzo1MS44ODEyNTYxODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdH1cXG4gOTIxOlxcdCNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG4gOTIyOlxcdFxcbiA5MjM6XFx0c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XFxuIDkyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX05PTlNMQUIsXFxuIDkyODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbiA5Mjk6XFx0XFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcXG4gOTMwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X2NvdW50O1xcbiA5MzM6XFx0XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxuIDkzNDpcXHRcXHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4gOTM3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gOTM4OlxcdFxcbiA5Mzk6XFx0XFx0XFx0LypcXG4gOTQwOlxcdFxcdFxcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcXG4gOTQxOlxcdFxcdFxcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxcbiA5NDI6XFx0XFx0XFx0ICpcXG4gOTQzOlxcdFxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbiA5NDQ6XFx0XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbiA5NDU6XFx0XFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiA5NDY6XFx0XFx0XFx0ICovXFxuIDk0NzpcXHRcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiA5NDg6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbiA5NDk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk1MDpcXHRcXHRcXHR9XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdFxcdC8qIEhpZ2htZW0gZm9saW9zIGhhdmUgbm8gcGVybWFuZW50IGRpcmVjdC1tYXAgbWFwcGluZyB0byBwcm90ZWN0LiAqL1xcbiA5NTM6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxcbiA5NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XFxuIDk1NzpcXHRcXHRcXHQvKlxcbiA5NTg6XFx0XFx0XFx0ICogVGhlIGZvbGlvIHdhcyB6ZXJvZWQgdGhyb3VnaCB0aGUgd3JpdGFibGUgZGlyZWN0IG1hcC4gRmx1c2hcXG4gOTU5OlxcdFxcdFxcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cXG4gOTYwOlxcdFxcdFxcdCAqL1xcbiA5NjE6XFx0XFx0XFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCgodm9pZCAqKWFkZHIsIEhQQUdFX1BNRF9OUik7XFxuIDk2MjpcXHRcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTY0OlxcdFxcdH1cXG4gOTY1OlxcdFxcbiA5NjY6XFx0XFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuIDk2NzpcXHRcXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbiA5Njg6XFx0XFx0XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDk2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjI6MTc6NTEuODgxNzg0NjcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTYzMjYzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW52b2x2aW5nIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0J3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgZXhlY3V0ZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoZSBhZGRlZCBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgdGhwX3Nocmlua2VyX2luaXRgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhpcyBjb2RlIHJ1bnMgb25seSBhdCBib290LCBhIGZ1enplciB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIGl0IGRpcmVjdGx5IG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbiBpdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYW55IG90aGVyIHdheSB0byB0cmlnZ2VyIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYC4gSSBjb25zaWRlcmVkIGlmIHRoZXJlIHdhcyBhbm90aGVyIHRyaWdnZXIgcGF0aC4gTm9wZS5cblxuU28sIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB3b3J0aCBmdXp6aW5nLiBJIHdhcyBsZWFuaW5nIHRvd2FyZHMgYFdvcnRoRnV6emluZzogZmFsc2VgLCBhcyBpdCdzIGJvb3QtdGltZSBjb2RlLiBUaGUgcHJvbXB0IGRvZXMgbGlzdCBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHByb21wdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBib290LXRpbWUgY29kZS4gQnV0IGlmIEkgc2FpZCBgV29ydGhGdXp6aW5nOiB0cnVlYCwgSSdkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCB3b3VsZCB0aG9zZSBiZT8gIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYD8gSXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdDsgdGhlIGZ1enplciBjYW4ndCB0YXJnZXQgaXQuICBgdGhwX3Nocmlua2VyX2luaXRgPyBTYW1lIHByb2JsZW06IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmVuJ3QgdHlwaWNhbGx5IGZ1enplZC5cblxuVGhpcyBzdHJlbmd0aGVucyBteSBpbmNsaW5hdGlvbiBmb3IgYFdvcnRoRnV6emluZzogZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuICBJJ2xsIGdyZXAgdGhlIGNvZGViYXNlIGZvciBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIE9rYXksIGl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNvLCBpdCdzIGRlZmluaXRlbHkgYm9vdC10aW1lIG9ubHkuXG5cblRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgKipgV29ydGhGdXp6aW5nOiBmYWxzZWAqKi5cblxuVGhlIHJlYXNvbiBJJ20gZ2l2aW5nIGlzOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBgdGhwX3Nocmlua2VyX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjb3VsZCB0cmlnZ2VyIG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMSwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjU5LjUzODExMzg2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBhbmQgdXNlcyBpdCBleGNsdXNpdmVseSBpbiBgdGhwX3Nocmlua2VyX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290LiBUaGVyZSBhcmUgbm8gcnVudGltZS1yZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IGEgZnV6emVyIGNhbiB0cmlnZ2VyIG9yIGZvY3VzIG9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjgr8p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 22:02:11 +0000 UTC FinishedAt: 2026-07-31 22:18:01 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2I2MDJkZmQ1Y2VjZGJiMDhlYmU5ZTg2MDA5ZjFlNDFhMzJkODFjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDIyOjE3OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggY2UwMzVlMWI0ZWFmNi4uYzUxMjM2YjYxNjUxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgJiM0MzszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuIFx0cmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTtcbiB9XG4gXG4mIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgX19wZ3Byb3QoUFRFX1JET05MWSksXG4mIzQzO1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gLypcbiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDQzNjJjMjZhYTk5MmQuLmJkMzgxN2UwNjA1MmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuQEAgLTg5LDYgJiM0Mzs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBleHRlcm4gaW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQuLjU5ODdmNGM4NGY2ZmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjY2Miw2ICYjNDM7MjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gX19zZXRfcGFnZXNfbnAocGFnZSwgbnIpO1xuIH1cbiBcbiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGVtcGFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuJiM0MztcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XG4mIzQzO1x0XHQudmFkZHIgPSBcdTAwMjZ0ZW1wYWRkcixcbiYjNDM7XHRcdC5wZ2QgPSBOVUxMLFxuJiM0MztcdFx0Lm51bXBhZ2VzID0gbnJfcGFnZXMsXG4mIzQzO1x0XHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcbiYjNDM7XHRcdC5tYXNrX2NsciA9IF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLFxuJiM0MztcdFx0LmZsYWdzID0gQ1BBX05PX0NIRUNLX0FMSUFTLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgJiM0Mzs0MCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxuJiM0MzsgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxuJiM0MzsgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxuJiM0MzsgKlxuJiM0MzsgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIHJhbmdlIHN0YXJ0aW5nIGF0IEBhZGRyIHJlYWQtb25seSB3aXRob3V0IGludmFsaWRhdGluZ1xuJiM0MzsgKiBUTEJzLiBDYWxsZXJzIG11c3QgZWl0aGVyIGVuc3VyZSB0aGF0IG5vIHN0YWxlIHdyaXRhYmxlIHRyYW5zbGF0aW9ucyBjYW5cbiYjNDM7ICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gZGlyZWN0LW1hcCBwZXJtaXNzaW9uIGNoYW5nZXMgYXJlIHVuc3VwcG9ydGVkLFxuJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU2LDYgJiM0Mzs3NCwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpXG4gfVxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4mIzQzOy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgZ2VuZXJpYyBmYWxsYmFjayBmb3IgdGhlIF9ub2ZsdXNoIGNvbnRyYWN0LiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuJiM0MzsjZW5kaWZcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovXG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggOTcwZTA3NzAxOWI3NS4uMmRmYzdhNDIxOGMzZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MCw4ICYjNDM7NDAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG5AQCAtOTMyLDYgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuIFx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbkBAIC05NDAsOCAmIzQzOzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG4gXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxuJiM0MztcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogSGlnaG1lbSBmb2xpb3MgaGF2ZSBubyBwZXJtYW5lbnQgZGlyZWN0LW1hcCBtYXBwaW5nIHRvIHByb3RlY3QuICovXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oaWdobWVtKGh1Z2VfemVyb19mb2xpbykpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZvbGlvIHdhcyB6ZXJvZWQgdGhyb3VnaCB0aGUgd3JpdGFibGUgZGlyZWN0IG1hcC4gRmx1c2hcbiYjNDM7XHRcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCgodm9pZCAqKWFkZHIsIEhQQUdFX1BNRF9OUik7XG4mIzQzO1x0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjYwMmRmZDVjZWNkYmIwOGViZTllODYwMDlmMWU0MWEzMmQ4MWM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjI6MTc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBpbnQgc2V0X21lbW9yeV92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTsKJiM0MztpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0MzsjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTsKIAogaW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwppbmRleCBjZTAzNWUxYjRlYWY2Li5jNTEyMzZiNjE2NTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCkBAIC0zNjUsNiAmIzQzOzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIHNldF9tZW1vcnlfdmFsaWQoYWRkciwgbnIsIHZhbGlkKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIWNhbl9zZXRfZGlyZWN0X21hcCgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB1cGRhdGVfcmFuZ2VfcHJvdCgodW5zaWduZWQgbG9uZylhZGRyLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKJiM0MzsJCQkJIF9fcGdwcm90KFBURV9SRE9OTFkpLAomIzQzOwkJCQkgX19wZ3Byb3QoUFRFX1dSSVRFKSk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIC8qCiAgKiBUaGlzIGlzIC0gYXBhcnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlIC0gZG9pbmcgdGhlIHNhbWUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaAppbmRleCA0MzYyYzI2YWE5OTJkLi5iZDM4MTdlMDYwNTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oCkBAIC04OSw2ICYjNDM7ODksOCBAQCBpbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwogaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7CiYjNDM7aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiYjNDM7I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2gKIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQuLjU5ODdmNGM4NGY2ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwpAQCAtMjY2Miw2ICYjNDM7MjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpCiAJcmV0dXJuIF9fc2V0X3BhZ2VzX25wKHBhZ2UsIG5yKTsKIH0KIAomIzQzO2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRlbXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKJiM0MzsJc3RydWN0IGNwYV9kYXRhIGNwYSA9IHsKJiM0MzsJCS52YWRkciA9ICZhbXA7dGVtcGFkZHIsCiYjNDM7CQkucGdkID0gTlVMTCwKJiM0MzsJCS5udW1wYWdlcyA9IG5yX3BhZ2VzLAomIzQzOwkJLm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksCiYjNDM7CQkubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSwKJiM0MzsJCS5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUywKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgKQEAgLTQwLDYgJiM0Mzs0MCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seQomIzQzOyAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwCiYjNDM7ICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHIKJiM0MzsgKgomIzQzOyAqIE1ha2UgdGhlIGRpcmVjdC1tYXAgcmFuZ2Ugc3RhcnRpbmcgYXQgQGFkZHIgcmVhZC1vbmx5IHdpdGhvdXQgaW52YWxpZGF0aW5nCiYjNDM7ICogVExCcy4gQ2FsbGVycyBtdXN0IGVpdGhlciBlbnN1cmUgdGhhdCBubyBzdGFsZSB3cml0YWJsZSB0cmFuc2xhdGlvbnMgY2FuCiYjNDM7ICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIGRpcmVjdC1tYXAgcGVybWlzc2lvbiBjaGFuZ2VzIGFyZSB1bnN1cHBvcnRlZCwKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTU2LDYgJiM0Mzs3NCwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NldF9kaXJlY3RfbWFwKHZvaWQpCiB9CiAjZGVmaW5lIGNhbl9zZXRfZGlyZWN0X21hcCBjYW5fc2V0X2RpcmVjdF9tYXAKICNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaAomIzQzOy8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSB0aGUgZ2VuZXJpYyBmYWxsYmFjayBmb3IgdGhlIF9ub2ZsdXNoIGNvbnRyYWN0LiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoCiYjNDM7I2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA5NzBlMDc3MDE5Yjc1Li4yZGZjN2E0MjE4YzNkIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTQwLDggJiM0Mzs0MCwxMCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jX3RhZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90bGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCkBAIC05MzIsNiAmIzQzOzkzNCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpCiAJc2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwogCQkvKgogCQkgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90CiAJCSAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLgpAQCAtOTQwLDggJiM0Mzs5NDQsMjIgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZCkKIAkJICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhcwogCQkgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuCiAJCSAqLwotCQlpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkKJiM0MzsJCWlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKSB7CiAJCQlwcl93YXJuKCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEhpZ2htZW0gZm9saW9zIGhhdmUgbm8gcGVybWFuZW50IGRpcmVjdC1tYXAgbWFwcGluZyB0byBwcm90ZWN0LiAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKWZvbGlvX2FkZHJlc3MoaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaAomIzQzOwkJICogYWZ0ZXIgdGhlIHBhZ2UtdGFibGUgdXBkYXRlIHRvIGludmFsaWRhdGUgc3RhbGUgdHJhbnNsYXRpb25zLgomIzQzOwkJICovCiYjNDM7CQlzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTsKJiM0MzsJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBIUEFHRV9QTURfU0laRSk7CiAJCXJldHVybiAwOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJvb3QtVGltZSBNZW1vcnkgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCB3aGljaCBpcyBiZWluZyB1c2VkIGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIG1lbW9yeSBwcm90ZWN0aW9uIOKAkyBtYWtpbmcgdGhlIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIHJlYWQtb25seSBpbiB0aGUgZGlyZWN0IG1hcC4gVGhpcyBoYXBwZW5zIGR1cmluZyBib290LCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGB0aHBfc2hyaW5rZXJfaW5pdGAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7aXMgZnV6emluZyBldmVuIGFwcGxpY2FibGUgaGVyZT8mIzM0Oy4gRnV6emluZyBnZW5lcmFsbHkgdGFyZ2V0cyBydW50aW1lIGJlaGF2aW9ycywgc3lzY2FsbHMsIHRoaW5ncyB0aGF0IGFyZSBjb25zdGFudGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHN5c3RlbS4gVGhpcywgb24gdGhlIG90aGVyIGhhbmQsIGlzIGEgb25lLXRpbWUgdGhpbmcgdGhhdCBydW5zIGR1cmluZyBib290LiBTbywgSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBpcyBhIGZydWl0ZnVsIGFyZWEgZm9yIGZ1enppbmcuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyBpcyBgdGhwX3Nocmlua2VyX2luaXRgICpvbmx5KiB1c2VkIGhlcmU/IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB5ZXMsIHdpdGhpbiAqdGhpcyogcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSB1c2VkIGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIEJ1dCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGRpZmYgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKT2theSwgSSYjMzk7bSBub3cgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgY2FsbCBpcyBpbmRlZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIG5ldyBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBoYXMgYmVlbiBhZGRlZCB0byBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIHRoZSB1c2FnZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgd2l0aGluIGFuIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKWAgYmxvY2suCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBhY3R1YWxseSAqaXMqLiBJIG5lZWQgdG8gZmluZCBpdHMgZGVmaW5pdGlvbi4gSSYjMzk7bGwgdXNlIG15IGdyZXBwZXIgdG9vbCB0byBnZXQgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzcxPWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4tLVxubW0vS2NvbmZpZy03NzMtXG5tbS9LY29uZmlnOjc3NDpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctNzc1LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIHNwZWNpZmljIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbWFpbiBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNzc0LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBhIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGZlYXR1cmUsIGFzIHRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwbGFjZSBmb3IgcmVsYXRlZCB0b3BpY3MuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIG9wdGlvbnMsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBob29rZWQgdG9nZXRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGxpZSB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuIDc3MjpcdFx0ZGVmX2Jvb2wgblxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIDc3NTpcdFx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuIDc3NjpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDc3NzpcdFx0aGVscFxuIDc3ODpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXG4gNzc5Olx0XHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcbiA3ODA6XHRcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXG4gNzgxOlx0XHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXG4gNzgyOlx0XG4gNzgzOlx0XHQgIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIGh1Z2UgemVybyBmb2xpbyBpcyBhbGxvY2F0ZWRcbiA3ODQ6XHRcdCAgb25jZSBhbmQgbmV2ZXIgZnJlZWQuIE9uZSBmdWxsIGh1Z2UgcGFnZSYjMzk7cyB3b3J0aCBvZiBtZW1vcnkgc2hhbGxcbiA3ODU6XHRcdCAgYmUgdXNlZC5cbiA3ODY6XHRcbiA3ODc6XHRcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXG4gNzg4Olx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA3ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQYXRjaDogV29ydGggdGhlIEVmZm9ydD8qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGlzIGNsZWFybHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgYWltZWQgYXQgcHJldmVudGluZyBhY2NpZGVudGFsIHdyaXRlcyBhbmQgdGh1cywgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSByZXBlYXRlZGx5IHJlYWNoYWJsZSwgd2hpY2ggd291bGQgbWFrZSBpdCBmdXp6YWJsZT8KClRoZSBwYXRjaCBhZGRzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCwgYW5kIHRoZSB3YXkgaXQmIzM5O3MgdXNlZCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIG9uY2UgZHVyaW5nIGJvb3QuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGZ1enppbmcgc2VlbXMgbGVzcyBpbXBhY3RmdWwsIHNpbmNlIGl0JiMzOTtzIGp1c3QgYSBwZXJtaXNzaW9uIGNoYW5nZSB0aGF0IG9jY3VycyBiZWZvcmUgdGhlIGZ1enplciBldmVuIGhhcyBhIGNoYW5jZSB0byBydW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGluaXRpYWxpemluZyBzb21ldGhpbmcuCgpIb3dldmVyLi4uIGlmIHRoaXMgcmVhZC1vbmx5IHNldHRpbmcgY2F0Y2hlcyBhbnkgYWNjaWRlbnRhbCB3cml0ZXMsIHRoYXQgKmlzKiBhIGhhcmRlbmluZyBmZWF0dXJlIHRoYXQgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgYnkgdHJpZ2dlcmluZyB0aG9zZSB3cml0ZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgd3JpdGVzIHRvIHRoaXMgZm9saW8sIGFuZCB0aGUga2VybmVsIHdvdWxkIHBhbmljIGFzIGEgcmVzdWx0LCB0aGF0ICppcyogYSBidWcgdGhlIGZ1enplciBjb3VsZCBleHBvc2UuCgpUaGUgcHJvYmxlbSBpcywgdGhpcyBwYXRjaCAqaXMqIGp1c3QgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZi4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBib290LXRpbWUgbmF0dXJlIG9mIHRoaXMgY29kZSBtYWtlIGl0IHdvcnRoIGZ1enppbmc/CgpJIHJlY2FsbCB0aGUgY2hlY2sgZm9yICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEl0IGxpc3RzIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkbiYjMzk7dCogZnV6eiwgdGhpbmdzIGxpa2UgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDssICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7LCAmIzM0O0RvY3VtZW50YXRpb24gbW9kaWZpY2F0aW9ucyYjMzQ7LCAmIzM0O0NoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMmIzM0Oywgb3IgJiMzNDsucmVtb3ZlJiMzNDsgY29kZS4gQnV0IGl0IGRvZXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleGNsdWRlICYjMzQ7Ym9vdC10aW1lIG9ubHkgaW5pdGlhbGl6YXRpb24uJiMzNDsKClRoZW4sIEkgcmVtZW1iZXIsIHRoZSBrZXkgaGVyZSBpcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIFRoaXMgaXMgYSBuZXcgQVBJLiBCdXQgKmlzKiBpdCB1c2VkIGFueXdoZXJlIGVsc2U/IEl0JiMzOTtzIGNhbGxlZCAqb25seSogaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gTm93IHRoZSBrZXkgaXMsIGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IExldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTE2PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxNzppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjE4OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xOS1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYz0zNTg9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxuLS1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjctXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM6MzY4OmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMzY5LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTE9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MjppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MzojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk0LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU3PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NjU6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Mzc9c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00My0vKipcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjQ0OiAqIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggLSBtYWtlIGEgZGlyZWN0LW1hcCByYW5nZSByZWFkLW9ubHlcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTQ1LSAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTQtICovXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDo1NTpzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC01Ni1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9NzE9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTc3LVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzg6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC03OS0vKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjgwOnN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkcixcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTgxLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04NS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjg2OiNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Ny0jZW5kaWZcbi0tXG5tbS9odWdlX21lbW9yeS5jPTkyMz1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTYwLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6OTYxOlx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTYyLVx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIENvZGUqKgoKT2theSwgc28gdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgbGltaXRlZCB0byBgdGhwX3Nocmlua2VyX2luaXRgLiBTaW5jZSBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoYF9faW5pdGApLCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGR1cmluZyBib290LCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBuby4gRnV6emluZyBnZW5lcmFsbHkgZm9jdXNlcyBvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUsIHRyaWdnZXJlZCBieSBzeXNjYWxscyBvciBvdGhlciBpbnB1dHMuIElmIGEgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGJvb3QsIGEgZnV6emVyIGNhbiYjMzk7dCB0YXJnZXQgaXQuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKmRvZXMqIGludHJvZHVjZSBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIHdoaWNoIGlzIG5ldyBjb2RlIGxvY2F0ZWQgaW4gYm90aCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBOb3cgKnRoYXQqIHNvdW5kcyBsaWtlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEJ1dCB3YWl0Li4uIGFyZSB0aG9zZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSAqb3RoZXIqIHRoYW4gYHRocF9zaHJpbmtlcl9pbml0YD8gTm8sIGl0IGxvb2tzIGxpa2UgdGhleSBhcmUgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHRocF9zaHJpbmtlcl9pbml0YCBhcyB3ZWxsLgoKU28sIGluIGVzc2VuY2UsIHRoZXJlIGFyZSBubyBydW50aW1lLWFjY2Vzc2libGUgZnVuY3Rpb25zIGhlcmUgdGhhdCBhIGZ1enplciBjb3VsZCBkaXJlY3RseSB0cmlnZ2VyLiBJZiBJIHdlcmUgdG8gaW5kaWNhdGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OywgdGhlIHJlYXNvbiB3b3VsZCBiZSB0aGF0IHRoZSBjb2RlIGlzICpvbmx5KiBleGVjdXRlZCBvbmNlIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBub3QgYnkgdGhlIGZ1enplci4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc25lYWt5IGNoYW5nZXMgaGVyZS4gT2theSwgbm9wZSwgaXQmIzM5O3MganVzdCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGl0cyB1c2UgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gSG1tbSwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHJlLXRyaWdnZXIgYHRocF9zaHJpbmtlcl9pbml0YD8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBtb2R1bGVfaW5pdGAgb3IgYSBgc3Vic3lzX2luaXRjYWxsYCBvciBzaW1pbGFyLiBJdOKAmXMgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQgSSBjYW4gcmVhc29uYWJseSBleHBlY3QgdG8gaGFwcGVuIGFmdGVyIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIExldCYjMzk7cyBtb3ZlIG9uIGFuZCB0YWtlIGEgbG9vayBhdCBgbW0vaHVnZV9tZW1vcnkuY2AganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdH1cbiA5MjE6XHQjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG4gOTIyOlx0XG4gOTIzOlx0c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiA5MjQ6XHR7XG4gOTI1Olx0XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxuIDkyNjpcdFx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4gOTI3Olx0XHRcdFx0XHRcdFx0IFNIUklOS0VSX05PTlNMQUIsXG4gOTI4Olx0XHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4gOTI5Olx0XHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIDkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MzE6XHRcbiA5MzI6XHRcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbiA5MzM6XHRcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XG4gOTM0Olx0XHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4gOTM1Olx0XG4gOTM2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKSB7XG4gOTM3Olx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiA5Mzg6XHRcbiA5Mzk6XHRcdFx0LypcbiA5NDA6XHRcdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuIDk0MTpcdFx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbiA5NDI6XHRcdFx0ICpcbiA5NDM6XHRcdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4gOTQ0Olx0XHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbiA5NDU6XHRcdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuIDk0NjpcdFx0XHQgKi9cbiA5NDc6XHRcdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpIHtcbiA5NDg6XHRcdFx0XHRwcl93YXJuKFwmIzM0O0FsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCYjMzQ7KTtcbiA5NDk6XHRcdFx0XHRyZXR1cm4gMDtcbiA5NTA6XHRcdFx0fVxuIDk1MTpcdFxuIDk1MjpcdFx0XHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cbiA5NTM6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxuIDk1NDpcdFx0XHRcdHJldHVybiAwO1xuIDk1NTpcdFxuIDk1NjpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pO1xuIDk1NzpcdFx0XHQvKlxuIDk1ODpcdFx0XHQgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaFxuIDk1OTpcdFx0XHQgKiBhZnRlciB0aGUgcGFnZS10YWJsZSB1cGRhdGUgdG8gaW52YWxpZGF0ZSBzdGFsZSB0cmFuc2xhdGlvbnMuXG4gOTYwOlx0XHRcdCAqL1xuIDk2MTpcdFx0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbiA5NjI6XHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IEhQQUdFX1BNRF9TSVpFKTtcbiA5NjM6XHRcdFx0cmV0dXJuIDA7XG4gOTY0Olx0XHR9XG4gOTY1Olx0XG4gOTY2Olx0XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDt0aHAtemVyb1wmIzM0Oyk7XG4gOTY3Olx0XHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuIDk2ODpcdFx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiA5Njk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzEKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA2MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW52b2x2aW5nIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0JiMzOTtzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleGVjdXRlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIGFkZGVkIGZ1bmN0aW9uLCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSB0aGlzIGNvZGUgcnVucyBvbmx5IGF0IGJvb3QsIGEgZnV6emVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGl0IGRpcmVjdGx5IG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbiBpdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dlciBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIEkgY29uc2lkZXJlZCBpZiB0aGVyZSB3YXMgYW5vdGhlciB0cmlnZ2VyIHBhdGguIE5vcGUuCgpTbywgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmcuIEkgd2FzIGxlYW5pbmcgdG93YXJkcyBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGFzIGl0JiMzOTtzIGJvb3QtdGltZSBjb2RlLiBUaGUgcHJvbXB0IGRvZXMgbGlzdCBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHByb21wdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYm9vdC10aW1lIGNvZGUuIEJ1dCBpZiBJIHNhaWQgYFdvcnRoRnV6emluZzogdHJ1ZWAsIEkmIzM5O2QgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IHdvdWxkIHRob3NlIGJlPyAgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgPyBJdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdDsgdGhlIGZ1enplciBjYW4mIzM5O3QgdGFyZ2V0IGl0LiAgYHRocF9zaHJpbmtlcl9pbml0YD8gU2FtZSBwcm9ibGVtOiBgX19pbml0YCBmdW5jdGlvbnMgYXJlbiYjMzk7dCB0eXBpY2FsbHkgZnV6emVkLgoKVGhpcyBzdHJlbmd0aGVucyBteSBpbmNsaW5hdGlvbiBmb3IgYFdvcnRoRnV6emluZzogZmFsc2VgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiAgSSYjMzk7bGwgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYC4gT2theSwgaXQmIzM5O3MgKm9ubHkqIHVzZWQgd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGJvb3QtdGltZSBvbmx5LgoKVGhlcmVmb3JlLCBteSBkZWNpc2lvbiBpcyAqKmBXb3J0aEZ1enppbmc6IGZhbHNlYCoqLgoKVGhlIHJlYXNvbiBJJiMzOTttIGdpdmluZyBpczogVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgYHRocF9zaHJpbmtlcl9pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gYW5kIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY291bGQgdHJpZ2dlciBvciBtZWFuaW5nZnVsbHkgZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMjI6MTc6MjQuNTYxMDYwMDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NzcwODU0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzoyNC41NjEwNjY2NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTMwNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNiNjAyZGZkNWNlY2RiYjA4ZWJlOWU4NjAwOWYxZTQxYTMyZDgxYzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjI6MTc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xcbmluZGV4IGNlMDM1ZTFiNGVhZjYuLmM1MTIzNmI2MTY1MTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuQEAgLTM2NSw2ICszNjUsMTYgQEAgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKVxcbiBcXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xcbiB9XFxuIFxcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgX19wZ3Byb3QoUFRFX1JET05MWSksXFxuK1xcdFxcdFxcdFxcdCBfX3BncHJvdChQVEVfV1JJVEUpKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gLypcXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxcbmluZGV4IDQzNjJjMjZhYTk5MmQuLmJkMzgxN2UwNjA1MmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXFxuQEAgLTg5LDYgKzg5LDggQEAgaW50IHNldF9wYWdlc19ydyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKTtcXG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGludCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuIGV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBkMDIzYTQwYTFlMDM0Li41OTg3ZjRjODRmNmZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXFxuIFxcdHJldHVybiBfX3NldF9wYWdlc19ucChwYWdlLCBucik7XFxuIH1cXG4gXFxuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0ZW1wYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdHN0cnVjdCBjcGFfZGF0YSBjcGEgPSB7XFxuK1xcdFxcdC52YWRkciA9IFxcdTAwMjZ0ZW1wYWRkcixcXG4rXFx0XFx0LnBnZCA9IE5VTEwsXFxuK1xcdFxcdC5udW1wYWdlcyA9IG5yX3BhZ2VzLFxcbitcXHRcXHQubWFza19zZXQgPSBfX3BncHJvdCgwKSxcXG4rXFx0XFx0Lm1hc2tfY2xyID0gX19wZ3Byb3QoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSksXFxuK1xcdFxcdC5mbGFncyA9IENQQV9OT19DSEVDS19BTElBUyxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0NcXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXFxuQEAgLTQwLDYgKzQwLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxcbisgKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyBzdGFydGluZyBhdCBAYWRkclxcbisgKlxcbisgKiBNYWtlIHRoZSBkaXJlY3QtbWFwIHJhbmdlIHN0YXJ0aW5nIGF0IEBhZGRyIHJlYWQtb25seSB3aXRob3V0IGludmFsaWRhdGluZ1xcbisgKiBUTEJzLiBDYWxsZXJzIG11c3QgZWl0aGVyIGVuc3VyZSB0aGF0IG5vIHN0YWxlIHdyaXRhYmxlIHRyYW5zbGF0aW9ucyBjYW5cXG4rICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIHdoZW4gZGlyZWN0LW1hcCBwZXJtaXNzaW9uIGNoYW5nZXMgYXJlIHVuc3VwcG9ydGVkLFxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNTYsNiArNzQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbiB9XFxuICNkZWZpbmUgY2FuX3NldF9kaXJlY3RfbWFwIGNhbl9zZXRfZGlyZWN0X21hcFxcbiAjZW5kaWZcXG4rXFxuKyNpZm5kZWYgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cXG4rc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG4rI2VuZGlmXFxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggOTcwZTA3NzAxOWI3NS4uMmRmYzdhNDIxOGMzZCAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MCw4ICs0MCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG5AQCAtOTMyLDYgKzkzNCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxcbiBcXHRcXHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cXG5AQCAtOTQwLDggKzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbiBcXHRcXHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXFxuIFxcdFxcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxcbitcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmb2xpbyB3YXMgemVyb2VkIHRocm91Z2ggdGhlIHdyaXRhYmxlIGRpcmVjdCBtYXAuIEZsdXNoXFxuK1xcdFxcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goKHZvaWQgKilhZGRyLCBIUEFHRV9QTURfTlIpO1xcbitcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzoyNC45NjMyNDAzMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDU3NDkwMDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgaW4gYHRocF9zaHJpbmtlcl9pbml0YCwgd2hpY2ggaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjYW4gdHJpZ2dlciBvciBmb2N1cyBvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiNjAyZGZkNWNlY2RiYjA4ZWJlOWU4NjAwOWYxZTQxYTMyZDgxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMjoxNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbmluZGV4IDkwZjYxYjE3Mjc1ZTEuLjcwODMyNjAzMDNjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC0xNCw2ICsxNCw4IEBAIGludCBzZXRfbWVtb3J5X3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfaW52YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfZGVmYXVsdF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpO1xuK2ludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuKyNkZWZpbmUgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXG4gYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBpbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggY2UwMzVlMWI0ZWFmNi4uYzUxMjM2YjYxNjUxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMzY1LDYgKzM2NSwxNiBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gc2V0X21lbW9yeV92YWxpZChhZGRyLCBuciwgdmFsaWQpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdGlmICghY2FuX3NldF9kaXJlY3RfbWFwKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHVwZGF0ZV9yYW5nZV9wcm90KCh1bnNpZ25lZCBsb25nKWFkZHIsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9SRE9OTFkpLFxuK1x0XHRcdFx0IF9fcGdwcm90KFBURV9XUklURSkpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQ1xuIC8qXG4gICogVGhpcyBpcyAtIGFwYXJ0IGZyb20gdGhlIHJldHVybiB2YWx1ZSAtIGRvaW5nIHRoZSBzYW1lXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG5pbmRleCA0MzYyYzI2YWE5OTJkLi5iZDM4MTdlMDYwNTJjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcbkBAIC04OSw2ICs4OSw4IEBAIGludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX2RlZmF1bHRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuIGJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0Li41OTg3ZjRjODRmNmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTI2NjIsNiArMjY2MiwyMSBAQCBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnIsIGJvb2wgdmFsaWQpXG4gXHRyZXR1cm4gX19zZXRfcGFnZXNfbnAocGFnZSwgbnIpO1xuIH1cbiBcbitpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdGVtcGFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuK1x0c3RydWN0IGNwYV9kYXRhIGNwYSA9IHtcbitcdFx0LnZhZGRyID0gXHUwMDI2dGVtcGFkZHIsXG4rXHRcdC5wZ2QgPSBOVUxMLFxuK1x0XHQubnVtcGFnZXMgPSBucl9wYWdlcyxcbitcdFx0Lm1hc2tfc2V0ID0gX19wZ3Byb3QoMCksXG4rXHRcdC5tYXNrX2NsciA9IF9fcGdwcm90KF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpLFxuK1x0XHQuZmxhZ3MgPSBDUEFfTk9fQ0hFQ0tfQUxJQVMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DXG4gdm9pZCBfX2tlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuaW5kZXggMzAzMGQ5MjQ1ZjVhYy4uZTgzY2VkNmEzODI3NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaFxuQEAgLTQwLDYgKzQwLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCAtIG1ha2UgYSBkaXJlY3QtbWFwIHJhbmdlIHJlYWQtb25seVxuKyAqIEBhZGRyOiBzdGFydCBhZGRyZXNzIGluIHRoZSBkaXJlY3QgbWFwXG4rICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgc3RhcnRpbmcgYXQgQGFkZHJcbisgKlxuKyAqIE1ha2UgdGhlIGRpcmVjdC1tYXAgcmFuZ2Ugc3RhcnRpbmcgYXQgQGFkZHIgcmVhZC1vbmx5IHdpdGhvdXQgaW52YWxpZGF0aW5nXG4rICogVExCcy4gQ2FsbGVycyBtdXN0IGVpdGhlciBlbnN1cmUgdGhhdCBubyBzdGFsZSB3cml0YWJsZSB0cmFuc2xhdGlvbnMgY2FuXG4rICogYmUgdXNlZCwgb3IgdHJlYXQgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGFzIGEgYmVzdC1lZmZvcnQgaGFyZGVuaW5nIHN0ZXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciB3aGVuIGRpcmVjdC1tYXAgcGVybWlzc2lvbiBjaGFuZ2VzIGFyZSB1bnN1cHBvcnRlZCxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtNTYsNiArNzQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxuIH1cbiAjZGVmaW5lIGNhbl9zZXRfZGlyZWN0X21hcCBjYW5fc2V0X2RpcmVjdF9tYXBcbiAjZW5kaWZcbitcbisjaWZuZGVmIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcbisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIGdlbmVyaWMgZmFsbGJhY2sgZm9yIHRoZSBfbm9mbHVzaCBjb250cmFjdC4gKi9cbitzdGF0aWMgaW5saW5lIGludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxuKyNlbmRpZlxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA5NzBlMDc3MDE5Yjc1Li4yZGZjN2E0MjE4YzNkIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQwLDggKzQwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuQEAgLTkzMiw2ICs5MzQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcbiBcdFx0ICogaW5pdGlhbGl6ZSB0aGUgc2hyaW5rZXIuXG5AQCAtOTQwLDggKzk0NCwyMiBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0XHQgKiB0aGF0IGdldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG1vc3QgbGlrZWx5IG5vdCBmYWlsIGFzXG4gXHRcdCAqIHRocF9zaHJpbmtlcl9pbml0KCkgaXMgaW52b2tlZCBlYXJseSBvbiBkdXJpbmcgYm9vdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZ2V0X2h1Z2VfemVyb19mb2xpbygpKVxuK1x0XHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xuIFx0XHRcdHByX3dhcm4oXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBIaWdobWVtIGZvbGlvcyBoYXZlIG5vIHBlcm1hbmVudCBkaXJlY3QtbWFwIG1hcHBpbmcgdG8gcHJvdGVjdC4gKi9cbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpZm9saW9fYWRkcmVzcyhodWdlX3plcm9fZm9saW8pO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZm9saW8gd2FzIHplcm9lZCB0aHJvdWdoIHRoZSB3cml0YWJsZSBkaXJlY3QgbWFwLiBGbHVzaFxuK1x0XHQgKiBhZnRlciB0aGUgcGFnZS10YWJsZSB1cGRhdGUgdG8gaW52YWxpZGF0ZSBzdGFsZSB0cmFuc2xhdGlvbnMuXG4rXHRcdCAqL1xuK1x0XHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcbitcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICsgSFBBR0VfUE1EX1NJWkUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjI0Ljk2MzI0MTc2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzk5ODUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbnRyb2R1Y2luZyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAsIHdoaWNoIGlzIGJlaW5nIHVzZWQgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgbWVtb3J5IHByb3RlY3Rpb24g4oCTIG1ha2luZyB0aGUgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGhhcHBlbnMgZHVyaW5nIGJvb3QsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYHRocF9zaHJpbmtlcl9pbml0YCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImlzIGZ1enppbmcgZXZlbiBhcHBsaWNhYmxlIGhlcmU/XCIuIEZ1enppbmcgZ2VuZXJhbGx5IHRhcmdldHMgcnVudGltZSBiZWhhdmlvcnMsIHN5c2NhbGxzLCB0aGluZ3MgdGhhdCBhcmUgY29uc3RhbnRseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXN0ZW0uIFRoaXMsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhIG9uZS10aW1lIHRoaW5nIHRoYXQgcnVucyBkdXJpbmcgYm9vdC4gU28sIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIOKAkyBpcyBgdGhwX3Nocmlua2VyX2luaXRgICpvbmx5KiB1c2VkIGhlcmU/IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB5ZXMsIHdpdGhpbiAqdGhpcyogcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IHVzZWQgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gQnV0IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cbk9rYXksIEknbSBub3cgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGB0aHBfc2hyaW5rZXJfaW5pdGAgY2FsbCBpcyBpbmRlZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gVGhlIG5ldyBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBoYXMgYmVlbiBhZGRlZCB0byBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgaXQncyB1c2VkIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhlIHVzYWdlIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyB3aXRoaW4gYW4gYGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpYCBibG9jay5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYWN0dWFsbHkgKmlzKi4gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbGwgdXNlIG15IGdyZXBwZXIgdG9vbCB0byBnZXQgdGhlIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozMi4xMDMyMjg5MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODY2OTUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzE9Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG4tLVxcbm1tL0tjb25maWctNzczLVxcbm1tL0tjb25maWc6Nzc0OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctNzc1LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozMy44NjE5MDQwMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1OTE2MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBjb25maWd1cmF0aW9uIHNwYWNlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIHRoZSBtYWluIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDc3NC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGEga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZSwgYXMgdGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBsYWNlIGZvciByZWxhdGVkIHRvcGljcy4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBvcHRpb25zLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCBnZW1zIGxpZSB3aXRoaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozNi45Njc4MjI4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFxuIDc3MTpcXHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbiA3NzI6XFx0XFx0ZGVmX2Jvb2wgblxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gNzc1OlxcdFxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbiA3NzY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA3Nzc6XFx0XFx0aGVscFxcbiA3Nzg6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXFxuIDc3OTpcXHRcXHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcXG4gNzgwOlxcdFxcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXFxuIDc4MTpcXHRcXHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxcbiA3ODQ6XFx0XFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJ3Mgd29ydGggb2YgbWVtb3J5IHNoYWxsXFxuIDc4NTpcXHRcXHQgIGJlIHVzZWQuXFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXFxuIDc4ODpcXHRcXHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cXG4gNzg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzozNi45Njc5MjY2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzE0MzcwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaDogV29ydGggdGhlIEVmZm9ydD8qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIHRoZSBodWdlIHplcm8gZm9saW8gcmVhZC1vbmx5IGluIHRoZSBkaXJlY3QgbWFwLiBUaGlzIGlzIGNsZWFybHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgYWltZWQgYXQgcHJldmVudGluZyBhY2NpZGVudGFsIHdyaXRlcyBhbmQgdGh1cywgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSByZXBlYXRlZGx5IHJlYWNoYWJsZSwgd2hpY2ggd291bGQgbWFrZSBpdCBmdXp6YWJsZT9cblxuVGhlIHBhdGNoIGFkZHMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBhbmQgdGhlIHdheSBpdCdzIHVzZWQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY2FsbGVkIG9uY2UgZHVyaW5nIGJvb3QuIElmIHRoYXQncyB0aGUgY2FzZSwgZnV6emluZyBzZWVtcyBsZXNzIGltcGFjdGZ1bCwgc2luY2UgaXQncyBqdXN0IGEgcGVybWlzc2lvbiBjaGFuZ2UgdGhhdCBvY2N1cnMgYmVmb3JlIHRoZSBmdXp6ZXIgZXZlbiBoYXMgYSBjaGFuY2UgdG8gcnVuLiBJdCdzIGVzc2VudGlhbGx5IGluaXRpYWxpemluZyBzb21ldGhpbmcuXG5cbkhvd2V2ZXIuLi4gaWYgdGhpcyByZWFkLW9ubHkgc2V0dGluZyBjYXRjaGVzIGFueSBhY2NpZGVudGFsIHdyaXRlcywgdGhhdCAqaXMqIGEgaGFyZGVuaW5nIGZlYXR1cmUgdGhhdCB0aGUgZnV6emVyIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBieSB0cmlnZ2VyaW5nIHRob3NlIHdyaXRlcy4gSWYgdGhlIGZ1enplciBjYW4gdHJpZ2dlciB3cml0ZXMgdG8gdGhpcyBmb2xpbywgYW5kIHRoZSBrZXJuZWwgd291bGQgcGFuaWMgYXMgYSByZXN1bHQsIHRoYXQgKmlzKiBhIGJ1ZyB0aGUgZnV6emVyIGNvdWxkIGV4cG9zZS5cblxuVGhlIHByb2JsZW0gaXMsIHRoaXMgcGF0Y2ggKmlzKiBqdXN0IHRoZSBpbml0aWFsaXphdGlvbiBpdHNlbGYuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYm9vdC10aW1lIG5hdHVyZSBvZiB0aGlzIGNvZGUgbWFrZSBpdCB3b3J0aCBmdXp6aW5nP1xuXG5JIHJlY2FsbCB0aGUgY2hlY2sgZm9yIFwiV29ydGhGdXp6aW5nXCIuIEl0IGxpc3RzIHNjZW5hcmlvcyB3aGVyZSB3ZSAqc2hvdWxkbid0KiBmdXp6LCB0aGluZ3MgbGlrZSBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiwgXCJQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzXCIsIFwiRG9jdW1lbnRhdGlvbiBtb2RpZmljYXRpb25zXCIsIFwiQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50c1wiLCBvciBcIi5yZW1vdmVcIiBjb2RlLiBCdXQgaXQgZG9lc24ndCAqZXhwbGljaXRseSogZXhjbHVkZSBcImJvb3QtdGltZSBvbmx5IGluaXRpYWxpemF0aW9uLlwiXG5cblRoZW4sIEkgcmVtZW1iZXIsIHRoZSBrZXkgaGVyZSBpcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIFRoaXMgaXMgYSBuZXcgQVBJLiBCdXQgKmlzKiBpdCB1c2VkIGFueXdoZXJlIGVsc2U/IEl0J3MgY2FsbGVkICpvbmx5KiBpbiBgdGhwX3Nocmlua2VyX2luaXRgLiBOb3cgdGhlIGtleSBpcywgaXMgYHRocF9zaHJpbmtlcl9pbml0YCBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdD8gTGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzo0My42ODIyOTk5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkwMTYxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9MTY9aW50IHNldF9kaXJlY3RfbWFwX3ZhbGlkX25vZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yLCBib29sIHZhbGlkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxNzppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxODojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTE5LWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuLS1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MzU4PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjctXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjM2ODppbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0zNjkte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkxPWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjkyOmludCBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5MzojZGVmaW5lIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC05NC1ib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU3PWludCBzZXRfZGlyZWN0X21hcF92YWxpZF9ub2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBuciwgYm9vbCB2YWxpZClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NjU6aW50IHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2goY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9Mzc9c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfdmFsaWRfbm9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTQzLS8qKlxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjQ0OiAqIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2ggLSBtYWtlIGEgZGlyZWN0LW1hcCByYW5nZSByZWFkLW9ubHlcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC00NS0gKiBAYWRkcjogc3RhcnQgYWRkcmVzcyBpbiB0aGUgZGlyZWN0IG1hcFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNTQtICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6NTU6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTU2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9NzE9c3RhdGljIGlubGluZSBib29sIGNhbl9zZXRfZGlyZWN0X21hcCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzctXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6Nzg6I2lmbmRlZiBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtNzktLyogU2VlIHRoZSBjb21tZW50IGFib3ZlIHRoZSBnZW5lcmljIGZhbGxiYWNrIGZvciB0aGUgX25vZmx1c2ggY29udHJhY3QuICovXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODA6c3RhdGljIGlubGluZSBpbnQgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaChjb25zdCB2b2lkICphZGRyLFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTgxLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtODUtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6ODY6I2RlZmluZSBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoIHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC04Ny0jZW5kaWZcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTIzPXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk2MC1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjk2MTpcXHRcXHRzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoKCh2b2lkICopYWRkciwgSFBBR0VfUE1EX05SKTtcXG5tbS9odWdlX21lbW9yeS5jLTk2Mi1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjQ1LjQ3MjQ2NjcyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDg3ODY3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIENvZGUqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBsaW1pdGVkIHRvIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNpbmNlIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGBfX2luaXRgKSwgaXQncyBvbmx5IGNhbGxlZCBvbmNlIGR1cmluZyBib290LCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBuby4gRnV6emluZyBnZW5lcmFsbHkgZm9jdXNlcyBvbiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUsIHRyaWdnZXJlZCBieSBzeXNjYWxscyBvciBvdGhlciBpbnB1dHMuIElmIGEgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGJvb3QsIGEgZnV6emVyIGNhbid0IHRhcmdldCBpdC5cblxuSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCB3aGljaCBpcyBuZXcgY29kZSBsb2NhdGVkIGluIGJvdGggYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gTm93ICp0aGF0KiBzb3VuZHMgbGlrZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBCdXQgd2FpdC4uLiBhcmUgdGhvc2UgY2FsbGVkIGZyb20gYW55d2hlcmUgKm90aGVyKiB0aGFuIGB0aHBfc2hyaW5rZXJfaW5pdGA/IE5vLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAgYXMgd2VsbC5cblxuU28sIGluIGVzc2VuY2UsIHRoZXJlIGFyZSBubyBydW50aW1lLWFjY2Vzc2libGUgZnVuY3Rpb25zIGhlcmUgdGhhdCBhIGZ1enplciBjb3VsZCBkaXJlY3RseSB0cmlnZ2VyLiBJZiBJIHdlcmUgdG8gaW5kaWNhdGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiwgdGhlIHJlYXNvbiB3b3VsZCBiZSB0aGF0IHRoZSBjb2RlIGlzICpvbmx5KiBleGVjdXRlZCBvbmNlIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBub3QgYnkgdGhlIGZ1enplci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHNuZWFreSBjaGFuZ2VzIGhlcmUuIE9rYXksIG5vcGUsIGl0J3MganVzdCBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIGl0cyB1c2UgaW4gYHRocF9zaHJpbmtlcl9pbml0YC4gSG1tbSwgaXMgdGhlcmUgKmFueSogd2F5IHRvIHJlLXRyaWdnZXIgYHRocF9zaHJpbmtlcl9pbml0YD8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCdzIGEgYG1vZHVsZV9pbml0YCBvciBhIGBzdWJzeXNfaW5pdGNhbGxgIG9yIHNpbWlsYXIuIEl04oCZcyBkZWZpbml0ZWx5IG5vdCBzb21ldGhpbmcgdGhhdCBJIGNhbiByZWFzb25hYmx5IGV4cGVjdCB0byBoYXBwZW4gYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBzZXF1ZW5jZS4gTGV0J3MgbW92ZSBvbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMjoxNzo1MS44ODEyNTYxODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdH1cXG4gOTIxOlxcdCNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG4gOTIyOlxcdFxcbiA5MjM6XFx0c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4gOTI0OlxcdHtcXG4gOTI1OlxcdFxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XFxuIDkyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX05PTlNMQUIsXFxuIDkyODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbiA5Mjk6XFx0XFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcXG4gOTMwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X2NvdW50O1xcbiA5MzM6XFx0XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxuIDkzNDpcXHRcXHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4gOTM3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gOTM4OlxcdFxcbiA5Mzk6XFx0XFx0XFx0LypcXG4gOTQwOlxcdFxcdFxcdCAqIEJ1bXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaHVnZV96ZXJvX2ZvbGlvIGFuZCBkbyBub3RcXG4gOTQxOlxcdFxcdFxcdCAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLlxcbiA5NDI6XFx0XFx0XFx0ICpcXG4gOTQzOlxcdFxcdFxcdCAqIGh1Z2VfemVyb19mb2xpbyB3aWxsIGFsd2F5cyBiZSBOVUxMIG9uIGZhaWx1cmUuIFdlIGFzc3VtZVxcbiA5NDQ6XFx0XFx0XFx0ICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhc1xcbiA5NDU6XFx0XFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxcbiA5NDY6XFx0XFx0XFx0ICovXFxuIDk0NzpcXHRcXHRcXHRpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkge1xcbiA5NDg6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXFxcblxcXCIpO1xcbiA5NDk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk1MDpcXHRcXHRcXHR9XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdFxcdC8qIEhpZ2htZW0gZm9saW9zIGhhdmUgbm8gcGVybWFuZW50IGRpcmVjdC1tYXAgbWFwcGluZyB0byBwcm90ZWN0LiAqL1xcbiA5NTM6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaGlnaG1lbShodWdlX3plcm9fZm9saW8pKVxcbiA5NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylmb2xpb19hZGRyZXNzKGh1Z2VfemVyb19mb2xpbyk7XFxuIDk1NzpcXHRcXHRcXHQvKlxcbiA5NTg6XFx0XFx0XFx0ICogVGhlIGZvbGlvIHdhcyB6ZXJvZWQgdGhyb3VnaCB0aGUgd3JpdGFibGUgZGlyZWN0IG1hcC4gRmx1c2hcXG4gOTU5OlxcdFxcdFxcdCAqIGFmdGVyIHRoZSBwYWdlLXRhYmxlIHVwZGF0ZSB0byBpbnZhbGlkYXRlIHN0YWxlIHRyYW5zbGF0aW9ucy5cXG4gOTYwOlxcdFxcdFxcdCAqL1xcbiA5NjE6XFx0XFx0XFx0c2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaCgodm9pZCAqKWFkZHIsIEhQQUdFX1BNRF9OUik7XFxuIDk2MjpcXHRcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBIUEFHRV9QTURfU0laRSk7XFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTY0OlxcdFxcdH1cXG4gOTY1OlxcdFxcbiA5NjY6XFx0XFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuIDk2NzpcXHRcXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbiA5Njg6XFx0XFx0XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxuIDk2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjI6MTc6NTEuODgxNzg0NjcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTYzMjYzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW52b2x2aW5nIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0J3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgZXhlY3V0ZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoZSBhZGRlZCBmdW5jdGlvbiwgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgdGhwX3Nocmlua2VyX2luaXRgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhpcyBjb2RlIHJ1bnMgb25seSBhdCBib290LCBhIGZ1enplciB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIGl0IGRpcmVjdGx5IG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbiBpdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYW55IG90aGVyIHdheSB0byB0cmlnZ2VyIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYC4gSSBjb25zaWRlcmVkIGlmIHRoZXJlIHdhcyBhbm90aGVyIHRyaWdnZXIgcGF0aC4gTm9wZS5cblxuU28sIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB3b3J0aCBmdXp6aW5nLiBJIHdhcyBsZWFuaW5nIHRvd2FyZHMgYFdvcnRoRnV6emluZzogZmFsc2VgLCBhcyBpdCdzIGJvb3QtdGltZSBjb2RlLiBUaGUgcHJvbXB0IGRvZXMgbGlzdCBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHByb21wdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBib290LXRpbWUgY29kZS4gQnV0IGlmIEkgc2FpZCBgV29ydGhGdXp6aW5nOiB0cnVlYCwgSSdkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCB3b3VsZCB0aG9zZSBiZT8gIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYD8gSXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgYm9vdDsgdGhlIGZ1enplciBjYW4ndCB0YXJnZXQgaXQuICBgdGhwX3Nocmlua2VyX2luaXRgPyBTYW1lIHByb2JsZW06IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmVuJ3QgdHlwaWNhbGx5IGZ1enplZC5cblxuVGhpcyBzdHJlbmd0aGVucyBteSBpbmNsaW5hdGlvbiBmb3IgYFdvcnRoRnV6emluZzogZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuICBJJ2xsIGdyZXAgdGhlIGNvZGViYXNlIGZvciBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAuIE9rYXksIGl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGB0aHBfc2hyaW5rZXJfaW5pdGAuIFNvLCBpdCdzIGRlZmluaXRlbHkgYm9vdC10aW1lIG9ubHkuXG5cblRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgKipgV29ydGhGdXp6aW5nOiBmYWxzZWAqKi5cblxuVGhlIHJlYXNvbiBJJ20gZ2l2aW5nIGlzOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X2RpcmVjdF9tYXBfcm9fbm9mbHVzaGAgYW5kIHVzZXMgaXQgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBgdGhwX3Nocmlua2VyX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlcmUgYXJlIG5vIHJ1bnRpbWUtcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBhIGZ1enplciBjb3VsZCB0cmlnZ2VyIG9yIG1lYW5pbmdmdWxseSBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMSwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIyOjE3OjU5LjUzODExMzg2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9kaXJlY3RfbWFwX3JvX25vZmx1c2hgIGFuZCB1c2VzIGl0IGV4Y2x1c2l2ZWx5IGluIGB0aHBfc2hyaW5rZXJfaW5pdGAsIHdoaWNoIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QuIFRoZXJlIGFyZSBubyBydW50aW1lLXJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgYSBmdXp6ZXIgY2FuIHRyaWdnZXIgb3IgZm9jdXMgb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzZXRfZGlyZWN0X21hcF9yb19ub2ZsdXNoYCBhbmQgdXNlcyBpdCBleGNsdXNpdmVseSBpbiBgdGhwX3Nocmlua2VyX2luaXRgLCB3aGljaCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290LiBUaGVyZSBhcmUgbm8gcnVudGltZS1yZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IGEgZnV6emVyIGNhbiB0cmlnZ2VyIG9yIGZvY3VzIG9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjgr8p[1] Phase: Running StartedAt: 2026-07-31 22:18:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjgr8p[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 22:18:11 +0000 UTC FinishedAt: 2026-07-31 22:18: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,}