Name: series-workflowqglzn Phase: Failed StartedAt: 2026-07-17 22:35:44 +0000 UTC FinishedAt: 2026-07-17 22:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqglzn[0] Phase: Succeeded StartedAt: 2026-07-17 22:35:44 +0000 UTC FinishedAt: 2026-07-17 22:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqglzn[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 22:35:44 +0000 UTC FinishedAt: 2026-07-17 22:51:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uYzQwMzlkMmIyNGE0YmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbkBAIC0yNDgsMTIgJiM0MzsyNDgsMjggQEAgaW50IGlhdmZfc2VuZF92Zl9wdHBfY2Fwc19tc2coc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiAvKipcbiAgKiBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXNcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcbiYjNDM7ICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlXG4gICpcbi0gKiBWYWxpZGF0ZSB0aGF0IHRoZSBudW1iZXIgb2YgcXVldWVzIHRoZSBQRiBoYXMgc2VudCBpblxuLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLlxuJiM0MzsgKiBWYWxpZGF0ZSB0aGUgVklSVENITkxfT1BfR0VUX1ZGX1JFU09VUkNFUyByZXNwb25zZSBmcm9tIHRoZSBQRi4gRW5zdXJlXG4mIzQzOyAqIG51bV92c2lzIGRvZXMgbm90IGV4Y2VlZCB3aGF0IHRoZSBtZXNzYWdlIGxlbmd0aCBjYW4gY292ZXIsIGFuZCBjYXBcbiYjNDM7ICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLlxuICAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiYjNDM7c3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBtc2dsZW4pXG4ge1xuJiM0MztcdHUxNiBtYXhfdnNpcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1zZ2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92Zl9yZXNvdXJjZSkpXG4mIzQzO1x0XHRtYXhfdnNpcyA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWF4X3ZzaXMgPSAobXNnbGVuIC0gc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92Zl9yZXNvdXJjZSkpIC9cbiYjNDM7XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRhcHRlci1cdTAwM2V2Zl9yZXMtXHUwMDNlbnVtX3ZzaXMgXHUwMDNlIG1heF92c2lzKSB7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSZWNlaXZlZCAlZCBWU0lzLCBidXQgbWVzc2FnZSBjYW4gb25seSBjb3ZlciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGFkYXB0ZXItXHUwMDNldmZfcmVzLVx1MDAzZW51bV92c2lzLCBtYXhfdnNpcyk7XG4mIzQzO1x0XHRhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyA9IG1heF92c2lzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoYWRhcHRlci1cdTAwM2V2Zl9yZXMtXHUwMDNlbnVtX3F1ZXVlX3BhaXJzIFx1MDAzZSBJQVZGX01BWF9SRVFfUVVFVUVTKSB7XG4gXHRcdHN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UgKnZzaV9yZXM7XG4gXHRcdGludCBpO1xuQEAgLTMwMCw3ICYjNDM7MzE2LDcgQEAgaW50IGlhdmZfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0ICogd2UgYXJlbiYjMzk7dCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlc1xuIFx0ICovXG4gXHRpZiAoIWVycilcbi1cdFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIpO1xuJiM0MztcdFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihldmVudC5tc2dfbGVuLCBsZW4pKTtcbiBcdGlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKGh3LCBhZGFwdGVyLVx1MDAzZXZmX3Jlcyk7XG4gXG4gXHRrZnJlZShldmVudC5tc2dfYnVmKTtcbkBAIC0yNTc4LDcgJiM0MzsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcbiBcbiBcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNldmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpO1xuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4mIzQzO1x0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKG1zZ2xlbiwgbGVuKSk7XG4gXHRcdGlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIGFkYXB0ZXItXHUwMDNldmZfcmVzKTtcbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyKSkge1xuIFx0XHRcdC8qIHJlc3RvcmUgY3VycmVudCBtYWMgYWRkcmVzcyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZjcyYmIxYWE0MDY3NDEuLmZjOTFiNjY2NWY5MDVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbkBAIC03NjcsNiAmIzQzOzc2Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfaXNfdHh0aW1lX2VuYShjb25zdCBzdHJ1Y3QgaWNlX3R4X3JpbmcgKnJpbmcpXG4gXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy1cdTAwM2V2c2k7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFxuJiM0MztcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHJldHVybiB0ZXN0X2JpdChyaW5nLVx1MDAzZXFfaW5kZXgsICBwZi1cdTAwM2V0eHRpbWVfdHhxcyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5pbmRleCBlZjFjZTEwNmY4MWI1ZS4uNTM5NzRlYmFhZmZhMDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMTc2Miw2ICYjNDM7MTc2Miw3IEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX2NtZF9kZXNjIGRlc2MgPSB7MH07XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3NxX2NkIGNkID0ge307XG4gXHR1MTYgbXNnX2xlbjtcbiBcdGludCBzdGF0dXM7XG4gXG5AQCAtMTc3NCwxOSAmIzQzOzE3NzUsMzMgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpXG4gXHRtc2cubXNnX2FkZHJfbG93ID0gY3B1X3RvX2xlMTYoaW4tXHUwMDNlbXNnX2FkZHJfbG93KTtcbiBcdG1zZy5tc2dfYWRkcl9oaWdoID0gY3B1X3RvX2xlMzIoaW4tXHUwMDNlbXNnX2FkZHJfaGlnaCk7XG4gXG4tXHRpZiAoaW4tXHUwMDNlb3Bjb2RlKVxuJiM0MztcdHN3aXRjaCAoaW4tXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBpY2Vfc2JxX21zZ193cl9wOlxuJiM0MztcdGNhc2UgaWNlX3NicV9tc2dfd3JfbnA6XG4gXHRcdG1zZy5kYXRhID0gY3B1X3RvX2xlMzIoaW4tXHUwMDNlZGF0YSk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi9cbiYjNDM7XHRcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0U4MTApXG4mIzQzO1x0XHRcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBpY2Vfc2JxX21zZ19yZDpcbiBcdFx0LyogZGF0YSByZWFkIGNvbWVzIGJhY2sgaW4gY29tcGxldGlvbiwgc28gc2hvcnRlbiB0aGUgc3RydWN0IGJ5XG4gXHRcdCAqIHNpemVvZihtc2cuZGF0YSlcbiBcdFx0ICovXG4gXHRcdG1zZ19sZW4gLT0gc2l6ZW9mKG1zZy5kYXRhKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEU4MTAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb3N0ZWQgbW9kZSwgYWx3YXlzIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbiYjNDM7XHRjZC5wb3N0ZWQgPSBpbi1cdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBody1cdTAwM2VtYWNfdHlwZSAhPSBJQ0VfTUFDX0U4MTA7XG4gXG4gXHRkZXNjLmZsYWdzID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFx0ZGVzYy5vcGNvZGUgPSBjcHVfdG9fbGUxNihpY2Vfc2JxX29wY19uZWlnaF9kZXZfcmVxKTtcbiBcdGRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTtcbi1cdHN0YXR1cyA9IGljZV9zYnFfc2VuZF9jbWQoaHcsIFx1MDAyNmRlc2MsIFx1MDAyNm1zZywgbXNnX2xlbiwgTlVMTCk7XG4tXHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgIWluLVx1MDAzZW9wY29kZSlcbiYjNDM7XHRzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBcdTAwMjZtc2csIG1zZ19sZW4sIFx1MDAyNmNkKTtcbiYjNDM7XHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgaW4tXHUwMDNlb3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKVxuIFx0XHRpbi1cdTAwM2VkYXRhID0gbGUzMl90b19jcHVcbiBcdFx0XHQoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKVx1MDAyNm1zZyktXHUwMDNlZGF0YSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTY1NDcsNyAmIzQzOzY1NjIsNyBAQCBpbnQgaWNlX3dyaXRlX2NndV9yZWcoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBjZ3VfbXNnID0ge1xuIFx0XHQuZGVzdF9kZXYgPSBpY2VfZ2V0X2Rlc3RfY2d1KGh3KSxcbi1cdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLFxuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX25wLFxuIFx0XHQubXNnX2FkZHJfbG93ID0gYWRkcixcbiBcdFx0LmRhdGEgPSB2YWxcbiBcdH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXG5pbmRleCBkY2I4MzdjYWRkMTgyNS4uYTYwMDhkYzc3ZmE0MzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xuQEAgLTEwODYsNiAmIzQzOzEwODYsMTAgQEAgaWNlX3NxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxLFxuIFx0d3IzMihodywgY3EtXHUwMDNlc3EudGFpbCwgY3EtXHUwMDNlc3EubmV4dF90b191c2UpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbiYjNDM7XHQvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbiYjMzk7dCB3YWl0IGZvciBjb21wbGV0aW9uLiAqL1xuJiM0MztcdGlmIChjZCBcdTAwMjZcdTAwMjYgY2QtXHUwMDNlcG9zdGVkKVxuJiM0MztcdFx0Z290byBzcV9zZW5kX2NvbW1hbmRfZXJyb3I7XG4mIzQzO1xuIFx0LyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUuIElmIGl0IGZpbmlzaGVzIHdpdGhpbiB0aGVcbiBcdCAqIHRpbWVvdXQsIGNvcHkgdGhlIGRlc2NyaXB0b3IgYmFjayB0byB0ZW1wLlxuIFx0ICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXG5pbmRleCA3ODgwNDBkZDY2MmUyMy4uYzUwZDZmY2JhY2JhNTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxuQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XG4gLyogc3EgdHJhbnNhY3Rpb24gZGV0YWlscyAqL1xuIHN0cnVjdCBpY2Vfc3FfY2Qge1xuIFx0c3RydWN0IGxpYmllX2FxX2Rlc2MgKndiX2Rlc2M7XG4mIzQzO1x0dTggcG9zdGVkIDogMTtcbiB9O1xuIFxuIC8qIHJxIGV2ZW50IGluZm9ybWF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuaW5kZXggYzMwZTI3YmJmZTZlMjUuLmIwNjllNmM1MTRmYjEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtNTEyLDkgJiM0Mzs1MTIsNiBAQCBpbnQgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2ZilcbiBcdHN0cnVjdCBpY2VfcmVwciAqcmVwcjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRyZXByID0gaWNlX3JlcHJfY3JlYXRlX3ZmKHZmKTtcbiBcdGlmIChJU19FUlIocmVwcikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJlcHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGFnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG5pbmRleCAzMTBlOGZlMjkyNWM3ZC4uMDhhMTdkZWQwYWQ1NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG5AQCAtMjYyMyw3ICYjNDM7MjYyMyw3IEBAIGludCBpY2VfaW5pdF9sYWcoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGdvdG8gIGZyZWVfbHBvcnRfcmVzO1xuIFxuIFx0LyogYXNzb2NpYXRlIHJlY2lwZXMgdG8gcHJvZmlsZXMgKi9cbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9QUk9GSURfSVBWNl9HVFBVX0lQVjZfVENQX0lOTkVSOyBuJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBpY2VfYXFfZ2V0X3JlY2lwZV90b19wcm9maWxlKFx1MDAyNnBmLVx1MDAzZWh3LCBuLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNnJlY2lwZV9iaXRzLCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5NzguLmZjOWQ0ZTBmYTc1NTg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTE0MTUsNiAmIzQzOzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxuJiM0MztcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0XHRXUklURV9PTkNFKHZzaS1cdTAwM2V0eF9yaW5nc1tpXSwgcmluZyk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjhiNDM5ZTIxN2UwMmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQ5MSw5ICYjNDM7MzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRORVRJRl9GX1JYSEFTSDtcbiBcbiBcdGNzdW1vX2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU1cdCAgfFxuLVx0XHRcdCBORVRJRl9GX0lQX0NTVU0gIHxcbiBcdFx0XHQgTkVUSUZfRl9TQ1RQX0NSQyB8XG4tXHRcdFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xuJiM0MztcdFx0XHQgTkVUSUZfRl9IV19DU1VNO1xuIFxuIFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuIFx0XHRcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxuQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0LyogQWxsb3cgY29yZSB0byBtYW5hZ2UgSVJRcyBhZmZpbml0eSAqL1xuIFx0bmV0aWZfc2V0X2FmZmluaXR5X2F1dG8obmV0ZGV2KTtcbiBcbi1cdC8qIE11dHVhbCBleGNsdXNpdml0eSBmb3IgVFNPIGFuZCBHQ1MgaXMgZW5mb3JjZWQgYnkgdGhlIHNldCBmZWF0dXJlc1xuLVx0ICogbmRvIGNhbGxiYWNrLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxuLVx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNO1xuLVxuIFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpO1xuIH1cbiBcbkBAIC02NTAwLDE4ICYjNDM7NjQ5Myw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbiBcdFx0cmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XG4gXG4tXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXG4tXHQgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2IChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9BTExfVFNPKSkpIHtcbi1cdFx0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCYjMzQ7KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuaW5kZXggZjhlNjk2MzBmYjcyNjcuLjNlZGU0YzFhNWE4YTViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuQEAgLTIzNjgsNiAmIzQzOzIzNjgsOSBAQCBpbnQgaWNlX3BhcnNlcl9wcm9maWxlX2luaXQoc3RydWN0IGljZV9wYXJzZXJfcmVzdWx0ICpyc2x0LFxuIFx0dTE2IHByb3RvX29mZiA9IDA7XG4gXHR1MTYgb2ZmO1xuIFxuJiM0MztcdGlmIChyc2x0LVx1MDAzZXB0eXBlIFx1MDAzZT0gSUNFX0ZMT1dfUFRZUEVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bWVtc2V0KHByb2YsIDAsIHNpemVvZigqcHJvZikpO1xuIFx0c2V0X2JpdChyc2x0LVx1MDAzZXB0eXBlLCBwcm9mLVx1MDAzZXB0eXBlcyk7XG4gXHRpZiAoYmxrID09IElDRV9CTEtfU1cpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWMzZDg5ZDhkNGQzNDUuLmVhZWMzNmFiNmFlM2YzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuQEAgLTM0Niw3ICYjNDM7MzQ2LDcgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGljZV9wdHBfZXh0ZW5kXzMyYl90cyhwZi1cdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lLFxuJiM0MztcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUpLFxuIFx0XHRcdFx0ICAgICAoaW5fdHN0YW1wIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgbWFzayk7XG4gfVxuIFxuQEAgLTMwMzcsNiAmIzQzOzMwMzcsMTEgQEAgdm9pZCBpY2VfcHRwX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHB0cC1cdTAwM2VzdGF0ZSA9PSBJQ0VfUFRQX1VOSU5JVCkge1xuJiM0MztcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UFRQIHdhcyBub3QgaW5pdGlhbGl6ZWQsIHNraXBwaW5nIHJlYnVpbGRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHRwLVx1MDAzZXN0YXRlID09IElDRV9QVFBfUkVBRFkpIHtcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XG4gXHR9IGVsc2UgaWYgKHB0cC1cdTAwM2VzdGF0ZSAhPSBJQ0VfUFRQX1JFU0VUVElORykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjMy4uYzYwNDkwOTdmNDlkNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtMzUyLDYgJiM0MzszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuJiM0MztcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4mIzQzO1x0XHQuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCxcbiYjNDM7XHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEZsdXNoIFNCUSB0byBlbnN1cmUgcG9zdGVkIHdyaXRlcyBjb21wbGV0ZSBiZWZvcmUgU1lOQyBjb21tYW5kLlxuJiM0MztcdCAqIFNraXAgZm9yIEU4MTAgLSBGVyBhbHdheXMgc2VuZHMgY29tcGxldGlvbnMsIHNvIHdyaXRlcyBhcmUgc3luY2hyb25vdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGh3LVx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMCkge1xuJiM0MztcdFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXCYjMzQ7RmFpbGVkIHRvIGZsdXNoIFNCUTogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4gXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbkBAIC00NDIsNyAmIzQzOzQ1Niw3IEBAIHN0YXRpYyBpbnQgaWNlX3dyaXRlX3BoeV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4gXHRcdC5kZXN0X2RldiA9IGljZV9wdHBfZ2V0X2Rlc3RfZGV2X2U4MjUoaHcsIHBvcnQpLFxuLVx0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXG4mIzQzO1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksXG4gXHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiBcdFx0LmRhdGEgPSB2YWxcbkBAIC0yNjE0LDE2ICYjNDM7MjYyOCwxOCBAQCBpY2VfcmVhZF82NGJfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgbG93X2FkZHIsIHU2NCAqdmFsKVxuICAqIEB2YWw6IFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXJcbiAgKlxuICAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIGZvciB0aGUgZ2l2ZW4gcG9ydCBvdmVyIHRoZSBkZXZpY2Ugc2lkZWJhbmQgcXVldWUuXG4mIzQzOyAqIFVzZXMgcG9zdGVkIHdyaXRlcyAtIHJlcXVpcmVzIFNCUSBmbHVzaCBiZWZvcmUgU1lOQ19FWEVDX0NNRC5cbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX3dyaXRlX3BoeV9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwgdTMyIHZhbClcbiB7XG4tXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gezB9O1xuJiM0MztcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4mIzQzO1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiYjNDM7XHRcdC5kYXRhID0gdmFsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcG9ydCwgb2Zmc2V0KTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuIFxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjgxMSwxNiAmIzQzOzI4MjcsMTYgQEAgaWNlX3JlYWRfcXVhZF9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcXVhZCwgdTE2IG9mZnNldCwgdTMyICp2YWwpXG4gaW50XG4gaWNlX3dyaXRlX3F1YWRfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHF1YWQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXG4ge1xuLVx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4mIzQzO1x0XHQuZGF0YSA9IHZhbFxuJiM0MztcdH07XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgXHUwMDI2bXNnLCBxdWFkLCBvZmZzZXQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuLVxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNDUxNCwxOCAmIzQzOzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbClcbiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFBIWVxuICAqXG4gICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLlxuJiM0MzsgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbi1cdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XG4mIzQzO1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbiYjNDM7XHRcdC5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wLFxuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4mIzQzO1x0XHQubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKSxcbiYjNDM7XHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiYjNDM7XHRcdC5kYXRhID0gdmFsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4tXHRtc2cubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKTtcbi1cdG1zZy5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wO1xuLVx0bXNnLmRhdGEgPSB2YWw7XG4tXG4gXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXHUwMDI2bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byBQSFksIGVyciAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBlbnVtIGljZV9zYnFfZGV2X2lkIHtcbiBcbiBlbnVtIGljZV9zYnFfbXNnX29wY29kZSB7XG4gXHRpY2Vfc2JxX21zZ19yZFx0XHQ9IDB4MDAsXG4tXHRpY2Vfc2JxX21zZ193clx0XHQ9IDB4MDEsXG4mIzQzO1x0aWNlX3NicV9tc2dfd3JfcFx0PSAweDAxLFxuIFx0aWNlX3NicV9tc2dfd3JfbnBcdD0gMHgwMlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTQ4NCwxMiAmIzQzOzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0Z290byB0ZWFyZG93bjtcbiBcdFx0fVxuIFxuLVx0XHRyZXR2YWwgPSBpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbi1cdFx0aWYgKHJldHZhbCkge1xuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcJiMzNDssXG4tXHRcdFx0XHR2Zi1cdTAwM2V2Zl9pZCwgcmV0dmFsKTtcbi1cdFx0XHRpY2VfdmZfdnNpX3JlbGVhc2UodmYpO1xuLVx0XHRcdGdvdG8gdGVhcmRvd247XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKSB7XG4mIzQzO1x0XHRcdHJldHZhbCA9IGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuJiM0MztcdFx0XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHZmLVx1MDAzZXZmX2lkLCByZXR2YWwpO1xuJiM0MztcdFx0XHRcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XG4mIzQzO1x0XHRcdFx0Z290byB0ZWFyZG93bjtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHNldF9iaXQoSUNFX1ZGX1NUQVRFX0lOSVQsIHZmLVx1MDAzZXZmX3N0YXRlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggNGNhMWEwNjAyMzA3ZDAuLmIyMDYzYTU0ZDZkODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTY1NCw3ICYjNDM7MTY1NCw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbiBcdFx0XHRyZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZsNF9wcm90bywgXHUwMDI2ZnJhZ19vZmYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBkZWZpbmUgb3V0ZXIgdHJhbnNwb3J0ICovXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdFx0cmV0dXJuIC0xO1xuLVxuLVx0XHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XG4gXHRcdH1cbiBcbiBcdFx0LyogY29tcHV0ZSBvdXRlciBMMyBoZWFkZXIgc2l6ZSAqL1xuQEAgLTE3MzYsMTQgJiM0MzsxNzMyLDE0IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbiBcdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLVx1MDAzZWRhdGEsIFx1MDAyNmw0X3Byb3RvLFxuIFx0XHRcdFx0XHQgXHUwMDI2ZnJhZ19vZmYpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdH1cbiBcbiBcdC8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi9cbiBcdGwzX2xlbiA9IGw0LmhkciAtIGlwLmhkcjtcbiBcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXHUwMDNjXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xuIFxuLVx0aWYgKCh0eF9yaW5nLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAodGVzdF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCB0eF9yaW5nLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX2NzdW1faXNfc2N0cChza2IpKSB7XG4gXHRcdC8qIFNldCBHQ1MgKi9cbkBAIC0xNzg5LDE1ICYjNDM7MTc4NSwxNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdHJldHVybiAtMTtcbi1cdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xuIFx0fVxuIFxuIFx0b2ZmLVx1MDAzZXRkX2NtZCB8PSBjbWQ7XG4gXHRvZmYtXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcbiBcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7Y2hlY2tzdW1fc3dfZmI6XG4mIzQzO1x0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBza2JfY2hlY2tzdW1faGVscChza2IpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG5pbmRleCA1ZTUxN2YyMTkzNzk4Zi4uMTVkYmQ1MTAwOTEyNTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcbkBAIC0yMTcsNiAmIzQzOzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMixcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcbiYjNDM7XHRJQ0VfVFhfUklOR19GTEFHU19HQ1MsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5pbmRleCAyN2U0YWNiMTYyMGYwYy4uOTA1MmU3MWU5Yzk5ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCB2b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHR9XG4gXHRcdGljZV92Zl9wb3N0X3ZzaV9yZWJ1aWxkKHZmKTtcbiBcbi1cdFx0aWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxuJiM0MztcdFx0XHRpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXG5pbmRleCBiZTY2ZjliMmUxMDFjYS4uZGM1YWQ3ODRmNDU2ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcbkBAIC0zNTU1LDcgJiM0MzszNTU1LDYgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXG4gXHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKGFkYXB0ZXItXHUwMDNlcGRldiwgaWRwZl9nZXRfbWF4X3ZmcyhhZGFwdGVyKSk7XG4gXHRudW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7XG4tXHRhZGFwdGVyLVx1MDAzZW1heF92cG9ydHMgPSBudW1fbWF4X3Zwb3J0cztcbiBcdGFkYXB0ZXItXHUwMDNldnBvcnRzID0ga3phbGxvY19vYmpzKCphZGFwdGVyLVx1MDAzZXZwb3J0cywgbnVtX21heF92cG9ydHMpO1xuIFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZwb3J0cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzU3Niw2ICYjNDM7MzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0Z290byBlcnJfbmV0ZGV2X2FsbG9jO1xuIFx0fVxuIFxuJiM0MztcdC8qIFNldCBtYXhfdnBvcnRzIG9ubHkgYWZ0ZXIgdnBvcnRzLCBuZXRkZXZzIGFuZCB2cG9ydF9jb25maWcgYnVmZmVyc1xuJiM0MztcdCAqIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSBzdXJlIG1heF92cG9ydCBib3VuZCBsb29wcyBkb24mIzM5O3QgZW5kIHVwXG4mIzQzO1x0ICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LlxuJiM0MztcdCAqL1xuJiM0MztcdGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xuJiM0MztcbiBcdC8qIFN0YXJ0IHRoZSBtYWlsYm94IHRhc2sgYmVmb3JlIHJlcXVlc3RpbmcgdmVjdG9ycy4gVGhpcyB3aWxsIGVuc3VyZVxuIFx0ICogdmVjdG9yIGluZm9ybWF0aW9uIHJlc3BvbnNlIGZyb20gbWFpbGJveCBpcyBoYW5kbGVkXG4gXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGlhdmYsIGljZSwgaWRwZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgZG8gbm90IGhhdmUgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgbWFraW5nIHRoZW0gaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMKaW5kZXggZWMyMzRjYzhiZDlkYjAuLmM0MDM5ZDJiMjRhNGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwpAQCAtMjQ4LDEyICYjNDM7MjQ4LDI4IEBAIGludCBpYXZmX3NlbmRfdmZfcHRwX2NhcHNfbXNnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAvKioKICAqIGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcwogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiYjNDM7ICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlCiAgKgotICogVmFsaWRhdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGUgUEYgaGFzIHNlbnQgaW4KLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLgomIzQzOyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmUKJiM0MzsgKiBudW1fdnNpcyBkb2VzIG5vdCBleGNlZWQgd2hhdCB0aGUgbWVzc2FnZSBsZW5ndGggY2FuIGNvdmVyLCBhbmQgY2FwCiYjNDM7ICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLgogICoqLwotc3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiYjNDM7c3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBtc2dsZW4pCiB7CiYjNDM7CXUxNiBtYXhfdnNpczsKJiM0MzsKJiM0MzsJaWYgKG1zZ2xlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdmZfcmVzb3VyY2UpKQomIzQzOwkJbWF4X3ZzaXMgPSAwOwomIzQzOwllbHNlCiYjNDM7CQltYXhfdnNpcyA9IChtc2dsZW4gLSBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSkgLwomIzQzOwkJCSAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTsKJiM0MzsKJiM0MzsJaWYgKGFkYXB0ZXItJmd0O3ZmX3Jlcy0mZ3Q7bnVtX3ZzaXMgJmd0OyBtYXhfdnNpcykgewomIzQzOwkJZGV2X2luZm8oJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7UmVjZWl2ZWQgJWQgVlNJcywgYnV0IG1lc3NhZ2UgY2FuIG9ubHkgY292ZXIgJWRcbiYjMzQ7LAomIzQzOwkJCSBhZGFwdGVyLSZndDt2Zl9yZXMtJmd0O251bV92c2lzLCBtYXhfdnNpcyk7CiYjNDM7CQlhZGFwdGVyLSZndDt2Zl9yZXMtJmd0O251bV92c2lzID0gbWF4X3ZzaXM7CiYjNDM7CX0KJiM0MzsKIAlpZiAoYWRhcHRlci0mZ3Q7dmZfcmVzLSZndDtudW1fcXVldWVfcGFpcnMgJmd0OyBJQVZGX01BWF9SRVFfUVVFVUVTKSB7CiAJCXN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UgKnZzaV9yZXM7CiAJCWludCBpOwpAQCAtMzAwLDcgJiM0MzszMTYsNyBAQCBpbnQgaWF2Zl9nZXRfdmZfY29uZmlnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAJICogd2UgYXJlbiYjMzk7dCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlcwogCSAqLwogCWlmICghZXJyKQotCQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7CiYjNDM7CQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKGV2ZW50Lm1zZ19sZW4sIGxlbikpOwogCWlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKGh3LCBhZGFwdGVyLSZndDt2Zl9yZXMpOwogCiAJa2ZyZWUoZXZlbnQubXNnX2J1Zik7CkBAIC0yNTc4LDcgJiM0MzsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJdTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTsKIAogCQltZW1jcHkoYWRhcHRlci0mZ3Q7dmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpOwotCQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7CiYjNDM7CQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKG1zZ2xlbiwgbGVuKSk7CiAJCWlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKCZhbXA7YWRhcHRlci0mZ3Q7aHcsIGFkYXB0ZXItJmd0O3ZmX3Jlcyk7CiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIpKSB7CiAJCQkvKiByZXN0b3JlIGN1cnJlbnQgbWFjIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKQEAgLTc2Nyw2ICYjNDM7NzY3LDkgQEAgc3RhdGljIGlubGluZSBib29sIGljZV9pc190eHRpbWVfZW5hKGNvbnN0IHN0cnVjdCBpY2VfdHhfcmluZyAqcmluZykKIAlzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy0mZ3Q7dnNpOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwogCiYjNDM7CWlmICh2c2ktJmd0O3R5cGUgIT0gSUNFX1ZTSV9QRikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlyZXR1cm4gdGVzdF9iaXQocmluZy0mZ3Q7cV9pbmRleCwgIHBmLSZndDt0eHRpbWVfdHhxcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCmluZGV4IGVmMWNlMTA2ZjgxYjVlLi41Mzk3NGViYWFmZmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCkBAIC0xNzYyLDYgJiM0MzsxNzYyLDcgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IGljZV9zYnFfY21kX2Rlc2MgZGVzYyA9IHswfTsKIAlzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTsKJiM0MzsJc3RydWN0IGljZV9zcV9jZCBjZCA9IHt9OwogCXUxNiBtc2dfbGVuOwogCWludCBzdGF0dXM7CiAKQEAgLTE3NzQsMTkgJiM0MzsxNzc1LDMzIEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKQogCW1zZy5tc2dfYWRkcl9sb3cgPSBjcHVfdG9fbGUxNihpbi0mZ3Q7bXNnX2FkZHJfbG93KTsKIAltc2cubXNnX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKGluLSZndDttc2dfYWRkcl9oaWdoKTsKIAotCWlmIChpbi0mZ3Q7b3Bjb2RlKQomIzQzOwlzd2l0Y2ggKGluLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBpY2Vfc2JxX21zZ193cl9wOgomIzQzOwljYXNlIGljZV9zYnFfbXNnX3dyX25wOgogCQltc2cuZGF0YSA9IGNwdV90b19sZTMyKGluLSZndDtkYXRhKTsKLQllbHNlCiYjNDM7CQkvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi8KJiM0MzsJCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODEwKQomIzQzOwkJCW1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaWNlX3NicV9tc2dfcmQ6CiAJCS8qIGRhdGEgcmVhZCBjb21lcyBiYWNrIGluIGNvbXBsZXRpb24sIHNvIHNob3J0ZW4gdGhlIHN0cnVjdCBieQogCQkgKiBzaXplb2YobXNnLmRhdGEpCiAJCSAqLwogCQltc2dfbGVuIC09IHNpemVvZihtc2cuZGF0YSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEU4MTAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb3N0ZWQgbW9kZSwgYWx3YXlzIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJY2QucG9zdGVkID0gaW4tJmd0O29wY29kZSA9PSBpY2Vfc2JxX21zZ193cl9wICZhbXA7JmFtcDsKJiM0MzsJCSAgICBody0mZ3Q7bWFjX3R5cGUgIT0gSUNFX01BQ19FODEwOwogCiAJZGVzYy5mbGFncyA9IGNwdV90b19sZTE2KGZsYWdzKTsKIAlkZXNjLm9wY29kZSA9IGNwdV90b19sZTE2KGljZV9zYnFfb3BjX25laWdoX2Rldl9yZXEpOwogCWRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTsKLQlzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCAmYW1wO2Rlc2MsICZhbXA7bXNnLCBtc2dfbGVuLCBOVUxMKTsKLQlpZiAoIXN0YXR1cyAmYW1wOyZhbXA7ICFpbi0mZ3Q7b3Bjb2RlKQomIzQzOwlzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCAmYW1wO2Rlc2MsICZhbXA7bXNnLCBtc2dfbGVuLCAmYW1wO2NkKTsKJiM0MzsJaWYgKCFzdGF0dXMgJmFtcDsmYW1wOyBpbi0mZ3Q7b3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKQogCQlpbi0mZ3Q7ZGF0YSA9IGxlMzJfdG9fY3B1CiAJCQkoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKSZhbXA7bXNnKS0mZ3Q7ZGF0YSk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTY1NDcsNyAmIzQzOzY1NjIsNyBAQCBpbnQgaWNlX3dyaXRlX2NndV9yZWcoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKQogewogCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBjZ3VfbXNnID0gewogCQkuZGVzdF9kZXYgPSBpY2VfZ2V0X2Rlc3RfY2d1KGh3KSwKLQkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLAomIzQzOwkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX25wLAogCQkubXNnX2FkZHJfbG93ID0gYWRkciwKIAkJLmRhdGEgPSB2YWwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jCmluZGV4IGRjYjgzN2NhZGQxODI1Li5hNjAwOGRjNzdmYTQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYwpAQCAtMTA4Niw2ICYjNDM7MTA4NiwxMCBAQCBpY2Vfc3Ffc2VuZF9jbWQoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EsCiAJd3IzMihodywgY3EtJmd0O3NxLnRhaWwsIGNxLSZndDtzcS5uZXh0X3RvX3VzZSk7CiAJaWNlX2ZsdXNoKGh3KTsKIAomIzQzOwkvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbiYjMzk7dCB3YWl0IGZvciBjb21wbGV0aW9uLiAqLwomIzQzOwlpZiAoY2QgJmFtcDsmYW1wOyBjZC0mZ3Q7cG9zdGVkKQomIzQzOwkJZ290byBzcV9zZW5kX2NvbW1hbmRfZXJyb3I7CiYjNDM7CiAJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUuIElmIGl0IGZpbmlzaGVzIHdpdGhpbiB0aGUKIAkgKiB0aW1lb3V0LCBjb3B5IHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8gdGVtcC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaAppbmRleCA3ODgwNDBkZDY2MmUyMy4uYzUwZDZmY2JhY2JhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmgKQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7CiAvKiBzcSB0cmFuc2FjdGlvbiBkZXRhaWxzICovCiBzdHJ1Y3QgaWNlX3NxX2NkIHsKIAlzdHJ1Y3QgbGliaWVfYXFfZGVzYyAqd2JfZGVzYzsKJiM0MzsJdTggcG9zdGVkIDogMTsKIH07CiAKIC8qIHJxIGV2ZW50IGluZm9ybWF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCmluZGV4IGMzMGUyN2JiZmU2ZTI1Li5iMDY5ZTZjNTE0ZmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKQEAgLTUxMiw5ICYjNDM7NTEyLDYgQEAgaW50IGljZV9lc3dpdGNoX2F0dGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpCiAJc3RydWN0IGljZV9yZXByICpyZXByOwogCWludCBlcnI7CiAKLQlpZiAoIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXByID0gaWNlX3JlcHJfY3JlYXRlX3ZmKHZmKTsKIAlpZiAoSVNfRVJSKHJlcHIpKQogCQlyZXR1cm4gUFRSX0VSUihyZXByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGFnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jCmluZGV4IDMxMGU4ZmUyOTI1YzdkLi4wOGExN2RlZDBhZDU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jCkBAIC0yNjIzLDcgJiM0MzsyNjIzLDcgQEAgaW50IGljZV9pbml0X2xhZyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJZ290byAgZnJlZV9scG9ydF9yZXM7CiAKIAkvKiBhc3NvY2lhdGUgcmVjaXBlcyB0byBwcm9maWxlcyAqLwotCWZvciAobiA9IDA7IG4gJmx0OyBJQ0VfUFJPRklEX0lQVjZfR1RQVV9JUFY2X1RDUF9JTk5FUjsgbiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChuID0gMDsgbiAmbHQ7IElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuJiM0MzsmIzQzOykgewogCQllcnIgPSBpY2VfYXFfZ2V0X3JlY2lwZV90b19wcm9maWxlKCZhbXA7cGYtJmd0O2h3LCBuLAogCQkJCQkJICAgJmFtcDtyZWNpcGVfYml0cywgTlVMTCk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwppbmRleCA4Y2RjNGZkYTg5ZTk3OC4uZmM5ZDRlMGZhNzU1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwpAQCAtMTQxNSw2ICYjNDM7MTQxNSwxMCBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2NfcmluZ3Moc3RydWN0IGljZV92c2kgKnZzaSkKIAkJCXNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsIHJpbmctJmd0O2ZsYWdzKTsKIAkJZWxzZQogCQkJc2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwgcmluZy0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwkJaWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSkKJiM0MzsJCQlzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCQlXUklURV9PTkNFKHZzaS0mZ3Q7dHhfcmluZ3NbaV0sIHJpbmcpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0zNDkxLDkgJiM0MzszNDkxLDggQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQkJTkVUSUZfRl9SWEhBU0g7CiAKIAljc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNCSAgfAotCQkJIE5FVElGX0ZfSVBfQ1NVTSAgfAogCQkJIE5FVElGX0ZfU0NUUF9DUkMgfAotCQkJIE5FVElGX0ZfSVBWNl9DU1VNOwomIzQzOwkJCSBORVRJRl9GX0hXX0NTVU07CiAKIAl2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8CiAJCQkgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHwKQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCS8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi8KIAluZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpOwogCi0JLyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzCi0JICogbmRvIGNhbGxiYWNrLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpCi0JCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCiAJbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpOwogfQogCkBAIC02NTAwLDE4ICYjNDM7NjQ5Myw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAJaWYgKGNoYW5nZWQgJmFtcDsgTkVUSUZfRl9MT09QQkFDSykKIAkJcmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spKTsKIAotCS8qIER1ZSB0byBFODMwIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBUU08gKE5FVElGX0ZfQUxMX1RTTykgd2l0aCBHQ1MKLQkgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykgJmFtcDsmYW1wOwotCSAgICAoKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfQ1NVTSkgJmFtcDsmYW1wOyAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9BTExfVFNPKSkpIHsKLQkJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19DU1VNKQotCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUbyBlbmFibGUgVFNPLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIEhXIGNoZWNrc3VtLlxuJiMzNDspOwotCQllbHNlCi0JCQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXG4mIzM0Oyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jCmluZGV4IGY4ZTY5NjMwZmI3MjY3Li4zZWRlNGMxYTVhOGE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jCkBAIC0yMzY4LDYgJiM0MzsyMzY4LDkgQEAgaW50IGljZV9wYXJzZXJfcHJvZmlsZV9pbml0KHN0cnVjdCBpY2VfcGFyc2VyX3Jlc3VsdCAqcnNsdCwKIAl1MTYgcHJvdG9fb2ZmID0gMDsKIAl1MTYgb2ZmOwogCiYjNDM7CWlmIChyc2x0LSZndDtwdHlwZSAmZ3Q7PSBJQ0VfRkxPV19QVFlQRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAltZW1zZXQocHJvZiwgMCwgc2l6ZW9mKCpwcm9mKSk7CiAJc2V0X2JpdChyc2x0LSZndDtwdHlwZSwgcHJvZi0mZ3Q7cHR5cGVzKTsKIAlpZiAoYmxrID09IElDRV9CTEtfU1cpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVjM2Q4OWQ4ZDRkMzQ1Li5lYWVjMzZhYjZhZTNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCkBAIC0zNDYsNyAmIzQzOzM0Niw3IEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gaWNlX3B0cF9leHRlbmRfMzJiX3RzKHBmLSZndDtwdHAuY2FjaGVkX3BoY190aW1lLAomIzQzOwlyZXR1cm4gaWNlX3B0cF9leHRlbmRfMzJiX3RzKFJFQURfT05DRShwZi0mZ3Q7cHRwLmNhY2hlZF9waGNfdGltZSksCiAJCQkJICAgICAoaW5fdHN0YW1wICZndDsmZ3Q7IDgpICZhbXA7IG1hc2spOwogfQogCkBAIC0zMDM3LDYgJiM0MzszMDM3LDExIEBAIHZvaWQgaWNlX3B0cF9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHB0cC0mZ3Q7c3RhdGUgPT0gSUNFX1BUUF9VTklOSVQpIHsKJiM0MzsJCWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7UFRQIHdhcyBub3QgaW5pdGlhbGl6ZWQsIHNraXBwaW5nIHJlYnVpbGRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmIChwdHAtJmd0O3N0YXRlID09IElDRV9QVFBfUkVBRFkpIHsKIAkJaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7CiAJfSBlbHNlIGlmIChwdHAtJmd0O3N0YXRlICE9IElDRV9QVFBfUkVTRVRUSU5HKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwppbmRleCA4ZTVmOTc4MzU5NTRjMy4uYzYwNDkwOTdmNDlkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtMzUyLDYgJiM0MzszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZCkKIHN0YXRpYyB2b2lkIGljZV9wdHBfZXhlY190bXJfY21kKHN0cnVjdCBpY2VfaHcgKmh3KQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCwKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogRmx1c2ggU0JRIHRvIGVuc3VyZSBwb3N0ZWQgd3JpdGVzIGNvbXBsZXRlIGJlZm9yZSBTWU5DIGNvbW1hbmQuCiYjNDM7CSAqIFNraXAgZm9yIEU4MTAgLSBGVyBhbHdheXMgc2VuZHMgY29tcGxldGlvbnMsIHNvIHdyaXRlcyBhcmUgc3luY2hyb25vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hY190eXBlICE9IElDRV9NQUNfRTgxMCkgewomIzQzOwkJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksICYjMzQ7RmFpbGVkIHRvIGZsdXNoIFNCUTogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwl9CiAKIAlpZiAoIWljZV9pc19wcmltYXJ5KGh3KSkKIAkJaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpOwpAQCAtNDQyLDcgJiM0Mzs0NTYsNyBAQCBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gewogCQkuZGVzdF9kZXYgPSBpY2VfcHRwX2dldF9kZXN0X2Rldl9lODI1KGh3LCBwb3J0KSwKLQkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLAomIzQzOwkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsCiAJCS5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLAogCQkubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksCiAJCS5kYXRhID0gdmFsCkBAIC0yNjE0LDE2ICYjNDM7MjYyOCwxOCBAQCBpY2VfcmVhZF82NGJfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgbG93X2FkZHIsIHU2NCAqdmFsKQogICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlcgogICoKICAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIGZvciB0aGUgZ2l2ZW4gcG9ydCBvdmVyIHRoZSBkZXZpY2Ugc2lkZWJhbmQgcXVldWUuCiYjNDM7ICogVXNlcyBwb3N0ZWQgd3JpdGVzIC0gcmVxdWlyZXMgU0JRIGZsdXNoIGJlZm9yZSBTWU5DX0VYRUNfQ01ELgogICovCiBzdGF0aWMgaW50CiBpY2Vfd3JpdGVfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQogewotCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCwKJiM0MzsJCS5kYXRhID0gdmFsCiYjNDM7CX07CiAJaW50IGVycjsKIAogCWljZV9maWxsX3BoeV9tc2dfZTgyeChodywgJmFtcDttc2csIHBvcnQsIG9mZnNldCk7Ci0JbXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyOwotCW1zZy5kYXRhID0gdmFsOwogCiAJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKIAlpZiAoZXJyKSB7CkBAIC0yODExLDE2ICYjNDM7MjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbCkKIGludAogaWNlX3dyaXRlX3F1YWRfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHF1YWQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTsKJiM0MzsJc3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHsKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLAomIzQzOwkJLmRhdGEgPSB2YWwKJiM0MzsJfTsKIAlpbnQgZXJyOwogCiAJZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgJmFtcDttc2csIHF1YWQsIG9mZnNldCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjsKLQltc2cuZGF0YSA9IHZhbDsKLQogCWVyciA9IGljZV9zYnFfcndfcmVnKGh3LCAmYW1wO21zZywgTElCSUVfQVFfRkxBR19SRCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcbiYjMzQ7LApAQCAtNDUxNCwxOCAmIzQzOzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbCkKICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgUEhZCiAgKgogICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLgomIzQzOyAqIEU4MTAgRlcgc2VuZHMgY29tcGxldGlvbnMgZm9yIG9wY29kZSAweDAxLCBtYWtpbmcgd3JpdGVzIHN5bmNocm9ub3VzLgogICovCiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKQogewotCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCwKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLAomIzQzOwkJLm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksCiYjNDM7CQkubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksCiYjNDM7CQkuZGF0YSA9IHZhbAomIzQzOwl9OwogCWludCBlcnI7CiAKLQltc2cubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKTsKLQltc2cubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkcik7Ci0JbXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyOwotCW1zZy5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wOwotCW1zZy5kYXRhID0gdmFsOwotCiAJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKIAlpZiAoZXJyKSB7CiAJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byBQSFksIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oCmluZGV4IDIyNjI0M2QzMjk2ODY1Li5lZWRjZDI0ODFhNTk0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmgKQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQgewogCiBlbnVtIGljZV9zYnFfbXNnX29wY29kZSB7CiAJaWNlX3NicV9tc2dfcmQJCT0gMHgwMCwKLQlpY2Vfc2JxX21zZ193cgkJPSAweDAxLAomIzQzOwlpY2Vfc2JxX21zZ193cl9wCT0gMHgwMSwKIAlpY2Vfc2JxX21zZ193cl9ucAk9IDB4MDIKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwppbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKQEAgLTQ4NCwxMiAmIzQzOzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlnb3RvIHRlYXJkb3duOwogCQl9CiAKLQkJcmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZCYjMzQ7LAotCQkJCXZmLSZndDt2Zl9pZCwgcmV0dmFsKTsKLQkJCWljZV92Zl92c2lfcmVsZWFzZSh2Zik7Ci0JCQlnb3RvIHRlYXJkb3duOwomIzQzOwkJaWYgKGljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkgewomIzQzOwkJCXJldHZhbCA9IGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpOwomIzQzOwkJCWlmIChyZXR2YWwpIHsKJiM0MzsJCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtGYWlsZWQgdG8gYXR0YWNoIFZGICVkIHRvIGVzd2l0Y2gsIGVycm9yICVkJiMzNDssCiYjNDM7CQkJCQl2Zi0mZ3Q7dmZfaWQsIHJldHZhbCk7CiYjNDM7CQkJCWljZV92Zl92c2lfcmVsZWFzZSh2Zik7CiYjNDM7CQkJCWdvdG8gdGVhcmRvd247CiYjNDM7CQkJfQogCQl9CiAKIAkJc2V0X2JpdChJQ0VfVkZfU1RBVEVfSU5JVCwgdmYtJmd0O3ZmX3N0YXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jCmluZGV4IDRjYTFhMDYwMjMwN2QwLi5iMjA2M2E1NGQ2ZDgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKQEAgLTE2NTQsNyAmIzQzOzE2NTQsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpCiAJCQlyZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLSZndDtkYXRhLAogCQkJCQkgICAgICAgJmFtcDtsNF9wcm90bywgJmFtcDtmcmFnX29mZik7CiAJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJCWdvdG8gY2hlY2tzdW1fc3dfZmI7CiAJCX0KIAogCQkvKiBkZWZpbmUgb3V0ZXIgdHJhbnNwb3J0ICovCkBAIC0xNjczLDExICYjNDM7MTY3Myw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJCWw0LmhkciA9IHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcihza2IpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlza2JfY2hlY2tzdW1faGVscChza2IpOwotCQkJcmV0dXJuIDA7CiYjNDM7CQkJZ290byBjaGVja3N1bV9zd19mYjsKIAkJfQogCiAJCS8qIGNvbXB1dGUgb3V0ZXIgTDMgaGVhZGVyIHNpemUgKi8KQEAgLTE3MzYsMTQgJiM0MzsxNzMyLDE0IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItJmd0O2RhdGEsICZhbXA7bDRfcHJvdG8sCiAJCQkJCSAmYW1wO2ZyYWdfb2ZmKTsKIAl9IGVsc2UgewotCQlyZXR1cm4gLTE7CiYjNDM7CQlnb3RvIGNoZWNrc3VtX3N3X2ZiOwogCX0KIAogCS8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi8KIAlsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7CiAJb2Zmc2V0IHw9IChsM19sZW4gLyA0KSAmbHQ7Jmx0OyBJQ0VfVFhfREVTQ19MRU5fSVBMRU5fUzsKIAotCWlmICgodHhfcmluZy0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0NTVU0pICZhbXA7JmFtcDsKJiM0MzsJaWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKIAkgICAgIShmaXJzdC0mZ3Q7dHhfZmxhZ3MgJmFtcDsgSUNFX1RYX0ZMQUdTX1RTTykgJmFtcDsmYW1wOwogCSAgICAhc2tiX2NzdW1faXNfc2N0cChza2IpKSB7CiAJCS8qIFNldCBHQ1MgKi8KQEAgLTE3ODksMTUgJiM0MzsxNzg1LDE3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCi0JCQlyZXR1cm4gLTE7Ci0JCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7Ci0JCXJldHVybiAwOwomIzQzOwkJZ290byBjaGVja3N1bV9zd19mYjsKIAl9CiAKIAlvZmYtJmd0O3RkX2NtZCB8PSBjbWQ7CiAJb2ZmLSZndDt0ZF9vZmZzZXQgfD0gb2Zmc2V0OwogCXJldHVybiAxOwomIzQzOwomIzQzO2NoZWNrc3VtX3N3X2ZiOgomIzQzOwlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBza2JfY2hlY2tzdW1faGVscChza2IpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmgKaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaApAQCAtMjE3LDYgJiM0MzsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHsKIAlJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwKIAlJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwKIAlJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsCiYjNDM7CUlDRV9UWF9SSU5HX0ZMQUdTX0dDUywKIAlJQ0VfVFhfUklOR19GTEFHU19OQklUUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCmluZGV4IDI3ZTRhY2IxNjIwZjBjLi45MDUyZTcxZTljOTllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCkBAIC04MTIsNyAmIzQzOzgxMiw4IEBAIHZvaWQgaWNlX3Jlc2V0X2FsbF92ZnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCX0KIAkJaWNlX3ZmX3Bvc3RfdnNpX3JlYnVpbGQodmYpOwogCi0JCWljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpOwomIzQzOwkJaWYgKGljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkKJiM0MzsJCQlpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTsKIAogCQltdXRleF91bmxvY2soJmFtcDt2Zi0mZ3Q7Y2ZnX2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMKaW5kZXggYmU2NmY5YjJlMTAxY2EuLmRjNWFkNzg0ZjQ1NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYwpAQCAtMzU1NSw3ICYjNDM7MzU1NSw2IEBAIGludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKQogCiAJcGNpX3NyaW92X3NldF90b3RhbHZmcyhhZGFwdGVyLSZndDtwZGV2LCBpZHBmX2dldF9tYXhfdmZzKGFkYXB0ZXIpKTsKIAludW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7Ci0JYWRhcHRlci0mZ3Q7bWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzOwogCWFkYXB0ZXItJmd0O3Zwb3J0cyA9IGt6YWxsb2Nfb2JqcygqYWRhcHRlci0mZ3Q7dnBvcnRzLCBudW1fbWF4X3Zwb3J0cyk7CiAJaWYgKCFhZGFwdGVyLSZndDt2cG9ydHMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzU3Niw2ICYjNDM7MzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcikKIAkJZ290byBlcnJfbmV0ZGV2X2FsbG9jOwogCX0KIAomIzQzOwkvKiBTZXQgbWF4X3Zwb3J0cyBvbmx5IGFmdGVyIHZwb3J0cywgbmV0ZGV2cyBhbmQgdnBvcnRfY29uZmlnIGJ1ZmZlcnMKJiM0MzsJICogYXJlIGFsbG9jYXRlZCB0byBtYWtlIHN1cmUgbWF4X3Zwb3J0IGJvdW5kIGxvb3BzIGRvbiYjMzk7dCBlbmQgdXAKJiM0MzsJICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LgomIzQzOwkgKi8KJiM0MzsJYWRhcHRlci0mZ3Q7bWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzOwomIzQzOwogCS8qIFN0YXJ0IHRoZSBtYWlsYm94IHRhc2sgYmVmb3JlIHJlcXVlc3RpbmcgdmVjdG9ycy4gVGhpcyB3aWxsIGVuc3VyZQogCSAqIHZlY3RvciBpbmZvcm1hdGlvbiByZXNwb25zZSBmcm9tIG1haWxib3ggaXMgaGFuZGxlZAogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzMgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzOiBgaWF2ZmAsIGBpY2VgLCBhbmQgYGlkcGZgLiBJIHNlZSBhIHNlcmllcyBvZiBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBzbyBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZW0gbWV0aG9kaWNhbGx5LgoKRmlyc3QsIGluIGBpYXZmX3ZpcnRjaG5sLmNgLCB0aGVyZSYjMzk7cyBlbmhhbmNlZCB2YWxpZGF0aW9uIGluIGBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXNgLiBJdCBub3cgY29uc2lkZXJzIHRoZSBtZXNzYWdlIGxlbmd0aCAoYG1zZ2xlbmApIHdoZW4gdmFsaWRhdGluZyB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgZnVuY3Rpb25zLCB3aGljaCBpcyBnb29kIGZvciByb2J1c3RuZXNzLiBUaGUgdXNlIG9mIGBtaW4obXNnbGVuLCBsZW4pYCBpbiBgaWF2Zl9nZXRfdmZfY29uZmlnYCBhbmQgYGlhdmZfdmlydGNobmxfY29tcGxldGlvbmAgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCBtZXNzYWdlcyBncmFjZWZ1bGx5LgoKTmV4dCwgaW4gYGljZS5oYCwgdGhlIGNoZWNrIGluIGBpY2VfaXNfdHh0aW1lX2VuYWAgc2VlbXMgdG8gYmUgZmlsdGVyaW5nIGZvciBzcGVjaWZpYyBWU0kgdHlwZXMsIGxpa2VseSBvcHRpbWl6aW5nIHRoZSB0cmFuc21pdCB0aW1lIGVuYWJsZSBsb2dpYy4KCmBpY2VfY29tbW9uLmNgIHNob3dzIGNoYW5nZXMgdG8gYGljZV9zYnFfcndfcmVnYCwgd2hpY2ggaGFuZGxlcyBTeXN0ZW0gQnVzIFF1ZXVlIChTQlEpIG1lc3NhZ2Ugd3JpdGVzIGFuZCByZWFkcywgd2l0aCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvc3RlZCBhbmQgbm9uLXBvc3RlZCB3cml0ZXMuIFRoZSB1c2Ugb2YgYGljZV9zYnFfbXNnX3dyX25wYCBpbiBgaWNlX3dyaXRlX2NndV9yZWdgIHN1Z2dlc3RzIGFuIG9wdGltaXphdGlvbiBpbiByZWdpc3RlciBhY2Nlc3MuIFRoZSBjaGFuZ2VzIHRvIGBpY2VfY29udHJvbHEuY2AgYW5kIGBpY2VfY29udHJvbHEuaGAgcmVnYXJkaW5nIHBvc3RlZCBtZXNzYWdlcyBpbiBgaWNlX3NxX3NlbmRfY21kYCBhcmUgaW50ZXJlc3Rpbmc7IG5vdCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlLCBidXQgcmVxdWlyZXMgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uCgpOb3csIGEgY291cGxlIG9mIGNoYW5nZXMgaW4gYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX3ZmX2xpYi5jYCBzdGFuZCBvdXQuIFRoZSByZW1vdmFsIG9mIHRoZSBgaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpYCBjaGVjayBpbiBgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmYCBhbmQgYGljZV9yZXNldF9hbGxfdmZzYCBoaW50cyB0aGF0IHRoZXkgYXJlIGdlbmVyYWxpemluZyBlc3dpdGNoIGF0dGFjaCBsb2dpYy4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGluIHRoZSBjb250ZXh0IG9mIGVzd2l0Y2ggbW9kZS4gQW5kIHNpbWlsYXJseSBmb3IgYGljZV9zcmlvdi5jYCwgYSBjaGVjayBmb3IgZXN3aXRjaCBtb2RlIGhhcyBiZWVuIGFkZGVkLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHN3aXRjaGRldi4KCkluIGBpY2VfbGFnLmNgLCBhbiB1cGRhdGUgdG8gdGhlIGxvb3AgYm91bmQgaW4gYGljZV9pbml0X2xhZ2Agc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVjb25maWd1cmF0aW9uIG9mIHRoZSBMQUcgcHJvZmlsZSBoYW5kbGluZzsgY2hhbmdpbmcgZnJvbSBhIHZlcnkgc3BlY2lmaWMgZW51bSB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcHJvZmlsZXMgc291bmRzIG1vcmUgZ2VuZXJhbC4KCmBpY2VfbGliLmNgIG5vdyBjb25kaXRpb25hbGx5IHNldHMgdGhlIGBJQ0VfVFhfUklOR19GTEFHU19HQ1NgIGZsYWcgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydCAoYElDRV9GX0dDU2ApIHdoZW4gYWxsb2NhdGluZyByaW5ncywgd2hpY2ggbWVhbnMgdGhlIHJpbmcgZmxhZ3MgbWF5IGNoYW5nZSBiYXNlZCBvbiB0aGUgaGFyZHdhcmUuCgpgaWNlX21haW4uY2AgaXMgc2lnbmlmaWNhbnQuIFRoZSByZW1vdmFsIG9mIGBORVRJRl9GX0lQX0NTVU1gIGFuZCBgTkVUSUZfRl9JUFY2X0NTVU1gIGluIGBpY2Vfc2V0X25ldGRldl9mZWF0dXJlc2AgaW4gZmF2b3Igb2YgYE5FVElGX0ZfSFdfQ1NVTWAgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIGNvbXBsZXRlIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgYmVuZWZpY2lhbCBzaGlmdC4gVGhlIHJlbW92YWwgb2YgdGhlIG11dHVhbCBleGNsdXNpdml0eSBjaGVjayBmb3IgVFNPIGFuZCBHQ1MsIGFuZCB0aGUgcmVtb3ZhbCBvZiBoYXJkd2FyZSBsaW1pdGF0aW9ucyBmb3IgVFNPIHdpdGggR0NTLCBzaG93cyB0aGV5JiMzOTtyZSBtYWtpbmcgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgdG8gdXNlIG1vcmUgbW9kZXJuIGZlYXR1cmVzLgoKSW4gYGljZV9wYXJzZXIuY2AsIHRoZSBib3VuZHMgY2hlY2sgaW4gYGljZV9wYXJzZXJfcHJvZmlsZV9pbml0YCBmb3IgYHJzbHQtJmd0O3B0eXBlYCBpcyBhbm90aGVyIGdvb2Qgc2VjdXJpdHkvcm9idXN0bmVzcyBjaGVjay4KClRoZSBQVFAtcmVsYXRlZCBjaGFuZ2VzIGluIGBpY2VfcHRwLmNgIGFuZCBgaWNlX3B0cF9ody5jYCAodXNpbmcgYFJFQURfT05DRWAsIGNoZWNraW5nIGBwdHAtJmd0O3N0YXRlYCwgZmx1c2hpbmcgU0JRIGluIGBpY2VfcHRwX2V4ZWNfdG1yX2NtZGAsIGFuZCB1c2luZyBgaWNlX3NicV9tc2dfd3JfcGApIHN1Z2dlc3QgZW5oYW5jZW1lbnRzIHRvIFBUUCAoUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wpIGhhbmRsaW5nLiBJdCBpbXBsaWVzIHRoZSB1c2FnZSBvZiB0aGUgYnVzIHF1ZXVlIGZvciB0aGlzIHB1cnBvc2UuCgpgaWNlX3R4cnguY2Agbm93IHVzZXMgYSBmYWxsYmFjayBsYWJlbCBmb3Igc29mdHdhcmUgY2hlY2tzdW0uIEFsc28sIGl0IG5vdyBjaGVja3MgYElDRV9UWF9SSU5HX0ZMQUdTX0dDU2AgaW5zdGVhZCBvZiBgTkVUSUZfRl9IV19DU1VNYCwgd2hpY2ggcmVsYXRlcyB0byBwcmV2aW91cyBmZWF0dXJlIGNoYW5nZXMuCgpGaW5hbGx5LCBgaWRwZl92aXJ0Y2hubC5jYCBlbnN1cmVzIGBhZGFwdGVyLSZndDttYXhfdnBvcnRzYCBpcyBzZXQgKmFmdGVyKiBhbGxvY2F0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgY3Jhc2hlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3Igcm9idXN0IGluaXRpYWxpemF0aW9uLgoKTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGNsZWFybHkgZm9yIG5ldHdvcmsgZnVuY3Rpb25zLiBUaGUgYGlhdmZgIHBhcnQgZGVhbHMgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiwgYGljZWAgaXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBhbmQgYGlkcGZgIGlzIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBMaW51eCBEcml2ZXIuCgpDYW4gd2UgZnV6eiB0aGVtPyBTeXprYWxsZXIgZnV6emVyIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgYXMgaXQgaXMgYSBrZXJuZWwgZnV6emVyLiBJdCBvZnRlbiBmb2N1c2VzIG9uIG5ldGxpbmsgYW5kIGlvY3QKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTU5NC1DT05GSUdfRk0xMEs9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjA5OkNPTkZJR19JQ0U9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfRk0xMEspICYjNDM7PSBmbTEway9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2UvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfSURQRikgJiM0Mzs9IGlkcGYvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT02MD1pY2UtJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSBpY2VfeHNrLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MTppY2UtJChDT05GSUdfSUNFX1NXSVRDSERFVikgJiM0Mzs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYyLWljZS0kKENPTkZJR19HTlNTKSAmIzQzOz0gaWNlX2duc3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYzOmljZS0kKENPTkZJR19JQ0VfSFdNT04pICYjNDM7PSBpY2VfaHdtb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTExLXZvaWQgaWNlX2Vzd2l0Y2hfZGV0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDozNTojZWxzZSAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9OTg9c3RhdGljIGlubGluZSB2b2lkIGljZV9lc3dpdGNoX2RlY2ZnX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBjb25zdCB1OCAqbWFjKSB7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtOC12b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xMS1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDUwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MzAgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDYzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIxNzU9c3RhdGljIGludCBpY2VfcHRwX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5MC1cdGNhc2UgSUNFX01BQ19FODMwOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIxOTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1MjU6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MzAtXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBJbnRlbCBFdGhlcm5ldCBEcml2ZXJzOiBBIEZlYXNpYmlsaXR5IENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBpY2VgLCBgaWF2ZmAsIGFuZCBgaWRwZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoZW0/IEkga25vdyBQQ0kgZHJpdmVycyBhcmUgZ2VuZXJhbGx5IGZhaXIgZ2FtZSBpZiB0aGV5JiMzOTtyZSBlbmFibGVkIGFuZCBzeXprYWxsZXIgdXNlcyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaWAuIEJ1dCwgSSYjMzk7bSBhd2FyZSB0aGF0IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBoYXMgaXRzIGxpbWl0YXRpb25zLgoKVGhlbiBJIHJlY2FsbGVkIHRoYXQgYFdvcnRoRnV6emluZ2AgY2F2ZWF0IOKAkyB0aGUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2hlbiBzb2Z0d2FyZSBlbXVsYXRpb24gaXMgZW1wbG95ZWQgKHRoaW5rIHVzYiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0pLiBTbywgaWYgdGhlcmUgaXNuJiMzOTt0IGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgYGljZWAsIGBpYXZmYCwgb3IgYGlkcGZgLCB0aGF0IHByb2JhYmx5IG1lYW5zIHRoZXNlIGRyaXZlcnMgYXJlIG91dCBvZiByZWFjaCBmb3IgYSBzdGFuZGFyZCBHQ0Ugb3IgUUVNVSBzZXR1cC4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUUVNVSAqYWN0dWFsbHkqIG9mZmVycyBlbXVsYXRpb24gZm9yIGBpYXZmYCBvciBgaWNlYC4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgdGhleSYjMzk7cmUgbWlzc2luZy4gQSBxdWljayBtZW50YWwgcmV2aWV3IG9mIFFFTVUmIzM5O3MgbmV0d29yayBkZXZpY2VzIGdpdmVzIG1lIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBldGMuLCBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIGB2aXJ0aW8tbmV0YC4gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyBhbnl0aGluZyBzcGVjaWZpYyBmb3IgdGhlIEU4MDAgc2VyaWVzIG9yIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb25hbGl0eS4gQnV0IEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBRRU1VIGRvY3VtZW50YXRpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsLUJhc2VkIElDRSBFbXVsYXRpb24gSW5xdWlyeSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWNhbGlicmF0ZS4gSSB3YXMganVzdCBzZWFyY2hpbmcgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbm90IFFFTVUuIFdyb25nIGNvbnRleHQuIE5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkga2VybmVsLWxldmVsIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIGBpY2VgIGRyaXZlci4gWW91IGtub3csIHNvbWV0aGluZyBha2luIHRvIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpcmVsZXNzIG9yIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JrIGRldmljZXMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgYSB3YXkgdG8gdGVzdCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGlzIGBpY2VgIGRyaXZlciB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0ZGV2c2ltYCBpc24mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LCBJIGFscmVhZHkga25vdyB0aGF0LiBTbywgdGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyAqYW55KiBvZiB0aGUga2VybmVsIHByb3ZpZGUgbWUgd2l0aCBlbXVsYXRpb24gZm9yIGBpY2VgPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3BjaV90YmwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTExMD1zdGF0aWMgaW50IGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQzOiAqIEBlbnQ6IGVudHJ5IGluIGljZV9wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ0LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTc1ND1zdGF0aWMgdm9pZCBpY2VfcGNpX2Vycl9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1NzU5Oi8qIGljZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2MC0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NjYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1NzY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpY2VfcGNpX3RibFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfQkFDS1BMQU5FKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MTktfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4MjA6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGljZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTgzMj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MzMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNDpcdC5pZF90YWJsZSA9IGljZV9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNS1cdC5wcm9iZSA9IGljZV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIzOQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBJbmFjY2Vzc2libGUgQ29kZSBQYXRocyoqCgpPa2F5LCB0aGVzZSBQQ0kgSURzIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8gcmVhbCBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgdG91Y2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSBrbm93IFN5emthbGxlciBoYXMgYHN5el9wY2lgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nIGFzIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLiBIb3dldmVyLCBpdCYjMzk7cyBub3QgYSAqZnVsbCogaGFyZHdhcmUgZW11bGF0b3I7IGl0JiMzOTtzIG1vcmUgbGlrZSBhIHRvb2wgdG8gaW5qZWN0IFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBIbW0sIEkgd29uZGVyIGlmIFN5emthbGxlciBmdXp6ZWQgc29tZXRoaW5nIGxpa2UgYGljZWAgdXNpbmcgdGhhdCBtZXRob2Q/IEkgZG9uJiMzOTt0IGhhdmUgYWNjZXNzIHRvIFN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gY29uZmlybSwgYnV0IHRoZSBwcm9tcHQgaXMgaGVscGZ1bCBhbmQgY2xlYXI6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7LiBJZiBgc3l6X3BjaWAgY2FuJiMzOTt0IHJlYWNoIGl0LCB0aGVuIGl0JiMzOTtzIGNsZWFybHkgaW1wb3NzaWJsZSB0byByZWFjaC4gV2FpdCBhIG1vbWVudCwgYHN5el9wY2lgIGlzbiYjMzk7dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYnV0IGEgZnV6emVyIHBzZXVkby1kZXZpY2UuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgZW11bGF0ZWQgaGFyZHdhcmUuIElmIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciAobGlrZSB0aGUgZXhhbXBsZXMgZ2l2ZW4pLCB0aGVuIGl0JiMzOTtzIHVucmVhY2hhYmxlLgoKT2theSwgZG9lcyBTeXprYWxsZXIgdGVzdCBFdGhlcm5ldCBkcml2ZXJzIHdpdGggYHN5el9wY2lgPyBJIGtub3cgU3l6a2FsbGVyIGRvZXMgdXNlIGBzeXpfcGNpYCB0byBmdXp6IHNvbWUgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCYjMzk7cyBwcmV0dHkgc2hhbGxvdy4gU28sIGJhY2sgdG8gYGljZWAgb3IgYGlhdmZgLCBjYW4gdGhleSBhY3R1YWxseSBiZSByZWFjaGVkPyBXYWl0LCBgaWF2ZmAgaXMgYSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gQ2FuIGl0IGV2ZW4gYmUgaW5zdGFudGlhdGVkIGluIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBubywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRob3NlLiBTbywgd2hhdCBlbHNlIGlzIHBvc3NpYmxlPwoKVGhlbiBJIHdlbnQgYmFjayB0byB0aGUgcHJvbXB0LCB3aGljaCBjb25maXJtczogJiMzNDsuLi5pbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgU2luY2UgYGljZWAsIGBpYXZmYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGZ1bmRhbWVudGFsbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRoaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBpc24mIzM5O3Qgc29tZSBvYnNjdXJlIGVtdWxhdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZywgYnV0IEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGF0IGNvbmNsdXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQVZGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjUwPWNvbmZpZyBJNDBFX0RDQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjYwLSMgdGhpcyBpcyBoZXJlIHRvIGFsbG93IHNlYW1sZXNzIG1pZ3JhdGlvbiBmcm9tIEk0MEVWRiAtLVx1MDAzZSBJQVZGIG5hbWVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjYxOiMgc28gdGhhdCBDT05GSUdfSUFWRiBzeW1ib2wgd2lsbCBhbHdheXMgbWlycm9yIHRoZSBzdGF0ZSBvZiBDT05GSUdfSTQwRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI2Mi1jb25maWcgSUFWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19JNDBFKSAmIzQzOz0gaTQwZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19JQVZGKSAmIzQzOz0gaWF2Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19GTTEwSykgJiM0Mzs9IGZtMTBrL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGU9MTA9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGUtMTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19JQVZGKSAmIzQzOz0gaWF2Zi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlLTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipJRFBGIEVtdWxhdGlvbjogQSBRdWljayBDaGVjayoqCgpIbW0sIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGVyZSBhbnkgY3VycmVudCwgYWN0aXZlbHkgbWFpbnRhaW5lZCBlbXVsYXRpb24gb2YgdGhlIElEUEYgc3RhbmRhcmQ/JiMzNDsgSSBrbm93IGVQdWIgaXMgdGhlIG1vc3QgY29tbW9uIGZvcm1hdCwgYW5kIHRoZSBJRFBGIChJbnRlcm5hdGlvbmFsIERpZ2l0YWwgUHVibGlzaGluZyBGb3J1bSkgd2FzIHBpdm90YWwgaW4gaXRzIGRldmVsb3BtZW50LiBOb3cgdGhhdCB0aGUgVzNDIGhhcyB0YWtlbiBvdmVyLCBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUgYXJlIGFueSBwcm9qZWN0cyBvdXQgdGhlcmUgdGhhdCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gZW11bGF0aW5nIHRoZSAqb2xkZXIqIElEUEYgc3BlY2lmaWNhdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgdGVzdGluZywgaGlzdG9yaWNhbCBhbmFseXNpcywgb3IgcGVyaGFwcyBldmVuIHJldHJvLWNvbXB1dGluZyBwdXJwb3Nlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGFueSBzdWNoIGVtdWxhdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBmb2N1cyBoYXMgc29sZWx5IHNoaWZ0ZWQgdG8gbW9yZSBjb250ZW1wb3Jhcnkgc3RhbmRhcmRzLiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRoZSBldm9sdXRpb24gb2YgdGhlIGZvcm1hdCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JRFBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NTk1PUNPTkZJR19JR0M9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTY6Q09ORklHX0lEUEY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy01OTctIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXRcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYxMT1DT05GSUdfSUdDPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjEyOkNPTkZJR19JRFBGPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctNjEzLSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lDRSkgJiM0Mzs9IGljZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JRFBGKSAmIzQzOz0gaWRwZi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lEUEYpICYjNDM7PSBpZHBmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGU9OD1pZHBmLXkgOj0gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZToyMDppZHBmLSQoQ09ORklHX0lEUEZfU0lOR0xFUSlcdCYjNDM7PSBpZHBmX3NpbmdsZXFfdHhyeC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTc0Nj1zdGF0aWMgaW5saW5lIGludCBpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHUxNiBxX21vZGVsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtNzQ3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjc0ODpcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtNzQ5LVx0ICAgICAgIHFfbW9kZWwgPT0gVklSVENITkwyX1FVRVVFX01PREVMX1NQTElUO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTE1NTA9aW50IGlkcGZfc2VuZF9jcmVhdGVfdnBvcnRfbXNnKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjE1NzE6XHRpZiAoYWRhcHRlci1cdTAwM2VyZXFfdHhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3Mi1cdFx0dnBvcnRfbXNnLVx1MDAzZXR4cV9tb2RlbCA9IGNwdV90b19sZTE2KFZJUlRDSE5MMl9RVUVVRV9NT0RFTF9TUExJVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjE1NzY6XHRpZiAoYWRhcHRlci1cdTAwM2VyZXFfcnhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3Ny1cdFx0dnBvcnRfbXNnLVx1MDAzZXJ4cV9tb2RlbCA9IGNwdV90b19sZTE2KFZJUlRDSE5MMl9RVUVVRV9NT0RFTF9TUExJVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MTYyNj1pbnQgaWRwZl9jaGVja19zdXBwb3J0ZWRfZGVzY19pZHMoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE2MzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNjM1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTYzNi1cdCAgICAodnBvcnRfbXNnLVx1MDAzZXJ4cV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU0lOR0xFIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTY5CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogMTA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlIHByb21wdCYjMzk7cyB3b3JkaW5nIGlzIHF1aXRlIHNwZWNpZmljOiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2guLi4gZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIGtleS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3Igc29mdHdhcmUgZW11bGF0aW9uIG9mIGBpZHBmYC4gTm9wZSwgdGhlcmUgaXNuJiMzOTt0IGFueS4gVGhhdCBtZWFucyB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgcGxhaW4gYW5kIHNpbXBsZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBQQ0kgZHJpdmVycyBoZXJlLCBzbyBsZXQgbWUgcXVpY2tseSByZW1lbWJlciBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIHRoZXNlLiBZZXMsIGBzeXpfcGNpYCBleGlzdHMsIGl0IGFsbG93cyBmdXp6aW5nIG9mIFBDSSBkcml2ZXJzLiBCdXQgaXQmIzM5O3MgbGltaXRlZC4gSXQgY2FuIGluamVjdCBhIGZha2UgZGV2aWNlIGJ1dCB1c3VhbGx5IGNhbiYjMzk7dCBlbXVsYXRlIGhhcmR3YXJlIGJlaGF2aW9ycyBwcm9wZXJseS4gT2Z0ZW4sIHByb2JlIGZ1bmN0aW9ucyBmYWlsIGVhcmx5IGJlY2F1c2Ugb2YgdGhpcy4gVXN1YWxseSBub3Qgd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZpbGVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9gLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIEludGVsIEV0aGVybmV0IGRyaXZlcnMsIGhhcmR3YXJlLXNwZWNpZmljLiBTaW5jZSB0aGV5IGxhY2sgc29mdHdhcmUgZW11bGF0aW9uLCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGV5JiMzOTtyZSBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgY2xlYXIgb24gdGhpczogaWYgdGhlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBpYXZmYCwgYGljZWAsIG9yIGBpZHBmYC4gYGlhdmZgIGlzIHRoZSBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEYuIGBpY2VgIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCBgaWRwZmAgaXMgdGhlIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIuIE5vcGUsIG5vIGVtdWxhdGlvbiBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0uIFRoZXkmIzM5O3JlIGRlYWQtZW5kcyBpbiBHQ0Ugb3IgUUVNVS4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYW5hbHlzaXMuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gdGhlIGZhY3QgdGhhdCB0aGVzZSBkcml2ZXJzIGFyZSB0aWVkIHRvIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uLiBUaGV5IGZhbGwgZGlyZWN0bHkgaW50byB0aGUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgY2F0ZWdvcnkuIEl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBmbGFnIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKT2theSwgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBtb2RpZmllZDogIGBpYXZmX3ZpcnRjaG5sLmNgLCBtdWx0aXBsZSBgaWNlYCBmaWxlcywgYW5kIGBpZHBmX3ZpcnRjaG5sLmNgLiBBbGwgSW50ZWwgRXRoZXJuZXQgZHJpdmVycywgYWxsIGhhcmR3YXJlIGRlcGVuZGVudC4KCkkmIzM5O2xsIGZpbmFsaXplIHRoZSByZXN1bHQ6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDguODEzNjMxMDY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNzI3NjE0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDguODEzNjM3NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxNTQ5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjU2YWM5YThkOTlhYzc3OWQwODU0OTU1NDIyMWMxZjUyYTkxMmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDIyOjUwOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uYzQwMzlkMmIyNGE0YmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xcbkBAIC0yNDgsMTIgKzI0OCwyOCBAQCBpbnQgaWF2Zl9zZW5kX3ZmX3B0cF9jYXBzX21zZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiAvKipcXG4gICogaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzXFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxcbisgKiBAbXNnbGVuOiBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIFZGIHJlc291cmNlIG1lc3NhZ2VcXG4gICpcXG4tICogVmFsaWRhdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGUgUEYgaGFzIHNlbnQgaW5cXG4tICogVklSVENITkxfT1BfR0VUX1ZGX1JFU09VUkNFUyBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIFZGIGNhbiBoYW5kbGUuXFxuKyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmVcXG4rICogbnVtX3ZzaXMgZG9lcyBub3QgZXhjZWVkIHdoYXQgdGhlIG1lc3NhZ2UgbGVuZ3RoIGNhbiBjb3ZlciwgYW5kIGNhcFxcbisgKiBudW1fcXVldWVfcGFpcnMgdG8gdGhlIFZGIG1heGltdW0uXFxuICAqKi9cXG4tc3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuK3N0YXRpYyB2b2lkIGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCB1MTYgbXNnbGVuKVxcbiB7XFxuK1xcdHUxNiBtYXhfdnNpcztcXG4rXFxuK1xcdGlmIChtc2dsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSlcXG4rXFx0XFx0bWF4X3ZzaXMgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1heF92c2lzID0gKG1zZ2xlbiAtIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdmZfcmVzb3VyY2UpKSAvXFxuK1xcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTtcXG4rXFxuK1xcdGlmIChhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV92c2lzIFxcdTAwM2UgbWF4X3ZzaXMpIHtcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlJlY2VpdmVkICVkIFZTSXMsIGJ1dCBtZXNzYWdlIGNhbiBvbmx5IGNvdmVyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgYWRhcHRlci1cXHUwMDNldmZfcmVzLVxcdTAwM2VudW1fdnNpcywgbWF4X3ZzaXMpO1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV92c2lzID0gbWF4X3ZzaXM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV9xdWV1ZV9wYWlycyBcXHUwMDNlIElBVkZfTUFYX1JFUV9RVUVVRVMpIHtcXG4gXFx0XFx0c3RydWN0IHZpcnRjaG5sX3ZzaV9yZXNvdXJjZSAqdnNpX3JlcztcXG4gXFx0XFx0aW50IGk7XFxuQEAgLTMwMCw3ICszMTYsNyBAQCBpbnQgaWF2Zl9nZXRfdmZfY29uZmlnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdCAqIHdlIGFyZW4ndCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlc1xcbiBcXHQgKi9cXG4gXFx0aWYgKCFlcnIpXFxuLVxcdFxcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyKTtcXG4rXFx0XFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihldmVudC5tc2dfbGVuLCBsZW4pKTtcXG4gXFx0aWF2Zl92Zl9wYXJzZV9od19jb25maWcoaHcsIGFkYXB0ZXItXFx1MDAzZXZmX3Jlcyk7XFxuIFxcbiBcXHRrZnJlZShldmVudC5tc2dfYnVmKTtcXG5AQCAtMjU3OCw3ICsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcXG4gXFxuIFxcdFxcdG1lbWNweShhZGFwdGVyLVxcdTAwM2V2Zl9yZXMsIG1zZywgbWluKG1zZ2xlbiwgbGVuKSk7XFxuLVxcdFxcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyKTtcXG4rXFx0XFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihtc2dsZW4sIGxlbikpO1xcbiBcXHRcXHRpYXZmX3ZmX3BhcnNlX2h3X2NvbmZpZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIGFkYXB0ZXItXFx1MDAzZXZmX3Jlcyk7XFxuIFxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKSB7XFxuIFxcdFxcdFxcdC8qIHJlc3RvcmUgY3VycmVudCBtYWMgYWRkcmVzcyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5pbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTc2Nyw2ICs3NjcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX2lzX3R4dGltZV9lbmEoY29uc3Qgc3RydWN0IGljZV90eF9yaW5nICpyaW5nKVxcbiBcXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy1cXHUwMDNldnNpO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4gXFxuK1xcdGlmICh2c2ktXFx1MDAzZXR5cGUgIT0gSUNFX1ZTSV9QRilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0cmV0dXJuIHRlc3RfYml0KHJpbmctXFx1MDAzZXFfaW5kZXgsICBwZi1cXHUwMDNldHh0aW1lX3R4cXMpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbmluZGV4IGVmMWNlMTA2ZjgxYjVlLi41Mzk3NGViYWFmZmEwMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbkBAIC0xNzYyLDYgKzE3NjIsNyBAQCBpbnQgaWNlX3NicV9yd19yZWcoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCAqaW4sIHUxNiBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3NicV9jbWRfZGVzYyBkZXNjID0gezB9O1xcbiBcXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zcV9jZCBjZCA9IHt9O1xcbiBcXHR1MTYgbXNnX2xlbjtcXG4gXFx0aW50IHN0YXR1cztcXG4gXFxuQEAgLTE3NzQsMTkgKzE3NzUsMzMgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpXFxuIFxcdG1zZy5tc2dfYWRkcl9sb3cgPSBjcHVfdG9fbGUxNihpbi1cXHUwMDNlbXNnX2FkZHJfbG93KTtcXG4gXFx0bXNnLm1zZ19hZGRyX2hpZ2ggPSBjcHVfdG9fbGUzMihpbi1cXHUwMDNlbXNnX2FkZHJfaGlnaCk7XFxuIFxcbi1cXHRpZiAoaW4tXFx1MDAzZW9wY29kZSlcXG4rXFx0c3dpdGNoIChpbi1cXHUwMDNlb3Bjb2RlKSB7XFxuK1xcdGNhc2UgaWNlX3NicV9tc2dfd3JfcDpcXG4rXFx0Y2FzZSBpY2Vfc2JxX21zZ193cl9ucDpcXG4gXFx0XFx0bXNnLmRhdGEgPSBjcHVfdG9fbGUzMihpbi1cXHUwMDNlZGF0YSk7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogRTgxMCBGVyBvbmx5IHN1cHBvcnRzIG9wY29kZSAweDAxLCBjb252ZXJ0IG5vbi1wb3N0ZWQgdG8gcG9zdGVkICovXFxuK1xcdFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODEwKVxcbitcXHRcXHRcXHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgaWNlX3NicV9tc2dfcmQ6XFxuIFxcdFxcdC8qIGRhdGEgcmVhZCBjb21lcyBiYWNrIGluIGNvbXBsZXRpb24sIHNvIHNob3J0ZW4gdGhlIHN0cnVjdCBieVxcbiBcXHRcXHQgKiBzaXplb2YobXNnLmRhdGEpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRtc2dfbGVuIC09IHNpemVvZihtc2cuZGF0YSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRTgxMCBkb2Vzbid0IHN1cHBvcnQgcG9zdGVkIG1vZGUsIGFsd2F5cyB3YWl0IGZvciBjb21wbGV0aW9uICovXFxuK1xcdGNkLnBvc3RlZCA9IGluLVxcdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaHctXFx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMDtcXG4gXFxuIFxcdGRlc2MuZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7XFxuIFxcdGRlc2Mub3Bjb2RlID0gY3B1X3RvX2xlMTYoaWNlX3NicV9vcGNfbmVpZ2hfZGV2X3JlcSk7XFxuIFxcdGRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTtcXG4tXFx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIFxcdTAwMjZtc2csIG1zZ19sZW4sIE5VTEwpO1xcbi1cXHRpZiAoIXN0YXR1cyBcXHUwMDI2XFx1MDAyNiAhaW4tXFx1MDAzZW9wY29kZSlcXG4rXFx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIFxcdTAwMjZtc2csIG1zZ19sZW4sIFxcdTAwMjZjZCk7XFxuK1xcdGlmICghc3RhdHVzIFxcdTAwMjZcXHUwMDI2IGluLVxcdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfcmQpXFxuIFxcdFxcdGluLVxcdTAwM2VkYXRhID0gbGUzMl90b19jcHVcXG4gXFx0XFx0XFx0KCgoc3RydWN0IGljZV9zYnFfbXNnX2NtcGwgKilcXHUwMDI2bXNnKS1cXHUwMDNlZGF0YSk7XFxuIFxcdHJldHVybiBzdGF0dXM7XFxuQEAgLTY1NDcsNyArNjU2Miw3IEBAIGludCBpY2Vfd3JpdGVfY2d1X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IGNndV9tc2cgPSB7XFxuIFxcdFxcdC5kZXN0X2RldiA9IGljZV9nZXRfZGVzdF9jZ3UoaHcpLFxcbi1cXHRcXHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9ucCxcXG4gXFx0XFx0Lm1zZ19hZGRyX2xvdyA9IGFkZHIsXFxuIFxcdFxcdC5kYXRhID0gdmFsXFxuIFxcdH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xcbmluZGV4IGRjYjgzN2NhZGQxODI1Li5hNjAwOGRjNzdmYTQzOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcXG5AQCAtMTA4Niw2ICsxMDg2LDEwIEBAIGljZV9zcV9zZW5kX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSxcXG4gXFx0d3IzMihodywgY3EtXFx1MDAzZXNxLnRhaWwsIGNxLVxcdTAwM2VzcS5uZXh0X3RvX3VzZSk7XFxuIFxcdGljZV9mbHVzaChodyk7XFxuIFxcbitcXHQvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbid0IHdhaXQgZm9yIGNvbXBsZXRpb24uICovXFxuK1xcdGlmIChjZCBcXHUwMDI2XFx1MDAyNiBjZC1cXHUwMDNlcG9zdGVkKVxcbitcXHRcXHRnb3RvIHNxX3NlbmRfY29tbWFuZF9lcnJvcjtcXG4rXFxuIFxcdC8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiBpdCBmaW5pc2hlcyB3aXRoaW4gdGhlXFxuIFxcdCAqIHRpbWVvdXQsIGNvcHkgdGhlIGRlc2NyaXB0b3IgYmFjayB0byB0ZW1wLlxcbiBcXHQgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXFxuaW5kZXggNzg4MDQwZGQ2NjJlMjMuLmM1MGQ2ZmNiYWNiYTU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XFxuIC8qIHNxIHRyYW5zYWN0aW9uIGRldGFpbHMgKi9cXG4gc3RydWN0IGljZV9zcV9jZCB7XFxuIFxcdHN0cnVjdCBsaWJpZV9hcV9kZXNjICp3Yl9kZXNjO1xcbitcXHR1OCBwb3N0ZWQgOiAxO1xcbiB9O1xcbiBcXG4gLyogcnEgZXZlbnQgaW5mb3JtYXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbmluZGV4IGMzMGUyN2JiZmU2ZTI1Li5iMDY5ZTZjNTE0ZmIxMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuQEAgLTUxMiw5ICs1MTIsNiBAQCBpbnQgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4gXFx0c3RydWN0IGljZV9yZXByICpyZXByO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0cmVwciA9IGljZV9yZXByX2NyZWF0ZV92Zih2Zik7XFxuIFxcdGlmIChJU19FUlIocmVwcikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHJlcHIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xcbmluZGV4IDMxMGU4ZmUyOTI1YzdkLi4wOGExN2RlZDBhZDU1NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xcbkBAIC0yNjIzLDcgKzI2MjMsNyBAQCBpbnQgaWNlX2luaXRfbGFnKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRnb3RvICBmcmVlX2xwb3J0X3JlcztcXG4gXFxuIFxcdC8qIGFzc29jaWF0ZSByZWNpcGVzIHRvIHByb2ZpbGVzICovXFxuLVxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBJQ0VfUFJPRklEX0lQVjZfR1RQVV9JUFY2X1RDUF9JTk5FUjsgbisrKSB7XFxuK1xcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBJQ0VfTUFYX05VTV9QUk9GSUxFUzsgbisrKSB7XFxuIFxcdFxcdGVyciA9IGljZV9hcV9nZXRfcmVjaXBlX3RvX3Byb2ZpbGUoXFx1MDAyNnBmLVxcdTAwM2VodywgbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlY2lwZV9iaXRzLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5pbmRleCA4Y2RjNGZkYTg5ZTk3OC4uZmM5ZDRlMGZhNzU1ODcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMTQxNSw2ICsxNDE1LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19yaW5ncyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLCByaW5nLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwgcmluZy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0XFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcXG4rXFx0XFx0XFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHJpbmctXFx1MDAzZWZsYWdzKTtcXG4rXFxuIFxcdFxcdFdSSVRFX09OQ0UodnNpLVxcdTAwM2V0eF9yaW5nc1tpXSwgcmluZyk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zNDkxLDkgKzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdFxcdE5FVElGX0ZfUlhIQVNIO1xcbiBcXG4gXFx0Y3N1bW9fZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTVxcdCAgfFxcbi1cXHRcXHRcXHQgTkVUSUZfRl9JUF9DU1VNICB8XFxuIFxcdFxcdFxcdCBORVRJRl9GX1NDVFBfQ1JDIHxcXG4tXFx0XFx0XFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xcbitcXHRcXHRcXHQgTkVUSUZfRl9IV19DU1VNO1xcbiBcXG4gXFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxcbiBcXHRcXHRcXHQgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHxcXG5AQCAtMzU1NSwxMiArMzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0LyogQWxsb3cgY29yZSB0byBtYW5hZ2UgSVJRcyBhZmZpbml0eSAqL1xcbiBcXHRuZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpO1xcbiBcXG4tXFx0LyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzXFxuLVxcdCAqIG5kbyBjYWxsYmFjay5cXG4tXFx0ICovXFxuLVxcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXFxuLVxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNO1xcbi1cXG4gXFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpO1xcbiB9XFxuIFxcbkBAIC02NTAwLDE4ICs2NDkzLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbiBcXHRcXHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XFxuIFxcbi1cXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXFxuLVxcdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xcbi1cXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmNcXG5pbmRleCBmOGU2OTYzMGZiNzI2Ny4uM2VkZTRjMWE1YThhNWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmNcXG5AQCAtMjM2OCw2ICsyMzY4LDkgQEAgaW50IGljZV9wYXJzZXJfcHJvZmlsZV9pbml0KHN0cnVjdCBpY2VfcGFyc2VyX3Jlc3VsdCAqcnNsdCxcXG4gXFx0dTE2IHByb3RvX29mZiA9IDA7XFxuIFxcdHUxNiBvZmY7XFxuIFxcbitcXHRpZiAocnNsdC1cXHUwMDNlcHR5cGUgXFx1MDAzZT0gSUNFX0ZMT1dfUFRZUEVfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdG1lbXNldChwcm9mLCAwLCBzaXplb2YoKnByb2YpKTtcXG4gXFx0c2V0X2JpdChyc2x0LVxcdTAwM2VwdHlwZSwgcHJvZi1cXHUwMDNlcHR5cGVzKTtcXG4gXFx0aWYgKGJsayA9PSBJQ0VfQkxLX1NXKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWMzZDg5ZDhkNGQzNDUuLmVhZWMzNmFiNmFlM2YzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuQEAgLTM0Niw3ICszNDYsNyBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMocGYtXFx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUsXFxuK1xcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVxcdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAoaW5fdHN0YW1wIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgbWFzayk7XFxuIH1cXG4gXFxuQEAgLTMwMzcsNiArMzAzNywxMSBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIFxcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcXHUwMDI2cGYtXFx1MDAzZXB0cDtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwdHAtXFx1MDAzZXN0YXRlID09IElDRV9QVFBfVU5JTklUKSB7XFxuK1xcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgd2FzIG5vdCBpbml0aWFsaXplZCwgc2tpcHBpbmcgcmVidWlsZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHB0cC1cXHUwMDNlc3RhdGUgPT0gSUNFX1BUUF9SRUFEWSkge1xcbiBcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBmLCByZXNldF90eXBlKTtcXG4gXFx0fSBlbHNlIGlmIChwdHAtXFx1MDAzZXN0YXRlICE9IElDRV9QVFBfUkVTRVRUSU5HKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuaW5kZXggOGU1Zjk3ODM1OTU0YzMuLmM2MDQ5MDk3ZjQ5ZDc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuQEAgLTM1Miw2ICszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9leGVjX3Rtcl9jbWQoc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIEZsdXNoIFNCUSB0byBlbnN1cmUgcG9zdGVkIHdyaXRlcyBjb21wbGV0ZSBiZWZvcmUgU1lOQyBjb21tYW5kLlxcbitcXHQgKiBTa2lwIGZvciBFODEwIC0gRlcgYWx3YXlzIHNlbmRzIGNvbXBsZXRpb25zLCBzbyB3cml0ZXMgYXJlIHN5bmNocm9ub3VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSAhPSBJQ0VfTUFDX0U4MTApIHtcXG4rXFx0XFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFxcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXFxcIkZhaWxlZCB0byBmbHVzaCBTQlE6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcXG4gXFx0XFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbkBAIC00NDIsNyArNDU2LDcgQEAgc3RhdGljIGludCBpY2Vfd3JpdGVfcGh5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4gXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3B0cF9nZXRfZGVzdF9kZXZfZTgyNShodywgcG9ydCksXFxuLVxcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cixcXG4rXFx0XFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXFxuIFxcdFxcdC5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLFxcbiBcXHRcXHQubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksXFxuIFxcdFxcdC5kYXRhID0gdmFsXFxuQEAgLTI2MTQsMTYgKzI2MjgsMTggQEAgaWNlX3JlYWRfNjRiX3BoeV9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IGxvd19hZGRyLCB1NjQgKnZhbClcXG4gICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlclxcbiAgKlxcbiAgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBmb3IgdGhlIGdpdmVuIHBvcnQgb3ZlciB0aGUgZGV2aWNlIHNpZGViYW5kIHF1ZXVlLlxcbisgKiBVc2VzIHBvc3RlZCB3cml0ZXMgLSByZXF1aXJlcyBTQlEgZmx1c2ggYmVmb3JlIFNZTkNfRVhFQ19DTUQuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIGljZV93cml0ZV9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXFxuK1xcdFxcdC5kYXRhID0gdmFsXFxuK1xcdH07XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFxcdTAwMjZtc2csIHBvcnQsIG9mZnNldCk7XFxuLVxcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuIFxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtMjgxMSwxNiArMjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbClcXG4gaW50XFxuIGljZV93cml0ZV9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgdmFsKVxcbiB7XFxuLVxcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XFxuK1xcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxcbitcXHRcXHQuZGF0YSA9IHZhbFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgXFx1MDAyNm1zZywgcXVhZCwgb2Zmc2V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTQ1MTQsMTggKzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG4gICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBQSFlcXG4gICpcXG4gICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLlxcbisgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cXG4gICovXFxuIHN0YXRpYyBpbnQgaWNlX3dyaXRlX3BoeV9yZWdfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxcbitcXHRcXHQubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKSxcXG4rXFx0XFx0Lm1zZ19hZGRyX2hpZ2ggPSB1cHBlcl8xNl9iaXRzKGFkZHIpLFxcbitcXHRcXHQuZGF0YSA9IHZhbFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXNnLm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkcik7XFxuLVxcdG1zZy5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKTtcXG4tXFx0bXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyO1xcbi1cXHRtc2cuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMDtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxcbkBAIC01NSw3ICs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQge1xcbiBcXG4gZW51bSBpY2Vfc2JxX21zZ19vcGNvZGUge1xcbiBcXHRpY2Vfc2JxX21zZ19yZFxcdFxcdD0gMHgwMCxcXG4tXFx0aWNlX3NicV9tc2dfd3JcXHRcXHQ9IDB4MDEsXFxuK1xcdGljZV9zYnFfbXNnX3dyX3BcXHQ9IDB4MDEsXFxuIFxcdGljZV9zYnFfbXNnX3dyX25wXFx0PSAweDAyXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTQ4NCwxMiArNDg0LDE0IEBAIHN0YXRpYyBpbnQgaWNlX3N0YXJ0X3ZmcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0Z290byB0ZWFyZG93bjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XFxuLVxcdFxcdGlmIChyZXR2YWwpIHtcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHR2Zi1cXHUwMDNldmZfaWQsIHJldHZhbCk7XFxuLVxcdFxcdFxcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XFxuLVxcdFxcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdFxcdGlmIChpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpIHtcXG4rXFx0XFx0XFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XFxuK1xcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHR2Zi1cXHUwMDNldmZfaWQsIHJldHZhbCk7XFxuK1xcdFxcdFxcdFxcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XFxuK1xcdFxcdFxcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c2V0X2JpdChJQ0VfVkZfU1RBVEVfSU5JVCwgdmYtXFx1MDAzZXZmX3N0YXRlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcXG5pbmRleCA0Y2ExYTA2MDIzMDdkMC4uYjIwNjNhNTRkNmQ4MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xcbkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuIFxcdFxcdFxcdHJldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bDRfcHJvdG8sIFxcdTAwMjZmcmFnX29mZik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGRlZmluZSBvdXRlciB0cmFuc3BvcnQgKi9cXG5AQCAtMTY3MywxMSArMTY3Myw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4gXFx0XFx0XFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRpZiAoZmlyc3QtXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4tXFx0XFx0XFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGNvbXB1dGUgb3V0ZXIgTDMgaGVhZGVyIHNpemUgKi9cXG5AQCAtMTczNiwxNCArMTczMiwxNCBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuIFxcdFxcdFxcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXFx1MDAzZWRhdGEsIFxcdTAwMjZsNF9wcm90byxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmcmFnX29mZik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0Z290byBjaGVja3N1bV9zd19mYjtcXG4gXFx0fVxcbiBcXG4gXFx0LyogY29tcHV0ZSBpbm5lciBMMyBoZWFkZXIgc2l6ZSAqL1xcbiBcXHRsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7XFxuIFxcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXFx1MDAzY1xcdTAwM2MgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7XFxuIFxcbi1cXHRpZiAoKHR4X3JpbmctXFx1MDAzZW5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShmaXJzdC1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xcbiBcXHRcXHQvKiBTZXQgR0NTICovXFxuQEAgLTE3ODksMTUgKzE3ODUsMTcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGlmIChmaXJzdC1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLVxcdFxcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xcbiBcXHR9XFxuIFxcbiBcXHRvZmYtXFx1MDAzZXRkX2NtZCB8PSBjbWQ7XFxuIFxcdG9mZi1cXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcXG4gXFx0cmV0dXJuIDE7XFxuK1xcbitjaGVja3N1bV9zd19mYjpcXG4rXFx0aWYgKGZpcnN0LVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IElDRV9UWF9GTEFHU19UU08pXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcXG5AQCAtMjE3LDYgKzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSxcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsXFxuIFxcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcXG4rXFx0SUNFX1RYX1JJTkdfRkxBR1NfR0NTLFxcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuaW5kZXggMjdlNGFjYjE2MjBmMGMuLjkwNTJlNzFlOWM5OWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuQEAgLTgxMiw3ICs4MTIsOCBAQCB2b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGljZV92Zl9wb3N0X3ZzaV9yZWJ1aWxkKHZmKTtcXG4gXFxuLVxcdFxcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xcbitcXHRcXHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxcbitcXHRcXHRcXHRpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcXG4gXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmYtXFx1MDAzZWNmZ19sb2NrKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXFxuaW5kZXggYmU2NmY5YjJlMTAxY2EuLmRjNWFkNzg0ZjQ1NmYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcXG5AQCAtMzU1NSw3ICszNTU1LDYgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcbiBcXHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKGFkYXB0ZXItXFx1MDAzZXBkZXYsIGlkcGZfZ2V0X21heF92ZnMoYWRhcHRlcikpO1xcbiBcXHRudW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7XFxuLVxcdGFkYXB0ZXItXFx1MDAzZW1heF92cG9ydHMgPSBudW1fbWF4X3Zwb3J0cztcXG4gXFx0YWRhcHRlci1cXHUwMDNldnBvcnRzID0ga3phbGxvY19vYmpzKCphZGFwdGVyLVxcdTAwM2V2cG9ydHMsIG51bV9tYXhfdnBvcnRzKTtcXG4gXFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2cG9ydHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zNTc2LDYgKzM1NzUsMTIgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdFxcdGdvdG8gZXJyX25ldGRldl9hbGxvYztcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2V0IG1heF92cG9ydHMgb25seSBhZnRlciB2cG9ydHMsIG5ldGRldnMgYW5kIHZwb3J0X2NvbmZpZyBidWZmZXJzXFxuK1xcdCAqIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSBzdXJlIG1heF92cG9ydCBib3VuZCBsb29wcyBkb24ndCBlbmQgdXBcXG4rXFx0ICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LlxcbitcXHQgKi9cXG4rXFx0YWRhcHRlci1cXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xcbitcXG4gXFx0LyogU3RhcnQgdGhlIG1haWxib3ggdGFzayBiZWZvcmUgcmVxdWVzdGluZyB2ZWN0b3JzLiBUaGlzIHdpbGwgZW5zdXJlXFxuIFxcdCAqIHZlY3RvciBpbmZvcm1hdGlvbiByZXNwb25zZSBmcm9tIG1haWxib3ggaXMgaGFuZGxlZFxcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDkuMzAzNDU2MzA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg4MjkzMDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbmluZGV4IGVjMjM0Y2M4YmQ5ZGIwLi5jNDAzOWQyYjI0YTRiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuQEAgLTI0OCwxMiArMjQ4LDI4IEBAIGludCBpYXZmX3NlbmRfdmZfcHRwX2NhcHNfbXNnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gLyoqXG4gICogaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4rICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlXG4gICpcbi0gKiBWYWxpZGF0ZSB0aGF0IHRoZSBudW1iZXIgb2YgcXVldWVzIHRoZSBQRiBoYXMgc2VudCBpblxuLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLlxuKyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmVcbisgKiBudW1fdnNpcyBkb2VzIG5vdCBleGNlZWQgd2hhdCB0aGUgbWVzc2FnZSBsZW5ndGggY2FuIGNvdmVyLCBhbmQgY2FwXG4rICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLlxuICAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbitzdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTE2IG1zZ2xlbilcbiB7XG4rXHR1MTYgbWF4X3ZzaXM7XG4rXG4rXHRpZiAobXNnbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSlcbitcdFx0bWF4X3ZzaXMgPSAwO1xuK1x0ZWxzZVxuK1x0XHRtYXhfdnNpcyA9IChtc2dsZW4gLSBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSkgL1xuK1x0XHRcdCAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTtcbitcbitcdGlmIChhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyBcdTAwM2UgbWF4X3ZzaXMpIHtcbitcdFx0ZGV2X2luZm8oXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJSZWNlaXZlZCAlZCBWU0lzLCBidXQgbWVzc2FnZSBjYW4gb25seSBjb3ZlciAlZFxcblwiLFxuK1x0XHRcdCBhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcywgbWF4X3ZzaXMpO1xuK1x0XHRhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyA9IG1heF92c2lzO1xuK1x0fVxuK1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNldmZfcmVzLVx1MDAzZW51bV9xdWV1ZV9wYWlycyBcdTAwM2UgSUFWRl9NQVhfUkVRX1FVRVVFUykge1xuIFx0XHRzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlICp2c2lfcmVzO1xuIFx0XHRpbnQgaTtcbkBAIC0zMDAsNyArMzE2LDcgQEAgaW50IGlhdmZfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0ICogd2UgYXJlbid0IGdldHRpbmcgdG9vIG1hbnkgcXVldWVzXG4gXHQgKi9cbiBcdGlmICghZXJyKVxuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4rXHRcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyLCBtaW4oZXZlbnQubXNnX2xlbiwgbGVuKSk7XG4gXHRpYXZmX3ZmX3BhcnNlX2h3X2NvbmZpZyhodywgYWRhcHRlci1cdTAwM2V2Zl9yZXMpO1xuIFxuIFx0a2ZyZWUoZXZlbnQubXNnX2J1Zik7XG5AQCAtMjU3OCw3ICsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcbiBcbiBcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNldmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpO1xuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4rXHRcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyLCBtaW4obXNnbGVuLCBsZW4pKTtcbiBcdFx0aWF2Zl92Zl9wYXJzZV9od19jb25maWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgYWRhcHRlci1cdTAwM2V2Zl9yZXMpO1xuIFx0XHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpKSB7XG4gXHRcdFx0LyogcmVzdG9yZSBjdXJyZW50IG1hYyBhZGRyZXNzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5pbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTc2Nyw2ICs3NjcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX2lzX3R4dGltZV9lbmEoY29uc3Qgc3RydWN0IGljZV90eF9yaW5nICpyaW5nKVxuIFx0c3RydWN0IGljZV92c2kgKnZzaSA9IHJpbmctXHUwMDNldnNpO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiBcbitcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRyZXR1cm4gdGVzdF9iaXQocmluZy1cdTAwM2VxX2luZGV4LCAgcGYtXHUwMDNldHh0aW1lX3R4cXMpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuaW5kZXggZWYxY2UxMDZmODFiNWUuLjUzOTc0ZWJhYWZmYTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuQEAgLTE3NjIsNiArMTc2Miw3IEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX2NtZF9kZXNjIGRlc2MgPSB7MH07XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcbitcdHN0cnVjdCBpY2Vfc3FfY2QgY2QgPSB7fTtcbiBcdHUxNiBtc2dfbGVuO1xuIFx0aW50IHN0YXR1cztcbiBcbkBAIC0xNzc0LDE5ICsxNzc1LDMzIEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIFx0bXNnLm1zZ19hZGRyX2xvdyA9IGNwdV90b19sZTE2KGluLVx1MDAzZW1zZ19hZGRyX2xvdyk7XG4gXHRtc2cubXNnX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKGluLVx1MDAzZW1zZ19hZGRyX2hpZ2gpO1xuIFxuLVx0aWYgKGluLVx1MDAzZW9wY29kZSlcbitcdHN3aXRjaCAoaW4tXHUwMDNlb3Bjb2RlKSB7XG4rXHRjYXNlIGljZV9zYnFfbXNnX3dyX3A6XG4rXHRjYXNlIGljZV9zYnFfbXNnX3dyX25wOlxuIFx0XHRtc2cuZGF0YSA9IGNwdV90b19sZTMyKGluLVx1MDAzZWRhdGEpO1xuLVx0ZWxzZVxuK1x0XHQvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi9cbitcdFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgxMClcbitcdFx0XHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGljZV9zYnFfbXNnX3JkOlxuIFx0XHQvKiBkYXRhIHJlYWQgY29tZXMgYmFjayBpbiBjb21wbGV0aW9uLCBzbyBzaG9ydGVuIHRoZSBzdHJ1Y3QgYnlcbiBcdFx0ICogc2l6ZW9mKG1zZy5kYXRhKVxuIFx0XHQgKi9cbiBcdFx0bXNnX2xlbiAtPSBzaXplb2YobXNnLmRhdGEpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogRTgxMCBkb2Vzbid0IHN1cHBvcnQgcG9zdGVkIG1vZGUsIGFsd2F5cyB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRjZC5wb3N0ZWQgPSBpbi1cdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGh3LVx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMDtcbiBcbiBcdGRlc2MuZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7XG4gXHRkZXNjLm9wY29kZSA9IGNwdV90b19sZTE2KGljZV9zYnFfb3BjX25laWdoX2Rldl9yZXEpO1xuIFx0ZGVzYy5wYXJhbTAuY21kX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xuLVx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgXHUwMDI2bXNnLCBtc2dfbGVuLCBOVUxMKTtcbi1cdGlmICghc3RhdHVzIFx1MDAyNlx1MDAyNiAhaW4tXHUwMDNlb3Bjb2RlKVxuK1x0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgXHUwMDI2bXNnLCBtc2dfbGVuLCBcdTAwMjZjZCk7XG4rXHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgaW4tXHUwMDNlb3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKVxuIFx0XHRpbi1cdTAwM2VkYXRhID0gbGUzMl90b19jcHVcbiBcdFx0XHQoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKVx1MDAyNm1zZyktXHUwMDNlZGF0YSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTY1NDcsNyArNjU2Miw3IEBAIGludCBpY2Vfd3JpdGVfY2d1X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXG4ge1xuIFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IGNndV9tc2cgPSB7XG4gXHRcdC5kZXN0X2RldiA9IGljZV9nZXRfZGVzdF9jZ3UoaHcpLFxuLVx0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9ucCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGFkZHIsXG4gXHRcdC5kYXRhID0gdmFsXG4gXHR9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xuaW5kZXggZGNiODM3Y2FkZDE4MjUuLmE2MDA4ZGM3N2ZhNDM4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcbkBAIC0xMDg2LDYgKzEwODYsMTAgQEAgaWNlX3NxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxLFxuIFx0d3IzMihodywgY3EtXHUwMDNlc3EudGFpbCwgY3EtXHUwMDNlc3EubmV4dF90b191c2UpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbitcdC8qIElmIHRoZSBtZXNzYWdlIGlzIHBvc3RlZCwgZG9uJ3Qgd2FpdCBmb3IgY29tcGxldGlvbi4gKi9cbitcdGlmIChjZCBcdTAwMjZcdTAwMjYgY2QtXHUwMDNlcG9zdGVkKVxuK1x0XHRnb3RvIHNxX3NlbmRfY29tbWFuZF9lcnJvcjtcbitcbiBcdC8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiBpdCBmaW5pc2hlcyB3aXRoaW4gdGhlXG4gXHQgKiB0aW1lb3V0LCBjb3B5IHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8gdGVtcC5cbiBcdCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxuaW5kZXggNzg4MDQwZGQ2NjJlMjMuLmM1MGQ2ZmNiYWNiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmhcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XG4gLyogc3EgdHJhbnNhY3Rpb24gZGV0YWlscyAqL1xuIHN0cnVjdCBpY2Vfc3FfY2Qge1xuIFx0c3RydWN0IGxpYmllX2FxX2Rlc2MgKndiX2Rlc2M7XG4rXHR1OCBwb3N0ZWQgOiAxO1xuIH07XG4gXG4gLyogcnEgZXZlbnQgaW5mb3JtYXRpb24gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBjMzBlMjdiYmZlNmUyNS4uYjA2OWU2YzUxNGZiMTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbkBAIC01MTIsOSArNTEyLDYgQEAgaW50IGljZV9lc3dpdGNoX2F0dGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpXG4gXHRzdHJ1Y3QgaWNlX3JlcHIgKnJlcHI7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0cmVwciA9IGljZV9yZXByX2NyZWF0ZV92Zih2Zik7XG4gXHRpZiAoSVNfRVJSKHJlcHIpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyZXByKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuaW5kZXggMzEwZThmZTI5MjVjN2QuLjA4YTE3ZGVkMGFkNTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuQEAgLTI2MjMsNyArMjYyMyw3IEBAIGludCBpY2VfaW5pdF9sYWcoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGdvdG8gIGZyZWVfbHBvcnRfcmVzO1xuIFxuIFx0LyogYXNzb2NpYXRlIHJlY2lwZXMgdG8gcHJvZmlsZXMgKi9cbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9QUk9GSURfSVBWNl9HVFBVX0lQVjZfVENQX0lOTkVSOyBuKyspIHtcbitcdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuKyspIHtcbiBcdFx0ZXJyID0gaWNlX2FxX2dldF9yZWNpcGVfdG9fcHJvZmlsZShcdTAwMjZwZi1cdTAwM2VodywgbixcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZyZWNpcGVfYml0cywgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTc4Li5mYzlkNGUwZmE3NTU4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbitcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4rXG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC0zNDkxLDkgKzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0TkVUSUZfRl9SWEhBU0g7XG4gXG4gXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXHQgIHxcbi1cdFx0XHQgTkVUSUZfRl9JUF9DU1VNICB8XG4gXHRcdFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxuLVx0XHRcdCBORVRJRl9GX0lQVjZfQ1NVTTtcbitcdFx0XHQgTkVUSUZfRl9IV19DU1VNO1xuIFxuIFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuIFx0XHRcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxuQEAgLTM1NTUsMTIgKzM1NTQsNiBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHQvKiBBbGxvdyBjb3JlIHRvIG1hbmFnZSBJUlFzIGFmZmluaXR5ICovXG4gXHRuZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpO1xuIFxuLVx0LyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzXG4tXHQgKiBuZG8gY2FsbGJhY2suXG4tXHQgKi9cbi1cdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXG4tXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XG4tXG4gXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKG5ldGRldiwgSUNFX01BWF9UU09fU0laRSk7XG4gfVxuIFxuQEAgLTY1MDAsMTggKzY0OTMsNiBAQCBpY2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spXG4gXHRcdHJldCA9IGljZV9zZXRfbG9vcGJhY2sodnNpLCAhIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSykpO1xuIFxuLVx0LyogRHVlIHRvIEU4MzAgaGFyZHdhcmUgbGltaXRhdGlvbnMsIFRTTyAoTkVUSUZfRl9BTExfVFNPKSB3aXRoIEdDU1xuLVx0ICogKE5FVElGX0ZfSFdfQ1NVTSkgaXMgbm90IHN1cHBvcnRlZC5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFx1MDAyNlx1MDAyNiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfQUxMX1RTTykpKSB7XG4tXHRcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcbi1cdFx0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJUbyBlbmFibGUgSFcgY2hlY2tzdW0sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgVFNPLlxcblwiKTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuaW5kZXggZjhlNjk2MzBmYjcyNjcuLjNlZGU0YzFhNWE4YTViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuQEAgLTIzNjgsNiArMjM2OCw5IEBAIGludCBpY2VfcGFyc2VyX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgaWNlX3BhcnNlcl9yZXN1bHQgKnJzbHQsXG4gXHR1MTYgcHJvdG9fb2ZmID0gMDtcbiBcdHUxNiBvZmY7XG4gXG4rXHRpZiAocnNsdC1cdTAwM2VwdHlwZSBcdTAwM2U9IElDRV9GTE9XX1BUWVBFX01BWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRtZW1zZXQocHJvZiwgMCwgc2l6ZW9mKCpwcm9mKSk7XG4gXHRzZXRfYml0KHJzbHQtXHUwMDNlcHR5cGUsIHByb2YtXHUwMDNlcHR5cGVzKTtcbiBcdGlmIChibGsgPT0gSUNFX0JMS19TVykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5pbmRleCBlYzNkODlkOGQ0ZDM0NS4uZWFlYzM2YWI2YWUzZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMzQ2LDcgKzM0Niw3IEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMocGYtXHUwMDNlcHRwLmNhY2hlZF9waGNfdGltZSxcbitcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUpLFxuIFx0XHRcdFx0ICAgICAoaW5fdHN0YW1wIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgbWFzayk7XG4gfVxuIFxuQEAgLTMwMzcsNiArMzAzNywxMSBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXHUwMDI2cGYtXHUwMDNlcHRwO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChwdHAtXHUwMDNlc3RhdGUgPT0gSUNFX1BUUF9VTklOSVQpIHtcbitcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgd2FzIG5vdCBpbml0aWFsaXplZCwgc2tpcHBpbmcgcmVidWlsZFxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHB0cC1cdTAwM2VzdGF0ZSA9PSBJQ0VfUFRQX1JFQURZKSB7XG4gXHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGYsIHJlc2V0X3R5cGUpO1xuIFx0fSBlbHNlIGlmIChwdHAtXHUwMDNlc3RhdGUgIT0gSUNFX1BUUF9SRVNFVFRJTkcpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0YzMuLmM2MDQ5MDk3ZjQ5ZDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTM1Miw2ICszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuK1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbitcdFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcbitcdH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogRmx1c2ggU0JRIHRvIGVuc3VyZSBwb3N0ZWQgd3JpdGVzIGNvbXBsZXRlIGJlZm9yZSBTWU5DIGNvbW1hbmQuXG4rXHQgKiBTa2lwIGZvciBFODEwIC0gRlcgYWx3YXlzIHNlbmRzIGNvbXBsZXRpb25zLCBzbyB3cml0ZXMgYXJlIHN5bmNocm9ub3VzLlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgIT0gSUNFX01BQ19FODEwKSB7XG4rXHRcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGRldl93YXJuKGljZV9od190b19kZXYoaHcpLCBcIkZhaWxlZCB0byBmbHVzaCBTQlE6ICVkXFxuXCIsIGVycik7XG4rXHR9XG4gXG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuQEAgLTQ0Miw3ICs0NTYsNyBAQCBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MzIgYWRkciwgdTMyIHZhbClcbiB7XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuIFx0XHQuZGVzdF9kZXYgPSBpY2VfcHRwX2dldF9kZXN0X2Rldl9lODI1KGh3LCBwb3J0KSxcbi1cdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLFxuK1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksXG4gXHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiBcdFx0LmRhdGEgPSB2YWxcbkBAIC0yNjE0LDE2ICsyNjI4LDE4IEBAIGljZV9yZWFkXzY0Yl9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBsb3dfYWRkciwgdTY0ICp2YWwpXG4gICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlclxuICAqXG4gICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgZm9yIHRoZSBnaXZlbiBwb3J0IG92ZXIgdGhlIGRldmljZSBzaWRlYmFuZCBxdWV1ZS5cbisgKiBVc2VzIHBvc3RlZCB3cml0ZXMgLSByZXF1aXJlcyBTQlEgZmx1c2ggYmVmb3JlIFNZTkNfRVhFQ19DTUQuXG4gICovXG4gc3RhdGljIGludFxuIGljZV93cml0ZV9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXG4ge1xuLVx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcbitcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxuK1x0XHQuZGF0YSA9IHZhbFxuK1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcG9ydCwgb2Zmc2V0KTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuIFxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjgxMSwxNiArMjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbClcbiBpbnRcbiBpY2Vfd3JpdGVfcXVhZF9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcXVhZCwgdTE2IG9mZnNldCwgdTMyIHZhbClcbiB7XG4tXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gezB9O1xuK1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbitcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4rXHRcdC5kYXRhID0gdmFsXG4rXHR9O1xuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGljZV9maWxsX3F1YWRfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcXVhZCwgb2Zmc2V0KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3I7XG4tXHRtc2cuZGF0YSA9IHZhbDtcbi1cbiBcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cIixcbkBAIC00NTE0LDE4ICs0NTMwLDE5IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcGh5X3JlZ19lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgYWRkciwgdTMyICp2YWwpXG4gICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBQSFlcbiAgKlxuICAqIFdyaXRlIGEgdmFsdWUgdG8gYSByZWdpc3RlciBvZiB0aGUgZXh0ZXJuYWwgUEhZIG9uIHRoZSBFODEwIGRldmljZS5cbisgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbi1cdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XG4rXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuK1x0XHQuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCxcbitcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4rXHRcdC5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLFxuK1x0XHQubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksXG4rXHRcdC5kYXRhID0gdmFsXG4rXHR9O1xuIFx0aW50IGVycjtcbiBcbi1cdG1zZy5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpO1xuLVx0bXNnLm1zZ19hZGRyX2hpZ2ggPSB1cHBlcl8xNl9iaXRzKGFkZHIpO1xuLVx0bXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyO1xuLVx0bXNnLmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzA7XG4tXHRtc2cuZGF0YSA9IHZhbDtcbi1cbiBcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcbkBAIC01NSw3ICs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQge1xuIFxuIGVudW0gaWNlX3NicV9tc2dfb3Bjb2RlIHtcbiBcdGljZV9zYnFfbXNnX3JkXHRcdD0gMHgwMCxcbi1cdGljZV9zYnFfbXNnX3dyXHRcdD0gMHgwMSxcbitcdGljZV9zYnFfbXNnX3dyX3BcdD0gMHgwMSxcbiBcdGljZV9zYnFfbXNnX3dyX25wXHQ9IDB4MDJcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuaW5kZXggN2UwMGUwOTE3NTZkZGMuLmUwNGRlMDIxNTU5NjY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbkBAIC00ODQsMTIgKzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0Z290byB0ZWFyZG93bjtcbiBcdFx0fVxuIFxuLVx0XHRyZXR2YWwgPSBpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbi1cdFx0aWYgKHJldHZhbCkge1xuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiRmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZFwiLFxuLVx0XHRcdFx0dmYtXHUwMDNldmZfaWQsIHJldHZhbCk7XG4tXHRcdFx0aWNlX3ZmX3ZzaV9yZWxlYXNlKHZmKTtcbi1cdFx0XHRnb3RvIHRlYXJkb3duO1xuK1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKSB7XG4rXHRcdFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XG4rXHRcdFx0aWYgKHJldHZhbCkge1xuK1x0XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJGYWlsZWQgdG8gYXR0YWNoIFZGICVkIHRvIGVzd2l0Y2gsIGVycm9yICVkXCIsXG4rXHRcdFx0XHRcdHZmLVx1MDAzZXZmX2lkLCByZXR2YWwpO1xuK1x0XHRcdFx0aWNlX3ZmX3ZzaV9yZWxlYXNlKHZmKTtcbitcdFx0XHRcdGdvdG8gdGVhcmRvd247XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHNldF9iaXQoSUNFX1ZGX1NUQVRFX0lOSVQsIHZmLVx1MDAzZXZmX3N0YXRlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggNGNhMWEwNjAyMzA3ZDAuLmIyMDYzYTU0ZDZkODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTY1NCw3ICsxNjU0LDcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0XHRcdHJldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXHUwMDNlZGF0YSxcbiBcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmw0X3Byb3RvLCBcdTAwMjZmcmFnX29mZik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XG4gXHRcdH1cbiBcbiBcdFx0LyogZGVmaW5lIG91dGVyIHRyYW5zcG9ydCAqL1xuQEAgLTE2NzMsMTEgKzE2NzMsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdFx0cmV0dXJuIC0xO1xuLVxuLVx0XHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb21wdXRlIG91dGVyIEwzIGhlYWRlciBzaXplICovXG5AQCAtMTczNiwxNCArMTczMiwxNCBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIGV4dGhkciAtIHNrYi1cdTAwM2VkYXRhLCBcdTAwMjZsNF9wcm90byxcbiBcdFx0XHRcdFx0IFx1MDAyNmZyYWdfb2ZmKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldHVybiAtMTtcbitcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdH1cbiBcbiBcdC8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi9cbiBcdGwzX2xlbiA9IGw0LmhkciAtIGlwLmhkcjtcbiBcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXHUwMDNjXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xuIFxuLVx0aWYgKCh0eF9yaW5nLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjZcbitcdGlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZmlyc3QtXHUwMDNldHhfZmxhZ3MgXHUwMDI2IElDRV9UWF9GTEFHU19UU08pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFza2JfY3N1bV9pc19zY3RwKHNrYikpIHtcbiBcdFx0LyogU2V0IEdDUyAqL1xuQEAgLTE3ODksMTUgKzE3ODUsMTcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4tXHRcdGlmIChmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTylcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xuIFx0fVxuIFxuIFx0b2ZmLVx1MDAzZXRkX2NtZCB8PSBjbWQ7XG4gXHRvZmYtXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcbiBcdHJldHVybiAxO1xuK1xuK2NoZWNrc3VtX3N3X2ZiOlxuK1x0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gc2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG5AQCAtMjE3LDYgKzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMixcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcbitcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjBjLi45MDUyZTcxZTljOTllMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbkBAIC04MTIsNyArODEyLDggQEAgdm9pZCBpY2VfcmVzZXRfYWxsX3ZmcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0fVxuIFx0XHRpY2VfdmZfcG9zdF92c2lfcmVidWlsZCh2Zik7XG4gXG4tXHRcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuK1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxuK1x0XHRcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2dmYtXHUwMDNlY2ZnX2xvY2spO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcbmluZGV4IGJlNjZmOWIyZTEwMWNhLi5kYzVhZDc4NGY0NTZmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuY1xuQEAgLTM1NTUsNyArMzU1NSw2IEBAIGludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0cGNpX3NyaW92X3NldF90b3RhbHZmcyhhZGFwdGVyLVx1MDAzZXBkZXYsIGlkcGZfZ2V0X21heF92ZnMoYWRhcHRlcikpO1xuIFx0bnVtX21heF92cG9ydHMgPSBpZHBmX2dldF9tYXhfdnBvcnRzKGFkYXB0ZXIpO1xuLVx0YWRhcHRlci1cdTAwM2VtYXhfdnBvcnRzID0gbnVtX21heF92cG9ydHM7XG4gXHRhZGFwdGVyLVx1MDAzZXZwb3J0cyA9IGt6YWxsb2Nfb2JqcygqYWRhcHRlci1cdTAwM2V2cG9ydHMsIG51bV9tYXhfdnBvcnRzKTtcbiBcdGlmICghYWRhcHRlci1cdTAwM2V2cG9ydHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM1NzYsNiArMzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0Z290byBlcnJfbmV0ZGV2X2FsbG9jO1xuIFx0fVxuIFxuK1x0LyogU2V0IG1heF92cG9ydHMgb25seSBhZnRlciB2cG9ydHMsIG5ldGRldnMgYW5kIHZwb3J0X2NvbmZpZyBidWZmZXJzXG4rXHQgKiBhcmUgYWxsb2NhdGVkIHRvIG1ha2Ugc3VyZSBtYXhfdnBvcnQgYm91bmQgbG9vcHMgZG9uJ3QgZW5kIHVwXG4rXHQgKiBjcmFzaGluZywgZm9sbG93aW5nIGFsbG9jYXRpb24gZXJyb3JzIG9uIGluaXQuXG4rXHQgKi9cbitcdGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xuK1xuIFx0LyogU3RhcnQgdGhlIG1haWxib3ggdGFzayBiZWZvcmUgcmVxdWVzdGluZyB2ZWN0b3JzLiBUaGlzIHdpbGwgZW5zdXJlXG4gXHQgKiB2ZWN0b3IgaW5mb3JtYXRpb24gcmVzcG9uc2UgZnJvbSBtYWlsYm94IGlzIGhhbmRsZWRcbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDkuMzAzNDU3NjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNDk0NzQwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyczogYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYC4gSSBzZWUgYSBzZXJpZXMgb2YgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgc28gSSdsbCBnbyB0aHJvdWdoIHRoZW0gbWV0aG9kaWNhbGx5LlxuXG5GaXJzdCwgaW4gYGlhdmZfdmlydGNobmwuY2AsIHRoZXJlJ3MgZW5oYW5jZWQgdmFsaWRhdGlvbiBpbiBgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzYC4gSXQgbm93IGNvbnNpZGVycyB0aGUgbWVzc2FnZSBsZW5ndGggKGBtc2dsZW5gKSB3aGVuIHZhbGlkYXRpbmcgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucywgd2hpY2ggaXMgZ29vZCBmb3Igcm9idXN0bmVzcy4gVGhlIHVzZSBvZiBgbWluKG1zZ2xlbiwgbGVuKWAgaW4gYGlhdmZfZ2V0X3ZmX2NvbmZpZ2AgYW5kIGBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb25gIHN1Z2dlc3RzIHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCBtZXNzYWdlcyBncmFjZWZ1bGx5LlxuXG5OZXh0LCBpbiBgaWNlLmhgLCB0aGUgY2hlY2sgaW4gYGljZV9pc190eHRpbWVfZW5hYCBzZWVtcyB0byBiZSBmaWx0ZXJpbmcgZm9yIHNwZWNpZmljIFZTSSB0eXBlcywgbGlrZWx5IG9wdGltaXppbmcgdGhlIHRyYW5zbWl0IHRpbWUgZW5hYmxlIGxvZ2ljLlxuXG5gaWNlX2NvbW1vbi5jYCBzaG93cyBjaGFuZ2VzIHRvIGBpY2Vfc2JxX3J3X3JlZ2AsIHdoaWNoIGhhbmRsZXMgU3lzdGVtIEJ1cyBRdWV1ZSAoU0JRKSBtZXNzYWdlIHdyaXRlcyBhbmQgcmVhZHMsIHdpdGggc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBwb3N0ZWQgYW5kIG5vbi1wb3N0ZWQgd3JpdGVzLiBUaGUgdXNlIG9mIGBpY2Vfc2JxX21zZ193cl9ucGAgaW4gYGljZV93cml0ZV9jZ3VfcmVnYCBzdWdnZXN0cyBhbiBvcHRpbWl6YXRpb24gaW4gcmVnaXN0ZXIgYWNjZXNzLiBUaGUgY2hhbmdlcyB0byBgaWNlX2NvbnRyb2xxLmNgIGFuZCBgaWNlX2NvbnRyb2xxLmhgIHJlZ2FyZGluZyBwb3N0ZWQgbWVzc2FnZXMgaW4gYGljZV9zcV9zZW5kX2NtZGAgYXJlIGludGVyZXN0aW5nOyBub3Qgd2FpdGluZyBmb3IgY29tcGxldGlvbiBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSwgYnV0IHJlcXVpcmVzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGEgY291cGxlIG9mIGNoYW5nZXMgaW4gYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX3ZmX2xpYi5jYCBzdGFuZCBvdXQuIFRoZSByZW1vdmFsIG9mIHRoZSBgaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpYCBjaGVjayBpbiBgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmYCBhbmQgYGljZV9yZXNldF9hbGxfdmZzYCBoaW50cyB0aGF0IHRoZXkgYXJlIGdlbmVyYWxpemluZyBlc3dpdGNoIGF0dGFjaCBsb2dpYy4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGluIHRoZSBjb250ZXh0IG9mIGVzd2l0Y2ggbW9kZS4gQW5kIHNpbWlsYXJseSBmb3IgYGljZV9zcmlvdi5jYCwgYSBjaGVjayBmb3IgZXN3aXRjaCBtb2RlIGhhcyBiZWVuIGFkZGVkLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHN3aXRjaGRldi5cblxuSW4gYGljZV9sYWcuY2AsIGFuIHVwZGF0ZSB0byB0aGUgbG9vcCBib3VuZCBpbiBgaWNlX2luaXRfbGFnYCBzdWdnZXN0cyBhIHBvdGVudGlhbCByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIExBRyBwcm9maWxlIGhhbmRsaW5nOyBjaGFuZ2luZyBmcm9tIGEgdmVyeSBzcGVjaWZpYyBlbnVtIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9maWxlcyBzb3VuZHMgbW9yZSBnZW5lcmFsLlxuXG5gaWNlX2xpYi5jYCBub3cgY29uZGl0aW9uYWxseSBzZXRzIHRoZSBgSUNFX1RYX1JJTkdfRkxBR1NfR0NTYCBmbGFnIGJhc2VkIG9uIGhhcmR3YXJlIHN1cHBvcnQgKGBJQ0VfRl9HQ1NgKSB3aGVuIGFsbG9jYXRpbmcgcmluZ3MsIHdoaWNoIG1lYW5zIHRoZSByaW5nIGZsYWdzIG1heSBjaGFuZ2UgYmFzZWQgb24gdGhlIGhhcmR3YXJlLlxuXG5gaWNlX21haW4uY2AgaXMgc2lnbmlmaWNhbnQuIFRoZSByZW1vdmFsIG9mIGBORVRJRl9GX0lQX0NTVU1gIGFuZCBgTkVUSUZfRl9JUFY2X0NTVU1gIGluIGBpY2Vfc2V0X25ldGRldl9mZWF0dXJlc2AgaW4gZmF2b3Igb2YgYE5FVElGX0ZfSFdfQ1NVTWAgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIGNvbXBsZXRlIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgYmVuZWZpY2lhbCBzaGlmdC4gVGhlIHJlbW92YWwgb2YgdGhlIG11dHVhbCBleGNsdXNpdml0eSBjaGVjayBmb3IgVFNPIGFuZCBHQ1MsIGFuZCB0aGUgcmVtb3ZhbCBvZiBoYXJkd2FyZSBsaW1pdGF0aW9ucyBmb3IgVFNPIHdpdGggR0NTLCBzaG93cyB0aGV5J3JlIG1ha2luZyBhbiBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgYWJpbGl0eSB0byB1c2UgbW9yZSBtb2Rlcm4gZmVhdHVyZXMuXG5cbkluIGBpY2VfcGFyc2VyLmNgLCB0aGUgYm91bmRzIGNoZWNrIGluIGBpY2VfcGFyc2VyX3Byb2ZpbGVfaW5pdGAgZm9yIGByc2x0LVx1MDAzZXB0eXBlYCBpcyBhbm90aGVyIGdvb2Qgc2VjdXJpdHkvcm9idXN0bmVzcyBjaGVjay5cblxuVGhlIFBUUC1yZWxhdGVkIGNoYW5nZXMgaW4gYGljZV9wdHAuY2AgYW5kIGBpY2VfcHRwX2h3LmNgICh1c2luZyBgUkVBRF9PTkNFYCwgY2hlY2tpbmcgYHB0cC1cdTAwM2VzdGF0ZWAsIGZsdXNoaW5nIFNCUSBpbiBgaWNlX3B0cF9leGVjX3Rtcl9jbWRgLCBhbmQgdXNpbmcgYGljZV9zYnFfbXNnX3dyX3BgKSBzdWdnZXN0IGVuaGFuY2VtZW50cyB0byBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBoYW5kbGluZy4gSXQgaW1wbGllcyB0aGUgdXNhZ2Ugb2YgdGhlIGJ1cyBxdWV1ZSBmb3IgdGhpcyBwdXJwb3NlLlxuXG5gaWNlX3R4cnguY2Agbm93IHVzZXMgYSBmYWxsYmFjayBsYWJlbCBmb3Igc29mdHdhcmUgY2hlY2tzdW0uIEFsc28sIGl0IG5vdyBjaGVja3MgYElDRV9UWF9SSU5HX0ZMQUdTX0dDU2AgaW5zdGVhZCBvZiBgTkVUSUZfRl9IV19DU1VNYCwgd2hpY2ggcmVsYXRlcyB0byBwcmV2aW91cyBmZWF0dXJlIGNoYW5nZXMuXG5cbkZpbmFsbHksIGBpZHBmX3ZpcnRjaG5sLmNgIGVuc3VyZXMgYGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0c2AgaXMgc2V0ICphZnRlciogYWxsb2NhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGNyYXNoZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHJvYnVzdCBpbml0aWFsaXphdGlvbi5cblxuTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGNsZWFybHkgZm9yIG5ldHdvcmsgZnVuY3Rpb25zLiBUaGUgYGlhdmZgIHBhcnQgZGVhbHMgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiwgYGljZWAgaXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBhbmQgYGlkcGZgIGlzIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBMaW51eCBEcml2ZXIuXG5cbkNhbiB3ZSBmdXp6IHRoZW0/IFN5emthbGxlciBmdXp6ZXIgaXMgYSBzdHJvbmcgY2FuZGlkYXRlLCBhcyBpdCBpcyBhIGtlcm5lbCBmdXp6ZXIuIEl0IG9mdGVuIGZvY3VzZXMgb24gbmV0bGluayBhbmQgaW9jdFxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MjMuNTUyOTMzNDU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTU5NjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTU5Mj1DT05GSUdfSTQwRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy01OTQtQ09ORklHX0ZNMTBLPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjYwOTpDT05GSUdfSUNFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTYxMC1DT05GSUdfRk0xMEs9eVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0ZNMTBLKSArPSBmbTEway9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSUNFKSArPSBpY2UvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX0lEUEYpICs9IGlkcGYvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9OD1zdWJkaXItY2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lDRSkgKz0gaWNlLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9NjA9aWNlLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSBpY2VfeHNrLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjE6aWNlLSQoQ09ORklHX0lDRV9TV0lUQ0hERVYpICs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZS02Mi1pY2UtJChDT05GSUdfR05TUykgKz0gaWNlX2duc3Mub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MzppY2UtJChDT05GSUdfSUNFX0hXTU9OKSArPSBpY2VfaHdtb24ub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaC0xMS12b2lkIGljZV9lc3dpdGNoX2RldGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6MzU6I2Vsc2UgLyogQ09ORklHX0lDRV9TV0lUQ0hERVYgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaC0zNi1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oPTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYykgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6OTk6I2VuZGlmIC8qIENPTkZJR19JQ0VfU1dJVENIREVWICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTgtdm9pZCBpY2VfaHdtb25faW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTk9dm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtMTEtc3RhdGljIGlubGluZSB2b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg9MTI9c3RhdGljIGlubGluZSB2b2lkIGljZV9od21vbl9leGl0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtMTQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA1MC1zdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jcm9zc3RzdGFtcF9jZmcgaWNlX2Nyb3NzdHN0YW1wX2NmZ19lODMwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjA2MzojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDY0LS8qKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0yMTc1PXN0YXRpYyBpbnQgaWNlX3B0cF9nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTAtXFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTkzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTQtXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MjUyMz1zdGF0aWMgdm9pZCBpY2VfcHRwX3NldF9mdW5jc19lODMwKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyNTI1OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MjYtXFx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXFx1MDAzZXBkZXYpIFxcdTAwMjZcXHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTMwLVxcdC8qIFJlc3Qgb2YgdGhlIGNvbmZpZyBpcyB0aGUgc2FtZSBhcyBiYXNlIEU4MTAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MjYuNDY4OTAzMzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5MDc2MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEludGVsIEV0aGVybmV0IERyaXZlcnM6IEEgRmVhc2liaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBpY2VgLCBgaWF2ZmAsIGFuZCBgaWRwZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoZW0/IEkga25vdyBQQ0kgZHJpdmVycyBhcmUgZ2VuZXJhbGx5IGZhaXIgZ2FtZSBpZiB0aGV5J3JlIGVuYWJsZWQgYW5kIHN5emthbGxlciB1c2VzIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpYC4gQnV0LCBJJ20gYXdhcmUgdGhhdCBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBoYXMgaXRzIGxpbWl0YXRpb25zLlxuXG5UaGVuIEkgcmVjYWxsZWQgdGhhdCBgV29ydGhGdXp6aW5nYCBjYXZlYXQg4oCTIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2hcIiBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSB3aGVuIHNvZnR3YXJlIGVtdWxhdGlvbiBpcyBlbXBsb3llZCAodGhpbmsgdXNiIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSkuIFNvLCBpZiB0aGVyZSBpc24ndCBhbnkgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGBpY2VgLCBgaWF2ZmAsIG9yIGBpZHBmYCwgdGhhdCBwcm9iYWJseSBtZWFucyB0aGVzZSBkcml2ZXJzIGFyZSBvdXQgb2YgcmVhY2ggZm9yIGEgc3RhbmRhcmQgR0NFIG9yIFFFTVUgc2V0dXAuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUUVNVSAqYWN0dWFsbHkqIG9mZmVycyBlbXVsYXRpb24gZm9yIGBpYXZmYCBvciBgaWNlYC4gSSBjYW4ndCBqdXN0IGFzc3VtZSB0aGV5J3JlIG1pc3NpbmcuIEEgcXVpY2sgbWVudGFsIHJldmlldyBvZiBRRU1VJ3MgbmV0d29yayBkZXZpY2VzIGdpdmVzIG1lIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBldGMuLCBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIGB2aXJ0aW8tbmV0YC4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljIGZvciB0aGUgRTgwMCBzZXJpZXMgb3IgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbmFsaXR5LiBCdXQgSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIFFFTVUgZG9jdW1lbnRhdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDozMi44NTk2NjYzMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjQyNDE4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHcvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MzQuNzIyMTAzOTE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MTgzNDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwtQmFzZWQgSUNFIEVtdWxhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVjYWxpYnJhdGUuIEkgd2FzIGp1c3Qgc2VhcmNoaW5nIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG5vdCBRRU1VLiBXcm9uZyBjb250ZXh0LiBOb3csIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBrZXJuZWwtbGV2ZWwgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgYGljZWAgZHJpdmVyLiBZb3Uga25vdywgc29tZXRoaW5nIGFraW4gdG8gYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lyZWxlc3Mgb3IgYG5ldGRldnNpbWAgZm9yIG5ldHdvcmsgZGV2aWNlcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIGEgd2F5IHRvIHRlc3QgYW5kIGludGVyYWN0IHdpdGggdGhpcyBgaWNlYCBkcml2ZXIgd2l0aG91dCBuZWVkaW5nIHRoZSBhY3R1YWwgaGFyZHdhcmUuIExldCdzIHNlZS4uLiBgbmV0ZGV2c2ltYCBpc24ndCBnb2luZyB0byBjdXQgaXQsIEkgYWxyZWFkeSBrbm93IHRoYXQuIFNvLCB0aGUgcXVlc3Rpb24gbm93IGlzLCBkb2VzICphbnkqIG9mIHRoZSBrZXJuZWwgcHJvdmlkZSBtZSB3aXRoIGVtdWxhdGlvbiBmb3IgYGljZWA/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjM4LjU5Mzk0MDYwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg5ODQ0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9wY2lfdGJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMTA9c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0MzogKiBAZW50OiBlbnRyeSBpbiBpY2VfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3NTQ9c3RhdGljIHZvaWQgaWNlX3BjaV9lcnJfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTc1OTovKiBpY2VfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzYwLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzY2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2OC1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MTktfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODIwOk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpY2VfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgyMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4MzI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGljZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4MzQ6XFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNS1cXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjQwLjM4Mzc4OTgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5OTYxMjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgSW5hY2Nlc3NpYmxlIENvZGUgUGF0aHMqKlxuXG5Pa2F5LCB0aGVzZSBQQ0kgSURzIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8gcmVhbCBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgdG91Y2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSBrbm93IFN5emthbGxlciBoYXMgYHN5el9wY2lgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nIGFzIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLiBIb3dldmVyLCBpdCdzIG5vdCBhICpmdWxsKiBoYXJkd2FyZSBlbXVsYXRvcjsgaXQncyBtb3JlIGxpa2UgYSB0b29sIHRvIGluamVjdCBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gSG1tLCBJIHdvbmRlciBpZiBTeXprYWxsZXIgZnV6emVkIHNvbWV0aGluZyBsaWtlIGBpY2VgIHVzaW5nIHRoYXQgbWV0aG9kPyBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIFN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gY29uZmlybSwgYnV0IHRoZSBwcm9tcHQgaXMgaGVscGZ1bCBhbmQgY2xlYXI6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiLiBJZiBgc3l6X3BjaWAgY2FuJ3QgcmVhY2ggaXQsIHRoZW4gaXQncyBjbGVhcmx5IGltcG9zc2libGUgdG8gcmVhY2guIFdhaXQgYSBtb21lbnQsIGBzeXpfcGNpYCBpc24ndCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYnV0IGEgZnV6emVyIHBzZXVkby1kZXZpY2UuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgZW11bGF0ZWQgaGFyZHdhcmUuIElmIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIChsaWtlIHRoZSBleGFtcGxlcyBnaXZlbiksIHRoZW4gaXQncyB1bnJlYWNoYWJsZS5cblxuT2theSwgZG9lcyBTeXprYWxsZXIgdGVzdCBFdGhlcm5ldCBkcml2ZXJzIHdpdGggYHN5el9wY2lgPyBJIGtub3cgU3l6a2FsbGVyIGRvZXMgdXNlIGBzeXpfcGNpYCB0byBmdXp6IHNvbWUgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCdzIHByZXR0eSBzaGFsbG93LiBTbywgYmFjayB0byBgaWNlYCBvciBgaWF2ZmAsIGNhbiB0aGV5IGFjdHVhbGx5IGJlIHJlYWNoZWQ/IFdhaXQsIGBpYXZmYCBpcyBhIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBDYW4gaXQgZXZlbiBiZSBpbnN0YW50aWF0ZWQgaW4gUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZS4gU28sIHdoYXQgZWxzZSBpcyBwb3NzaWJsZT9cblxuVGhlbiBJIHdlbnQgYmFjayB0byB0aGUgcHJvbXB0LCB3aGljaCBjb25maXJtczogXCIuLi5pbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgU2luY2UgYGljZWAsIGBpYXZmYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGZ1bmRhbWVudGFsbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgaXNuJ3Qgc29tZSBvYnNjdXJlIGVtdWxhdGlvbiB0aGF0IEknbSBtaXNzaW5nLCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDo0OS4zNzk5MjEyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDc0Mjc5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lBVkZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNTA9Y29uZmlnIEk0MEVfRENCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI2MC0jIHRoaXMgaXMgaGVyZSB0byBhbGxvdyBzZWFtbGVzcyBtaWdyYXRpb24gZnJvbSBJNDBFVkYgLS1cXHUwMDNlIElBVkYgbmFtZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjYxOiMgc28gdGhhdCBDT05GSUdfSUFWRiBzeW1ib2wgd2lsbCBhbHdheXMgbWlycm9yIHRoZSBzdGF0ZSBvZiBDT05GSUdfSTQwRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yNjItY29uZmlnIElBVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19JNDBFKSArPSBpNDBlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19JQVZGKSArPSBpYXZmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19GTTEwSykgKz0gZm0xMGsvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlPTEwPXN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlLTExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0lBVkYpICs9IGlhdmYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGUtMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjUxLjI4NzM1NDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODQzMzkzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipJRFBGIEVtdWxhdGlvbjogQSBRdWljayBDaGVjayoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoZXJlIGFueSBjdXJyZW50LCBhY3RpdmVseSBtYWludGFpbmVkIGVtdWxhdGlvbiBvZiB0aGUgSURQRiBzdGFuZGFyZD9cIiBJIGtub3cgZVB1YiBpcyB0aGUgbW9zdCBjb21tb24gZm9ybWF0LCBhbmQgdGhlIElEUEYgKEludGVybmF0aW9uYWwgRGlnaXRhbCBQdWJsaXNoaW5nIEZvcnVtKSB3YXMgcGl2b3RhbCBpbiBpdHMgZGV2ZWxvcG1lbnQuIE5vdyB0aGF0IHRoZSBXM0MgaGFzIHRha2VuIG92ZXIsIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgcHJvamVjdHMgb3V0IHRoZXJlIHRoYXQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGVtdWxhdGluZyB0aGUgKm9sZGVyKiBJRFBGIHNwZWNpZmljYXRpb25zIGZvciBjb21wYXRpYmlsaXR5IHRlc3RpbmcsIGhpc3RvcmljYWwgYW5hbHlzaXMsIG9yIHBlcmhhcHMgZXZlbiByZXRyby1jb21wdXRpbmcgcHVycG9zZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBhbnkgc3VjaCBlbXVsYXRpb24gZXhpc3RzLCBvciBpZiB0aGUgZm9jdXMgaGFzIHNvbGVseSBzaGlmdGVkIHRvIG1vcmUgY29udGVtcG9yYXJ5IHN0YW5kYXJkcy4gSXQncyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRoZSBldm9sdXRpb24gb2YgdGhlIGZvcm1hdCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDo1NC4xNzE3MDE5NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTMwMTc4NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lEUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTU9Q09ORklHX0lHQz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTY6Q09ORklHX0lEUEY9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNTk3LSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYxMT1DT05GSUdfSUdDPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjYxMjpDT05GSUdfSURQRj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTMtIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19JQ0UpICs9IGljZS9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSURQRikgKz0gaWRwZi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lEUEYpICs9IGlkcGYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlPTg9aWRwZi15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZToyMDppZHBmLSQoQ09ORklHX0lEUEZfU0lOR0xFUSlcXHQrPSBpZHBmX3NpbmdsZXFfdHhyeC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZS0yMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTc0Nj1zdGF0aWMgaW5saW5lIGludCBpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHUxNiBxX21vZGVsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTc0Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6NzQ4OlxcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTc0OS1cXHQgICAgICAgcV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0xNTUwPWludCBpZHBmX3NlbmRfY3JlYXRlX3Zwb3J0X21zZyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNTcxOlxcdGlmIChhZGFwdGVyLVxcdTAwM2VyZXFfdHhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE1NzItXFx0XFx0dnBvcnRfbXNnLVxcdTAwM2V0eHFfbW9kZWwgPSBjcHVfdG9fbGUxNihWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNTc2OlxcdGlmIChhZGFwdGVyLVxcdTAwM2VyZXFfcnhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE1NzctXFx0XFx0dnBvcnRfbXNnLVxcdTAwM2VyeHFfbW9kZWwgPSBjcHVfdG9fbGUxNihWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MTYyNj1pbnQgaWRwZl9jaGVja19zdXBwb3J0ZWRfZGVzY19pZHMoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTYzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNjM1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE2MzYtXFx0ICAgICh2cG9ydF9tc2ctXFx1MDAzZXJ4cV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU0lOR0xFIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjU1LjkyNDcyNTA5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2MTYzNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGUgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUuIFRoZSBwcm9tcHQncyB3b3JkaW5nIGlzIHF1aXRlIHNwZWNpZmljOiBcImltcG9zc2libGUgdG8gcmVhY2guLi4gZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0J3Mga2V5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgaWRwZmAuIE5vcGUsIHRoZXJlIGlzbid0IGFueS4gVGhhdCBtZWFucyB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgcGxhaW4gYW5kIHNpbXBsZS4gV2UncmUgZGVhbGluZyB3aXRoIFBDSSBkcml2ZXJzIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IHJlbWVtYmVyIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UuIFllcywgYHN5el9wY2lgIGV4aXN0cywgaXQgYWxsb3dzIGZ1enppbmcgb2YgUENJIGRyaXZlcnMuIEJ1dCBpdCdzIGxpbWl0ZWQuIEl0IGNhbiBpbmplY3QgYSBmYWtlIGRldmljZSBidXQgdXN1YWxseSBjYW4ndCBlbXVsYXRlIGhhcmR3YXJlIGJlaGF2aW9ycyBwcm9wZXJseS4gT2Z0ZW4sIHByb2JlIGZ1bmN0aW9ucyBmYWlsIGVhcmx5IGJlY2F1c2Ugb2YgdGhpcy4gVXN1YWxseSBub3Qgd29ydGggZnV6emluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcy4gVGhlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvYC4gT2theSwgdGhlc2UgYXJlIGFsbCBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLCBoYXJkd2FyZS1zcGVjaWZpYy4gU2luY2UgdGhleSBsYWNrIHNvZnR3YXJlIGVtdWxhdGlvbiwgYW5kIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGV5J3JlIG5vdCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBjbGVhciBvbiB0aGlzOiBpZiB0aGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhlIHN0YW5kYXJkIGVudmlyb25tZW50LCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBpYXZmYCwgYGljZWAsIG9yIGBpZHBmYC4gYGlhdmZgIGlzIHRoZSBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEYuIGBpY2VgIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCBgaWRwZmAgaXMgdGhlIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIuIE5vcGUsIG5vIGVtdWxhdGlvbiBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLCBhbmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlbS4gVGhleSdyZSBkZWFkLWVuZHMgaW4gR0NFIG9yIFFFTVUuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBhbmFseXNpcy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGUgZmFjdCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHRpZWQgdG8gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24uIFRoZXkgZmFsbCBkaXJlY3RseSBpbnRvIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2hcIiBjYXRlZ29yeS4gSXQncyB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuT2theSwgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBtb2RpZmllZDogIGBpYXZmX3ZpcnRjaG5sLmNgLCBtdWx0aXBsZSBgaWNlYCBmaWxlcywgYW5kIGBpZHBmX3ZpcnRjaG5sLmNgLiBBbGwgSW50ZWwgRXRoZXJuZXQgZHJpdmVycywgYWxsIGhhcmR3YXJlIGRlcGVuZGVudC5cblxuSSdsbCBmaW5hbGl6ZSB0aGUgcmVzdWx0OiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NjksIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUxOjA4LjE4NjM2Mjg3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqglzn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 22:35:44 +0000 UTC FinishedAt: 2026-07-17 22:51:09 +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+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uYzQwMzlkMmIyNGE0YmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbkBAIC0yNDgsMTIgJiM0MzsyNDgsMjggQEAgaW50IGlhdmZfc2VuZF92Zl9wdHBfY2Fwc19tc2coc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiAvKipcbiAgKiBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXNcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcbiYjNDM7ICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlXG4gICpcbi0gKiBWYWxpZGF0ZSB0aGF0IHRoZSBudW1iZXIgb2YgcXVldWVzIHRoZSBQRiBoYXMgc2VudCBpblxuLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLlxuJiM0MzsgKiBWYWxpZGF0ZSB0aGUgVklSVENITkxfT1BfR0VUX1ZGX1JFU09VUkNFUyByZXNwb25zZSBmcm9tIHRoZSBQRi4gRW5zdXJlXG4mIzQzOyAqIG51bV92c2lzIGRvZXMgbm90IGV4Y2VlZCB3aGF0IHRoZSBtZXNzYWdlIGxlbmd0aCBjYW4gY292ZXIsIGFuZCBjYXBcbiYjNDM7ICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLlxuICAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiYjNDM7c3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBtc2dsZW4pXG4ge1xuJiM0MztcdHUxNiBtYXhfdnNpcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1zZ2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92Zl9yZXNvdXJjZSkpXG4mIzQzO1x0XHRtYXhfdnNpcyA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWF4X3ZzaXMgPSAobXNnbGVuIC0gc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92Zl9yZXNvdXJjZSkpIC9cbiYjNDM7XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRhcHRlci1cdTAwM2V2Zl9yZXMtXHUwMDNlbnVtX3ZzaXMgXHUwMDNlIG1heF92c2lzKSB7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSZWNlaXZlZCAlZCBWU0lzLCBidXQgbWVzc2FnZSBjYW4gb25seSBjb3ZlciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGFkYXB0ZXItXHUwMDNldmZfcmVzLVx1MDAzZW51bV92c2lzLCBtYXhfdnNpcyk7XG4mIzQzO1x0XHRhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyA9IG1heF92c2lzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoYWRhcHRlci1cdTAwM2V2Zl9yZXMtXHUwMDNlbnVtX3F1ZXVlX3BhaXJzIFx1MDAzZSBJQVZGX01BWF9SRVFfUVVFVUVTKSB7XG4gXHRcdHN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UgKnZzaV9yZXM7XG4gXHRcdGludCBpO1xuQEAgLTMwMCw3ICYjNDM7MzE2LDcgQEAgaW50IGlhdmZfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0ICogd2UgYXJlbiYjMzk7dCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlc1xuIFx0ICovXG4gXHRpZiAoIWVycilcbi1cdFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIpO1xuJiM0MztcdFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihldmVudC5tc2dfbGVuLCBsZW4pKTtcbiBcdGlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKGh3LCBhZGFwdGVyLVx1MDAzZXZmX3Jlcyk7XG4gXG4gXHRrZnJlZShldmVudC5tc2dfYnVmKTtcbkBAIC0yNTc4LDcgJiM0MzsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcbiBcbiBcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNldmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpO1xuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4mIzQzO1x0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKG1zZ2xlbiwgbGVuKSk7XG4gXHRcdGlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIGFkYXB0ZXItXHUwMDNldmZfcmVzKTtcbiBcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyKSkge1xuIFx0XHRcdC8qIHJlc3RvcmUgY3VycmVudCBtYWMgYWRkcmVzcyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZjcyYmIxYWE0MDY3NDEuLmZjOTFiNjY2NWY5MDVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbkBAIC03NjcsNiAmIzQzOzc2Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfaXNfdHh0aW1lX2VuYShjb25zdCBzdHJ1Y3QgaWNlX3R4X3JpbmcgKnJpbmcpXG4gXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy1cdTAwM2V2c2k7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFxuJiM0MztcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHJldHVybiB0ZXN0X2JpdChyaW5nLVx1MDAzZXFfaW5kZXgsICBwZi1cdTAwM2V0eHRpbWVfdHhxcyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5pbmRleCBlZjFjZTEwNmY4MWI1ZS4uNTM5NzRlYmFhZmZhMDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMTc2Miw2ICYjNDM7MTc2Miw3IEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX2NtZF9kZXNjIGRlc2MgPSB7MH07XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3NxX2NkIGNkID0ge307XG4gXHR1MTYgbXNnX2xlbjtcbiBcdGludCBzdGF0dXM7XG4gXG5AQCAtMTc3NCwxOSAmIzQzOzE3NzUsMzMgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpXG4gXHRtc2cubXNnX2FkZHJfbG93ID0gY3B1X3RvX2xlMTYoaW4tXHUwMDNlbXNnX2FkZHJfbG93KTtcbiBcdG1zZy5tc2dfYWRkcl9oaWdoID0gY3B1X3RvX2xlMzIoaW4tXHUwMDNlbXNnX2FkZHJfaGlnaCk7XG4gXG4tXHRpZiAoaW4tXHUwMDNlb3Bjb2RlKVxuJiM0MztcdHN3aXRjaCAoaW4tXHUwMDNlb3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBpY2Vfc2JxX21zZ193cl9wOlxuJiM0MztcdGNhc2UgaWNlX3NicV9tc2dfd3JfbnA6XG4gXHRcdG1zZy5kYXRhID0gY3B1X3RvX2xlMzIoaW4tXHUwMDNlZGF0YSk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi9cbiYjNDM7XHRcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0U4MTApXG4mIzQzO1x0XHRcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBpY2Vfc2JxX21zZ19yZDpcbiBcdFx0LyogZGF0YSByZWFkIGNvbWVzIGJhY2sgaW4gY29tcGxldGlvbiwgc28gc2hvcnRlbiB0aGUgc3RydWN0IGJ5XG4gXHRcdCAqIHNpemVvZihtc2cuZGF0YSlcbiBcdFx0ICovXG4gXHRcdG1zZ19sZW4gLT0gc2l6ZW9mKG1zZy5kYXRhKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEU4MTAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb3N0ZWQgbW9kZSwgYWx3YXlzIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbiYjNDM7XHRjZC5wb3N0ZWQgPSBpbi1cdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBody1cdTAwM2VtYWNfdHlwZSAhPSBJQ0VfTUFDX0U4MTA7XG4gXG4gXHRkZXNjLmZsYWdzID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFx0ZGVzYy5vcGNvZGUgPSBjcHVfdG9fbGUxNihpY2Vfc2JxX29wY19uZWlnaF9kZXZfcmVxKTtcbiBcdGRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTtcbi1cdHN0YXR1cyA9IGljZV9zYnFfc2VuZF9jbWQoaHcsIFx1MDAyNmRlc2MsIFx1MDAyNm1zZywgbXNnX2xlbiwgTlVMTCk7XG4tXHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgIWluLVx1MDAzZW9wY29kZSlcbiYjNDM7XHRzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBcdTAwMjZtc2csIG1zZ19sZW4sIFx1MDAyNmNkKTtcbiYjNDM7XHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgaW4tXHUwMDNlb3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKVxuIFx0XHRpbi1cdTAwM2VkYXRhID0gbGUzMl90b19jcHVcbiBcdFx0XHQoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKVx1MDAyNm1zZyktXHUwMDNlZGF0YSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTY1NDcsNyAmIzQzOzY1NjIsNyBAQCBpbnQgaWNlX3dyaXRlX2NndV9yZWcoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBjZ3VfbXNnID0ge1xuIFx0XHQuZGVzdF9kZXYgPSBpY2VfZ2V0X2Rlc3RfY2d1KGh3KSxcbi1cdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLFxuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX25wLFxuIFx0XHQubXNnX2FkZHJfbG93ID0gYWRkcixcbiBcdFx0LmRhdGEgPSB2YWxcbiBcdH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXG5pbmRleCBkY2I4MzdjYWRkMTgyNS4uYTYwMDhkYzc3ZmE0MzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xuQEAgLTEwODYsNiAmIzQzOzEwODYsMTAgQEAgaWNlX3NxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxLFxuIFx0d3IzMihodywgY3EtXHUwMDNlc3EudGFpbCwgY3EtXHUwMDNlc3EubmV4dF90b191c2UpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbiYjNDM7XHQvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbiYjMzk7dCB3YWl0IGZvciBjb21wbGV0aW9uLiAqL1xuJiM0MztcdGlmIChjZCBcdTAwMjZcdTAwMjYgY2QtXHUwMDNlcG9zdGVkKVxuJiM0MztcdFx0Z290byBzcV9zZW5kX2NvbW1hbmRfZXJyb3I7XG4mIzQzO1xuIFx0LyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUuIElmIGl0IGZpbmlzaGVzIHdpdGhpbiB0aGVcbiBcdCAqIHRpbWVvdXQsIGNvcHkgdGhlIGRlc2NyaXB0b3IgYmFjayB0byB0ZW1wLlxuIFx0ICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXG5pbmRleCA3ODgwNDBkZDY2MmUyMy4uYzUwZDZmY2JhY2JhNTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxuQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XG4gLyogc3EgdHJhbnNhY3Rpb24gZGV0YWlscyAqL1xuIHN0cnVjdCBpY2Vfc3FfY2Qge1xuIFx0c3RydWN0IGxpYmllX2FxX2Rlc2MgKndiX2Rlc2M7XG4mIzQzO1x0dTggcG9zdGVkIDogMTtcbiB9O1xuIFxuIC8qIHJxIGV2ZW50IGluZm9ybWF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuaW5kZXggYzMwZTI3YmJmZTZlMjUuLmIwNjllNmM1MTRmYjEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtNTEyLDkgJiM0Mzs1MTIsNiBAQCBpbnQgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2ZilcbiBcdHN0cnVjdCBpY2VfcmVwciAqcmVwcjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRyZXByID0gaWNlX3JlcHJfY3JlYXRlX3ZmKHZmKTtcbiBcdGlmIChJU19FUlIocmVwcikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJlcHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGFnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG5pbmRleCAzMTBlOGZlMjkyNWM3ZC4uMDhhMTdkZWQwYWQ1NTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXG5AQCAtMjYyMyw3ICYjNDM7MjYyMyw3IEBAIGludCBpY2VfaW5pdF9sYWcoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGdvdG8gIGZyZWVfbHBvcnRfcmVzO1xuIFxuIFx0LyogYXNzb2NpYXRlIHJlY2lwZXMgdG8gcHJvZmlsZXMgKi9cbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9QUk9GSURfSVBWNl9HVFBVX0lQVjZfVENQX0lOTkVSOyBuJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBpY2VfYXFfZ2V0X3JlY2lwZV90b19wcm9maWxlKFx1MDAyNnBmLVx1MDAzZWh3LCBuLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNnJlY2lwZV9iaXRzLCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5NzguLmZjOWQ0ZTBmYTc1NTg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTE0MTUsNiAmIzQzOzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxuJiM0MztcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0XHRXUklURV9PTkNFKHZzaS1cdTAwM2V0eF9yaW5nc1tpXSwgcmluZyk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjhiNDM5ZTIxN2UwMmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQ5MSw5ICYjNDM7MzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRORVRJRl9GX1JYSEFTSDtcbiBcbiBcdGNzdW1vX2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU1cdCAgfFxuLVx0XHRcdCBORVRJRl9GX0lQX0NTVU0gIHxcbiBcdFx0XHQgTkVUSUZfRl9TQ1RQX0NSQyB8XG4tXHRcdFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xuJiM0MztcdFx0XHQgTkVUSUZfRl9IV19DU1VNO1xuIFxuIFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuIFx0XHRcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxuQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0LyogQWxsb3cgY29yZSB0byBtYW5hZ2UgSVJRcyBhZmZpbml0eSAqL1xuIFx0bmV0aWZfc2V0X2FmZmluaXR5X2F1dG8obmV0ZGV2KTtcbiBcbi1cdC8qIE11dHVhbCBleGNsdXNpdml0eSBmb3IgVFNPIGFuZCBHQ1MgaXMgZW5mb3JjZWQgYnkgdGhlIHNldCBmZWF0dXJlc1xuLVx0ICogbmRvIGNhbGxiYWNrLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxuLVx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNO1xuLVxuIFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpO1xuIH1cbiBcbkBAIC02NTAwLDE4ICYjNDM7NjQ5Myw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbiBcdFx0cmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XG4gXG4tXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXG4tXHQgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2IChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9BTExfVFNPKSkpIHtcbi1cdFx0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCYjMzQ7KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuaW5kZXggZjhlNjk2MzBmYjcyNjcuLjNlZGU0YzFhNWE4YTViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuQEAgLTIzNjgsNiAmIzQzOzIzNjgsOSBAQCBpbnQgaWNlX3BhcnNlcl9wcm9maWxlX2luaXQoc3RydWN0IGljZV9wYXJzZXJfcmVzdWx0ICpyc2x0LFxuIFx0dTE2IHByb3RvX29mZiA9IDA7XG4gXHR1MTYgb2ZmO1xuIFxuJiM0MztcdGlmIChyc2x0LVx1MDAzZXB0eXBlIFx1MDAzZT0gSUNFX0ZMT1dfUFRZUEVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bWVtc2V0KHByb2YsIDAsIHNpemVvZigqcHJvZikpO1xuIFx0c2V0X2JpdChyc2x0LVx1MDAzZXB0eXBlLCBwcm9mLVx1MDAzZXB0eXBlcyk7XG4gXHRpZiAoYmxrID09IElDRV9CTEtfU1cpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWMzZDg5ZDhkNGQzNDUuLmVhZWMzNmFiNmFlM2YzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuQEAgLTM0Niw3ICYjNDM7MzQ2LDcgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGljZV9wdHBfZXh0ZW5kXzMyYl90cyhwZi1cdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lLFxuJiM0MztcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUpLFxuIFx0XHRcdFx0ICAgICAoaW5fdHN0YW1wIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgbWFzayk7XG4gfVxuIFxuQEAgLTMwMzcsNiAmIzQzOzMwMzcsMTEgQEAgdm9pZCBpY2VfcHRwX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHB0cC1cdTAwM2VzdGF0ZSA9PSBJQ0VfUFRQX1VOSU5JVCkge1xuJiM0MztcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UFRQIHdhcyBub3QgaW5pdGlhbGl6ZWQsIHNraXBwaW5nIHJlYnVpbGRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHRwLVx1MDAzZXN0YXRlID09IElDRV9QVFBfUkVBRFkpIHtcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XG4gXHR9IGVsc2UgaWYgKHB0cC1cdTAwM2VzdGF0ZSAhPSBJQ0VfUFRQX1JFU0VUVElORykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjMy4uYzYwNDkwOTdmNDlkNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtMzUyLDYgJiM0MzszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuJiM0MztcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4mIzQzO1x0XHQuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCxcbiYjNDM7XHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEZsdXNoIFNCUSB0byBlbnN1cmUgcG9zdGVkIHdyaXRlcyBjb21wbGV0ZSBiZWZvcmUgU1lOQyBjb21tYW5kLlxuJiM0MztcdCAqIFNraXAgZm9yIEU4MTAgLSBGVyBhbHdheXMgc2VuZHMgY29tcGxldGlvbnMsIHNvIHdyaXRlcyBhcmUgc3luY2hyb25vdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGh3LVx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMCkge1xuJiM0MztcdFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXCYjMzQ7RmFpbGVkIHRvIGZsdXNoIFNCUTogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4gXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbkBAIC00NDIsNyAmIzQzOzQ1Niw3IEBAIHN0YXRpYyBpbnQgaWNlX3dyaXRlX3BoeV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4gXHRcdC5kZXN0X2RldiA9IGljZV9wdHBfZ2V0X2Rlc3RfZGV2X2U4MjUoaHcsIHBvcnQpLFxuLVx0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXG4mIzQzO1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksXG4gXHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiBcdFx0LmRhdGEgPSB2YWxcbkBAIC0yNjE0LDE2ICYjNDM7MjYyOCwxOCBAQCBpY2VfcmVhZF82NGJfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgbG93X2FkZHIsIHU2NCAqdmFsKVxuICAqIEB2YWw6IFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXJcbiAgKlxuICAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIGZvciB0aGUgZ2l2ZW4gcG9ydCBvdmVyIHRoZSBkZXZpY2Ugc2lkZWJhbmQgcXVldWUuXG4mIzQzOyAqIFVzZXMgcG9zdGVkIHdyaXRlcyAtIHJlcXVpcmVzIFNCUSBmbHVzaCBiZWZvcmUgU1lOQ19FWEVDX0NNRC5cbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX3dyaXRlX3BoeV9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwgdTMyIHZhbClcbiB7XG4tXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gezB9O1xuJiM0MztcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4mIzQzO1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiYjNDM7XHRcdC5kYXRhID0gdmFsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcG9ydCwgb2Zmc2V0KTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuIFxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjgxMSwxNiAmIzQzOzI4MjcsMTYgQEAgaWNlX3JlYWRfcXVhZF9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcXVhZCwgdTE2IG9mZnNldCwgdTMyICp2YWwpXG4gaW50XG4gaWNlX3dyaXRlX3F1YWRfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHF1YWQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXG4ge1xuLVx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4mIzQzO1x0XHQuZGF0YSA9IHZhbFxuJiM0MztcdH07XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgXHUwMDI2bXNnLCBxdWFkLCBvZmZzZXQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuLVxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNDUxNCwxOCAmIzQzOzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbClcbiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFBIWVxuICAqXG4gICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLlxuJiM0MzsgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbi1cdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XG4mIzQzO1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbiYjNDM7XHRcdC5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wLFxuJiM0MztcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4mIzQzO1x0XHQubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKSxcbiYjNDM7XHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiYjNDM7XHRcdC5kYXRhID0gdmFsXG4mIzQzO1x0fTtcbiBcdGludCBlcnI7XG4gXG4tXHRtc2cubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKTtcbi1cdG1zZy5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wO1xuLVx0bXNnLmRhdGEgPSB2YWw7XG4tXG4gXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXHUwMDI2bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byBQSFksIGVyciAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBlbnVtIGljZV9zYnFfZGV2X2lkIHtcbiBcbiBlbnVtIGljZV9zYnFfbXNnX29wY29kZSB7XG4gXHRpY2Vfc2JxX21zZ19yZFx0XHQ9IDB4MDAsXG4tXHRpY2Vfc2JxX21zZ193clx0XHQ9IDB4MDEsXG4mIzQzO1x0aWNlX3NicV9tc2dfd3JfcFx0PSAweDAxLFxuIFx0aWNlX3NicV9tc2dfd3JfbnBcdD0gMHgwMlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTQ4NCwxMiAmIzQzOzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0Z290byB0ZWFyZG93bjtcbiBcdFx0fVxuIFxuLVx0XHRyZXR2YWwgPSBpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbi1cdFx0aWYgKHJldHZhbCkge1xuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcJiMzNDssXG4tXHRcdFx0XHR2Zi1cdTAwM2V2Zl9pZCwgcmV0dmFsKTtcbi1cdFx0XHRpY2VfdmZfdnNpX3JlbGVhc2UodmYpO1xuLVx0XHRcdGdvdG8gdGVhcmRvd247XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKSB7XG4mIzQzO1x0XHRcdHJldHZhbCA9IGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuJiM0MztcdFx0XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHZmLVx1MDAzZXZmX2lkLCByZXR2YWwpO1xuJiM0MztcdFx0XHRcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XG4mIzQzO1x0XHRcdFx0Z290byB0ZWFyZG93bjtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHNldF9iaXQoSUNFX1ZGX1NUQVRFX0lOSVQsIHZmLVx1MDAzZXZmX3N0YXRlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggNGNhMWEwNjAyMzA3ZDAuLmIyMDYzYTU0ZDZkODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTY1NCw3ICYjNDM7MTY1NCw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbiBcdFx0XHRyZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZsNF9wcm90bywgXHUwMDI2ZnJhZ19vZmYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBkZWZpbmUgb3V0ZXIgdHJhbnNwb3J0ICovXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdFx0cmV0dXJuIC0xO1xuLVxuLVx0XHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XG4gXHRcdH1cbiBcbiBcdFx0LyogY29tcHV0ZSBvdXRlciBMMyBoZWFkZXIgc2l6ZSAqL1xuQEAgLTE3MzYsMTQgJiM0MzsxNzMyLDE0IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbiBcdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLVx1MDAzZWRhdGEsIFx1MDAyNmw0X3Byb3RvLFxuIFx0XHRcdFx0XHQgXHUwMDI2ZnJhZ19vZmYpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdH1cbiBcbiBcdC8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi9cbiBcdGwzX2xlbiA9IGw0LmhkciAtIGlwLmhkcjtcbiBcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXHUwMDNjXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xuIFxuLVx0aWYgKCh0eF9yaW5nLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAodGVzdF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCB0eF9yaW5nLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX2NzdW1faXNfc2N0cChza2IpKSB7XG4gXHRcdC8qIFNldCBHQ1MgKi9cbkBAIC0xNzg5LDE1ICYjNDM7MTc4NSwxNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdHJldHVybiAtMTtcbi1cdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xuIFx0fVxuIFxuIFx0b2ZmLVx1MDAzZXRkX2NtZCB8PSBjbWQ7XG4gXHRvZmYtXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcbiBcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7Y2hlY2tzdW1fc3dfZmI6XG4mIzQzO1x0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBza2JfY2hlY2tzdW1faGVscChza2IpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG5pbmRleCA1ZTUxN2YyMTkzNzk4Zi4uMTVkYmQ1MTAwOTEyNTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcbkBAIC0yMTcsNiAmIzQzOzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMixcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcbiYjNDM7XHRJQ0VfVFhfUklOR19GTEFHU19HQ1MsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5pbmRleCAyN2U0YWNiMTYyMGYwYy4uOTA1MmU3MWU5Yzk5ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCB2b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHR9XG4gXHRcdGljZV92Zl9wb3N0X3ZzaV9yZWJ1aWxkKHZmKTtcbiBcbi1cdFx0aWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XG4mIzQzO1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxuJiM0MztcdFx0XHRpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXG5pbmRleCBiZTY2ZjliMmUxMDFjYS4uZGM1YWQ3ODRmNDU2ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcbkBAIC0zNTU1LDcgJiM0MzszNTU1LDYgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXG4gXHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKGFkYXB0ZXItXHUwMDNlcGRldiwgaWRwZl9nZXRfbWF4X3ZmcyhhZGFwdGVyKSk7XG4gXHRudW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7XG4tXHRhZGFwdGVyLVx1MDAzZW1heF92cG9ydHMgPSBudW1fbWF4X3Zwb3J0cztcbiBcdGFkYXB0ZXItXHUwMDNldnBvcnRzID0ga3phbGxvY19vYmpzKCphZGFwdGVyLVx1MDAzZXZwb3J0cywgbnVtX21heF92cG9ydHMpO1xuIFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZwb3J0cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzU3Niw2ICYjNDM7MzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0Z290byBlcnJfbmV0ZGV2X2FsbG9jO1xuIFx0fVxuIFxuJiM0MztcdC8qIFNldCBtYXhfdnBvcnRzIG9ubHkgYWZ0ZXIgdnBvcnRzLCBuZXRkZXZzIGFuZCB2cG9ydF9jb25maWcgYnVmZmVyc1xuJiM0MztcdCAqIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSBzdXJlIG1heF92cG9ydCBib3VuZCBsb29wcyBkb24mIzM5O3QgZW5kIHVwXG4mIzQzO1x0ICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LlxuJiM0MztcdCAqL1xuJiM0MztcdGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xuJiM0MztcbiBcdC8qIFN0YXJ0IHRoZSBtYWlsYm94IHRhc2sgYmVmb3JlIHJlcXVlc3RpbmcgdmVjdG9ycy4gVGhpcyB3aWxsIGVuc3VyZVxuIFx0ICogdmVjdG9yIGluZm9ybWF0aW9uIHJlc3BvbnNlIGZyb20gbWFpbGJveCBpcyBoYW5kbGVkXG4gXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGlhdmYsIGljZSwgaWRwZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgZG8gbm90IGhhdmUgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgbWFraW5nIHRoZW0gaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMKaW5kZXggZWMyMzRjYzhiZDlkYjAuLmM0MDM5ZDJiMjRhNGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwpAQCAtMjQ4LDEyICYjNDM7MjQ4LDI4IEBAIGludCBpYXZmX3NlbmRfdmZfcHRwX2NhcHNfbXNnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAvKioKICAqIGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcwogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiYjNDM7ICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlCiAgKgotICogVmFsaWRhdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGUgUEYgaGFzIHNlbnQgaW4KLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLgomIzQzOyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmUKJiM0MzsgKiBudW1fdnNpcyBkb2VzIG5vdCBleGNlZWQgd2hhdCB0aGUgbWVzc2FnZSBsZW5ndGggY2FuIGNvdmVyLCBhbmQgY2FwCiYjNDM7ICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLgogICoqLwotc3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiYjNDM7c3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBtc2dsZW4pCiB7CiYjNDM7CXUxNiBtYXhfdnNpczsKJiM0MzsKJiM0MzsJaWYgKG1zZ2xlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdmZfcmVzb3VyY2UpKQomIzQzOwkJbWF4X3ZzaXMgPSAwOwomIzQzOwllbHNlCiYjNDM7CQltYXhfdnNpcyA9IChtc2dsZW4gLSBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSkgLwomIzQzOwkJCSAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTsKJiM0MzsKJiM0MzsJaWYgKGFkYXB0ZXItJmd0O3ZmX3Jlcy0mZ3Q7bnVtX3ZzaXMgJmd0OyBtYXhfdnNpcykgewomIzQzOwkJZGV2X2luZm8oJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7UmVjZWl2ZWQgJWQgVlNJcywgYnV0IG1lc3NhZ2UgY2FuIG9ubHkgY292ZXIgJWRcbiYjMzQ7LAomIzQzOwkJCSBhZGFwdGVyLSZndDt2Zl9yZXMtJmd0O251bV92c2lzLCBtYXhfdnNpcyk7CiYjNDM7CQlhZGFwdGVyLSZndDt2Zl9yZXMtJmd0O251bV92c2lzID0gbWF4X3ZzaXM7CiYjNDM7CX0KJiM0MzsKIAlpZiAoYWRhcHRlci0mZ3Q7dmZfcmVzLSZndDtudW1fcXVldWVfcGFpcnMgJmd0OyBJQVZGX01BWF9SRVFfUVVFVUVTKSB7CiAJCXN0cnVjdCB2aXJ0Y2hubF92c2lfcmVzb3VyY2UgKnZzaV9yZXM7CiAJCWludCBpOwpAQCAtMzAwLDcgJiM0MzszMTYsNyBAQCBpbnQgaWF2Zl9nZXRfdmZfY29uZmlnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAJICogd2UgYXJlbiYjMzk7dCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlcwogCSAqLwogCWlmICghZXJyKQotCQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7CiYjNDM7CQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKGV2ZW50Lm1zZ19sZW4sIGxlbikpOwogCWlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKGh3LCBhZGFwdGVyLSZndDt2Zl9yZXMpOwogCiAJa2ZyZWUoZXZlbnQubXNnX2J1Zik7CkBAIC0yNTc4LDcgJiM0MzsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJdTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTsKIAogCQltZW1jcHkoYWRhcHRlci0mZ3Q7dmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpOwotCQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7CiYjNDM7CQlpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlciwgbWluKG1zZ2xlbiwgbGVuKSk7CiAJCWlhdmZfdmZfcGFyc2VfaHdfY29uZmlnKCZhbXA7YWRhcHRlci0mZ3Q7aHcsIGFkYXB0ZXItJmd0O3ZmX3Jlcyk7CiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIpKSB7CiAJCQkvKiByZXN0b3JlIGN1cnJlbnQgbWFjIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKQEAgLTc2Nyw2ICYjNDM7NzY3LDkgQEAgc3RhdGljIGlubGluZSBib29sIGljZV9pc190eHRpbWVfZW5hKGNvbnN0IHN0cnVjdCBpY2VfdHhfcmluZyAqcmluZykKIAlzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy0mZ3Q7dnNpOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwogCiYjNDM7CWlmICh2c2ktJmd0O3R5cGUgIT0gSUNFX1ZTSV9QRikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlyZXR1cm4gdGVzdF9iaXQocmluZy0mZ3Q7cV9pbmRleCwgIHBmLSZndDt0eHRpbWVfdHhxcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCmluZGV4IGVmMWNlMTA2ZjgxYjVlLi41Mzk3NGViYWFmZmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCkBAIC0xNzYyLDYgJiM0MzsxNzYyLDcgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IGljZV9zYnFfY21kX2Rlc2MgZGVzYyA9IHswfTsKIAlzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTsKJiM0MzsJc3RydWN0IGljZV9zcV9jZCBjZCA9IHt9OwogCXUxNiBtc2dfbGVuOwogCWludCBzdGF0dXM7CiAKQEAgLTE3NzQsMTkgJiM0MzsxNzc1LDMzIEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKQogCW1zZy5tc2dfYWRkcl9sb3cgPSBjcHVfdG9fbGUxNihpbi0mZ3Q7bXNnX2FkZHJfbG93KTsKIAltc2cubXNnX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKGluLSZndDttc2dfYWRkcl9oaWdoKTsKIAotCWlmIChpbi0mZ3Q7b3Bjb2RlKQomIzQzOwlzd2l0Y2ggKGluLSZndDtvcGNvZGUpIHsKJiM0MzsJY2FzZSBpY2Vfc2JxX21zZ193cl9wOgomIzQzOwljYXNlIGljZV9zYnFfbXNnX3dyX25wOgogCQltc2cuZGF0YSA9IGNwdV90b19sZTMyKGluLSZndDtkYXRhKTsKLQllbHNlCiYjNDM7CQkvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi8KJiM0MzsJCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODEwKQomIzQzOwkJCW1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaWNlX3NicV9tc2dfcmQ6CiAJCS8qIGRhdGEgcmVhZCBjb21lcyBiYWNrIGluIGNvbXBsZXRpb24sIHNvIHNob3J0ZW4gdGhlIHN0cnVjdCBieQogCQkgKiBzaXplb2YobXNnLmRhdGEpCiAJCSAqLwogCQltc2dfbGVuIC09IHNpemVvZihtc2cuZGF0YSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEU4MTAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwb3N0ZWQgbW9kZSwgYWx3YXlzIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJY2QucG9zdGVkID0gaW4tJmd0O29wY29kZSA9PSBpY2Vfc2JxX21zZ193cl9wICZhbXA7JmFtcDsKJiM0MzsJCSAgICBody0mZ3Q7bWFjX3R5cGUgIT0gSUNFX01BQ19FODEwOwogCiAJZGVzYy5mbGFncyA9IGNwdV90b19sZTE2KGZsYWdzKTsKIAlkZXNjLm9wY29kZSA9IGNwdV90b19sZTE2KGljZV9zYnFfb3BjX25laWdoX2Rldl9yZXEpOwogCWRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTsKLQlzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCAmYW1wO2Rlc2MsICZhbXA7bXNnLCBtc2dfbGVuLCBOVUxMKTsKLQlpZiAoIXN0YXR1cyAmYW1wOyZhbXA7ICFpbi0mZ3Q7b3Bjb2RlKQomIzQzOwlzdGF0dXMgPSBpY2Vfc2JxX3NlbmRfY21kKGh3LCAmYW1wO2Rlc2MsICZhbXA7bXNnLCBtc2dfbGVuLCAmYW1wO2NkKTsKJiM0MzsJaWYgKCFzdGF0dXMgJmFtcDsmYW1wOyBpbi0mZ3Q7b3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKQogCQlpbi0mZ3Q7ZGF0YSA9IGxlMzJfdG9fY3B1CiAJCQkoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKSZhbXA7bXNnKS0mZ3Q7ZGF0YSk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTY1NDcsNyAmIzQzOzY1NjIsNyBAQCBpbnQgaWNlX3dyaXRlX2NndV9yZWcoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKQogewogCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBjZ3VfbXNnID0gewogCQkuZGVzdF9kZXYgPSBpY2VfZ2V0X2Rlc3RfY2d1KGh3KSwKLQkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLAomIzQzOwkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX25wLAogCQkubXNnX2FkZHJfbG93ID0gYWRkciwKIAkJLmRhdGEgPSB2YWwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jCmluZGV4IGRjYjgzN2NhZGQxODI1Li5hNjAwOGRjNzdmYTQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYwpAQCAtMTA4Niw2ICYjNDM7MTA4NiwxMCBAQCBpY2Vfc3Ffc2VuZF9jbWQoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EsCiAJd3IzMihodywgY3EtJmd0O3NxLnRhaWwsIGNxLSZndDtzcS5uZXh0X3RvX3VzZSk7CiAJaWNlX2ZsdXNoKGh3KTsKIAomIzQzOwkvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbiYjMzk7dCB3YWl0IGZvciBjb21wbGV0aW9uLiAqLwomIzQzOwlpZiAoY2QgJmFtcDsmYW1wOyBjZC0mZ3Q7cG9zdGVkKQomIzQzOwkJZ290byBzcV9zZW5kX2NvbW1hbmRfZXJyb3I7CiYjNDM7CiAJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUuIElmIGl0IGZpbmlzaGVzIHdpdGhpbiB0aGUKIAkgKiB0aW1lb3V0LCBjb3B5IHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8gdGVtcC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaAppbmRleCA3ODgwNDBkZDY2MmUyMy4uYzUwZDZmY2JhY2JhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmgKQEAgLTc3LDYgJiM0Mzs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7CiAvKiBzcSB0cmFuc2FjdGlvbiBkZXRhaWxzICovCiBzdHJ1Y3QgaWNlX3NxX2NkIHsKIAlzdHJ1Y3QgbGliaWVfYXFfZGVzYyAqd2JfZGVzYzsKJiM0MzsJdTggcG9zdGVkIDogMTsKIH07CiAKIC8qIHJxIGV2ZW50IGluZm9ybWF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCmluZGV4IGMzMGUyN2JiZmU2ZTI1Li5iMDY5ZTZjNTE0ZmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKQEAgLTUxMiw5ICYjNDM7NTEyLDYgQEAgaW50IGljZV9lc3dpdGNoX2F0dGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpCiAJc3RydWN0IGljZV9yZXByICpyZXByOwogCWludCBlcnI7CiAKLQlpZiAoIWljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXByID0gaWNlX3JlcHJfY3JlYXRlX3ZmKHZmKTsKIAlpZiAoSVNfRVJSKHJlcHIpKQogCQlyZXR1cm4gUFRSX0VSUihyZXByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGFnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jCmluZGV4IDMxMGU4ZmUyOTI1YzdkLi4wOGExN2RlZDBhZDU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jCkBAIC0yNjIzLDcgJiM0MzsyNjIzLDcgQEAgaW50IGljZV9pbml0X2xhZyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJZ290byAgZnJlZV9scG9ydF9yZXM7CiAKIAkvKiBhc3NvY2lhdGUgcmVjaXBlcyB0byBwcm9maWxlcyAqLwotCWZvciAobiA9IDA7IG4gJmx0OyBJQ0VfUFJPRklEX0lQVjZfR1RQVV9JUFY2X1RDUF9JTk5FUjsgbiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChuID0gMDsgbiAmbHQ7IElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuJiM0MzsmIzQzOykgewogCQllcnIgPSBpY2VfYXFfZ2V0X3JlY2lwZV90b19wcm9maWxlKCZhbXA7cGYtJmd0O2h3LCBuLAogCQkJCQkJICAgJmFtcDtyZWNpcGVfYml0cywgTlVMTCk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwppbmRleCA4Y2RjNGZkYTg5ZTk3OC4uZmM5ZDRlMGZhNzU1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwpAQCAtMTQxNSw2ICYjNDM7MTQxNSwxMCBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2NfcmluZ3Moc3RydWN0IGljZV92c2kgKnZzaSkKIAkJCXNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsIHJpbmctJmd0O2ZsYWdzKTsKIAkJZWxzZQogCQkJc2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwgcmluZy0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwkJaWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSkKJiM0MzsJCQlzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy0mZ3Q7ZmxhZ3MpOwomIzQzOwogCQlXUklURV9PTkNFKHZzaS0mZ3Q7dHhfcmluZ3NbaV0sIHJpbmcpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0zNDkxLDkgJiM0MzszNDkxLDggQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQkJTkVUSUZfRl9SWEhBU0g7CiAKIAljc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNCSAgfAotCQkJIE5FVElGX0ZfSVBfQ1NVTSAgfAogCQkJIE5FVElGX0ZfU0NUUF9DUkMgfAotCQkJIE5FVElGX0ZfSVBWNl9DU1VNOwomIzQzOwkJCSBORVRJRl9GX0hXX0NTVU07CiAKIAl2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8CiAJCQkgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHwKQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCS8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi8KIAluZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpOwogCi0JLyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzCi0JICogbmRvIGNhbGxiYWNrLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpCi0JCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCiAJbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpOwogfQogCkBAIC02NTAwLDE4ICYjNDM7NjQ5Myw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAJaWYgKGNoYW5nZWQgJmFtcDsgTkVUSUZfRl9MT09QQkFDSykKIAkJcmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spKTsKIAotCS8qIER1ZSB0byBFODMwIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBUU08gKE5FVElGX0ZfQUxMX1RTTykgd2l0aCBHQ1MKLQkgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykgJmFtcDsmYW1wOwotCSAgICAoKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfQ1NVTSkgJmFtcDsmYW1wOyAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9BTExfVFNPKSkpIHsKLQkJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19DU1VNKQotCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUbyBlbmFibGUgVFNPLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIEhXIGNoZWNrc3VtLlxuJiMzNDspOwotCQllbHNlCi0JCQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXG4mIzM0Oyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jCmluZGV4IGY4ZTY5NjMwZmI3MjY3Li4zZWRlNGMxYTVhOGE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jCkBAIC0yMzY4LDYgJiM0MzsyMzY4LDkgQEAgaW50IGljZV9wYXJzZXJfcHJvZmlsZV9pbml0KHN0cnVjdCBpY2VfcGFyc2VyX3Jlc3VsdCAqcnNsdCwKIAl1MTYgcHJvdG9fb2ZmID0gMDsKIAl1MTYgb2ZmOwogCiYjNDM7CWlmIChyc2x0LSZndDtwdHlwZSAmZ3Q7PSBJQ0VfRkxPV19QVFlQRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAltZW1zZXQocHJvZiwgMCwgc2l6ZW9mKCpwcm9mKSk7CiAJc2V0X2JpdChyc2x0LSZndDtwdHlwZSwgcHJvZi0mZ3Q7cHR5cGVzKTsKIAlpZiAoYmxrID09IElDRV9CTEtfU1cpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVjM2Q4OWQ4ZDRkMzQ1Li5lYWVjMzZhYjZhZTNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCkBAIC0zNDYsNyAmIzQzOzM0Niw3IEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gaWNlX3B0cF9leHRlbmRfMzJiX3RzKHBmLSZndDtwdHAuY2FjaGVkX3BoY190aW1lLAomIzQzOwlyZXR1cm4gaWNlX3B0cF9leHRlbmRfMzJiX3RzKFJFQURfT05DRShwZi0mZ3Q7cHRwLmNhY2hlZF9waGNfdGltZSksCiAJCQkJICAgICAoaW5fdHN0YW1wICZndDsmZ3Q7IDgpICZhbXA7IG1hc2spOwogfQogCkBAIC0zMDM3LDYgJiM0MzszMDM3LDExIEBAIHZvaWQgaWNlX3B0cF9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHB0cC0mZ3Q7c3RhdGUgPT0gSUNFX1BUUF9VTklOSVQpIHsKJiM0MzsJCWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7UFRQIHdhcyBub3QgaW5pdGlhbGl6ZWQsIHNraXBwaW5nIHJlYnVpbGRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmIChwdHAtJmd0O3N0YXRlID09IElDRV9QVFBfUkVBRFkpIHsKIAkJaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7CiAJfSBlbHNlIGlmIChwdHAtJmd0O3N0YXRlICE9IElDRV9QVFBfUkVTRVRUSU5HKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwppbmRleCA4ZTVmOTc4MzU5NTRjMy4uYzYwNDkwOTdmNDlkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtMzUyLDYgJiM0MzszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZCkKIHN0YXRpYyB2b2lkIGljZV9wdHBfZXhlY190bXJfY21kKHN0cnVjdCBpY2VfaHcgKmh3KQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCwKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogRmx1c2ggU0JRIHRvIGVuc3VyZSBwb3N0ZWQgd3JpdGVzIGNvbXBsZXRlIGJlZm9yZSBTWU5DIGNvbW1hbmQuCiYjNDM7CSAqIFNraXAgZm9yIEU4MTAgLSBGVyBhbHdheXMgc2VuZHMgY29tcGxldGlvbnMsIHNvIHdyaXRlcyBhcmUgc3luY2hyb25vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hY190eXBlICE9IElDRV9NQUNfRTgxMCkgewomIzQzOwkJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksICYjMzQ7RmFpbGVkIHRvIGZsdXNoIFNCUTogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwl9CiAKIAlpZiAoIWljZV9pc19wcmltYXJ5KGh3KSkKIAkJaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpOwpAQCAtNDQyLDcgJiM0Mzs0NTYsNyBAQCBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gewogCQkuZGVzdF9kZXYgPSBpY2VfcHRwX2dldF9kZXN0X2Rldl9lODI1KGh3LCBwb3J0KSwKLQkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLAomIzQzOwkJLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsCiAJCS5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLAogCQkubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksCiAJCS5kYXRhID0gdmFsCkBAIC0yNjE0LDE2ICYjNDM7MjYyOCwxOCBAQCBpY2VfcmVhZF82NGJfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgbG93X2FkZHIsIHU2NCAqdmFsKQogICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlcgogICoKICAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIGZvciB0aGUgZ2l2ZW4gcG9ydCBvdmVyIHRoZSBkZXZpY2Ugc2lkZWJhbmQgcXVldWUuCiYjNDM7ICogVXNlcyBwb3N0ZWQgd3JpdGVzIC0gcmVxdWlyZXMgU0JRIGZsdXNoIGJlZm9yZSBTWU5DX0VYRUNfQ01ELgogICovCiBzdGF0aWMgaW50CiBpY2Vfd3JpdGVfcGh5X3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQogewotCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCwKJiM0MzsJCS5kYXRhID0gdmFsCiYjNDM7CX07CiAJaW50IGVycjsKIAogCWljZV9maWxsX3BoeV9tc2dfZTgyeChodywgJmFtcDttc2csIHBvcnQsIG9mZnNldCk7Ci0JbXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyOwotCW1zZy5kYXRhID0gdmFsOwogCiAJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKIAlpZiAoZXJyKSB7CkBAIC0yODExLDE2ICYjNDM7MjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbCkKIGludAogaWNlX3dyaXRlX3F1YWRfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHF1YWQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTsKJiM0MzsJc3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHsKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLAomIzQzOwkJLmRhdGEgPSB2YWwKJiM0MzsJfTsKIAlpbnQgZXJyOwogCiAJZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgJmFtcDttc2csIHF1YWQsIG9mZnNldCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjsKLQltc2cuZGF0YSA9IHZhbDsKLQogCWVyciA9IGljZV9zYnFfcndfcmVnKGh3LCAmYW1wO21zZywgTElCSUVfQVFfRkxBR19SRCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcbiYjMzQ7LApAQCAtNDUxNCwxOCAmIzQzOzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbCkKICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgUEhZCiAgKgogICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLgomIzQzOyAqIEU4MTAgRlcgc2VuZHMgY29tcGxldGlvbnMgZm9yIG9wY29kZSAweDAxLCBtYWtpbmcgd3JpdGVzIHN5bmNocm9ub3VzLgogICovCiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKQogewotCXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07CiYjNDM7CXN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7CiYjNDM7CQkuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCwKJiM0MzsJCS5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLAomIzQzOwkJLm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksCiYjNDM7CQkubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksCiYjNDM7CQkuZGF0YSA9IHZhbAomIzQzOwl9OwogCWludCBlcnI7CiAKLQltc2cubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKTsKLQltc2cubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkcik7Ci0JbXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyOwotCW1zZy5kZXN0X2RldiA9IGljZV9zYnFfZGV2X3BoeV8wOwotCW1zZy5kYXRhID0gdmFsOwotCiAJZXJyID0gaWNlX3NicV9yd19yZWcoaHcsICZhbXA7bXNnLCBMSUJJRV9BUV9GTEFHX1JEKTsKIAlpZiAoZXJyKSB7CiAJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byBQSFksIGVyciAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oCmluZGV4IDIyNjI0M2QzMjk2ODY1Li5lZWRjZDI0ODFhNTk0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmgKQEAgLTU1LDcgJiM0Mzs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQgewogCiBlbnVtIGljZV9zYnFfbXNnX29wY29kZSB7CiAJaWNlX3NicV9tc2dfcmQJCT0gMHgwMCwKLQlpY2Vfc2JxX21zZ193cgkJPSAweDAxLAomIzQzOwlpY2Vfc2JxX21zZ193cl9wCT0gMHgwMSwKIAlpY2Vfc2JxX21zZ193cl9ucAk9IDB4MDIKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwppbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKQEAgLTQ4NCwxMiAmIzQzOzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlnb3RvIHRlYXJkb3duOwogCQl9CiAKLQkJcmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZCYjMzQ7LAotCQkJCXZmLSZndDt2Zl9pZCwgcmV0dmFsKTsKLQkJCWljZV92Zl92c2lfcmVsZWFzZSh2Zik7Ci0JCQlnb3RvIHRlYXJkb3duOwomIzQzOwkJaWYgKGljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkgewomIzQzOwkJCXJldHZhbCA9IGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpOwomIzQzOwkJCWlmIChyZXR2YWwpIHsKJiM0MzsJCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtGYWlsZWQgdG8gYXR0YWNoIFZGICVkIHRvIGVzd2l0Y2gsIGVycm9yICVkJiMzNDssCiYjNDM7CQkJCQl2Zi0mZ3Q7dmZfaWQsIHJldHZhbCk7CiYjNDM7CQkJCWljZV92Zl92c2lfcmVsZWFzZSh2Zik7CiYjNDM7CQkJCWdvdG8gdGVhcmRvd247CiYjNDM7CQkJfQogCQl9CiAKIAkJc2V0X2JpdChJQ0VfVkZfU1RBVEVfSU5JVCwgdmYtJmd0O3ZmX3N0YXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jCmluZGV4IDRjYTFhMDYwMjMwN2QwLi5iMjA2M2E1NGQ2ZDgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKQEAgLTE2NTQsNyAmIzQzOzE2NTQsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpCiAJCQlyZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgZXh0aGRyIC0gc2tiLSZndDtkYXRhLAogCQkJCQkgICAgICAgJmFtcDtsNF9wcm90bywgJmFtcDtmcmFnX29mZik7CiAJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJCWdvdG8gY2hlY2tzdW1fc3dfZmI7CiAJCX0KIAogCQkvKiBkZWZpbmUgb3V0ZXIgdHJhbnNwb3J0ICovCkBAIC0xNjczLDExICYjNDM7MTY3Myw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJCWw0LmhkciA9IHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcihza2IpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlza2JfY2hlY2tzdW1faGVscChza2IpOwotCQkJcmV0dXJuIDA7CiYjNDM7CQkJZ290byBjaGVja3N1bV9zd19mYjsKIAkJfQogCiAJCS8qIGNvbXB1dGUgb3V0ZXIgTDMgaGVhZGVyIHNpemUgKi8KQEAgLTE3MzYsMTQgJiM0MzsxNzMyLDE0IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItJmd0O2RhdGEsICZhbXA7bDRfcHJvdG8sCiAJCQkJCSAmYW1wO2ZyYWdfb2ZmKTsKIAl9IGVsc2UgewotCQlyZXR1cm4gLTE7CiYjNDM7CQlnb3RvIGNoZWNrc3VtX3N3X2ZiOwogCX0KIAogCS8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi8KIAlsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7CiAJb2Zmc2V0IHw9IChsM19sZW4gLyA0KSAmbHQ7Jmx0OyBJQ0VfVFhfREVTQ19MRU5fSVBMRU5fUzsKIAotCWlmICgodHhfcmluZy0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0NTVU0pICZhbXA7JmFtcDsKJiM0MzsJaWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKIAkgICAgIShmaXJzdC0mZ3Q7dHhfZmxhZ3MgJmFtcDsgSUNFX1RYX0ZMQUdTX1RTTykgJmFtcDsmYW1wOwogCSAgICAhc2tiX2NzdW1faXNfc2N0cChza2IpKSB7CiAJCS8qIFNldCBHQ1MgKi8KQEAgLTE3ODksMTUgJiM0MzsxNzg1LDE3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZikKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCi0JCQlyZXR1cm4gLTE7Ci0JCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7Ci0JCXJldHVybiAwOwomIzQzOwkJZ290byBjaGVja3N1bV9zd19mYjsKIAl9CiAKIAlvZmYtJmd0O3RkX2NtZCB8PSBjbWQ7CiAJb2ZmLSZndDt0ZF9vZmZzZXQgfD0gb2Zmc2V0OwogCXJldHVybiAxOwomIzQzOwomIzQzO2NoZWNrc3VtX3N3X2ZiOgomIzQzOwlpZiAoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBza2JfY2hlY2tzdW1faGVscChza2IpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmgKaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaApAQCAtMjE3LDYgJiM0MzsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHsKIAlJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwKIAlJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwKIAlJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsCiYjNDM7CUlDRV9UWF9SSU5HX0ZMQUdTX0dDUywKIAlJQ0VfVFhfUklOR19GTEFHU19OQklUUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCmluZGV4IDI3ZTRhY2IxNjIwZjBjLi45MDUyZTcxZTljOTllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCkBAIC04MTIsNyAmIzQzOzgxMiw4IEBAIHZvaWQgaWNlX3Jlc2V0X2FsbF92ZnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCX0KIAkJaWNlX3ZmX3Bvc3RfdnNpX3JlYnVpbGQodmYpOwogCi0JCWljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpOwomIzQzOwkJaWYgKGljZV9pc19lc3dpdGNoX21vZGVfc3dpdGNoZGV2KHBmKSkKJiM0MzsJCQlpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTsKIAogCQltdXRleF91bmxvY2soJmFtcDt2Zi0mZ3Q7Y2ZnX2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMKaW5kZXggYmU2NmY5YjJlMTAxY2EuLmRjNWFkNzg0ZjQ1NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYwpAQCAtMzU1NSw3ICYjNDM7MzU1NSw2IEBAIGludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKQogCiAJcGNpX3NyaW92X3NldF90b3RhbHZmcyhhZGFwdGVyLSZndDtwZGV2LCBpZHBmX2dldF9tYXhfdmZzKGFkYXB0ZXIpKTsKIAludW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7Ci0JYWRhcHRlci0mZ3Q7bWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzOwogCWFkYXB0ZXItJmd0O3Zwb3J0cyA9IGt6YWxsb2Nfb2JqcygqYWRhcHRlci0mZ3Q7dnBvcnRzLCBudW1fbWF4X3Zwb3J0cyk7CiAJaWYgKCFhZGFwdGVyLSZndDt2cG9ydHMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzU3Niw2ICYjNDM7MzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcikKIAkJZ290byBlcnJfbmV0ZGV2X2FsbG9jOwogCX0KIAomIzQzOwkvKiBTZXQgbWF4X3Zwb3J0cyBvbmx5IGFmdGVyIHZwb3J0cywgbmV0ZGV2cyBhbmQgdnBvcnRfY29uZmlnIGJ1ZmZlcnMKJiM0MzsJICogYXJlIGFsbG9jYXRlZCB0byBtYWtlIHN1cmUgbWF4X3Zwb3J0IGJvdW5kIGxvb3BzIGRvbiYjMzk7dCBlbmQgdXAKJiM0MzsJICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LgomIzQzOwkgKi8KJiM0MzsJYWRhcHRlci0mZ3Q7bWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzOwomIzQzOwogCS8qIFN0YXJ0IHRoZSBtYWlsYm94IHRhc2sgYmVmb3JlIHJlcXVlc3RpbmcgdmVjdG9ycy4gVGhpcyB3aWxsIGVuc3VyZQogCSAqIHZlY3RvciBpbmZvcm1hdGlvbiByZXNwb25zZSBmcm9tIG1haWxib3ggaXMgaGFuZGxlZAogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzMgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzOiBgaWF2ZmAsIGBpY2VgLCBhbmQgYGlkcGZgLiBJIHNlZSBhIHNlcmllcyBvZiBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBzbyBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZW0gbWV0aG9kaWNhbGx5LgoKRmlyc3QsIGluIGBpYXZmX3ZpcnRjaG5sLmNgLCB0aGVyZSYjMzk7cyBlbmhhbmNlZCB2YWxpZGF0aW9uIGluIGBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXNgLiBJdCBub3cgY29uc2lkZXJzIHRoZSBtZXNzYWdlIGxlbmd0aCAoYG1zZ2xlbmApIHdoZW4gdmFsaWRhdGluZyB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgZnVuY3Rpb25zLCB3aGljaCBpcyBnb29kIGZvciByb2J1c3RuZXNzLiBUaGUgdXNlIG9mIGBtaW4obXNnbGVuLCBsZW4pYCBpbiBgaWF2Zl9nZXRfdmZfY29uZmlnYCBhbmQgYGlhdmZfdmlydGNobmxfY29tcGxldGlvbmAgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCBtZXNzYWdlcyBncmFjZWZ1bGx5LgoKTmV4dCwgaW4gYGljZS5oYCwgdGhlIGNoZWNrIGluIGBpY2VfaXNfdHh0aW1lX2VuYWAgc2VlbXMgdG8gYmUgZmlsdGVyaW5nIGZvciBzcGVjaWZpYyBWU0kgdHlwZXMsIGxpa2VseSBvcHRpbWl6aW5nIHRoZSB0cmFuc21pdCB0aW1lIGVuYWJsZSBsb2dpYy4KCmBpY2VfY29tbW9uLmNgIHNob3dzIGNoYW5nZXMgdG8gYGljZV9zYnFfcndfcmVnYCwgd2hpY2ggaGFuZGxlcyBTeXN0ZW0gQnVzIFF1ZXVlIChTQlEpIG1lc3NhZ2Ugd3JpdGVzIGFuZCByZWFkcywgd2l0aCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvc3RlZCBhbmQgbm9uLXBvc3RlZCB3cml0ZXMuIFRoZSB1c2Ugb2YgYGljZV9zYnFfbXNnX3dyX25wYCBpbiBgaWNlX3dyaXRlX2NndV9yZWdgIHN1Z2dlc3RzIGFuIG9wdGltaXphdGlvbiBpbiByZWdpc3RlciBhY2Nlc3MuIFRoZSBjaGFuZ2VzIHRvIGBpY2VfY29udHJvbHEuY2AgYW5kIGBpY2VfY29udHJvbHEuaGAgcmVnYXJkaW5nIHBvc3RlZCBtZXNzYWdlcyBpbiBgaWNlX3NxX3NlbmRfY21kYCBhcmUgaW50ZXJlc3Rpbmc7IG5vdCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlLCBidXQgcmVxdWlyZXMgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uCgpOb3csIGEgY291cGxlIG9mIGNoYW5nZXMgaW4gYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX3ZmX2xpYi5jYCBzdGFuZCBvdXQuIFRoZSByZW1vdmFsIG9mIHRoZSBgaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpYCBjaGVjayBpbiBgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmYCBhbmQgYGljZV9yZXNldF9hbGxfdmZzYCBoaW50cyB0aGF0IHRoZXkgYXJlIGdlbmVyYWxpemluZyBlc3dpdGNoIGF0dGFjaCBsb2dpYy4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGluIHRoZSBjb250ZXh0IG9mIGVzd2l0Y2ggbW9kZS4gQW5kIHNpbWlsYXJseSBmb3IgYGljZV9zcmlvdi5jYCwgYSBjaGVjayBmb3IgZXN3aXRjaCBtb2RlIGhhcyBiZWVuIGFkZGVkLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHN3aXRjaGRldi4KCkluIGBpY2VfbGFnLmNgLCBhbiB1cGRhdGUgdG8gdGhlIGxvb3AgYm91bmQgaW4gYGljZV9pbml0X2xhZ2Agc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVjb25maWd1cmF0aW9uIG9mIHRoZSBMQUcgcHJvZmlsZSBoYW5kbGluZzsgY2hhbmdpbmcgZnJvbSBhIHZlcnkgc3BlY2lmaWMgZW51bSB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcHJvZmlsZXMgc291bmRzIG1vcmUgZ2VuZXJhbC4KCmBpY2VfbGliLmNgIG5vdyBjb25kaXRpb25hbGx5IHNldHMgdGhlIGBJQ0VfVFhfUklOR19GTEFHU19HQ1NgIGZsYWcgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydCAoYElDRV9GX0dDU2ApIHdoZW4gYWxsb2NhdGluZyByaW5ncywgd2hpY2ggbWVhbnMgdGhlIHJpbmcgZmxhZ3MgbWF5IGNoYW5nZSBiYXNlZCBvbiB0aGUgaGFyZHdhcmUuCgpgaWNlX21haW4uY2AgaXMgc2lnbmlmaWNhbnQuIFRoZSByZW1vdmFsIG9mIGBORVRJRl9GX0lQX0NTVU1gIGFuZCBgTkVUSUZfRl9JUFY2X0NTVU1gIGluIGBpY2Vfc2V0X25ldGRldl9mZWF0dXJlc2AgaW4gZmF2b3Igb2YgYE5FVElGX0ZfSFdfQ1NVTWAgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIGNvbXBsZXRlIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgYmVuZWZpY2lhbCBzaGlmdC4gVGhlIHJlbW92YWwgb2YgdGhlIG11dHVhbCBleGNsdXNpdml0eSBjaGVjayBmb3IgVFNPIGFuZCBHQ1MsIGFuZCB0aGUgcmVtb3ZhbCBvZiBoYXJkd2FyZSBsaW1pdGF0aW9ucyBmb3IgVFNPIHdpdGggR0NTLCBzaG93cyB0aGV5JiMzOTtyZSBtYWtpbmcgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgdG8gdXNlIG1vcmUgbW9kZXJuIGZlYXR1cmVzLgoKSW4gYGljZV9wYXJzZXIuY2AsIHRoZSBib3VuZHMgY2hlY2sgaW4gYGljZV9wYXJzZXJfcHJvZmlsZV9pbml0YCBmb3IgYHJzbHQtJmd0O3B0eXBlYCBpcyBhbm90aGVyIGdvb2Qgc2VjdXJpdHkvcm9idXN0bmVzcyBjaGVjay4KClRoZSBQVFAtcmVsYXRlZCBjaGFuZ2VzIGluIGBpY2VfcHRwLmNgIGFuZCBgaWNlX3B0cF9ody5jYCAodXNpbmcgYFJFQURfT05DRWAsIGNoZWNraW5nIGBwdHAtJmd0O3N0YXRlYCwgZmx1c2hpbmcgU0JRIGluIGBpY2VfcHRwX2V4ZWNfdG1yX2NtZGAsIGFuZCB1c2luZyBgaWNlX3NicV9tc2dfd3JfcGApIHN1Z2dlc3QgZW5oYW5jZW1lbnRzIHRvIFBUUCAoUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wpIGhhbmRsaW5nLiBJdCBpbXBsaWVzIHRoZSB1c2FnZSBvZiB0aGUgYnVzIHF1ZXVlIGZvciB0aGlzIHB1cnBvc2UuCgpgaWNlX3R4cnguY2Agbm93IHVzZXMgYSBmYWxsYmFjayBsYWJlbCBmb3Igc29mdHdhcmUgY2hlY2tzdW0uIEFsc28sIGl0IG5vdyBjaGVja3MgYElDRV9UWF9SSU5HX0ZMQUdTX0dDU2AgaW5zdGVhZCBvZiBgTkVUSUZfRl9IV19DU1VNYCwgd2hpY2ggcmVsYXRlcyB0byBwcmV2aW91cyBmZWF0dXJlIGNoYW5nZXMuCgpGaW5hbGx5LCBgaWRwZl92aXJ0Y2hubC5jYCBlbnN1cmVzIGBhZGFwdGVyLSZndDttYXhfdnBvcnRzYCBpcyBzZXQgKmFmdGVyKiBhbGxvY2F0aW9ucywgcHJldmVudGluZyBwb3RlbnRpYWwgY3Jhc2hlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3Igcm9idXN0IGluaXRpYWxpemF0aW9uLgoKTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGNsZWFybHkgZm9yIG5ldHdvcmsgZnVuY3Rpb25zLiBUaGUgYGlhdmZgIHBhcnQgZGVhbHMgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiwgYGljZWAgaXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBhbmQgYGlkcGZgIGlzIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBMaW51eCBEcml2ZXIuCgpDYW4gd2UgZnV6eiB0aGVtPyBTeXprYWxsZXIgZnV6emVyIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgYXMgaXQgaXMgYSBrZXJuZWwgZnV6emVyLiBJdCBvZnRlbiBmb2N1c2VzIG9uIG5ldGxpbmsgYW5kIGlvY3QKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTU5NC1DT05GSUdfRk0xMEs9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjA5OkNPTkZJR19JQ0U9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfRk0xMEspICYjNDM7PSBmbTEway9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2UvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfSURQRikgJiM0Mzs9IGlkcGYvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT02MD1pY2UtJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSBpY2VfeHNrLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MTppY2UtJChDT05GSUdfSUNFX1NXSVRDSERFVikgJiM0Mzs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYyLWljZS0kKENPTkZJR19HTlNTKSAmIzQzOz0gaWNlX2duc3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYzOmljZS0kKENPTkZJR19JQ0VfSFdNT04pICYjNDM7PSBpY2VfaHdtb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTExLXZvaWQgaWNlX2Vzd2l0Y2hfZGV0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDozNTojZWxzZSAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9OTg9c3RhdGljIGlubGluZSB2b2lkIGljZV9lc3dpdGNoX2RlY2ZnX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBjb25zdCB1OCAqbWFjKSB7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtOC12b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xMS1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDUwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MzAgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDYzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIxNzU9c3RhdGljIGludCBpY2VfcHRwX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5MC1cdGNhc2UgSUNFX01BQ19FODMwOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIxOTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1MjU6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MzAtXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBJbnRlbCBFdGhlcm5ldCBEcml2ZXJzOiBBIEZlYXNpYmlsaXR5IENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBpY2VgLCBgaWF2ZmAsIGFuZCBgaWRwZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoZW0/IEkga25vdyBQQ0kgZHJpdmVycyBhcmUgZ2VuZXJhbGx5IGZhaXIgZ2FtZSBpZiB0aGV5JiMzOTtyZSBlbmFibGVkIGFuZCBzeXprYWxsZXIgdXNlcyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaWAuIEJ1dCwgSSYjMzk7bSBhd2FyZSB0aGF0IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBoYXMgaXRzIGxpbWl0YXRpb25zLgoKVGhlbiBJIHJlY2FsbGVkIHRoYXQgYFdvcnRoRnV6emluZ2AgY2F2ZWF0IOKAkyB0aGUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2hlbiBzb2Z0d2FyZSBlbXVsYXRpb24gaXMgZW1wbG95ZWQgKHRoaW5rIHVzYiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0pLiBTbywgaWYgdGhlcmUgaXNuJiMzOTt0IGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgYGljZWAsIGBpYXZmYCwgb3IgYGlkcGZgLCB0aGF0IHByb2JhYmx5IG1lYW5zIHRoZXNlIGRyaXZlcnMgYXJlIG91dCBvZiByZWFjaCBmb3IgYSBzdGFuZGFyZCBHQ0Ugb3IgUUVNVSBzZXR1cC4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUUVNVSAqYWN0dWFsbHkqIG9mZmVycyBlbXVsYXRpb24gZm9yIGBpYXZmYCBvciBgaWNlYC4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgdGhleSYjMzk7cmUgbWlzc2luZy4gQSBxdWljayBtZW50YWwgcmV2aWV3IG9mIFFFTVUmIzM5O3MgbmV0d29yayBkZXZpY2VzIGdpdmVzIG1lIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBldGMuLCBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIGB2aXJ0aW8tbmV0YC4gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyBhbnl0aGluZyBzcGVjaWZpYyBmb3IgdGhlIEU4MDAgc2VyaWVzIG9yIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb25hbGl0eS4gQnV0IEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBRRU1VIGRvY3VtZW50YXRpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsLUJhc2VkIElDRSBFbXVsYXRpb24gSW5xdWlyeSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWNhbGlicmF0ZS4gSSB3YXMganVzdCBzZWFyY2hpbmcgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbm90IFFFTVUuIFdyb25nIGNvbnRleHQuIE5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkga2VybmVsLWxldmVsIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIGBpY2VgIGRyaXZlci4gWW91IGtub3csIHNvbWV0aGluZyBha2luIHRvIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpcmVsZXNzIG9yIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JrIGRldmljZXMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgYSB3YXkgdG8gdGVzdCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGlzIGBpY2VgIGRyaXZlciB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0ZGV2c2ltYCBpc24mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LCBJIGFscmVhZHkga25vdyB0aGF0LiBTbywgdGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyAqYW55KiBvZiB0aGUga2VybmVsIHByb3ZpZGUgbWUgd2l0aCBlbXVsYXRpb24gZm9yIGBpY2VgPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3BjaV90YmwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTExMD1zdGF0aWMgaW50IGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQzOiAqIEBlbnQ6IGVudHJ5IGluIGljZV9wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ0LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTc1ND1zdGF0aWMgdm9pZCBpY2VfcGNpX2Vycl9yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1NzU5Oi8qIGljZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2MC0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NjYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1NzY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpY2VfcGNpX3RibFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfQkFDS1BMQU5FKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MTktfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4MjA6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGljZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTgzMj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MzMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNDpcdC5pZF90YWJsZSA9IGljZV9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNS1cdC5wcm9iZSA9IGljZV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIzOQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBJbmFjY2Vzc2libGUgQ29kZSBQYXRocyoqCgpPa2F5LCB0aGVzZSBQQ0kgSURzIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8gcmVhbCBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgdG91Y2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSBrbm93IFN5emthbGxlciBoYXMgYHN5el9wY2lgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nIGFzIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLiBIb3dldmVyLCBpdCYjMzk7cyBub3QgYSAqZnVsbCogaGFyZHdhcmUgZW11bGF0b3I7IGl0JiMzOTtzIG1vcmUgbGlrZSBhIHRvb2wgdG8gaW5qZWN0IFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBIbW0sIEkgd29uZGVyIGlmIFN5emthbGxlciBmdXp6ZWQgc29tZXRoaW5nIGxpa2UgYGljZWAgdXNpbmcgdGhhdCBtZXRob2Q/IEkgZG9uJiMzOTt0IGhhdmUgYWNjZXNzIHRvIFN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gY29uZmlybSwgYnV0IHRoZSBwcm9tcHQgaXMgaGVscGZ1bCBhbmQgY2xlYXI6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7LiBJZiBgc3l6X3BjaWAgY2FuJiMzOTt0IHJlYWNoIGl0LCB0aGVuIGl0JiMzOTtzIGNsZWFybHkgaW1wb3NzaWJsZSB0byByZWFjaC4gV2FpdCBhIG1vbWVudCwgYHN5el9wY2lgIGlzbiYjMzk7dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYnV0IGEgZnV6emVyIHBzZXVkby1kZXZpY2UuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgZW11bGF0ZWQgaGFyZHdhcmUuIElmIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciAobGlrZSB0aGUgZXhhbXBsZXMgZ2l2ZW4pLCB0aGVuIGl0JiMzOTtzIHVucmVhY2hhYmxlLgoKT2theSwgZG9lcyBTeXprYWxsZXIgdGVzdCBFdGhlcm5ldCBkcml2ZXJzIHdpdGggYHN5el9wY2lgPyBJIGtub3cgU3l6a2FsbGVyIGRvZXMgdXNlIGBzeXpfcGNpYCB0byBmdXp6IHNvbWUgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCYjMzk7cyBwcmV0dHkgc2hhbGxvdy4gU28sIGJhY2sgdG8gYGljZWAgb3IgYGlhdmZgLCBjYW4gdGhleSBhY3R1YWxseSBiZSByZWFjaGVkPyBXYWl0LCBgaWF2ZmAgaXMgYSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gQ2FuIGl0IGV2ZW4gYmUgaW5zdGFudGlhdGVkIGluIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBubywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRob3NlLiBTbywgd2hhdCBlbHNlIGlzIHBvc3NpYmxlPwoKVGhlbiBJIHdlbnQgYmFjayB0byB0aGUgcHJvbXB0LCB3aGljaCBjb25maXJtczogJiMzNDsuLi5pbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgU2luY2UgYGljZWAsIGBpYXZmYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGZ1bmRhbWVudGFsbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRoaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBpc24mIzM5O3Qgc29tZSBvYnNjdXJlIGVtdWxhdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZywgYnV0IEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGF0IGNvbmNsdXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQVZGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjUwPWNvbmZpZyBJNDBFX0RDQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjYwLSMgdGhpcyBpcyBoZXJlIHRvIGFsbG93IHNlYW1sZXNzIG1pZ3JhdGlvbiBmcm9tIEk0MEVWRiAtLVx1MDAzZSBJQVZGIG5hbWVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjYxOiMgc28gdGhhdCBDT05GSUdfSUFWRiBzeW1ib2wgd2lsbCBhbHdheXMgbWlycm9yIHRoZSBzdGF0ZSBvZiBDT05GSUdfSTQwRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI2Mi1jb25maWcgSUFWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19JNDBFKSAmIzQzOz0gaTQwZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19JQVZGKSAmIzQzOz0gaWF2Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19GTTEwSykgJiM0Mzs9IGZtMTBrL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGU9MTA9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGUtMTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19JQVZGKSAmIzQzOz0gaWF2Zi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlLTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipJRFBGIEVtdWxhdGlvbjogQSBRdWljayBDaGVjayoqCgpIbW0sIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGVyZSBhbnkgY3VycmVudCwgYWN0aXZlbHkgbWFpbnRhaW5lZCBlbXVsYXRpb24gb2YgdGhlIElEUEYgc3RhbmRhcmQ/JiMzNDsgSSBrbm93IGVQdWIgaXMgdGhlIG1vc3QgY29tbW9uIGZvcm1hdCwgYW5kIHRoZSBJRFBGIChJbnRlcm5hdGlvbmFsIERpZ2l0YWwgUHVibGlzaGluZyBGb3J1bSkgd2FzIHBpdm90YWwgaW4gaXRzIGRldmVsb3BtZW50LiBOb3cgdGhhdCB0aGUgVzNDIGhhcyB0YWtlbiBvdmVyLCBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUgYXJlIGFueSBwcm9qZWN0cyBvdXQgdGhlcmUgdGhhdCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gZW11bGF0aW5nIHRoZSAqb2xkZXIqIElEUEYgc3BlY2lmaWNhdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgdGVzdGluZywgaGlzdG9yaWNhbCBhbmFseXNpcywgb3IgcGVyaGFwcyBldmVuIHJldHJvLWNvbXB1dGluZyBwdXJwb3Nlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGFueSBzdWNoIGVtdWxhdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBmb2N1cyBoYXMgc29sZWx5IHNoaWZ0ZWQgdG8gbW9yZSBjb250ZW1wb3Jhcnkgc3RhbmRhcmRzLiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRoZSBldm9sdXRpb24gb2YgdGhlIGZvcm1hdCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JRFBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9NTk1PUNPTkZJR19JR0M9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTY6Q09ORklHX0lEUEY9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy01OTctIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXRcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYxMT1DT05GSUdfSUdDPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjEyOkNPTkZJR19JRFBGPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctNjEzLSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lDRSkgJiM0Mzs9IGljZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JRFBGKSAmIzQzOz0gaWRwZi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lEUEYpICYjNDM7PSBpZHBmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGU9OD1pZHBmLXkgOj0gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZToyMDppZHBmLSQoQ09ORklHX0lEUEZfU0lOR0xFUSlcdCYjNDM7PSBpZHBmX3NpbmdsZXFfdHhyeC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTc0Nj1zdGF0aWMgaW5saW5lIGludCBpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHUxNiBxX21vZGVsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtNzQ3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjc0ODpcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtNzQ5LVx0ICAgICAgIHFfbW9kZWwgPT0gVklSVENITkwyX1FVRVVFX01PREVMX1NQTElUO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTE1NTA9aW50IGlkcGZfc2VuZF9jcmVhdGVfdnBvcnRfbXNnKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjE1NzE6XHRpZiAoYWRhcHRlci1cdTAwM2VyZXFfdHhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3Mi1cdFx0dnBvcnRfbXNnLVx1MDAzZXR4cV9tb2RlbCA9IGNwdV90b19sZTE2KFZJUlRDSE5MMl9RVUVVRV9NT0RFTF9TUExJVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjE1NzY6XHRpZiAoYWRhcHRlci1cdTAwM2VyZXFfcnhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3Ny1cdFx0dnBvcnRfbXNnLVx1MDAzZXJ4cV9tb2RlbCA9IGNwdV90b19sZTE2KFZJUlRDSE5MMl9RVUVVRV9NT0RFTF9TUExJVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MTYyNj1pbnQgaWRwZl9jaGVja19zdXBwb3J0ZWRfZGVzY19pZHMoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE2MzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNjM1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTYzNi1cdCAgICAodnBvcnRfbXNnLVx1MDAzZXJ4cV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU0lOR0xFIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTY5CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogMTA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlIHByb21wdCYjMzk7cyB3b3JkaW5nIGlzIHF1aXRlIHNwZWNpZmljOiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2guLi4gZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIGtleS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3Igc29mdHdhcmUgZW11bGF0aW9uIG9mIGBpZHBmYC4gTm9wZSwgdGhlcmUgaXNuJiMzOTt0IGFueS4gVGhhdCBtZWFucyB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgcGxhaW4gYW5kIHNpbXBsZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBQQ0kgZHJpdmVycyBoZXJlLCBzbyBsZXQgbWUgcXVpY2tseSByZW1lbWJlciBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIHRoZXNlLiBZZXMsIGBzeXpfcGNpYCBleGlzdHMsIGl0IGFsbG93cyBmdXp6aW5nIG9mIFBDSSBkcml2ZXJzLiBCdXQgaXQmIzM5O3MgbGltaXRlZC4gSXQgY2FuIGluamVjdCBhIGZha2UgZGV2aWNlIGJ1dCB1c3VhbGx5IGNhbiYjMzk7dCBlbXVsYXRlIGhhcmR3YXJlIGJlaGF2aW9ycyBwcm9wZXJseS4gT2Z0ZW4sIHByb2JlIGZ1bmN0aW9ucyBmYWlsIGVhcmx5IGJlY2F1c2Ugb2YgdGhpcy4gVXN1YWxseSBub3Qgd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZpbGVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9gLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIEludGVsIEV0aGVybmV0IGRyaXZlcnMsIGhhcmR3YXJlLXNwZWNpZmljLiBTaW5jZSB0aGV5IGxhY2sgc29mdHdhcmUgZW11bGF0aW9uLCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGV5JiMzOTtyZSBub3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgY2xlYXIgb24gdGhpczogaWYgdGhlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBpYXZmYCwgYGljZWAsIG9yIGBpZHBmYC4gYGlhdmZgIGlzIHRoZSBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEYuIGBpY2VgIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCBgaWRwZmAgaXMgdGhlIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIuIE5vcGUsIG5vIGVtdWxhdGlvbiBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0uIFRoZXkmIzM5O3JlIGRlYWQtZW5kcyBpbiBHQ0Ugb3IgUUVNVS4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYW5hbHlzaXMuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gdGhlIGZhY3QgdGhhdCB0aGVzZSBkcml2ZXJzIGFyZSB0aWVkIHRvIHNwZWNpZmljIEludGVsIGhhcmR3YXJlIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uLiBUaGV5IGZhbGwgZGlyZWN0bHkgaW50byB0aGUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgY2F0ZWdvcnkuIEl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBmbGFnIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKT2theSwgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBtb2RpZmllZDogIGBpYXZmX3ZpcnRjaG5sLmNgLCBtdWx0aXBsZSBgaWNlYCBmaWxlcywgYW5kIGBpZHBmX3ZpcnRjaG5sLmNgLiBBbGwgSW50ZWwgRXRoZXJuZXQgZHJpdmVycywgYWxsIGhhcmR3YXJlIGRlcGVuZGVudC4KCkkmIzM5O2xsIGZpbmFsaXplIHRoZSByZXN1bHQ6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDguODEzNjMxMDY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNzI3NjE0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDguODEzNjM3NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxNTQ5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjU2YWM5YThkOTlhYzc3OWQwODU0OTU1NDIyMWMxZjUyYTkxMmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDIyOjUwOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uYzQwMzlkMmIyNGE0YmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xcbkBAIC0yNDgsMTIgKzI0OCwyOCBAQCBpbnQgaWF2Zl9zZW5kX3ZmX3B0cF9jYXBzX21zZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiAvKipcXG4gICogaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzXFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxcbisgKiBAbXNnbGVuOiBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIFZGIHJlc291cmNlIG1lc3NhZ2VcXG4gICpcXG4tICogVmFsaWRhdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGUgUEYgaGFzIHNlbnQgaW5cXG4tICogVklSVENITkxfT1BfR0VUX1ZGX1JFU09VUkNFUyBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIFZGIGNhbiBoYW5kbGUuXFxuKyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmVcXG4rICogbnVtX3ZzaXMgZG9lcyBub3QgZXhjZWVkIHdoYXQgdGhlIG1lc3NhZ2UgbGVuZ3RoIGNhbiBjb3ZlciwgYW5kIGNhcFxcbisgKiBudW1fcXVldWVfcGFpcnMgdG8gdGhlIFZGIG1heGltdW0uXFxuICAqKi9cXG4tc3RhdGljIHZvaWQgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuK3N0YXRpYyB2b2lkIGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCB1MTYgbXNnbGVuKVxcbiB7XFxuK1xcdHUxNiBtYXhfdnNpcztcXG4rXFxuK1xcdGlmIChtc2dsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSlcXG4rXFx0XFx0bWF4X3ZzaXMgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1heF92c2lzID0gKG1zZ2xlbiAtIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdmZfcmVzb3VyY2UpKSAvXFxuK1xcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTtcXG4rXFxuK1xcdGlmIChhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV92c2lzIFxcdTAwM2UgbWF4X3ZzaXMpIHtcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlJlY2VpdmVkICVkIFZTSXMsIGJ1dCBtZXNzYWdlIGNhbiBvbmx5IGNvdmVyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgYWRhcHRlci1cXHUwMDNldmZfcmVzLVxcdTAwM2VudW1fdnNpcywgbWF4X3ZzaXMpO1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV92c2lzID0gbWF4X3ZzaXM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2V2Zl9yZXMtXFx1MDAzZW51bV9xdWV1ZV9wYWlycyBcXHUwMDNlIElBVkZfTUFYX1JFUV9RVUVVRVMpIHtcXG4gXFx0XFx0c3RydWN0IHZpcnRjaG5sX3ZzaV9yZXNvdXJjZSAqdnNpX3JlcztcXG4gXFx0XFx0aW50IGk7XFxuQEAgLTMwMCw3ICszMTYsNyBAQCBpbnQgaWF2Zl9nZXRfdmZfY29uZmlnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdCAqIHdlIGFyZW4ndCBnZXR0aW5nIHRvbyBtYW55IHF1ZXVlc1xcbiBcXHQgKi9cXG4gXFx0aWYgKCFlcnIpXFxuLVxcdFxcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyKTtcXG4rXFx0XFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihldmVudC5tc2dfbGVuLCBsZW4pKTtcXG4gXFx0aWF2Zl92Zl9wYXJzZV9od19jb25maWcoaHcsIGFkYXB0ZXItXFx1MDAzZXZmX3Jlcyk7XFxuIFxcbiBcXHRrZnJlZShldmVudC5tc2dfYnVmKTtcXG5AQCAtMjU3OCw3ICsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcXG4gXFxuIFxcdFxcdG1lbWNweShhZGFwdGVyLVxcdTAwM2V2Zl9yZXMsIG1zZywgbWluKG1zZ2xlbiwgbGVuKSk7XFxuLVxcdFxcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyKTtcXG4rXFx0XFx0aWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzKGFkYXB0ZXIsIG1pbihtc2dsZW4sIGxlbikpO1xcbiBcXHRcXHRpYXZmX3ZmX3BhcnNlX2h3X2NvbmZpZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIGFkYXB0ZXItXFx1MDAzZXZmX3Jlcyk7XFxuIFxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKSB7XFxuIFxcdFxcdFxcdC8qIHJlc3RvcmUgY3VycmVudCBtYWMgYWRkcmVzcyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5pbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTc2Nyw2ICs3NjcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX2lzX3R4dGltZV9lbmEoY29uc3Qgc3RydWN0IGljZV90eF9yaW5nICpyaW5nKVxcbiBcXHRzdHJ1Y3QgaWNlX3ZzaSAqdnNpID0gcmluZy1cXHUwMDNldnNpO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4gXFxuK1xcdGlmICh2c2ktXFx1MDAzZXR5cGUgIT0gSUNFX1ZTSV9QRilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0cmV0dXJuIHRlc3RfYml0KHJpbmctXFx1MDAzZXFfaW5kZXgsICBwZi1cXHUwMDNldHh0aW1lX3R4cXMpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbmluZGV4IGVmMWNlMTA2ZjgxYjVlLi41Mzk3NGViYWFmZmEwMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbkBAIC0xNzYyLDYgKzE3NjIsNyBAQCBpbnQgaWNlX3NicV9yd19yZWcoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCAqaW4sIHUxNiBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3NicV9jbWRfZGVzYyBkZXNjID0gezB9O1xcbiBcXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zcV9jZCBjZCA9IHt9O1xcbiBcXHR1MTYgbXNnX2xlbjtcXG4gXFx0aW50IHN0YXR1cztcXG4gXFxuQEAgLTE3NzQsMTkgKzE3NzUsMzMgQEAgaW50IGljZV9zYnFfcndfcmVnKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgKmluLCB1MTYgZmxhZ3MpXFxuIFxcdG1zZy5tc2dfYWRkcl9sb3cgPSBjcHVfdG9fbGUxNihpbi1cXHUwMDNlbXNnX2FkZHJfbG93KTtcXG4gXFx0bXNnLm1zZ19hZGRyX2hpZ2ggPSBjcHVfdG9fbGUzMihpbi1cXHUwMDNlbXNnX2FkZHJfaGlnaCk7XFxuIFxcbi1cXHRpZiAoaW4tXFx1MDAzZW9wY29kZSlcXG4rXFx0c3dpdGNoIChpbi1cXHUwMDNlb3Bjb2RlKSB7XFxuK1xcdGNhc2UgaWNlX3NicV9tc2dfd3JfcDpcXG4rXFx0Y2FzZSBpY2Vfc2JxX21zZ193cl9ucDpcXG4gXFx0XFx0bXNnLmRhdGEgPSBjcHVfdG9fbGUzMihpbi1cXHUwMDNlZGF0YSk7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogRTgxMCBGVyBvbmx5IHN1cHBvcnRzIG9wY29kZSAweDAxLCBjb252ZXJ0IG5vbi1wb3N0ZWQgdG8gcG9zdGVkICovXFxuK1xcdFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODEwKVxcbitcXHRcXHRcXHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgaWNlX3NicV9tc2dfcmQ6XFxuIFxcdFxcdC8qIGRhdGEgcmVhZCBjb21lcyBiYWNrIGluIGNvbXBsZXRpb24sIHNvIHNob3J0ZW4gdGhlIHN0cnVjdCBieVxcbiBcXHRcXHQgKiBzaXplb2YobXNnLmRhdGEpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRtc2dfbGVuIC09IHNpemVvZihtc2cuZGF0YSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRTgxMCBkb2Vzbid0IHN1cHBvcnQgcG9zdGVkIG1vZGUsIGFsd2F5cyB3YWl0IGZvciBjb21wbGV0aW9uICovXFxuK1xcdGNkLnBvc3RlZCA9IGluLVxcdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaHctXFx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMDtcXG4gXFxuIFxcdGRlc2MuZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7XFxuIFxcdGRlc2Mub3Bjb2RlID0gY3B1X3RvX2xlMTYoaWNlX3NicV9vcGNfbmVpZ2hfZGV2X3JlcSk7XFxuIFxcdGRlc2MucGFyYW0wLmNtZF9sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTtcXG4tXFx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIFxcdTAwMjZtc2csIG1zZ19sZW4sIE5VTEwpO1xcbi1cXHRpZiAoIXN0YXR1cyBcXHUwMDI2XFx1MDAyNiAhaW4tXFx1MDAzZW9wY29kZSlcXG4rXFx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIFxcdTAwMjZtc2csIG1zZ19sZW4sIFxcdTAwMjZjZCk7XFxuK1xcdGlmICghc3RhdHVzIFxcdTAwMjZcXHUwMDI2IGluLVxcdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfcmQpXFxuIFxcdFxcdGluLVxcdTAwM2VkYXRhID0gbGUzMl90b19jcHVcXG4gXFx0XFx0XFx0KCgoc3RydWN0IGljZV9zYnFfbXNnX2NtcGwgKilcXHUwMDI2bXNnKS1cXHUwMDNlZGF0YSk7XFxuIFxcdHJldHVybiBzdGF0dXM7XFxuQEAgLTY1NDcsNyArNjU2Miw3IEBAIGludCBpY2Vfd3JpdGVfY2d1X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IGNndV9tc2cgPSB7XFxuIFxcdFxcdC5kZXN0X2RldiA9IGljZV9nZXRfZGVzdF9jZ3UoaHcpLFxcbi1cXHRcXHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9ucCxcXG4gXFx0XFx0Lm1zZ19hZGRyX2xvdyA9IGFkZHIsXFxuIFxcdFxcdC5kYXRhID0gdmFsXFxuIFxcdH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xcbmluZGV4IGRjYjgzN2NhZGQxODI1Li5hNjAwOGRjNzdmYTQzOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcXG5AQCAtMTA4Niw2ICsxMDg2LDEwIEBAIGljZV9zcV9zZW5kX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSxcXG4gXFx0d3IzMihodywgY3EtXFx1MDAzZXNxLnRhaWwsIGNxLVxcdTAwM2VzcS5uZXh0X3RvX3VzZSk7XFxuIFxcdGljZV9mbHVzaChodyk7XFxuIFxcbitcXHQvKiBJZiB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQsIGRvbid0IHdhaXQgZm9yIGNvbXBsZXRpb24uICovXFxuK1xcdGlmIChjZCBcXHUwMDI2XFx1MDAyNiBjZC1cXHUwMDNlcG9zdGVkKVxcbitcXHRcXHRnb3RvIHNxX3NlbmRfY29tbWFuZF9lcnJvcjtcXG4rXFxuIFxcdC8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiBpdCBmaW5pc2hlcyB3aXRoaW4gdGhlXFxuIFxcdCAqIHRpbWVvdXQsIGNvcHkgdGhlIGRlc2NyaXB0b3IgYmFjayB0byB0ZW1wLlxcbiBcXHQgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXFxuaW5kZXggNzg4MDQwZGQ2NjJlMjMuLmM1MGQ2ZmNiYWNiYTU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XFxuIC8qIHNxIHRyYW5zYWN0aW9uIGRldGFpbHMgKi9cXG4gc3RydWN0IGljZV9zcV9jZCB7XFxuIFxcdHN0cnVjdCBsaWJpZV9hcV9kZXNjICp3Yl9kZXNjO1xcbitcXHR1OCBwb3N0ZWQgOiAxO1xcbiB9O1xcbiBcXG4gLyogcnEgZXZlbnQgaW5mb3JtYXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbmluZGV4IGMzMGUyN2JiZmU2ZTI1Li5iMDY5ZTZjNTE0ZmIxMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuQEAgLTUxMiw5ICs1MTIsNiBAQCBpbnQgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4gXFx0c3RydWN0IGljZV9yZXByICpyZXByO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0cmVwciA9IGljZV9yZXByX2NyZWF0ZV92Zih2Zik7XFxuIFxcdGlmIChJU19FUlIocmVwcikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHJlcHIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xcbmluZGV4IDMxMGU4ZmUyOTI1YzdkLi4wOGExN2RlZDBhZDU1NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xcbkBAIC0yNjIzLDcgKzI2MjMsNyBAQCBpbnQgaWNlX2luaXRfbGFnKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRnb3RvICBmcmVlX2xwb3J0X3JlcztcXG4gXFxuIFxcdC8qIGFzc29jaWF0ZSByZWNpcGVzIHRvIHByb2ZpbGVzICovXFxuLVxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBJQ0VfUFJPRklEX0lQVjZfR1RQVV9JUFY2X1RDUF9JTk5FUjsgbisrKSB7XFxuK1xcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBJQ0VfTUFYX05VTV9QUk9GSUxFUzsgbisrKSB7XFxuIFxcdFxcdGVyciA9IGljZV9hcV9nZXRfcmVjaXBlX3RvX3Byb2ZpbGUoXFx1MDAyNnBmLVxcdTAwM2VodywgbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlY2lwZV9iaXRzLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5pbmRleCA4Y2RjNGZkYTg5ZTk3OC4uZmM5ZDRlMGZhNzU1ODcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMTQxNSw2ICsxNDE1LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19yaW5ncyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLCByaW5nLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSwgcmluZy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0XFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcXG4rXFx0XFx0XFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHJpbmctXFx1MDAzZWZsYWdzKTtcXG4rXFxuIFxcdFxcdFdSSVRFX09OQ0UodnNpLVxcdTAwM2V0eF9yaW5nc1tpXSwgcmluZyk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zNDkxLDkgKzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdFxcdE5FVElGX0ZfUlhIQVNIO1xcbiBcXG4gXFx0Y3N1bW9fZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTVxcdCAgfFxcbi1cXHRcXHRcXHQgTkVUSUZfRl9JUF9DU1VNICB8XFxuIFxcdFxcdFxcdCBORVRJRl9GX1NDVFBfQ1JDIHxcXG4tXFx0XFx0XFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xcbitcXHRcXHRcXHQgTkVUSUZfRl9IV19DU1VNO1xcbiBcXG4gXFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxcbiBcXHRcXHRcXHQgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHxcXG5AQCAtMzU1NSwxMiArMzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0LyogQWxsb3cgY29yZSB0byBtYW5hZ2UgSVJRcyBhZmZpbml0eSAqL1xcbiBcXHRuZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpO1xcbiBcXG4tXFx0LyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzXFxuLVxcdCAqIG5kbyBjYWxsYmFjay5cXG4tXFx0ICovXFxuLVxcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXFxuLVxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNO1xcbi1cXG4gXFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpO1xcbiB9XFxuIFxcbkBAIC02NTAwLDE4ICs2NDkzLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbiBcXHRcXHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XFxuIFxcbi1cXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXFxuLVxcdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xcbi1cXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmNcXG5pbmRleCBmOGU2OTYzMGZiNzI2Ny4uM2VkZTRjMWE1YThhNWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcGFyc2VyLmNcXG5AQCAtMjM2OCw2ICsyMzY4LDkgQEAgaW50IGljZV9wYXJzZXJfcHJvZmlsZV9pbml0KHN0cnVjdCBpY2VfcGFyc2VyX3Jlc3VsdCAqcnNsdCxcXG4gXFx0dTE2IHByb3RvX29mZiA9IDA7XFxuIFxcdHUxNiBvZmY7XFxuIFxcbitcXHRpZiAocnNsdC1cXHUwMDNlcHR5cGUgXFx1MDAzZT0gSUNFX0ZMT1dfUFRZUEVfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdG1lbXNldChwcm9mLCAwLCBzaXplb2YoKnByb2YpKTtcXG4gXFx0c2V0X2JpdChyc2x0LVxcdTAwM2VwdHlwZSwgcHJvZi1cXHUwMDNlcHR5cGVzKTtcXG4gXFx0aWYgKGJsayA9PSBJQ0VfQkxLX1NXKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWMzZDg5ZDhkNGQzNDUuLmVhZWMzNmFiNmFlM2YzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuQEAgLTM0Niw3ICszNDYsNyBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMocGYtXFx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUsXFxuK1xcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVxcdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAoaW5fdHN0YW1wIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgbWFzayk7XFxuIH1cXG4gXFxuQEAgLTMwMzcsNiArMzAzNywxMSBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIFxcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcXHUwMDI2cGYtXFx1MDAzZXB0cDtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwdHAtXFx1MDAzZXN0YXRlID09IElDRV9QVFBfVU5JTklUKSB7XFxuK1xcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgd2FzIG5vdCBpbml0aWFsaXplZCwgc2tpcHBpbmcgcmVidWlsZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHB0cC1cXHUwMDNlc3RhdGUgPT0gSUNFX1BUUF9SRUFEWSkge1xcbiBcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBmLCByZXNldF90eXBlKTtcXG4gXFx0fSBlbHNlIGlmIChwdHAtXFx1MDAzZXN0YXRlICE9IElDRV9QVFBfUkVTRVRUSU5HKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuaW5kZXggOGU1Zjk3ODM1OTU0YzMuLmM2MDQ5MDk3ZjQ5ZDc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuQEAgLTM1Miw2ICszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9leGVjX3Rtcl9jbWQoc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIEZsdXNoIFNCUSB0byBlbnN1cmUgcG9zdGVkIHdyaXRlcyBjb21wbGV0ZSBiZWZvcmUgU1lOQyBjb21tYW5kLlxcbitcXHQgKiBTa2lwIGZvciBFODEwIC0gRlcgYWx3YXlzIHNlbmRzIGNvbXBsZXRpb25zLCBzbyB3cml0ZXMgYXJlIHN5bmNocm9ub3VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSAhPSBJQ0VfTUFDX0U4MTApIHtcXG4rXFx0XFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFxcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXFxcIkZhaWxlZCB0byBmbHVzaCBTQlE6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcXG4gXFx0XFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbkBAIC00NDIsNyArNDU2LDcgQEAgc3RhdGljIGludCBpY2Vfd3JpdGVfcGh5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4gXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3B0cF9nZXRfZGVzdF9kZXZfZTgyNShodywgcG9ydCksXFxuLVxcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cixcXG4rXFx0XFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXFxuIFxcdFxcdC5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLFxcbiBcXHRcXHQubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksXFxuIFxcdFxcdC5kYXRhID0gdmFsXFxuQEAgLTI2MTQsMTYgKzI2MjgsMTggQEAgaWNlX3JlYWRfNjRiX3BoeV9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IGxvd19hZGRyLCB1NjQgKnZhbClcXG4gICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlclxcbiAgKlxcbiAgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBmb3IgdGhlIGdpdmVuIHBvcnQgb3ZlciB0aGUgZGV2aWNlIHNpZGViYW5kIHF1ZXVlLlxcbisgKiBVc2VzIHBvc3RlZCB3cml0ZXMgLSByZXF1aXJlcyBTQlEgZmx1c2ggYmVmb3JlIFNZTkNfRVhFQ19DTUQuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIGljZV93cml0ZV9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXFxuK1xcdFxcdC5kYXRhID0gdmFsXFxuK1xcdH07XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFxcdTAwMjZtc2csIHBvcnQsIG9mZnNldCk7XFxuLVxcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuIFxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtMjgxMSwxNiArMjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbClcXG4gaW50XFxuIGljZV93cml0ZV9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgdmFsKVxcbiB7XFxuLVxcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XFxuK1xcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxcbitcXHRcXHQuZGF0YSA9IHZhbFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gaWNlX2ZpbGxfcXVhZF9tc2dfZTgyeChodywgXFx1MDAyNm1zZywgcXVhZCwgb2Zmc2V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTQ1MTQsMTggKzQ1MzAsMTkgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG4gICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBQSFlcXG4gICpcXG4gICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIG9mIHRoZSBleHRlcm5hbCBQSFkgb24gdGhlIEU4MTAgZGV2aWNlLlxcbisgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cXG4gICovXFxuIHN0YXRpYyBpbnQgaWNlX3dyaXRlX3BoeV9yZWdfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcXG4rXFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcXG4rXFx0XFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXFxuK1xcdFxcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxcbitcXHRcXHQubXNnX2FkZHJfbG93ID0gbG93ZXJfMTZfYml0cyhhZGRyKSxcXG4rXFx0XFx0Lm1zZ19hZGRyX2hpZ2ggPSB1cHBlcl8xNl9iaXRzKGFkZHIpLFxcbitcXHRcXHQuZGF0YSA9IHZhbFxcbitcXHR9O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXNnLm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkcik7XFxuLVxcdG1zZy5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKTtcXG4tXFx0bXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyO1xcbi1cXHRtc2cuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMDtcXG4tXFx0bXNnLmRhdGEgPSB2YWw7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfc2JxX3J3X3JlZyhodywgXFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxcbkBAIC01NSw3ICs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQge1xcbiBcXG4gZW51bSBpY2Vfc2JxX21zZ19vcGNvZGUge1xcbiBcXHRpY2Vfc2JxX21zZ19yZFxcdFxcdD0gMHgwMCxcXG4tXFx0aWNlX3NicV9tc2dfd3JcXHRcXHQ9IDB4MDEsXFxuK1xcdGljZV9zYnFfbXNnX3dyX3BcXHQ9IDB4MDEsXFxuIFxcdGljZV9zYnFfbXNnX3dyX25wXFx0PSAweDAyXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uZTA0ZGUwMjE1NTk2NjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTQ4NCwxMiArNDg0LDE0IEBAIHN0YXRpYyBpbnQgaWNlX3N0YXJ0X3ZmcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0Z290byB0ZWFyZG93bjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XFxuLVxcdFxcdGlmIChyZXR2YWwpIHtcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHR2Zi1cXHUwMDNldmZfaWQsIHJldHZhbCk7XFxuLVxcdFxcdFxcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XFxuLVxcdFxcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdFxcdGlmIChpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpIHtcXG4rXFx0XFx0XFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XFxuK1xcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBhdHRhY2ggVkYgJWQgdG8gZXN3aXRjaCwgZXJyb3IgJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHR2Zi1cXHUwMDNldmZfaWQsIHJldHZhbCk7XFxuK1xcdFxcdFxcdFxcdGljZV92Zl92c2lfcmVsZWFzZSh2Zik7XFxuK1xcdFxcdFxcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c2V0X2JpdChJQ0VfVkZfU1RBVEVfSU5JVCwgdmYtXFx1MDAzZXZmX3N0YXRlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcXG5pbmRleCA0Y2ExYTA2MDIzMDdkMC4uYjIwNjNhNTRkNmQ4MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xcbkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuIFxcdFxcdFxcdHJldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bDRfcHJvdG8sIFxcdTAwMjZmcmFnX29mZik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGRlZmluZSBvdXRlciB0cmFuc3BvcnQgKi9cXG5AQCAtMTY3MywxMSArMTY3Myw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4gXFx0XFx0XFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRpZiAoZmlyc3QtXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4tXFx0XFx0XFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIGNvbXB1dGUgb3V0ZXIgTDMgaGVhZGVyIHNpemUgKi9cXG5AQCAtMTczNiwxNCArMTczMiwxNCBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuIFxcdFxcdFxcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXFx1MDAzZWRhdGEsIFxcdTAwMjZsNF9wcm90byxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmcmFnX29mZik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0Z290byBjaGVja3N1bV9zd19mYjtcXG4gXFx0fVxcbiBcXG4gXFx0LyogY29tcHV0ZSBpbm5lciBMMyBoZWFkZXIgc2l6ZSAqL1xcbiBcXHRsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7XFxuIFxcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXFx1MDAzY1xcdTAwM2MgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7XFxuIFxcbi1cXHRpZiAoKHR4X3JpbmctXFx1MDAzZW5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShmaXJzdC1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xcbiBcXHRcXHQvKiBTZXQgR0NTICovXFxuQEAgLTE3ODksMTUgKzE3ODUsMTcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGlmIChmaXJzdC1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLVxcdFxcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xcbiBcXHR9XFxuIFxcbiBcXHRvZmYtXFx1MDAzZXRkX2NtZCB8PSBjbWQ7XFxuIFxcdG9mZi1cXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcXG4gXFx0cmV0dXJuIDE7XFxuK1xcbitjaGVja3N1bV9zd19mYjpcXG4rXFx0aWYgKGZpcnN0LVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IElDRV9UWF9GTEFHU19UU08pXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcXG5AQCAtMjE3LDYgKzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSxcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsXFxuIFxcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcXG4rXFx0SUNFX1RYX1JJTkdfRkxBR1NfR0NTLFxcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuaW5kZXggMjdlNGFjYjE2MjBmMGMuLjkwNTJlNzFlOWM5OWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuQEAgLTgxMiw3ICs4MTIsOCBAQCB2b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGljZV92Zl9wb3N0X3ZzaV9yZWJ1aWxkKHZmKTtcXG4gXFxuLVxcdFxcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xcbitcXHRcXHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxcbitcXHRcXHRcXHRpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcXG4gXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmYtXFx1MDAzZWNmZ19sb2NrKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXFxuaW5kZXggYmU2NmY5YjJlMTAxY2EuLmRjNWFkNzg0ZjQ1NmYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcXG5AQCAtMzU1NSw3ICszNTU1LDYgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcbiBcXHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKGFkYXB0ZXItXFx1MDAzZXBkZXYsIGlkcGZfZ2V0X21heF92ZnMoYWRhcHRlcikpO1xcbiBcXHRudW1fbWF4X3Zwb3J0cyA9IGlkcGZfZ2V0X21heF92cG9ydHMoYWRhcHRlcik7XFxuLVxcdGFkYXB0ZXItXFx1MDAzZW1heF92cG9ydHMgPSBudW1fbWF4X3Zwb3J0cztcXG4gXFx0YWRhcHRlci1cXHUwMDNldnBvcnRzID0ga3phbGxvY19vYmpzKCphZGFwdGVyLVxcdTAwM2V2cG9ydHMsIG51bV9tYXhfdnBvcnRzKTtcXG4gXFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2cG9ydHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zNTc2LDYgKzM1NzUsMTIgQEAgaW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdFxcdGdvdG8gZXJyX25ldGRldl9hbGxvYztcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2V0IG1heF92cG9ydHMgb25seSBhZnRlciB2cG9ydHMsIG5ldGRldnMgYW5kIHZwb3J0X2NvbmZpZyBidWZmZXJzXFxuK1xcdCAqIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSBzdXJlIG1heF92cG9ydCBib3VuZCBsb29wcyBkb24ndCBlbmQgdXBcXG4rXFx0ICogY3Jhc2hpbmcsIGZvbGxvd2luZyBhbGxvY2F0aW9uIGVycm9ycyBvbiBpbml0LlxcbitcXHQgKi9cXG4rXFx0YWRhcHRlci1cXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xcbitcXG4gXFx0LyogU3RhcnQgdGhlIG1haWxib3ggdGFzayBiZWZvcmUgcmVxdWVzdGluZyB2ZWN0b3JzLiBUaGlzIHdpbGwgZW5zdXJlXFxuIFxcdCAqIHZlY3RvciBpbmZvcm1hdGlvbiByZXNwb25zZSBmcm9tIG1haWxib3ggaXMgaGFuZGxlZFxcbiBcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDkuMzAzNDU2MzA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg4MjkzMDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyNTZhYzlhOGQ5OWFjNzc5ZDA4NTQ5NTU0MjIxYzFmNTJhOTEyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAyMjo1MDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbmluZGV4IGVjMjM0Y2M4YmQ5ZGIwLi5jNDAzOWQyYjI0YTRiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuQEAgLTI0OCwxMiArMjQ4LDI4IEBAIGludCBpYXZmX3NlbmRfdmZfcHRwX2NhcHNfbXNnKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gLyoqXG4gICogaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4rICogQG1zZ2xlbjogbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBWRiByZXNvdXJjZSBtZXNzYWdlXG4gICpcbi0gKiBWYWxpZGF0ZSB0aGF0IHRoZSBudW1iZXIgb2YgcXVldWVzIHRoZSBQRiBoYXMgc2VudCBpblxuLSAqIFZJUlRDSE5MX09QX0dFVF9WRl9SRVNPVVJDRVMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBWRiBjYW4gaGFuZGxlLlxuKyAqIFZhbGlkYXRlIHRoZSBWSVJUQ0hOTF9PUF9HRVRfVkZfUkVTT1VSQ0VTIHJlc3BvbnNlIGZyb20gdGhlIFBGLiBFbnN1cmVcbisgKiBudW1fdnNpcyBkb2VzIG5vdCBleGNlZWQgd2hhdCB0aGUgbWVzc2FnZSBsZW5ndGggY2FuIGNvdmVyLCBhbmQgY2FwXG4rICogbnVtX3F1ZXVlX3BhaXJzIHRvIHRoZSBWRiBtYXhpbXVtLlxuICAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbitzdGF0aWMgdm9pZCBpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTE2IG1zZ2xlbilcbiB7XG4rXHR1MTYgbWF4X3ZzaXM7XG4rXG4rXHRpZiAobXNnbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSlcbitcdFx0bWF4X3ZzaXMgPSAwO1xuK1x0ZWxzZVxuK1x0XHRtYXhfdnNpcyA9IChtc2dsZW4gLSBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZmX3Jlc291cmNlKSkgL1xuK1x0XHRcdCAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlKTtcbitcbitcdGlmIChhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyBcdTAwM2UgbWF4X3ZzaXMpIHtcbitcdFx0ZGV2X2luZm8oXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJSZWNlaXZlZCAlZCBWU0lzLCBidXQgbWVzc2FnZSBjYW4gb25seSBjb3ZlciAlZFxcblwiLFxuK1x0XHRcdCBhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcywgbWF4X3ZzaXMpO1xuK1x0XHRhZGFwdGVyLVx1MDAzZXZmX3Jlcy1cdTAwM2VudW1fdnNpcyA9IG1heF92c2lzO1xuK1x0fVxuK1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNldmZfcmVzLVx1MDAzZW51bV9xdWV1ZV9wYWlycyBcdTAwM2UgSUFWRl9NQVhfUkVRX1FVRVVFUykge1xuIFx0XHRzdHJ1Y3QgdmlydGNobmxfdnNpX3Jlc291cmNlICp2c2lfcmVzO1xuIFx0XHRpbnQgaTtcbkBAIC0zMDAsNyArMzE2LDcgQEAgaW50IGlhdmZfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0ICogd2UgYXJlbid0IGdldHRpbmcgdG9vIG1hbnkgcXVldWVzXG4gXHQgKi9cbiBcdGlmICghZXJyKVxuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4rXHRcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyLCBtaW4oZXZlbnQubXNnX2xlbiwgbGVuKSk7XG4gXHRpYXZmX3ZmX3BhcnNlX2h3X2NvbmZpZyhodywgYWRhcHRlci1cdTAwM2V2Zl9yZXMpO1xuIFxuIFx0a2ZyZWUoZXZlbnQubXNnX2J1Zik7XG5AQCAtMjU3OCw3ICsyNTk0LDcgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0dTE2IGxlbiA9IElBVkZfVklSVENITkxfVkZfUkVTT1VSQ0VfU0laRTtcbiBcbiBcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNldmZfcmVzLCBtc2csIG1pbihtc2dsZW4sIGxlbikpO1xuLVx0XHRpYXZmX3ZhbGlkYXRlX251bV9xdWV1ZXMoYWRhcHRlcik7XG4rXHRcdGlhdmZfdmFsaWRhdGVfbnVtX3F1ZXVlcyhhZGFwdGVyLCBtaW4obXNnbGVuLCBsZW4pKTtcbiBcdFx0aWF2Zl92Zl9wYXJzZV9od19jb25maWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgYWRhcHRlci1cdTAwM2V2Zl9yZXMpO1xuIFx0XHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpKSB7XG4gXHRcdFx0LyogcmVzdG9yZSBjdXJyZW50IG1hYyBhZGRyZXNzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5pbmRleCBmNzJiYjFhYTQwNjc0MS4uZmM5MWI2NjY1ZjkwNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTc2Nyw2ICs3NjcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX2lzX3R4dGltZV9lbmEoY29uc3Qgc3RydWN0IGljZV90eF9yaW5nICpyaW5nKVxuIFx0c3RydWN0IGljZV92c2kgKnZzaSA9IHJpbmctXHUwMDNldnNpO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiBcbitcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRyZXR1cm4gdGVzdF9iaXQocmluZy1cdTAwM2VxX2luZGV4LCAgcGYtXHUwMDNldHh0aW1lX3R4cXMpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuaW5kZXggZWYxY2UxMDZmODFiNWUuLjUzOTc0ZWJhYWZmYTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xuQEAgLTE3NjIsNiArMTc2Miw3IEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpY2Vfc2JxX2NtZF9kZXNjIGRlc2MgPSB7MH07XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfcmVxIG1zZyA9IHswfTtcbitcdHN0cnVjdCBpY2Vfc3FfY2QgY2QgPSB7fTtcbiBcdHUxNiBtc2dfbGVuO1xuIFx0aW50IHN0YXR1cztcbiBcbkBAIC0xNzc0LDE5ICsxNzc1LDMzIEBAIGludCBpY2Vfc2JxX3J3X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zYnFfbXNnX2lucHV0ICppbiwgdTE2IGZsYWdzKVxuIFx0bXNnLm1zZ19hZGRyX2xvdyA9IGNwdV90b19sZTE2KGluLVx1MDAzZW1zZ19hZGRyX2xvdyk7XG4gXHRtc2cubXNnX2FkZHJfaGlnaCA9IGNwdV90b19sZTMyKGluLVx1MDAzZW1zZ19hZGRyX2hpZ2gpO1xuIFxuLVx0aWYgKGluLVx1MDAzZW9wY29kZSlcbitcdHN3aXRjaCAoaW4tXHUwMDNlb3Bjb2RlKSB7XG4rXHRjYXNlIGljZV9zYnFfbXNnX3dyX3A6XG4rXHRjYXNlIGljZV9zYnFfbXNnX3dyX25wOlxuIFx0XHRtc2cuZGF0YSA9IGNwdV90b19sZTMyKGluLVx1MDAzZWRhdGEpO1xuLVx0ZWxzZVxuK1x0XHQvKiBFODEwIEZXIG9ubHkgc3VwcG9ydHMgb3Bjb2RlIDB4MDEsIGNvbnZlcnQgbm9uLXBvc3RlZCB0byBwb3N0ZWQgKi9cbitcdFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgxMClcbitcdFx0XHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGljZV9zYnFfbXNnX3JkOlxuIFx0XHQvKiBkYXRhIHJlYWQgY29tZXMgYmFjayBpbiBjb21wbGV0aW9uLCBzbyBzaG9ydGVuIHRoZSBzdHJ1Y3QgYnlcbiBcdFx0ICogc2l6ZW9mKG1zZy5kYXRhKVxuIFx0XHQgKi9cbiBcdFx0bXNnX2xlbiAtPSBzaXplb2YobXNnLmRhdGEpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogRTgxMCBkb2Vzbid0IHN1cHBvcnQgcG9zdGVkIG1vZGUsIGFsd2F5cyB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRjZC5wb3N0ZWQgPSBpbi1cdTAwM2VvcGNvZGUgPT0gaWNlX3NicV9tc2dfd3JfcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGh3LVx1MDAzZW1hY190eXBlICE9IElDRV9NQUNfRTgxMDtcbiBcbiBcdGRlc2MuZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7XG4gXHRkZXNjLm9wY29kZSA9IGNwdV90b19sZTE2KGljZV9zYnFfb3BjX25laWdoX2Rldl9yZXEpO1xuIFx0ZGVzYy5wYXJhbTAuY21kX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xuLVx0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgXHUwMDI2bXNnLCBtc2dfbGVuLCBOVUxMKTtcbi1cdGlmICghc3RhdHVzIFx1MDAyNlx1MDAyNiAhaW4tXHUwMDNlb3Bjb2RlKVxuK1x0c3RhdHVzID0gaWNlX3NicV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgXHUwMDI2bXNnLCBtc2dfbGVuLCBcdTAwMjZjZCk7XG4rXHRpZiAoIXN0YXR1cyBcdTAwMjZcdTAwMjYgaW4tXHUwMDNlb3Bjb2RlID09IGljZV9zYnFfbXNnX3JkKVxuIFx0XHRpbi1cdTAwM2VkYXRhID0gbGUzMl90b19jcHVcbiBcdFx0XHQoKChzdHJ1Y3QgaWNlX3NicV9tc2dfY21wbCAqKVx1MDAyNm1zZyktXHUwMDNlZGF0YSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTY1NDcsNyArNjU2Miw3IEBAIGludCBpY2Vfd3JpdGVfY2d1X3JlZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIGFkZHIsIHUzMiB2YWwpXG4ge1xuIFx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IGNndV9tc2cgPSB7XG4gXHRcdC5kZXN0X2RldiA9IGljZV9nZXRfZGVzdF9jZ3UoaHcpLFxuLVx0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3IsXG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9ucCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGFkZHIsXG4gXHRcdC5kYXRhID0gdmFsXG4gXHR9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1xuaW5kZXggZGNiODM3Y2FkZDE4MjUuLmE2MDA4ZGM3N2ZhNDM4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcbkBAIC0xMDg2LDYgKzEwODYsMTAgQEAgaWNlX3NxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxLFxuIFx0d3IzMihodywgY3EtXHUwMDNlc3EudGFpbCwgY3EtXHUwMDNlc3EubmV4dF90b191c2UpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbitcdC8qIElmIHRoZSBtZXNzYWdlIGlzIHBvc3RlZCwgZG9uJ3Qgd2FpdCBmb3IgY29tcGxldGlvbi4gKi9cbitcdGlmIChjZCBcdTAwMjZcdTAwMjYgY2QtXHUwMDNlcG9zdGVkKVxuK1x0XHRnb3RvIHNxX3NlbmRfY29tbWFuZF9lcnJvcjtcbitcbiBcdC8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiBpdCBmaW5pc2hlcyB3aXRoaW4gdGhlXG4gXHQgKiB0aW1lb3V0LCBjb3B5IHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8gdGVtcC5cbiBcdCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuaFxuaW5kZXggNzg4MDQwZGQ2NjJlMjMuLmM1MGQ2ZmNiYWNiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmhcbkBAIC03Nyw2ICs3Nyw3IEBAIHN0cnVjdCBpY2VfY3RsX3FfcmluZyB7XG4gLyogc3EgdHJhbnNhY3Rpb24gZGV0YWlscyAqL1xuIHN0cnVjdCBpY2Vfc3FfY2Qge1xuIFx0c3RydWN0IGxpYmllX2FxX2Rlc2MgKndiX2Rlc2M7XG4rXHR1OCBwb3N0ZWQgOiAxO1xuIH07XG4gXG4gLyogcnEgZXZlbnQgaW5mb3JtYXRpb24gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBjMzBlMjdiYmZlNmUyNS4uYjA2OWU2YzUxNGZiMTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbkBAIC01MTIsOSArNTEyLDYgQEAgaW50IGljZV9lc3dpdGNoX2F0dGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpXG4gXHRzdHJ1Y3QgaWNlX3JlcHIgKnJlcHI7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFpY2VfaXNfZXN3aXRjaF9tb2RlX3N3aXRjaGRldihwZikpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0cmVwciA9IGljZV9yZXByX2NyZWF0ZV92Zih2Zik7XG4gXHRpZiAoSVNfRVJSKHJlcHIpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyZXByKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xhZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuaW5kZXggMzEwZThmZTI5MjVjN2QuLjA4YTE3ZGVkMGFkNTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9sYWcuY1xuQEAgLTI2MjMsNyArMjYyMyw3IEBAIGludCBpY2VfaW5pdF9sYWcoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGdvdG8gIGZyZWVfbHBvcnRfcmVzO1xuIFxuIFx0LyogYXNzb2NpYXRlIHJlY2lwZXMgdG8gcHJvZmlsZXMgKi9cbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9QUk9GSURfSVBWNl9HVFBVX0lQVjZfVENQX0lOTkVSOyBuKyspIHtcbitcdGZvciAobiA9IDA7IG4gXHUwMDNjIElDRV9NQVhfTlVNX1BST0ZJTEVTOyBuKyspIHtcbiBcdFx0ZXJyID0gaWNlX2FxX2dldF9yZWNpcGVfdG9fcHJvZmlsZShcdTAwMjZwZi1cdTAwM2VodywgbixcbiBcdFx0XHRcdFx0XHQgICBcdTAwMjZyZWNpcGVfYml0cywgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTc4Li5mYzlkNGUwZmE3NTU4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbitcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4rXG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uOGI0MzllMjE3ZTAyZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC0zNDkxLDkgKzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0TkVUSUZfRl9SWEhBU0g7XG4gXG4gXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXHQgIHxcbi1cdFx0XHQgTkVUSUZfRl9JUF9DU1VNICB8XG4gXHRcdFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxuLVx0XHRcdCBORVRJRl9GX0lQVjZfQ1NVTTtcbitcdFx0XHQgTkVUSUZfRl9IV19DU1VNO1xuIFxuIFx0dmxhbm9fZmVhdHVyZXMgPSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuIFx0XHRcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxuQEAgLTM1NTUsMTIgKzM1NTQsNiBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHQvKiBBbGxvdyBjb3JlIHRvIG1hbmFnZSBJUlFzIGFmZmluaXR5ICovXG4gXHRuZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpO1xuIFxuLVx0LyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzXG4tXHQgKiBuZG8gY2FsbGJhY2suXG4tXHQgKi9cbi1cdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXG4tXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XG4tXG4gXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKG5ldGRldiwgSUNFX01BWF9UU09fU0laRSk7XG4gfVxuIFxuQEAgLTY1MDAsMTggKzY0OTMsNiBAQCBpY2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spXG4gXHRcdHJldCA9IGljZV9zZXRfbG9vcGJhY2sodnNpLCAhIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSykpO1xuIFxuLVx0LyogRHVlIHRvIEU4MzAgaGFyZHdhcmUgbGltaXRhdGlvbnMsIFRTTyAoTkVUSUZfRl9BTExfVFNPKSB3aXRoIEdDU1xuLVx0ICogKE5FVElGX0ZfSFdfQ1NVTSkgaXMgbm90IHN1cHBvcnRlZC5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFx1MDAyNlx1MDAyNiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfQUxMX1RTTykpKSB7XG4tXHRcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcbi1cdFx0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJUbyBlbmFibGUgSFcgY2hlY2tzdW0sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgVFNPLlxcblwiKTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3BhcnNlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuaW5kZXggZjhlNjk2MzBmYjcyNjcuLjNlZGU0YzFhNWE4YTViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wYXJzZXIuY1xuQEAgLTIzNjgsNiArMjM2OCw5IEBAIGludCBpY2VfcGFyc2VyX3Byb2ZpbGVfaW5pdChzdHJ1Y3QgaWNlX3BhcnNlcl9yZXN1bHQgKnJzbHQsXG4gXHR1MTYgcHJvdG9fb2ZmID0gMDtcbiBcdHUxNiBvZmY7XG4gXG4rXHRpZiAocnNsdC1cdTAwM2VwdHlwZSBcdTAwM2U9IElDRV9GTE9XX1BUWVBFX01BWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRtZW1zZXQocHJvZiwgMCwgc2l6ZW9mKCpwcm9mKSk7XG4gXHRzZXRfYml0KHJzbHQtXHUwMDNlcHR5cGUsIHByb2YtXHUwMDNlcHR5cGVzKTtcbiBcdGlmIChibGsgPT0gSUNFX0JMS19TVykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5pbmRleCBlYzNkODlkOGQ0ZDM0NS4uZWFlYzM2YWI2YWUzZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMzQ2LDcgKzM0Niw3IEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMocGYtXHUwMDNlcHRwLmNhY2hlZF9waGNfdGltZSxcbitcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVx1MDAzZXB0cC5jYWNoZWRfcGhjX3RpbWUpLFxuIFx0XHRcdFx0ICAgICAoaW5fdHN0YW1wIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgbWFzayk7XG4gfVxuIFxuQEAgLTMwMzcsNiArMzAzNywxMSBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXHUwMDI2cGYtXHUwMDNlcHRwO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChwdHAtXHUwMDNlc3RhdGUgPT0gSUNFX1BUUF9VTklOSVQpIHtcbitcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgd2FzIG5vdCBpbml0aWFsaXplZCwgc2tpcHBpbmcgcmVidWlsZFxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHB0cC1cdTAwM2VzdGF0ZSA9PSBJQ0VfUFRQX1JFQURZKSB7XG4gXHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGYsIHJlc2V0X3R5cGUpO1xuIFx0fSBlbHNlIGlmIChwdHAtXHUwMDNlc3RhdGUgIT0gSUNFX1BUUF9SRVNFVFRJTkcpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0YzMuLmM2MDQ5MDk3ZjQ5ZDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTM1Miw2ICszNTIsMjAgQEAgdm9pZCBpY2VfcHRwX3NyY19jbWQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3B0cF90bXJfY21kIGNtZClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuK1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbitcdFx0LmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzAsXG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ19yZCxcbitcdH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0LyogRmx1c2ggU0JRIHRvIGVuc3VyZSBwb3N0ZWQgd3JpdGVzIGNvbXBsZXRlIGJlZm9yZSBTWU5DIGNvbW1hbmQuXG4rXHQgKiBTa2lwIGZvciBFODEwIC0gRlcgYWx3YXlzIHNlbmRzIGNvbXBsZXRpb25zLCBzbyB3cml0ZXMgYXJlIHN5bmNocm9ub3VzLlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgIT0gSUNFX01BQ19FODEwKSB7XG4rXHRcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGRldl93YXJuKGljZV9od190b19kZXYoaHcpLCBcIkZhaWxlZCB0byBmbHVzaCBTQlE6ICVkXFxuXCIsIGVycik7XG4rXHR9XG4gXG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuQEAgLTQ0Miw3ICs0NTYsNyBAQCBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MzIgYWRkciwgdTMyIHZhbClcbiB7XG4gXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuIFx0XHQuZGVzdF9kZXYgPSBpY2VfcHRwX2dldF9kZXN0X2Rldl9lODI1KGh3LCBwb3J0KSxcbi1cdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyLFxuK1x0XHQub3Bjb2RlID0gaWNlX3NicV9tc2dfd3JfcCxcbiBcdFx0Lm1zZ19hZGRyX2xvdyA9IGxvd2VyXzE2X2JpdHMoYWRkciksXG4gXHRcdC5tc2dfYWRkcl9oaWdoID0gdXBwZXJfMTZfYml0cyhhZGRyKSxcbiBcdFx0LmRhdGEgPSB2YWxcbkBAIC0yNjE0LDE2ICsyNjI4LDE4IEBAIGljZV9yZWFkXzY0Yl9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBsb3dfYWRkciwgdTY0ICp2YWwpXG4gICogQHZhbDogVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlclxuICAqXG4gICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgZm9yIHRoZSBnaXZlbiBwb3J0IG92ZXIgdGhlIGRldmljZSBzaWRlYmFuZCBxdWV1ZS5cbisgKiBVc2VzIHBvc3RlZCB3cml0ZXMgLSByZXF1aXJlcyBTQlEgZmx1c2ggYmVmb3JlIFNZTkNfRVhFQ19DTUQuXG4gICovXG4gc3RhdGljIGludFxuIGljZV93cml0ZV9waHlfcmVnX2U4Mngoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsIHUzMiB2YWwpXG4ge1xuLVx0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHswfTtcbitcdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7XG4rXHRcdC5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cl9wLFxuK1x0XHQuZGF0YSA9IHZhbFxuK1x0fTtcbiBcdGludCBlcnI7XG4gXG4gXHRpY2VfZmlsbF9waHlfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcG9ydCwgb2Zmc2V0KTtcbi1cdG1zZy5vcGNvZGUgPSBpY2Vfc2JxX21zZ193cjtcbi1cdG1zZy5kYXRhID0gdmFsO1xuIFxuIFx0ZXJyID0gaWNlX3NicV9yd19yZWcoaHcsIFx1MDAyNm1zZywgTElCSUVfQVFfRkxBR19SRCk7XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjgxMSwxNiArMjgyNywxNiBAQCBpY2VfcmVhZF9xdWFkX3JlZ19lODJ4KHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBxdWFkLCB1MTYgb2Zmc2V0LCB1MzIgKnZhbClcbiBpbnRcbiBpY2Vfd3JpdGVfcXVhZF9yZWdfZTgyeChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcXVhZCwgdTE2IG9mZnNldCwgdTMyIHZhbClcbiB7XG4tXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0gezB9O1xuK1x0c3RydWN0IGljZV9zYnFfbXNnX2lucHV0IG1zZyA9IHtcbitcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4rXHRcdC5kYXRhID0gdmFsXG4rXHR9O1xuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGljZV9maWxsX3F1YWRfbXNnX2U4MngoaHcsIFx1MDAyNm1zZywgcXVhZCwgb2Zmc2V0KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRtc2cub3Bjb2RlID0gaWNlX3NicV9tc2dfd3I7XG4tXHRtc2cuZGF0YSA9IHZhbDtcbi1cbiBcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cIixcbkBAIC00NTE0LDE4ICs0NTMwLDE5IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcGh5X3JlZ19lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgYWRkciwgdTMyICp2YWwpXG4gICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBQSFlcbiAgKlxuICAqIFdyaXRlIGEgdmFsdWUgdG8gYSByZWdpc3RlciBvZiB0aGUgZXh0ZXJuYWwgUEhZIG9uIHRoZSBFODEwIGRldmljZS5cbisgKiBFODEwIEZXIHNlbmRzIGNvbXBsZXRpb25zIGZvciBvcGNvZGUgMHgwMSwgbWFraW5nIHdyaXRlcyBzeW5jaHJvbm91cy5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV93cml0ZV9waHlfcmVnX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgdmFsKVxuIHtcbi1cdHN0cnVjdCBpY2Vfc2JxX21zZ19pbnB1dCBtc2cgPSB7MH07XG4rXHRzdHJ1Y3QgaWNlX3NicV9tc2dfaW5wdXQgbXNnID0ge1xuK1x0XHQuZGVzdF9kZXYgPSBpY2Vfc2JxX2Rldl9waHlfMCxcbitcdFx0Lm9wY29kZSA9IGljZV9zYnFfbXNnX3dyX3AsXG4rXHRcdC5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpLFxuK1x0XHQubXNnX2FkZHJfaGlnaCA9IHVwcGVyXzE2X2JpdHMoYWRkciksXG4rXHRcdC5kYXRhID0gdmFsXG4rXHR9O1xuIFx0aW50IGVycjtcbiBcbi1cdG1zZy5tc2dfYWRkcl9sb3cgPSBsb3dlcl8xNl9iaXRzKGFkZHIpO1xuLVx0bXNnLm1zZ19hZGRyX2hpZ2ggPSB1cHBlcl8xNl9iaXRzKGFkZHIpO1xuLVx0bXNnLm9wY29kZSA9IGljZV9zYnFfbXNnX3dyO1xuLVx0bXNnLmRlc3RfZGV2ID0gaWNlX3NicV9kZXZfcGh5XzA7XG4tXHRtc2cuZGF0YSA9IHZhbDtcbi1cbiBcdGVyciA9IGljZV9zYnFfcndfcmVnKGh3LCBcdTAwMjZtc2csIExJQklFX0FRX0ZMQUdfUkQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gUEhZLCBlcnIgJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2JxX2NtZC5oXG5pbmRleCAyMjYyNDNkMzI5Njg2NS4uZWVkY2QyNDgxYTU5NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NicV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zYnFfY21kLmhcbkBAIC01NSw3ICs1NSw3IEBAIGVudW0gaWNlX3NicV9kZXZfaWQge1xuIFxuIGVudW0gaWNlX3NicV9tc2dfb3Bjb2RlIHtcbiBcdGljZV9zYnFfbXNnX3JkXHRcdD0gMHgwMCxcbi1cdGljZV9zYnFfbXNnX3dyXHRcdD0gMHgwMSxcbitcdGljZV9zYnFfbXNnX3dyX3BcdD0gMHgwMSxcbiBcdGljZV9zYnFfbXNnX3dyX25wXHQ9IDB4MDJcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuaW5kZXggN2UwMGUwOTE3NTZkZGMuLmUwNGRlMDIxNTU5NjY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbkBAIC00ODQsMTIgKzQ4NCwxNCBAQCBzdGF0aWMgaW50IGljZV9zdGFydF92ZnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0Z290byB0ZWFyZG93bjtcbiBcdFx0fVxuIFxuLVx0XHRyZXR2YWwgPSBpY2VfZXN3aXRjaF9hdHRhY2hfdmYocGYsIHZmKTtcbi1cdFx0aWYgKHJldHZhbCkge1xuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiRmFpbGVkIHRvIGF0dGFjaCBWRiAlZCB0byBlc3dpdGNoLCBlcnJvciAlZFwiLFxuLVx0XHRcdFx0dmYtXHUwMDNldmZfaWQsIHJldHZhbCk7XG4tXHRcdFx0aWNlX3ZmX3ZzaV9yZWxlYXNlKHZmKTtcbi1cdFx0XHRnb3RvIHRlYXJkb3duO1xuK1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKSB7XG4rXHRcdFx0cmV0dmFsID0gaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmKHBmLCB2Zik7XG4rXHRcdFx0aWYgKHJldHZhbCkge1xuK1x0XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJGYWlsZWQgdG8gYXR0YWNoIFZGICVkIHRvIGVzd2l0Y2gsIGVycm9yICVkXCIsXG4rXHRcdFx0XHRcdHZmLVx1MDAzZXZmX2lkLCByZXR2YWwpO1xuK1x0XHRcdFx0aWNlX3ZmX3ZzaV9yZWxlYXNlKHZmKTtcbitcdFx0XHRcdGdvdG8gdGVhcmRvd247XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHNldF9iaXQoSUNFX1ZGX1NUQVRFX0lOSVQsIHZmLVx1MDAzZXZmX3N0YXRlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggNGNhMWEwNjAyMzA3ZDAuLmIyMDYzYTU0ZDZkODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTY1NCw3ICsxNjU0LDcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0XHRcdHJldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBleHRoZHIgLSBza2ItXHUwMDNlZGF0YSxcbiBcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmw0X3Byb3RvLCBcdTAwMjZmcmFnX29mZik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdGdvdG8gY2hlY2tzdW1fc3dfZmI7XG4gXHRcdH1cbiBcbiBcdFx0LyogZGVmaW5lIG91dGVyIHRyYW5zcG9ydCAqL1xuQEAgLTE2NzMsMTEgKzE2NzMsNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0bDQuaGRyID0gc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuLVx0XHRcdFx0cmV0dXJuIC0xO1xuLVxuLVx0XHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb21wdXRlIG91dGVyIEwzIGhlYWRlciBzaXplICovXG5AQCAtMTczNiwxNCArMTczMiwxNCBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIGV4dGhkciAtIHNrYi1cdTAwM2VkYXRhLCBcdTAwMjZsNF9wcm90byxcbiBcdFx0XHRcdFx0IFx1MDAyNmZyYWdfb2ZmKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldHVybiAtMTtcbitcdFx0Z290byBjaGVja3N1bV9zd19mYjtcbiBcdH1cbiBcbiBcdC8qIGNvbXB1dGUgaW5uZXIgTDMgaGVhZGVyIHNpemUgKi9cbiBcdGwzX2xlbiA9IGw0LmhkciAtIGlwLmhkcjtcbiBcdG9mZnNldCB8PSAobDNfbGVuIC8gNCkgXHUwMDNjXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xuIFxuLVx0aWYgKCh0eF9yaW5nLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjZcbitcdGlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZmlyc3QtXHUwMDNldHhfZmxhZ3MgXHUwMDI2IElDRV9UWF9GTEFHU19UU08pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFza2JfY3N1bV9pc19zY3RwKHNrYikpIHtcbiBcdFx0LyogU2V0IEdDUyAqL1xuQEAgLTE3ODksMTUgKzE3ODUsMTcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4tXHRcdGlmIChmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTylcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXHRcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIGNoZWNrc3VtX3N3X2ZiO1xuIFx0fVxuIFxuIFx0b2ZmLVx1MDAzZXRkX2NtZCB8PSBjbWQ7XG4gXHRvZmYtXHUwMDNldGRfb2Zmc2V0IHw9IG9mZnNldDtcbiBcdHJldHVybiAxO1xuK1xuK2NoZWNrc3VtX3N3X2ZiOlxuK1x0aWYgKGZpcnN0LVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBJQ0VfVFhfRkxBR1NfVFNPKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gc2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OGYuLjE1ZGJkNTEwMDkxMjUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG5AQCAtMjE3LDYgKzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3Mge1xuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMixcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSxcbitcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjBjLi45MDUyZTcxZTljOTllMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbkBAIC04MTIsNyArODEyLDggQEAgdm9pZCBpY2VfcmVzZXRfYWxsX3ZmcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0fVxuIFx0XHRpY2VfdmZfcG9zdF92c2lfcmVidWlsZCh2Zik7XG4gXG4tXHRcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuK1x0XHRpZiAoaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpKVxuK1x0XHRcdGljZV9lc3dpdGNoX2F0dGFjaF92ZihwZiwgdmYpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2dmYtXHUwMDNlY2ZnX2xvY2spO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmNcbmluZGV4IGJlNjZmOWIyZTEwMWNhLi5kYzVhZDc4NGY0NTZmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuY1xuQEAgLTM1NTUsNyArMzU1NSw2IEBAIGludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0cGNpX3NyaW92X3NldF90b3RhbHZmcyhhZGFwdGVyLVx1MDAzZXBkZXYsIGlkcGZfZ2V0X21heF92ZnMoYWRhcHRlcikpO1xuIFx0bnVtX21heF92cG9ydHMgPSBpZHBmX2dldF9tYXhfdnBvcnRzKGFkYXB0ZXIpO1xuLVx0YWRhcHRlci1cdTAwM2VtYXhfdnBvcnRzID0gbnVtX21heF92cG9ydHM7XG4gXHRhZGFwdGVyLVx1MDAzZXZwb3J0cyA9IGt6YWxsb2Nfb2JqcygqYWRhcHRlci1cdTAwM2V2cG9ydHMsIG51bV9tYXhfdnBvcnRzKTtcbiBcdGlmICghYWRhcHRlci1cdTAwM2V2cG9ydHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM1NzYsNiArMzU3NSwxMiBAQCBpbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0Z290byBlcnJfbmV0ZGV2X2FsbG9jO1xuIFx0fVxuIFxuK1x0LyogU2V0IG1heF92cG9ydHMgb25seSBhZnRlciB2cG9ydHMsIG5ldGRldnMgYW5kIHZwb3J0X2NvbmZpZyBidWZmZXJzXG4rXHQgKiBhcmUgYWxsb2NhdGVkIHRvIG1ha2Ugc3VyZSBtYXhfdnBvcnQgYm91bmQgbG9vcHMgZG9uJ3QgZW5kIHVwXG4rXHQgKiBjcmFzaGluZywgZm9sbG93aW5nIGFsbG9jYXRpb24gZXJyb3JzIG9uIGluaXQuXG4rXHQgKi9cbitcdGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0cyA9IG51bV9tYXhfdnBvcnRzO1xuK1xuIFx0LyogU3RhcnQgdGhlIG1haWxib3ggdGFzayBiZWZvcmUgcmVxdWVzdGluZyB2ZWN0b3JzLiBUaGlzIHdpbGwgZW5zdXJlXG4gXHQgKiB2ZWN0b3IgaW5mb3JtYXRpb24gcmVzcG9uc2UgZnJvbSBtYWlsYm94IGlzIGhhbmRsZWRcbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MDkuMzAzNDU3NjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNDk0NzQwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyczogYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYC4gSSBzZWUgYSBzZXJpZXMgb2YgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgc28gSSdsbCBnbyB0aHJvdWdoIHRoZW0gbWV0aG9kaWNhbGx5LlxuXG5GaXJzdCwgaW4gYGlhdmZfdmlydGNobmwuY2AsIHRoZXJlJ3MgZW5oYW5jZWQgdmFsaWRhdGlvbiBpbiBgaWF2Zl92YWxpZGF0ZV9udW1fcXVldWVzYC4gSXQgbm93IGNvbnNpZGVycyB0aGUgbWVzc2FnZSBsZW5ndGggKGBtc2dsZW5gKSB3aGVuIHZhbGlkYXRpbmcgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucywgd2hpY2ggaXMgZ29vZCBmb3Igcm9idXN0bmVzcy4gVGhlIHVzZSBvZiBgbWluKG1zZ2xlbiwgbGVuKWAgaW4gYGlhdmZfZ2V0X3ZmX2NvbmZpZ2AgYW5kIGBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb25gIHN1Z2dlc3RzIHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCBtZXNzYWdlcyBncmFjZWZ1bGx5LlxuXG5OZXh0LCBpbiBgaWNlLmhgLCB0aGUgY2hlY2sgaW4gYGljZV9pc190eHRpbWVfZW5hYCBzZWVtcyB0byBiZSBmaWx0ZXJpbmcgZm9yIHNwZWNpZmljIFZTSSB0eXBlcywgbGlrZWx5IG9wdGltaXppbmcgdGhlIHRyYW5zbWl0IHRpbWUgZW5hYmxlIGxvZ2ljLlxuXG5gaWNlX2NvbW1vbi5jYCBzaG93cyBjaGFuZ2VzIHRvIGBpY2Vfc2JxX3J3X3JlZ2AsIHdoaWNoIGhhbmRsZXMgU3lzdGVtIEJ1cyBRdWV1ZSAoU0JRKSBtZXNzYWdlIHdyaXRlcyBhbmQgcmVhZHMsIHdpdGggc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBwb3N0ZWQgYW5kIG5vbi1wb3N0ZWQgd3JpdGVzLiBUaGUgdXNlIG9mIGBpY2Vfc2JxX21zZ193cl9ucGAgaW4gYGljZV93cml0ZV9jZ3VfcmVnYCBzdWdnZXN0cyBhbiBvcHRpbWl6YXRpb24gaW4gcmVnaXN0ZXIgYWNjZXNzLiBUaGUgY2hhbmdlcyB0byBgaWNlX2NvbnRyb2xxLmNgIGFuZCBgaWNlX2NvbnRyb2xxLmhgIHJlZ2FyZGluZyBwb3N0ZWQgbWVzc2FnZXMgaW4gYGljZV9zcV9zZW5kX2NtZGAgYXJlIGludGVyZXN0aW5nOyBub3Qgd2FpdGluZyBmb3IgY29tcGxldGlvbiBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSwgYnV0IHJlcXVpcmVzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGEgY291cGxlIG9mIGNoYW5nZXMgaW4gYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX3ZmX2xpYi5jYCBzdGFuZCBvdXQuIFRoZSByZW1vdmFsIG9mIHRoZSBgaWNlX2lzX2Vzd2l0Y2hfbW9kZV9zd2l0Y2hkZXYocGYpYCBjaGVjayBpbiBgaWNlX2Vzd2l0Y2hfYXR0YWNoX3ZmYCBhbmQgYGljZV9yZXNldF9hbGxfdmZzYCBoaW50cyB0aGF0IHRoZXkgYXJlIGdlbmVyYWxpemluZyBlc3dpdGNoIGF0dGFjaCBsb2dpYy4gVGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGluIHRoZSBjb250ZXh0IG9mIGVzd2l0Y2ggbW9kZS4gQW5kIHNpbWlsYXJseSBmb3IgYGljZV9zcmlvdi5jYCwgYSBjaGVjayBmb3IgZXN3aXRjaCBtb2RlIGhhcyBiZWVuIGFkZGVkLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHN3aXRjaGRldi5cblxuSW4gYGljZV9sYWcuY2AsIGFuIHVwZGF0ZSB0byB0aGUgbG9vcCBib3VuZCBpbiBgaWNlX2luaXRfbGFnYCBzdWdnZXN0cyBhIHBvdGVudGlhbCByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIExBRyBwcm9maWxlIGhhbmRsaW5nOyBjaGFuZ2luZyBmcm9tIGEgdmVyeSBzcGVjaWZpYyBlbnVtIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9maWxlcyBzb3VuZHMgbW9yZSBnZW5lcmFsLlxuXG5gaWNlX2xpYi5jYCBub3cgY29uZGl0aW9uYWxseSBzZXRzIHRoZSBgSUNFX1RYX1JJTkdfRkxBR1NfR0NTYCBmbGFnIGJhc2VkIG9uIGhhcmR3YXJlIHN1cHBvcnQgKGBJQ0VfRl9HQ1NgKSB3aGVuIGFsbG9jYXRpbmcgcmluZ3MsIHdoaWNoIG1lYW5zIHRoZSByaW5nIGZsYWdzIG1heSBjaGFuZ2UgYmFzZWQgb24gdGhlIGhhcmR3YXJlLlxuXG5gaWNlX21haW4uY2AgaXMgc2lnbmlmaWNhbnQuIFRoZSByZW1vdmFsIG9mIGBORVRJRl9GX0lQX0NTVU1gIGFuZCBgTkVUSUZfRl9JUFY2X0NTVU1gIGluIGBpY2Vfc2V0X25ldGRldl9mZWF0dXJlc2AgaW4gZmF2b3Igb2YgYE5FVElGX0ZfSFdfQ1NVTWAgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIGNvbXBsZXRlIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgYmVuZWZpY2lhbCBzaGlmdC4gVGhlIHJlbW92YWwgb2YgdGhlIG11dHVhbCBleGNsdXNpdml0eSBjaGVjayBmb3IgVFNPIGFuZCBHQ1MsIGFuZCB0aGUgcmVtb3ZhbCBvZiBoYXJkd2FyZSBsaW1pdGF0aW9ucyBmb3IgVFNPIHdpdGggR0NTLCBzaG93cyB0aGV5J3JlIG1ha2luZyBhbiBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgYWJpbGl0eSB0byB1c2UgbW9yZSBtb2Rlcm4gZmVhdHVyZXMuXG5cbkluIGBpY2VfcGFyc2VyLmNgLCB0aGUgYm91bmRzIGNoZWNrIGluIGBpY2VfcGFyc2VyX3Byb2ZpbGVfaW5pdGAgZm9yIGByc2x0LVx1MDAzZXB0eXBlYCBpcyBhbm90aGVyIGdvb2Qgc2VjdXJpdHkvcm9idXN0bmVzcyBjaGVjay5cblxuVGhlIFBUUC1yZWxhdGVkIGNoYW5nZXMgaW4gYGljZV9wdHAuY2AgYW5kIGBpY2VfcHRwX2h3LmNgICh1c2luZyBgUkVBRF9PTkNFYCwgY2hlY2tpbmcgYHB0cC1cdTAwM2VzdGF0ZWAsIGZsdXNoaW5nIFNCUSBpbiBgaWNlX3B0cF9leGVjX3Rtcl9jbWRgLCBhbmQgdXNpbmcgYGljZV9zYnFfbXNnX3dyX3BgKSBzdWdnZXN0IGVuaGFuY2VtZW50cyB0byBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBoYW5kbGluZy4gSXQgaW1wbGllcyB0aGUgdXNhZ2Ugb2YgdGhlIGJ1cyBxdWV1ZSBmb3IgdGhpcyBwdXJwb3NlLlxuXG5gaWNlX3R4cnguY2Agbm93IHVzZXMgYSBmYWxsYmFjayBsYWJlbCBmb3Igc29mdHdhcmUgY2hlY2tzdW0uIEFsc28sIGl0IG5vdyBjaGVja3MgYElDRV9UWF9SSU5HX0ZMQUdTX0dDU2AgaW5zdGVhZCBvZiBgTkVUSUZfRl9IV19DU1VNYCwgd2hpY2ggcmVsYXRlcyB0byBwcmV2aW91cyBmZWF0dXJlIGNoYW5nZXMuXG5cbkZpbmFsbHksIGBpZHBmX3ZpcnRjaG5sLmNgIGVuc3VyZXMgYGFkYXB0ZXItXHUwMDNlbWF4X3Zwb3J0c2AgaXMgc2V0ICphZnRlciogYWxsb2NhdGlvbnMsIHByZXZlbnRpbmcgcG90ZW50aWFsIGNyYXNoZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHJvYnVzdCBpbml0aWFsaXphdGlvbi5cblxuTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gYGlhdmZgLCBgaWNlYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGNsZWFybHkgZm9yIG5ldHdvcmsgZnVuY3Rpb25zLiBUaGUgYGlhdmZgIHBhcnQgZGVhbHMgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiwgYGljZWAgaXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBhbmQgYGlkcGZgIGlzIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBMaW51eCBEcml2ZXIuXG5cbkNhbiB3ZSBmdXp6IHRoZW0/IFN5emthbGxlciBmdXp6ZXIgaXMgYSBzdHJvbmcgY2FuZGlkYXRlLCBhcyBpdCBpcyBhIGtlcm5lbCBmdXp6ZXIuIEl0IG9mdGVuIGZvY3VzZXMgb24gbmV0bGluayBhbmQgaW9jdFxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MjMuNTUyOTMzNDU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTU5NjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTU5Mj1DT05GSUdfSTQwRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy01OTQtQ09ORklHX0ZNMTBLPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjYwOTpDT05GSUdfSUNFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTYxMC1DT05GSUdfRk0xMEs9eVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0ZNMTBLKSArPSBmbTEway9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSUNFKSArPSBpY2UvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX0lEUEYpICs9IGlkcGYvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9OD1zdWJkaXItY2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lDRSkgKz0gaWNlLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9NjA9aWNlLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSBpY2VfeHNrLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjE6aWNlLSQoQ09ORklHX0lDRV9TV0lUQ0hERVYpICs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZS02Mi1pY2UtJChDT05GSUdfR05TUykgKz0gaWNlX2duc3Mub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MzppY2UtJChDT05GSUdfSUNFX0hXTU9OKSArPSBpY2VfaHdtb24ub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaC0xMS12b2lkIGljZV9lc3dpdGNoX2RldGFjaF92ZihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV92ZiAqdmYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6MzU6I2Vsc2UgLyogQ09ORklHX0lDRV9TV0lUQ0hERVYgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaC0zNi1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oPTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYykgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6OTk6I2VuZGlmIC8qIENPTkZJR19JQ0VfU1dJVENIREVWICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTgtdm9pZCBpY2VfaHdtb25faW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTk9dm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtMTEtc3RhdGljIGlubGluZSB2b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg9MTI9c3RhdGljIGlubGluZSB2b2lkIGljZV9od21vbl9leGl0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtMTQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA1MC1zdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jcm9zc3RzdGFtcF9jZmcgaWNlX2Nyb3NzdHN0YW1wX2NmZ19lODMwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjA2MzojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDY0LS8qKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0yMTc1PXN0YXRpYyBpbnQgaWNlX3B0cF9nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTAtXFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTkzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxOTQtXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MjUyMz1zdGF0aWMgdm9pZCBpY2VfcHRwX3NldF9mdW5jc19lODMwKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyNTI1OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MjYtXFx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXFx1MDAzZXBkZXYpIFxcdTAwMjZcXHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTMwLVxcdC8qIFJlc3Qgb2YgdGhlIGNvbmZpZyBpcyB0aGUgc2FtZSBhcyBiYXNlIEU4MTAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MjYuNDY4OTAzMzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5MDc2MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEludGVsIEV0aGVybmV0IERyaXZlcnM6IEEgRmVhc2liaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBpY2VgLCBgaWF2ZmAsIGFuZCBgaWRwZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoZW0/IEkga25vdyBQQ0kgZHJpdmVycyBhcmUgZ2VuZXJhbGx5IGZhaXIgZ2FtZSBpZiB0aGV5J3JlIGVuYWJsZWQgYW5kIHN5emthbGxlciB1c2VzIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpYC4gQnV0LCBJJ20gYXdhcmUgdGhhdCBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBoYXMgaXRzIGxpbWl0YXRpb25zLlxuXG5UaGVuIEkgcmVjYWxsZWQgdGhhdCBgV29ydGhGdXp6aW5nYCBjYXZlYXQg4oCTIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2hcIiBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSB3aGVuIHNvZnR3YXJlIGVtdWxhdGlvbiBpcyBlbXBsb3llZCAodGhpbmsgdXNiIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSkuIFNvLCBpZiB0aGVyZSBpc24ndCBhbnkgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGBpY2VgLCBgaWF2ZmAsIG9yIGBpZHBmYCwgdGhhdCBwcm9iYWJseSBtZWFucyB0aGVzZSBkcml2ZXJzIGFyZSBvdXQgb2YgcmVhY2ggZm9yIGEgc3RhbmRhcmQgR0NFIG9yIFFFTVUgc2V0dXAuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUUVNVSAqYWN0dWFsbHkqIG9mZmVycyBlbXVsYXRpb24gZm9yIGBpYXZmYCBvciBgaWNlYC4gSSBjYW4ndCBqdXN0IGFzc3VtZSB0aGV5J3JlIG1pc3NpbmcuIEEgcXVpY2sgbWVudGFsIHJldmlldyBvZiBRRU1VJ3MgbmV0d29yayBkZXZpY2VzIGdpdmVzIG1lIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBldGMuLCBhbGwgdGhlIHdheSB0aHJvdWdoIHRvIGB2aXJ0aW8tbmV0YC4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljIGZvciB0aGUgRTgwMCBzZXJpZXMgb3IgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbmFsaXR5LiBCdXQgSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIFFFTVUgZG9jdW1lbnRhdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDozMi44NTk2NjYzMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjQyNDE4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHcvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6NTA6MzQuNzIyMTAzOTE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MTgzNDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwtQmFzZWQgSUNFIEVtdWxhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVjYWxpYnJhdGUuIEkgd2FzIGp1c3Qgc2VhcmNoaW5nIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG5vdCBRRU1VLiBXcm9uZyBjb250ZXh0LiBOb3csIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBrZXJuZWwtbGV2ZWwgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgYGljZWAgZHJpdmVyLiBZb3Uga25vdywgc29tZXRoaW5nIGFraW4gdG8gYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lyZWxlc3Mgb3IgYG5ldGRldnNpbWAgZm9yIG5ldHdvcmsgZGV2aWNlcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIGEgd2F5IHRvIHRlc3QgYW5kIGludGVyYWN0IHdpdGggdGhpcyBgaWNlYCBkcml2ZXIgd2l0aG91dCBuZWVkaW5nIHRoZSBhY3R1YWwgaGFyZHdhcmUuIExldCdzIHNlZS4uLiBgbmV0ZGV2c2ltYCBpc24ndCBnb2luZyB0byBjdXQgaXQsIEkgYWxyZWFkeSBrbm93IHRoYXQuIFNvLCB0aGUgcXVlc3Rpb24gbm93IGlzLCBkb2VzICphbnkqIG9mIHRoZSBrZXJuZWwgcHJvdmlkZSBtZSB3aXRoIGVtdWxhdGlvbiBmb3IgYGljZWA/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjM4LjU5Mzk0MDYwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg5ODQ0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9wY2lfdGJsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMTA9c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0MzogKiBAZW50OiBlbnRyeSBpbiBpY2VfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3NTQ9c3RhdGljIHZvaWQgaWNlX3BjaV9lcnJfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU3NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTc1OTovKiBpY2VfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzYwLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01NzY2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU3Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTc2OC1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4MTktfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODIwOk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpY2VfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgyMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4MzI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGljZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4MzQ6XFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNS1cXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjQwLjM4Mzc4OTgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5OTYxMjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgSW5hY2Nlc3NpYmxlIENvZGUgUGF0aHMqKlxuXG5Pa2F5LCB0aGVzZSBQQ0kgSURzIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8gcmVhbCBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgdG91Y2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSBrbm93IFN5emthbGxlciBoYXMgYHN5el9wY2lgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nIGFzIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLiBIb3dldmVyLCBpdCdzIG5vdCBhICpmdWxsKiBoYXJkd2FyZSBlbXVsYXRvcjsgaXQncyBtb3JlIGxpa2UgYSB0b29sIHRvIGluamVjdCBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gSG1tLCBJIHdvbmRlciBpZiBTeXprYWxsZXIgZnV6emVkIHNvbWV0aGluZyBsaWtlIGBpY2VgIHVzaW5nIHRoYXQgbWV0aG9kPyBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIFN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gY29uZmlybSwgYnV0IHRoZSBwcm9tcHQgaXMgaGVscGZ1bCBhbmQgY2xlYXI6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiLiBJZiBgc3l6X3BjaWAgY2FuJ3QgcmVhY2ggaXQsIHRoZW4gaXQncyBjbGVhcmx5IGltcG9zc2libGUgdG8gcmVhY2guIFdhaXQgYSBtb21lbnQsIGBzeXpfcGNpYCBpc24ndCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYnV0IGEgZnV6emVyIHBzZXVkby1kZXZpY2UuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRhbGtpbmcgYWJvdXQgZW11bGF0ZWQgaGFyZHdhcmUuIElmIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIChsaWtlIHRoZSBleGFtcGxlcyBnaXZlbiksIHRoZW4gaXQncyB1bnJlYWNoYWJsZS5cblxuT2theSwgZG9lcyBTeXprYWxsZXIgdGVzdCBFdGhlcm5ldCBkcml2ZXJzIHdpdGggYHN5el9wY2lgPyBJIGtub3cgU3l6a2FsbGVyIGRvZXMgdXNlIGBzeXpfcGNpYCB0byBmdXp6IHNvbWUgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCdzIHByZXR0eSBzaGFsbG93LiBTbywgYmFjayB0byBgaWNlYCBvciBgaWF2ZmAsIGNhbiB0aGV5IGFjdHVhbGx5IGJlIHJlYWNoZWQ/IFdhaXQsIGBpYXZmYCBpcyBhIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBDYW4gaXQgZXZlbiBiZSBpbnN0YW50aWF0ZWQgaW4gUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZS4gU28sIHdoYXQgZWxzZSBpcyBwb3NzaWJsZT9cblxuVGhlbiBJIHdlbnQgYmFjayB0byB0aGUgcHJvbXB0LCB3aGljaCBjb25maXJtczogXCIuLi5pbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgU2luY2UgYGljZWAsIGBpYXZmYCwgYW5kIGBpZHBmYCBhcmUgYWxsIGZ1bmRhbWVudGFsbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGhpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgaXNuJ3Qgc29tZSBvYnNjdXJlIGVtdWxhdGlvbiB0aGF0IEknbSBtaXNzaW5nLCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDo0OS4zNzk5MjEyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDc0Mjc5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lBVkZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNTA9Y29uZmlnIEk0MEVfRENCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI2MC0jIHRoaXMgaXMgaGVyZSB0byBhbGxvdyBzZWFtbGVzcyBtaWdyYXRpb24gZnJvbSBJNDBFVkYgLS1cXHUwMDNlIElBVkYgbmFtZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjYxOiMgc28gdGhhdCBDT05GSUdfSUFWRiBzeW1ib2wgd2lsbCBhbHdheXMgbWlycm9yIHRoZSBzdGF0ZSBvZiBDT05GSUdfSTQwRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yNjItY29uZmlnIElBVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19JNDBFKSArPSBpNDBlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19JQVZGKSArPSBpYXZmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19GTTEwSykgKz0gZm0xMGsvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlPTEwPXN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL01ha2VmaWxlLTExLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0lBVkYpICs9IGlhdmYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvTWFrZWZpbGUtMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjUxLjI4NzM1NDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODQzMzkzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipJRFBGIEVtdWxhdGlvbjogQSBRdWljayBDaGVjayoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoZXJlIGFueSBjdXJyZW50LCBhY3RpdmVseSBtYWludGFpbmVkIGVtdWxhdGlvbiBvZiB0aGUgSURQRiBzdGFuZGFyZD9cIiBJIGtub3cgZVB1YiBpcyB0aGUgbW9zdCBjb21tb24gZm9ybWF0LCBhbmQgdGhlIElEUEYgKEludGVybmF0aW9uYWwgRGlnaXRhbCBQdWJsaXNoaW5nIEZvcnVtKSB3YXMgcGl2b3RhbCBpbiBpdHMgZGV2ZWxvcG1lbnQuIE5vdyB0aGF0IHRoZSBXM0MgaGFzIHRha2VuIG92ZXIsIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBhbnkgcHJvamVjdHMgb3V0IHRoZXJlIHRoYXQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGVtdWxhdGluZyB0aGUgKm9sZGVyKiBJRFBGIHNwZWNpZmljYXRpb25zIGZvciBjb21wYXRpYmlsaXR5IHRlc3RpbmcsIGhpc3RvcmljYWwgYW5hbHlzaXMsIG9yIHBlcmhhcHMgZXZlbiByZXRyby1jb21wdXRpbmcgcHVycG9zZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBhbnkgc3VjaCBlbXVsYXRpb24gZXhpc3RzLCBvciBpZiB0aGUgZm9jdXMgaGFzIHNvbGVseSBzaGlmdGVkIHRvIG1vcmUgY29udGVtcG9yYXJ5IHN0YW5kYXJkcy4gSXQncyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRoZSBldm9sdXRpb24gb2YgdGhlIGZvcm1hdCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjo1MDo1NC4xNzE3MDE5NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTMwMTc4NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lEUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTU9Q09ORklHX0lHQz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTY6Q09ORklHX0lEUEY9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNTk3LSMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYxMT1DT05GSUdfSUdDPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjYxMjpDT05GSUdfSURQRj15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTMtIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19JQ0UpICs9IGljZS9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSURQRikgKz0gaWRwZi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lEUEYpICs9IGlkcGYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL01ha2VmaWxlPTg9aWRwZi15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZToyMDppZHBmLSQoQ09ORklHX0lEUEZfU0lOR0xFUSlcXHQrPSBpZHBmX3NpbmdsZXFfdHhyeC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9NYWtlZmlsZS0yMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTc0Nj1zdGF0aWMgaW5saW5lIGludCBpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHUxNiBxX21vZGVsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTc0Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6NzQ4OlxcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTc0OS1cXHQgICAgICAgcV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0xNTUwPWludCBpZHBmX3NlbmRfY3JlYXRlX3Zwb3J0X21zZyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNTcxOlxcdGlmIChhZGFwdGVyLVxcdTAwM2VyZXFfdHhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE1NzItXFx0XFx0dnBvcnRfbXNnLVxcdTAwM2V0eHFfbW9kZWwgPSBjcHVfdG9fbGUxNihWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTU3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNTc2OlxcdGlmIChhZGFwdGVyLVxcdTAwM2VyZXFfcnhfc3BsaXRxIHx8ICFJU19FTkFCTEVEKENPTkZJR19JRFBGX1NJTkdMRVEpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE1NzctXFx0XFx0dnBvcnRfbXNnLVxcdTAwM2VyeHFfbW9kZWwgPSBjcHVfdG9fbGUxNihWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU1BMSVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MTYyNj1pbnQgaWRwZl9jaGVja19zdXBwb3J0ZWRfZGVzY19pZHMoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMTYzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzoxNjM1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSURQRl9TSU5HTEVRKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTE2MzYtXFx0ICAgICh2cG9ydF9tc2ctXFx1MDAzZXJ4cV9tb2RlbCA9PSBWSVJUQ0hOTDJfUVVFVUVfTU9ERUxfU0lOR0xFIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUwOjU1LjkyNDcyNTA5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2MTYzNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGUgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUuIFRoZSBwcm9tcHQncyB3b3JkaW5nIGlzIHF1aXRlIHNwZWNpZmljOiBcImltcG9zc2libGUgdG8gcmVhY2guLi4gZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0J3Mga2V5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgaWRwZmAuIE5vcGUsIHRoZXJlIGlzbid0IGFueS4gVGhhdCBtZWFucyB0aGVzZSBhcmUgaGFyZHdhcmUgZHJpdmVycywgcGxhaW4gYW5kIHNpbXBsZS4gV2UncmUgZGVhbGluZyB3aXRoIFBDSSBkcml2ZXJzIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IHJlbWVtYmVyIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UuIFllcywgYHN5el9wY2lgIGV4aXN0cywgaXQgYWxsb3dzIGZ1enppbmcgb2YgUENJIGRyaXZlcnMuIEJ1dCBpdCdzIGxpbWl0ZWQuIEl0IGNhbiBpbmplY3QgYSBmYWtlIGRldmljZSBidXQgdXN1YWxseSBjYW4ndCBlbXVsYXRlIGhhcmR3YXJlIGJlaGF2aW9ycyBwcm9wZXJseS4gT2Z0ZW4sIHByb2JlIGZ1bmN0aW9ucyBmYWlsIGVhcmx5IGJlY2F1c2Ugb2YgdGhpcy4gVXN1YWxseSBub3Qgd29ydGggZnV6emluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcy4gVGhlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gLCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvYC4gT2theSwgdGhlc2UgYXJlIGFsbCBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLCBoYXJkd2FyZS1zcGVjaWZpYy4gU2luY2UgdGhleSBsYWNrIHNvZnR3YXJlIGVtdWxhdGlvbiwgYW5kIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlLCB0aGV5J3JlIG5vdCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyBjbGVhciBvbiB0aGlzOiBpZiB0aGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhlIHN0YW5kYXJkIGVudmlyb25tZW50LCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBpYXZmYCwgYGljZWAsIG9yIGBpZHBmYC4gYGlhdmZgIGlzIHRoZSBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEYuIGBpY2VgIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCBgaWRwZmAgaXMgdGhlIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIuIE5vcGUsIG5vIGVtdWxhdGlvbiBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLCBhbmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlbS4gVGhleSdyZSBkZWFkLWVuZHMgaW4gR0NFIG9yIFFFTVUuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBhbmFseXNpcy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aGUgZmFjdCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHRpZWQgdG8gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24uIFRoZXkgZmFsbCBkaXJlY3RseSBpbnRvIHRoZSBcImltcG9zc2libGUgdG8gcmVhY2hcIiBjYXRlZ29yeS4gSXQncyB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgZmxhZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuT2theSwgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyBtb2RpZmllZDogIGBpYXZmX3ZpcnRjaG5sLmNgLCBtdWx0aXBsZSBgaWNlYCBmaWxlcywgYW5kIGBpZHBmX3ZpcnRjaG5sLmNgLiBBbGwgSW50ZWwgRXRoZXJuZXQgZHJpdmVycywgYWxsIGhhcmR3YXJlIGRlcGVuZGVudC5cblxuSSdsbCBmaW5hbGl6ZSB0aGUgcmVzdWx0OiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NjksIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjUxOjA4LjE4NjM2Mjg3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaWF2ZiwgaWNlLCBpZHBmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBkbyBub3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBRRU1VLCBtYWtpbmcgdGhlbSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpYXZmLCBpY2UsIGlkcGYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvIG5vdCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIFFFTVUsIG1ha2luZyB0aGVtIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqglzn[1] Phase: Running StartedAt: 2026-07-17 22:51:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqglzn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-17 22:51:19 +0000 UTC FinishedAt: 2026-07-17 22:51:24 +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,}