Name: series-workflowmvccx Phase: Failed StartedAt: 2026-07-27 13:08:09 +0000 UTC FinishedAt: 2026-07-27 13:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvccx[0] Phase: Succeeded StartedAt: 2026-07-27 13:08:09 +0000 UTC FinishedAt: 2026-07-27 13:30:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvccx[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 13:08:09 +0000 UTC FinishedAt: 2026-07-27 13:30:15 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhMzFmYzY4MDlhYmYzNGRmY2ZhN2IyMTYyNGVjNTdlYzUyNWRmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzVhLi41OGI5NzljMTdjM2U0OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtNjA3LDYgJiM0Mzs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gfTtcbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfdW52aXNpdGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtYXNrLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07XG4mIzQzO31cbiYjNDM7XG4gLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi9cbiAjZGVmaW5lIE1BWF9BUkdfU1BJTExfU0xPVFMgNjRcbiBcbkBAIC02OTMsOCAmIzQzOzcxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19tZXJnZV9vZmZzZXRzKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxuIHtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0geyAuZnJhbWUgPSBhLmZyYW1lIH07XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG4gXHRpbnQgaSA9IDAsIGogPSAwLCBrID0gMDtcbiBcbiBcdHdoaWxlIChpIFx1MDAzYyBhLm9mZl9jbnQgXHUwMDI2XHUwMDI2IGogXHUwMDNjIGIub2ZmX2NudCkge1xuQEAgLTc0Nyw3ICYjNDM7NzcyLDcgQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX2pvaW5faW1wcmVjaXNlKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFja1xuIFx0ZWxzZSBpZiAoYi5mcmFtZSA9PSBBUkdfSU1QUkVDSVNFKVxuIFx0XHRtIHw9IGIubWFzaztcbiBcbi1cdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbSwgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuIH1cbiBcbiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xuQEAgLTc2MCw3ICYjNDM7Nzg1LDcgQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgX19hcmdfdHJhY2tfam9pbihzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbiBcdGlmIChhLmZyYW1lID09IGIuZnJhbWUgXHUwMDI2XHUwMDI2IGEuZnJhbWUgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIEJvdGggb2Zmc2V0LWltcHJlY2lzZTogc3RheSBpbXByZWNpc2UgKi9cbiBcdFx0aWYgKGEub2ZmX2NudCA9PSAwIHx8IGIub2ZmX2NudCA9PSAwKVxuLVx0XHRcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbiYjNDM7XHRcdFx0cmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xuIFx0XHQvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgXHUwMDNlNCAqL1xuIFx0XHRyZXR1cm4gYXJnX21lcmdlX29mZnNldHMoYSwgYik7XG4gXHR9XG5AQCAtODM3LDcgJiM0Mzs4NjIsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICYjNDM7PSByWSB3aGVyZSByWSBpcyBub3QgYXJnIGRlcml2ZWRcbiBcdFx0ICogclggJiM0Mzs9IHJYXG4gXHRcdCAqL1xuLVx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4mIzQzO1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aWYgKHNyYy1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VmcmFtZSA9PSBBUkdfTk9ORSkge1xuQEAgLTg0NSw4ICYjNDM7ODcwLDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxuIFx0XHQgKiByWCAmIzQzOz0gclkgd2hlcmUgclggaXMgbm90IGFyZyBkZXJpdmVkXG4gXHRcdCAqIHJZIGlkZW50aXR5IGxlYWtzIGludG8gclhcbiBcdFx0ICovXG4tXHRcdGRzdC1cdTAwM2VvZmZfY250ID0gMDtcbi1cdFx0ZHN0LVx1MDAzZWZyYW1lID0gc3JjLVx1MDAzZWZyYW1lO1xuJiM0MztcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHNyYy1cdTAwM2VmcmFtZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC04NzUsNyAmIzQzOzg5OSw3IEBAIHN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXG4gXHRcdHMxNiBuZXdfb2ZmO1xuIFxuIFx0XHRpZiAoYXJnX2FkZChhdC1cdTAwM2VvZmZbaV0sIGRlbHRhLCBcdTAwMjZuZXdfb2ZmKSkge1xuLVx0XHRcdGF0LVx1MDAzZW9mZl9jbnQgPSAwO1xuJiM0MztcdFx0XHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cdTAwM2VmcmFtZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdGF0LVx1MDAzZW9mZltpXSA9IG5ld19vZmY7XG5AQCAtOTAxLDExICYjNDM7OTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdFx0XHRpbnQgZGVwdGgpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7XG4tXHRcdC5tYXNrID0gKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggJiM0MzsgMSkpIC0gMSxcbi1cdFx0LmZyYW1lID0gQVJHX0lNUFJFQ0lTRVxuLVx0fTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX2ltcHJlY2lzZSgoMXUgXHUwMDNjXHUwMDNjIChkZXB0aCAmIzQzOyAxKSkgLSAxKTtcbiYjNDM7XHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XG4gXHRpbnQgY250LCBpO1xuIFxuIFx0aWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7XG5AQCAtOTQwLDcgJiM0Mzs5NjEsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcbiBcdFx0XHQgICBpbnQgcmVnLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXG4gXHRcdFx0ICAgc3RydWN0IGFyZ190cmFjayAqdmFsLCB1MzIgc3opXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XG4gXHRpbnQgY250LCBpO1xuIFxuQEAgLTk3OSw3ICYjNDM7MTAwMCw3IEBAIHN0YXRpYyB2b2lkIHNwaWxsX3RvX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LFxuICAqL1xuIHN0YXRpYyB2b2lkIGNsZWFyX292ZXJsYXBwaW5nX3N0YWNrX3Nsb3RzKHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrLCBzMTYgb2ZmLCB1MzIgc3osIGludCBjbnQpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXG4gXHRpZiAoY250ID09IDApIHtcbiBcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkmIzQzOyYjNDM7KVxuQEAgLTExMDMsNyAmIzQzOzExMjQsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHR1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiBcdHN0cnVjdCBhcmdfdHJhY2sgKnNyYyA9IFx1MDAyNmF0X291dFtpbnNuLVx1MDAzZXNyY19yZWddO1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRpbnQgciwgc2xvdDtcbiBcbiBcdC8qIEhhbmRsZSBzdGFjayBhcmcgc3RvcmVzIGFuZCBsb2Fkcy4gKi9cbkBAIC0xMTI4LDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0YXJnX3BhZGQoZHN0LCAtKHM2NClpbnNuLVx1MDAzZWltbSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0LyogQW55IG90aGVyIDY0LWJpdCBhbHUgb24gdGhlIHBvaW50ZXIgbWFrZXMgaXQgaW1wcmVjaXNlICovXG4tXHRcdFx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4mIzQzO1x0XHRcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC1cdTAwM2VmcmFtZSk7XG4gXHRcdH0gLyogZWxzZSBpZiBkc3QtXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4gXHRcdGlmIChjb2RlID09IEJQRl9NT1YpIHtcbkBAIC0xMzc5LDExICYjNDM7MTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXHUwMDNlb2ZmIGludG8gYXJnX3RyYWNrICovXG4gXHRpZiAocHRyLVx1MDAzZW9mZl9jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cdTAwM2VmcmFtZSk7XG4gXHRcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXHUwMDNlb2ZmX2NudDtcbi1cdFx0cmVzb2x2ZWQuZnJhbWUgPSBwdHItXHUwMDNlZnJhbWU7XG4gXHRcdGZvciAob2kgPSAwOyBvaSBcdTAwM2MgcHRyLVx1MDAzZW9mZl9jbnQ7IG9pJiM0MzsmIzQzOykge1xuIFx0XHRcdGlmIChhcmdfYWRkKHB0ci1cdTAwM2VvZmZbb2ldLCBpbnNuLVx1MDAzZW9mZiwgXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcbi1cdFx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSAwO1xuJiM0MztcdFx0XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UocHRyLVx1MDAzZWZyYW1lKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTE2MzAsOCAmIzQzOzE2NTEsOCBAQCBzdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDtcbiBcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X3N0YWNrX2FyZ19lbnRyeVtNQVhfU1RBQ0tfQVJHX1NMT1RTXTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4mIzQzO1x0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XG4mIzQzO1x0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbiBcdGJvb2wgY2hhbmdlZDtcbiBcdGludCBpLCBwLCByLCBlcnIgPSAtRU5PTUVNO1xuIFxuQEAgLTE4OTUsNyAmIzQzOzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpbnQgcCA9IHBvX3N0YXJ0OyBwIFx1MDAzYyBwb19lbmQ7IHAmIzQzOyYjNDM7KSB7XG4gXHRcdGludCBpZHggPSBlbnYtXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW3BdO1xuIFx0XHRzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9O1xuLVx0XHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4mIzQzO1x0XHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZpbnNuc1tpZHhdO1xuIFx0XHRzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqY2FsbGVlX2luc3RhbmNlO1xuIFx0XHRpbnQgY2FsbGVlLCB0YXJnZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBhMzFmYzY4MDlhYmYzNGRmY2ZhN2IyMTYyNGVjNTdlYzUyNWRmMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKQEAgLTYwNyw2ICYjNDM7NjA3LDMxIEBAIGVudW0gYXJnX3RyYWNrX3N0YXRlIHsKIAlBUkdfSU1QUkVDSVNFCT0gLTMsCS8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovCiB9OwogCiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfdW52aXNpdGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtYXNrLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7fQomIzQzOwogLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi8KICNkZWZpbmUgTUFYX0FSR19TUElMTF9TTE9UUyA2NAogCkBAIC02OTMsOCAmIzQzOzcxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKQogICovCiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYikKIHsKLQlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9OwotCXN0cnVjdCBhcmdfdHJhY2sgaW1wID0geyAuZnJhbWUgPSBhLmZyYW1lIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpOwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpOwogCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOwogCiAJd2hpbGUgKGkgJmx0OyBhLm9mZl9jbnQgJmFtcDsmYW1wOyBqICZsdDsgYi5vZmZfY250KSB7CkBAIC03NDcsNyAmIzQzOzc3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sKIAllbHNlIGlmIChiLmZyYW1lID09IEFSR19JTVBSRUNJU0UpCiAJCW0gfD0gYi5tYXNrOwogCi0JcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pOwogfQogCiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqLwpAQCAtNzYwLDcgJiM0Mzs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKQogCWlmIChhLmZyYW1lID09IGIuZnJhbWUgJmFtcDsmYW1wOyBhLmZyYW1lICZndDs9IDApIHsKIAkJLyogQm90aCBvZmZzZXQtaW1wcmVjaXNlOiBzdGF5IGltcHJlY2lzZSAqLwogCQlpZiAoYS5vZmZfY250ID09IDAgfHwgYi5vZmZfY250ID09IDApCi0JCQlyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAuZnJhbWUgPSBhLmZyYW1lIH07CiYjNDM7CQkJcmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpOwogCQkvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgJmd0OzQgKi8KIAkJcmV0dXJuIGFyZ19tZXJnZV9vZmZzZXRzKGEsIGIpOwogCX0KQEAgLTgzNyw3ICYjNDM7ODYyLDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKQogCQkgKiByWCAmIzQzOz0gclkgd2hlcmUgclkgaXMgbm90IGFyZyBkZXJpdmVkCiAJCSAqIHJYICYjNDM7PSByWAogCQkgKi8KLQkJZHN0LSZndDtvZmZfY250ID0gMDsKJiM0MzsJCSpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc3JjLSZndDtmcmFtZSAmZ3Q7PSAwICZhbXA7JmFtcDsgZHN0LSZndDtmcmFtZSA9PSBBUkdfTk9ORSkgewpAQCAtODQ1LDggJiM0Mzs4NzAsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpCiAJCSAqIHJYICYjNDM7PSByWSB3aGVyZSByWCBpcyBub3QgYXJnIGRlcml2ZWQKIAkJICogclkgaWRlbnRpdHkgbGVha3MgaW50byByWAogCQkgKi8KLQkJZHN0LSZndDtvZmZfY250ID0gMDsKLQkJZHN0LSZndDtmcmFtZSA9IHNyYy0mZ3Q7ZnJhbWU7CiYjNDM7CQkqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLSZndDtmcmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg3NSw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3BhZGQoc3RydWN0IGFyZ190cmFjayAqYXQsIHM2NCBkZWx0YSkKIAkJczE2IG5ld19vZmY7CiAKIAkJaWYgKGFyZ19hZGQoYXQtJmd0O29mZltpXSwgZGVsdGEsICZhbXA7bmV3X29mZikpIHsKLQkJCWF0LSZndDtvZmZfY250ID0gMDsKJiM0MzsJCQkqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC0mZ3Q7ZnJhbWUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWF0LSZndDtvZmZbaV0gPSBuZXdfb2ZmOwpAQCAtOTAxLDExICYjNDM7OTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCQkJc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LAogCQkJCQlpbnQgZGVwdGgpCiB7Ci0Jc3RydWN0IGFyZ190cmFjayBpbXAgPSB7Ci0JCS5tYXNrID0gKDF1ICZsdDsmbHQ7IChkZXB0aCAmIzQzOyAxKSkgLSAxLAotCQkuZnJhbWUgPSBBUkdfSU1QUkVDSVNFCi0JfTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSAmbHQ7Jmx0OyAoZGVwdGggJiM0MzsgMSkpIC0gMSk7CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTsKIAlpbnQgY250LCBpOwogCiAJaWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7CkBAIC05NDAsNyAmIzQzOzk2MSw3IEBAIHN0YXRpYyB2b2lkIHNwaWxsX3RvX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LAogCQkJICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LAogCQkJICAgc3RydWN0IGFyZ190cmFjayAqdmFsLCB1MzIgc3opCiB7Ci0Jc3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpOwogCXN0cnVjdCBhcmdfdHJhY2sgbmV3X3ZhbCA9IHN6ID09IDggPyAqdmFsIDogbm9uZTsKIAlpbnQgY250LCBpOwogCkBAIC05NzksNyAmIzQzOzEwMDAsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwKICAqLwogc3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudCkKIHsKLQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7CiAKIAlpZiAoY250ID09IDApIHsKIAkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfQVJHX1NQSUxMX1NMT1RTOyBpJiM0MzsmIzQzOykKQEAgLTExMDMsNyAmIzQzOzExMjQsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKIAlzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSAmYW1wO2F0X291dFtpbnNuLSZndDtkc3RfcmVnXTsKIAlzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSAmYW1wO2F0X291dFtpbnNuLSZndDtzcmNfcmVnXTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7CiAJaW50IHIsIHNsb3Q7CiAKIAkvKiBIYW5kbGUgc3RhY2sgYXJnIHN0b3JlcyBhbmQgbG9hZHMuICovCkBAIC0xMTI4LDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCWFyZ19wYWRkKGRzdCwgLShzNjQpaW5zbi0mZ3Q7aW1tKTsKIAkJCWVsc2UKIAkJCQkvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi8KLQkJCQlkc3QtJmd0O29mZl9jbnQgPSAwOwomIzQzOwkJCQkqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LSZndDtmcmFtZSk7CiAJCX0gLyogZWxzZSBpZiBkc3QtJmd0O2ZyYW1lIGlzIGltcHJlY2lzZSBpdCBzdGF5cyBzbyAqLwogCX0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0FMVTY0ICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQlpZiAoY29kZSA9PSBCUEZfTU9WKSB7CkBAIC0xMzc5LDExICYjNDM7MTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiAJLyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tJmd0O29mZiBpbnRvIGFyZ190cmFjayAqLwogCWlmIChwdHItJmd0O29mZl9jbnQgJmd0OyAwKSB7CiYjNDM7CQlyZXNvbHZlZCA9IGFyZ190cmFja19zdGF0ZShwdHItJmd0O2ZyYW1lKTsKIAkJcmVzb2x2ZWQub2ZmX2NudCA9IHB0ci0mZ3Q7b2ZmX2NudDsKLQkJcmVzb2x2ZWQuZnJhbWUgPSBwdHItJmd0O2ZyYW1lOwogCQlmb3IgKG9pID0gMDsgb2kgJmx0OyBwdHItJmd0O29mZl9jbnQ7IG9pJiM0MzsmIzQzOykgewogCQkJaWYgKGFyZ19hZGQocHRyLSZndDtvZmZbb2ldLCBpbnNuLSZndDtvZmYsICZhbXA7cmVzb2x2ZWQub2ZmW29pXSkpIHsKLQkJCQlyZXNvbHZlZC5vZmZfY250ID0gMDsKJiM0MzsJCQkJcmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItJmd0O2ZyYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTYzMCw4ICYjNDM7MTY1MSw4IEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9zdWJwcm9nX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDsKIAlzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQgPSBOVUxMOwogCXN0cnVjdCBhcmdfdHJhY2sgYXRfc3RhY2tfYXJnX2VudHJ5W01BWF9TVEFDS19BUkdfU0xPVFNdOwotCXN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07Ci0Jc3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTsKIAlib29sIGNoYW5nZWQ7CiAJaW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07CiAKQEAgLTE4OTUsNyAmIzQzOzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWZvciAoaW50IHAgPSBwb19zdGFydDsgcCAmbHQ7IHBvX2VuZDsgcCYjNDM7JiM0MzspIHsKIAkJaW50IGlkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW3BdOwogCQlzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9OwotCQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpOwogCQlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSAmYW1wO2luc25zW2lkeF07CiAJCXN0cnVjdCBmdW5jX2luc3RhbmNlICpjYWxsZWVfaW5zdGFuY2U7CiAJCWludCBjYWxsZWUsIHRhcmdldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrZXJuZWwvYnBmL2xpdmVuZXNzLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSB0b3VjaGluZyBga2VybmVsL2JwZi9saXZlbmVzcy5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIG1vc3RseSBjb3NtZXRpYy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgLCBhbmQgdGhlIG90aGVycyB0byBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCB2YXJpYWJsZXMgaW5zdGVhZCBvZiBkaXJlY3RseSB1c2luZyBzdHJ1Y3QgaW5pdGlhbGl6ZXJzLiBTZWVtcyBsaWtlIGEgY29kZSBzdHlsZSBwcmVmZXJlbmNlLgoKQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMganVzdCB5ZXQuIEdvdHRhIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqY2hhbmdlZCouIEFoLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGluaXRpYWxpemF0aW9ucywgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTsKYGBgCgp3aXRoOgoKYGBgYwpzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTsKYGBgCgpXaGVyZSBgYXJnX3RyYWNrX3N0YXRlYCBpcyBqdXN0IGEgc2ltcGxlIHdyYXBwZXIuIFB1cmVseSBjb3NtZXRpYywgbm8gY2hhbmdlIGluIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHNvIGZhci4KCldhaXQgYSBzZWNvbmQsIGhvbGQgb24uLi4gTGV0JiMzOTtzIHNjcnV0aW5pemUgaXQuIEFscmlnaHQsIGNoZWNraW5nIHNvbWUgbW9yZSBjaGFuZ2VzLi4uCgpgYGBjCi0Jc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTsKYGBgCgpgYGBjCi0JcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pOwpgYGAKCmBgYGMKLQkJCXJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGEuZnJhbWUgfTsKJiM0MzsJCQlyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7CmBgYAoKYGBgYwotCQlkc3QtJmd0O29mZl9jbnQgPSAwOwomIzQzOwkJKmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC0mZ3Q7ZnJhbWUpOwpgYGAKCk9rYXksIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBkaWZmZXJlbmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHRoZSByZXBsYWNlbWVudCBvZiBgZHN0LSZndDtvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTtgLiBUaGUgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBmdW5jdGlvbiByZXR1cm5zIGEgYHN0cnVjdCBhcmdfdHJhY2tgIGluaXRpYWxpemVkIHdpdGgganVzdCB0aGUgYGZyYW1lYCBtZW1iZXIuIElmIGBkc3RgIGhhZCBvdGhlciBmaWVsZHMgc2V0LCBsaWtlIGBtYXNrYCBvciBgb2ZmYCwgdGhlIGFzc2lnbm1lbnQgYCpkc3QgPSAuLi5gIHdpbGwgKnplcm8gb3V0KiB0aG9zZSBmaWVsZHMuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbCBjb2RlLCBgZHN0LSZndDtvZmZfY250ID0gMDtgLCBvbmx5IGFmZmVjdGVkIGBvZmZfY250YC4KClRoaXMgaXMgYSBwb3RlbnRpYWwgc2lkZS1lZmZlY3QgdGhhdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgZXhhbWluZWQgYmVjYXVzZSB0aGlzICpkb2VzKiBjaGFuZ2UgdGhlIGxvZ2ljIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGEgc3VidGxlIGJ1ZyBvciBjaGFuZ2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHN0cnVjdCBhcmdfdHJhY2tgIGFjdHVhbGx5ICpjb250YWlucyogdG8gYXNzZXNzIHRoZSBpbXBhY3QgaGVyZS4gTGV0IG1lIHB1bGwgdXAgaXRzIGRlZmluaXRpb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYXJnX3RyYWNrIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGl2ZW5lc3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmM9NTQ2PXN0YXRpYyBpbnQgcHJpbnRfaW5zdGFuY2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5NC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1OTU6c3RydWN0IGFyZ190cmFjayB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk2LVx0dW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgZnVsbCBzdHJ1Y3QgZGVmaW5pdGlvbiB0byBtYWtlIGFueSBtZWFuaW5nZnVsIGp1ZGdtZW50LiBJIGNhbiYjMzk7dCBqdXN0IG9wZXJhdGUgaW4gdGhlIGFic3RyYWN0OyBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBjb21wb25lbnRzLCB0aGVpciB0eXBlcywgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBlYWNoIG90aGVyIOKAkyBldmVyeXRoaW5nLiBUaGlzIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGdldCB0aGUgZnVsbCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTQ6XHRcbiA1OTU6XHRzdHJ1Y3QgYXJnX3RyYWNrIHtcbiA1OTY6XHRcdHVuaW9uIHtcbiA1OTc6XHRcdFx0czE2IG9mZltNQVhfQVJHX09GRlNFVFNdOyAvKiBieXRlIG9mZnNldHM7IG9mZl9jbnQgc2F5cyBob3cgbWFueSAqL1xuIDU5ODpcdFx0XHR1MTYgbWFzaztcdC8qIGFyZyBiaXRtYXNrIHdoZW4gYXJnID09IEFSR19JTVBSRUNJU0UgKi9cbiA1OTk6XHRcdH07XG4gNjAwOlx0XHRzOCBmcmFtZTtcdC8qIGFic29sdXRlIGZyYW1lIGluZGV4LCBvciBlbnVtIGFyZ190cmFja19zdGF0ZSAqL1xuIDYwMTpcdFx0czggb2ZmX2NudDtcdC8qIDAgPSBvZmZzZXQtaW1wcmVjaXNlLCAxLTQgPSAjIG9mIHByZWNpc2Ugb2Zmc2V0cyAqL1xuIDYwMjpcdH07XG4gNjAzOlx0XG4gNjA0Olx0ZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIDYwNTpcdFx0QVJHX05PTkVcdD0gLTEsXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xuIDYwNjpcdFx0QVJHX1VOVklTSVRFRFx0PSAtMixcdC8qIG5vdCB5ZXQgcmVhY2hlZCBieSBkYXRhZmxvdyAqL1xuIDYwNzpcdFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gNjA4Olx0fTtcbiA2MDk6XHRcbiA2MTA6XHRzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfc3RhdGUoczggZnJhbWUpXG4gNjExOlx0e1xuIDYxMjpcdFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbiA2MTM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIGluIE9mZnNldCBUcmFja2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZTogd2Ugd2VudCBmcm9tIGV4cGxpY2l0bHkgc2V0dGluZyBgZHN0LSZndDtvZmZfY250ID0gMDtgIHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRpbmcgdGhlIGBhcmdfdHJhY2tgIHN0cnVjdCB3aXRoIHRoZSByZXN1bHQgb2YgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC0mZ3Q7ZnJhbWUpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogJiMzNDtIYW5nIG9uLCBkb2VzbiYjMzk7dCB0aGF0IHplcm8gb3V0IHRoZSBgb2ZmYCBhcnJheSB3aGVuIHdlIHByZXZpb3VzbHkgZGlkbiYjMzk7dD8mIzM0OyAKCkJ1dCB0aGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgb2ZmX2NudGAgaXMgdGhlICpjb3VudCogb2YgdmFsaWQgb2Zmc2V0cy4gU28sIGlmIGBvZmZfY250YCBpcyB6ZXJvLCB3ZSYjMzk7cmUgc3VwcG9zZWQgdG8gYmUgaWdub3JpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBgb2ZmYCBhcnJheSBhbnl3YXkuIFRoZXJlZm9yZSwgY2hhbmdpbmcgaXQgc2hvdWxkbiYjMzk7dCBhZmZlY3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLi4uIHRoZW9yZXRpY2FsbHkuCgpUaGUgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIGNoaW1lLCB0aG91Z2guIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnLCBlaXRoZXIgd2hlcmUgdGhlIGNvZGUgaXMgYWNjaWRlbnRhbGx5IGFjY2Vzc2luZyB0aGUgYG9mZmAgYXJyYXkgd2hlbiBgb2ZmX2NudGAgaXMgemVybyAoYSBkYXRhIGludGVncml0eSBpc3N1ZSksIG9yIHdoZXJlIHdlJiMzOTtyZSByZWx5aW5nIG9uIGEgbWVtb3J5IGNvbXBhcmlzb24gKGBtZW1jbXBgIG9yIHNpbWlsYXIpIG9uIHRoZSBlbnRpcmUgYHN0cnVjdCBhcmdfdHJhY2tgLCB3aGljaCBpcyBleHRyZW1lbHkgZGFuZ2Vyb3VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IHNlY29uZCBjYXNlIGlzIGhhcHBlbmluZywgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY21wLiphcmdfdHJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBTY2FuOiBFcXVhbGl0eSBDaGVja3MqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgb2YgZGlyZWN0IGVxdWFsaXR5IGNoZWNrcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdGVsbHRhbGUgc2lnbnM6IGA9PWAsIHBvc3NpYmx5IGA9PT1gIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSmF2YVNjcmlwdCwgYW5kIG1heWJlIGV2ZW4gYSBxdWljayBnbGFuY2UgZm9yIGNvbXBhcmlzb25zIGxpa2UgYCE9YCBvciBgIT09YC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRob3NlIHNwb3RzIGJlY2F1c2UgdGhleSYjMzk7cmUgb2Z0ZW4gdGhlIHNvdXJjZSBvZiBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgbG9naWMgZXJyb3JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggb2JqZWN0IHJlZmVyZW5jZXMsIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIG9yIHR5cGUgY29lcmNpb24uIEEgcXVpY2ssIHRhcmdldGVkIHJlZ2V4IG9yIGEgc2ltaWxhciBzZWFyY2ggd2l0aGluIHRoZSBjb2RlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHZlY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJnX3RyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGl2ZW5lc3MuYz01NDY9c3RhdGljIGludCBwcmludF9pbnN0YW5jZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTgzLSAqXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTg0OiAqIEF0IENGRyBtZXJnZSBwb2ludHMsIGFyZ190cmFja19qb2luKCkgbW92ZXMgZG93biB0aGUgbGF0dGljZTpcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01ODUtICogICAtIHNhbWUgZnJhbWUgJiM0Mzsgc2FtZSBvZmZzZXQgIC1cdTAwM2UgcHJlY2lzZVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01OTQtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTk1OnN0cnVjdCBhcmdfdHJhY2sge1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5Ni1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk5LVx0fTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MDA6XHRzOCBmcmFtZTtcdC8qIGFic29sdXRlIGZyYW1lIGluZGV4LCBvciBlbnVtIGFyZ190cmFja19zdGF0ZSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMS1cdHM4IG9mZl9jbnQ7XHQvKiAwID0gb2Zmc2V0LWltcHJlY2lzZSwgMS00ID0gIyBvZiBwcmVjaXNlIG9mZnNldHMgKi9cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjAzLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYwNDplbnVtIGFyZ190cmFja19zdGF0ZSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjA1LVx0QVJHX05PTkVcdD0gLTEsXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MDktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEwOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTEte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjYxMjpcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjEzLX1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTQtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjE1OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE2LXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MTc6XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTgtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxOS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyMS17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjIyOlx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfVU5WSVNJVEVEKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjMtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyNC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjU6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoczggZnJhbWUpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI2LXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2Mjc6XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjgtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyOS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MzA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MzEte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjYzMjpcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTYzMy19XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTY0ND1zdGF0aWMgaW50IHN0YWNrX2FyZ19vZmZfdG9fc2xvdChzMTYgb2ZmKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NTItXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjUzOnN0YXRpYyBib29sIGFyZ19pc192aXNpdGVkKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1NC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Ny1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2NTg6c3RhdGljIGJvb2wgYXJnX2lzX2ZwKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1OS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY2Mi1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2NjM6c3RhdGljIHZvaWQgdmVyYm9zZV9hcmdfdHJhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGFyZ190cmFjayAqYXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjY0LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjg1LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY4NjpzdGF0aWMgYm9vbCBhcmdfdHJhY2tfZXEoY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYSwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02ODcte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MDMtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA0OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTcwNS17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA2Olx0c3RydWN0IGFyZ190cmFjayBhdCA9IHt9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTcwNy1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzE4LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcxOTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjAte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMTpcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMjpcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzIzLVx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc1NS0vKlxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc1NjogKiBNZXJnZSB0d28gYXJnX3RyYWNrcyBpbnRvIEFSR19JTVBSRUNJU0UsIGNvbGxlY3RpbmcgdGhlIGZyYW1lXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzU3LSAqIGJpdHMgZnJvbSBib3RoIG9wZXJhbmRzLiBQcmVjaXNlIGZyYW1lIGluZGljZXMgKGZyYW1lIFx1MDAzZT0gMClcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYwLSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjc2MTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfam9pbl9pbXByZWNpc2Uoc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrIGIpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYyLXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc0LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3NTpcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTc3Ni19XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc3LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3ODovKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3OTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4MC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4Ny1cdFx0aWYgKGEub2ZmX2NudCA9PSAwIHx8IGIub2ZmX2NudCA9PSAwKVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc4ODpcdFx0XHRyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg5LVx0XHQvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgXHUwMDNlNCAqL1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MTktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODIwOnN0YXRpYyBib29sIGFyZ190cmFja19qb2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCB0YXJnZXQsIGludCByLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjgyMTpcdFx0XHQgICBzdHJ1Y3QgYXJnX3RyYWNrICppbiwgc3RydWN0IGFyZ190cmFjayBvdXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODIyLXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjM6XHRzdHJ1Y3QgYXJnX3RyYWNrIG9sZCA9ICppbjtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjQ6XHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBfX2FyZ190cmFja19qb2luKG9sZCwgb3V0KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MjUtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODI2Olx0aWYgKGFyZ190cmFja19lcShcdTAwMjZuZXdfdmFsLCBcdTAwMjZvbGQpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MzktXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmcCUmIzQzO2Q6IFwmIzM0OywgciAqIDgpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjg0MDpcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2b2xkKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NDEtXHR2ZXJib3NlKGVudiwgXCYjMzQ7ICYjNDM7IFwmIzM0Oyk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODQyOlx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZvdXQpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0My1cdHZlcmJvc2UoZW52LCBcJiMzNDsgPVx1MDAzZSBcJiMzNDspO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjg0NDpcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2bmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODQ1LVx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg1NC0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NTU6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg1Ni17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg2NC1cdFx0ICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODY1Olx0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NjYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODcyLVx0XHQgKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NzM6XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzcmMtXHUwMDNlZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTg3NC1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz04ODM9c3RhdGljIGJvb2wgYXJnX2FkZChzMTYgb2ZmLCBzNjQgZGVsdGEsIHMxNiAqb3V0KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTEtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODkyOnN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODkzLXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTAxLVx0XHRpZiAoYXJnX2FkZChhdC1cdTAwM2VvZmZbaV0sIGRlbHRhLCBcdTAwMjZuZXdfb2ZmKSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjkwMjpcdFx0XHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cdTAwM2VmcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTAzLVx0XHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9OTE0PXN0YXRpYyBpbnQgZnBfb2ZmX3RvX3Nsb3QoczE2IG9mZilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTIyLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyMzpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBmaWxsX2Zyb21fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyNDpcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBpbnQgcmVnLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyNTpcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkyNi1cdFx0XHRcdFx0aW50IGRlcHRoKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkyNy17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI4Olx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSBcdTAwM2NcdTAwM2MgKGRlcHRoICYjNDM7IDEpKSAtIDEpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyOTpcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05MzAtXHRpbnQgY250LCBpO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05NDgtXHRcdFx0cmV0dXJuIGltcDtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NDk6XHRcdHJlc3VsdCA9IF9fYXJnX3RyYWNrX2pvaW4ocmVzdWx0LCBhdF9zdGFja19vdXRbc2xvdF0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTk1MC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTU5LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MDpzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NjE6XHRcdFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MjpcdFx0XHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05NjMte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2NDpcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTY1Olx0c3RydWN0IGFyZ190cmFjayBuZXdfdmFsID0gc3ogPT0gOCA/ICp2YWwgOiBub25lO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTk2Ni1cdGludCBjbnQsIGk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk3Ny1cdFx0Zm9yIChpbnQgc2xvdCA9IDA7IHNsb3QgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHNsb3QmIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk3ODpcdFx0XHRhdF9zdGFja19vdXRbc2xvdF0gPSBfX2FyZ190cmFja19qb2luKGF0X3N0YWNrX291dFtzbG90XSwgbmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTc5LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk5Mi1cdFx0ZWxzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk5MzpcdFx0XHRhdF9zdGFja19vdXRbc2xvdF0gPSBfX2FyZ190cmFja19qb2luKGF0X3N0YWNrX291dFtzbG90XSwgbmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTk0LVx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDAwLSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDE6c3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDAyLXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDAzOlx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA0LVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA2LVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAwNzpcdFx0XHRhdF9zdGFja1tpXSA9IF9fYXJnX3RyYWNrX2pvaW4oYXRfc3RhY2tbaV0sIG5vbmUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDgtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAxNy1cdFx0XHRlbHNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAxODpcdFx0XHRcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAxOS1cdFx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI2PXN0YXRpYyB2b2lkIGNsZWFyX3N0YWNrX2Zvcl9hbGxfb2ZmcyhzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyNzpcdFx0XHRcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBpbnQgcmVnLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMjg6XHRcdFx0XHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCwgdTMyIHN6KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMjkte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDUxLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNTI6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBpZHgsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA1MzpcdFx0XHQgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X2luLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19pbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU0Olx0XHRcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA1NS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDYyOlx0XHRpZiAoYXJnX3RyYWNrX2VxKFx1MDAyNmF0X291dFtpXSwgXHUwMDI2YXRfaW5baV0pKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjMtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjktXHRcdH1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDcwOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ciVkOiBcJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X2luW2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDcxOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IC1cdTAwM2UgXCYjMzQ7KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9vdXRbaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzItXHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzYtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3NzpcdFx0aWYgKGFyZ190cmFja19lcShcdTAwMjZhdF9vdXRbYWldLCBcdTAwMjZhdF9pblthaV0pKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzgtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwODQtXHRcdH1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDg1Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0c2ElZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODY6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgLVx1MDAzZSBcJiMzNDspOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X291dFthaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwODctXHR9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA4OTpcdFx0aWYgKGFyZ190cmFja19lcShcdTAwMjZhdF9zdGFja19vdXRbaV0sIFx1MDAyNmF0X3N0YWNrX2luW2ldKSlcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDkwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk2LVx0XHR9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA5NzpcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdGZwJSYjNDM7ZDogXCYjMzQ7LCAtKGkgJiM0MzsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA5ODpcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyAtXHUwMDNlIFwmIzM0Oyk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfc3RhY2tfb3V0W2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk5LVx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTAzLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMDQ6c3RhdGljIGJvb2wgY2FuX2JlX2xvY2FsX2ZwKGludCBkZXB0aCwgaW50IHJlZ25vLCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTA1LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExMC0vKlxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTE6ICogUHVyZSBkYXRhZmxvdyB0cmFuc2ZlciBmdW5jdGlvbiBmb3IgYXJnX3RyYWNrIHN0YXRlLlxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTItICogVXBkYXRlcyBhdF9vdXRbXSBiYXNlZCBvbiBob3cgdGhlIGluc3RydWN0aW9uIG1vZGlmaWVzIHJlZ2lzdGVycy5cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExNC0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE1OnN0YXRpYyB2b2lkIGFyZ190cmFja194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE2LVx0XHRcdCAgIGludCBpbnNuX2lkeCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE3Olx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTg6XHRcdFx0ICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfYXJnX2VudHJ5LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTktXHRcdFx0ICAgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTI0LVx0dTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMjU6XHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI2Olx0c3RydWN0IGFyZ190cmFjayAqc3JjID0gXHUwMDI2YXRfb3V0W2luc24tXHUwMDNlc3JjX3JlZ107XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyNzpcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTEyOC1cdGludCByLCBzbG90O1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTUxLVx0XHRcdFx0LyogQW55IG90aGVyIDY0LWJpdCBhbHUgb24gdGhlIHBvaW50ZXIgbWFrZXMgaXQgaW1wcmVjaXNlICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE1MjpcdFx0XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNTMtXHRcdH0gLyogZWxzZSBpZiBkc3QtXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjItXHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE2MzpcdFx0XHRhcmdfdHJhY2tfYWx1NjQoZHN0LCBzcmMpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjQtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE3My1cdFx0ICogYXRfc3RhY2tfb3V0W3Nsb3RdIGlzIG5vdCBjbGVhcmVkIGJ5IHRoZSBoZWxwZXIgYW5kIHN1YnByb2cgY2FsbHMuXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE3NDpcdFx0ICogVGhlIGZpbGxfZnJvbV9zdGFjaygpIG1heSByZXR1cm4gdGhlIHN0YWxlIHNwaWxsIOKAlCB3aGljaCBpcyBhbiBGUC1kZXJpdmVkIGFyZ190cmFja1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNzUtXHRcdCAqICh0aGUgdmFsdWUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGlsbGVkIHRoZXJlKS4gVGhlIGxvYWRlZCByZWdpc3RlciB0aGVuIGNhcnJpZXNcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIwMy1cdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gXHUwMDI2XHUwMDI2IHN6ID09IDgpIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMjA0Olx0XHRcdHN0cnVjdCBhcmdfdHJhY2sgKnBhcmVudF9zdGFjayA9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIwNS1cdFx0XHRcdGVudi1cdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tjYWxsc2l0ZXNbc3JjLVx1MDAzZWZyYW1lXV07XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzMDg9c3RhdGljIGludCByZWNvcmRfc3RhY2tfYWNjZXNzKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzA5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphcmcsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTMxMC1cdFx0XHQgICAgICAgczY0IGFjY2Vzc19ieXRlcywgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzNTU9c3RhdGljIGludCByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzU2LVx0XHRcdFx0ICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzU3Olx0XHRcdFx0ICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM1OC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjItXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEzNjM6XHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc29sdmVkLCAqcHRyO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjQtXHRpbnQgb2k7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjctXHQgKiBTdGFjayBhcmcgaW5zbnMgdXNlIGRzdF9yZWcvc3JjX3JlZz1CUEZfUkVHX1BBUkFNUygxMSkuIFNpbmNlIGF0W11cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzY4Olx0ICogaXMgZXh0ZW5kZWQgdG8gTUFYX0FUX1RSQUNLX1JFR1MsIGF0WzExXSBob2xkcyB0aGUgYXJnX3RyYWNrIGZvclxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjktXHQgKiBvdXRnb2luZyBzdGFjayBhcmcgc2xvdCAwIOKAlCBub3QgdGhlIHBvaW50ZXIgdXNlZCBmb3IgdGhlIG1lbW9yeVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAwLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDE6XHQvKiBSZXNvbHZlIG9mZnNldHM6IGZvbGQgaW5zbi1cdTAwM2VvZmYgaW50byBhcmdfdHJhY2sgKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAyLVx0aWYgKHB0ci1cdTAwM2VvZmZfY250IFx1MDAzZSAwKSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQwMzpcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA0LVx0XHRyZXNvbHZlZC5vZmZfY250ID0gcHRyLVx1MDAzZW9mZl9jbnQ7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDYtXHRcdFx0aWYgKGFyZ19hZGQocHRyLVx1MDAzZW9mZltvaV0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDc6XHRcdFx0XHRyZXNvbHZlZCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHB0ci1cdTAwM2VmcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQwOC1cdFx0XHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNDIyPXN0YXRpYyBpbnQgcmVjb3JkX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQyNC1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNDI1Olx0XHRcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBhcmdfaWR4LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjYtXHRcdFx0ICAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE0NTk9c3RhdGljIGludCByZWNvcmRfY2FsbF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDYwLVx0XHRcdCAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNDYxOlx0XHRcdCAgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0NjItXHRcdFx0ICAgICAgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNTQxPXN0cnVjdCBzdWJwcm9nX2F0X2luZm8ge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE1NDI6XHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTQzLVx0aW50IGxlbjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTU0Nj1zdGF0aWMgdm9pZCBwcmludF9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0OC1cdFx0XHRcdCAgICAgc3RydWN0IHN1YnByb2dfYXRfaW5mbyAqaW5mbyxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNTQ5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE1NTAte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAwLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyByJWQ9XCYjMzQ7LCByKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjAxOlx0XHRcdFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZpbmZvLVx1MDAzZWF0X2luW2ldW3JdKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAyLVx0XHRcdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYwNi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgc2ElZD1cJiMzNDssIHIpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2MDc6XHRcdFx0XHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmluZm8tXHUwMDNlYXRfaW5baV1bTUFYX0JQRl9SRUcgJiM0Mzsgcl0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDgtXHRcdFx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjE1LVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyBmcCUmIzQzO2Q9XCYjMzQ7LCAtKHIgJiM0MzsgMSkgKiA4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjE2Olx0XHRcdFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXVtyXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNy1cdFx0XHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MjctICogQ29tcHV0ZSBhcmcgdHJhY2tpbmcgZGF0YWZsb3cgZm9yIGEgc2luZ2xlIHN1YnByb2cuXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYyODogKiBSdW5zIGZvcndhcmQgZml4ZWQtcG9pbnQgd2l0aCBhcmdfdHJhY2tfeGZlcigpLCB0aGVuIHJlY29yZHNcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjI5LSAqIG1lbW9yeSBhY2Nlc3NlcyBpbiBhIHNpbmdsZSBsaW5lYXIgcGFzcyBvdmVyIGNvbnZlcmdlZCBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTYzNT1zdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYzNi1cdFx0XHRcdHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYzNzpcdFx0XHRcdHN0cnVjdCBhcmdfdHJhY2sgKmNhbGxlZV9lbnRyeSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjM4LVx0XHRcdFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjQ4LVx0aW50IGxlbiA9IGVuZCAtIHN0YXJ0O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NDk6XHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXSA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MDpcdHN0cnVjdCBhcmdfdHJhY2sgYXRfb3V0W01BWF9BVF9UUkFDS19SRUdTXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjUxOlx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MjpcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MzpcdHN0cnVjdCBhcmdfdHJhY2sgYXRfc3RhY2tfYXJnX2VudHJ5W01BWF9TVEFDS19BUkdfU0xPVFNdO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTQ6XHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjU1Olx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjU2LVx0Ym9vbCBjaGFuZ2VkO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE1LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MTY6XHRcdGFyZ190cmFja194ZmVyKGVudiwgaW5zbiwgaWR4LCBhdF9vdXQsIGF0X3N0YWNrX291dCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE3LVx0XHRcdCAgICAgICBhdF9zdGFja19hcmdfZW50cnksIGluc3RhbmNlLCBjYWxsc2l0ZXMpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MTg6XHRcdGFyZ190cmFja19sb2coZW52LCBpbnNuLCBpZHgsIGF0X2luW2ldLCBhdF9zdGFja19pbltpXSwgYXRfb3V0LCBhdF9zdGFja19vdXQpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3MTktXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3MzEtXHRcdFx0Zm9yIChyID0gMDsgciBcdTAwM2MgTUFYX0FUX1RSQUNLX1JFR1M7IHImIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MzI6XHRcdFx0XHRjaGFuZ2VkIHw9IGFyZ190cmFja19qb2luKGVudiwgaWR4LCB0YXJnZXQsIHIsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczMy1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2YXRfaW5bdGldW3JdLCBhdF9vdXRbcl0pO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM1LVx0XHRcdGZvciAociA9IDA7IHIgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHImIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MzY6XHRcdFx0XHRjaGFuZ2VkIHw9IGFyZ190cmFja19qb2luKGVudiwgaWR4LCB0YXJnZXQsIC1yIC0gMSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM3LVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZhdF9zdGFja19pblt0aV1bcl0sIGF0X3N0YWNrX291dFtyXSk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3NjgtXHRcdFx0bWVtY3B5KGVudi1cdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tpZHhdLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3Njk6XHRcdFx0ICAgICAgIGF0X3N0YWNrX2luW2ldLCBzaXplb2Yoc3RydWN0IGFyZ190cmFjaykgKiBNQVhfQVJHX1NQSUxMX1NMT1RTKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzcwLVx0XHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3ODYtLyogUmV0dXJuIHRydWUgaWYgYW55IG9mIFIxLVI1IG9yIHN0YWNrIGFyZ3MgaXMgZGVyaXZlZCBmcm9tIGEgZnJhbWUgcG9pbnRlci4gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzg3OnN0YXRpYyBib29sIGhhc19mcF9hcmdzKHN0cnVjdCBhcmdfdHJhY2sgKmFyZ3MpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc4OC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4Njg9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxODY5Olx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKmVudHJ5X2FyZ3MsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTg3MC1cdFx0XHQgICBzdHJ1Y3Qgc3VicHJvZ19hdF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTE3LVx0XHRpbnQgaWR4ID0gZW52LVx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcltwXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxOTE4Olx0XHRzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5MTk6XHRcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTkyMC1cdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2aW5zbnNbaWR4XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEFyZyBUcmFja2luZzogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IHRoZXNlIHN0cnVjdCBpbml0aWFsaXplcnMgZm9yIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBlc3NlbnRpYWxseS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgY2xlYW5lciBjb2RlIGFuZCBwb3RlbnRpYWxseSBmZXdlciBlcnJvcnMuCgpJbml0aWFsbHksIEkgc2VlIGBhcmdfdHJhY2tfc3RhdGVgIGJlaW5nIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCBpbnN0YW5jZXMuIFRoZSBjbGV2ZXIgYml0IGhlcmUgaXMgbGV2ZXJhZ2luZyBDJiMzOTtzIHN0cnVjdCBpbml0aWFsaXplciB6ZXJvaW5nOyBpZiB5b3UgcHJvdmlkZSBhIGAuZnJhbWUgPSBmcmFtZWAgaW5pdGlhbGl6ZXIsIGV2ZXJ5dGhpbmcgZWxzZSDigJMgYG9mZl9jbnRgLCBgb2ZmYCwgYG1hc2tgIOKAkyBpcyBpbXBsaWNpdGx5IHplcm9lZC4gTWFrZXMgc2Vuc2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGAuZnJhbWUgPSBhLmZyYW1lYCB3aXRoIHRoZSByZW1haW5kZXIgYmVpbmcgemVyby1pbml0aWFsaXplZC4gTmljZSEKCk5vdywgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBzb21ldGhpbmcgbGlrZSBgZHN0LSZndDtvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTtgLiAgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBpdHNlbGYganVzdCBjYWxscyBgYXJnX3RyYWNrX3N0YXRlYC4gU28sIHRoZSBpbXBhY3QgaXMgaXQmIzM5O3Mgc2V0dGluZyB0aGUgYGZyYW1lYCBhbmQgemVyb2luZyBvdXQgKmV2ZXJ5dGhpbmcqIGluIHRoZSBzdHJ1Y3QsIHdoZXJlYXMgcHJldmlvdXNseSBvbmx5IHRoZSBgb2ZmX2NudGAgd2FzIGJlaW5nIGNsZWFyZWQuCgpNeSBmaXJzdCB0aG91Z2h0OiBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmcgZnVuY3Rpb25hbGx5PyAgYGFyZ190cmFja19lcWAgb25seSBjaGVja3MgdGhlIGBvZmZgIGFycmF5IHVwIHRvIGBvZmZfY250YCwgYW5kIHVzZXMgdGhlIGBtYXNrYCBvbmx5IHdoZW4gYGZyYW1lYCBpcyBgQVJHX0lNUFJFQ0lTRWAuIEFzIGxvbmcgYXMgd2UgZW5zdXJlIGBvZmZfY250YCBpcyBwcm9wZXJseSBzZXQsIGl0IGFsbCBzZWVtcyB0aGUgc2FtZS4gVGhlIHVudXNlZCBiaXRzIG9mIGBvZmZgIGFuZCBgbWFza2AgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYWNjZXNzZWQsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGVhcmxpZXIgYW5hbHlzaXMuCgpJJiMzOTttIHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIGV2ZXJ5IHBsYWNlIGBvZmZgIG9yIGBtYXNrYCBpcyB1c2VkLiAgYGFyZ19tZXJnZV9vZmZzZXRzYCwgYGFyZ19qb2luX2ltcHJlY2lzZWAsIGFsbCB0aG9zZSBmdW5jdGlvbnMgb25seSB1c2UgdXAgdG8gYG9mZl9jbnRgIG9yIHJlYWQgYG1hc2tgIHdoZW4gZnJhbWUgaXMgYEFSR19JTVBSRUNJU0VgLiBPa2F5LCBzbyBmYXIsIHNvIGdvb2QuCgpUaGVyZSYjMzk7cyBubyBgbWVtY21wYCBvciBhbnkgZGlyZWN0IGNvbXBhcmlzb24gb2YgdGhlIGVudGlyZSBzdHJ1Y3QgdGhhdCBJIGNhbiBmaW5kLCBlaXRoZXIuIFNvIGl0IGRvZXMgc2VlbSB0byBiZSBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyBhdCB0aGlzIHBvaW50LgoKVGhlbiBJIGxvb2sgYXQgdGhlIGBhcmdfdHJhY2tfYWx1NjRgIGFuZCBgYXJnX3BhZGRgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGxpbmVzIHRoYXQgemVyb2VkIGBvZmZfY250YCB3aXRoIGxpbmVzIHRoYXQgbm93IHplcm8gb3V0IHRoZSB3aG9sZSBzdHJ1Y3QuICBGdW5jdGlvbmFsbHksIGlkZW50aWNhbC4KCkZpbmFsbHksIEkgZ290IHRvIGByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3NgLiBUaGVyZSYjMzk7cyBhIHN1YnRsZSBjaGFuZ2UgaGVyZSwgdGhlIGByZXNvbHZlZGAgdmFyaWFibGUgaXMgbm93IGNvcnJlY3RseSBpbml0aWFsaXplZCB0byB6ZXJvLiBCZWZvcmUsIGl0IGxvb2tlZCBsaWtlIGByZXNvbHZlZGAgd2FzIGJlaW5nIHVzZWQgdW5pbml0aWFsaXplZCBpZiBgcHRyLSZndDtvZmZfY250YCB3YXMgYDBgLCBhcyB0aGUgY29kZSB3b3VsZCBvbmx5IHNldCBzb21lIGZpZWxkcy4gVGhlIG9sZGVyIGNvZGUgZGlkIG5vdCBpbml0aWFsaXplIHRoZSB3aG9sZSBzdHJ1Y3QgYW5kIHdhcyBwb3RlbnRpYWxseSByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZvciB0aGUgb3RoZXIgdmFsdWVzLiBUaGlzIGxvb2tzIGxpa2UgYSBidWcgZml4ISAgU2luY2UgdGhlIG5ldyBjb2RlIHNldHMgYHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci0mZ3Q7ZnJhbWUpYCwgbm93IHRoZSByZXN0IG9mIHN0cnVjdCBpcyB6ZXJvZWQuCgpPa2F5LCBzbyBpdCYjMzk7cyBzYWZlciwgYnV0IEkgKnRoaW5rKiB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUuICBJZiBgcmVzb2x2ZWQub2ZmX2NudCA9PSAwYCwgdGhlIHBvaW50ZXIgYHB0cmAgZ290IHNldCB0byBwb2ludCB0byBgcmVzb2x2ZWRgLgpJdCAqbG9va3MqIGxpa2UgaWYgYHB0ci0mZ3Q7b2ZmX2NudCA9PSAwYCB0aGUgdmFsdWUgb2YgYHJlc29sdmVkLm1hc2tgIHdhcyBub3QgaW1wb3J0YW50IGJlY2F1c2UgYHB0ci0mZ3Q7ZnJhbWVgIHdhcyBub3QgYEFSR19JTVBSRUNJU0VgLgpUaGUgY2hhbmdlcyBlbnN1cmUgdGhpcyBpcyBuZXZlciB0aGUgY2FzZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBleHBsaWNpdGx5IHplcm8gaW5pdGlhbGl6ZWQuCgpTbywgb3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCByZWZhY3RvcmluZy4gQ2xlYW5lciwgbGVzcyBlcnJvci1wcm9uZSwgYW5kIGxpa2VseSBmaXhlZCBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nLCBidXQgZGVmaW5pdGVseSBhIG5ldCBwb3NpdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcbjE0MDE6XHRcdC8qIFJlc29sdmUgb2Zmc2V0czogZm9sZCBpbnNuLVx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xuMTQwMjpcdFx0aWYgKHB0ci1cdTAwM2VvZmZfY250IFx1MDAzZSAwKSB7XG4xNDAzOlx0XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cdTAwM2VmcmFtZSk7XG4xNDA0Olx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXHUwMDNlb2ZmX2NudDtcbjE0MDU6XHRcdFx0Zm9yIChvaSA9IDA7IG9pIFx1MDAzYyBwdHItXHUwMDNlb2ZmX2NudDsgb2kmIzQzOyYjNDM7KSB7XG4xNDA2Olx0XHRcdFx0aWYgKGFyZ19hZGQocHRyLVx1MDAzZW9mZltvaV0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xuMTQwNzpcdFx0XHRcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXHUwMDNlZnJhbWUpO1xuMTQwODpcdFx0XHRcdFx0YnJlYWs7XG4xNDA5Olx0XHRcdFx0fVxuMTQxMDpcdFx0XHR9XG4xNDExOlx0XHRcdHB0ciA9IFx1MDAyNnJlc29sdmVkO1xuMTQxMjpcdFx0fVxuMTQxMzpcdFxuMTQxNDpcdFx0aWYgKHB0ci1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHB0ci1cdTAwM2VmcmFtZSBcdTAwM2M9IGRlcHRoKVxuMTQxNTpcdFx0XHRyZXR1cm4gcmVjb3JkX3N0YWNrX2FjY2VzcyhpbnN0YW5jZSwgcHRyLCBzeiwgcHRyLVx1MDAzZWZyYW1lLCBpbnNuX2lkeCk7XG4xNDE2Olx0XHRpZiAocHRyLVx1MDAzZWZyYW1lID09IEFSR19JTVBSRUNJU0UpXG4xNDE3Olx0XHRcdHJldHVybiByZWNvcmRfaW1wcmVjaXNlKGluc3RhbmNlLCBwdHItXHUwMDNlbWFzaywgaW5zbl9pZHgpO1xuMTQxODpcdFx0LyogQVJHX05PTkU6IG5vdCBkZXJpdmVkIGZyb20gYW55IGZyYW1lIHBvaW50ZXIsIHNraXAgKi9cbjE0MTk6XHRcdHJldHVybiAwO1xuMTQyMDpcdH1cbjE0MjE6XHRcbjE0MjI6XHRzdGF0aWMgaW50IHJlY29yZF9hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xNDIzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXG4xNDI0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4xNDI1Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCwgaW50IGFyZ19pZHgsXG4xNDI2Olx0XHRcdFx0ICAgICBpbnQgaW5zbl9pZHgpXG4xNDI3Olx0e1xuMTQyODpcdFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXHUwMDNlZGVwdGg7XG4xNDI5Olx0XHRpbnQgZnJhbWUgPSBhdC1cdTAwM2VmcmFtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBUcmFja2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSByZWNvcmRpbmcgbWVtb3J5IGFjY2Vzc2VzLiBUaGUgcG9pbnRlciwgYHB0cmAsIGlzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCB0byBlaXRoZXIgYHJlY29yZF9zdGFja19hY2Nlc3NgIG9yIGByZWNvcmRfaW1wcmVjaXNlYCwgZGVwZW5kaW5nIG9uIHNvbWUgY29uZGl0aW9uLiAgTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcHRyLSZndDtmcmFtZSAmZ3Q7PSAwYCBjaGVjay4gSWYgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSwgd2UmIzM5O3JlIG9mZiB0byBgcmVjb3JkX3N0YWNrX2FjY2Vzc2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoYXQgcGF0aC4gSXQmIzM5O3MgY2FsbGluZyBgcmVjb3JkX3N0YWNrX2FjY2Vzc2Agd2l0aCB0aGUgYGluc3RhbmNlYCwgdGhlIHBvaW50ZXIgYHB0cmAsIHRoZSBzaXplIGBzemAsICBgcHRyLSZndDtmcmFtZWAsIGFuZCBgaW5zbl9pZHhgLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCB0cmFja2luZyBhY2Nlc3NlcyB0byBzdGFjay1hbGxvY2F0ZWQgbWVtb3J5LCBzZWVtcyBsaWtlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIG9mIHRob3NlIHBhcmFtZXRlcnMgcmVwcmVzZW50cyBpbiBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWNjZXNzIGFuZCBzdGFjayBmcmFtZSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZGlnIGludG8gYHJlY29yZF9zdGFja19hY2Nlc3NgIGFuZCBkaXNzZWN0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDg6XHRzdGF0aWMgaW50IHJlY29yZF9zdGFja19hY2Nlc3Moc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuMTMwOTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphcmcsXG4xMzEwOlx0XHRcdFx0ICAgICAgIHM2NCBhY2Nlc3NfYnl0ZXMsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxuMTMxMTpcdHtcbjEzMTI6XHRcdGludCBpLCBlcnI7XG4xMzEzOlx0XG4xMzE0Olx0XHRpZiAoYWNjZXNzX2J5dGVzID09IDApXG4xMzE1Olx0XHRcdHJldHVybiAwO1xuMTMxNjpcdFx0aWYgKGFyZy1cdTAwM2VvZmZfY250ID09IDApIHtcbjEzMTc6XHRcdFx0aWYgKGFjY2Vzc19ieXRlcyBcdTAwM2UgMCB8fCBhY2Nlc3NfYnl0ZXMgPT0gUzY0X01JTilcbjEzMTg6XHRcdFx0XHRyZXR1cm4gbWFya19zdGFja19yZWFkKGluc3RhbmNlLCBmcmFtZSwgaW5zbl9pZHgsIFNQSVNfQUxMKTtcbjEzMTk6XHRcdFx0cmV0dXJuIDA7XG4xMzIwOlx0XHR9XG4xMzIxOlx0XHRpZiAoYWNjZXNzX2J5dGVzICE9IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGFjY2Vzc19ieXRlcyBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW9mZl9jbnQgIT0gMSlcbjEzMjI6XHRcdFx0LyogbXVsdGktb2Zmc2V0IHdyaXRlIGNhbm5vdCBzZXQgc3RhY2tfZGVmICovXG4xMzIzOlx0XHRcdHJldHVybiAwO1xuMTMyNDpcdFxuMTMyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJnLVx1MDAzZW9mZl9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4xMzI2Olx0XHRcdGVyciA9IHJlY29yZF9zdGFja19hY2Nlc3Nfb2ZmKGluc3RhbmNlLCBhcmctXHUwMDNlb2ZmW2ldLCBhY2Nlc3NfYnl0ZXMsIGZyYW1lLCBpbnNuX2lkeCk7XG4xMzI3Olx0XHRcdGlmIChlcnIpXG4xMzI4Olx0XHRcdFx0cmV0dXJuIGVycjtcbjEzMjk6XHRcdH1cbjEzMzA6XHRcdHJldHVybiAwO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHQvKlxuMTMzNDpcdCAqIFdoZW4gYSBwb2ludGVyIGlzIEFSR19JTVBSRUNJU0UsIGNvbnNlcnZhdGl2ZWx5IG1hcmsgZXZlcnkgZnJhbWUgaW5cbjEzMzU6XHQgKiB0aGUgYml0bWFzayBhcyBmdWxseSB1c2VkLlxuMTMzNjpcdCAqL1xuMTMzNzpcdHN0YXRpYyBpbnQgcmVjb3JkX2ltcHJlY2lzZShzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBtYXNrLCB1MzIgaW5zbl9pZHgpXG4xMzM4Olx0e1xuMTMzOTpcdFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXHUwMDNlZGVwdGg7XG4xMzQwOlx0XHRpbnQgZiwgZXJyO1xuMTM0MTpcdFxuMTM0MjpcdFx0Zm9yIChmID0gMDsgbWFzazsgZiYjNDM7JiM0MzssIG1hc2sgXHUwMDNlXHUwMDNlPSAxKSB7XG4xMzQzOlx0XHRcdGlmICghKG1hc2sgXHUwMDI2IDEpKVxuMTM0NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTM0NTpcdFx0XHRpZiAoZiBcdTAwM2M9IGRlcHRoKSB7XG4xMzQ2Olx0XHRcdFx0ZXJyID0gbWFya19zdGFja19yZWFkKGluc3RhbmNlLCBmLCBpbnNuX2lkeCwgU1BJU19BTEwpO1xuMTM0NzpcdFx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjM0CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDE0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyB3aXRoIE5vIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIHRoYXQgdGhlIHBhdGNoIHdhcyBhIHNpbXBsZSByZWZhY3RvcmluZywgYW5kIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIHRoYXQmIzM5O3Mgc3RpbGwgdGhlIGNhc2UuIFNwZWNpZmljYWxseSwgaWYgYGFyZy0mZ3Q7b2ZmX2NudCA9PSAwYCwgYHJlY29yZF9zdGFja19hY2Nlc3NgIGRvZXMgKm5vdCogcmVhZCBmcm9tIHRoZSBgYXJnLSZndDtvZmZgIGFycmF5LiBUaGF0IHVuaW5pdGlhbGl6ZWQgYG9mZmAgYXJyYXkgd2l0aGluIHRoZSBgcmVzb2x2ZWRgIHN0cnVjdHVyZSB3YXMgbmV2ZXIgYWNjZXNzZWQsIGJhc2VkIG9uIHRoZSBjb250cm9sIGZsb3cuCgpUaGUgZGlmZnMgcmV2ZWFsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVwbGFjaW5nIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gd2l0aCBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19pbXByZWNpc2UoKWAsIGBhcmdfdHJhY2tfc3RhdGUoKWAsIGBhcmdfdHJhY2tfbm9uZSgpYCwgYW5kIGBhcmdfdHJhY2tfdW52aXNpdGVkKClgLiBGb3IgZXhhbXBsZSwgYSBjb21tb24gc25pcHBldCBsaWtlIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07YCBpcyByZXBsYWNlZCB3aXRoIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO2AuIEkmIzM5O3ZlIGNoZWNrZWQgdGhlc2UgcmVwbGFjZW1lbnRzIGFuZCB0aGV5IGFyZSBpZGVudGljYWwuCgpUaGUgbW9zdCBjcml0aWNhbCB0aGluZyB0byBjb25maXJtIGlzIHRoYXQgdGhlcmUgYXJlICpubyogZnVuY3Rpb25hbCBjaGFuZ2VzIGhpZGRlbiB3aXRoaW4gdGhpcyB0cmFuc2Zvcm1hdGlvbi4gVGhlIGxvZ2ljIG11c3QgYmUgaWRlbnRpY2FsLiBUbyBlbnN1cmUgdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdWJ0bGUgZGlmZmVyZW5jZXMuIFRoZSBgc3RydWN0IGFyZ190cmFja2Agc3RydWN0IHVzZXMgYSB1bmlvbiwgd2l0aCBhIGJ5dGUgb2Zmc2V0IGFycmF5IG9yIGEgYml0bWFzaywgYWxvbmcgd2l0aCBhIGBmcmFtZWAgYW5kIGBvZmZfY250YC4KCldoZW4gdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVkIHRoZSB1bnVzZWQgbWVtYmVycy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSlgLCBhbHNvIHJlc3VsdCBpbiBzdHJ1Y3QgbWVtYmVycyBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBTbywgYXQgdGhhdCBsZXZlbCwgd2UgYXJlIGdvb2QuCgpUaGUgb25seSByZWFsIGRpZmZlcmVuY2UgY29tZXMgd2hlbiBsb29raW5nIGF0IHRoZSBjb2RlIHJlcGxhY2VkIGJ5IGAqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoLi4uKWAuIEhlcmUsIHRoZSBvbGQgY29kZSB1c2VkIGBkc3QtJmd0O29mZl9jbnQgPSAwO2AsIGxlYXZpbmcgYGRzdC0mZ3Q7b2ZmYCBhbmQgYGRzdC0mZ3Q7bWFza2AgdW50b3VjaGVkLCB3aGlsZSB0aGUgbmV3IGNvZGUgemVyb3Mgb3V0IGBkc3QtJmd0O29mZmAgYW5kIGBkc3QtJmd0O21hc2tgLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSBhY2Nlc3MgcGF0dGVybnMuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSwgYW5kIGBvZmZgIGlzIG9ubHkgYWNjZXNzZWQgd2hlbiBgb2ZmX2NudGAgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBgbWFza2AgaXMgb25seSB1c2VkIHdoZW4gYGZyYW1lID09IEFSR19JTVBSRUNJU0VgLiBJbiB0aGUgY29udGV4dCB3aGVyZSBgZHN0LSZndDtvZmZfY250ID0gMGAgd2FzIHVzZWQsIHRoZSByZWxldmFudCBgZHN0LSZndDtmcmFtZWAgd2FzIG5vdCBgQVJHX0lNUFJFQ0lTRWAgKGl0IHdhcyByZWxhdGVkIHRvIGltcHJlY2lzZSBvZmZzZXRzKS4gU28sIHplcm9pbmcgb3V0IGBvZmZgIGFuZCBgbWFza2AgaW4gdGhlIG5ldyBjb2RlIGhhcyBubyBmdW5jdGlvbmFsIGVmZmVjdCBiZWNhdXNlIHRoZXkgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2VkLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljIGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIHByb2dyYW0mIzM5O3MgZXhlY3V0aW9uIG9yIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBidWdzLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHRvIGltcHJvdmUgY29kZSByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIHdpbGwgZmxhZyB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI4OjU5LjMwMTI4Nzc5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzM4NzMyNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI4OjU5LjMwMTI5NjI1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MjgzMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGEzMWZjNjgwOWFiZjM0ZGZjZmE3YjIxNjI0ZWM1N2VjNTI1ZGYxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5pbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuQEAgLTYwNyw2ICs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xcbiBcXHRBUkdfSU1QUkVDSVNFXFx0PSAtMyxcXHQvKiBsb3N0IGlkZW50aXR5OyAubWFzayBpcyBhcmcgYml0bWFzayAqL1xcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja191bnZpc2l0ZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSlcXG4re1xcbitcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG1hc2ssIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcXG4rfVxcbitcXG4gLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi9cXG4gI2RlZmluZSBNQVhfQVJHX1NQSUxMX1NMT1RTIDY0XFxuIFxcbkBAIC02OTMsOCArNzE4LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3NpbmdsZShzOCBhcmcsIHMxNiBvZmYpXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbitcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcXG4gXFx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XFxuIFxcbiBcXHR3aGlsZSAoaSBcXHUwMDNjIGEub2ZmX2NudCBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgYi5vZmZfY250KSB7XFxuQEAgLTc0Nyw3ICs3NzIsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfam9pbl9pbXByZWNpc2Uoc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrXFxuIFxcdGVsc2UgaWYgKGIuZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcXG4gXFx0XFx0bSB8PSBiLm1hc2s7XFxuIFxcbi1cXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcXG4rXFx0cmV0dXJuIGFyZ190cmFja19pbXByZWNpc2UobSk7XFxuIH1cXG4gXFxuIC8qIEpvaW4gdHdvIGFyZ190cmFjayB2YWx1ZXMgYXQgbWVyZ2UgcG9pbnRzICovXFxuQEAgLTc2MCw3ICs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxcbiBcXHRpZiAoYS5mcmFtZSA9PSBiLmZyYW1lIFxcdTAwMjZcXHUwMDI2IGEuZnJhbWUgXFx1MDAzZT0gMCkge1xcbiBcXHRcXHQvKiBCb3RoIG9mZnNldC1pbXByZWNpc2U6IHN0YXkgaW1wcmVjaXNlICovXFxuIFxcdFxcdGlmIChhLm9mZl9jbnQgPT0gMCB8fCBiLm9mZl9jbnQgPT0gMClcXG4tXFx0XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbitcXHRcXHRcXHRyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XFxuIFxcdFxcdC8qIE1lcmdlIG9mZnNldCBzZXRzOyBmYWxscyBiYWNrIHRvIG9mZl9jbnQ9MCBpZiBcXHUwMDNlNCAqL1xcbiBcXHRcXHRyZXR1cm4gYXJnX21lcmdlX29mZnNldHMoYSwgYik7XFxuIFxcdH1cXG5AQCAtODM3LDcgKzg2Miw3IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19hbHU2NChzdHJ1Y3QgYXJnX3RyYWNrICpkc3QsIGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKnNyYylcXG4gXFx0XFx0ICogclggKz0gclkgd2hlcmUgclkgaXMgbm90IGFyZyBkZXJpdmVkXFxuIFxcdFxcdCAqIHJYICs9IHJYXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRkc3QtXFx1MDAzZW9mZl9jbnQgPSAwO1xcbitcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXHRpZiAoc3JjLVxcdTAwM2VmcmFtZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNlZnJhbWUgPT0gQVJHX05PTkUpIHtcXG5AQCAtODQ1LDggKzg3MCw3IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19hbHU2NChzdHJ1Y3QgYXJnX3RyYWNrICpkc3QsIGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKnNyYylcXG4gXFx0XFx0ICogclggKz0gclkgd2hlcmUgclggaXMgbm90IGFyZyBkZXJpdmVkXFxuIFxcdFxcdCAqIHJZIGlkZW50aXR5IGxlYWtzIGludG8gclhcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGRzdC1cXHUwMDNlb2ZmX2NudCA9IDA7XFxuLVxcdFxcdGRzdC1cXHUwMDNlZnJhbWUgPSBzcmMtXFx1MDAzZWZyYW1lO1xcbitcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtODc1LDcgKzg5OSw3IEBAIHN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXFxuIFxcdFxcdHMxNiBuZXdfb2ZmO1xcbiBcXG4gXFx0XFx0aWYgKGFyZ19hZGQoYXQtXFx1MDAzZW9mZltpXSwgZGVsdGEsIFxcdTAwMjZuZXdfb2ZmKSkge1xcbi1cXHRcXHRcXHRhdC1cXHUwMDNlb2ZmX2NudCA9IDA7XFxuK1xcdFxcdFxcdCphdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGF0LVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRhdC1cXHUwMDNlb2ZmW2ldID0gbmV3X29mZjtcXG5AQCAtOTAxLDExICs5MjUsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBmaWxsX2Zyb21fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxuIFxcdFxcdFxcdFxcdFxcdGludCBkZXB0aClcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHtcXG4tXFx0XFx0Lm1hc2sgPSAoMXUgXFx1MDAzY1xcdTAwM2MgKGRlcHRoICsgMSkpIC0gMSxcXG4tXFx0XFx0LmZyYW1lID0gQVJHX0lNUFJFQ0lTRVxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSBcXHUwMDNjXFx1MDAzYyAoZGVwdGggKyAxKSkgLSAxKTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpO1xcbiBcXHRpbnQgY250LCBpO1xcbiBcXG4gXFx0aWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7XFxuQEAgLTk0MCw3ICs5NjEsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcXG4gXFx0XFx0XFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdHN0cnVjdCBhcmdfdHJhY2sgbmV3X3ZhbCA9IHN6ID09IDggPyAqdmFsIDogbm9uZTtcXG4gXFx0aW50IGNudCwgaTtcXG4gXFxuQEAgLTk3OSw3ICsxMDAwLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBjbGVhcl9vdmVybGFwcGluZ19zdGFja19zbG90cyhzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFjaywgczE2IG9mZiwgdTMyIHN6LCBpbnQgY250KVxcbiB7XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG4gXFxuIFxcdGlmIChjbnQgPT0gMCkge1xcbiBcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkrKylcXG5AQCAtMTEwMyw3ICsxMTI0LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHR1OCBjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZWRzdF9yZWddO1xcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdGludCByLCBzbG90O1xcbiBcXG4gXFx0LyogSGFuZGxlIHN0YWNrIGFyZyBzdG9yZXMgYW5kIGxvYWRzLiAqL1xcbkBAIC0xMTI4LDcgKzExNDksNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdGFyZ19wYWRkKGRzdCwgLShzNjQpaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cXG4tXFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2VvZmZfY250ID0gMDtcXG4rXFx0XFx0XFx0XFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC1cXHUwMDNlZnJhbWUpO1xcbiBcXHRcXHR9IC8qIGVsc2UgaWYgZHN0LVxcdTAwM2VmcmFtZSBpcyBpbXByZWNpc2UgaXQgc3RheXMgc28gKi9cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbiBcXHRcXHRpZiAoY29kZSA9PSBCUEZfTU9WKSB7XFxuQEAgLTEzNzksMTEgKzE0MDAsMTEgQEAgc3RhdGljIGludCByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdC8qIFJlc29sdmUgb2Zmc2V0czogZm9sZCBpbnNuLVxcdTAwM2VvZmYgaW50byBhcmdfdHJhY2sgKi9cXG4gXFx0aWYgKHB0ci1cXHUwMDNlb2ZmX2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXFx1MDAzZW9mZl9jbnQ7XFxuLVxcdFxcdHJlc29sdmVkLmZyYW1lID0gcHRyLVxcdTAwM2VmcmFtZTtcXG4gXFx0XFx0Zm9yIChvaSA9IDA7IG9pIFxcdTAwM2MgcHRyLVxcdTAwM2VvZmZfY250OyBvaSsrKSB7XFxuIFxcdFxcdFxcdGlmIChhcmdfYWRkKHB0ci1cXHUwMDNlb2ZmW29pXSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcXG4tXFx0XFx0XFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IDA7XFxuK1xcdFxcdFxcdFxcdHJlc29sdmVkID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UocHRyLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTYzMCw4ICsxNjUxLDggQEAgc3RhdGljIGludCBjb21wdXRlX3N1YnByb2dfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDtcXG4gXFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGFyZ190cmFjayBhdF9zdGFja19hcmdfZW50cnlbTUFYX1NUQUNLX0FSR19TTE9UU107XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdGJvb2wgY2hhbmdlZDtcXG4gXFx0aW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07XFxuIFxcbkBAIC0xODk1LDcgKzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRmb3IgKGludCBwID0gcG9fc3RhcnQ7IHAgXFx1MDAzYyBwb19lbmQ7IHArKykge1xcbiBcXHRcXHRpbnQgaWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XFxuIFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgY2FsbGVlX2FyZ3NbTUFYX0FUX1RSQUNLX1JFR1NdID0ge307XFxuLVxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0XFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG4gXFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXFx1MDAyNmluc25zW2lkeF07XFxuIFxcdFxcdHN0cnVjdCBmdW5jX2luc3RhbmNlICpjYWxsZWVfaW5zdGFuY2U7XFxuIFxcdFxcdGludCBjYWxsZWUsIHRhcmdldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDAuMDQ2NTEyMTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjM1OTM0OTg5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGEzMWZjNjgwOWFiZjM0ZGZjZmE3YjIxNjI0ZWM1N2VjNTI1ZGYxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEzOjI4OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbisrKyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTYwNyw2ICs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfc3RhdGUoczggZnJhbWUpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZClcbit7XG4rXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxuK3tcbitcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX1VOVklTSVRFRCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHM4IGZyYW1lKVxuK3tcbitcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKVxuK3tcbitcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xuK31cbitcbiAvKiBUcmFjayBjYWxsZWUgc3RhY2sgc2xvdHMgZnAtOCB0aHJvdWdoIGZwLTUxMiAoNjQgc2xvdHMgb2YgOCBieXRlcyBlYWNoKSAqL1xuICNkZWZpbmUgTUFYX0FSR19TUElMTF9TTE9UUyA2NFxuIFxuQEAgLTY5Myw4ICs3MTgsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfc2luZ2xlKHM4IGFyZywgczE2IG9mZilcbiAgKi9cbiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbiB7XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuK1x0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbiBcdGludCBpID0gMCwgaiA9IDAsIGsgPSAwO1xuIFxuIFx0d2hpbGUgKGkgXHUwMDNjIGEub2ZmX2NudCBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgYi5vZmZfY250KSB7XG5AQCAtNzQ3LDcgKzc3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2tcbiBcdGVsc2UgaWYgKGIuZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcbiBcdFx0bSB8PSBiLm1hc2s7XG4gXG4tXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcbitcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuIH1cbiBcbiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xuQEAgLTc2MCw3ICs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxuIFx0aWYgKGEuZnJhbWUgPT0gYi5mcmFtZSBcdTAwMjZcdTAwMjYgYS5mcmFtZSBcdTAwM2U9IDApIHtcbiBcdFx0LyogQm90aCBvZmZzZXQtaW1wcmVjaXNlOiBzdGF5IGltcHJlY2lzZSAqL1xuIFx0XHRpZiAoYS5vZmZfY250ID09IDAgfHwgYi5vZmZfY250ID09IDApXG4tXHRcdFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gYS5mcmFtZSB9O1xuK1x0XHRcdHJldHVybiBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbiBcdFx0LyogTWVyZ2Ugb2Zmc2V0IHNldHM7IGZhbGxzIGJhY2sgdG8gb2ZmX2NudD0wIGlmIFx1MDAzZTQgKi9cbiBcdFx0cmV0dXJuIGFyZ19tZXJnZV9vZmZzZXRzKGEsIGIpO1xuIFx0fVxuQEAgLTgzNyw3ICs4NjIsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICs9IHJZIHdoZXJlIHJZIGlzIG5vdCBhcmcgZGVyaXZlZFxuIFx0XHQgKiByWCArPSByWFxuIFx0XHQgKi9cbi1cdFx0ZHN0LVx1MDAzZW9mZl9jbnQgPSAwO1xuK1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aWYgKHNyYy1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VmcmFtZSA9PSBBUkdfTk9ORSkge1xuQEAgLTg0NSw4ICs4NzAsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICs9IHJZIHdoZXJlIHJYIGlzIG5vdCBhcmcgZGVyaXZlZFxuIFx0XHQgKiByWSBpZGVudGl0eSBsZWFrcyBpbnRvIHJYXG4gXHRcdCAqL1xuLVx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4tXHRcdGRzdC1cdTAwM2VmcmFtZSA9IHNyYy1cdTAwM2VmcmFtZTtcbitcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHNyYy1cdTAwM2VmcmFtZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC04NzUsNyArODk5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3BhZGQoc3RydWN0IGFyZ190cmFjayAqYXQsIHM2NCBkZWx0YSlcbiBcdFx0czE2IG5ld19vZmY7XG4gXG4gXHRcdGlmIChhcmdfYWRkKGF0LVx1MDAzZW9mZltpXSwgZGVsdGEsIFx1MDAyNm5ld19vZmYpKSB7XG4tXHRcdFx0YXQtXHUwMDNlb2ZmX2NudCA9IDA7XG4rXHRcdFx0KmF0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYXQtXHUwMDNlZnJhbWUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0XHRhdC1cdTAwM2VvZmZbaV0gPSBuZXdfb2ZmO1xuQEAgLTkwMSwxMSArOTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdFx0XHRpbnQgZGVwdGgpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7XG4tXHRcdC5tYXNrID0gKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggKyAxKSkgLSAxLFxuLVx0XHQuZnJhbWUgPSBBUkdfSU1QUkVDSVNFXG4tXHR9O1xuLVx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19pbXByZWNpc2UoKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggKyAxKSkgLSAxKTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbiBcdGludCBjbnQsIGk7XG4gXG4gXHRpZiAocmVnID09IEJQRl9SRUdfRlApIHtcbkBAIC05NDAsNyArOTYxLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXG4gXHRcdFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKnZhbCwgdTMyIHN6KVxuIHtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XG4gXHRpbnQgY250LCBpO1xuIFxuQEAgLTk3OSw3ICsxMDAwLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXG4gICovXG4gc3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcbiB7XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFxuIFx0aWYgKGNudCA9PSAwKSB7XG4gXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfQVJHX1NQSUxMX1NMT1RTOyBpKyspXG5AQCAtMTEwMyw3ICsxMTI0LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0dTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuIFx0c3RydWN0IGFyZ190cmFjayAqZHN0ID0gXHUwMDI2YXRfb3V0W2luc24tXHUwMDNlZHN0X3JlZ107XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRpbnQgciwgc2xvdDtcbiBcbiBcdC8qIEhhbmRsZSBzdGFjayBhcmcgc3RvcmVzIGFuZCBsb2Fkcy4gKi9cbkBAIC0xMTI4LDcgKzExNDksNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0XHRhcmdfcGFkZChkc3QsIC0oczY0KWluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cbi1cdFx0XHRcdGRzdC1cdTAwM2VvZmZfY250ID0gMDtcbitcdFx0XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO1xuIFx0XHR9IC8qIGVsc2UgaWYgZHN0LVx1MDAzZWZyYW1lIGlzIGltcHJlY2lzZSBpdCBzdGF5cyBzbyAqL1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXHUwMDI2XHUwMDI2IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRpZiAoY29kZSA9PSBCUEZfTU9WKSB7XG5AQCAtMTM3OSwxMSArMTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXHUwMDNlb2ZmIGludG8gYXJnX3RyYWNrICovXG4gXHRpZiAocHRyLVx1MDAzZW9mZl9jbnQgXHUwMDNlIDApIHtcbitcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKTtcbiBcdFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cdTAwM2VvZmZfY250O1xuLVx0XHRyZXNvbHZlZC5mcmFtZSA9IHB0ci1cdTAwM2VmcmFtZTtcbiBcdFx0Zm9yIChvaSA9IDA7IG9pIFx1MDAzYyBwdHItXHUwMDNlb2ZmX2NudDsgb2krKykge1xuIFx0XHRcdGlmIChhcmdfYWRkKHB0ci1cdTAwM2VvZmZbb2ldLCBpbnNuLVx1MDAzZW9mZiwgXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcbi1cdFx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSAwO1xuK1x0XHRcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXHUwMDNlZnJhbWUpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMTYzMCw4ICsxNjUxLDggQEAgc3RhdGljIGludCBjb21wdXRlX3N1YnByb2dfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQgPSBOVUxMO1xuIFx0c3RydWN0IGFyZ190cmFjayBhdF9zdGFja19hcmdfZW50cnlbTUFYX1NUQUNLX0FSR19TTE9UU107XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IHsgLmZyYW1lID0gQVJHX1VOVklTSVRFRCB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuK1x0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFx0aW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07XG4gXG5AQCAtMTg5NSw3ICsxOTE2LDcgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGZvciAoaW50IHAgPSBwb19zdGFydDsgcCBcdTAwM2MgcG9fZW5kOyBwKyspIHtcbiBcdFx0aW50IGlkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XG4gXHRcdHN0cnVjdCBhcmdfdHJhY2sgY2FsbGVlX2FyZ3NbTUFYX0FUX1RSQUNLX1JFR1NdID0ge307XG4tXHRcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbiBcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2aW5zbnNbaWR4XTtcbiBcdFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmNhbGxlZV9pbnN0YW5jZTtcbiBcdFx0aW50IGNhbGxlZSwgdGFyZ2V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDAuMDQ2NTEzODIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4MzUwNzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrZXJuZWwvYnBmL2xpdmVuZXNzLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIG1vc3RseSBjb3NtZXRpYy4gVGhleSdyZSBpbnRyb2R1Y2luZyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19zdGF0ZWAsIGBhcmdfdHJhY2tfbm9uZWAsIGFuZCB0aGUgb3RoZXJzIHRvIGluaXRpYWxpemUgYHN0cnVjdCBhcmdfdHJhY2tgIHZhcmlhYmxlcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHVzaW5nIHN0cnVjdCBpbml0aWFsaXplcnMuIFNlZW1zIGxpa2UgYSBjb2RlIHN0eWxlIHByZWZlcmVuY2UuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMganVzdCB5ZXQuIEdvdHRhIGRpZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKmNoYW5nZWQqLiBBaCwgbG9va3MgbGlrZSB0aGV5J3JlIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGluaXRpYWxpemF0aW9ucywgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbmBgYFxuXG53aXRoOlxuXG5gYGBjXG5zdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTtcbmBgYFxuXG5XaGVyZSBgYXJnX3RyYWNrX3N0YXRlYCBpcyBqdXN0IGEgc2ltcGxlIHdyYXBwZXIuIFB1cmVseSBjb3NtZXRpYywgbm8gY2hhbmdlIGluIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHNvIGZhci5cblxuV2FpdCBhIHNlY29uZCwgaG9sZCBvbi4uLiBMZXQncyBzY3J1dGluaXplIGl0LiBBbHJpZ2h0LCBjaGVja2luZyBzb21lIG1vcmUgY2hhbmdlcy4uLlxuXG5gYGBjXG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuK1x0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbmBgYFxuXG5gYGBjXG4tXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcbitcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuYGBgXG5cbmBgYGNcbi1cdFx0XHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAuZnJhbWUgPSBhLmZyYW1lIH07XG4rXHRcdFx0cmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xuYGBgXG5cbmBgYGNcbi1cdFx0ZHN0LVx1MDAzZW9mZl9jbnQgPSAwO1xuK1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbmBgYFxuXG5Pa2F5LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBkaWZmZXJlbmNlLiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIHJlcGxhY2VtZW50IG9mIGBkc3QtXHUwMDNlb2ZmX2NudCA9IDA7YCB3aXRoIGAqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtgLiBUaGUgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBmdW5jdGlvbiByZXR1cm5zIGEgYHN0cnVjdCBhcmdfdHJhY2tgIGluaXRpYWxpemVkIHdpdGgganVzdCB0aGUgYGZyYW1lYCBtZW1iZXIuIElmIGBkc3RgIGhhZCBvdGhlciBmaWVsZHMgc2V0LCBsaWtlIGBtYXNrYCBvciBgb2ZmYCwgdGhlIGFzc2lnbm1lbnQgYCpkc3QgPSAuLi5gIHdpbGwgKnplcm8gb3V0KiB0aG9zZSBmaWVsZHMuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbCBjb2RlLCBgZHN0LVx1MDAzZW9mZl9jbnQgPSAwO2AsIG9ubHkgYWZmZWN0ZWQgYG9mZl9jbnRgLlxuXG5UaGlzIGlzIGEgcG90ZW50aWFsIHNpZGUtZWZmZWN0IHRoYXQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGV4YW1pbmVkIGJlY2F1c2UgdGhpcyAqZG9lcyogY2hhbmdlIHRoZSBsb2dpYyBvZiB0aGUgY29kZS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBub3QgaW50cm9kdWNpbmcgYSBzdWJ0bGUgYnVnIG9yIGNoYW5naW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc3RydWN0IGFyZ190cmFja2AgYWN0dWFsbHkgKmNvbnRhaW5zKiB0byBhc3Nlc3MgdGhlIGltcGFjdCBoZXJlLiBMZXQgbWUgcHVsbCB1cCBpdHMgZGVmaW5pdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDkuMjMwMDIzMzY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzI1ODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXJnX3RyYWNrIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9NTQ2PXN0YXRpYyBpbnQgcHJpbnRfaW5zdGFuY2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1OTU6c3RydWN0IGFyZ190cmFjayB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5Ni1cXHR1bmlvbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjA5LjM2NzI4NzA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTAyOTc2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bGwgc3RydWN0IGRlZmluaXRpb24gdG8gbWFrZSBhbnkgbWVhbmluZ2Z1bCBqdWRnbWVudC4gSSBjYW4ndCBqdXN0IG9wZXJhdGUgaW4gdGhlIGFic3RyYWN0OyBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIExldCdzIGdldCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29tcG9uZW50cywgdGhlaXIgdHlwZXMsIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gZWFjaCBvdGhlciDigJMgZXZlcnl0aGluZy4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdGhlIGZ1bGwgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MTIuODc3NTg2MzA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTQ6XFx0XFxuIDU5NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHtcXG4gNTk2OlxcdFxcdHVuaW9uIHtcXG4gNTk3OlxcdFxcdFxcdHMxNiBvZmZbTUFYX0FSR19PRkZTRVRTXTsgLyogYnl0ZSBvZmZzZXRzOyBvZmZfY250IHNheXMgaG93IG1hbnkgKi9cXG4gNTk4OlxcdFxcdFxcdHUxNiBtYXNrO1xcdC8qIGFyZyBiaXRtYXNrIHdoZW4gYXJnID09IEFSR19JTVBSRUNJU0UgKi9cXG4gNTk5OlxcdFxcdH07XFxuIDYwMDpcXHRcXHRzOCBmcmFtZTtcXHQvKiBhYnNvbHV0ZSBmcmFtZSBpbmRleCwgb3IgZW51bSBhcmdfdHJhY2tfc3RhdGUgKi9cXG4gNjAxOlxcdFxcdHM4IG9mZl9jbnQ7XFx0LyogMCA9IG9mZnNldC1pbXByZWNpc2UsIDEtNCA9ICMgb2YgcHJlY2lzZSBvZmZzZXRzICovXFxuIDYwMjpcXHR9O1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRlbnVtIGFyZ190cmFja19zdGF0ZSB7XFxuIDYwNTpcXHRcXHRBUkdfTk9ORVxcdD0gLTEsXFx0Lyogbm90IGRlcml2ZWQgZnJvbSBhbnkgYXJndW1lbnQgKi9cXG4gNjA2OlxcdFxcdEFSR19VTlZJU0lURURcXHQ9IC0yLFxcdC8qIG5vdCB5ZXQgcmVhY2hlZCBieSBkYXRhZmxvdyAqL1xcbiA2MDc6XFx0XFx0QVJHX0lNUFJFQ0lTRVxcdD0gLTMsXFx0LyogbG9zdCBpZGVudGl0eTsgLm1hc2sgaXMgYXJnIGJpdG1hc2sgKi9cXG4gNjA4OlxcdH07XFxuIDYwOTpcXHRcXG4gNjEwOlxcdHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxuIDYxMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjEyLjg3NzY5OTA4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTEzNTQ1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBPZmZzZXQgVHJhY2tpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlOiB3ZSB3ZW50IGZyb20gZXhwbGljaXRseSBzZXR0aW5nIGBkc3QtXHUwMDNlb2ZmX2NudCA9IDA7YCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0aW5nIHRoZSBgYXJnX3RyYWNrYCBzdHJ1Y3Qgd2l0aCB0aGUgcmVzdWx0IG9mIGBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogXCJIYW5nIG9uLCBkb2Vzbid0IHRoYXQgemVybyBvdXQgdGhlIGBvZmZgIGFycmF5IHdoZW4gd2UgcHJldmlvdXNseSBkaWRuJ3Q/XCIgXG5cbkJ1dCB0aGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgb2ZmX2NudGAgaXMgdGhlICpjb3VudCogb2YgdmFsaWQgb2Zmc2V0cy4gU28sIGlmIGBvZmZfY250YCBpcyB6ZXJvLCB3ZSdyZSBzdXBwb3NlZCB0byBiZSBpZ25vcmluZyB0aGUgY29udGVudHMgb2YgdGhlIGBvZmZgIGFycmF5IGFueXdheS4gVGhlcmVmb3JlLCBjaGFuZ2luZyBpdCBzaG91bGRuJ3QgYWZmZWN0IHRoZSBpbnRlbmRlZCBiZWhhdmlvci4uLiB0aGVvcmV0aWNhbGx5LlxuXG5UaGUgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIGNoaW1lLCB0aG91Z2guIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnLCBlaXRoZXIgd2hlcmUgdGhlIGNvZGUgaXMgYWNjaWRlbnRhbGx5IGFjY2Vzc2luZyB0aGUgYG9mZmAgYXJyYXkgd2hlbiBgb2ZmX2NudGAgaXMgemVybyAoYSBkYXRhIGludGVncml0eSBpc3N1ZSksIG9yIHdoZXJlIHdlJ3JlIHJlbHlpbmcgb24gYSBtZW1vcnkgY29tcGFyaXNvbiAoYG1lbWNtcGAgb3Igc2ltaWxhcikgb24gdGhlIGVudGlyZSBgc3RydWN0IGFyZ190cmFja2AsIHdoaWNoIGlzIGV4dHJlbWVseSBkYW5nZXJvdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgc2Vjb25kIGNhc2UgaXMgaGFwcGVuaW5nLCByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOToxNy42NjkwNTU5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDk5NDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jbXAuKmFyZ190cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjE3Ljc3MjU2MTE0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjIwODE2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFNjYW46IEVxdWFsaXR5IENoZWNrcyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgb2YgZGlyZWN0IGVxdWFsaXR5IGNoZWNrcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSB0ZWxsdGFsZSBzaWduczogYD09YCwgcG9zc2libHkgYD09PWAgaWYgd2UncmUgZGVhbGluZyB3aXRoIEphdmFTY3JpcHQsIGFuZCBtYXliZSBldmVuIGEgcXVpY2sgZ2xhbmNlIGZvciBjb21wYXJpc29ucyBsaWtlIGAhPWAgb3IgYCE9PWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSBpZGVudGlmeSB0aG9zZSBzcG90cyBiZWNhdXNlIHRoZXkncmUgb2Z0ZW4gdGhlIHNvdXJjZSBvZiBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgbG9naWMgZXJyb3JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggb2JqZWN0IHJlZmVyZW5jZXMsIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIG9yIHR5cGUgY29lcmNpb24uIEEgcXVpY2ssIHRhcmdldGVkIHJlZ2V4IG9yIGEgc2ltaWxhciBzZWFyY2ggd2l0aGluIHRoZSBjb2RlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjIxLjA5NDY0NTQ1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzczMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZ190cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9saXZlbmVzcy5jPTU0Nj1zdGF0aWMgaW50IHByaW50X2luc3RhbmNlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU4My0gKlxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1ODQ6ICogQXQgQ0ZHIG1lcmdlIHBvaW50cywgYXJnX3RyYWNrX2pvaW4oKSBtb3ZlcyBkb3duIHRoZSBsYXR0aWNlOlxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01ODUtICogICAtIHNhbWUgZnJhbWUgKyBzYW1lIG9mZnNldCAgLVxcdTAwM2UgcHJlY2lzZVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5NC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTk1OnN0cnVjdCBhcmdfdHJhY2sge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01OTYtXFx0dW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5OS1cXHR9O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MDA6XFx0czggZnJhbWU7XFx0LyogYWJzb2x1dGUgZnJhbWUgaW5kZXgsIG9yIGVudW0gYXJnX3RyYWNrX3N0YXRlICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMS1cXHRzOCBvZmZfY250O1xcdC8qIDAgPSBvZmZzZXQtaW1wcmVjaXNlLCAxLTQgPSAjIG9mIHByZWNpc2Ugb2Zmc2V0cyAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjA0OmVudW0gYXJnX3RyYWNrX3N0YXRlIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjA1LVxcdEFSR19OT05FXFx0PSAtMSxcXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEwOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjExLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEyOlxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxMy19XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxNC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjE1OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxNi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYxNzpcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE4LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE5LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjEte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjI6XFx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfVU5WSVNJVEVEKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjIzLX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjU6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoczggZnJhbWUpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyNi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYyNzpcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI4LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI5LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MzA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjMxLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjMyOlxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MzMtfVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTY0ND1zdGF0aWMgaW50IHN0YWNrX2FyZ19vZmZfdG9fc2xvdChzMTYgb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Mi1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjUzOnN0YXRpYyBib29sIGFyZ19pc192aXNpdGVkKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NTQte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Ny1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjU4OnN0YXRpYyBib29sIGFyZ19pc19mcChjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjU5LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NjItXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY2MzpzdGF0aWMgdm9pZCB2ZXJib3NlX2FyZ190cmFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjY0LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02ODUtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY4NjpzdGF0aWMgYm9vbCBhcmdfdHJhY2tfZXEoY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYSwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjg3LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MDMtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjcwNDpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfc2luZ2xlKHM4IGFyZywgczE2IG9mZilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzA1LXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA2OlxcdHN0cnVjdCBhcmdfdHJhY2sgYXQgPSB7fTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzA3LVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTcxOC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzE5OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19tZXJnZV9vZmZzZXRzKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjAte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo3MjE6XFx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSBhcmdfdHJhY2tfc3RhdGUoYS5mcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMjpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjMtXFx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzU1LS8qXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc1NjogKiBNZXJnZSB0d28gYXJnX3RyYWNrcyBpbnRvIEFSR19JTVBSRUNJU0UsIGNvbGxlY3RpbmcgdGhlIGZyYW1lXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc1Ny0gKiBiaXRzIGZyb20gYm90aCBvcGVyYW5kcy4gUHJlY2lzZSBmcmFtZSBpbmRpY2VzIChmcmFtZSBcXHUwMDNlPSAwKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc2MC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzYxOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYyLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03NzQtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3NTpcXHRyZXR1cm4gYXJnX3RyYWNrX2ltcHJlY2lzZShtKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc2LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc3LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo3Nzg6LyogSm9pbiB0d28gYXJnX3RyYWNrIHZhbHVlcyBhdCBtZXJnZSBwb2ludHMgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Nzc5OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIF9fYXJnX3RyYWNrX2pvaW4oc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrIGIpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg3LVxcdFxcdGlmIChhLm9mZl9jbnQgPT0gMCB8fCBiLm9mZl9jbnQgPT0gMClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Nzg4OlxcdFxcdFxcdHJldHVybiBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg5LVxcdFxcdC8qIE1lcmdlIG9mZnNldCBzZXRzOyBmYWxscyBiYWNrIHRvIG9mZl9jbnQ9MCBpZiBcXHUwMDNlNCAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgxOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODIwOnN0YXRpYyBib29sIGFyZ190cmFja19qb2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCB0YXJnZXQsIGludCByLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjE6XFx0XFx0XFx0ICAgc3RydWN0IGFyZ190cmFjayAqaW4sIHN0cnVjdCBhcmdfdHJhY2sgb3V0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MjIte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjM6XFx0c3RydWN0IGFyZ190cmFjayBvbGQgPSAqaW47XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjgyNDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBfX2FyZ190cmFja19qb2luKG9sZCwgb3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODI1LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjY6XFx0aWYgKGFyZ190cmFja19lcShcXHUwMDI2bmV3X3ZhbCwgXFx1MDAyNm9sZCkpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgyNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODM5LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnAlK2Q6IFxcXCIsIHIgKiA4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODQwOlxcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNm9sZCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0MS1cXHR2ZXJib3NlKGVudiwgXFxcIiArIFxcXCIpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NDI6XFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2b3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODQzLVxcdHZlcmJvc2UoZW52LCBcXFwiID1cXHUwMDNlIFxcXCIpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NDQ6XFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2bmV3X3ZhbCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0NS1cXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODU0LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NTU6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NTYte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg2NC1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODY1OlxcdFxcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXFx1MDAzZWZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODY2LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NzItXFx0XFx0ICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjg3MzpcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9ODgzPXN0YXRpYyBib29sIGFyZ19hZGQoczE2IG9mZiwgczY0IGRlbHRhLCBzMTYgKm91dClcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTEtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjg5MjpzdGF0aWMgdm9pZCBhcmdfcGFkZChzdHJ1Y3QgYXJnX3RyYWNrICphdCwgczY0IGRlbHRhKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTMte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkwMS1cXHRcXHRpZiAoYXJnX2FkZChhdC1cXHUwMDNlb2ZmW2ldLCBkZWx0YSwgXFx1MDAyNm5ld19vZmYpKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkwMjpcXHRcXHRcXHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cXHUwMDNlZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05MDMtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTkxND1zdGF0aWMgaW50IGZwX29mZl90b19zbG90KHMxNiBvZmYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTIyLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5MjM6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgaW50IHJlZyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTI2LVxcdFxcdFxcdFxcdFxcdGludCBkZXB0aClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTI3LXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI4OlxcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX2ltcHJlY2lzZSgoMXUgXFx1MDAzY1xcdTAwM2MgKGRlcHRoICsgMSkpIC0gMSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyOTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkzMC1cXHRpbnQgY250LCBpO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk0OC1cXHRcXHRcXHRyZXR1cm4gaW1wO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NDk6XFx0XFx0cmVzdWx0ID0gX19hcmdfdHJhY2tfam9pbihyZXN1bHQsIGF0X3N0YWNrX291dFtzbG90XSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk1MC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTU5LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NjA6c3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MTpcXHRcXHRcXHQgICBpbnQgcmVnLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MjpcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTYzLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTY0OlxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk2Ni1cXHRpbnQgY250LCBpO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk3Ny1cXHRcXHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHNsb3QrKylcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTc4OlxcdFxcdFxcdGF0X3N0YWNrX291dFtzbG90XSA9IF9fYXJnX3RyYWNrX2pvaW4oYXRfc3RhY2tfb3V0W3Nsb3RdLCBuZXdfdmFsKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTc5LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05OTItXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5OTM6XFx0XFx0XFx0YXRfc3RhY2tfb3V0W3Nsb3RdID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja19vdXRbc2xvdF0sIG5ld192YWwpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05OTQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDAtICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDE6c3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAwMi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDM6XFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAwNC1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA2LVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSsrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDA3OlxcdFxcdFxcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMTctXFx0XFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDE4OlxcdFxcdFxcdFxcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMTktXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMjY9c3RhdGljIHZvaWQgY2xlYXJfc3RhY2tfZm9yX2FsbF9vZmZzKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgaW50IHJlZyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCwgdTMyIHN6KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDI5LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDUxLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDUyOnN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDUzOlxcdFxcdFxcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfaW4sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX2luLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU0OlxcdFxcdFxcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNTUte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfUkVHOyBpKyspIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA2MjpcXHRcXHRpZiAoYXJnX3RyYWNrX2VxKFxcdTAwMjZhdF9vdXRbaV0sIFxcdTAwMjZhdF9pbltpXSkpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA2OS1cXHRcXHR9XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNzA6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHIlZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3MTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiAtXFx1MDAzZSBcXFwiKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfb3V0W2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3Ni1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3NzpcXHRcXHRpZiAoYXJnX3RyYWNrX2VxKFxcdTAwMjZhdF9vdXRbYWldLCBcXHUwMDI2YXRfaW5bYWldKSlcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3OC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDg0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA4NTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFx0c2ElZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2FpXSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODY6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIgLVxcdTAwM2UgXFxcIik7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X291dFthaV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDg3LVxcdH1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSsrKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODk6XFx0XFx0aWYgKGFyZ190cmFja19lcShcXHUwMDI2YXRfc3RhY2tfb3V0W2ldLCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDkwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwOTYtXFx0XFx0fVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk3OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRmcCUrZDogXFxcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk4OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIC1cXHUwMDNlIFxcXCIpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9zdGFja19vdXRbaV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTAzLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTA0OnN0YXRpYyBib29sIGNhbl9iZV9sb2NhbF9mcChpbnQgZGVwdGgsIGludCByZWdubywgc3RydWN0IGFyZ190cmFjayAqYXQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMDUte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTAtLypcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTExMTogKiBQdXJlIGRhdGFmbG93IHRyYW5zZmVyIGZ1bmN0aW9uIGZvciBhcmdfdHJhY2sgc3RhdGUuXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTItICogVXBkYXRlcyBhdF9vdXRbXSBiYXNlZCBvbiBob3cgdGhlIGluc3RydWN0aW9uIG1vZGlmaWVzIHJlZ2lzdGVycy5cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE0LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE1OnN0YXRpYyB2b2lkIGFyZ190cmFja194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExNi1cXHRcXHRcXHQgICBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTc6XFx0XFx0XFx0ICAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTg6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfYXJnX2VudHJ5LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE5LVxcdFxcdFxcdCAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTI0LVxcdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMjU6XFx0c3RydWN0IGFyZ190cmFjayAqZHN0ID0gXFx1MDAyNmF0X291dFtpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyNjpcXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI3OlxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMjgtXFx0aW50IHIsIHNsb3Q7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE1MS1cXHRcXHRcXHRcXHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE1MjpcXHRcXHRcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNTMtXFx0XFx0fSAvKiBlbHNlIGlmIGRzdC1cXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE2Mi1cXHRcXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTYzOlxcdFxcdFxcdGFyZ190cmFja19hbHU2NChkc3QsIHNyYyk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjQtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNzMtXFx0XFx0ICogYXRfc3RhY2tfb3V0W3Nsb3RdIGlzIG5vdCBjbGVhcmVkIGJ5IHRoZSBoZWxwZXIgYW5kIHN1YnByb2cgY2FsbHMuXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExNzQ6XFx0XFx0ICogVGhlIGZpbGxfZnJvbV9zdGFjaygpIG1heSByZXR1cm4gdGhlIHN0YWxlIHNwaWxsIOKAlCB3aGljaCBpcyBhbiBGUC1kZXJpdmVkIGFyZ190cmFja1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTc1LVxcdFxcdCAqICh0aGUgdmFsdWUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGlsbGVkIHRoZXJlKS4gVGhlIGxvYWRlZCByZWdpc3RlciB0aGVuIGNhcnJpZXNcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMjAzLVxcdFxcdFxcdCAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgc3ogPT0gOCkge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMjA0OlxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKnBhcmVudF9zdGFjayA9XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEyMDUtXFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tjYWxsc2l0ZXNbc3JjLVxcdTAwM2VmcmFtZV1dO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzMDg9c3RhdGljIGludCByZWNvcmRfc3RhY2tfYWNjZXNzKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTMwOTpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXJnLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzEwLVxcdFxcdFxcdCAgICAgICBzNjQgYWNjZXNzX2J5dGVzLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMzU1PXN0YXRpYyBpbnQgcmVjb3JkX2xvYWRfc3RvcmVfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTM1NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM1OC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM2Mi1cXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTM2MzpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc29sdmVkLCAqcHRyO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzY0LVxcdGludCBvaTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzY3LVxcdCAqIFN0YWNrIGFyZyBpbnNucyB1c2UgZHN0X3JlZy9zcmNfcmVnPUJQRl9SRUdfUEFSQU1TKDExKS4gU2luY2UgYXRbXVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzY4OlxcdCAqIGlzIGV4dGVuZGVkIHRvIE1BWF9BVF9UUkFDS19SRUdTLCBhdFsxMV0gaG9sZHMgdGhlIGFyZ190cmFjayBmb3JcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM2OS1cXHQgKiBvdXRnb2luZyBzdGFjayBhcmcgc2xvdCAwIOKAlCBub3QgdGhlIHBvaW50ZXIgdXNlZCBmb3IgdGhlIG1lbW9yeVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDAtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDE6XFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXFx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAyLVxcdGlmIChwdHItXFx1MDAzZW9mZl9jbnQgXFx1MDAzZSAwKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDM6XFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDQtXFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cXHUwMDNlb2ZmX2NudDtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA2LVxcdFxcdFxcdGlmIChhcmdfYWRkKHB0ci1cXHUwMDNlb2ZmW29pXSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQwNzpcXHRcXHRcXHRcXHRyZXNvbHZlZCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHB0ci1cXHUwMDNlZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE0MjI9c3RhdGljIGludCByZWNvcmRfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MjU6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCwgaW50IGFyZ19pZHgsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjYtXFx0XFx0XFx0ICAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTQ1OT1zdGF0aWMgaW50IHJlY29yZF9jYWxsX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDYwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQ2MTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQ2Mi1cXHRcXHRcXHQgICAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTU0MT1zdHJ1Y3Qgc3VicHJvZ19hdF9pbmZvIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTU0MjpcXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0My1cXHRpbnQgbGVuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE1NDY9c3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE1NDk6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTUwLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAwLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIHIlZD1cXFwiLCByKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYwMTpcXHRcXHRcXHRcXHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZpbmZvLVxcdTAwM2VhdF9pbltpXVtyXSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDItXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDYtXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIgc2ElZD1cXFwiLCByKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYwNzpcXHRcXHRcXHRcXHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZpbmZvLVxcdTAwM2VhdF9pbltpXVtNQVhfQlBGX1JFRyArIHJdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYwOC1cXHRcXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNS1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBmcCUrZD1cXFwiLCAtKHIgKyAxKSAqIDgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjE2OlxcdFxcdFxcdFxcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X3N0YWNrX2luW2ldW3JdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNy1cXHRcXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYyNy0gKiBDb21wdXRlIGFyZyB0cmFja2luZyBkYXRhZmxvdyBmb3IgYSBzaW5nbGUgc3VicHJvZy5cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYyODogKiBSdW5zIGZvcndhcmQgZml4ZWQtcG9pbnQgd2l0aCBhcmdfdHJhY2tfeGZlcigpLCB0aGVuIHJlY29yZHNcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYyOS0gKiBtZW1vcnkgYWNjZXNzZXMgaW4gYSBzaW5nbGUgbGluZWFyIHBhc3Mgb3ZlciBjb252ZXJnZWQgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTYzNT1zdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MzYtXFx0XFx0XFx0XFx0c3RydWN0IHN1YnByb2dfYXRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYzNzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrICpjYWxsZWVfZW50cnksXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MzgtXFx0XFx0XFx0XFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2NDgtXFx0aW50IGxlbiA9IGVuZCAtIHN0YXJ0O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjQ5OlxcdHN0cnVjdCBhcmdfdHJhY2sgKCphdF9pbilbTUFYX0FUX1RSQUNLX1JFR1NdID0gTlVMTDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X291dFtNQVhfQVRfVFJBQ0tfUkVHU107XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTE6XFx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTI6XFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0ID0gTlVMTDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MzpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X3N0YWNrX2FyZ19lbnRyeVtNQVhfU1RBQ0tfQVJHX1NMT1RTXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1NDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjU2LVxcdGJvb2wgY2hhbmdlZDtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE1LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzE2OlxcdFxcdGFyZ190cmFja194ZmVyKGVudiwgaW5zbiwgaWR4LCBhdF9vdXQsIGF0X3N0YWNrX291dCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTcxNy1cXHRcXHRcXHQgICAgICAgYXRfc3RhY2tfYXJnX2VudHJ5LCBpbnN0YW5jZSwgY2FsbHNpdGVzKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTcxODpcXHRcXHRhcmdfdHJhY2tfbG9nKGVudiwgaW5zbiwgaWR4LCBhdF9pbltpXSwgYXRfc3RhY2tfaW5baV0sIGF0X291dCwgYXRfc3RhY2tfb3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTcxOS1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzMxLVxcdFxcdFxcdGZvciAociA9IDA7IHIgXFx1MDAzYyBNQVhfQVRfVFJBQ0tfUkVHUzsgcisrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzMyOlxcdFxcdFxcdFxcdGNoYW5nZWQgfD0gYXJnX3RyYWNrX2pvaW4oZW52LCBpZHgsIHRhcmdldCwgcixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZhdF9pblt0aV1bcl0sIGF0X291dFtyXSk7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczNS1cXHRcXHRcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgcisrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzM2OlxcdFxcdFxcdFxcdGNoYW5nZWQgfD0gYXJnX3RyYWNrX2pvaW4oZW52LCBpZHgsIHRhcmdldCwgLXIgLSAxLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmF0X3N0YWNrX2luW3RpXVtyXSwgYXRfc3RhY2tfb3V0W3JdKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzY4LVxcdFxcdFxcdG1lbWNweShlbnYtXFx1MDAzZWNhbGxzaXRlX2F0X3N0YWNrW2lkeF0sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3Njk6XFx0XFx0XFx0ICAgICAgIGF0X3N0YWNrX2luW2ldLCBzaXplb2Yoc3RydWN0IGFyZ190cmFjaykgKiBNQVhfQVJHX1NQSUxMX1NMT1RTKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc3MC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc4Ni0vKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgUjEtUjUgb3Igc3RhY2sgYXJncyBpcyBkZXJpdmVkIGZyb20gYSBmcmFtZSBwb2ludGVyLiAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzg3OnN0YXRpYyBib29sIGhhc19mcF9hcmdzKHN0cnVjdCBhcmdfdHJhY2sgKmFyZ3MpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3ODgte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4Njg9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTg2OTpcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICplbnRyeV9hcmdzLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTkxNy1cXHRcXHRpbnQgaWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5MTg6XFx0XFx0c3RydWN0IGFyZ190cmFjayBjYWxsZWVfYXJnc1tNQVhfQVRfVFJBQ0tfUkVHU10gPSB7fTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTkxOTpcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTIwLVxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IFxcdTAwMjZpbnNuc1tpZHhdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOToyMS4yNjAwMjUzMDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5NjQ1OTczNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQXJnIFRyYWNraW5nOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIGl0J3MgcHJldHR5IGNsZWFyOiB0aGV5J3JlIHN3YXBwaW5nIG91dCB0aGVzZSBzdHJ1Y3QgaW5pdGlhbGl6ZXJzIGZvciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgZXNzZW50aWFsbHkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGNsZWFuZXIgY29kZSBhbmQgcG90ZW50aWFsbHkgZmV3ZXIgZXJyb3JzLlxuXG5Jbml0aWFsbHksIEkgc2VlIGBhcmdfdHJhY2tfc3RhdGVgIGJlaW5nIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCBpbnN0YW5jZXMuIFRoZSBjbGV2ZXIgYml0IGhlcmUgaXMgbGV2ZXJhZ2luZyBDJ3Mgc3RydWN0IGluaXRpYWxpemVyIHplcm9pbmc7IGlmIHlvdSBwcm92aWRlIGEgYC5mcmFtZSA9IGZyYW1lYCBpbml0aWFsaXplciwgZXZlcnl0aGluZyBlbHNlIOKAkyBgb2ZmX2NudGAsIGBvZmZgLCBgbWFza2Ag4oCTIGlzIGltcGxpY2l0bHkgemVyb2VkLiBNYWtlcyBzZW5zZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgYC5mcmFtZSA9IGEuZnJhbWVgIHdpdGggdGhlIHJlbWFpbmRlciBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBOaWNlIVxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSByZXBsYWNpbmcgc29tZXRoaW5nIGxpa2UgYGRzdC1cdTAwM2VvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO2AuICBgYXJnX3RyYWNrX29mZl9pbXByZWNpc2VgIGl0c2VsZiBqdXN0IGNhbGxzIGBhcmdfdHJhY2tfc3RhdGVgLiBTbywgdGhlIGltcGFjdCBpcyBpdCdzIHNldHRpbmcgdGhlIGBmcmFtZWAgYW5kIHplcm9pbmcgb3V0ICpldmVyeXRoaW5nKiBpbiB0aGUgc3RydWN0LCB3aGVyZWFzIHByZXZpb3VzbHkgb25seSB0aGUgYG9mZl9jbnRgIHdhcyBiZWluZyBjbGVhcmVkLlxuXG5NeSBmaXJzdCB0aG91Z2h0OiBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmcgZnVuY3Rpb25hbGx5PyAgYGFyZ190cmFja19lcWAgb25seSBjaGVja3MgdGhlIGBvZmZgIGFycmF5IHVwIHRvIGBvZmZfY250YCwgYW5kIHVzZXMgdGhlIGBtYXNrYCBvbmx5IHdoZW4gYGZyYW1lYCBpcyBgQVJHX0lNUFJFQ0lTRWAuIEFzIGxvbmcgYXMgd2UgZW5zdXJlIGBvZmZfY250YCBpcyBwcm9wZXJseSBzZXQsIGl0IGFsbCBzZWVtcyB0aGUgc2FtZS4gVGhlIHVudXNlZCBiaXRzIG9mIGBvZmZgIGFuZCBgbWFza2AgZG9uJ3Qgc2VlbSB0byBiZSBhY2Nlc3NlZCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBnaXZlbiB0aGUgZWFybGllciBhbmFseXNpcy5cblxuSSdtIHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIGV2ZXJ5IHBsYWNlIGBvZmZgIG9yIGBtYXNrYCBpcyB1c2VkLiAgYGFyZ19tZXJnZV9vZmZzZXRzYCwgYGFyZ19qb2luX2ltcHJlY2lzZWAsIGFsbCB0aG9zZSBmdW5jdGlvbnMgb25seSB1c2UgdXAgdG8gYG9mZl9jbnRgIG9yIHJlYWQgYG1hc2tgIHdoZW4gZnJhbWUgaXMgYEFSR19JTVBSRUNJU0VgLiBPa2F5LCBzbyBmYXIsIHNvIGdvb2QuXG5cblRoZXJlJ3Mgbm8gYG1lbWNtcGAgb3IgYW55IGRpcmVjdCBjb21wYXJpc29uIG9mIHRoZSBlbnRpcmUgc3RydWN0IHRoYXQgSSBjYW4gZmluZCwgZWl0aGVyLiBTbyBpdCBkb2VzIHNlZW0gdG8gYmUgYSBwdXJlbHkgY29zbWV0aWMgcmVmYWN0b3JpbmcgYXQgdGhpcyBwb2ludC5cblxuVGhlbiBJIGxvb2sgYXQgdGhlIGBhcmdfdHJhY2tfYWx1NjRgIGFuZCBgYXJnX3BhZGRgIGZ1bmN0aW9ucy4gVGhleSdyZSByZXBsYWNpbmcgbGluZXMgdGhhdCB6ZXJvZWQgYG9mZl9jbnRgIHdpdGggbGluZXMgdGhhdCBub3cgemVybyBvdXQgdGhlIHdob2xlIHN0cnVjdC4gIEZ1bmN0aW9uYWxseSwgaWRlbnRpY2FsLlxuXG5GaW5hbGx5LCBJIGdvdCB0byBgcmVjb3JkX2xvYWRfc3RvcmVfYWNjZXNzYC4gVGhlcmUncyBhIHN1YnRsZSBjaGFuZ2UgaGVyZSwgdGhlIGByZXNvbHZlZGAgdmFyaWFibGUgaXMgbm93IGNvcnJlY3RseSBpbml0aWFsaXplZCB0byB6ZXJvLiBCZWZvcmUsIGl0IGxvb2tlZCBsaWtlIGByZXNvbHZlZGAgd2FzIGJlaW5nIHVzZWQgdW5pbml0aWFsaXplZCBpZiBgcHRyLVx1MDAzZW9mZl9jbnRgIHdhcyBgMGAsIGFzIHRoZSBjb2RlIHdvdWxkIG9ubHkgc2V0IHNvbWUgZmllbGRzLiBUaGUgb2xkZXIgY29kZSBkaWQgbm90IGluaXRpYWxpemUgdGhlIHdob2xlIHN0cnVjdCBhbmQgd2FzIHBvdGVudGlhbGx5IHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZm9yIHRoZSBvdGhlciB2YWx1ZXMuIFRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXghICBTaW5jZSB0aGUgbmV3IGNvZGUgc2V0cyBgcmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKWAsIG5vdyB0aGUgcmVzdCBvZiBzdHJ1Y3QgaXMgemVyb2VkLlxuXG5Pa2F5LCBzbyBpdCdzIHNhZmVyLCBidXQgSSAqdGhpbmsqIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS4gIElmIGByZXNvbHZlZC5vZmZfY250ID09IDBgLCB0aGUgcG9pbnRlciBgcHRyYCBnb3Qgc2V0IHRvIHBvaW50IHRvIGByZXNvbHZlZGAuXG5JdCAqbG9va3MqIGxpa2UgaWYgYHB0ci1cdTAwM2VvZmZfY250ID09IDBgIHRoZSB2YWx1ZSBvZiBgcmVzb2x2ZWQubWFza2Agd2FzIG5vdCBpbXBvcnRhbnQgYmVjYXVzZSBgcHRyLVx1MDAzZWZyYW1lYCB3YXMgbm90IGBBUkdfSU1QUkVDSVNFYC5cblRoZSBjaGFuZ2VzIGVuc3VyZSB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlIGJlY2F1c2UgdGhlIHZhbHVlIGlzIGV4cGxpY2l0bHkgemVybyBpbml0aWFsaXplZC5cblxuU28sIG92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcmVmYWN0b3JpbmcuIENsZWFuZXIsIGxlc3MgZXJyb3ItcHJvbmUsIGFuZCBsaWtlbHkgZml4ZWQgYSBzdWJ0bGUgYnVnIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgbWVtYmVycy4gTm90aGluZyBncm91bmRicmVha2luZywgYnV0IGRlZmluaXRlbHkgYSBuZXQgcG9zaXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Mi4yMjQ2MjYwNzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdFxcbjE0MDE6XFx0XFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXFx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xcbjE0MDI6XFx0XFx0aWYgKHB0ci1cXHUwMDNlb2ZmX2NudCBcXHUwMDNlIDApIHtcXG4xNDAzOlxcdFxcdFxcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cXHUwMDNlZnJhbWUpO1xcbjE0MDQ6XFx0XFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cXHUwMDNlb2ZmX2NudDtcXG4xNDA1OlxcdFxcdFxcdGZvciAob2kgPSAwOyBvaSBcXHUwMDNjIHB0ci1cXHUwMDNlb2ZmX2NudDsgb2krKykge1xcbjE0MDY6XFx0XFx0XFx0XFx0aWYgKGFyZ19hZGQocHRyLVxcdTAwM2VvZmZbb2ldLCBpbnNuLVxcdTAwM2VvZmYsIFxcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xcbjE0MDc6XFx0XFx0XFx0XFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXFx1MDAzZWZyYW1lKTtcXG4xNDA4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0MDk6XFx0XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0fVxcbjE0MTE6XFx0XFx0XFx0cHRyID0gXFx1MDAyNnJlc29sdmVkO1xcbjE0MTI6XFx0XFx0fVxcbjE0MTM6XFx0XFxuMTQxNDpcXHRcXHRpZiAocHRyLVxcdTAwM2VmcmFtZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHB0ci1cXHUwMDNlZnJhbWUgXFx1MDAzYz0gZGVwdGgpXFxuMTQxNTpcXHRcXHRcXHRyZXR1cm4gcmVjb3JkX3N0YWNrX2FjY2VzcyhpbnN0YW5jZSwgcHRyLCBzeiwgcHRyLVxcdTAwM2VmcmFtZSwgaW5zbl9pZHgpO1xcbjE0MTY6XFx0XFx0aWYgKHB0ci1cXHUwMDNlZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcXG4xNDE3OlxcdFxcdFxcdHJldHVybiByZWNvcmRfaW1wcmVjaXNlKGluc3RhbmNlLCBwdHItXFx1MDAzZW1hc2ssIGluc25faWR4KTtcXG4xNDE4OlxcdFxcdC8qIEFSR19OT05FOiBub3QgZGVyaXZlZCBmcm9tIGFueSBmcmFtZSBwb2ludGVyLCBza2lwICovXFxuMTQxOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDIwOlxcdH1cXG4xNDIxOlxcdFxcbjE0MjI6XFx0c3RhdGljIGludCByZWNvcmRfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjE0MjM6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXFxuMTQyNDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4xNDI1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBhcmdfaWR4LFxcbjE0MjY6XFx0XFx0XFx0XFx0ICAgICBpbnQgaW5zbl9pZHgpXFxuMTQyNzpcXHR7XFxuMTQyODpcXHRcXHRpbnQgZGVwdGggPSBpbnN0YW5jZS1cXHUwMDNlZGVwdGg7XFxuMTQyOTpcXHRcXHRpbnQgZnJhbWUgPSBhdC1cXHUwMDNlZnJhbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjQyLjIyNDgwNDE0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDM2MDIwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWNjZXNzIFRyYWNraW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIHJlY29yZGluZyBtZW1vcnkgYWNjZXNzZXMuIFRoZSBwb2ludGVyLCBgcHRyYCwgaXMgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgaXQncyBiZWluZyBwYXNzZWQgdG8gZWl0aGVyIGByZWNvcmRfc3RhY2tfYWNjZXNzYCBvciBgcmVjb3JkX2ltcHJlY2lzZWAsIGRlcGVuZGluZyBvbiBzb21lIGNvbmRpdGlvbi4gIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHB0ci1cdTAwM2VmcmFtZSBcdTAwM2U9IDBgIGNoZWNrLiBJZiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlLCB3ZSdyZSBvZmYgdG8gYHJlY29yZF9zdGFja19hY2Nlc3NgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHBhdGguIEl0J3MgY2FsbGluZyBgcmVjb3JkX3N0YWNrX2FjY2Vzc2Agd2l0aCB0aGUgYGluc3RhbmNlYCwgdGhlIHBvaW50ZXIgYHB0cmAsIHRoZSBzaXplIGBzemAsICBgcHRyLVx1MDAzZWZyYW1lYCwgYW5kIGBpbnNuX2lkeGAuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IHRyYWNraW5nIGFjY2Vzc2VzIHRvIHN0YWNrLWFsbG9jYXRlZCBtZW1vcnksIHNlZW1zIGxpa2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVhY2ggb2YgdGhvc2UgcGFyYW1ldGVycyByZXByZXNlbnRzIGluIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBhY2Nlc3MgYW5kIHN0YWNrIGZyYW1lIG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbnRvIGByZWNvcmRfc3RhY2tfYWNjZXNzYCBhbmQgZGlzc2VjdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Ny42NjA4Mjc1NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzA4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzA4OlxcdHN0YXRpYyBpbnQgcmVjb3JkX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXFxuMTMwOTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXJnLFxcbjEzMTA6XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBhY2Nlc3NfYnl0ZXMsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxcbjEzMTE6XFx0e1xcbjEzMTI6XFx0XFx0aW50IGksIGVycjtcXG4xMzEzOlxcdFxcbjEzMTQ6XFx0XFx0aWYgKGFjY2Vzc19ieXRlcyA9PSAwKVxcbjEzMTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTMxNjpcXHRcXHRpZiAoYXJnLVxcdTAwM2VvZmZfY250ID09IDApIHtcXG4xMzE3OlxcdFxcdFxcdGlmIChhY2Nlc3NfYnl0ZXMgXFx1MDAzZSAwIHx8IGFjY2Vzc19ieXRlcyA9PSBTNjRfTUlOKVxcbjEzMTg6XFx0XFx0XFx0XFx0cmV0dXJuIG1hcmtfc3RhY2tfcmVhZChpbnN0YW5jZSwgZnJhbWUsIGluc25faWR4LCBTUElTX0FMTCk7XFxuMTMxOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcdGlmIChhY2Nlc3NfYnl0ZXMgIT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBhY2Nlc3NfYnl0ZXMgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGFyZy1cXHUwMDNlb2ZmX2NudCAhPSAxKVxcbjEzMjI6XFx0XFx0XFx0LyogbXVsdGktb2Zmc2V0IHdyaXRlIGNhbm5vdCBzZXQgc3RhY2tfZGVmICovXFxuMTMyMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzI0OlxcdFxcbjEzMjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZy1cXHUwMDNlb2ZmX2NudDsgaSsrKSB7XFxuMTMyNjpcXHRcXHRcXHRlcnIgPSByZWNvcmRfc3RhY2tfYWNjZXNzX29mZihpbnN0YW5jZSwgYXJnLVxcdTAwM2VvZmZbaV0sIGFjY2Vzc19ieXRlcywgZnJhbWUsIGluc25faWR4KTtcXG4xMzI3OlxcdFxcdFxcdGlmIChlcnIpXFxuMTMyODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzMjk6XFx0XFx0fVxcbjEzMzA6XFx0XFx0cmV0dXJuIDA7XFxuMTMzMTpcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdC8qXFxuMTMzNDpcXHQgKiBXaGVuIGEgcG9pbnRlciBpcyBBUkdfSU1QUkVDSVNFLCBjb25zZXJ2YXRpdmVseSBtYXJrIGV2ZXJ5IGZyYW1lIGluXFxuMTMzNTpcXHQgKiB0aGUgYml0bWFzayBhcyBmdWxseSB1c2VkLlxcbjEzMzY6XFx0ICovXFxuMTMzNzpcXHRzdGF0aWMgaW50IHJlY29yZF9pbXByZWNpc2Uoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgbWFzaywgdTMyIGluc25faWR4KVxcbjEzMzg6XFx0e1xcbjEzMzk6XFx0XFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXFx1MDAzZWRlcHRoO1xcbjEzNDA6XFx0XFx0aW50IGYsIGVycjtcXG4xMzQxOlxcdFxcbjEzNDI6XFx0XFx0Zm9yIChmID0gMDsgbWFzazsgZisrLCBtYXNrIFxcdTAwM2VcXHUwMDNlPSAxKSB7XFxuMTM0MzpcXHRcXHRcXHRpZiAoIShtYXNrIFxcdTAwMjYgMSkpXFxuMTM0NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMzQ1OlxcdFxcdFxcdGlmIChmIFxcdTAwM2M9IGRlcHRoKSB7XFxuMTM0NjpcXHRcXHRcXHRcXHRlcnIgPSBtYXJrX3N0YWNrX3JlYWQoaW5zdGFuY2UsIGYsIGluc25faWR4LCBTUElTX0FMTCk7XFxuMTM0NzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Ny42NjA5NDM0OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5NzkwMjc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyB3aXRoIE5vIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyB0aGF0IHRoZSBwYXRjaCB3YXMgYSBzaW1wbGUgcmVmYWN0b3JpbmcsIGFuZCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCB0aGF0J3Mgc3RpbGwgdGhlIGNhc2UuIFNwZWNpZmljYWxseSwgaWYgYGFyZy1cdTAwM2VvZmZfY250ID09IDBgLCBgcmVjb3JkX3N0YWNrX2FjY2Vzc2AgZG9lcyAqbm90KiByZWFkIGZyb20gdGhlIGBhcmctXHUwMDNlb2ZmYCBhcnJheS4gVGhhdCB1bmluaXRpYWxpemVkIGBvZmZgIGFycmF5IHdpdGhpbiB0aGUgYHJlc29sdmVkYCBzdHJ1Y3R1cmUgd2FzIG5ldmVyIGFjY2Vzc2VkLCBiYXNlZCBvbiB0aGUgY29udHJvbCBmbG93LlxuXG5UaGUgZGlmZnMgcmV2ZWFsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVwbGFjaW5nIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gd2l0aCBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19pbXByZWNpc2UoKWAsIGBhcmdfdHJhY2tfc3RhdGUoKWAsIGBhcmdfdHJhY2tfbm9uZSgpYCwgYW5kIGBhcmdfdHJhY2tfdW52aXNpdGVkKClgLiBGb3IgZXhhbXBsZSwgYSBjb21tb24gc25pcHBldCBsaWtlIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07YCBpcyByZXBsYWNlZCB3aXRoIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO2AuIEkndmUgY2hlY2tlZCB0aGVzZSByZXBsYWNlbWVudHMgYW5kIHRoZXkgYXJlIGlkZW50aWNhbC5cblxuVGhlIG1vc3QgY3JpdGljYWwgdGhpbmcgdG8gY29uZmlybSBpcyB0aGF0IHRoZXJlIGFyZSAqbm8qIGZ1bmN0aW9uYWwgY2hhbmdlcyBoaWRkZW4gd2l0aGluIHRoaXMgdHJhbnNmb3JtYXRpb24uIFRoZSBsb2dpYyBtdXN0IGJlIGlkZW50aWNhbC4gVG8gZW5zdXJlIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgc3VidGxlIGRpZmZlcmVuY2VzLiBUaGUgYHN0cnVjdCBhcmdfdHJhY2tgIHN0cnVjdCB1c2VzIGEgdW5pb24sIHdpdGggYSBieXRlIG9mZnNldCBhcnJheSBvciBhIGJpdG1hc2ssIGFsb25nIHdpdGggYSBgZnJhbWVgIGFuZCBgb2ZmX2NudGAuXG5cbldoZW4gdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVkIHRoZSB1bnVzZWQgbWVtYmVycy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSlgLCBhbHNvIHJlc3VsdCBpbiBzdHJ1Y3QgbWVtYmVycyBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBTbywgYXQgdGhhdCBsZXZlbCwgd2UgYXJlIGdvb2QuXG5cblRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSBjb21lcyB3aGVuIGxvb2tpbmcgYXQgdGhlIGNvZGUgcmVwbGFjZWQgYnkgYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZSguLi4pYC4gSGVyZSwgdGhlIG9sZCBjb2RlIHVzZWQgYGRzdC1cdTAwM2VvZmZfY250ID0gMDtgLCBsZWF2aW5nIGBkc3QtXHUwMDNlb2ZmYCBhbmQgYGRzdC1cdTAwM2VtYXNrYCB1bnRvdWNoZWQsIHdoaWxlIHRoZSBuZXcgY29kZSB6ZXJvcyBvdXQgYGRzdC1cdTAwM2VvZmZgIGFuZCBgZHN0LVx1MDAzZW1hc2tgLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSBhY2Nlc3MgcGF0dGVybnMuXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUsIGFuZCBgb2ZmYCBpcyBvbmx5IGFjY2Vzc2VkIHdoZW4gYG9mZl9jbnRgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgYG1hc2tgIGlzIG9ubHkgdXNlZCB3aGVuIGBmcmFtZSA9PSBBUkdfSU1QUkVDSVNFYC4gSW4gdGhlIGNvbnRleHQgd2hlcmUgYGRzdC1cdTAwM2VvZmZfY250ID0gMGAgd2FzIHVzZWQsIHRoZSByZWxldmFudCBgZHN0LVx1MDAzZWZyYW1lYCB3YXMgbm90IGBBUkdfSU1QUkVDSVNFYCAoaXQgd2FzIHJlbGF0ZWQgdG8gaW1wcmVjaXNlIG9mZnNldHMpLiBTbywgemVyb2luZyBvdXQgYG9mZmAgYW5kIGBtYXNrYCBpbiB0aGUgbmV3IGNvZGUgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IGJlY2F1c2UgdGhleSB3b3VsZG4ndCBiZSBhY2Nlc3NlZC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljIGFuZCBkb2Vzbid0IGNoYW5nZSB0aGUgcHJvZ3JhbSdzIGV4ZWN1dGlvbiBvciBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgYnVncy4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byBpbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSB3aWxsIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM0LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzozMDowMy42Mzk5NzQzMDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvccx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 13:08:09 +0000 UTC FinishedAt: 2026-07-27 13:30:04 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhMzFmYzY4MDlhYmYzNGRmY2ZhN2IyMTYyNGVjNTdlYzUyNWRmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbmluZGV4IDBhYWRmYmFlMGFjYzVhLi41OGI5NzljMTdjM2U0OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtNjA3LDYgJiM0Mzs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gfTtcbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfdW52aXNpdGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtYXNrLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07XG4mIzQzO31cbiYjNDM7XG4gLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi9cbiAjZGVmaW5lIE1BWF9BUkdfU1BJTExfU0xPVFMgNjRcbiBcbkBAIC02OTMsOCAmIzQzOzcxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19tZXJnZV9vZmZzZXRzKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxuIHtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0geyAuZnJhbWUgPSBhLmZyYW1lIH07XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG4gXHRpbnQgaSA9IDAsIGogPSAwLCBrID0gMDtcbiBcbiBcdHdoaWxlIChpIFx1MDAzYyBhLm9mZl9jbnQgXHUwMDI2XHUwMDI2IGogXHUwMDNjIGIub2ZmX2NudCkge1xuQEAgLTc0Nyw3ICYjNDM7NzcyLDcgQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX2pvaW5faW1wcmVjaXNlKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFja1xuIFx0ZWxzZSBpZiAoYi5mcmFtZSA9PSBBUkdfSU1QUkVDSVNFKVxuIFx0XHRtIHw9IGIubWFzaztcbiBcbi1cdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbSwgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xuJiM0MztcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuIH1cbiBcbiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xuQEAgLTc2MCw3ICYjNDM7Nzg1LDcgQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgX19hcmdfdHJhY2tfam9pbihzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbiBcdGlmIChhLmZyYW1lID09IGIuZnJhbWUgXHUwMDI2XHUwMDI2IGEuZnJhbWUgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIEJvdGggb2Zmc2V0LWltcHJlY2lzZTogc3RheSBpbXByZWNpc2UgKi9cbiBcdFx0aWYgKGEub2ZmX2NudCA9PSAwIHx8IGIub2ZmX2NudCA9PSAwKVxuLVx0XHRcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbiYjNDM7XHRcdFx0cmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xuIFx0XHQvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgXHUwMDNlNCAqL1xuIFx0XHRyZXR1cm4gYXJnX21lcmdlX29mZnNldHMoYSwgYik7XG4gXHR9XG5AQCAtODM3LDcgJiM0Mzs4NjIsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICYjNDM7PSByWSB3aGVyZSByWSBpcyBub3QgYXJnIGRlcml2ZWRcbiBcdFx0ICogclggJiM0Mzs9IHJYXG4gXHRcdCAqL1xuLVx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4mIzQzO1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aWYgKHNyYy1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VmcmFtZSA9PSBBUkdfTk9ORSkge1xuQEAgLTg0NSw4ICYjNDM7ODcwLDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxuIFx0XHQgKiByWCAmIzQzOz0gclkgd2hlcmUgclggaXMgbm90IGFyZyBkZXJpdmVkXG4gXHRcdCAqIHJZIGlkZW50aXR5IGxlYWtzIGludG8gclhcbiBcdFx0ICovXG4tXHRcdGRzdC1cdTAwM2VvZmZfY250ID0gMDtcbi1cdFx0ZHN0LVx1MDAzZWZyYW1lID0gc3JjLVx1MDAzZWZyYW1lO1xuJiM0MztcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHNyYy1cdTAwM2VmcmFtZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC04NzUsNyAmIzQzOzg5OSw3IEBAIHN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXG4gXHRcdHMxNiBuZXdfb2ZmO1xuIFxuIFx0XHRpZiAoYXJnX2FkZChhdC1cdTAwM2VvZmZbaV0sIGRlbHRhLCBcdTAwMjZuZXdfb2ZmKSkge1xuLVx0XHRcdGF0LVx1MDAzZW9mZl9jbnQgPSAwO1xuJiM0MztcdFx0XHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cdTAwM2VmcmFtZSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdGF0LVx1MDAzZW9mZltpXSA9IG5ld19vZmY7XG5AQCAtOTAxLDExICYjNDM7OTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdFx0XHRpbnQgZGVwdGgpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7XG4tXHRcdC5tYXNrID0gKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggJiM0MzsgMSkpIC0gMSxcbi1cdFx0LmZyYW1lID0gQVJHX0lNUFJFQ0lTRVxuLVx0fTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX2ltcHJlY2lzZSgoMXUgXHUwMDNjXHUwMDNjIChkZXB0aCAmIzQzOyAxKSkgLSAxKTtcbiYjNDM7XHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XG4gXHRpbnQgY250LCBpO1xuIFxuIFx0aWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7XG5AQCAtOTQwLDcgJiM0Mzs5NjEsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcbiBcdFx0XHQgICBpbnQgcmVnLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXG4gXHRcdFx0ICAgc3RydWN0IGFyZ190cmFjayAqdmFsLCB1MzIgc3opXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XG4gXHRpbnQgY250LCBpO1xuIFxuQEAgLTk3OSw3ICYjNDM7MTAwMCw3IEBAIHN0YXRpYyB2b2lkIHNwaWxsX3RvX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LFxuICAqL1xuIHN0YXRpYyB2b2lkIGNsZWFyX292ZXJsYXBwaW5nX3N0YWNrX3Nsb3RzKHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrLCBzMTYgb2ZmLCB1MzIgc3osIGludCBjbnQpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXG4gXHRpZiAoY250ID09IDApIHtcbiBcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkmIzQzOyYjNDM7KVxuQEAgLTExMDMsNyAmIzQzOzExMjQsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHR1OCBjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiBcdHN0cnVjdCBhcmdfdHJhY2sgKnNyYyA9IFx1MDAyNmF0X291dFtpbnNuLVx1MDAzZXNyY19yZWddO1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuJiM0MztcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRpbnQgciwgc2xvdDtcbiBcbiBcdC8qIEhhbmRsZSBzdGFjayBhcmcgc3RvcmVzIGFuZCBsb2Fkcy4gKi9cbkBAIC0xMTI4LDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0YXJnX3BhZGQoZHN0LCAtKHM2NClpbnNuLVx1MDAzZWltbSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0LyogQW55IG90aGVyIDY0LWJpdCBhbHUgb24gdGhlIHBvaW50ZXIgbWFrZXMgaXQgaW1wcmVjaXNlICovXG4tXHRcdFx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4mIzQzO1x0XHRcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC1cdTAwM2VmcmFtZSk7XG4gXHRcdH0gLyogZWxzZSBpZiBkc3QtXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4gXHRcdGlmIChjb2RlID09IEJQRl9NT1YpIHtcbkBAIC0xMzc5LDExICYjNDM7MTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXHUwMDNlb2ZmIGludG8gYXJnX3RyYWNrICovXG4gXHRpZiAocHRyLVx1MDAzZW9mZl9jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cdTAwM2VmcmFtZSk7XG4gXHRcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXHUwMDNlb2ZmX2NudDtcbi1cdFx0cmVzb2x2ZWQuZnJhbWUgPSBwdHItXHUwMDNlZnJhbWU7XG4gXHRcdGZvciAob2kgPSAwOyBvaSBcdTAwM2MgcHRyLVx1MDAzZW9mZl9jbnQ7IG9pJiM0MzsmIzQzOykge1xuIFx0XHRcdGlmIChhcmdfYWRkKHB0ci1cdTAwM2VvZmZbb2ldLCBpbnNuLVx1MDAzZW9mZiwgXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcbi1cdFx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSAwO1xuJiM0MztcdFx0XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UocHRyLVx1MDAzZWZyYW1lKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTE2MzAsOCAmIzQzOzE2NTEsOCBAQCBzdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDtcbiBcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X3N0YWNrX2FyZ19lbnRyeVtNQVhfU1RBQ0tfQVJHX1NMT1RTXTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4mIzQzO1x0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XG4mIzQzO1x0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbiBcdGJvb2wgY2hhbmdlZDtcbiBcdGludCBpLCBwLCByLCBlcnIgPSAtRU5PTUVNO1xuIFxuQEAgLTE4OTUsNyAmIzQzOzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0Zm9yIChpbnQgcCA9IHBvX3N0YXJ0OyBwIFx1MDAzYyBwb19lbmQ7IHAmIzQzOyYjNDM7KSB7XG4gXHRcdGludCBpZHggPSBlbnYtXHUwMDNlY2ZnLmluc25fcG9zdG9yZGVyW3BdO1xuIFx0XHRzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9O1xuLVx0XHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4mIzQzO1x0XHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZpbnNuc1tpZHhdO1xuIFx0XHRzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqY2FsbGVlX2luc3RhbmNlO1xuIFx0XHRpbnQgY2FsbGVlLCB0YXJnZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBhMzFmYzY4MDlhYmYzNGRmY2ZhN2IyMTYyNGVjNTdlYzUyNWRmMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKQEAgLTYwNyw2ICYjNDM7NjA3LDMxIEBAIGVudW0gYXJnX3RyYWNrX3N0YXRlIHsKIAlBUkdfSU1QUkVDSVNFCT0gLTMsCS8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovCiB9OwogCiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfdW52aXNpdGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtYXNrLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7fQomIzQzOwogLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi8KICNkZWZpbmUgTUFYX0FSR19TUElMTF9TTE9UUyA2NAogCkBAIC02OTMsOCAmIzQzOzcxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKQogICovCiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYikKIHsKLQlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9OwotCXN0cnVjdCBhcmdfdHJhY2sgaW1wID0geyAuZnJhbWUgPSBhLmZyYW1lIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpOwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpOwogCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOwogCiAJd2hpbGUgKGkgJmx0OyBhLm9mZl9jbnQgJmFtcDsmYW1wOyBqICZsdDsgYi5vZmZfY250KSB7CkBAIC03NDcsNyAmIzQzOzc3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sKIAllbHNlIGlmIChiLmZyYW1lID09IEFSR19JTVBSRUNJU0UpCiAJCW0gfD0gYi5tYXNrOwogCi0JcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pOwogfQogCiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqLwpAQCAtNzYwLDcgJiM0Mzs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKQogCWlmIChhLmZyYW1lID09IGIuZnJhbWUgJmFtcDsmYW1wOyBhLmZyYW1lICZndDs9IDApIHsKIAkJLyogQm90aCBvZmZzZXQtaW1wcmVjaXNlOiBzdGF5IGltcHJlY2lzZSAqLwogCQlpZiAoYS5vZmZfY250ID09IDAgfHwgYi5vZmZfY250ID09IDApCi0JCQlyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAuZnJhbWUgPSBhLmZyYW1lIH07CiYjNDM7CQkJcmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpOwogCQkvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgJmd0OzQgKi8KIAkJcmV0dXJuIGFyZ19tZXJnZV9vZmZzZXRzKGEsIGIpOwogCX0KQEAgLTgzNyw3ICYjNDM7ODYyLDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKQogCQkgKiByWCAmIzQzOz0gclkgd2hlcmUgclkgaXMgbm90IGFyZyBkZXJpdmVkCiAJCSAqIHJYICYjNDM7PSByWAogCQkgKi8KLQkJZHN0LSZndDtvZmZfY250ID0gMDsKJiM0MzsJCSpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc3JjLSZndDtmcmFtZSAmZ3Q7PSAwICZhbXA7JmFtcDsgZHN0LSZndDtmcmFtZSA9PSBBUkdfTk9ORSkgewpAQCAtODQ1LDggJiM0Mzs4NzAsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpCiAJCSAqIHJYICYjNDM7PSByWSB3aGVyZSByWCBpcyBub3QgYXJnIGRlcml2ZWQKIAkJICogclkgaWRlbnRpdHkgbGVha3MgaW50byByWAogCQkgKi8KLQkJZHN0LSZndDtvZmZfY250ID0gMDsKLQkJZHN0LSZndDtmcmFtZSA9IHNyYy0mZ3Q7ZnJhbWU7CiYjNDM7CQkqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLSZndDtmcmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg3NSw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3BhZGQoc3RydWN0IGFyZ190cmFjayAqYXQsIHM2NCBkZWx0YSkKIAkJczE2IG5ld19vZmY7CiAKIAkJaWYgKGFyZ19hZGQoYXQtJmd0O29mZltpXSwgZGVsdGEsICZhbXA7bmV3X29mZikpIHsKLQkJCWF0LSZndDtvZmZfY250ID0gMDsKJiM0MzsJCQkqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC0mZ3Q7ZnJhbWUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWF0LSZndDtvZmZbaV0gPSBuZXdfb2ZmOwpAQCAtOTAxLDExICYjNDM7OTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCQkJc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LAogCQkJCQlpbnQgZGVwdGgpCiB7Ci0Jc3RydWN0IGFyZ190cmFjayBpbXAgPSB7Ci0JCS5tYXNrID0gKDF1ICZsdDsmbHQ7IChkZXB0aCAmIzQzOyAxKSkgLSAxLAotCQkuZnJhbWUgPSBBUkdfSU1QUkVDSVNFCi0JfTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSAmbHQ7Jmx0OyAoZGVwdGggJiM0MzsgMSkpIC0gMSk7CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTsKIAlpbnQgY250LCBpOwogCiAJaWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7CkBAIC05NDAsNyAmIzQzOzk2MSw3IEBAIHN0YXRpYyB2b2lkIHNwaWxsX3RvX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LAogCQkJICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LAogCQkJICAgc3RydWN0IGFyZ190cmFjayAqdmFsLCB1MzIgc3opCiB7Ci0Jc3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpOwogCXN0cnVjdCBhcmdfdHJhY2sgbmV3X3ZhbCA9IHN6ID09IDggPyAqdmFsIDogbm9uZTsKIAlpbnQgY250LCBpOwogCkBAIC05NzksNyAmIzQzOzEwMDAsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwKICAqLwogc3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudCkKIHsKLQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7CiAKIAlpZiAoY250ID09IDApIHsKIAkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfQVJHX1NQSUxMX1NMT1RTOyBpJiM0MzsmIzQzOykKQEAgLTExMDMsNyAmIzQzOzExMjQsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJdTggY29kZSA9IEJQRl9PUChpbnNuLSZndDtjb2RlKTsKIAlzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSAmYW1wO2F0X291dFtpbnNuLSZndDtkc3RfcmVnXTsKIAlzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSAmYW1wO2F0X291dFtpbnNuLSZndDtzcmNfcmVnXTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CXN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7CiAJaW50IHIsIHNsb3Q7CiAKIAkvKiBIYW5kbGUgc3RhY2sgYXJnIHN0b3JlcyBhbmQgbG9hZHMuICovCkBAIC0xMTI4LDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCWFyZ19wYWRkKGRzdCwgLShzNjQpaW5zbi0mZ3Q7aW1tKTsKIAkJCWVsc2UKIAkJCQkvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi8KLQkJCQlkc3QtJmd0O29mZl9jbnQgPSAwOwomIzQzOwkJCQkqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LSZndDtmcmFtZSk7CiAJCX0gLyogZWxzZSBpZiBkc3QtJmd0O2ZyYW1lIGlzIGltcHJlY2lzZSBpdCBzdGF5cyBzbyAqLwogCX0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0FMVTY0ICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewogCQlpZiAoY29kZSA9PSBCUEZfTU9WKSB7CkBAIC0xMzc5LDExICYjNDM7MTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiAJLyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tJmd0O29mZiBpbnRvIGFyZ190cmFjayAqLwogCWlmIChwdHItJmd0O29mZl9jbnQgJmd0OyAwKSB7CiYjNDM7CQlyZXNvbHZlZCA9IGFyZ190cmFja19zdGF0ZShwdHItJmd0O2ZyYW1lKTsKIAkJcmVzb2x2ZWQub2ZmX2NudCA9IHB0ci0mZ3Q7b2ZmX2NudDsKLQkJcmVzb2x2ZWQuZnJhbWUgPSBwdHItJmd0O2ZyYW1lOwogCQlmb3IgKG9pID0gMDsgb2kgJmx0OyBwdHItJmd0O29mZl9jbnQ7IG9pJiM0MzsmIzQzOykgewogCQkJaWYgKGFyZ19hZGQocHRyLSZndDtvZmZbb2ldLCBpbnNuLSZndDtvZmYsICZhbXA7cmVzb2x2ZWQub2ZmW29pXSkpIHsKLQkJCQlyZXNvbHZlZC5vZmZfY250ID0gMDsKJiM0MzsJCQkJcmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItJmd0O2ZyYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTYzMCw4ICYjNDM7MTY1MSw4IEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9zdWJwcm9nX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDsKIAlzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQgPSBOVUxMOwogCXN0cnVjdCBhcmdfdHJhY2sgYXRfc3RhY2tfYXJnX2VudHJ5W01BWF9TVEFDS19BUkdfU0xPVFNdOwotCXN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07Ci0Jc3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTsKIAlib29sIGNoYW5nZWQ7CiAJaW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07CiAKQEAgLTE4OTUsNyAmIzQzOzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWZvciAoaW50IHAgPSBwb19zdGFydDsgcCAmbHQ7IHBvX2VuZDsgcCYjNDM7JiM0MzspIHsKIAkJaW50IGlkeCA9IGVudi0mZ3Q7Y2ZnLmluc25fcG9zdG9yZGVyW3BdOwogCQlzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9OwotCQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07CiYjNDM7CQlzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpOwogCQlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSAmYW1wO2luc25zW2lkeF07CiAJCXN0cnVjdCBmdW5jX2luc3RhbmNlICpjYWxsZWVfaW5zdGFuY2U7CiAJCWludCBjYWxsZWUsIHRhcmdldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrZXJuZWwvYnBmL2xpdmVuZXNzLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSB0b3VjaGluZyBga2VybmVsL2JwZi9saXZlbmVzcy5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIG1vc3RseSBjb3NtZXRpYy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgLCBhbmQgdGhlIG90aGVycyB0byBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCB2YXJpYWJsZXMgaW5zdGVhZCBvZiBkaXJlY3RseSB1c2luZyBzdHJ1Y3QgaW5pdGlhbGl6ZXJzLiBTZWVtcyBsaWtlIGEgY29kZSBzdHlsZSBwcmVmZXJlbmNlLgoKQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMganVzdCB5ZXQuIEdvdHRhIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqY2hhbmdlZCouIEFoLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGluaXRpYWxpemF0aW9ucywgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTsKYGBgCgp3aXRoOgoKYGBgYwpzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTsKYGBgCgpXaGVyZSBgYXJnX3RyYWNrX3N0YXRlYCBpcyBqdXN0IGEgc2ltcGxlIHdyYXBwZXIuIFB1cmVseSBjb3NtZXRpYywgbm8gY2hhbmdlIGluIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHNvIGZhci4KCldhaXQgYSBzZWNvbmQsIGhvbGQgb24uLi4gTGV0JiMzOTtzIHNjcnV0aW5pemUgaXQuIEFscmlnaHQsIGNoZWNraW5nIHNvbWUgbW9yZSBjaGFuZ2VzLi4uCgpgYGBjCi0Jc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTsKLQlzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9OwomIzQzOwlzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTsKJiM0MzsJc3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTsKYGBgCgpgYGBjCi0JcmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLm1hc2sgPSBtLCAuZnJhbWUgPSBBUkdfSU1QUkVDSVNFIH07CiYjNDM7CXJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pOwpgYGAKCmBgYGMKLQkJCXJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGEuZnJhbWUgfTsKJiM0MzsJCQlyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7CmBgYAoKYGBgYwotCQlkc3QtJmd0O29mZl9jbnQgPSAwOwomIzQzOwkJKmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC0mZ3Q7ZnJhbWUpOwpgYGAKCk9rYXksIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBkaWZmZXJlbmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHRoZSByZXBsYWNlbWVudCBvZiBgZHN0LSZndDtvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTtgLiBUaGUgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBmdW5jdGlvbiByZXR1cm5zIGEgYHN0cnVjdCBhcmdfdHJhY2tgIGluaXRpYWxpemVkIHdpdGgganVzdCB0aGUgYGZyYW1lYCBtZW1iZXIuIElmIGBkc3RgIGhhZCBvdGhlciBmaWVsZHMgc2V0LCBsaWtlIGBtYXNrYCBvciBgb2ZmYCwgdGhlIGFzc2lnbm1lbnQgYCpkc3QgPSAuLi5gIHdpbGwgKnplcm8gb3V0KiB0aG9zZSBmaWVsZHMuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbCBjb2RlLCBgZHN0LSZndDtvZmZfY250ID0gMDtgLCBvbmx5IGFmZmVjdGVkIGBvZmZfY250YC4KClRoaXMgaXMgYSBwb3RlbnRpYWwgc2lkZS1lZmZlY3QgdGhhdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgZXhhbWluZWQgYmVjYXVzZSB0aGlzICpkb2VzKiBjaGFuZ2UgdGhlIGxvZ2ljIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGEgc3VidGxlIGJ1ZyBvciBjaGFuZ2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHN0cnVjdCBhcmdfdHJhY2tgIGFjdHVhbGx5ICpjb250YWlucyogdG8gYXNzZXNzIHRoZSBpbXBhY3QgaGVyZS4gTGV0IG1lIHB1bGwgdXAgaXRzIGRlZmluaXRpb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYXJnX3RyYWNrIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGl2ZW5lc3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmM9NTQ2PXN0YXRpYyBpbnQgcHJpbnRfaW5zdGFuY2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5NC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1OTU6c3RydWN0IGFyZ190cmFjayB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk2LVx0dW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgZnVsbCBzdHJ1Y3QgZGVmaW5pdGlvbiB0byBtYWtlIGFueSBtZWFuaW5nZnVsIGp1ZGdtZW50LiBJIGNhbiYjMzk7dCBqdXN0IG9wZXJhdGUgaW4gdGhlIGFic3RyYWN0OyBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBjb21wb25lbnRzLCB0aGVpciB0eXBlcywgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBlYWNoIG90aGVyIOKAkyBldmVyeXRoaW5nLiBUaGlzIGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGdldCB0aGUgZnVsbCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTQ6XHRcbiA1OTU6XHRzdHJ1Y3QgYXJnX3RyYWNrIHtcbiA1OTY6XHRcdHVuaW9uIHtcbiA1OTc6XHRcdFx0czE2IG9mZltNQVhfQVJHX09GRlNFVFNdOyAvKiBieXRlIG9mZnNldHM7IG9mZl9jbnQgc2F5cyBob3cgbWFueSAqL1xuIDU5ODpcdFx0XHR1MTYgbWFzaztcdC8qIGFyZyBiaXRtYXNrIHdoZW4gYXJnID09IEFSR19JTVBSRUNJU0UgKi9cbiA1OTk6XHRcdH07XG4gNjAwOlx0XHRzOCBmcmFtZTtcdC8qIGFic29sdXRlIGZyYW1lIGluZGV4LCBvciBlbnVtIGFyZ190cmFja19zdGF0ZSAqL1xuIDYwMTpcdFx0czggb2ZmX2NudDtcdC8qIDAgPSBvZmZzZXQtaW1wcmVjaXNlLCAxLTQgPSAjIG9mIHByZWNpc2Ugb2Zmc2V0cyAqL1xuIDYwMjpcdH07XG4gNjAzOlx0XG4gNjA0Olx0ZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIDYwNTpcdFx0QVJHX05PTkVcdD0gLTEsXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xuIDYwNjpcdFx0QVJHX1VOVklTSVRFRFx0PSAtMixcdC8qIG5vdCB5ZXQgcmVhY2hlZCBieSBkYXRhZmxvdyAqL1xuIDYwNzpcdFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gNjA4Olx0fTtcbiA2MDk6XHRcbiA2MTA6XHRzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfc3RhdGUoczggZnJhbWUpXG4gNjExOlx0e1xuIDYxMjpcdFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbiA2MTM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIGluIE9mZnNldCBUcmFja2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZTogd2Ugd2VudCBmcm9tIGV4cGxpY2l0bHkgc2V0dGluZyBgZHN0LSZndDtvZmZfY250ID0gMDtgIHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRpbmcgdGhlIGBhcmdfdHJhY2tgIHN0cnVjdCB3aXRoIHRoZSByZXN1bHQgb2YgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC0mZ3Q7ZnJhbWUpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogJiMzNDtIYW5nIG9uLCBkb2VzbiYjMzk7dCB0aGF0IHplcm8gb3V0IHRoZSBgb2ZmYCBhcnJheSB3aGVuIHdlIHByZXZpb3VzbHkgZGlkbiYjMzk7dD8mIzM0OyAKCkJ1dCB0aGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgb2ZmX2NudGAgaXMgdGhlICpjb3VudCogb2YgdmFsaWQgb2Zmc2V0cy4gU28sIGlmIGBvZmZfY250YCBpcyB6ZXJvLCB3ZSYjMzk7cmUgc3VwcG9zZWQgdG8gYmUgaWdub3JpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBgb2ZmYCBhcnJheSBhbnl3YXkuIFRoZXJlZm9yZSwgY2hhbmdpbmcgaXQgc2hvdWxkbiYjMzk7dCBhZmZlY3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLi4uIHRoZW9yZXRpY2FsbHkuCgpUaGUgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIGNoaW1lLCB0aG91Z2guIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnLCBlaXRoZXIgd2hlcmUgdGhlIGNvZGUgaXMgYWNjaWRlbnRhbGx5IGFjY2Vzc2luZyB0aGUgYG9mZmAgYXJyYXkgd2hlbiBgb2ZmX2NudGAgaXMgemVybyAoYSBkYXRhIGludGVncml0eSBpc3N1ZSksIG9yIHdoZXJlIHdlJiMzOTtyZSByZWx5aW5nIG9uIGEgbWVtb3J5IGNvbXBhcmlzb24gKGBtZW1jbXBgIG9yIHNpbWlsYXIpIG9uIHRoZSBlbnRpcmUgYHN0cnVjdCBhcmdfdHJhY2tgLCB3aGljaCBpcyBleHRyZW1lbHkgZGFuZ2Vyb3VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IHNlY29uZCBjYXNlIGlzIGhhcHBlbmluZywgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY21wLiphcmdfdHJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBTY2FuOiBFcXVhbGl0eSBDaGVja3MqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgb2YgZGlyZWN0IGVxdWFsaXR5IGNoZWNrcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdGVsbHRhbGUgc2lnbnM6IGA9PWAsIHBvc3NpYmx5IGA9PT1gIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSmF2YVNjcmlwdCwgYW5kIG1heWJlIGV2ZW4gYSBxdWljayBnbGFuY2UgZm9yIGNvbXBhcmlzb25zIGxpa2UgYCE9YCBvciBgIT09YC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRob3NlIHNwb3RzIGJlY2F1c2UgdGhleSYjMzk7cmUgb2Z0ZW4gdGhlIHNvdXJjZSBvZiBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgbG9naWMgZXJyb3JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggb2JqZWN0IHJlZmVyZW5jZXMsIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIG9yIHR5cGUgY29lcmNpb24uIEEgcXVpY2ssIHRhcmdldGVkIHJlZ2V4IG9yIGEgc2ltaWxhciBzZWFyY2ggd2l0aGluIHRoZSBjb2RlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHZlY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJnX3RyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saXZlbmVzcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGl2ZW5lc3MuYz01NDY9c3RhdGljIGludCBwcmludF9pbnN0YW5jZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTgzLSAqXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTg0OiAqIEF0IENGRyBtZXJnZSBwb2ludHMsIGFyZ190cmFja19qb2luKCkgbW92ZXMgZG93biB0aGUgbGF0dGljZTpcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01ODUtICogICAtIHNhbWUgZnJhbWUgJiM0Mzsgc2FtZSBvZmZzZXQgIC1cdTAwM2UgcHJlY2lzZVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01OTQtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTk1OnN0cnVjdCBhcmdfdHJhY2sge1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5Ni1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk5LVx0fTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MDA6XHRzOCBmcmFtZTtcdC8qIGFic29sdXRlIGZyYW1lIGluZGV4LCBvciBlbnVtIGFyZ190cmFja19zdGF0ZSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMS1cdHM4IG9mZl9jbnQ7XHQvKiAwID0gb2Zmc2V0LWltcHJlY2lzZSwgMS00ID0gIyBvZiBwcmVjaXNlIG9mZnNldHMgKi9cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjAzLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYwNDplbnVtIGFyZ190cmFja19zdGF0ZSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjA1LVx0QVJHX05PTkVcdD0gLTEsXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MDktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEwOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTEte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjYxMjpcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjEzLX1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTQtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjE1OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE2LXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MTc6XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MTgtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxOS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyMS17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjIyOlx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfVU5WSVNJVEVEKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjMtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyNC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjU6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoczggZnJhbWUpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI2LXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2Mjc6XHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjgtfVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyOS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MzA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MzEte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjYzMjpcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTYzMy19XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTY0ND1zdGF0aWMgaW50IHN0YWNrX2FyZ19vZmZfdG9fc2xvdChzMTYgb2ZmKVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NTItXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjUzOnN0YXRpYyBib29sIGFyZ19pc192aXNpdGVkKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1NC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Ny1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2NTg6c3RhdGljIGJvb2wgYXJnX2lzX2ZwKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1OS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY2Mi1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2NjM6c3RhdGljIHZvaWQgdmVyYm9zZV9hcmdfdHJhY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGFyZ190cmFjayAqYXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjY0LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjg1LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY4NjpzdGF0aWMgYm9vbCBhcmdfdHJhY2tfZXEoY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYSwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02ODcte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MDMtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA0OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19zaW5nbGUoczggYXJnLCBzMTYgb2ZmKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTcwNS17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA2Olx0c3RydWN0IGFyZ190cmFjayBhdCA9IHt9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTcwNy1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzE4LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcxOTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjAte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMTpcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMjpcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzIzLVx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc1NS0vKlxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc1NjogKiBNZXJnZSB0d28gYXJnX3RyYWNrcyBpbnRvIEFSR19JTVBSRUNJU0UsIGNvbGxlY3RpbmcgdGhlIGZyYW1lXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzU3LSAqIGJpdHMgZnJvbSBib3RoIG9wZXJhbmRzLiBQcmVjaXNlIGZyYW1lIGluZGljZXMgKGZyYW1lIFx1MDAzZT0gMClcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYwLSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjc2MTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfam9pbl9pbXByZWNpc2Uoc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrIGIpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYyLXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc0LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3NTpcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTc3Ni19XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc3LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3ODovKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3OTpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4MC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4Ny1cdFx0aWYgKGEub2ZmX2NudCA9PSAwIHx8IGIub2ZmX2NudCA9PSAwKVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc4ODpcdFx0XHRyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg5LVx0XHQvKiBNZXJnZSBvZmZzZXQgc2V0czsgZmFsbHMgYmFjayB0byBvZmZfY250PTAgaWYgXHUwMDNlNCAqL1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MTktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODIwOnN0YXRpYyBib29sIGFyZ190cmFja19qb2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCB0YXJnZXQsIGludCByLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjgyMTpcdFx0XHQgICBzdHJ1Y3QgYXJnX3RyYWNrICppbiwgc3RydWN0IGFyZ190cmFjayBvdXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODIyLXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjM6XHRzdHJ1Y3QgYXJnX3RyYWNrIG9sZCA9ICppbjtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjQ6XHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBfX2FyZ190cmFja19qb2luKG9sZCwgb3V0KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MjUtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODI2Olx0aWYgKGFyZ190cmFja19lcShcdTAwMjZuZXdfdmFsLCBcdTAwMjZvbGQpKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MzktXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmcCUmIzQzO2Q6IFwmIzM0OywgciAqIDgpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjg0MDpcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2b2xkKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NDEtXHR2ZXJib3NlKGVudiwgXCYjMzQ7ICYjNDM7IFwmIzM0Oyk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODQyOlx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZvdXQpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0My1cdHZlcmJvc2UoZW52LCBcJiMzNDsgPVx1MDAzZSBcJiMzNDspO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjg0NDpcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2bmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODQ1LVx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg1NC0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NTU6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg1Ni17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg2NC1cdFx0ICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODY1Olx0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NjYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODcyLVx0XHQgKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NzM6XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzcmMtXHUwMDNlZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTg3NC1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz04ODM9c3RhdGljIGJvb2wgYXJnX2FkZChzMTYgb2ZmLCBzNjQgZGVsdGEsIHMxNiAqb3V0KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTEtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODkyOnN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODkzLXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTAxLVx0XHRpZiAoYXJnX2FkZChhdC1cdTAwM2VvZmZbaV0sIGRlbHRhLCBcdTAwMjZuZXdfb2ZmKSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjkwMjpcdFx0XHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cdTAwM2VmcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTAzLVx0XHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9OTE0PXN0YXRpYyBpbnQgZnBfb2ZmX3RvX3Nsb3QoczE2IG9mZilcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTIyLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyMzpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBmaWxsX2Zyb21fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyNDpcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBpbnQgcmVnLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyNTpcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkyNi1cdFx0XHRcdFx0aW50IGRlcHRoKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkyNy17XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI4Olx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSBcdTAwM2NcdTAwM2MgKGRlcHRoICYjNDM7IDEpKSAtIDEpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyOTpcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05MzAtXHRpbnQgY250LCBpO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05NDgtXHRcdFx0cmV0dXJuIGltcDtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NDk6XHRcdHJlc3VsdCA9IF9fYXJnX3RyYWNrX2pvaW4ocmVzdWx0LCBhdF9zdGFja19vdXRbc2xvdF0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTk1MC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTU5LSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MDpzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NjE6XHRcdFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MjpcdFx0XHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05NjMte1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2NDpcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTY1Olx0c3RydWN0IGFyZ190cmFjayBuZXdfdmFsID0gc3ogPT0gOCA/ICp2YWwgOiBub25lO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTk2Ni1cdGludCBjbnQsIGk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk3Ny1cdFx0Zm9yIChpbnQgc2xvdCA9IDA7IHNsb3QgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHNsb3QmIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk3ODpcdFx0XHRhdF9zdGFja19vdXRbc2xvdF0gPSBfX2FyZ190cmFja19qb2luKGF0X3N0YWNrX291dFtzbG90XSwgbmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTc5LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk5Mi1cdFx0ZWxzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk5MzpcdFx0XHRhdF9zdGFja19vdXRbc2xvdF0gPSBfX2FyZ190cmFja19qb2luKGF0X3N0YWNrX291dFtzbG90XSwgbmV3X3ZhbCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTk0LVx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDAwLSAqL1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDE6c3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDAyLXtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDAzOlx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA0LVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA2LVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAwNzpcdFx0XHRhdF9zdGFja1tpXSA9IF9fYXJnX3RyYWNrX2pvaW4oYXRfc3RhY2tbaV0sIG5vbmUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDgtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAxNy1cdFx0XHRlbHNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAxODpcdFx0XHRcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAxOS1cdFx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI2PXN0YXRpYyB2b2lkIGNsZWFyX3N0YWNrX2Zvcl9hbGxfb2ZmcyhzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyNzpcdFx0XHRcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBpbnQgcmVnLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMjg6XHRcdFx0XHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCwgdTMyIHN6KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMjkte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDUxLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNTI6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2xvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBpZHgsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA1MzpcdFx0XHQgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X2luLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19pbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU0Olx0XHRcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA1NS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX1JFRzsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDYyOlx0XHRpZiAoYXJnX3RyYWNrX2VxKFx1MDAyNmF0X291dFtpXSwgXHUwMDI2YXRfaW5baV0pKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjMtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjktXHRcdH1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDcwOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0ciVkOiBcJiMzNDssIGkpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X2luW2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDcxOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IC1cdTAwM2UgXCYjMzQ7KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9vdXRbaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzItXHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzYtXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3NzpcdFx0aWYgKGFyZ190cmFja19lcShcdTAwMjZhdF9vdXRbYWldLCBcdTAwMjZhdF9pblthaV0pKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNzgtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwODQtXHRcdH1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDg1Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFx0c2ElZDogXCYjMzQ7LCBpKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9pblthaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODY6XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgLVx1MDAzZSBcJiMzNDspOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmF0X291dFthaV0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwODctXHR9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA4OTpcdFx0aWYgKGFyZ190cmFja19lcShcdTAwMjZhdF9zdGFja19vdXRbaV0sIFx1MDAyNmF0X3N0YWNrX2luW2ldKSlcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDkwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk2LVx0XHR9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA5NzpcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcdGZwJSYjNDM7ZDogXCYjMzQ7LCAtKGkgJiM0MzsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA5ODpcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyAtXHUwMDNlIFwmIzM0Oyk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXHUwMDI2YXRfc3RhY2tfb3V0W2ldKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk5LVx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTAzLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMDQ6c3RhdGljIGJvb2wgY2FuX2JlX2xvY2FsX2ZwKGludCBkZXB0aCwgaW50IHJlZ25vLCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTA1LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExMC0vKlxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTE6ICogUHVyZSBkYXRhZmxvdyB0cmFuc2ZlciBmdW5jdGlvbiBmb3IgYXJnX3RyYWNrIHN0YXRlLlxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTItICogVXBkYXRlcyBhdF9vdXRbXSBiYXNlZCBvbiBob3cgdGhlIGluc3RydWN0aW9uIG1vZGlmaWVzIHJlZ2lzdGVycy5cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExNC0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE1OnN0YXRpYyB2b2lkIGFyZ190cmFja194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE2LVx0XHRcdCAgIGludCBpbnNuX2lkeCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE3Olx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTg6XHRcdFx0ICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfYXJnX2VudHJ5LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTktXHRcdFx0ICAgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTI0LVx0dTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMjU6XHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI2Olx0c3RydWN0IGFyZ190cmFjayAqc3JjID0gXHUwMDI2YXRfb3V0W2luc24tXHUwMDNlc3JjX3JlZ107XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyNzpcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTEyOC1cdGludCByLCBzbG90O1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTUxLVx0XHRcdFx0LyogQW55IG90aGVyIDY0LWJpdCBhbHUgb24gdGhlIHBvaW50ZXIgbWFrZXMgaXQgaW1wcmVjaXNlICovXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE1MjpcdFx0XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNTMtXHRcdH0gLyogZWxzZSBpZiBkc3QtXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjItXHRcdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE2MzpcdFx0XHRhcmdfdHJhY2tfYWx1NjQoZHN0LCBzcmMpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjQtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE3My1cdFx0ICogYXRfc3RhY2tfb3V0W3Nsb3RdIGlzIG5vdCBjbGVhcmVkIGJ5IHRoZSBoZWxwZXIgYW5kIHN1YnByb2cgY2FsbHMuXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE3NDpcdFx0ICogVGhlIGZpbGxfZnJvbV9zdGFjaygpIG1heSByZXR1cm4gdGhlIHN0YWxlIHNwaWxsIOKAlCB3aGljaCBpcyBhbiBGUC1kZXJpdmVkIGFyZ190cmFja1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNzUtXHRcdCAqICh0aGUgdmFsdWUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGlsbGVkIHRoZXJlKS4gVGhlIGxvYWRlZCByZWdpc3RlciB0aGVuIGNhcnJpZXNcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIwMy1cdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gXHUwMDI2XHUwMDI2IHN6ID09IDgpIHtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMjA0Olx0XHRcdHN0cnVjdCBhcmdfdHJhY2sgKnBhcmVudF9zdGFjayA9XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIwNS1cdFx0XHRcdGVudi1cdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tjYWxsc2l0ZXNbc3JjLVx1MDAzZWZyYW1lXV07XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzMDg9c3RhdGljIGludCByZWNvcmRfc3RhY2tfYWNjZXNzKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzA5Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphcmcsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTMxMC1cdFx0XHQgICAgICAgczY0IGFjY2Vzc19ieXRlcywgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzNTU9c3RhdGljIGludCByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzU2LVx0XHRcdFx0ICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzU3Olx0XHRcdFx0ICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBpbnQgaW5zbl9pZHgpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM1OC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjItXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjEzNjM6XHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc29sdmVkLCAqcHRyO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjQtXHRpbnQgb2k7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjctXHQgKiBTdGFjayBhcmcgaW5zbnMgdXNlIGRzdF9yZWcvc3JjX3JlZz1CUEZfUkVHX1BBUkFNUygxMSkuIFNpbmNlIGF0W11cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzY4Olx0ICogaXMgZXh0ZW5kZWQgdG8gTUFYX0FUX1RSQUNLX1JFR1MsIGF0WzExXSBob2xkcyB0aGUgYXJnX3RyYWNrIGZvclxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNjktXHQgKiBvdXRnb2luZyBzdGFjayBhcmcgc2xvdCAwIOKAlCBub3QgdGhlIHBvaW50ZXIgdXNlZCBmb3IgdGhlIG1lbW9yeVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAwLVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDE6XHQvKiBSZXNvbHZlIG9mZnNldHM6IGZvbGQgaW5zbi1cdTAwM2VvZmYgaW50byBhcmdfdHJhY2sgKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAyLVx0aWYgKHB0ci1cdTAwM2VvZmZfY250IFx1MDAzZSAwKSB7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQwMzpcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA0LVx0XHRyZXNvbHZlZC5vZmZfY250ID0gcHRyLVx1MDAzZW9mZl9jbnQ7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDYtXHRcdFx0aWYgKGFyZ19hZGQocHRyLVx1MDAzZW9mZltvaV0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDc6XHRcdFx0XHRyZXNvbHZlZCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHB0ci1cdTAwM2VmcmFtZSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQwOC1cdFx0XHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNDIyPXN0YXRpYyBpbnQgcmVjb3JkX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQyNC1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNDI1Olx0XHRcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBhcmdfaWR4LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjYtXHRcdFx0ICAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE0NTk9c3RhdGljIGludCByZWNvcmRfY2FsbF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDYwLVx0XHRcdCAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNDYxOlx0XHRcdCAgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0LFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0NjItXHRcdFx0ICAgICAgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNTQxPXN0cnVjdCBzdWJwcm9nX2F0X2luZm8ge1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE1NDI6XHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTQzLVx0aW50IGxlbjtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTU0Nj1zdGF0aWMgdm9pZCBwcmludF9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0OC1cdFx0XHRcdCAgICAgc3RydWN0IHN1YnByb2dfYXRfaW5mbyAqaW5mbyxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNTQ5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdKVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE1NTAte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAwLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyByJWQ9XCYjMzQ7LCByKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjAxOlx0XHRcdFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZpbmZvLVx1MDAzZWF0X2luW2ldW3JdKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAyLVx0XHRcdH1cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYwNi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDsgc2ElZD1cJiMzNDssIHIpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2MDc6XHRcdFx0XHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFx1MDAyNmluZm8tXHUwMDNlYXRfaW5baV1bTUFYX0JQRl9SRUcgJiM0Mzsgcl0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDgtXHRcdFx0fVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjE1LVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyBmcCUmIzQzO2Q9XCYjMzQ7LCAtKHIgJiM0MzsgMSkgKiA4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjE2Olx0XHRcdFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcdTAwMjZhdF9zdGFja19pbltpXVtyXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNy1cdFx0XHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MjctICogQ29tcHV0ZSBhcmcgdHJhY2tpbmcgZGF0YWZsb3cgZm9yIGEgc2luZ2xlIHN1YnByb2cuXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYyODogKiBSdW5zIGZvcndhcmQgZml4ZWQtcG9pbnQgd2l0aCBhcmdfdHJhY2tfeGZlcigpLCB0aGVuIHJlY29yZHNcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjI5LSAqIG1lbW9yeSBhY2Nlc3NlcyBpbiBhIHNpbmdsZSBsaW5lYXIgcGFzcyBvdmVyIGNvbnZlcmdlZCBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTYzNT1zdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYzNi1cdFx0XHRcdHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYzNzpcdFx0XHRcdHN0cnVjdCBhcmdfdHJhY2sgKmNhbGxlZV9lbnRyeSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjM4LVx0XHRcdFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjQ4LVx0aW50IGxlbiA9IGVuZCAtIHN0YXJ0O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NDk6XHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXSA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MDpcdHN0cnVjdCBhcmdfdHJhY2sgYXRfb3V0W01BWF9BVF9UUkFDS19SRUdTXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjUxOlx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MjpcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCA9IE5VTEw7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MzpcdHN0cnVjdCBhcmdfdHJhY2sgYXRfc3RhY2tfYXJnX2VudHJ5W01BWF9TVEFDS19BUkdfU0xPVFNdO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTQ6XHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjU1Olx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjU2LVx0Ym9vbCBjaGFuZ2VkO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE1LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MTY6XHRcdGFyZ190cmFja194ZmVyKGVudiwgaW5zbiwgaWR4LCBhdF9vdXQsIGF0X3N0YWNrX291dCxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE3LVx0XHRcdCAgICAgICBhdF9zdGFja19hcmdfZW50cnksIGluc3RhbmNlLCBjYWxsc2l0ZXMpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MTg6XHRcdGFyZ190cmFja19sb2coZW52LCBpbnNuLCBpZHgsIGF0X2luW2ldLCBhdF9zdGFja19pbltpXSwgYXRfb3V0LCBhdF9zdGFja19vdXQpO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3MTktXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3MzEtXHRcdFx0Zm9yIChyID0gMDsgciBcdTAwM2MgTUFYX0FUX1RSQUNLX1JFR1M7IHImIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MzI6XHRcdFx0XHRjaGFuZ2VkIHw9IGFyZ190cmFja19qb2luKGVudiwgaWR4LCB0YXJnZXQsIHIsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczMy1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2YXRfaW5bdGldW3JdLCBhdF9vdXRbcl0pO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM1LVx0XHRcdGZvciAociA9IDA7IHIgXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHImIzQzOyYjNDM7KVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3MzY6XHRcdFx0XHRjaGFuZ2VkIHw9IGFyZ190cmFja19qb2luKGVudiwgaWR4LCB0YXJnZXQsIC1yIC0gMSxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM3LVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZhdF9zdGFja19pblt0aV1bcl0sIGF0X3N0YWNrX291dFtyXSk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3NjgtXHRcdFx0bWVtY3B5KGVudi1cdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tpZHhdLFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3Njk6XHRcdFx0ICAgICAgIGF0X3N0YWNrX2luW2ldLCBzaXplb2Yoc3RydWN0IGFyZ190cmFjaykgKiBNQVhfQVJHX1NQSUxMX1NMT1RTKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzcwLVx0XHR9XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3ODYtLyogUmV0dXJuIHRydWUgaWYgYW55IG9mIFIxLVI1IG9yIHN0YWNrIGFyZ3MgaXMgZGVyaXZlZCBmcm9tIGEgZnJhbWUgcG9pbnRlci4gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzg3OnN0YXRpYyBib29sIGhhc19mcF9hcmdzKHN0cnVjdCBhcmdfdHJhY2sgKmFyZ3MpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc4OC17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4Njg9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxODY5Olx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKmVudHJ5X2FyZ3MsXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTg3MC1cdFx0XHQgICBzdHJ1Y3Qgc3VicHJvZ19hdF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTE3LVx0XHRpbnQgaWR4ID0gZW52LVx1MDAzZWNmZy5pbnNuX3Bvc3RvcmRlcltwXTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxOTE4Olx0XHRzdHJ1Y3QgYXJnX3RyYWNrIGNhbGxlZV9hcmdzW01BWF9BVF9UUkFDS19SRUdTXSA9IHt9O1xua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5MTk6XHRcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTkyMC1cdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2aW5zbnNbaWR4XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEFyZyBUcmFja2luZzogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IHRoZXNlIHN0cnVjdCBpbml0aWFsaXplcnMgZm9yIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBlc3NlbnRpYWxseS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgY2xlYW5lciBjb2RlIGFuZCBwb3RlbnRpYWxseSBmZXdlciBlcnJvcnMuCgpJbml0aWFsbHksIEkgc2VlIGBhcmdfdHJhY2tfc3RhdGVgIGJlaW5nIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCBpbnN0YW5jZXMuIFRoZSBjbGV2ZXIgYml0IGhlcmUgaXMgbGV2ZXJhZ2luZyBDJiMzOTtzIHN0cnVjdCBpbml0aWFsaXplciB6ZXJvaW5nOyBpZiB5b3UgcHJvdmlkZSBhIGAuZnJhbWUgPSBmcmFtZWAgaW5pdGlhbGl6ZXIsIGV2ZXJ5dGhpbmcgZWxzZSDigJMgYG9mZl9jbnRgLCBgb2ZmYCwgYG1hc2tgIOKAkyBpcyBpbXBsaWNpdGx5IHplcm9lZC4gTWFrZXMgc2Vuc2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGAuZnJhbWUgPSBhLmZyYW1lYCB3aXRoIHRoZSByZW1haW5kZXIgYmVpbmcgemVyby1pbml0aWFsaXplZC4gTmljZSEKCk5vdywgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBzb21ldGhpbmcgbGlrZSBgZHN0LSZndDtvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtJmd0O2ZyYW1lKTtgLiAgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBpdHNlbGYganVzdCBjYWxscyBgYXJnX3RyYWNrX3N0YXRlYC4gU28sIHRoZSBpbXBhY3QgaXMgaXQmIzM5O3Mgc2V0dGluZyB0aGUgYGZyYW1lYCBhbmQgemVyb2luZyBvdXQgKmV2ZXJ5dGhpbmcqIGluIHRoZSBzdHJ1Y3QsIHdoZXJlYXMgcHJldmlvdXNseSBvbmx5IHRoZSBgb2ZmX2NudGAgd2FzIGJlaW5nIGNsZWFyZWQuCgpNeSBmaXJzdCB0aG91Z2h0OiBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmcgZnVuY3Rpb25hbGx5PyAgYGFyZ190cmFja19lcWAgb25seSBjaGVja3MgdGhlIGBvZmZgIGFycmF5IHVwIHRvIGBvZmZfY250YCwgYW5kIHVzZXMgdGhlIGBtYXNrYCBvbmx5IHdoZW4gYGZyYW1lYCBpcyBgQVJHX0lNUFJFQ0lTRWAuIEFzIGxvbmcgYXMgd2UgZW5zdXJlIGBvZmZfY250YCBpcyBwcm9wZXJseSBzZXQsIGl0IGFsbCBzZWVtcyB0aGUgc2FtZS4gVGhlIHVudXNlZCBiaXRzIG9mIGBvZmZgIGFuZCBgbWFza2AgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYWNjZXNzZWQsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQgZ2l2ZW4gdGhlIGVhcmxpZXIgYW5hbHlzaXMuCgpJJiMzOTttIHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIGV2ZXJ5IHBsYWNlIGBvZmZgIG9yIGBtYXNrYCBpcyB1c2VkLiAgYGFyZ19tZXJnZV9vZmZzZXRzYCwgYGFyZ19qb2luX2ltcHJlY2lzZWAsIGFsbCB0aG9zZSBmdW5jdGlvbnMgb25seSB1c2UgdXAgdG8gYG9mZl9jbnRgIG9yIHJlYWQgYG1hc2tgIHdoZW4gZnJhbWUgaXMgYEFSR19JTVBSRUNJU0VgLiBPa2F5LCBzbyBmYXIsIHNvIGdvb2QuCgpUaGVyZSYjMzk7cyBubyBgbWVtY21wYCBvciBhbnkgZGlyZWN0IGNvbXBhcmlzb24gb2YgdGhlIGVudGlyZSBzdHJ1Y3QgdGhhdCBJIGNhbiBmaW5kLCBlaXRoZXIuIFNvIGl0IGRvZXMgc2VlbSB0byBiZSBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyBhdCB0aGlzIHBvaW50LgoKVGhlbiBJIGxvb2sgYXQgdGhlIGBhcmdfdHJhY2tfYWx1NjRgIGFuZCBgYXJnX3BhZGRgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGxpbmVzIHRoYXQgemVyb2VkIGBvZmZfY250YCB3aXRoIGxpbmVzIHRoYXQgbm93IHplcm8gb3V0IHRoZSB3aG9sZSBzdHJ1Y3QuICBGdW5jdGlvbmFsbHksIGlkZW50aWNhbC4KCkZpbmFsbHksIEkgZ290IHRvIGByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3NgLiBUaGVyZSYjMzk7cyBhIHN1YnRsZSBjaGFuZ2UgaGVyZSwgdGhlIGByZXNvbHZlZGAgdmFyaWFibGUgaXMgbm93IGNvcnJlY3RseSBpbml0aWFsaXplZCB0byB6ZXJvLiBCZWZvcmUsIGl0IGxvb2tlZCBsaWtlIGByZXNvbHZlZGAgd2FzIGJlaW5nIHVzZWQgdW5pbml0aWFsaXplZCBpZiBgcHRyLSZndDtvZmZfY250YCB3YXMgYDBgLCBhcyB0aGUgY29kZSB3b3VsZCBvbmx5IHNldCBzb21lIGZpZWxkcy4gVGhlIG9sZGVyIGNvZGUgZGlkIG5vdCBpbml0aWFsaXplIHRoZSB3aG9sZSBzdHJ1Y3QgYW5kIHdhcyBwb3RlbnRpYWxseSByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZvciB0aGUgb3RoZXIgdmFsdWVzLiBUaGlzIGxvb2tzIGxpa2UgYSBidWcgZml4ISAgU2luY2UgdGhlIG5ldyBjb2RlIHNldHMgYHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci0mZ3Q7ZnJhbWUpYCwgbm93IHRoZSByZXN0IG9mIHN0cnVjdCBpcyB6ZXJvZWQuCgpPa2F5LCBzbyBpdCYjMzk7cyBzYWZlciwgYnV0IEkgKnRoaW5rKiB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUuICBJZiBgcmVzb2x2ZWQub2ZmX2NudCA9PSAwYCwgdGhlIHBvaW50ZXIgYHB0cmAgZ290IHNldCB0byBwb2ludCB0byBgcmVzb2x2ZWRgLgpJdCAqbG9va3MqIGxpa2UgaWYgYHB0ci0mZ3Q7b2ZmX2NudCA9PSAwYCB0aGUgdmFsdWUgb2YgYHJlc29sdmVkLm1hc2tgIHdhcyBub3QgaW1wb3J0YW50IGJlY2F1c2UgYHB0ci0mZ3Q7ZnJhbWVgIHdhcyBub3QgYEFSR19JTVBSRUNJU0VgLgpUaGUgY2hhbmdlcyBlbnN1cmUgdGhpcyBpcyBuZXZlciB0aGUgY2FzZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBleHBsaWNpdGx5IHplcm8gaW5pdGlhbGl6ZWQuCgpTbywgb3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCByZWZhY3RvcmluZy4gQ2xlYW5lciwgbGVzcyBlcnJvci1wcm9uZSwgYW5kIGxpa2VseSBmaXhlZCBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nLCBidXQgZGVmaW5pdGVseSBhIG5ldCBwb3NpdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcbjE0MDE6XHRcdC8qIFJlc29sdmUgb2Zmc2V0czogZm9sZCBpbnNuLVx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xuMTQwMjpcdFx0aWYgKHB0ci1cdTAwM2VvZmZfY250IFx1MDAzZSAwKSB7XG4xNDAzOlx0XHRcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cdTAwM2VmcmFtZSk7XG4xNDA0Olx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXHUwMDNlb2ZmX2NudDtcbjE0MDU6XHRcdFx0Zm9yIChvaSA9IDA7IG9pIFx1MDAzYyBwdHItXHUwMDNlb2ZmX2NudDsgb2kmIzQzOyYjNDM7KSB7XG4xNDA2Olx0XHRcdFx0aWYgKGFyZ19hZGQocHRyLVx1MDAzZW9mZltvaV0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xuMTQwNzpcdFx0XHRcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXHUwMDNlZnJhbWUpO1xuMTQwODpcdFx0XHRcdFx0YnJlYWs7XG4xNDA5Olx0XHRcdFx0fVxuMTQxMDpcdFx0XHR9XG4xNDExOlx0XHRcdHB0ciA9IFx1MDAyNnJlc29sdmVkO1xuMTQxMjpcdFx0fVxuMTQxMzpcdFxuMTQxNDpcdFx0aWYgKHB0ci1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHB0ci1cdTAwM2VmcmFtZSBcdTAwM2M9IGRlcHRoKVxuMTQxNTpcdFx0XHRyZXR1cm4gcmVjb3JkX3N0YWNrX2FjY2VzcyhpbnN0YW5jZSwgcHRyLCBzeiwgcHRyLVx1MDAzZWZyYW1lLCBpbnNuX2lkeCk7XG4xNDE2Olx0XHRpZiAocHRyLVx1MDAzZWZyYW1lID09IEFSR19JTVBSRUNJU0UpXG4xNDE3Olx0XHRcdHJldHVybiByZWNvcmRfaW1wcmVjaXNlKGluc3RhbmNlLCBwdHItXHUwMDNlbWFzaywgaW5zbl9pZHgpO1xuMTQxODpcdFx0LyogQVJHX05PTkU6IG5vdCBkZXJpdmVkIGZyb20gYW55IGZyYW1lIHBvaW50ZXIsIHNraXAgKi9cbjE0MTk6XHRcdHJldHVybiAwO1xuMTQyMDpcdH1cbjE0MjE6XHRcbjE0MjI6XHRzdGF0aWMgaW50IHJlY29yZF9hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xNDIzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXG4xNDI0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4xNDI1Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCwgaW50IGFyZ19pZHgsXG4xNDI2Olx0XHRcdFx0ICAgICBpbnQgaW5zbl9pZHgpXG4xNDI3Olx0e1xuMTQyODpcdFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXHUwMDNlZGVwdGg7XG4xNDI5Olx0XHRpbnQgZnJhbWUgPSBhdC1cdTAwM2VmcmFtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBUcmFja2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSByZWNvcmRpbmcgbWVtb3J5IGFjY2Vzc2VzLiBUaGUgcG9pbnRlciwgYHB0cmAsIGlzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCB0byBlaXRoZXIgYHJlY29yZF9zdGFja19hY2Nlc3NgIG9yIGByZWNvcmRfaW1wcmVjaXNlYCwgZGVwZW5kaW5nIG9uIHNvbWUgY29uZGl0aW9uLiAgTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcHRyLSZndDtmcmFtZSAmZ3Q7PSAwYCBjaGVjay4gSWYgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSwgd2UmIzM5O3JlIG9mZiB0byBgcmVjb3JkX3N0YWNrX2FjY2Vzc2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoYXQgcGF0aC4gSXQmIzM5O3MgY2FsbGluZyBgcmVjb3JkX3N0YWNrX2FjY2Vzc2Agd2l0aCB0aGUgYGluc3RhbmNlYCwgdGhlIHBvaW50ZXIgYHB0cmAsIHRoZSBzaXplIGBzemAsICBgcHRyLSZndDtmcmFtZWAsIGFuZCBgaW5zbl9pZHhgLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCB0cmFja2luZyBhY2Nlc3NlcyB0byBzdGFjay1hbGxvY2F0ZWQgbWVtb3J5LCBzZWVtcyBsaWtlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIG9mIHRob3NlIHBhcmFtZXRlcnMgcmVwcmVzZW50cyBpbiBjb250ZXh0IG9mIHRoZSBtZW1vcnkgYWNjZXNzIGFuZCBzdGFjayBmcmFtZSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZGlnIGludG8gYHJlY29yZF9zdGFja19hY2Nlc3NgIGFuZCBkaXNzZWN0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpdmVuZXNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDg6XHRzdGF0aWMgaW50IHJlY29yZF9zdGFja19hY2Nlc3Moc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxuMTMwOTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphcmcsXG4xMzEwOlx0XHRcdFx0ICAgICAgIHM2NCBhY2Nlc3NfYnl0ZXMsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxuMTMxMTpcdHtcbjEzMTI6XHRcdGludCBpLCBlcnI7XG4xMzEzOlx0XG4xMzE0Olx0XHRpZiAoYWNjZXNzX2J5dGVzID09IDApXG4xMzE1Olx0XHRcdHJldHVybiAwO1xuMTMxNjpcdFx0aWYgKGFyZy1cdTAwM2VvZmZfY250ID09IDApIHtcbjEzMTc6XHRcdFx0aWYgKGFjY2Vzc19ieXRlcyBcdTAwM2UgMCB8fCBhY2Nlc3NfYnl0ZXMgPT0gUzY0X01JTilcbjEzMTg6XHRcdFx0XHRyZXR1cm4gbWFya19zdGFja19yZWFkKGluc3RhbmNlLCBmcmFtZSwgaW5zbl9pZHgsIFNQSVNfQUxMKTtcbjEzMTk6XHRcdFx0cmV0dXJuIDA7XG4xMzIwOlx0XHR9XG4xMzIxOlx0XHRpZiAoYWNjZXNzX2J5dGVzICE9IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGFjY2Vzc19ieXRlcyBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW9mZl9jbnQgIT0gMSlcbjEzMjI6XHRcdFx0LyogbXVsdGktb2Zmc2V0IHdyaXRlIGNhbm5vdCBzZXQgc3RhY2tfZGVmICovXG4xMzIzOlx0XHRcdHJldHVybiAwO1xuMTMyNDpcdFxuMTMyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJnLVx1MDAzZW9mZl9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4xMzI2Olx0XHRcdGVyciA9IHJlY29yZF9zdGFja19hY2Nlc3Nfb2ZmKGluc3RhbmNlLCBhcmctXHUwMDNlb2ZmW2ldLCBhY2Nlc3NfYnl0ZXMsIGZyYW1lLCBpbnNuX2lkeCk7XG4xMzI3Olx0XHRcdGlmIChlcnIpXG4xMzI4Olx0XHRcdFx0cmV0dXJuIGVycjtcbjEzMjk6XHRcdH1cbjEzMzA6XHRcdHJldHVybiAwO1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHQvKlxuMTMzNDpcdCAqIFdoZW4gYSBwb2ludGVyIGlzIEFSR19JTVBSRUNJU0UsIGNvbnNlcnZhdGl2ZWx5IG1hcmsgZXZlcnkgZnJhbWUgaW5cbjEzMzU6XHQgKiB0aGUgYml0bWFzayBhcyBmdWxseSB1c2VkLlxuMTMzNjpcdCAqL1xuMTMzNzpcdHN0YXRpYyBpbnQgcmVjb3JkX2ltcHJlY2lzZShzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBtYXNrLCB1MzIgaW5zbl9pZHgpXG4xMzM4Olx0e1xuMTMzOTpcdFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXHUwMDNlZGVwdGg7XG4xMzQwOlx0XHRpbnQgZiwgZXJyO1xuMTM0MTpcdFxuMTM0MjpcdFx0Zm9yIChmID0gMDsgbWFzazsgZiYjNDM7JiM0MzssIG1hc2sgXHUwMDNlXHUwMDNlPSAxKSB7XG4xMzQzOlx0XHRcdGlmICghKG1hc2sgXHUwMDI2IDEpKVxuMTM0NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTM0NTpcdFx0XHRpZiAoZiBcdTAwM2M9IGRlcHRoKSB7XG4xMzQ2Olx0XHRcdFx0ZXJyID0gbWFya19zdGFja19yZWFkKGluc3RhbmNlLCBmLCBpbnNuX2lkeCwgU1BJU19BTEwpO1xuMTM0NzpcdFx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjM0CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDE0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyB3aXRoIE5vIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIHRoYXQgdGhlIHBhdGNoIHdhcyBhIHNpbXBsZSByZWZhY3RvcmluZywgYW5kIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIHRoYXQmIzM5O3Mgc3RpbGwgdGhlIGNhc2UuIFNwZWNpZmljYWxseSwgaWYgYGFyZy0mZ3Q7b2ZmX2NudCA9PSAwYCwgYHJlY29yZF9zdGFja19hY2Nlc3NgIGRvZXMgKm5vdCogcmVhZCBmcm9tIHRoZSBgYXJnLSZndDtvZmZgIGFycmF5LiBUaGF0IHVuaW5pdGlhbGl6ZWQgYG9mZmAgYXJyYXkgd2l0aGluIHRoZSBgcmVzb2x2ZWRgIHN0cnVjdHVyZSB3YXMgbmV2ZXIgYWNjZXNzZWQsIGJhc2VkIG9uIHRoZSBjb250cm9sIGZsb3cuCgpUaGUgZGlmZnMgcmV2ZWFsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVwbGFjaW5nIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gd2l0aCBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19pbXByZWNpc2UoKWAsIGBhcmdfdHJhY2tfc3RhdGUoKWAsIGBhcmdfdHJhY2tfbm9uZSgpYCwgYW5kIGBhcmdfdHJhY2tfdW52aXNpdGVkKClgLiBGb3IgZXhhbXBsZSwgYSBjb21tb24gc25pcHBldCBsaWtlIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07YCBpcyByZXBsYWNlZCB3aXRoIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO2AuIEkmIzM5O3ZlIGNoZWNrZWQgdGhlc2UgcmVwbGFjZW1lbnRzIGFuZCB0aGV5IGFyZSBpZGVudGljYWwuCgpUaGUgbW9zdCBjcml0aWNhbCB0aGluZyB0byBjb25maXJtIGlzIHRoYXQgdGhlcmUgYXJlICpubyogZnVuY3Rpb25hbCBjaGFuZ2VzIGhpZGRlbiB3aXRoaW4gdGhpcyB0cmFuc2Zvcm1hdGlvbi4gVGhlIGxvZ2ljIG11c3QgYmUgaWRlbnRpY2FsLiBUbyBlbnN1cmUgdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdWJ0bGUgZGlmZmVyZW5jZXMuIFRoZSBgc3RydWN0IGFyZ190cmFja2Agc3RydWN0IHVzZXMgYSB1bmlvbiwgd2l0aCBhIGJ5dGUgb2Zmc2V0IGFycmF5IG9yIGEgYml0bWFzaywgYWxvbmcgd2l0aCBhIGBmcmFtZWAgYW5kIGBvZmZfY250YC4KCldoZW4gdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVkIHRoZSB1bnVzZWQgbWVtYmVycy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSlgLCBhbHNvIHJlc3VsdCBpbiBzdHJ1Y3QgbWVtYmVycyBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBTbywgYXQgdGhhdCBsZXZlbCwgd2UgYXJlIGdvb2QuCgpUaGUgb25seSByZWFsIGRpZmZlcmVuY2UgY29tZXMgd2hlbiBsb29raW5nIGF0IHRoZSBjb2RlIHJlcGxhY2VkIGJ5IGAqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoLi4uKWAuIEhlcmUsIHRoZSBvbGQgY29kZSB1c2VkIGBkc3QtJmd0O29mZl9jbnQgPSAwO2AsIGxlYXZpbmcgYGRzdC0mZ3Q7b2ZmYCBhbmQgYGRzdC0mZ3Q7bWFza2AgdW50b3VjaGVkLCB3aGlsZSB0aGUgbmV3IGNvZGUgemVyb3Mgb3V0IGBkc3QtJmd0O29mZmAgYW5kIGBkc3QtJmd0O21hc2tgLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSBhY2Nlc3MgcGF0dGVybnMuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSwgYW5kIGBvZmZgIGlzIG9ubHkgYWNjZXNzZWQgd2hlbiBgb2ZmX2NudGAgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBgbWFza2AgaXMgb25seSB1c2VkIHdoZW4gYGZyYW1lID09IEFSR19JTVBSRUNJU0VgLiBJbiB0aGUgY29udGV4dCB3aGVyZSBgZHN0LSZndDtvZmZfY250ID0gMGAgd2FzIHVzZWQsIHRoZSByZWxldmFudCBgZHN0LSZndDtmcmFtZWAgd2FzIG5vdCBgQVJHX0lNUFJFQ0lTRWAgKGl0IHdhcyByZWxhdGVkIHRvIGltcHJlY2lzZSBvZmZzZXRzKS4gU28sIHplcm9pbmcgb3V0IGBvZmZgIGFuZCBgbWFza2AgaW4gdGhlIG5ldyBjb2RlIGhhcyBubyBmdW5jdGlvbmFsIGVmZmVjdCBiZWNhdXNlIHRoZXkgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2VkLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljIGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIHByb2dyYW0mIzM5O3MgZXhlY3V0aW9uIG9yIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBidWdzLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHRvIGltcHJvdmUgY29kZSByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIHdpbGwgZmxhZyB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI4OjU5LjMwMTI4Nzc5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzM4NzMyNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI4OjU5LjMwMTI5NjI1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MjgzMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGEzMWZjNjgwOWFiZjM0ZGZjZmE3YjIxNjI0ZWM1N2VjNTI1ZGYxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMzoyODo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5pbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXFxuQEAgLTYwNyw2ICs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xcbiBcXHRBUkdfSU1QUkVDSVNFXFx0PSAtMyxcXHQvKiBsb3N0IGlkZW50aXR5OyAubWFzayBpcyBhcmcgYml0bWFzayAqL1xcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3N0YXRlKHM4IGZyYW1lKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja191bnZpc2l0ZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19VTlZJU0lURUQpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShzOCBmcmFtZSlcXG4re1xcbitcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG1hc2ssIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcXG4rfVxcbitcXG4gLyogVHJhY2sgY2FsbGVlIHN0YWNrIHNsb3RzIGZwLTggdGhyb3VnaCBmcC01MTIgKDY0IHNsb3RzIG9mIDggYnl0ZXMgZWFjaCkgKi9cXG4gI2RlZmluZSBNQVhfQVJHX1NQSUxMX1NMT1RTIDY0XFxuIFxcbkBAIC02OTMsOCArNzE4LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3NpbmdsZShzOCBhcmcsIHMxNiBvZmYpXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbitcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcXG4gXFx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XFxuIFxcbiBcXHR3aGlsZSAoaSBcXHUwMDNjIGEub2ZmX2NudCBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgYi5vZmZfY250KSB7XFxuQEAgLTc0Nyw3ICs3NzIsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfam9pbl9pbXByZWNpc2Uoc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrXFxuIFxcdGVsc2UgaWYgKGIuZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcXG4gXFx0XFx0bSB8PSBiLm1hc2s7XFxuIFxcbi1cXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcXG4rXFx0cmV0dXJuIGFyZ190cmFja19pbXByZWNpc2UobSk7XFxuIH1cXG4gXFxuIC8qIEpvaW4gdHdvIGFyZ190cmFjayB2YWx1ZXMgYXQgbWVyZ2UgcG9pbnRzICovXFxuQEAgLTc2MCw3ICs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxcbiBcXHRpZiAoYS5mcmFtZSA9PSBiLmZyYW1lIFxcdTAwMjZcXHUwMDI2IGEuZnJhbWUgXFx1MDAzZT0gMCkge1xcbiBcXHRcXHQvKiBCb3RoIG9mZnNldC1pbXByZWNpc2U6IHN0YXkgaW1wcmVjaXNlICovXFxuIFxcdFxcdGlmIChhLm9mZl9jbnQgPT0gMCB8fCBiLm9mZl9jbnQgPT0gMClcXG4tXFx0XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gYS5mcmFtZSB9O1xcbitcXHRcXHRcXHRyZXR1cm4gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYS5mcmFtZSk7XFxuIFxcdFxcdC8qIE1lcmdlIG9mZnNldCBzZXRzOyBmYWxscyBiYWNrIHRvIG9mZl9jbnQ9MCBpZiBcXHUwMDNlNCAqL1xcbiBcXHRcXHRyZXR1cm4gYXJnX21lcmdlX29mZnNldHMoYSwgYik7XFxuIFxcdH1cXG5AQCAtODM3LDcgKzg2Miw3IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19hbHU2NChzdHJ1Y3QgYXJnX3RyYWNrICpkc3QsIGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKnNyYylcXG4gXFx0XFx0ICogclggKz0gclkgd2hlcmUgclkgaXMgbm90IGFyZyBkZXJpdmVkXFxuIFxcdFxcdCAqIHJYICs9IHJYXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRkc3QtXFx1MDAzZW9mZl9jbnQgPSAwO1xcbitcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXHRpZiAoc3JjLVxcdTAwM2VmcmFtZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNlZnJhbWUgPT0gQVJHX05PTkUpIHtcXG5AQCAtODQ1LDggKzg3MCw3IEBAIHN0YXRpYyB2b2lkIGFyZ190cmFja19hbHU2NChzdHJ1Y3QgYXJnX3RyYWNrICpkc3QsIGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKnNyYylcXG4gXFx0XFx0ICogclggKz0gclkgd2hlcmUgclggaXMgbm90IGFyZyBkZXJpdmVkXFxuIFxcdFxcdCAqIHJZIGlkZW50aXR5IGxlYWtzIGludG8gclhcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGRzdC1cXHUwMDNlb2ZmX2NudCA9IDA7XFxuLVxcdFxcdGRzdC1cXHUwMDNlZnJhbWUgPSBzcmMtXFx1MDAzZWZyYW1lO1xcbitcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtODc1LDcgKzg5OSw3IEBAIHN0YXRpYyB2b2lkIGFyZ19wYWRkKHN0cnVjdCBhcmdfdHJhY2sgKmF0LCBzNjQgZGVsdGEpXFxuIFxcdFxcdHMxNiBuZXdfb2ZmO1xcbiBcXG4gXFx0XFx0aWYgKGFyZ19hZGQoYXQtXFx1MDAzZW9mZltpXSwgZGVsdGEsIFxcdTAwMjZuZXdfb2ZmKSkge1xcbi1cXHRcXHRcXHRhdC1cXHUwMDNlb2ZmX2NudCA9IDA7XFxuK1xcdFxcdFxcdCphdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGF0LVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRhdC1cXHUwMDNlb2ZmW2ldID0gbmV3X29mZjtcXG5AQCAtOTAxLDExICs5MjUsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBmaWxsX2Zyb21fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxuIFxcdFxcdFxcdFxcdFxcdGludCBkZXB0aClcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IHtcXG4tXFx0XFx0Lm1hc2sgPSAoMXUgXFx1MDAzY1xcdTAwM2MgKGRlcHRoICsgMSkpIC0gMSxcXG4tXFx0XFx0LmZyYW1lID0gQVJHX0lNUFJFQ0lTRVxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfaW1wcmVjaXNlKCgxdSBcXHUwMDNjXFx1MDAzYyAoZGVwdGggKyAxKSkgLSAxKTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSBhcmdfdHJhY2tfc3RhdGUoQVJHX05PTkUpO1xcbiBcXHRpbnQgY250LCBpO1xcbiBcXG4gXFx0aWYgKHJlZyA9PSBCUEZfUkVHX0ZQKSB7XFxuQEAgLTk0MCw3ICs5NjEsNyBAQCBzdGF0aWMgdm9pZCBzcGlsbF90b19zdGFjayhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCxcXG4gXFx0XFx0XFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcXG4ge1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdHN0cnVjdCBhcmdfdHJhY2sgbmV3X3ZhbCA9IHN6ID09IDggPyAqdmFsIDogbm9uZTtcXG4gXFx0aW50IGNudCwgaTtcXG4gXFxuQEAgLTk3OSw3ICsxMDAwLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBjbGVhcl9vdmVybGFwcGluZ19zdGFja19zbG90cyhzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFjaywgczE2IG9mZiwgdTMyIHN6LCBpbnQgY250KVxcbiB7XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG4gXFxuIFxcdGlmIChjbnQgPT0gMCkge1xcbiBcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IGkrKylcXG5AQCAtMTEwMyw3ICsxMTI0LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHR1OCBjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICpkc3QgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZWRzdF9yZWddO1xcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbi1cXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdGludCByLCBzbG90O1xcbiBcXG4gXFx0LyogSGFuZGxlIHN0YWNrIGFyZyBzdG9yZXMgYW5kIGxvYWRzLiAqL1xcbkBAIC0xMTI4LDcgKzExNDksNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdGFyZ19wYWRkKGRzdCwgLShzNjQpaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cXG4tXFx0XFx0XFx0XFx0ZHN0LVxcdTAwM2VvZmZfY250ID0gMDtcXG4rXFx0XFx0XFx0XFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGRzdC1cXHUwMDNlZnJhbWUpO1xcbiBcXHRcXHR9IC8qIGVsc2UgaWYgZHN0LVxcdTAwM2VmcmFtZSBpcyBpbXByZWNpc2UgaXQgc3RheXMgc28gKi9cXG4gXFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbiBcXHRcXHRpZiAoY29kZSA9PSBCUEZfTU9WKSB7XFxuQEAgLTEzNzksMTEgKzE0MDAsMTEgQEAgc3RhdGljIGludCByZWNvcmRfbG9hZF9zdG9yZV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdC8qIFJlc29sdmUgb2Zmc2V0czogZm9sZCBpbnNuLVxcdTAwM2VvZmYgaW50byBhcmdfdHJhY2sgKi9cXG4gXFx0aWYgKHB0ci1cXHUwMDNlb2ZmX2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdHJlc29sdmVkLm9mZl9jbnQgPSBwdHItXFx1MDAzZW9mZl9jbnQ7XFxuLVxcdFxcdHJlc29sdmVkLmZyYW1lID0gcHRyLVxcdTAwM2VmcmFtZTtcXG4gXFx0XFx0Zm9yIChvaSA9IDA7IG9pIFxcdTAwM2MgcHRyLVxcdTAwM2VvZmZfY250OyBvaSsrKSB7XFxuIFxcdFxcdFxcdGlmIChhcmdfYWRkKHB0ci1cXHUwMDNlb2ZmW29pXSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcXG4tXFx0XFx0XFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IDA7XFxuK1xcdFxcdFxcdFxcdHJlc29sdmVkID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UocHRyLVxcdTAwM2VmcmFtZSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTYzMCw4ICsxNjUxLDggQEAgc3RhdGljIGludCBjb21wdXRlX3N1YnByb2dfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdID0gTlVMTDtcXG4gXFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGFyZ190cmFjayBhdF9zdGFja19hcmdfZW50cnlbTUFYX1NUQUNLX0FSR19TTE9UU107XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgdW52aXNpdGVkID0geyAuZnJhbWUgPSBBUkdfVU5WSVNJVEVEIH07XFxuLVxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XFxuK1xcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxuIFxcdGJvb2wgY2hhbmdlZDtcXG4gXFx0aW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07XFxuIFxcbkBAIC0xODk1LDcgKzE5MTYsNyBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRmb3IgKGludCBwID0gcG9fc3RhcnQ7IHAgXFx1MDAzYyBwb19lbmQ7IHArKykge1xcbiBcXHRcXHRpbnQgaWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XFxuIFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgY2FsbGVlX2FyZ3NbTUFYX0FUX1RSQUNLX1JFR1NdID0ge307XFxuLVxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcXG4rXFx0XFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG4gXFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXFx1MDAyNmluc25zW2lkeF07XFxuIFxcdFxcdHN0cnVjdCBmdW5jX2luc3RhbmNlICpjYWxsZWVfaW5zdGFuY2U7XFxuIFxcdFxcdGludCBjYWxsZWUsIHRhcmdldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDAuMDQ2NTEyMTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjM1OTM0OTg5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGEzMWZjNjgwOWFiZjM0ZGZjZmE3YjIxNjI0ZWM1N2VjNTI1ZGYxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEzOjI4OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9saXZlbmVzcy5jIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5pbmRleCAwYWFkZmJhZTBhY2M1YS4uNThiOTc5YzE3YzNlNDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcbisrKyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuQEAgLTYwNyw2ICs2MDcsMzEgQEAgZW51bSBhcmdfdHJhY2tfc3RhdGUge1xuIFx0QVJHX0lNUFJFQ0lTRVx0PSAtMyxcdC8qIGxvc3QgaWRlbnRpdHk7IC5tYXNrIGlzIGFyZyBiaXRtYXNrICovXG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfc3RhdGUoczggZnJhbWUpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gZnJhbWUgfTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX25vbmUodm9pZClcbit7XG4rXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxuK3tcbitcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoQVJHX1VOVklTSVRFRCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHM4IGZyYW1lKVxuK3tcbitcdHJldHVybiBhcmdfdHJhY2tfc3RhdGUoZnJhbWUpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfdHJhY2tfaW1wcmVjaXNlKHUxNiBtYXNrKVxuK3tcbitcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xuK31cbitcbiAvKiBUcmFjayBjYWxsZWUgc3RhY2sgc2xvdHMgZnAtOCB0aHJvdWdoIGZwLTUxMiAoNjQgc2xvdHMgb2YgOCBieXRlcyBlYWNoKSAqL1xuICNkZWZpbmUgTUFYX0FSR19TUElMTF9TTE9UUyA2NFxuIFxuQEAgLTY5Myw4ICs3MTgsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfc2luZ2xlKHM4IGFyZywgczE2IG9mZilcbiAgKi9cbiBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfbWVyZ2Vfb2Zmc2V0cyhzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcbiB7XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuK1x0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbiBcdGludCBpID0gMCwgaiA9IDAsIGsgPSAwO1xuIFxuIFx0d2hpbGUgKGkgXHUwMDNjIGEub2ZmX2NudCBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgYi5vZmZfY250KSB7XG5AQCAtNzQ3LDcgKzc3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2tcbiBcdGVsc2UgaWYgKGIuZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcbiBcdFx0bSB8PSBiLm1hc2s7XG4gXG4tXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcbitcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuIH1cbiBcbiAvKiBKb2luIHR3byBhcmdfdHJhY2sgdmFsdWVzIGF0IG1lcmdlIHBvaW50cyAqL1xuQEAgLTc2MCw3ICs3ODUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ190cmFjayBfX2FyZ190cmFja19qb2luKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxuIFx0aWYgKGEuZnJhbWUgPT0gYi5mcmFtZSBcdTAwMjZcdTAwMjYgYS5mcmFtZSBcdTAwM2U9IDApIHtcbiBcdFx0LyogQm90aCBvZmZzZXQtaW1wcmVjaXNlOiBzdGF5IGltcHJlY2lzZSAqL1xuIFx0XHRpZiAoYS5vZmZfY250ID09IDAgfHwgYi5vZmZfY250ID09IDApXG4tXHRcdFx0cmV0dXJuIChzdHJ1Y3QgYXJnX3RyYWNrKXsgLmZyYW1lID0gYS5mcmFtZSB9O1xuK1x0XHRcdHJldHVybiBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbiBcdFx0LyogTWVyZ2Ugb2Zmc2V0IHNldHM7IGZhbGxzIGJhY2sgdG8gb2ZmX2NudD0wIGlmIFx1MDAzZTQgKi9cbiBcdFx0cmV0dXJuIGFyZ19tZXJnZV9vZmZzZXRzKGEsIGIpO1xuIFx0fVxuQEAgLTgzNyw3ICs4NjIsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICs9IHJZIHdoZXJlIHJZIGlzIG5vdCBhcmcgZGVyaXZlZFxuIFx0XHQgKiByWCArPSByWFxuIFx0XHQgKi9cbi1cdFx0ZHN0LVx1MDAzZW9mZl9jbnQgPSAwO1xuK1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aWYgKHNyYy1cdTAwM2VmcmFtZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VmcmFtZSA9PSBBUkdfTk9ORSkge1xuQEAgLTg0NSw4ICs4NzAsNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfYWx1NjQoc3RydWN0IGFyZ190cmFjayAqZHN0LCBjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICpzcmMpXG4gXHRcdCAqIHJYICs9IHJZIHdoZXJlIHJYIGlzIG5vdCBhcmcgZGVyaXZlZFxuIFx0XHQgKiByWSBpZGVudGl0eSBsZWFrcyBpbnRvIHJYXG4gXHRcdCAqL1xuLVx0XHRkc3QtXHUwMDNlb2ZmX2NudCA9IDA7XG4tXHRcdGRzdC1cdTAwM2VmcmFtZSA9IHNyYy1cdTAwM2VmcmFtZTtcbitcdFx0KmRzdCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHNyYy1cdTAwM2VmcmFtZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC04NzUsNyArODk5LDcgQEAgc3RhdGljIHZvaWQgYXJnX3BhZGQoc3RydWN0IGFyZ190cmFjayAqYXQsIHM2NCBkZWx0YSlcbiBcdFx0czE2IG5ld19vZmY7XG4gXG4gXHRcdGlmIChhcmdfYWRkKGF0LVx1MDAzZW9mZltpXSwgZGVsdGEsIFx1MDAyNm5ld19vZmYpKSB7XG4tXHRcdFx0YXQtXHUwMDNlb2ZmX2NudCA9IDA7XG4rXHRcdFx0KmF0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoYXQtXHUwMDNlZnJhbWUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0XHRhdC1cdTAwM2VvZmZbaV0gPSBuZXdfb2ZmO1xuQEAgLTkwMSwxMSArOTI1LDggQEAgc3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdFx0XHRpbnQgZGVwdGgpXG4ge1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7XG4tXHRcdC5tYXNrID0gKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggKyAxKSkgLSAxLFxuLVx0XHQuZnJhbWUgPSBBUkdfSU1QUkVDSVNFXG4tXHR9O1xuLVx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19pbXByZWNpc2UoKDF1IFx1MDAzY1x1MDAzYyAoZGVwdGggKyAxKSkgLSAxKTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcbiBcdGludCBjbnQsIGk7XG4gXG4gXHRpZiAocmVnID09IEJQRl9SRUdfRlApIHtcbkBAIC05NDAsNyArOTYxLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXG4gXHRcdFx0ICAgaW50IHJlZywgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0LFxuIFx0XHRcdCAgIHN0cnVjdCBhcmdfdHJhY2sgKnZhbCwgdTMyIHN6KVxuIHtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XG4gXHRpbnQgY250LCBpO1xuIFxuQEAgLTk3OSw3ICsxMDAwLDcgQEAgc3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXG4gICovXG4gc3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcbiB7XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFxuIFx0aWYgKGNudCA9PSAwKSB7XG4gXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfQVJHX1NQSUxMX1NMT1RTOyBpKyspXG5AQCAtMTEwMyw3ICsxMTI0LDcgQEAgc3RhdGljIHZvaWQgYXJnX3RyYWNrX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0dTggY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuIFx0c3RydWN0IGFyZ190cmFjayAqZHN0ID0gXHUwMDI2YXRfb3V0W2luc24tXHUwMDNlZHN0X3JlZ107XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcdTAwMjZhdF9vdXRbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbi1cdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XG4gXHRpbnQgciwgc2xvdDtcbiBcbiBcdC8qIEhhbmRsZSBzdGFjayBhcmcgc3RvcmVzIGFuZCBsb2Fkcy4gKi9cbkBAIC0xMTI4LDcgKzExNDksNyBAQCBzdGF0aWMgdm9pZCBhcmdfdHJhY2tfeGZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0XHRhcmdfcGFkZChkc3QsIC0oczY0KWluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cbi1cdFx0XHRcdGRzdC1cdTAwM2VvZmZfY250ID0gMDtcbitcdFx0XHRcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO1xuIFx0XHR9IC8qIGVsc2UgaWYgZHN0LVx1MDAzZWZyYW1lIGlzIGltcHJlY2lzZSBpdCBzdGF5cyBzbyAqL1xuIFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfQUxVNjQgXHUwMDI2XHUwMDI2IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuIFx0XHRpZiAoY29kZSA9PSBCUEZfTU9WKSB7XG5AQCAtMTM3OSwxMSArMTQwMCwxMSBAQCBzdGF0aWMgaW50IHJlY29yZF9sb2FkX3N0b3JlX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXHUwMDNlb2ZmIGludG8gYXJnX3RyYWNrICovXG4gXHRpZiAocHRyLVx1MDAzZW9mZl9jbnQgXHUwMDNlIDApIHtcbitcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKTtcbiBcdFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cdTAwM2VvZmZfY250O1xuLVx0XHRyZXNvbHZlZC5mcmFtZSA9IHB0ci1cdTAwM2VmcmFtZTtcbiBcdFx0Zm9yIChvaSA9IDA7IG9pIFx1MDAzYyBwdHItXHUwMDNlb2ZmX2NudDsgb2krKykge1xuIFx0XHRcdGlmIChhcmdfYWRkKHB0ci1cdTAwM2VvZmZbb2ldLCBpbnNuLVx1MDAzZW9mZiwgXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcbi1cdFx0XHRcdHJlc29sdmVkLm9mZl9jbnQgPSAwO1xuK1x0XHRcdFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXHUwMDNlZnJhbWUpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMTYzMCw4ICsxNjUxLDggQEAgc3RhdGljIGludCBjb21wdXRlX3N1YnByb2dfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQgPSBOVUxMO1xuIFx0c3RydWN0IGFyZ190cmFjayBhdF9zdGFja19hcmdfZW50cnlbTUFYX1NUQUNLX0FSR19TTE9UU107XG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IHsgLmZyYW1lID0gQVJHX1VOVklTSVRFRCB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBub25lID0geyAuZnJhbWUgPSBBUkdfTk9ORSB9O1xuK1x0c3RydWN0IGFyZ190cmFjayB1bnZpc2l0ZWQgPSBhcmdfdHJhY2tfdW52aXNpdGVkKCk7XG4rXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xuIFx0Ym9vbCBjaGFuZ2VkO1xuIFx0aW50IGksIHAsIHIsIGVyciA9IC1FTk9NRU07XG4gXG5AQCAtMTg5NSw3ICsxOTE2LDcgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGZvciAoaW50IHAgPSBwb19zdGFydDsgcCBcdTAwM2MgcG9fZW5kOyBwKyspIHtcbiBcdFx0aW50IGlkeCA9IGVudi1cdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XG4gXHRcdHN0cnVjdCBhcmdfdHJhY2sgY2FsbGVlX2FyZ3NbTUFYX0FUX1RSQUNLX1JFR1NdID0ge307XG4tXHRcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IHsgLmZyYW1lID0gQVJHX05PTkUgfTtcbitcdFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcbiBcdFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2aW5zbnNbaWR4XTtcbiBcdFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmNhbGxlZV9pbnN0YW5jZTtcbiBcdFx0aW50IGNhbGxlZSwgdGFyZ2V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDAuMDQ2NTEzODIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4MzUwNzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrZXJuZWwvYnBmL2xpdmVuZXNzLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYGtlcm5lbC9icGYvbGl2ZW5lc3MuY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIG1vc3RseSBjb3NtZXRpYy4gVGhleSdyZSBpbnRyb2R1Y2luZyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19zdGF0ZWAsIGBhcmdfdHJhY2tfbm9uZWAsIGFuZCB0aGUgb3RoZXJzIHRvIGluaXRpYWxpemUgYHN0cnVjdCBhcmdfdHJhY2tgIHZhcmlhYmxlcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHVzaW5nIHN0cnVjdCBpbml0aWFsaXplcnMuIFNlZW1zIGxpa2UgYSBjb2RlIHN0eWxlIHByZWZlcmVuY2UuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMganVzdCB5ZXQuIEdvdHRhIGRpZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKmNoYW5nZWQqLiBBaCwgbG9va3MgbGlrZSB0aGV5J3JlIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGluaXRpYWxpemF0aW9ucywgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuc3RydWN0IGFyZ190cmFjayByZXN1bHQgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbmBgYFxuXG53aXRoOlxuXG5gYGBjXG5zdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShhLmZyYW1lKTtcbmBgYFxuXG5XaGVyZSBgYXJnX3RyYWNrX3N0YXRlYCBpcyBqdXN0IGEgc2ltcGxlIHdyYXBwZXIuIFB1cmVseSBjb3NtZXRpYywgbm8gY2hhbmdlIGluIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHNvIGZhci5cblxuV2FpdCBhIHNlY29uZCwgaG9sZCBvbi4uLiBMZXQncyBzY3J1dGluaXplIGl0LiBBbHJpZ2h0LCBjaGVja2luZyBzb21lIG1vcmUgY2hhbmdlcy4uLlxuXG5gYGBjXG4tXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IHsgLmZyYW1lID0gYS5mcmFtZSB9O1xuLVx0c3RydWN0IGFyZ190cmFjayBpbXAgPSB7IC5mcmFtZSA9IGEuZnJhbWUgfTtcbitcdHN0cnVjdCBhcmdfdHJhY2sgcmVzdWx0ID0gYXJnX3RyYWNrX3N0YXRlKGEuZnJhbWUpO1xuK1x0c3RydWN0IGFyZ190cmFjayBpbXAgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcbmBgYFxuXG5gYGBjXG4tXHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAubWFzayA9IG0sIC5mcmFtZSA9IEFSR19JTVBSRUNJU0UgfTtcbitcdHJldHVybiBhcmdfdHJhY2tfaW1wcmVjaXNlKG0pO1xuYGBgXG5cbmBgYGNcbi1cdFx0XHRyZXR1cm4gKHN0cnVjdCBhcmdfdHJhY2speyAuZnJhbWUgPSBhLmZyYW1lIH07XG4rXHRcdFx0cmV0dXJuIGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xuYGBgXG5cbmBgYGNcbi1cdFx0ZHN0LVx1MDAzZW9mZl9jbnQgPSAwO1xuK1x0XHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtcbmBgYFxuXG5Pa2F5LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBkaWZmZXJlbmNlLiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIHJlcGxhY2VtZW50IG9mIGBkc3QtXHUwMDNlb2ZmX2NudCA9IDA7YCB3aXRoIGAqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVx1MDAzZWZyYW1lKTtgLiBUaGUgYGFyZ190cmFja19vZmZfaW1wcmVjaXNlYCBmdW5jdGlvbiByZXR1cm5zIGEgYHN0cnVjdCBhcmdfdHJhY2tgIGluaXRpYWxpemVkIHdpdGgganVzdCB0aGUgYGZyYW1lYCBtZW1iZXIuIElmIGBkc3RgIGhhZCBvdGhlciBmaWVsZHMgc2V0LCBsaWtlIGBtYXNrYCBvciBgb2ZmYCwgdGhlIGFzc2lnbm1lbnQgYCpkc3QgPSAuLi5gIHdpbGwgKnplcm8gb3V0KiB0aG9zZSBmaWVsZHMuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbCBjb2RlLCBgZHN0LVx1MDAzZW9mZl9jbnQgPSAwO2AsIG9ubHkgYWZmZWN0ZWQgYG9mZl9jbnRgLlxuXG5UaGlzIGlzIGEgcG90ZW50aWFsIHNpZGUtZWZmZWN0IHRoYXQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGV4YW1pbmVkIGJlY2F1c2UgdGhpcyAqZG9lcyogY2hhbmdlIHRoZSBsb2dpYyBvZiB0aGUgY29kZS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBub3QgaW50cm9kdWNpbmcgYSBzdWJ0bGUgYnVnIG9yIGNoYW5naW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc3RydWN0IGFyZ190cmFja2AgYWN0dWFsbHkgKmNvbnRhaW5zKiB0byBhc3Nlc3MgdGhlIGltcGFjdCBoZXJlLiBMZXQgbWUgcHVsbCB1cCBpdHMgZGVmaW5pdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MDkuMjMwMDIzMzY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzI1ODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXJnX3RyYWNrIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmM9NTQ2PXN0YXRpYyBpbnQgcHJpbnRfaW5zdGFuY2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNTk0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1OTU6c3RydWN0IGFyZ190cmFjayB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5Ni1cXHR1bmlvbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjA5LjM2NzI4NzA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTAyOTc2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bGwgc3RydWN0IGRlZmluaXRpb24gdG8gbWFrZSBhbnkgbWVhbmluZ2Z1bCBqdWRnbWVudC4gSSBjYW4ndCBqdXN0IG9wZXJhdGUgaW4gdGhlIGFic3RyYWN0OyBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIExldCdzIGdldCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29tcG9uZW50cywgdGhlaXIgdHlwZXMsIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gZWFjaCBvdGhlciDigJMgZXZlcnl0aGluZy4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdGhlIGZ1bGwgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTM6Mjk6MTIuODc3NTg2MzA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTQ6XFx0XFxuIDU5NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHtcXG4gNTk2OlxcdFxcdHVuaW9uIHtcXG4gNTk3OlxcdFxcdFxcdHMxNiBvZmZbTUFYX0FSR19PRkZTRVRTXTsgLyogYnl0ZSBvZmZzZXRzOyBvZmZfY250IHNheXMgaG93IG1hbnkgKi9cXG4gNTk4OlxcdFxcdFxcdHUxNiBtYXNrO1xcdC8qIGFyZyBiaXRtYXNrIHdoZW4gYXJnID09IEFSR19JTVBSRUNJU0UgKi9cXG4gNTk5OlxcdFxcdH07XFxuIDYwMDpcXHRcXHRzOCBmcmFtZTtcXHQvKiBhYnNvbHV0ZSBmcmFtZSBpbmRleCwgb3IgZW51bSBhcmdfdHJhY2tfc3RhdGUgKi9cXG4gNjAxOlxcdFxcdHM4IG9mZl9jbnQ7XFx0LyogMCA9IG9mZnNldC1pbXByZWNpc2UsIDEtNCA9ICMgb2YgcHJlY2lzZSBvZmZzZXRzICovXFxuIDYwMjpcXHR9O1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRlbnVtIGFyZ190cmFja19zdGF0ZSB7XFxuIDYwNTpcXHRcXHRBUkdfTk9ORVxcdD0gLTEsXFx0Lyogbm90IGRlcml2ZWQgZnJvbSBhbnkgYXJndW1lbnQgKi9cXG4gNjA2OlxcdFxcdEFSR19VTlZJU0lURURcXHQ9IC0yLFxcdC8qIG5vdCB5ZXQgcmVhY2hlZCBieSBkYXRhZmxvdyAqL1xcbiA2MDc6XFx0XFx0QVJHX0lNUFJFQ0lTRVxcdD0gLTMsXFx0LyogbG9zdCBpZGVudGl0eTsgLm1hc2sgaXMgYXJnIGJpdG1hc2sgKi9cXG4gNjA4OlxcdH07XFxuIDYwOTpcXHRcXG4gNjEwOlxcdHN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxuIDYxMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjEyLjg3NzY5OTA4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTEzNTQ1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBPZmZzZXQgVHJhY2tpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlOiB3ZSB3ZW50IGZyb20gZXhwbGljaXRseSBzZXR0aW5nIGBkc3QtXHUwMDNlb2ZmX2NudCA9IDA7YCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0aW5nIHRoZSBgYXJnX3RyYWNrYCBzdHJ1Y3Qgd2l0aCB0aGUgcmVzdWx0IG9mIGBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogXCJIYW5nIG9uLCBkb2Vzbid0IHRoYXQgemVybyBvdXQgdGhlIGBvZmZgIGFycmF5IHdoZW4gd2UgcHJldmlvdXNseSBkaWRuJ3Q/XCIgXG5cbkJ1dCB0aGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgb2ZmX2NudGAgaXMgdGhlICpjb3VudCogb2YgdmFsaWQgb2Zmc2V0cy4gU28sIGlmIGBvZmZfY250YCBpcyB6ZXJvLCB3ZSdyZSBzdXBwb3NlZCB0byBiZSBpZ25vcmluZyB0aGUgY29udGVudHMgb2YgdGhlIGBvZmZgIGFycmF5IGFueXdheS4gVGhlcmVmb3JlLCBjaGFuZ2luZyBpdCBzaG91bGRuJ3QgYWZmZWN0IHRoZSBpbnRlbmRlZCBiZWhhdmlvci4uLiB0aGVvcmV0aWNhbGx5LlxuXG5UaGUgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIGNoaW1lLCB0aG91Z2guIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYnVnLCBlaXRoZXIgd2hlcmUgdGhlIGNvZGUgaXMgYWNjaWRlbnRhbGx5IGFjY2Vzc2luZyB0aGUgYG9mZmAgYXJyYXkgd2hlbiBgb2ZmX2NudGAgaXMgemVybyAoYSBkYXRhIGludGVncml0eSBpc3N1ZSksIG9yIHdoZXJlIHdlJ3JlIHJlbHlpbmcgb24gYSBtZW1vcnkgY29tcGFyaXNvbiAoYG1lbWNtcGAgb3Igc2ltaWxhcikgb24gdGhlIGVudGlyZSBgc3RydWN0IGFyZ190cmFja2AsIHdoaWNoIGlzIGV4dHJlbWVseSBkYW5nZXJvdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgc2Vjb25kIGNhc2UgaXMgaGFwcGVuaW5nLCByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOToxNy42NjkwNTU5MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDk5NDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jbXAuKmFyZ190cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjE3Ljc3MjU2MTE0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjIwODE2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFNjYW46IEVxdWFsaXR5IENoZWNrcyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgb2YgZGlyZWN0IGVxdWFsaXR5IGNoZWNrcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSB0ZWxsdGFsZSBzaWduczogYD09YCwgcG9zc2libHkgYD09PWAgaWYgd2UncmUgZGVhbGluZyB3aXRoIEphdmFTY3JpcHQsIGFuZCBtYXliZSBldmVuIGEgcXVpY2sgZ2xhbmNlIGZvciBjb21wYXJpc29ucyBsaWtlIGAhPWAgb3IgYCE9PWAuIEkgd2FudCB0byBpbW1lZGlhdGVseSBpZGVudGlmeSB0aG9zZSBzcG90cyBiZWNhdXNlIHRoZXkncmUgb2Z0ZW4gdGhlIHNvdXJjZSBvZiBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgbG9naWMgZXJyb3JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggb2JqZWN0IHJlZmVyZW5jZXMsIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIG9yIHR5cGUgY29lcmNpb24uIEEgcXVpY2ssIHRhcmdldGVkIHJlZ2V4IG9yIGEgc2ltaWxhciBzZWFyY2ggd2l0aGluIHRoZSBjb2RlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjIxLjA5NDY0NTQ1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzczMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZ190cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2xpdmVuZXNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9saXZlbmVzcy5jPTU0Nj1zdGF0aWMgaW50IHByaW50X2luc3RhbmNlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU4My0gKlxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo1ODQ6ICogQXQgQ0ZHIG1lcmdlIHBvaW50cywgYXJnX3RyYWNrX2pvaW4oKSBtb3ZlcyBkb3duIHRoZSBsYXR0aWNlOlxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01ODUtICogICAtIHNhbWUgZnJhbWUgKyBzYW1lIG9mZnNldCAgLVxcdTAwM2UgcHJlY2lzZVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5NC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NTk1OnN0cnVjdCBhcmdfdHJhY2sge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01OTYtXFx0dW5pb24ge1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTU5OS1cXHR9O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MDA6XFx0czggZnJhbWU7XFx0LyogYWJzb2x1dGUgZnJhbWUgaW5kZXgsIG9yIGVudW0gYXJnX3RyYWNrX3N0YXRlICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMS1cXHRzOCBvZmZfY250O1xcdC8qIDAgPSBvZmZzZXQtaW1wcmVjaXNlLCAxLTQgPSAjIG9mIHByZWNpc2Ugb2Zmc2V0cyAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwMy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjA0OmVudW0gYXJnX3RyYWNrX3N0YXRlIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjA1LVxcdEFSR19OT05FXFx0PSAtMSxcXHQvKiBub3QgZGVyaXZlZCBmcm9tIGFueSBhcmd1bWVudCAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYwOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEwOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19zdGF0ZShzOCBmcmFtZSlcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjExLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjEyOlxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5mcmFtZSA9IGZyYW1lIH07XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxMy19XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxNC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjE1OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ190cmFja19ub25lKHZvaWQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYxNi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYxNzpcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKEFSR19OT05FKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE4LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjE5LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX3VudmlzaXRlZCh2b2lkKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MjEte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjI6XFx0cmV0dXJuIGFyZ190cmFja19zdGF0ZShBUkdfVU5WSVNJVEVEKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjIzLX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MjU6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoczggZnJhbWUpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTYyNi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjYyNzpcXHRyZXR1cm4gYXJnX3RyYWNrX3N0YXRlKGZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI4LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjI5LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo2MzA6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgYXJnX3RyYWNrX2ltcHJlY2lzZSh1MTYgbWFzaylcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjMxLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjMyOlxcdHJldHVybiAoc3RydWN0IGFyZ190cmFjayl7IC5tYXNrID0gbWFzaywgLmZyYW1lID0gQVJHX0lNUFJFQ0lTRSB9O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02MzMtfVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTY0ND1zdGF0aWMgaW50IHN0YWNrX2FyZ19vZmZfdG9fc2xvdChzMTYgb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Mi1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjUzOnN0YXRpYyBib29sIGFyZ19pc192aXNpdGVkKGNvbnN0IHN0cnVjdCBhcmdfdHJhY2sgKmF0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NTQte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTY1Ny1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjU4OnN0YXRpYyBib29sIGFyZ19pc19mcChjb25zdCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjU5LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02NjItXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY2MzpzdGF0aWMgdm9pZCB2ZXJib3NlX2FyZ190cmFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYXJnX3RyYWNrICphdClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjY0LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy02ODUtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY4NjpzdGF0aWMgYm9vbCBhcmdfdHJhY2tfZXEoY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYSwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNjg3LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MDMtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjcwNDpzdGF0aWMgc3RydWN0IGFyZ190cmFjayBhcmdfc2luZ2xlKHM4IGFyZywgczE2IG9mZilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzA1LXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzA2OlxcdHN0cnVjdCBhcmdfdHJhY2sgYXQgPSB7fTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzA3LVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTcxOC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzE5OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19tZXJnZV9vZmZzZXRzKHN0cnVjdCBhcmdfdHJhY2sgYSwgc3RydWN0IGFyZ190cmFjayBiKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjAte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo3MjE6XFx0c3RydWN0IGFyZ190cmFjayByZXN1bHQgPSBhcmdfdHJhY2tfc3RhdGUoYS5mcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjcyMjpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGltcCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKGEuZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03MjMtXFx0aW50IGkgPSAwLCBqID0gMCwgayA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzU1LS8qXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc1NjogKiBNZXJnZSB0d28gYXJnX3RyYWNrcyBpbnRvIEFSR19JTVBSRUNJU0UsIGNvbGxlY3RpbmcgdGhlIGZyYW1lXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc1Ny0gKiBiaXRzIGZyb20gYm90aCBvcGVyYW5kcy4gUHJlY2lzZSBmcmFtZSBpbmRpY2VzIChmcmFtZSBcXHUwMDNlPSAwKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc2MC0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NzYxOnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIGFyZ19qb2luX2ltcHJlY2lzZShzdHJ1Y3QgYXJnX3RyYWNrIGEsIHN0cnVjdCBhcmdfdHJhY2sgYilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzYyLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03NzQtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjc3NTpcXHRyZXR1cm4gYXJnX3RyYWNrX2ltcHJlY2lzZShtKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc2LX1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzc3LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo3Nzg6LyogSm9pbiB0d28gYXJnX3RyYWNrIHZhbHVlcyBhdCBtZXJnZSBwb2ludHMgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Nzc5OnN0YXRpYyBzdHJ1Y3QgYXJnX3RyYWNrIF9fYXJnX3RyYWNrX2pvaW4oc3RydWN0IGFyZ190cmFjayBhLCBzdHJ1Y3QgYXJnX3RyYWNrIGIpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTc4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg3LVxcdFxcdGlmIChhLm9mZl9jbnQgPT0gMCB8fCBiLm9mZl9jbnQgPT0gMClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6Nzg4OlxcdFxcdFxcdHJldHVybiBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhLmZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNzg5LVxcdFxcdC8qIE1lcmdlIG9mZnNldCBzZXRzOyBmYWxscyBiYWNrIHRvIG9mZl9jbnQ9MCBpZiBcXHUwMDNlNCAqL1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgxOS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODIwOnN0YXRpYyBib29sIGFyZ190cmFja19qb2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCB0YXJnZXQsIGludCByLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjE6XFx0XFx0XFx0ICAgc3RydWN0IGFyZ190cmFjayAqaW4sIHN0cnVjdCBhcmdfdHJhY2sgb3V0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04MjIte1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjM6XFx0c3RydWN0IGFyZ190cmFjayBvbGQgPSAqaW47XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjgyNDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBfX2FyZ190cmFja19qb2luKG9sZCwgb3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODI1LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4MjY6XFx0aWYgKGFyZ190cmFja19lcShcXHUwMDI2bmV3X3ZhbCwgXFx1MDAyNm9sZCkpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTgyNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODM5LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZnAlK2Q6IFxcXCIsIHIgKiA4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODQwOlxcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNm9sZCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0MS1cXHR2ZXJib3NlKGVudiwgXFxcIiArIFxcXCIpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NDI6XFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2b3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODQzLVxcdHZlcmJvc2UoZW52LCBcXFwiID1cXHUwMDNlIFxcXCIpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NDQ6XFx0dmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2bmV3X3ZhbCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg0NS1cXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODU0LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo4NTU6c3RhdGljIHZvaWQgYXJnX3RyYWNrX2FsdTY0KHN0cnVjdCBhcmdfdHJhY2sgKmRzdCwgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqc3JjKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NTYte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg2NC1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6ODY1OlxcdFxcdCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXFx1MDAzZWZyYW1lKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtODY2LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04NzItXFx0XFx0ICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjg3MzpcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2Uoc3JjLVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTg3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9ODgzPXN0YXRpYyBib29sIGFyZ19hZGQoczE2IG9mZiwgczY0IGRlbHRhLCBzMTYgKm91dClcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTEtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjg5MjpzdGF0aWMgdm9pZCBhcmdfcGFkZChzdHJ1Y3QgYXJnX3RyYWNrICphdCwgczY0IGRlbHRhKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy04OTMte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkwMS1cXHRcXHRpZiAoYXJnX2FkZChhdC1cXHUwMDNlb2ZmW2ldLCBkZWx0YSwgXFx1MDAyNm5ld19vZmYpKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkwMjpcXHRcXHRcXHQqYXQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShhdC1cXHUwMDNlZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05MDMtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTkxND1zdGF0aWMgaW50IGZwX29mZl90b19zbG90KHMxNiBvZmYpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTIyLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5MjM6c3RhdGljIHN0cnVjdCBhcmdfdHJhY2sgZmlsbF9mcm9tX3N0YWNrKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgaW50IHJlZyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTI2LVxcdFxcdFxcdFxcdFxcdGludCBkZXB0aClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTI3LXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTI4OlxcdHN0cnVjdCBhcmdfdHJhY2sgaW1wID0gYXJnX3RyYWNrX2ltcHJlY2lzZSgoMXUgXFx1MDAzY1xcdTAwM2MgKGRlcHRoICsgMSkpIC0gMSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjkyOTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc3VsdCA9IGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTkzMC1cXHRpbnQgY250LCBpO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk0OC1cXHRcXHRcXHRyZXR1cm4gaW1wO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NDk6XFx0XFx0cmVzdWx0ID0gX19hcmdfdHJhY2tfam9pbihyZXN1bHQsIGF0X3N0YWNrX291dFtzbG90XSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk1MC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTU5LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5NjA6c3RhdGljIHZvaWQgc3BpbGxfdG9fc3RhY2soc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MTpcXHRcXHRcXHQgICBpbnQgcmVnLCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2MjpcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICp2YWwsIHUzMiBzeilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTYzLXtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTY0OlxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjk2NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5ld192YWwgPSBzeiA9PSA4ID8gKnZhbCA6IG5vbmU7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk2Ni1cXHRpbnQgY250LCBpO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTk3Ny1cXHRcXHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcXHUwMDNjIE1BWF9BUkdfU1BJTExfU0xPVFM7IHNsb3QrKylcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6OTc4OlxcdFxcdFxcdGF0X3N0YWNrX291dFtzbG90XSA9IF9fYXJnX3RyYWNrX2pvaW4oYXRfc3RhY2tfb3V0W3Nsb3RdLCBuZXdfdmFsKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtOTc5LVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05OTItXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzo5OTM6XFx0XFx0XFx0YXRfc3RhY2tfb3V0W3Nsb3RdID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja19vdXRbc2xvdF0sIG5ld192YWwpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy05OTQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDAtICovXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDE6c3RhdGljIHZvaWQgY2xlYXJfb3ZlcmxhcHBpbmdfc3RhY2tfc2xvdHMoc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2ssIHMxNiBvZmYsIHUzMiBzeiwgaW50IGNudClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAwMi17XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwMDM6XFx0c3RydWN0IGFyZ190cmFjayBub25lID0gYXJnX3RyYWNrX25vbmUoKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTAwNC1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDA2LVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSsrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDA3OlxcdFxcdFxcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMTctXFx0XFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDE4OlxcdFxcdFxcdFxcdGF0X3N0YWNrW2ldID0gX19hcmdfdHJhY2tfam9pbihhdF9zdGFja1tpXSwgbm9uZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwMTktXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMjY9c3RhdGljIHZvaWQgY2xlYXJfc3RhY2tfZm9yX2FsbF9vZmZzKHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X291dCwgaW50IHJlZyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTAyODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX291dCwgdTMyIHN6KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDI5LXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDUxLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDUyOnN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDUzOlxcdFxcdFxcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfaW4sIHN0cnVjdCBhcmdfdHJhY2sgKmF0X3N0YWNrX2luLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU0OlxcdFxcdFxcdCAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNTUte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfUkVHOyBpKyspIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA2MjpcXHRcXHRpZiAoYXJnX3RyYWNrX2VxKFxcdTAwMjZhdF9vdXRbaV0sIFxcdTAwMjZhdF9pbltpXSkpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA2OS1cXHRcXHR9XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNzA6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcdHIlZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3MTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiAtXFx1MDAzZSBcXFwiKTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfb3V0W2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3Ni1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA3NzpcXHRcXHRpZiAoYXJnX3RyYWNrX2VxKFxcdTAwMjZhdF9vdXRbYWldLCBcXHUwMDI2YXRfaW5bYWldKSlcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA3OC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDg0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTA4NTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFx0c2ElZDogXFxcIiwgaSk7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X2luW2FpXSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODY6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIgLVxcdTAwM2UgXFxcIik7IHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X291dFthaV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDg3LVxcdH1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTA4OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgaSsrKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwODk6XFx0XFx0aWYgKGFyZ190cmFja19lcShcXHUwMDI2YXRfc3RhY2tfb3V0W2ldLCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDkwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwOTYtXFx0XFx0fVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk3OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXHRmcCUrZDogXFxcIiwgLShpICsgMSkgKiA4KTsgdmVyYm9zZV9hcmdfdHJhY2soZW52LCBcXHUwMDI2YXRfc3RhY2tfaW5baV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDk4OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIC1cXHUwMDNlIFxcXCIpOyB2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZhdF9zdGFja19vdXRbaV0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDk5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTAzLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTA0OnN0YXRpYyBib29sIGNhbl9iZV9sb2NhbF9mcChpbnQgZGVwdGgsIGludCByZWdubywgc3RydWN0IGFyZ190cmFjayAqYXQpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMDUte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTAtLypcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTExMTogKiBQdXJlIGRhdGFmbG93IHRyYW5zZmVyIGZ1bmN0aW9uIGZvciBhcmdfdHJhY2sgc3RhdGUuXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMTItICogVXBkYXRlcyBhdF9vdXRbXSBiYXNlZCBvbiBob3cgdGhlIGluc3RydWN0aW9uIG1vZGlmaWVzIHJlZ2lzdGVycy5cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE0LSAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTE1OnN0YXRpYyB2b2lkIGFyZ190cmFja194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTExNi1cXHRcXHRcXHQgICBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTc6XFx0XFx0XFx0ICAgc3RydWN0IGFyZ190cmFjayAqYXRfb3V0LCBzdHJ1Y3QgYXJnX3RyYWNrICphdF9zdGFja19vdXQsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMTg6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfYXJnX2VudHJ5LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTE5LVxcdFxcdFxcdCAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTI0LVxcdHU4IGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExMjU6XFx0c3RydWN0IGFyZ190cmFjayAqZHN0ID0gXFx1MDAyNmF0X291dFtpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTEyNjpcXHRzdHJ1Y3QgYXJnX3RyYWNrICpzcmMgPSBcXHUwMDI2YXRfb3V0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTI3OlxcdHN0cnVjdCBhcmdfdHJhY2sgbm9uZSA9IGFyZ190cmFja19ub25lKCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExMjgtXFx0aW50IHIsIHNsb3Q7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE1MS1cXHRcXHRcXHRcXHQvKiBBbnkgb3RoZXIgNjQtYml0IGFsdSBvbiB0aGUgcG9pbnRlciBtYWtlcyBpdCBpbXByZWNpc2UgKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTE1MjpcXHRcXHRcXHRcXHQqZHN0ID0gYXJnX3RyYWNrX29mZl9pbXByZWNpc2UoZHN0LVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNTMtXFx0XFx0fSAvKiBlbHNlIGlmIGRzdC1cXHUwMDNlZnJhbWUgaXMgaW1wcmVjaXNlIGl0IHN0YXlzIHNvICovXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTE2Mi1cXHRcXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMTYzOlxcdFxcdFxcdGFyZ190cmFja19hbHU2NChkc3QsIHNyYyk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNjQtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTExNzMtXFx0XFx0ICogYXRfc3RhY2tfb3V0W3Nsb3RdIGlzIG5vdCBjbGVhcmVkIGJ5IHRoZSBoZWxwZXIgYW5kIHN1YnByb2cgY2FsbHMuXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjExNzQ6XFx0XFx0ICogVGhlIGZpbGxfZnJvbV9zdGFjaygpIG1heSByZXR1cm4gdGhlIHN0YWxlIHNwaWxsIOKAlCB3aGljaCBpcyBhbiBGUC1kZXJpdmVkIGFyZ190cmFja1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTc1LVxcdFxcdCAqICh0aGUgdmFsdWUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGlsbGVkIHRoZXJlKS4gVGhlIGxvYWRlZCByZWdpc3RlciB0aGVuIGNhcnJpZXNcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMjAzLVxcdFxcdFxcdCAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgc3ogPT0gOCkge1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMjA0OlxcdFxcdFxcdHN0cnVjdCBhcmdfdHJhY2sgKnBhcmVudF9zdGFjayA9XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEyMDUtXFx0XFx0XFx0XFx0ZW52LVxcdTAwM2VjYWxsc2l0ZV9hdF9zdGFja1tjYWxsc2l0ZXNbc3JjLVxcdTAwM2VmcmFtZV1dO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEzMDg9c3RhdGljIGludCByZWNvcmRfc3RhY2tfYWNjZXNzKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTMwOTpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXJnLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzEwLVxcdFxcdFxcdCAgICAgICBzNjQgYWNjZXNzX2J5dGVzLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMzU1PXN0YXRpYyBpbnQgcmVjb3JkX2xvYWRfc3RvcmVfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEzNTYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTM1NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM1OC17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM2Mi1cXHR1OCBjbGFzcyA9IEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTM2MzpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHJlc29sdmVkLCAqcHRyO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzY0LVxcdGludCBvaTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMzY3LVxcdCAqIFN0YWNrIGFyZyBpbnNucyB1c2UgZHN0X3JlZy9zcmNfcmVnPUJQRl9SRUdfUEFSQU1TKDExKS4gU2luY2UgYXRbXVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMzY4OlxcdCAqIGlzIGV4dGVuZGVkIHRvIE1BWF9BVF9UUkFDS19SRUdTLCBhdFsxMV0gaG9sZHMgdGhlIGFyZ190cmFjayBmb3JcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTM2OS1cXHQgKiBvdXRnb2luZyBzdGFjayBhcmcgc2xvdCAwIOKAlCBub3QgdGhlIHBvaW50ZXIgdXNlZCBmb3IgdGhlIG1lbW9yeVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDAtXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDE6XFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXFx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDAyLVxcdGlmIChwdHItXFx1MDAzZW9mZl9jbnQgXFx1MDAzZSAwKSB7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MDM6XFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVxcdTAwM2VmcmFtZSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MDQtXFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cXHUwMDNlb2ZmX2NudDtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA2LVxcdFxcdFxcdGlmIChhcmdfYWRkKHB0ci1cXHUwMDNlb2ZmW29pXSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2cmVzb2x2ZWQub2ZmW29pXSkpIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQwNzpcXHRcXHRcXHRcXHRyZXNvbHZlZCA9IGFyZ190cmFja19vZmZfaW1wcmVjaXNlKHB0ci1cXHUwMDNlZnJhbWUpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDA4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE0MjI9c3RhdGljIGludCByZWNvcmRfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjQtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE0MjU6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCwgaW50IGFyZ19pZHgsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE0MjYtXFx0XFx0XFx0ICAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTQ1OT1zdGF0aWMgaW50IHJlY29yZF9jYWxsX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNDYwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTQ2MTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXJnX3RyYWNrICphdCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTQ2Mi1cXHRcXHRcXHQgICAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTU0MT1zdHJ1Y3Qgc3VicHJvZ19hdF9pbmZvIHtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTU0MjpcXHRzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfaW4pW01BWF9BVF9UUkFDS19SRUdTXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0My1cXHRpbnQgbGVuO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE1NDY9c3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTU0OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE1NDk6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXJnX3RyYWNrICgqYXRfc3RhY2tfaW4pW01BWF9BUkdfU1BJTExfU0xPVFNdKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTUwLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjAwLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIHIlZD1cXFwiLCByKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYwMTpcXHRcXHRcXHRcXHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZpbmZvLVxcdTAwM2VhdF9pbltpXVtyXSk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDItXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MDYtXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIgc2ElZD1cXFwiLCByKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYwNzpcXHRcXHRcXHRcXHR2ZXJib3NlX2FyZ190cmFjayhlbnYsIFxcdTAwMjZpbmZvLVxcdTAwM2VhdF9pbltpXVtNQVhfQlBGX1JFRyArIHJdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYwOC1cXHRcXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNS1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiBmcCUrZD1cXFwiLCAtKHIgKyAxKSAqIDgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjE2OlxcdFxcdFxcdFxcdHZlcmJvc2VfYXJnX3RyYWNrKGVudiwgXFx1MDAyNmF0X3N0YWNrX2luW2ldW3JdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYxNy1cXHRcXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYyNy0gKiBDb21wdXRlIGFyZyB0cmFja2luZyBkYXRhZmxvdyBmb3IgYSBzaW5nbGUgc3VicHJvZy5cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYyODogKiBSdW5zIGZvcndhcmQgZml4ZWQtcG9pbnQgd2l0aCBhcmdfdHJhY2tfeGZlcigpLCB0aGVuIHJlY29yZHNcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTYyOS0gKiBtZW1vcnkgYWNjZXNzZXMgaW4gYSBzaW5nbGUgbGluZWFyIHBhc3Mgb3ZlciBjb252ZXJnZWQgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTYzNT1zdGF0aWMgaW50IGNvbXB1dGVfc3VicHJvZ19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MzYtXFx0XFx0XFx0XFx0c3RydWN0IHN1YnByb2dfYXRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTYzNzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrICpjYWxsZWVfZW50cnksXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2MzgtXFx0XFx0XFx0XFx0c3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE2NDgtXFx0aW50IGxlbiA9IGVuZCAtIHN0YXJ0O1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNjQ5OlxcdHN0cnVjdCBhcmdfdHJhY2sgKCphdF9pbilbTUFYX0FUX1RSQUNLX1JFR1NdID0gTlVMTDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X291dFtNQVhfQVRfVFJBQ0tfUkVHU107XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTE6XFx0c3RydWN0IGFyZ190cmFjayAoKmF0X3N0YWNrX2luKVtNQVhfQVJHX1NQSUxMX1NMT1RTXSA9IE5VTEw7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE2NTI6XFx0c3RydWN0IGFyZ190cmFjayAqYXRfc3RhY2tfb3V0ID0gTlVMTDtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1MzpcXHRzdHJ1Y3QgYXJnX3RyYWNrIGF0X3N0YWNrX2FyZ19lbnRyeVtNQVhfU1RBQ0tfQVJHX1NMT1RTXTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1NDpcXHRzdHJ1Y3QgYXJnX3RyYWNrIHVudmlzaXRlZCA9IGFyZ190cmFja191bnZpc2l0ZWQoKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTY1NTpcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNjU2LVxcdGJvb2wgY2hhbmdlZDtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzE1LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzE2OlxcdFxcdGFyZ190cmFja194ZmVyKGVudiwgaW5zbiwgaWR4LCBhdF9vdXQsIGF0X3N0YWNrX291dCxcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTcxNy1cXHRcXHRcXHQgICAgICAgYXRfc3RhY2tfYXJnX2VudHJ5LCBpbnN0YW5jZSwgY2FsbHNpdGVzKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTcxODpcXHRcXHRhcmdfdHJhY2tfbG9nKGVudiwgaW5zbiwgaWR4LCBhdF9pbltpXSwgYXRfc3RhY2tfaW5baV0sIGF0X291dCwgYXRfc3RhY2tfb3V0KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTcxOS1cXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzMxLVxcdFxcdFxcdGZvciAociA9IDA7IHIgXFx1MDAzYyBNQVhfQVRfVFJBQ0tfUkVHUzsgcisrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzMyOlxcdFxcdFxcdFxcdGNoYW5nZWQgfD0gYXJnX3RyYWNrX2pvaW4oZW52LCBpZHgsIHRhcmdldCwgcixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZhdF9pblt0aV1bcl0sIGF0X291dFtyXSk7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTczNS1cXHRcXHRcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgTUFYX0FSR19TUElMTF9TTE9UUzsgcisrKVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzM2OlxcdFxcdFxcdFxcdGNoYW5nZWQgfD0gYXJnX3RyYWNrX2pvaW4oZW52LCBpZHgsIHRhcmdldCwgLXIgLSAxLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmF0X3N0YWNrX2luW3RpXVtyXSwgYXRfc3RhY2tfb3V0W3JdKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNzY4LVxcdFxcdFxcdG1lbWNweShlbnYtXFx1MDAzZWNhbGxzaXRlX2F0X3N0YWNrW2lkeF0sXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE3Njk6XFx0XFx0XFx0ICAgICAgIGF0X3N0YWNrX2luW2ldLCBzaXplb2Yoc3RydWN0IGFyZ190cmFjaykgKiBNQVhfQVJHX1NQSUxMX1NMT1RTKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc3MC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTc4Ni0vKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgUjEtUjUgb3Igc3RhY2sgYXJncyBpcyBkZXJpdmVkIGZyb20gYSBmcmFtZSBwb2ludGVyLiAqL1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxNzg3OnN0YXRpYyBib29sIGhhc19mcF9hcmdzKHN0cnVjdCBhcmdfdHJhY2sgKmFyZ3MpXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE3ODgte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4Njg9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTg2OTpcXHRcXHRcXHQgICBzdHJ1Y3QgYXJnX3RyYWNrICplbnRyeV9hcmdzLFxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBzdWJwcm9nX2F0X2luZm8gKmluZm8sXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTkxNy1cXHRcXHRpbnQgaWR4ID0gZW52LVxcdTAwM2VjZmcuaW5zbl9wb3N0b3JkZXJbcF07XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5MTg6XFx0XFx0c3RydWN0IGFyZ190cmFjayBjYWxsZWVfYXJnc1tNQVhfQVRfVFJBQ0tfUkVHU10gPSB7fTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTkxOTpcXHRcXHRzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTIwLVxcdFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IFxcdTAwMjZpbnNuc1tpZHhdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOToyMS4yNjAwMjUzMDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5NjQ1OTczNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQXJnIFRyYWNraW5nOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIGl0J3MgcHJldHR5IGNsZWFyOiB0aGV5J3JlIHN3YXBwaW5nIG91dCB0aGVzZSBzdHJ1Y3QgaW5pdGlhbGl6ZXJzIGZvciBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgZXNzZW50aWFsbHkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGNsZWFuZXIgY29kZSBhbmQgcG90ZW50aWFsbHkgZmV3ZXIgZXJyb3JzLlxuXG5Jbml0aWFsbHksIEkgc2VlIGBhcmdfdHJhY2tfc3RhdGVgIGJlaW5nIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGBzdHJ1Y3QgYXJnX3RyYWNrYCBpbnN0YW5jZXMuIFRoZSBjbGV2ZXIgYml0IGhlcmUgaXMgbGV2ZXJhZ2luZyBDJ3Mgc3RydWN0IGluaXRpYWxpemVyIHplcm9pbmc7IGlmIHlvdSBwcm92aWRlIGEgYC5mcmFtZSA9IGZyYW1lYCBpbml0aWFsaXplciwgZXZlcnl0aGluZyBlbHNlIOKAkyBgb2ZmX2NudGAsIGBvZmZgLCBgbWFza2Ag4oCTIGlzIGltcGxpY2l0bHkgemVyb2VkLiBNYWtlcyBzZW5zZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgYC5mcmFtZSA9IGEuZnJhbWVgIHdpdGggdGhlIHJlbWFpbmRlciBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBOaWNlIVxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSByZXBsYWNpbmcgc29tZXRoaW5nIGxpa2UgYGRzdC1cdTAwM2VvZmZfY250ID0gMDtgIHdpdGggYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShkc3QtXHUwMDNlZnJhbWUpO2AuICBgYXJnX3RyYWNrX29mZl9pbXByZWNpc2VgIGl0c2VsZiBqdXN0IGNhbGxzIGBhcmdfdHJhY2tfc3RhdGVgLiBTbywgdGhlIGltcGFjdCBpcyBpdCdzIHNldHRpbmcgdGhlIGBmcmFtZWAgYW5kIHplcm9pbmcgb3V0ICpldmVyeXRoaW5nKiBpbiB0aGUgc3RydWN0LCB3aGVyZWFzIHByZXZpb3VzbHkgb25seSB0aGUgYG9mZl9jbnRgIHdhcyBiZWluZyBjbGVhcmVkLlxuXG5NeSBmaXJzdCB0aG91Z2h0OiBkb2VzIHRoaXMgYWN0dWFsbHkgKmNoYW5nZSogYW55dGhpbmcgZnVuY3Rpb25hbGx5PyAgYGFyZ190cmFja19lcWAgb25seSBjaGVja3MgdGhlIGBvZmZgIGFycmF5IHVwIHRvIGBvZmZfY250YCwgYW5kIHVzZXMgdGhlIGBtYXNrYCBvbmx5IHdoZW4gYGZyYW1lYCBpcyBgQVJHX0lNUFJFQ0lTRWAuIEFzIGxvbmcgYXMgd2UgZW5zdXJlIGBvZmZfY250YCBpcyBwcm9wZXJseSBzZXQsIGl0IGFsbCBzZWVtcyB0aGUgc2FtZS4gVGhlIHVudXNlZCBiaXRzIG9mIGBvZmZgIGFuZCBgbWFza2AgZG9uJ3Qgc2VlbSB0byBiZSBhY2Nlc3NlZCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBnaXZlbiB0aGUgZWFybGllciBhbmFseXNpcy5cblxuSSdtIHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIGV2ZXJ5IHBsYWNlIGBvZmZgIG9yIGBtYXNrYCBpcyB1c2VkLiAgYGFyZ19tZXJnZV9vZmZzZXRzYCwgYGFyZ19qb2luX2ltcHJlY2lzZWAsIGFsbCB0aG9zZSBmdW5jdGlvbnMgb25seSB1c2UgdXAgdG8gYG9mZl9jbnRgIG9yIHJlYWQgYG1hc2tgIHdoZW4gZnJhbWUgaXMgYEFSR19JTVBSRUNJU0VgLiBPa2F5LCBzbyBmYXIsIHNvIGdvb2QuXG5cblRoZXJlJ3Mgbm8gYG1lbWNtcGAgb3IgYW55IGRpcmVjdCBjb21wYXJpc29uIG9mIHRoZSBlbnRpcmUgc3RydWN0IHRoYXQgSSBjYW4gZmluZCwgZWl0aGVyLiBTbyBpdCBkb2VzIHNlZW0gdG8gYmUgYSBwdXJlbHkgY29zbWV0aWMgcmVmYWN0b3JpbmcgYXQgdGhpcyBwb2ludC5cblxuVGhlbiBJIGxvb2sgYXQgdGhlIGBhcmdfdHJhY2tfYWx1NjRgIGFuZCBgYXJnX3BhZGRgIGZ1bmN0aW9ucy4gVGhleSdyZSByZXBsYWNpbmcgbGluZXMgdGhhdCB6ZXJvZWQgYG9mZl9jbnRgIHdpdGggbGluZXMgdGhhdCBub3cgemVybyBvdXQgdGhlIHdob2xlIHN0cnVjdC4gIEZ1bmN0aW9uYWxseSwgaWRlbnRpY2FsLlxuXG5GaW5hbGx5LCBJIGdvdCB0byBgcmVjb3JkX2xvYWRfc3RvcmVfYWNjZXNzYC4gVGhlcmUncyBhIHN1YnRsZSBjaGFuZ2UgaGVyZSwgdGhlIGByZXNvbHZlZGAgdmFyaWFibGUgaXMgbm93IGNvcnJlY3RseSBpbml0aWFsaXplZCB0byB6ZXJvLiBCZWZvcmUsIGl0IGxvb2tlZCBsaWtlIGByZXNvbHZlZGAgd2FzIGJlaW5nIHVzZWQgdW5pbml0aWFsaXplZCBpZiBgcHRyLVx1MDAzZW9mZl9jbnRgIHdhcyBgMGAsIGFzIHRoZSBjb2RlIHdvdWxkIG9ubHkgc2V0IHNvbWUgZmllbGRzLiBUaGUgb2xkZXIgY29kZSBkaWQgbm90IGluaXRpYWxpemUgdGhlIHdob2xlIHN0cnVjdCBhbmQgd2FzIHBvdGVudGlhbGx5IHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZm9yIHRoZSBvdGhlciB2YWx1ZXMuIFRoaXMgbG9va3MgbGlrZSBhIGJ1ZyBmaXghICBTaW5jZSB0aGUgbmV3IGNvZGUgc2V0cyBgcmVzb2x2ZWQgPSBhcmdfdHJhY2tfc3RhdGUocHRyLVx1MDAzZWZyYW1lKWAsIG5vdyB0aGUgcmVzdCBvZiBzdHJ1Y3QgaXMgemVyb2VkLlxuXG5Pa2F5LCBzbyBpdCdzIHNhZmVyLCBidXQgSSAqdGhpbmsqIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZS4gIElmIGByZXNvbHZlZC5vZmZfY250ID09IDBgLCB0aGUgcG9pbnRlciBgcHRyYCBnb3Qgc2V0IHRvIHBvaW50IHRvIGByZXNvbHZlZGAuXG5JdCAqbG9va3MqIGxpa2UgaWYgYHB0ci1cdTAwM2VvZmZfY250ID09IDBgIHRoZSB2YWx1ZSBvZiBgcmVzb2x2ZWQubWFza2Agd2FzIG5vdCBpbXBvcnRhbnQgYmVjYXVzZSBgcHRyLVx1MDAzZWZyYW1lYCB3YXMgbm90IGBBUkdfSU1QUkVDSVNFYC5cblRoZSBjaGFuZ2VzIGVuc3VyZSB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlIGJlY2F1c2UgdGhlIHZhbHVlIGlzIGV4cGxpY2l0bHkgemVybyBpbml0aWFsaXplZC5cblxuU28sIG92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcmVmYWN0b3JpbmcuIENsZWFuZXIsIGxlc3MgZXJyb3ItcHJvbmUsIGFuZCBsaWtlbHkgZml4ZWQgYSBzdWJ0bGUgYnVnIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgbWVtYmVycy4gTm90aGluZyBncm91bmRicmVha2luZywgYnV0IGRlZmluaXRlbHkgYSBuZXQgcG9zaXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Mi4yMjQ2MjYwNzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdFxcbjE0MDE6XFx0XFx0LyogUmVzb2x2ZSBvZmZzZXRzOiBmb2xkIGluc24tXFx1MDAzZW9mZiBpbnRvIGFyZ190cmFjayAqL1xcbjE0MDI6XFx0XFx0aWYgKHB0ci1cXHUwMDNlb2ZmX2NudCBcXHUwMDNlIDApIHtcXG4xNDAzOlxcdFxcdFxcdHJlc29sdmVkID0gYXJnX3RyYWNrX3N0YXRlKHB0ci1cXHUwMDNlZnJhbWUpO1xcbjE0MDQ6XFx0XFx0XFx0cmVzb2x2ZWQub2ZmX2NudCA9IHB0ci1cXHUwMDNlb2ZmX2NudDtcXG4xNDA1OlxcdFxcdFxcdGZvciAob2kgPSAwOyBvaSBcXHUwMDNjIHB0ci1cXHUwMDNlb2ZmX2NudDsgb2krKykge1xcbjE0MDY6XFx0XFx0XFx0XFx0aWYgKGFyZ19hZGQocHRyLVxcdTAwM2VvZmZbb2ldLCBpbnNuLVxcdTAwM2VvZmYsIFxcdTAwMjZyZXNvbHZlZC5vZmZbb2ldKSkge1xcbjE0MDc6XFx0XFx0XFx0XFx0XFx0cmVzb2x2ZWQgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZShwdHItXFx1MDAzZWZyYW1lKTtcXG4xNDA4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0MDk6XFx0XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0fVxcbjE0MTE6XFx0XFx0XFx0cHRyID0gXFx1MDAyNnJlc29sdmVkO1xcbjE0MTI6XFx0XFx0fVxcbjE0MTM6XFx0XFxuMTQxNDpcXHRcXHRpZiAocHRyLVxcdTAwM2VmcmFtZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHB0ci1cXHUwMDNlZnJhbWUgXFx1MDAzYz0gZGVwdGgpXFxuMTQxNTpcXHRcXHRcXHRyZXR1cm4gcmVjb3JkX3N0YWNrX2FjY2VzcyhpbnN0YW5jZSwgcHRyLCBzeiwgcHRyLVxcdTAwM2VmcmFtZSwgaW5zbl9pZHgpO1xcbjE0MTY6XFx0XFx0aWYgKHB0ci1cXHUwMDNlZnJhbWUgPT0gQVJHX0lNUFJFQ0lTRSlcXG4xNDE3OlxcdFxcdFxcdHJldHVybiByZWNvcmRfaW1wcmVjaXNlKGluc3RhbmNlLCBwdHItXFx1MDAzZW1hc2ssIGluc25faWR4KTtcXG4xNDE4OlxcdFxcdC8qIEFSR19OT05FOiBub3QgZGVyaXZlZCBmcm9tIGFueSBmcmFtZSBwb2ludGVyLCBza2lwICovXFxuMTQxOTpcXHRcXHRyZXR1cm4gMDtcXG4xNDIwOlxcdH1cXG4xNDIxOlxcdFxcbjE0MjI6XFx0c3RhdGljIGludCByZWNvcmRfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjE0MjM6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXFxuMTQyNDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4xNDI1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFyZ190cmFjayAqYXQsIGludCBhcmdfaWR4LFxcbjE0MjY6XFx0XFx0XFx0XFx0ICAgICBpbnQgaW5zbl9pZHgpXFxuMTQyNzpcXHR7XFxuMTQyODpcXHRcXHRpbnQgZGVwdGggPSBpbnN0YW5jZS1cXHUwMDNlZGVwdGg7XFxuMTQyOTpcXHRcXHRpbnQgZnJhbWUgPSBhdC1cXHUwMDNlZnJhbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEzOjI5OjQyLjIyNDgwNDE0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDM2MDIwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWNjZXNzIFRyYWNraW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIHJlY29yZGluZyBtZW1vcnkgYWNjZXNzZXMuIFRoZSBwb2ludGVyLCBgcHRyYCwgaXMgdGhlIGtleSB2YXJpYWJsZSBoZXJlLCBhbmQgaXQncyBiZWluZyBwYXNzZWQgdG8gZWl0aGVyIGByZWNvcmRfc3RhY2tfYWNjZXNzYCBvciBgcmVjb3JkX2ltcHJlY2lzZWAsIGRlcGVuZGluZyBvbiBzb21lIGNvbmRpdGlvbi4gIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHB0ci1cdTAwM2VmcmFtZSBcdTAwM2U9IDBgIGNoZWNrLiBJZiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlLCB3ZSdyZSBvZmYgdG8gYHJlY29yZF9zdGFja19hY2Nlc3NgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHBhdGguIEl0J3MgY2FsbGluZyBgcmVjb3JkX3N0YWNrX2FjY2Vzc2Agd2l0aCB0aGUgYGluc3RhbmNlYCwgdGhlIHBvaW50ZXIgYHB0cmAsIHRoZSBzaXplIGBzemAsICBgcHRyLVx1MDAzZWZyYW1lYCwgYW5kIGBpbnNuX2lkeGAuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IHRyYWNraW5nIGFjY2Vzc2VzIHRvIHN0YWNrLWFsbG9jYXRlZCBtZW1vcnksIHNlZW1zIGxpa2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVhY2ggb2YgdGhvc2UgcGFyYW1ldGVycyByZXByZXNlbnRzIGluIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBhY2Nlc3MgYW5kIHN0YWNrIGZyYW1lIG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbnRvIGByZWNvcmRfc3RhY2tfYWNjZXNzYCBhbmQgZGlzc2VjdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Ny42NjA4Mjc1NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbGl2ZW5lc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzA4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzA4OlxcdHN0YXRpYyBpbnQgcmVjb3JkX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsXFxuMTMwOTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFyZ190cmFjayAqYXJnLFxcbjEzMTA6XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBhY2Nlc3NfYnl0ZXMsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxcbjEzMTE6XFx0e1xcbjEzMTI6XFx0XFx0aW50IGksIGVycjtcXG4xMzEzOlxcdFxcbjEzMTQ6XFx0XFx0aWYgKGFjY2Vzc19ieXRlcyA9PSAwKVxcbjEzMTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTMxNjpcXHRcXHRpZiAoYXJnLVxcdTAwM2VvZmZfY250ID09IDApIHtcXG4xMzE3OlxcdFxcdFxcdGlmIChhY2Nlc3NfYnl0ZXMgXFx1MDAzZSAwIHx8IGFjY2Vzc19ieXRlcyA9PSBTNjRfTUlOKVxcbjEzMTg6XFx0XFx0XFx0XFx0cmV0dXJuIG1hcmtfc3RhY2tfcmVhZChpbnN0YW5jZSwgZnJhbWUsIGluc25faWR4LCBTUElTX0FMTCk7XFxuMTMxOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcdGlmIChhY2Nlc3NfYnl0ZXMgIT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBhY2Nlc3NfYnl0ZXMgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGFyZy1cXHUwMDNlb2ZmX2NudCAhPSAxKVxcbjEzMjI6XFx0XFx0XFx0LyogbXVsdGktb2Zmc2V0IHdyaXRlIGNhbm5vdCBzZXQgc3RhY2tfZGVmICovXFxuMTMyMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzI0OlxcdFxcbjEzMjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZy1cXHUwMDNlb2ZmX2NudDsgaSsrKSB7XFxuMTMyNjpcXHRcXHRcXHRlcnIgPSByZWNvcmRfc3RhY2tfYWNjZXNzX29mZihpbnN0YW5jZSwgYXJnLVxcdTAwM2VvZmZbaV0sIGFjY2Vzc19ieXRlcywgZnJhbWUsIGluc25faWR4KTtcXG4xMzI3OlxcdFxcdFxcdGlmIChlcnIpXFxuMTMyODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzMjk6XFx0XFx0fVxcbjEzMzA6XFx0XFx0cmV0dXJuIDA7XFxuMTMzMTpcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdC8qXFxuMTMzNDpcXHQgKiBXaGVuIGEgcG9pbnRlciBpcyBBUkdfSU1QUkVDSVNFLCBjb25zZXJ2YXRpdmVseSBtYXJrIGV2ZXJ5IGZyYW1lIGluXFxuMTMzNTpcXHQgKiB0aGUgYml0bWFzayBhcyBmdWxseSB1c2VkLlxcbjEzMzY6XFx0ICovXFxuMTMzNzpcXHRzdGF0aWMgaW50IHJlY29yZF9pbXByZWNpc2Uoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgbWFzaywgdTMyIGluc25faWR4KVxcbjEzMzg6XFx0e1xcbjEzMzk6XFx0XFx0aW50IGRlcHRoID0gaW5zdGFuY2UtXFx1MDAzZWRlcHRoO1xcbjEzNDA6XFx0XFx0aW50IGYsIGVycjtcXG4xMzQxOlxcdFxcbjEzNDI6XFx0XFx0Zm9yIChmID0gMDsgbWFzazsgZisrLCBtYXNrIFxcdTAwM2VcXHUwMDNlPSAxKSB7XFxuMTM0MzpcXHRcXHRcXHRpZiAoIShtYXNrIFxcdTAwMjYgMSkpXFxuMTM0NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMzQ1OlxcdFxcdFxcdGlmIChmIFxcdTAwM2M9IGRlcHRoKSB7XFxuMTM0NjpcXHRcXHRcXHRcXHRlcnIgPSBtYXJrX3N0YWNrX3JlYWQoaW5zdGFuY2UsIGYsIGluc25faWR4LCBTUElTX0FMTCk7XFxuMTM0NzpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzoyOTo0Ny42NjA5NDM0OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5NzkwMjc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyB3aXRoIE5vIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyB0aGF0IHRoZSBwYXRjaCB3YXMgYSBzaW1wbGUgcmVmYWN0b3JpbmcsIGFuZCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCB0aGF0J3Mgc3RpbGwgdGhlIGNhc2UuIFNwZWNpZmljYWxseSwgaWYgYGFyZy1cdTAwM2VvZmZfY250ID09IDBgLCBgcmVjb3JkX3N0YWNrX2FjY2Vzc2AgZG9lcyAqbm90KiByZWFkIGZyb20gdGhlIGBhcmctXHUwMDNlb2ZmYCBhcnJheS4gVGhhdCB1bmluaXRpYWxpemVkIGBvZmZgIGFycmF5IHdpdGhpbiB0aGUgYHJlc29sdmVkYCBzdHJ1Y3R1cmUgd2FzIG5ldmVyIGFjY2Vzc2VkLCBiYXNlZCBvbiB0aGUgY29udHJvbCBmbG93LlxuXG5UaGUgZGlmZnMgcmV2ZWFsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgcmVwbGFjaW5nIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gd2l0aCBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGFyZ190cmFja19pbXByZWNpc2UoKWAsIGBhcmdfdHJhY2tfc3RhdGUoKWAsIGBhcmdfdHJhY2tfbm9uZSgpYCwgYW5kIGBhcmdfdHJhY2tfdW52aXNpdGVkKClgLiBGb3IgZXhhbXBsZSwgYSBjb21tb24gc25pcHBldCBsaWtlIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSB7IC5mcmFtZSA9IEFSR19OT05FIH07YCBpcyByZXBsYWNlZCB3aXRoIGBzdHJ1Y3QgYXJnX3RyYWNrIG5vbmUgPSBhcmdfdHJhY2tfbm9uZSgpO2AuIEkndmUgY2hlY2tlZCB0aGVzZSByZXBsYWNlbWVudHMgYW5kIHRoZXkgYXJlIGlkZW50aWNhbC5cblxuVGhlIG1vc3QgY3JpdGljYWwgdGhpbmcgdG8gY29uZmlybSBpcyB0aGF0IHRoZXJlIGFyZSAqbm8qIGZ1bmN0aW9uYWwgY2hhbmdlcyBoaWRkZW4gd2l0aGluIHRoaXMgdHJhbnNmb3JtYXRpb24uIFRoZSBsb2dpYyBtdXN0IGJlIGlkZW50aWNhbC4gVG8gZW5zdXJlIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgc3VidGxlIGRpZmZlcmVuY2VzLiBUaGUgYHN0cnVjdCBhcmdfdHJhY2tgIHN0cnVjdCB1c2VzIGEgdW5pb24sIHdpdGggYSBieXRlIG9mZnNldCBhcnJheSBvciBhIGJpdG1hc2ssIGFsb25nIHdpdGggYSBgZnJhbWVgIGFuZCBgb2ZmX2NudGAuXG5cbldoZW4gdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVkIHRoZSB1bnVzZWQgbWVtYmVycy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYGFyZ190cmFja19zdGF0ZShBUkdfTk9ORSlgLCBhbHNvIHJlc3VsdCBpbiBzdHJ1Y3QgbWVtYmVycyBiZWluZyB6ZXJvLWluaXRpYWxpemVkLiBTbywgYXQgdGhhdCBsZXZlbCwgd2UgYXJlIGdvb2QuXG5cblRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSBjb21lcyB3aGVuIGxvb2tpbmcgYXQgdGhlIGNvZGUgcmVwbGFjZWQgYnkgYCpkc3QgPSBhcmdfdHJhY2tfb2ZmX2ltcHJlY2lzZSguLi4pYC4gSGVyZSwgdGhlIG9sZCBjb2RlIHVzZWQgYGRzdC1cdTAwM2VvZmZfY250ID0gMDtgLCBsZWF2aW5nIGBkc3QtXHUwMDNlb2ZmYCBhbmQgYGRzdC1cdTAwM2VtYXNrYCB1bnRvdWNoZWQsIHdoaWxlIHRoZSBuZXcgY29kZSB6ZXJvcyBvdXQgYGRzdC1cdTAwM2VvZmZgIGFuZCBgZHN0LVx1MDAzZW1hc2tgLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSBhY2Nlc3MgcGF0dGVybnMuXG5cbkkndmUgZXhhbWluZWQgdGhlIGNvZGUsIGFuZCBgb2ZmYCBpcyBvbmx5IGFjY2Vzc2VkIHdoZW4gYG9mZl9jbnRgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgYG1hc2tgIGlzIG9ubHkgdXNlZCB3aGVuIGBmcmFtZSA9PSBBUkdfSU1QUkVDSVNFYC4gSW4gdGhlIGNvbnRleHQgd2hlcmUgYGRzdC1cdTAwM2VvZmZfY250ID0gMGAgd2FzIHVzZWQsIHRoZSByZWxldmFudCBgZHN0LVx1MDAzZWZyYW1lYCB3YXMgbm90IGBBUkdfSU1QUkVDSVNFYCAoaXQgd2FzIHJlbGF0ZWQgdG8gaW1wcmVjaXNlIG9mZnNldHMpLiBTbywgemVyb2luZyBvdXQgYG9mZmAgYW5kIGBtYXNrYCBpbiB0aGUgbmV3IGNvZGUgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0IGJlY2F1c2UgdGhleSB3b3VsZG4ndCBiZSBhY2Nlc3NlZC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljIGFuZCBkb2Vzbid0IGNoYW5nZSB0aGUgcHJvZ3JhbSdzIGV4ZWN1dGlvbiBvciBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgYnVncy4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byBpbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gVGhlcmVmb3JlLCBnaXZlbiBteSBhbmFseXNpcyBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSB3aWxsIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM0LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMzozMDowMy42Mzk5NzQzMDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcvY2xlYW51cCB0aGF0IHJlcGxhY2VzIG1hbnVhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIGFuZCBmaWVsZCBjbGVhcmluZyB3aXRoIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgYXJnX3RyYWNrX3N0YXRlYCwgYGFyZ190cmFja19ub25lYCkuIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEJQRiBsaXZlbmVzcyBhbmFseXNpcy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIG9yIHVuY2xlYXJlZCB1bmlvbiBmaWVsZHMgKHdoaWNoIHdlcmUgbmV2ZXIgYWNjZXNzZWQgZHVlIHRvIHN0YXRlIGNoZWNrcykgYXJlIG5vdyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy9jbGVhbnVwIHRoYXQgcmVwbGFjZXMgbWFudWFsIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgYW5kIGZpZWxkIGNsZWFyaW5nIHdpdGggc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGBhcmdfdHJhY2tfc3RhdGVgLCBgYXJnX3RyYWNrX25vbmVgKS4gSXQgZG9lcyBub3QgY2hhbmdlIHRoZSBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUgQlBGIGxpdmVuZXNzIGFuYWx5c2lzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgc29tZSBwcmV2aW91c2x5IHVuaW5pdGlhbGl6ZWQgb3IgdW5jbGVhcmVkIHVuaW9uIGZpZWxkcyAod2hpY2ggd2VyZSBuZXZlciBhY2Nlc3NlZCBkdWUgdG8gc3RhdGUgY2hlY2tzKSBhcmUgbm93IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvccx[1] Phase: Running StartedAt: 2026-07-27 13:30:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvccx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 13:30:15 +0000 UTC FinishedAt: 2026-07-27 13:30:48 +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,}