Name: series-workflow6v5dl Phase: Failed StartedAt: 2026-08-31 21:33:45 +0000 UTC FinishedAt: 2026-08-31 21:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v5dl[0] Phase: Succeeded StartedAt: 2026-08-31 21:33:45 +0000 UTC FinishedAt: 2026-08-31 21:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v5dl[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 21:33:45 +0000 UTC FinishedAt: 2026-08-31 21:35:53 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIHB1cmVseSBvZiBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZywgY29kZSBkZWR1cGxpY2F0aW9uLCB0ZXN0IGNsZWFudXBzLCBhbmQgc2VsZnRlc3QgZml4ZXMuIFNwZWNpZmljYWxseTogaXQgZXh0cmFjdHMgYSBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3NldF90YXJnZXRfcGlkKSB0byBhc3NpZ24gdGhlIFBJRCBvZiBhIHRhcmdldCwgZGVkdXBsaWNhdGVzIHBhZ2UgcHV0YmFjayBjb2RlIGludG8gYSBzdGF0aWMgaGVscGVyIChkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QpIHdpdGhvdXQgYWx0ZXJpbmcgYmVoYXZpb3IsIGNvbnZlcnRzIG11dGV4IGxvY2tpbmcgdG8gc2NvcGVkX2d1YXJkIGluIEtVbml0IHRlc3RzLCB1cGRhdGVzIHNhbXBsZSBtb2R1bGVzIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIGZpeGVzIFB5dGhvbiBtdXRhYmxlIGRlZmF1bHQgYXJndW1lbnRzIGluIHNlbGZ0ZXN0cy4gTm8gZnVuY3Rpb25hbCBvciBhbGdvcml0aG1pYyBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4ZDc2NGYyYjg2Y2Q4NTNhNGY2OGUyMmExMjRkZDgzMDY3MmU3YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTozNToxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTUsNiAmIzQzOzEwNTUsNyBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG4gc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKTtcbiB2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbiBib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiYjNDM7aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpO1xuIHZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7XG4gdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtODAwLDYgJiM0Mzs4MDEsMTcgQEAgYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEFzc2lnbiB0aGUgc3RydWN0IHBpZCBvZiB0aGUgZ2l2ZW4gcGlkIG51bWJlciB0byB0aGUgZ2l2ZW4gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG4mIzQzO3tcbiYjNDM7XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChwaWQpO1xuJiM0MztcdGlmICghdC1cdTAwM2VwaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4ge1xuIFx0bGlzdF9kZWwoXHUwMDI2dC1cdTAwM2VsaXN0KTtcbkBAIC0xOTU0LDggJiM0MzsxOTY2LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi1cbiAvKipcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbiAgKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uN2EyZTQwYmM3YmFlZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMzMwLDYgJiM0MzszMzAsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbiBcdHJldHVybiBucl9zdWNjZWVkZWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xuJiM0MztcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuJiM0MztcdFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiAmIzQzO1xuJiM0MztcdFx0XHRcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XG4mIzQzO1x0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHRcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbkBAIC0zNzEsMTMgJiM0MzszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7XG4gXG4tXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbi1cdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4tXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0Mztcbi1cdFx0XHRcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XG4tXHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbi1cdH1cbiYjNDM7XHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XG4gXG4gXHRyZXR1cm4gbnJfbWlncmF0ZWQ7XG4gfVxuQEAgLTM5NCwxNCAmIzQzOzQwMSw3IEBAIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZClcbiBcbiBcdGlmICh0YXJnZXRfbmlkIFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHxcbiBcdFx0XHQhbm9kZV9zdGF0ZSh0YXJnZXRfbmlkLCBOX01FTU9SWSkpIHtcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcbi1cbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuLVx0XHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0Mztcbi1cdFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbi1cdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4tXHRcdH1cbiYjNDM7XHRcdGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChmb2xpb19saXN0KTtcbiBcdFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi4zYzgxYjRjOTFhYzBkIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTMsNyAmIzQzOzMsNiBAQFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuQEAgLTIwMzUsOSAmIzQzOzIwMzQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XG4gXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xuLVx0XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVx1MDAzZXBpZCk7XG4tXHRcdGlmICghdC1cdTAwM2VwaWQpXG4tXHRcdFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXG4mIzQzO1x0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbiYjNDM7XHRcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVx1MDAzZXBpZCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHR0LVx1MDAzZW9ic29sZXRlID0gc3lzX3RhcmdldC1cdTAwM2VvYnNvbGV0ZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjc3MDkyN2EzMDAyMWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQzNCwxNyAmIzQzOzQzNCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgTlJfREFNT05fT1BTKSwgLUVJTlZBTCk7XG4gXG4gXHQvKiBSZWdpc3RyYXRpb24gc2hvdWxkIHN1Y2Nlc3MgYWZ0ZXIgdW5yZWdpc3RyYXRpb24gKi9cbi1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuLVx0YmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spIHtcbiYjNDM7XHRcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG4mIzQzO1x0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xuJiM0MztcdH1cbiBcbiBcdG9wcy5pZCA9IERBTU9OX09QU19WQUREUjtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spXG4mIzQzO1x0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0gYmFrO1xuIFxuIFx0LyogQ2hlY2sgZG91YmxlLXJlZ2lzdHJhdGlvbiBmYWlsdXJlIGFnYWluICovXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNm9wcyksIC1FSU5WQUwpO1xuQEAgLTQ1MiwxMCAmIzQzOzQ1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiBcbiBcdGlmIChuZWVkX2NsZWFudXApIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuLVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spXG4mIzQzO1x0XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuJiM0MztcdFx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBkMTEyM2ViYmZhYjkwLi5iZWE0NWM4N2NjOWJlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC01Miw2ICYjNDM7NTIsMTEgQEAgbW9kdWxlX3BhcmFtKGRldGVjdF9ub2RlX2FkZHJlc3NlcywgYm9vbCwgMDYwMCk7XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eHNbMl07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVzZSBwaHlzX2FkZHJfdCBpbnN0ZWFkIG9mIGRhbW9uX2FkZHJfcmFuZ2UgKHVuc2lnbmVkIGxvbmcpIGZvciBwaHlzaWNhbFxuJiM0MzsgKiBhZGRyZXNzZXMuICBPbiAzMi1iaXQgc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiA0R0IgbWVtb3J5LCBwaHlzX2FkZHJfdCB3aWxsXG4mIzQzOyAqIGJlIDY0LWJpdCB3aGlsZSB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC5cbiYjNDM7ICovXG4gc3RydWN0IHJlZ2lvbl9yYW5nZSB7XG4gXHRwaHlzX2FkZHJfdCBzdGFydDtcbiBcdHBoeXNfYWRkcl90IGVuZDtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3ByY2wuYyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5pbmRleCA4NDIwOTliZDYyMjg2Li44M2RkZjEyODExZDU3IDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5AQCAtMzIsNyAmIzQzOzMyLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9QUkNMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICYjNDM7NzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4mIzQzO1x0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbiBcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHR0YXJnZXQtXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XG4gXG4gXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxuIFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3dzc2UuYyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jXG5pbmRleCAzN2ZkNWRhMjAxNTg4Li41Mzk0NGFlYTg0MjhlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi93c3NlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jXG5AQCAtMzMsNyAmIzQzOzMzLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9XU1NFXCYjMzQ7KTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICYjNDM7NzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4mIzQzO1x0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbiBcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHR0YXJnZXQtXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XG4gXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuaW5kZXggZTZhMjI2NWQ3MjFlOC4uZjYwNGI3ZDY1MzBiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5AQCAtMzIxLDggJiM0MzszMjEsMTAgQEAgY2xhc3MgRGFtb3NGaWx0ZXJzOlxuICAgICBmaWx0ZXJzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9W10pOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6XG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gW11cbiAgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcbiAgICAgICAgIGZvciBpZHgsIGZpbHRlcl8gaW4gZW51bWVyYXRlKHNlbGYuZmlsdGVycyk6XG4gICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHhcbkBAIC0zNjgsNyAmIzQzOzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XG4gICAgIGRlc3RzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPVtdKTpcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1Ob25lKTpcbiYjNDM7ICAgICAgICBpZiBkZXN0cyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBkZXN0cyA9IFtdXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxuICAgICAgICAgICAgIGRlc3QuaWR4ID0gaWR4XG5AQCAtNDI2LDE1ICYjNDM7NDMwLDIxIEBAIGNsYXNzIERhbW9zOlxuICAgICBzdGF0cyA9IE5vbmVcbiAgICAgdHJpZWRfcmVnaW9ucyA9IE5vbmVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0mIzM5O3N0YXQmIzM5OywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXG4tICAgICAgICAgICAgICAgICBxdW90YT1EYW1vc1F1b3RhKCksIHdhdGVybWFya3M9RGFtb3NXYXRlcm1hcmtzKCksXG4tICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0mIzM5O3N0YXQmIzM5OywgYWNjZXNzX3BhdHRlcm49Tm9uZSwgcXVvdGE9Tm9uZSxcbiYjNDM7ICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzPU5vbmUsIGNvcmVfZmlsdGVycz1Ob25lLCBvcHNfZmlsdGVycz1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIGZpbHRlcnM9Tm9uZSwgdGFyZ2V0X25pZD0wLCBkZXN0cz1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIGFwcGx5X2ludGVydmFsX3VzPTApOlxuICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb25cbiYjNDM7ICAgICAgICBpZiBhY2Nlc3NfcGF0dGVybiBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBhY2Nlc3NfcGF0dGVybiA9IERhbW9zQWNjZXNzUGF0dGVybigpXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm5cbiAgICAgICAgIHNlbGYuYWNjZXNzX3BhdHRlcm4uc2NoZW1lID0gc2VsZlxuJiM0MzsgICAgICAgIGlmIHF1b3RhIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHF1b3RhID0gRGFtb3NRdW90YSgpXG4gICAgICAgICBzZWxmLnF1b3RhID0gcXVvdGFcbiAgICAgICAgIHNlbGYucXVvdGEuc2NoZW1lID0gc2VsZlxuJiM0MzsgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXG4gICAgICAgICBzZWxmLndhdGVybWFya3MgPSB3YXRlcm1hcmtzXG4gICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZlxuIFxuQEAgLTQ0OCw2ICYjNDM7NDU4LDggQEAgY2xhc3MgRGFtb3M6XG4gICAgICAgICBzZWxmLmZpbHRlcnMuc2NoZW1lID0gc2VsZlxuIFxuICAgICAgICAgc2VsZi50YXJnZXRfbmlkID0gdGFyZ2V0X25pZFxuJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZlxuIFxuQEAgLTU2OCwxMCAmIzQzOzU4MCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuLSAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcbi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4mIzQzOyAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxuJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbiYjNDM7ICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbCA9IEludGVydmFsc0dvYWwoKVxuICAgICAgICAgc2VsZi5pbnRlcnZhbHNfZ29hbCA9IGludGVydmFsc19nb2FsXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZlxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcbkBAIC03MDMsNyAmIzQzOzcxNyw5IEBAIGNsYXNzIEtkYW1vbmQ6XG4gICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9Tm9uZSwgcmVmcmVzaF9tcz1Ob25lKTpcbiYjNDM7ICAgICAgICBpZiBjb250ZXh0cyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBjb250ZXh0cyA9IFtdXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcbiAgICAgICAgIHNlbGYucmVmcmVzaF9tcyA9IHJlZnJlc2hfbXNcbiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOlxuQEAgLTg1Myw3ICYjNDM7ODY5LDkgQEAgY2xhc3MgS2RhbW9uZDpcbiBjbGFzcyBLZGFtb25kczpcbiAgICAga2RhbW9uZHMgPSBbXVxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwga2RhbW9uZHM9W10pOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtkYW1vbmRzID0gW11cbiAgICAgICAgIHNlbGYua2RhbW9uZHMgPSBrZGFtb25kc1xuICAgICAgICAgZm9yIGlkeCwga2RhbW9uZCBpbiBlbnVtZXJhdGUoc2VsZi5rZGFtb25kcyk6XG4gICAgICAgICAgICAga2RhbW9uZC5pZHggPSBpZHhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCAzZmZhMDU0YjYzODY3Li44OGEyNjQyMmZmNDRjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMzg1LDYgJiM0MzszODUsMTAgQEAgZGVmIG1haW4oKTpcbiAgICAgYXNzZXJ0X2N0eHNfY29tbWl0dGVkKGtkYW1vbmRzKVxuICAgICBrZGFtb25kcy5zdG9wKClcbiBcbiYjNDM7ICAgIGZvciBwcm9jIGluIChwcm9jMSwgcHJvYzIsIHByb2MzKTpcbiYjNDM7ICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpXG4mIzQzOyAgICAgICAgcHJvYy5jb21tdW5pY2F0ZSgpXG4mIzQzO1xuICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKVxuIFxuIGlmIF9fbmFtZV9fID09ICYjMzk7X19tYWluX18mIzM5OzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODhkNzY0ZjJiODZjZDg1M2E0ZjY4ZTIyYTEyNGRkODMwNjcyZTdhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIxOjM1OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTEwNTUsNiAmIzQzOzEwNTUsNyBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7CiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpOwogdm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7CiBib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKJiM0MztpbnQgZGFtb25fc2V0X3RhcmdldF9waWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IHBpZCk7CiB2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpOwogdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BpZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtODAwLDYgJiM0Mzs4MDEsMTcgQEAgYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbGlzdF9lbXB0eSgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEFzc2lnbiB0aGUgc3RydWN0IHBpZCBvZiB0aGUgZ2l2ZW4gcGlkIG51bWJlciB0byB0aGUgZ2l2ZW4gdGFyZ2V0LgomIzQzOyAqLwomIzQzO2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKQomIzQzO3sKJiM0MzsJdC0mZ3Q7cGlkID0gZmluZF9nZXRfcGlkKHBpZCk7CiYjNDM7CWlmICghdC0mZ3Q7cGlkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCkKIHsKIAlsaXN0X2RlbCgmYW1wO3QtJmd0O2xpc3QpOwpAQCAtMTk1NCw4ICYjNDM7MTk2Niw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpOwotCiAvKioKICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLgogICogQGN0eHM6CWFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjdhMmU0MGJjN2JhZWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTMzMCw2ICYjNDM7MzMwLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoCiAJcmV0dXJuIG5yX3N1Y2NlZWRlZDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJd2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7CiYjNDM7CQlmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiYjNDM7CQlub2RlX3N0YXRfc3ViX2ZvbGlvKGZvbGlvLCBOUl9JU09MQVRFRF9BTk9OICYjNDM7CiYjNDM7CQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiYjNDM7CQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkJCQkJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAkJCQkJCWludCB0YXJnZXRfbmlkKQpAQCAtMzcxLDEzICYjNDM7Mzg0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAogCWxpc3Rfc3BsaWNlKCZhbXA7cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHsKLQkJZm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7Ci0JCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7Ci0JCW5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsKLQkJCQlmb2xpb19pc19maWxlX2xydShmb2xpbykpOwotCQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7Ci0JfQomIzQzOwlkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7CiAKIAlyZXR1cm4gbnJfbWlncmF0ZWQ7CiB9CkBAIC0zOTQsMTQgJiM0Mzs0MDEsNyBAQCB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpCiAKIAlpZiAodGFyZ2V0X25pZCAmbHQ7IDAgfHwgdGFyZ2V0X25pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMgfHwKIAkJCSFub2RlX3N0YXRlKHRhcmdldF9uaWQsIE5fTUVNT1JZKSkgewotCQl3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHsKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7Ci0KLQkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7Ci0JCQlub2RlX3N0YXRfc3ViX2ZvbGlvKGZvbGlvLCBOUl9JU09MQVRFRF9BTk9OICYjNDM7Ci0JCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7Ci0JCQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7Ci0JCX0KJiM0MzsJCWRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChmb2xpb19saXN0KTsKIAkJcmV0dXJuIG5yX21pZ3JhdGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMi4uM2M4MWI0YzkxYWMwZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0zLDcgJiM0MzszLDYgQEAKICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZQogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9waWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKIApAQCAtMjAzNSw5ICYjNDM7MjAzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LAogCQlyZXR1cm4gLUVOT01FTTsKIAlkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7CiAJaWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHsKLQkJdC0mZ3Q7cGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtJmd0O3BpZCk7Ci0JCWlmICghdC0mZ3Q7cGlkKQotCQkJLyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovCiYjNDM7CQkvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi8KJiM0MzsJCWlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LSZndDtwaWQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXQtJmd0O29ic29sZXRlID0gc3lzX3RhcmdldC0mZ3Q7b2Jzb2xldGU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNzcwOTI3YTMwMDIxYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNDM0LDE3ICYjNDM7NDM0LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgTlJfREFNT05fT1BTKSwgLUVJTlZBTCk7CiAKIAkvKiBSZWdpc3RyYXRpb24gc2hvdWxkIHN1Y2Nlc3MgYWZ0ZXIgdW5yZWdpc3RyYXRpb24gKi8KLQltdXRleF9sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwotCWJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07Ci0JZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKLQltdXRleF91bmxvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtkYW1vbl9vcHNfbG9jaykgewomIzQzOwkJYmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTsKJiM0MzsJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPQomIzQzOwkJCShzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKJiM0MzsJfQogCiAJb3BzLmlkID0gREFNT05fT1BTX1ZBRERSOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoJmFtcDtvcHMpLCAwKTsKIAotCW11dGV4X2xvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7Ci0JZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhazsKLQltdXRleF91bmxvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtkYW1vbl9vcHNfbG9jaykKJiM0MzsJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7CiAKIAkvKiBDaGVjayBkb3VibGUtcmVnaXN0cmF0aW9uIGZhaWx1cmUgYWdhaW4gKi8KIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKCZhbXA7b3BzKSwgLUVJTlZBTCk7CkBAIC00NTIsMTAgJiM0Mzs0NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KQogCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwogCiAJaWYgKG5lZWRfY2xlYW51cCkgewotCQltdXRleF9sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwotCQlkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0KLQkJCShzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2RhbW9uX29wc19sb2NrKQomIzQzOwkJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPQomIzQzOwkJCQkoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307CiAJfQogfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL210aWVyLmMgYi9zYW1wbGVzL2RhbW9uL210aWVyLmMKaW5kZXggZDExMjNlYmJmYWI5MC4uYmVhNDVjODdjYzliZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuYwpAQCAtNTIsNiAmIzQzOzUyLDExIEBAIG1vZHVsZV9wYXJhbShkZXRlY3Rfbm9kZV9hZGRyZXNzZXMsIGJvb2wsIDA2MDApOwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4c1syXTsKIAomIzQzOy8qCiYjNDM7ICogVXNlIHBoeXNfYWRkcl90IGluc3RlYWQgb2YgZGFtb25fYWRkcl9yYW5nZSAodW5zaWduZWQgbG9uZykgZm9yIHBoeXNpY2FsCiYjNDM7ICogYWRkcmVzc2VzLiAgT24gMzItYml0IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gNEdCIG1lbW9yeSwgcGh5c19hZGRyX3Qgd2lsbAomIzQzOyAqIGJlIDY0LWJpdCB3aGlsZSB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KJiM0MzsgKi8KIHN0cnVjdCByZWdpb25fcmFuZ2UgewogCXBoeXNfYWRkcl90IHN0YXJ0OwogCXBoeXNfYWRkcl90IGVuZDsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vcHJjbC5jIGIvc2FtcGxlcy9kYW1vbi9wcmNsLmMKaW5kZXggODQyMDk5YmQ2MjI4Ni4uODNkZGYxMjgxMWQ1NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9wcmNsLmMKQEAgLTMyLDcgJiM0MzszMiw2IEBAIG1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCAmYW1wO2VuYWJsZWRfcGFyYW1fb3BzLCAmYW1wO2VuYWJsZWQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLCAmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9QUkNMJiMzNDspOwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4Owotc3RhdGljIHN0cnVjdCBwaWQgKnRhcmdldF9waWRwOwogCiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpCiB7CkBAIC03OSwxMiAmIzQzOzc4LDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpOwotCXRhcmdldF9waWRwID0gZmluZF9nZXRfcGlkKHRhcmdldF9waWQpOwotCWlmICghdGFyZ2V0X3BpZHApIHsKJiM0MzsJaWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHsKIAkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXRhcmdldC0mZ3Q7cGlkID0gdGFyZ2V0X3BpZHA7CiAKIAlzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKAogCQkJJmFtcDsoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3dzc2UuYyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jCmluZGV4IDM3ZmQ1ZGEyMDE1ODguLjUzOTQ0YWVhODQyOGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jCkBAIC0zMyw3ICYjNDM7MzMsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgJmFtcDtlbmFibGVkX3BhcmFtX29wcywgJmFtcDtlbmFibGVkLCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgJiMzNDtFbmFibGUgb3IgZGlzYWJsZSBEQU1PTl9TQU1QTEVfV1NTRSYjMzQ7KTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDsKLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDsKIAogc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewpAQCAtNzksMTIgJiM0Mzs3OCwxMCBAQCBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTsKLQl0YXJnZXRfcGlkcCA9IGZpbmRfZ2V0X3BpZCh0YXJnZXRfcGlkKTsKLQlpZiAoIXRhcmdldF9waWRwKSB7CiYjNDM7CWlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7CiAJCWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl0YXJnZXQtJmd0O3BpZCA9IHRhcmdldF9waWRwOwogCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQppbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CkBAIC0zMjEsOCAmIzQzOzMyMSwxMCBAQCBjbGFzcyBEYW1vc0ZpbHRlcnM6CiAgICAgZmlsdGVycyA9IE5vbmUKICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmaWx0ZXJzPVtdKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gW10KICAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwogICAgICAgICBmb3IgaWR4LCBmaWx0ZXJfIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgogICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHgKQEAgLTM2OCw3ICYjNDM7MzcwLDkgQEAgY2xhc3MgRGFtb3NEZXN0czoKICAgICBkZXN0cyA9IE5vbmUKICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1bXSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1Ob25lKToKJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZGVzdHMgPSBbXQogICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHMKICAgICAgICAgZm9yIGlkeCwgZGVzdCBpbiBlbnVtZXJhdGUoc2VsZi5kZXN0cyk6CiAgICAgICAgICAgICBkZXN0LmlkeCA9IGlkeApAQCAtNDI2LDE1ICYjNDM7NDMwLDIxIEBAIGNsYXNzIERhbW9zOgogICAgIHN0YXRzID0gTm9uZQogICAgIHRyaWVkX3JlZ2lvbnMgPSBOb25lCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSYjMzk7c3RhdCYjMzk7LCBhY2Nlc3NfcGF0dGVybj1EYW1vc0FjY2Vzc1BhdHRlcm4oKSwKLSAgICAgICAgICAgICAgICAgcXVvdGE9RGFtb3NRdW90YSgpLCB3YXRlcm1hcmtzPURhbW9zV2F0ZXJtYXJrcygpLAotICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsCi0gICAgICAgICAgICAgICAgIGRlc3RzPURhbW9zRGVzdHMoKSwgYXBwbHlfaW50ZXJ2YWxfdXM9MCk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhY3Rpb249JiMzOTtzdGF0JiMzOTssIGFjY2Vzc19wYXR0ZXJuPU5vbmUsIHF1b3RhPU5vbmUsCiYjNDM7ICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzPU5vbmUsIGNvcmVfZmlsdGVycz1Ob25lLCBvcHNfZmlsdGVycz1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgZmlsdGVycz1Ob25lLCB0YXJnZXRfbmlkPTAsIGRlc3RzPU5vbmUsCiYjNDM7ICAgICAgICAgICAgICAgICBhcHBseV9pbnRlcnZhbF91cz0wKToKICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb24KJiM0MzsgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4gPSBEYW1vc0FjY2Vzc1BhdHRlcm4oKQogICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm4KICAgICAgICAgc2VsZi5hY2Nlc3NfcGF0dGVybi5zY2hlbWUgPSBzZWxmCiYjNDM7ICAgICAgICBpZiBxdW90YSBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHF1b3RhID0gRGFtb3NRdW90YSgpCiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YQogICAgICAgICBzZWxmLnF1b3RhLnNjaGVtZSA9IHNlbGYKJiM0MzsgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICB3YXRlcm1hcmtzID0gRGFtb3NXYXRlcm1hcmtzKCkKICAgICAgICAgc2VsZi53YXRlcm1hcmtzID0gd2F0ZXJtYXJrcwogICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZgogCkBAIC00NDgsNiAmIzQzOzQ1OCw4IEBAIGNsYXNzIERhbW9zOgogICAgICAgICBzZWxmLmZpbHRlcnMuc2NoZW1lID0gc2VsZgogCiAgICAgICAgIHNlbGYudGFyZ2V0X25pZCA9IHRhcmdldF9uaWQKJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZGVzdHMgPSBEYW1vc0Rlc3RzKCkKICAgICAgICAgc2VsZi5kZXN0cyA9IGRlc3RzCiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZgogCkBAIC01NjgsMTAgJiM0Mzs1ODAsMTIgQEAgY2xhc3MgRGFtb25BdHRyczoKICAgICBjb250ZXh0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCwKLSAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCwKLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKToKJiM0MzsgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCwKJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOgogICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91cwogICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzCiYjNDM7ICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGludGVydmFsc19nb2FsID0gSW50ZXJ2YWxzR29hbCgpCiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbAogICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZgogICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91cwpAQCAtNzAzLDcgJiM0Mzs3MTcsOSBAQCBjbGFzcyBLZGFtb25kOgogICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzCiAgICAga2RhbW9uZHMgPSBOb25lICMgcGFyZW50CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOgomIzQzOyAgICAgICAgaWYgY29udGV4dHMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBjb250ZXh0cyA9IFtdCiAgICAgICAgIHNlbGYuY29udGV4dHMgPSBjb250ZXh0cwogICAgICAgICBzZWxmLnJlZnJlc2hfbXMgPSByZWZyZXNoX21zCiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOgpAQCAtODUzLDcgJiM0Mzs4NjksOSBAQCBjbGFzcyBLZGFtb25kOgogY2xhc3MgS2RhbW9uZHM6CiAgICAga2RhbW9uZHMgPSBbXQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPVtdKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOgomIzQzOyAgICAgICAgaWYga2RhbW9uZHMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBrZGFtb25kcyA9IFtdCiAgICAgICAgIHNlbGYua2RhbW9uZHMgPSBrZGFtb25kcwogICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKToKICAgICAgICAgICAgIGtkYW1vbmQuaWR4ID0gaWR4CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CkBAIC0zODUsNiAmIzQzOzM4NSwxMCBAQCBkZWYgbWFpbigpOgogICAgIGFzc2VydF9jdHhzX2NvbW1pdHRlZChrZGFtb25kcykKICAgICBrZGFtb25kcy5zdG9wKCkKIAomIzQzOyAgICBmb3IgcHJvYyBpbiAocHJvYzEsIHByb2MyLCBwcm9jMyk6CiYjNDM7ICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCiYjNDM7ICAgICAgICBwcm9jLmNvbW11bmljYXRlKCkKJiM0MzsKICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM5O19fbWFpbl9fJiMzOTs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEQU1PTiBSZWZhY3RvcmluZyAtIFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uIGNvZGUgY2xlYW51cCBhbmQgcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgaW52b2x2ZSBleHRyYWN0aW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBmb2xpbyBwdXRiYWNrLCBjcmVhdGluZyBhIHdyYXBwZXIgZm9yIGBmaW5kX2dldF9waWRgLCB1cGRhdGluZyBhIGt1bml0IHRlc3QsIGFuZCBmaXhpbmcgc29tZSBzZWxmdGVzdCBzY3JpcHRzLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdGhhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2NlbmFyaW8gaGVyZS4KClRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgYWN0dWFsbHkgaW50cm9kdWNlIGFueSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9ucyB0byB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGlzLiBNeSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbG9naWMgY2hhbmdlcywgaW50cm9kdWNlZCBidWdzIChoaWdobHkgdW5saWtlbHkpLCBvciBuZXcgY29kZSBwYXRocyB0byB0cmlnZ2VyIGZ1enppbmcuCgpMb29raW5nIGF0IGBkYW1vbl9zZXRfdGFyZ2V0X3BpZGAsIGl0JiMzOTtzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYGZpbmRfZ2V0X3BpZGAuIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVmb3JlL2FmdGVyIGNvZGUsIEkgc2VlIHRoaXMgaXMganVzdCBjb3NtZXRpYy4KClRoZSBgZGFtb25fcHV0YmFja19mb2xpb19saXN0YCBmdW5jdGlvbj8gSWRlbnRpY2FsIGNvZGUgZnJvbSB0d28gZGlmZmVyZW50IGxvY2F0aW9ucyBmYWN0b3JlZCBvdXQgYXMgYSBzdGF0aWMgaGVscGVyLiBObyBjaGFuZ2VzIGluIHRoZSBsb2dpYyB0aGVyZS4KClRoZSBrdW5pdCB0ZXN0IHJlZmFjdG9yaW5nIHdpdGggYHNjb3BlZF9ndWFyZGA/IEEgc3RhbmRhcmQgcHJhY3RpY2UgaW4gbW9kZXJuIGtlcm5lbCBkZXZlbG9wbWVudDsgc2ltcGx5IG1ha2VzIHRoZSB0ZXN0IGNvZGUgY2xlYXJlciBhbmQgbGVzcyBwcm9uZSB0byBtYW51YWwgbG9jayBtYW5hZ2VtZW50IGVycm9ycy4KClRoZSB1cGRhdGVzIHRvIHNhbXBsZXM/IFRoZXNlIHNpbXBseSByZWZhY3RvciB0aGUgdXNlIG9mIGBmaW5kX2dldF9waWRgIHdpdGggb3VyIG5ldyBoZWxwZXIuIERvZXNuJiMzOTt0IGNoYW5nZSBob3cgdGhpbmdzICp3b3JrKi4KCkZpbmFsbHksIHRoZSBmaXhlcyB0byBzZWxmdGVzdHM/IFB5dGhvbiBmaXhlcy4gVGhlc2UgYXJlIHVzZXItc3BhY2Ugc2NyaXB0cywgYW5kIGFueSBidWcgaW4gdGhvc2Ugd291bGQgYWZmZWN0ICp0ZXN0aW5nKiB0aGUga2VybmVsLCBub3QgKnRoZSBrZXJuZWwgaXRzZWxmKi4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMgYW5kIHRoZSBzeXprYWxsZXIgdHJpYWdlIHByaW5jaXBsZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHB1cmUgcmVmYWN0b3JpbmcsIGNvZGUgY2xlYW51cCwgdGVzdHMsIGFuZCBzYW1wbGVzIHdpdGggemVybyBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgYmVoYXZpb3JhbC9mdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMuIEl0IGlzIG15IGRldGVybWluYXRpb24gdGhlcmUgaXMgemVybyBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF90YXJnZXRfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDU3PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTg6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktdm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzk5PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwNi0gKi9cbm1tL2RhbW9uL2NvcmUuYzo4MDc6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG5tbS9kYW1vbi9jb3JlLmMtODA4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM3LVx0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjAzODpcdFx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHQsIHN5c190YXJnZXQtXHUwMDNlcGlkKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz01OT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtODAtXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjgxOlx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTgyLVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04MC1cdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuc2FtcGxlcy9kYW1vbi93c3NlLmM6ODE6XHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xuc2FtcGxlcy9kYW1vbi93c3NlLmMtODItXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTcKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgYXVkaXQuIEJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBmdW5jdGlvbmFsIHNoaWZ0cyBoZXJlLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZC4gSSBzZWU6IGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9zeXNmcy5jYCwgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLCBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgLCBgc2FtcGxlcy9kYW1vbi93c3NlLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5YCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weWAuCgpBaCwgeWVzLiBQdXJlbHkgcmVmYWN0b3Jpbmc6IGV4dHJhY3RpbmcgYSBjb3VwbGUgb2Ygc21hbGwgaGVscGVyIGZ1bmN0aW9ucyAtIGBkYW1vbl9zZXRfdGFyZ2V0X3BpZGAgYW5kIGBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3RgIC0gYW5kIG5vIHNlbWFudGljIGNoYW5nZXMuIEkgc3BvdCBLVW5pdCB0ZXN0IG1vZGVybml6YXRpb24sIHRoZSB1c3VhbCBzYW1wbGUgY29kZSB1cGRhdGVzLCBhbmQgc29tZSBzZWxmdGVzdCBzY3JpcHQgZml4ZXMsIHRvby4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgZWRpdHMsIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuIE5vdGhpbmcgbmV3IHRvIGZ1enogaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBUaW1lIHRvIGNhbGwgaXQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNS44ODEwMzEzMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMzc1MzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb25zaXN0cyBwdXJlbHkgb2Ygbm9uLWZ1bmN0aW9uYWwgcmVmYWN0b3JpbmcsIGNvZGUgZGVkdXBsaWNhdGlvbiwgdGVzdCBjbGVhbnVwcywgYW5kIHNlbGZ0ZXN0IGZpeGVzLiBTcGVjaWZpY2FsbHk6IGl0IGV4dHJhY3RzIGEgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCkgdG8gYXNzaWduIHRoZSBQSUQgb2YgYSB0YXJnZXQsIGRlZHVwbGljYXRlcyBwYWdlIHB1dGJhY2sgY29kZSBpbnRvIGEgc3RhdGljIGhlbHBlciAoZGFtb25fcHV0YmFja19mb2xpb19saXN0KSB3aXRob3V0IGFsdGVyaW5nIGJlaGF2aW9yLCBjb252ZXJ0cyBtdXRleCBsb2NraW5nIHRvIHNjb3BlZF9ndWFyZCBpbiBLVW5pdCB0ZXN0cywgdXBkYXRlcyBzYW1wbGUgbW9kdWxlcyB0byB1c2UgdGhlIG5ldyBoZWxwZXIsIGFuZCBmaXhlcyBQeXRob24gbXV0YWJsZSBkZWZhdWx0IGFyZ3VtZW50cyBpbiBzZWxmdGVzdHMuIE5vIGZ1bmN0aW9uYWwgb3IgYWxnb3JpdGhtaWMgY2hhbmdlcyBhcmUgaW50cm9kdWNlZCB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjE1Ljg4MTAzNjcyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTEwMzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4ZDc2NGYyYjg2Y2Q4NTNhNGY2OGUyMmExMjRkZDgzMDY3MmU3YWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6MzU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uNTYwN2Y5OGVjNjMwNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMTA1NSw2ICsxMDU1LDcgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpO1xcbiB2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG4gYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcXG4gdm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG4gdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiB1bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BpZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbkBAIC04MDAsNiArODAxLDE3IEBAIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZWFkYXB0aXZlX3RhcmdldHMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBc3NpZ24gdGhlIHN0cnVjdCBwaWQgb2YgdGhlIGdpdmVuIHBpZCBudW1iZXIgdG8gdGhlIGdpdmVuIHRhcmdldC5cXG4rICovXFxuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxcbit7XFxuK1xcdHQtXFx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChwaWQpO1xcbitcXHRpZiAoIXQtXFx1MDAzZXBpZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuIHtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnQtXFx1MDAzZWxpc3QpO1xcbkBAIC0xOTU0LDggKzE5NjYsNiBAQCBzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLVxcbiAvKipcXG4gICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxuICAqIEBjdHhzOlxcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5pbmRleCBmYmRhNzBkOGVhNGQwLi43YTJlNDBiYzdiYWVkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0zMzAsNiArMzMwLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXFxuIFxcdHJldHVybiBucl9zdWNjZWVkZWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcbitcXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcXG4rXFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4rXFx0XFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiArXFxuK1xcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuK1xcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZClcXG5AQCAtMzcxLDEzICszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXG4gXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnJldF9mb2xpb3MsIGZvbGlvX2xpc3QpO1xcbiBcXG4tXFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XFxuLVxcdFxcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuLVxcdFxcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xcbi1cXHRcXHRcXHRcXHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xcbi1cXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuLVxcdH1cXG4rXFx0ZGFtb25fcHV0YmFja19mb2xpb19saXN0KGZvbGlvX2xpc3QpO1xcbiBcXG4gXFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xcbiB9XFxuQEAgLTM5NCwxNCArNDAxLDcgQEAgdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxcbiBcXG4gXFx0aWYgKHRhcmdldF9uaWQgXFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8XFxuIFxcdFxcdFxcdCFub2RlX3N0YXRlKHRhcmdldF9uaWQsIE5fTUVNT1JZKSkge1xcbi1cXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcXG4tXFxuLVxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4tXFx0XFx0XFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiArXFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XFxuIFxcdFxcdHJldHVybiBucl9taWdyYXRlZDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi4zYzgxYjRjOTFhYzBkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTMsNyArMyw2IEBAXFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuIFxcbkBAIC0yMDM1LDkgKzIwMzQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcXG4gXFx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcXG4tXFx0XFx0dC1cXHUwMDNlcGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtXFx1MDAzZXBpZCk7XFxuLVxcdFxcdGlmICghdC1cXHUwMDNlcGlkKVxcbi1cXHRcXHRcXHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cXG4rXFx0XFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXFxuK1xcdFxcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVxcdTAwM2VwaWQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHR0LVxcdTAwM2VvYnNvbGV0ZSA9IHN5c190YXJnZXQtXFx1MDAzZW9ic29sZXRlO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi43NzA5MjdhMzAwMjFjIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC00MzQsMTcgKzQzNCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcXG4gXFxuIFxcdC8qIFJlZ2lzdHJhdGlvbiBzaG91bGQgc3VjY2VzcyBhZnRlciB1bnJlZ2lzdHJhdGlvbiAqL1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxuLVxcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XFxuLVxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZkYW1vbl9vcHNfbG9jaykge1xcbitcXHRcXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xcbitcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xcbitcXHR9XFxuIFxcbiBcXHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXFx1MDAyNm9wcyksIDApO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbi1cXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0gYmFrO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2ZGFtb25fb3BzX2xvY2spXFxuK1xcdFxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XFxuIFxcbiBcXHQvKiBDaGVjayBkb3VibGUtcmVnaXN0cmF0aW9uIGZhaWx1cmUgYWdhaW4gKi9cXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2b3BzKSwgLUVJTlZBTCk7XFxuQEAgLTQ1MiwxMCArNDUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuIFxcbiBcXHRpZiAobmVlZF9jbGVhbnVwKSB7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4tXFx0XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XFxuLVxcdFxcdFxcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmRhbW9uX29wc19sb2NrKVxcbitcXHRcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG4rXFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xcbmluZGV4IGQxMTIzZWJiZmFiOTAuLmJlYTQ1Yzg3Y2M5YmUgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuQEAgLTUyLDYgKzUyLDExIEBAIG1vZHVsZV9wYXJhbShkZXRlY3Rfbm9kZV9hZGRyZXNzZXMsIGJvb2wsIDA2MDApO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eHNbMl07XFxuIFxcbisvKlxcbisgKiBVc2UgcGh5c19hZGRyX3QgaW5zdGVhZCBvZiBkYW1vbl9hZGRyX3JhbmdlICh1bnNpZ25lZCBsb25nKSBmb3IgcGh5c2ljYWxcXG4rICogYWRkcmVzc2VzLiAgT24gMzItYml0IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gNEdCIG1lbW9yeSwgcGh5c19hZGRyX3Qgd2lsbFxcbisgKiBiZSA2NC1iaXQgd2hpbGUgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXQuXFxuKyAqL1xcbiBzdHJ1Y3QgcmVnaW9uX3JhbmdlIHtcXG4gXFx0cGh5c19hZGRyX3Qgc3RhcnQ7XFxuIFxcdHBoeXNfYWRkcl90IGVuZDtcXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9wcmNsLmMgYi9zYW1wbGVzL2RhbW9uL3ByY2wuY1xcbmluZGV4IDg0MjA5OWJkNjIyODYuLjgzZGRmMTI4MTFkNTcgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcXG4rKysgYi9zYW1wbGVzL2RhbW9uL3ByY2wuY1xcbkBAIC0zMiw3ICszMiw2IEBAIG1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZlbmFibGVkLCAwNjAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLCBcXFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fU0FNUExFX1BSQ0xcXFwiKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcXG4gXFxuIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4ge1xcbkBAIC03OSwxMiArNzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG4tXFx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XFxuLVxcdGlmICghdGFyZ2V0X3BpZHApIHtcXG4rXFx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcXG4gXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFx0dGFyZ2V0LVxcdTAwM2VwaWQgPSB0YXJnZXRfcGlkcDtcXG4gXFxuIFxcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFxuIFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7XFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vd3NzZS5jIGIvc2FtcGxlcy9kYW1vbi93c3NlLmNcXG5pbmRleCAzN2ZkNWRhMjAxNTg4Li41Mzk0NGFlYTg0MjhlIDEwMDY0NFxcbi0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi93c3NlLmNcXG5AQCAtMzMsNyArMzMsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2ZW5hYmxlZCwgMDYwMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgXFxcIkVuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9XU1NFXFxcIik7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbi1zdGF0aWMgc3RydWN0IHBpZCAqdGFyZ2V0X3BpZHA7XFxuIFxcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG5AQCAtNzksMTIgKzc4LDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XFxuLVxcdHRhcmdldF9waWRwID0gZmluZF9nZXRfcGlkKHRhcmdldF9waWQpO1xcbi1cXHRpZiAoIXRhcmdldF9waWRwKSB7XFxuK1xcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7XFxuIFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHRhcmdldC1cXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XFxuIFxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycikge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcXG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbkBAIC0zMjEsOCArMzIxLDEwIEBAIGNsYXNzIERhbW9zRmlsdGVyczpcXG4gICAgIGZpbHRlcnMgPSBOb25lXFxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZmlsdGVycz1bXSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZmlsdGVycz1Ob25lKTpcXG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXFxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxcbisgICAgICAgICAgICBmaWx0ZXJzID0gW11cXG4gICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXFxuICAgICAgICAgZm9yIGlkeCwgZmlsdGVyXyBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4gICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHhcXG5AQCAtMzY4LDcgKzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XFxuICAgICBkZXN0cyA9IE5vbmVcXG4gICAgIHNjaGVtZSA9IE5vbmUgICAjIG93bmVyIHNjaGVtZVxcbiBcXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1bXSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzdHM9Tm9uZSk6XFxuKyAgICAgICAgaWYgZGVzdHMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZGVzdHMgPSBbXVxcbiAgICAgICAgIHNlbGYuZGVzdHMgPSBkZXN0c1xcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxcbiAgICAgICAgICAgICBkZXN0LmlkeCA9IGlkeFxcbkBAIC00MjYsMTUgKzQzMCwyMSBAQCBjbGFzcyBEYW1vczpcXG4gICAgIHN0YXRzID0gTm9uZVxcbiAgICAgdHJpZWRfcmVnaW9ucyA9IE5vbmVcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXFxuLSAgICAgICAgICAgICAgICAgcXVvdGE9RGFtb3NRdW90YSgpLCB3YXRlcm1hcmtzPURhbW9zV2F0ZXJtYXJrcygpLFxcbi0gICAgICAgICAgICAgICAgIGNvcmVfZmlsdGVycz1bXSwgb3BzX2ZpbHRlcnM9W10sIGZpbHRlcnM9W10sIHRhcmdldF9uaWQ9MCxcXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0nc3RhdCcsIGFjY2Vzc19wYXR0ZXJuPU5vbmUsIHF1b3RhPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgd2F0ZXJtYXJrcz1Ob25lLCBjb3JlX2ZpbHRlcnM9Tm9uZSwgb3BzX2ZpbHRlcnM9Tm9uZSxcXG4rICAgICAgICAgICAgICAgICBmaWx0ZXJzPU5vbmUsIHRhcmdldF9uaWQ9MCwgZGVzdHM9Tm9uZSxcXG4rICAgICAgICAgICAgICAgICBhcHBseV9pbnRlcnZhbF91cz0wKTpcXG4gICAgICAgICBzZWxmLmFjdGlvbiA9IGFjdGlvblxcbisgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuID0gRGFtb3NBY2Nlc3NQYXR0ZXJuKClcXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm5cXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuLnNjaGVtZSA9IHNlbGZcXG4rICAgICAgICBpZiBxdW90YSBpcyBOb25lOlxcbisgICAgICAgICAgICBxdW90YSA9IERhbW9zUXVvdGEoKVxcbiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YVxcbiAgICAgICAgIHNlbGYucXVvdGEuc2NoZW1lID0gc2VsZlxcbisgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZTpcXG4rICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXFxuICAgICAgICAgc2VsZi53YXRlcm1hcmtzID0gd2F0ZXJtYXJrc1xcbiAgICAgICAgIHNlbGYud2F0ZXJtYXJrcy5zY2hlbWUgPSBzZWxmXFxuIFxcbkBAIC00NDgsNiArNDU4LDggQEAgY2xhc3MgRGFtb3M6XFxuICAgICAgICAgc2VsZi5maWx0ZXJzLnNjaGVtZSA9IHNlbGZcXG4gXFxuICAgICAgICAgc2VsZi50YXJnZXRfbmlkID0gdGFyZ2V0X25pZFxcbisgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXFxuICAgICAgICAgc2VsZi5kZXN0cyA9IGRlc3RzXFxuICAgICAgICAgc2VsZi5kZXN0cy5zY2hlbWUgPSBzZWxmXFxuIFxcbkBAIC01NjgsMTAgKzU4MCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgY29udGV4dCA9IE5vbmVcXG4gXFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxcbi0gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsXFxuLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKTpcXG4rICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1Ob25lLCB1cGRhdGVfdXM9MTAwMDAwMCwgbWluX25yX3JlZ2lvbnM9MTAsXFxuKyAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XFxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXFxuKyAgICAgICAgaWYgaW50ZXJ2YWxzX2dvYWwgaXMgTm9uZTpcXG4rICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWwgPSBJbnRlcnZhbHNHb2FsKClcXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWxcXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZlxcbiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzXFxuQEAgLTcwMyw3ICs3MTcsOSBAQCBjbGFzcyBLZGFtb25kOlxcbiAgICAgaWR4ID0gTm9uZSAgICAgICMgaW5kZXggb2YgdGhpcyBrZGFtb25kIGJldHdlZW4gc2libGluZ3NcXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxcbiBcXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1bXSwgcmVmcmVzaF9tcz1Ob25lKTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOlxcbisgICAgICAgIGlmIGNvbnRleHRzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGNvbnRleHRzID0gW11cXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcXG4gICAgICAgICBzZWxmLnJlZnJlc2hfbXMgPSByZWZyZXNoX21zXFxuICAgICAgICAgZm9yIGlkeCwgY29udGV4dCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZXh0cyk6XFxuQEAgLTg1Myw3ICs4NjksOSBAQCBjbGFzcyBLZGFtb25kOlxcbiBjbGFzcyBLZGFtb25kczpcXG4gICAgIGtkYW1vbmRzID0gW11cXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwga2RhbW9uZHM9W10pOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOlxcbisgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGtkYW1vbmRzID0gW11cXG4gICAgICAgICBzZWxmLmtkYW1vbmRzID0ga2RhbW9uZHNcXG4gICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKTpcXG4gICAgICAgICAgICAga2RhbW9uZC5pZHggPSBpZHhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0zODUsNiArMzg1LDEwIEBAIGRlZiBtYWluKCk6XFxuICAgICBhc3NlcnRfY3R4c19jb21taXR0ZWQoa2RhbW9uZHMpXFxuICAgICBrZGFtb25kcy5zdG9wKClcXG4gXFxuKyAgICBmb3IgcHJvYyBpbiAocHJvYzEsIHByb2MyLCBwcm9jMyk6XFxuKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKVxcbisgICAgICAgIHByb2MuY29tbXVuaWNhdGUoKVxcbitcXG4gICAgIHRlc3RfbWVtY2dfZmlsdGVyX21lbWNnX3BhdGhfc3RhZ2luZygpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNy4zNzI3MDc2NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MjEyMDY1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGQ3NjRmMmI4NmNkODUzYTRmNjhlMjJhMTI0ZGQ4MzA2NzJlN2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6MzU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTUsNiArMTA1NSw3IEBAIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpO1xuIHZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcbiB2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmRlOTNlOTk0OGUyZWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGlkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC04MDAsNiArODAxLDE3IEBAIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gfVxuIFxuKy8qXG4rICogQXNzaWduIHRoZSBzdHJ1Y3QgcGlkIG9mIHRoZSBnaXZlbiBwaWQgbnVtYmVyIHRvIHRoZSBnaXZlbiB0YXJnZXQuXG4rICovXG4raW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG4re1xuK1x0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQocGlkKTtcbitcdGlmICghdC1cdTAwM2VwaWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiB7XG4gXHRsaXN0X2RlbChcdTAwMjZ0LVx1MDAzZWxpc3QpO1xuQEAgLTE5NTQsOCArMTk2Niw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tXG4gLyoqXG4gICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG4gICogQGN0eHM6XHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjdhMmU0MGJjN2JhZWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTMzMCw2ICszMzAsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbiBcdHJldHVybiBucl9zdWNjZWVkZWQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbitcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4rXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuK1x0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbitcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0aW50IHRhcmdldF9uaWQpXG5AQCAtMzcxLDEzICszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7XG4gXG4tXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbi1cdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4tXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuLVx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbi1cdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuLVx0fVxuK1x0ZGFtb25fcHV0YmFja19mb2xpb19saXN0KGZvbGlvX2xpc3QpO1xuIFxuIFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xuIH1cbkBAIC0zOTQsMTQgKzQwMSw3IEBAIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZClcbiBcbiBcdGlmICh0YXJnZXRfbmlkIFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHxcbiBcdFx0XHQhbm9kZV9zdGF0ZSh0YXJnZXRfbmlkLCBOX01FTU9SWSkpIHtcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcbi1cbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuLVx0XHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuLVx0XHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuLVx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbi1cdFx0fVxuK1x0XHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XG4gXHRcdHJldHVybiBucl9taWdyYXRlZDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uM2M4MWI0YzkxYWMwZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0zLDcgKzMsNiBAQFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuQEAgLTIwMzUsOSArMjAzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcbiBcdGlmIChkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpKSB7XG4tXHRcdHQtXHUwMDNlcGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtXHUwMDNlcGlkKTtcbi1cdFx0aWYgKCF0LVx1MDAzZXBpZClcbi1cdFx0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbitcdFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXG4rXHRcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVx1MDAzZXBpZCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHR0LVx1MDAzZW9ic29sZXRlID0gc3lzX3RhcmdldC1cdTAwM2VvYnNvbGV0ZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjc3MDkyN2EzMDAyMWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQzNCwxNyArNDM0LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcbiBcbiBcdC8qIFJlZ2lzdHJhdGlvbiBzaG91bGQgc3VjY2VzcyBhZnRlciB1bnJlZ2lzdHJhdGlvbiAqL1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xuLVx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmRhbW9uX29wc19sb2NrKSB7XG4rXHRcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG4rXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbitcdH1cbiBcbiBcdG9wcy5pZCA9IERBTU9OX09QU19WQUREUjtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZkYW1vbl9vcHNfbG9jaylcbitcdFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcbiBcbiBcdC8qIENoZWNrIGRvdWJsZS1yZWdpc3RyYXRpb24gZmFpbHVyZSBhZ2FpbiAqL1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcdTAwMjZvcHMpLCAtRUlOVkFMKTtcbkBAIC00NTIsMTAgKzQ1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiBcbiBcdGlmIChuZWVkX2NsZWFudXApIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuLVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZkYW1vbl9vcHNfbG9jaylcbitcdFx0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cbitcdFx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBkMTEyM2ViYmZhYjkwLi5iZWE0NWM4N2NjOWJlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC01Miw2ICs1MiwxMSBAQCBtb2R1bGVfcGFyYW0oZGV0ZWN0X25vZGVfYWRkcmVzc2VzLCBib29sLCAwNjAwKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4c1syXTtcbiBcbisvKlxuKyAqIFVzZSBwaHlzX2FkZHJfdCBpbnN0ZWFkIG9mIGRhbW9uX2FkZHJfcmFuZ2UgKHVuc2lnbmVkIGxvbmcpIGZvciBwaHlzaWNhbFxuKyAqIGFkZHJlc3Nlcy4gIE9uIDMyLWJpdCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDRHQiBtZW1vcnksIHBoeXNfYWRkcl90IHdpbGxcbisgKiBiZSA2NC1iaXQgd2hpbGUgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXQuXG4rICovXG4gc3RydWN0IHJlZ2lvbl9yYW5nZSB7XG4gXHRwaHlzX2FkZHJfdCBzdGFydDtcbiBcdHBoeXNfYWRkcl90IGVuZDtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3ByY2wuYyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5pbmRleCA4NDIwOTliZDYyMjg2Li44M2RkZjEyODExZDU3IDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcbisrKyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5AQCAtMzIsNyArMzIsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNmVuYWJsZWQsIDA2MDApO1xuIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgXCJFbmFibGUgb3IgZGlzYWJsZSBEQU1PTl9TQU1QTEVfUFJDTFwiKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICs3OCwxMCBAQCBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG4tXHR0YXJnZXRfcGlkcCA9IGZpbmRfZ2V0X3BpZCh0YXJnZXRfcGlkKTtcbi1cdGlmICghdGFyZ2V0X3BpZHApIHtcbitcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7XG4gXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0dGFyZ2V0LVx1MDAzZXBpZCA9IHRhcmdldF9waWRwO1xuIFxuIFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi93c3NlLmMgYi9zYW1wbGVzL2RhbW9uL3dzc2UuY1xuaW5kZXggMzdmZDVkYTIwMTU4OC4uNTM5NDRhZWE4NDI4ZSAxMDA2NDRcbi0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL3dzc2UuY1xuQEAgLTMzLDcgKzMzLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fU0FNUExFX1dTU0VcIik7XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbi1zdGF0aWMgc3RydWN0IHBpZCAqdGFyZ2V0X3BpZHA7XG4gXG4gc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuIHtcbkBAIC03OSwxMiArNzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4rXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xuIFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHRhcmdldC1cdTAwM2VwaWQgPSB0YXJnZXRfcGlkcDtcbiBcbiBcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC0zMjEsOCArMzIxLDEwIEBAIGNsYXNzIERhbW9zRmlsdGVyczpcbiAgICAgZmlsdGVycyA9IE5vbmVcbiAgICAgc2NoZW1lID0gTm9uZSAgICMgb3duZXIgc2NoZW1lXG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmaWx0ZXJzPVtdKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6XG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4gICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4gICAgICAgICBmb3IgaWR4LCBmaWx0ZXJfIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOlxuICAgICAgICAgICAgIGZpbHRlcl8uaWR4ID0gaWR4XG5AQCAtMzY4LDcgKzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XG4gICAgIGRlc3RzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPVtdKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPU5vbmUpOlxuKyAgICAgICAgaWYgZGVzdHMgaXMgTm9uZTpcbisgICAgICAgICAgICBkZXN0cyA9IFtdXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxuICAgICAgICAgICAgIGRlc3QuaWR4ID0gaWR4XG5AQCAtNDI2LDE1ICs0MzAsMjEgQEAgY2xhc3MgRGFtb3M6XG4gICAgIHN0YXRzID0gTm9uZVxuICAgICB0cmllZF9yZWdpb25zID0gTm9uZVxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXG4tICAgICAgICAgICAgICAgICBxdW90YT1EYW1vc1F1b3RhKCksIHdhdGVybWFya3M9RGFtb3NXYXRlcm1hcmtzKCksXG4tICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49Tm9uZSwgcXVvdGE9Tm9uZSxcbisgICAgICAgICAgICAgICAgIHdhdGVybWFya3M9Tm9uZSwgY29yZV9maWx0ZXJzPU5vbmUsIG9wc19maWx0ZXJzPU5vbmUsXG4rICAgICAgICAgICAgICAgICBmaWx0ZXJzPU5vbmUsIHRhcmdldF9uaWQ9MCwgZGVzdHM9Tm9uZSxcbisgICAgICAgICAgICAgICAgIGFwcGx5X2ludGVydmFsX3VzPTApOlxuICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb25cbisgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6XG4rICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4gPSBEYW1vc0FjY2Vzc1BhdHRlcm4oKVxuICAgICAgICAgc2VsZi5hY2Nlc3NfcGF0dGVybiA9IGFjY2Vzc19wYXR0ZXJuXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuLnNjaGVtZSA9IHNlbGZcbisgICAgICAgIGlmIHF1b3RhIGlzIE5vbmU6XG4rICAgICAgICAgICAgcXVvdGEgPSBEYW1vc1F1b3RhKClcbiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YVxuICAgICAgICAgc2VsZi5xdW90YS5zY2hlbWUgPSBzZWxmXG4rICAgICAgICBpZiB3YXRlcm1hcmtzIGlzIE5vbmU6XG4rICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXG4gICAgICAgICBzZWxmLndhdGVybWFya3MgPSB3YXRlcm1hcmtzXG4gICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZlxuIFxuQEAgLTQ0OCw2ICs0NTgsOCBAQCBjbGFzcyBEYW1vczpcbiAgICAgICAgIHNlbGYuZmlsdGVycy5zY2hlbWUgPSBzZWxmXG4gXG4gICAgICAgICBzZWxmLnRhcmdldF9uaWQgPSB0YXJnZXRfbmlkXG4rICAgICAgICBpZiBkZXN0cyBpcyBOb25lOlxuKyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZlxuIFxuQEAgLTU2OCwxMCArNTgwLDEyIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIGNvbnRleHQgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXG4tICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1JbnRlcnZhbHNHb2FsKCksIHVwZGF0ZV91cz0xMDAwMDAwLFxuLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKTpcbisgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCxcbisgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbisgICAgICAgIGlmIGludGVydmFsc19nb2FsIGlzIE5vbmU6XG4rICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWwgPSBJbnRlcnZhbHNHb2FsKClcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxuICAgICAgICAgc2VsZi5pbnRlcnZhbHNfZ29hbC5hdHRycyA9IHNlbGZcbiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzXG5AQCAtNzAzLDcgKzcxNyw5IEBAIGNsYXNzIEtkYW1vbmQ6XG4gICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOlxuKyAgICAgICAgaWYgY29udGV4dHMgaXMgTm9uZTpcbisgICAgICAgICAgICBjb250ZXh0cyA9IFtdXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcbiAgICAgICAgIHNlbGYucmVmcmVzaF9tcyA9IHJlZnJlc2hfbXNcbiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOlxuQEAgLTg1Myw3ICs4NjksOSBAQCBjbGFzcyBLZGFtb25kOlxuIGNsYXNzIEtkYW1vbmRzOlxuICAgICBrZGFtb25kcyA9IFtdXG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZGFtb25kcz1bXSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZGFtb25kcz1Ob25lKTpcbisgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XG4rICAgICAgICAgICAga2RhbW9uZHMgPSBbXVxuICAgICAgICAgc2VsZi5rZGFtb25kcyA9IGtkYW1vbmRzXG4gICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKTpcbiAgICAgICAgICAgICBrZGFtb25kLmlkeCA9IGlkeFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0zODUsNiArMzg1LDEwIEBAIGRlZiBtYWluKCk6XG4gICAgIGFzc2VydF9jdHhzX2NvbW1pdHRlZChrZGFtb25kcylcbiAgICAga2RhbW9uZHMuc3RvcCgpXG4gXG4rICAgIGZvciBwcm9jIGluIChwcm9jMSwgcHJvYzIsIHByb2MzKTpcbisgICAgICAgIHByb2MudGVybWluYXRlKClcbisgICAgICAgIHByb2MuY29tbXVuaWNhdGUoKVxuK1xuICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKVxuIFxuIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNy4zNzI3MDkwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI4NTUzMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogREFNT04gUmVmYWN0b3JpbmcgLSBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb24gY29kZSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBpbnZvbHZlIGV4dHJhY3RpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGZvbGlvIHB1dGJhY2ssIGNyZWF0aW5nIGEgd3JhcHBlciBmb3IgYGZpbmRfZ2V0X3BpZGAsIHVwZGF0aW5nIGEga3VuaXQgdGVzdCwgYW5kIGZpeGluZyBzb21lIHNlbGZ0ZXN0IHNjcmlwdHMuIE15IGZpcnN0IGluY2xpbmF0aW9uLCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvIGhlcmUuXG5cblRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgYWN0dWFsbHkgaW50cm9kdWNlIGFueSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9ucyB0byB0aGUga2VybmVsLiBMZXQncyBkZWx2ZSBpbnRvIHRoaXMuIE15IGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBsb2dpYyBjaGFuZ2VzLCBpbnRyb2R1Y2VkIGJ1Z3MgKGhpZ2hseSB1bmxpa2VseSksIG9yIG5ldyBjb2RlIHBhdGhzIHRvIHRyaWdnZXIgZnV6emluZy5cblxuTG9va2luZyBhdCBgZGFtb25fc2V0X3RhcmdldF9waWRgLCBpdCdzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYGZpbmRfZ2V0X3BpZGAuIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVmb3JlL2FmdGVyIGNvZGUsIEkgc2VlIHRoaXMgaXMganVzdCBjb3NtZXRpYy5cblxuVGhlIGBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3RgIGZ1bmN0aW9uPyBJZGVudGljYWwgY29kZSBmcm9tIHR3byBkaWZmZXJlbnQgbG9jYXRpb25zIGZhY3RvcmVkIG91dCBhcyBhIHN0YXRpYyBoZWxwZXIuIE5vIGNoYW5nZXMgaW4gdGhlIGxvZ2ljIHRoZXJlLlxuXG5UaGUga3VuaXQgdGVzdCByZWZhY3RvcmluZyB3aXRoIGBzY29wZWRfZ3VhcmRgPyBBIHN0YW5kYXJkIHByYWN0aWNlIGluIG1vZGVybiBrZXJuZWwgZGV2ZWxvcG1lbnQ7IHNpbXBseSBtYWtlcyB0aGUgdGVzdCBjb2RlIGNsZWFyZXIgYW5kIGxlc3MgcHJvbmUgdG8gbWFudWFsIGxvY2sgbWFuYWdlbWVudCBlcnJvcnMuXG5cblRoZSB1cGRhdGVzIHRvIHNhbXBsZXM/IFRoZXNlIHNpbXBseSByZWZhY3RvciB0aGUgdXNlIG9mIGBmaW5kX2dldF9waWRgIHdpdGggb3VyIG5ldyBoZWxwZXIuIERvZXNuJ3QgY2hhbmdlIGhvdyB0aGluZ3MgKndvcmsqLlxuXG5GaW5hbGx5LCB0aGUgZml4ZXMgdG8gc2VsZnRlc3RzPyBQeXRob24gZml4ZXMuIFRoZXNlIGFyZSB1c2VyLXNwYWNlIHNjcmlwdHMsIGFuZCBhbnkgYnVnIGluIHRob3NlIHdvdWxkIGFmZmVjdCAqdGVzdGluZyogdGhlIGtlcm5lbCwgbm90ICp0aGUga2VybmVsIGl0c2VsZiouXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMgYW5kIHRoZSBzeXprYWxsZXIgdHJpYWdlIHByaW5jaXBsZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHB1cmUgcmVmYWN0b3JpbmcsIGNvZGUgY2xlYW51cCwgdGVzdHMsIGFuZCBzYW1wbGVzIHdpdGggemVybyBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgYmVoYXZpb3JhbC9mdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMuIEl0IGlzIG15IGRldGVybWluYXRpb24gdGhlcmUgaXMgemVybyBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjM3LjY1ODI0NDI2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxMzMxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF90YXJnZXRfcGlkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDU3PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU4OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1OS12b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5OT1ib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwNi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6ODA3OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDI4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDM3LVxcdFxcdC8qIGNhbGxlciB3aWxsIGRlc3Ryb3kgdGFyZ2V0cyAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzODpcXHRcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodCwgc3lzX3RhcmdldC1cXHUwMDNlcGlkKSlcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz01OT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy04MC1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo4MTpcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTgyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04MC1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo4MTpcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTgyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjM5LjE3OTU4MjIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDUxNjc1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgcXVpY2sgYXVkaXQuIEJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGZ1bmN0aW9uYWwgc2hpZnRzIGhlcmUuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkLiBJIHNlZTogYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL3N5c2ZzLmNgLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AsIGBzYW1wbGVzL2RhbW9uL3ByY2wuY2AsIGBzYW1wbGVzL2RhbW9uL3dzc2UuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5YC5cblxuQWgsIHllcy4gUHVyZWx5IHJlZmFjdG9yaW5nOiBleHRyYWN0aW5nIGEgY291cGxlIG9mIHNtYWxsIGhlbHBlciBmdW5jdGlvbnMgLSBgZGFtb25fc2V0X3RhcmdldF9waWRgIGFuZCBgZGFtb25fcHV0YmFja19mb2xpb19saXN0YCAtIGFuZCBubyBzZW1hbnRpYyBjaGFuZ2VzLiBJIHNwb3QgS1VuaXQgdGVzdCBtb2Rlcm5pemF0aW9uLCB0aGUgdXN1YWwgc2FtcGxlIGNvZGUgdXBkYXRlcywgYW5kIHNvbWUgc2VsZnRlc3Qgc2NyaXB0IGZpeGVzLCB0b28uXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgZWRpdHMsIHRoZXJlJ3Mgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaGVyZS4gTm90aGluZyBuZXcgdG8gZnV6eiBpbiBhbnkgbWVhbmluZ2Z1bCB3YXkuIFRpbWUgdG8gY2FsbCBpdC4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1NywiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6MzU6NDIuNTg0NzUyNzY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNTo0Mi41ODQ3NzQ2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v5dl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 21:33:45 +0000 UTC FinishedAt: 2026-08-31 21:35:44 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIHB1cmVseSBvZiBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZywgY29kZSBkZWR1cGxpY2F0aW9uLCB0ZXN0IGNsZWFudXBzLCBhbmQgc2VsZnRlc3QgZml4ZXMuIFNwZWNpZmljYWxseTogaXQgZXh0cmFjdHMgYSBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3NldF90YXJnZXRfcGlkKSB0byBhc3NpZ24gdGhlIFBJRCBvZiBhIHRhcmdldCwgZGVkdXBsaWNhdGVzIHBhZ2UgcHV0YmFjayBjb2RlIGludG8gYSBzdGF0aWMgaGVscGVyIChkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QpIHdpdGhvdXQgYWx0ZXJpbmcgYmVoYXZpb3IsIGNvbnZlcnRzIG11dGV4IGxvY2tpbmcgdG8gc2NvcGVkX2d1YXJkIGluIEtVbml0IHRlc3RzLCB1cGRhdGVzIHNhbXBsZSBtb2R1bGVzIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIGZpeGVzIFB5dGhvbiBtdXRhYmxlIGRlZmF1bHQgYXJndW1lbnRzIGluIHNlbGZ0ZXN0cy4gTm8gZnVuY3Rpb25hbCBvciBhbGdvcml0aG1pYyBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4ZDc2NGYyYjg2Y2Q4NTNhNGY2OGUyMmExMjRkZDgzMDY3MmU3YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTozNToxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTUsNiAmIzQzOzEwNTUsNyBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG4gc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKTtcbiB2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbiBib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiYjNDM7aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpO1xuIHZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7XG4gdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIHVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtODAwLDYgJiM0Mzs4MDEsMTcgQEAgYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBsaXN0X2VtcHR5KFx1MDAyNmN0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEFzc2lnbiB0aGUgc3RydWN0IHBpZCBvZiB0aGUgZ2l2ZW4gcGlkIG51bWJlciB0byB0aGUgZ2l2ZW4gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG4mIzQzO3tcbiYjNDM7XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChwaWQpO1xuJiM0MztcdGlmICghdC1cdTAwM2VwaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4ge1xuIFx0bGlzdF9kZWwoXHUwMDI2dC1cdTAwM2VsaXN0KTtcbkBAIC0xOTU0LDggJiM0MzsxOTY2LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi1cbiAvKipcbiAgKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbiAgKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uN2EyZTQwYmM3YmFlZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMzMwLDYgJiM0MzszMzAsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbiBcdHJldHVybiBucl9zdWNjZWVkZWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xuJiM0MztcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuJiM0MztcdFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiAmIzQzO1xuJiM0MztcdFx0XHRcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XG4mIzQzO1x0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWlncmF0ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHRcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbkBAIC0zNzEsMTMgJiM0MzszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7XG4gXG4tXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbi1cdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4tXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0Mztcbi1cdFx0XHRcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XG4tXHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbi1cdH1cbiYjNDM7XHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XG4gXG4gXHRyZXR1cm4gbnJfbWlncmF0ZWQ7XG4gfVxuQEAgLTM5NCwxNCAmIzQzOzQwMSw3IEBAIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZClcbiBcbiBcdGlmICh0YXJnZXRfbmlkIFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHxcbiBcdFx0XHQhbm9kZV9zdGF0ZSh0YXJnZXRfbmlkLCBOX01FTU9SWSkpIHtcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcbi1cbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuLVx0XHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0Mztcbi1cdFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbi1cdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4tXHRcdH1cbiYjNDM7XHRcdGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChmb2xpb19saXN0KTtcbiBcdFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi4zYzgxYjRjOTFhYzBkIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTMsNyAmIzQzOzMsNiBAQFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuQEAgLTIwMzUsOSAmIzQzOzIwMzQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XG4gXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xuLVx0XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVx1MDAzZXBpZCk7XG4tXHRcdGlmICghdC1cdTAwM2VwaWQpXG4tXHRcdFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXG4mIzQzO1x0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbiYjNDM7XHRcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVx1MDAzZXBpZCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHR0LVx1MDAzZW9ic29sZXRlID0gc3lzX3RhcmdldC1cdTAwM2VvYnNvbGV0ZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjc3MDkyN2EzMDAyMWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQzNCwxNyAmIzQzOzQzNCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgTlJfREFNT05fT1BTKSwgLUVJTlZBTCk7XG4gXG4gXHQvKiBSZWdpc3RyYXRpb24gc2hvdWxkIHN1Y2Nlc3MgYWZ0ZXIgdW5yZWdpc3RyYXRpb24gKi9cbi1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuLVx0YmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spIHtcbiYjNDM7XHRcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG4mIzQzO1x0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xuJiM0MztcdH1cbiBcbiBcdG9wcy5pZCA9IERBTU9OX09QU19WQUREUjtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spXG4mIzQzO1x0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0gYmFrO1xuIFxuIFx0LyogQ2hlY2sgZG91YmxlLXJlZ2lzdHJhdGlvbiBmYWlsdXJlIGFnYWluICovXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNm9wcyksIC1FSU5WQUwpO1xuQEAgLTQ1MiwxMCAmIzQzOzQ1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiBcbiBcdGlmIChuZWVkX2NsZWFudXApIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuLVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2ZGFtb25fb3BzX2xvY2spXG4mIzQzO1x0XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuJiM0MztcdFx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBkMTEyM2ViYmZhYjkwLi5iZWE0NWM4N2NjOWJlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC01Miw2ICYjNDM7NTIsMTEgQEAgbW9kdWxlX3BhcmFtKGRldGVjdF9ub2RlX2FkZHJlc3NlcywgYm9vbCwgMDYwMCk7XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eHNbMl07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVzZSBwaHlzX2FkZHJfdCBpbnN0ZWFkIG9mIGRhbW9uX2FkZHJfcmFuZ2UgKHVuc2lnbmVkIGxvbmcpIGZvciBwaHlzaWNhbFxuJiM0MzsgKiBhZGRyZXNzZXMuICBPbiAzMi1iaXQgc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiA0R0IgbWVtb3J5LCBwaHlzX2FkZHJfdCB3aWxsXG4mIzQzOyAqIGJlIDY0LWJpdCB3aGlsZSB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC5cbiYjNDM7ICovXG4gc3RydWN0IHJlZ2lvbl9yYW5nZSB7XG4gXHRwaHlzX2FkZHJfdCBzdGFydDtcbiBcdHBoeXNfYWRkcl90IGVuZDtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3ByY2wuYyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5pbmRleCA4NDIwOTliZDYyMjg2Li44M2RkZjEyODExZDU3IDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5AQCAtMzIsNyAmIzQzOzMyLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9QUkNMXCYjMzQ7KTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICYjNDM7NzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4mIzQzO1x0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbiBcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHR0YXJnZXQtXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XG4gXG4gXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxuIFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3dzc2UuYyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jXG5pbmRleCAzN2ZkNWRhMjAxNTg4Li41Mzk0NGFlYTg0MjhlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi93c3NlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jXG5AQCAtMzMsNyAmIzQzOzMzLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9XU1NFXCYjMzQ7KTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICYjNDM7NzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4mIzQzO1x0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbiBcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHR0YXJnZXQtXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XG4gXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuaW5kZXggZTZhMjI2NWQ3MjFlOC4uZjYwNGI3ZDY1MzBiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5AQCAtMzIxLDggJiM0MzszMjEsMTAgQEAgY2xhc3MgRGFtb3NGaWx0ZXJzOlxuICAgICBmaWx0ZXJzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9W10pOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6XG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gW11cbiAgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcbiAgICAgICAgIGZvciBpZHgsIGZpbHRlcl8gaW4gZW51bWVyYXRlKHNlbGYuZmlsdGVycyk6XG4gICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHhcbkBAIC0zNjgsNyAmIzQzOzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XG4gICAgIGRlc3RzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPVtdKTpcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1Ob25lKTpcbiYjNDM7ICAgICAgICBpZiBkZXN0cyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBkZXN0cyA9IFtdXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxuICAgICAgICAgICAgIGRlc3QuaWR4ID0gaWR4XG5AQCAtNDI2LDE1ICYjNDM7NDMwLDIxIEBAIGNsYXNzIERhbW9zOlxuICAgICBzdGF0cyA9IE5vbmVcbiAgICAgdHJpZWRfcmVnaW9ucyA9IE5vbmVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0mIzM5O3N0YXQmIzM5OywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXG4tICAgICAgICAgICAgICAgICBxdW90YT1EYW1vc1F1b3RhKCksIHdhdGVybWFya3M9RGFtb3NXYXRlcm1hcmtzKCksXG4tICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0mIzM5O3N0YXQmIzM5OywgYWNjZXNzX3BhdHRlcm49Tm9uZSwgcXVvdGE9Tm9uZSxcbiYjNDM7ICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzPU5vbmUsIGNvcmVfZmlsdGVycz1Ob25lLCBvcHNfZmlsdGVycz1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIGZpbHRlcnM9Tm9uZSwgdGFyZ2V0X25pZD0wLCBkZXN0cz1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIGFwcGx5X2ludGVydmFsX3VzPTApOlxuICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb25cbiYjNDM7ICAgICAgICBpZiBhY2Nlc3NfcGF0dGVybiBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBhY2Nlc3NfcGF0dGVybiA9IERhbW9zQWNjZXNzUGF0dGVybigpXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm5cbiAgICAgICAgIHNlbGYuYWNjZXNzX3BhdHRlcm4uc2NoZW1lID0gc2VsZlxuJiM0MzsgICAgICAgIGlmIHF1b3RhIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHF1b3RhID0gRGFtb3NRdW90YSgpXG4gICAgICAgICBzZWxmLnF1b3RhID0gcXVvdGFcbiAgICAgICAgIHNlbGYucXVvdGEuc2NoZW1lID0gc2VsZlxuJiM0MzsgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXG4gICAgICAgICBzZWxmLndhdGVybWFya3MgPSB3YXRlcm1hcmtzXG4gICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZlxuIFxuQEAgLTQ0OCw2ICYjNDM7NDU4LDggQEAgY2xhc3MgRGFtb3M6XG4gICAgICAgICBzZWxmLmZpbHRlcnMuc2NoZW1lID0gc2VsZlxuIFxuICAgICAgICAgc2VsZi50YXJnZXRfbmlkID0gdGFyZ2V0X25pZFxuJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZlxuIFxuQEAgLTU2OCwxMCAmIzQzOzU4MCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuLSAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcbi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4mIzQzOyAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxuJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbiYjNDM7ICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbCA9IEludGVydmFsc0dvYWwoKVxuICAgICAgICAgc2VsZi5pbnRlcnZhbHNfZ29hbCA9IGludGVydmFsc19nb2FsXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZlxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcbkBAIC03MDMsNyAmIzQzOzcxNyw5IEBAIGNsYXNzIEtkYW1vbmQ6XG4gICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9Tm9uZSwgcmVmcmVzaF9tcz1Ob25lKTpcbiYjNDM7ICAgICAgICBpZiBjb250ZXh0cyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBjb250ZXh0cyA9IFtdXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcbiAgICAgICAgIHNlbGYucmVmcmVzaF9tcyA9IHJlZnJlc2hfbXNcbiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOlxuQEAgLTg1Myw3ICYjNDM7ODY5LDkgQEAgY2xhc3MgS2RhbW9uZDpcbiBjbGFzcyBLZGFtb25kczpcbiAgICAga2RhbW9uZHMgPSBbXVxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwga2RhbW9uZHM9W10pOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGtkYW1vbmRzID0gW11cbiAgICAgICAgIHNlbGYua2RhbW9uZHMgPSBrZGFtb25kc1xuICAgICAgICAgZm9yIGlkeCwga2RhbW9uZCBpbiBlbnVtZXJhdGUoc2VsZi5rZGFtb25kcyk6XG4gICAgICAgICAgICAga2RhbW9uZC5pZHggPSBpZHhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCAzZmZhMDU0YjYzODY3Li44OGEyNjQyMmZmNDRjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMzg1LDYgJiM0MzszODUsMTAgQEAgZGVmIG1haW4oKTpcbiAgICAgYXNzZXJ0X2N0eHNfY29tbWl0dGVkKGtkYW1vbmRzKVxuICAgICBrZGFtb25kcy5zdG9wKClcbiBcbiYjNDM7ICAgIGZvciBwcm9jIGluIChwcm9jMSwgcHJvYzIsIHByb2MzKTpcbiYjNDM7ICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpXG4mIzQzOyAgICAgICAgcHJvYy5jb21tdW5pY2F0ZSgpXG4mIzQzO1xuICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKVxuIFxuIGlmIF9fbmFtZV9fID09ICYjMzk7X19tYWluX18mIzM5OzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODhkNzY0ZjJiODZjZDg1M2E0ZjY4ZTIyYTEyNGRkODMwNjcyZTdhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIxOjM1OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTEwNTUsNiAmIzQzOzEwNTUsNyBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7CiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpOwogdm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7CiBib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTsKJiM0MztpbnQgZGFtb25fc2V0X3RhcmdldF9waWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IHBpZCk7CiB2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpOwogdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgaW50IGRhbW9uX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BpZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtODAwLDYgJiM0Mzs4MDEsMTcgQEAgYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbGlzdF9lbXB0eSgmYW1wO2N0eC0mZ3Q7YWRhcHRpdmVfdGFyZ2V0cyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEFzc2lnbiB0aGUgc3RydWN0IHBpZCBvZiB0aGUgZ2l2ZW4gcGlkIG51bWJlciB0byB0aGUgZ2l2ZW4gdGFyZ2V0LgomIzQzOyAqLwomIzQzO2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKQomIzQzO3sKJiM0MzsJdC0mZ3Q7cGlkID0gZmluZF9nZXRfcGlkKHBpZCk7CiYjNDM7CWlmICghdC0mZ3Q7cGlkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCkKIHsKIAlsaXN0X2RlbCgmYW1wO3QtJmd0O2xpc3QpOwpAQCAtMTk1NCw4ICYjNDM7MTk2Niw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpOwotCiAvKioKICAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLgogICogQGN0eHM6CWFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjdhMmU0MGJjN2JhZWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTMzMCw2ICYjNDM7MzMwLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoCiAJcmV0dXJuIG5yX3N1Y2NlZWRlZDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJd2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7CiYjNDM7CQlmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiYjNDM7CQlub2RlX3N0YXRfc3ViX2ZvbGlvKGZvbGlvLCBOUl9JU09MQVRFRF9BTk9OICYjNDM7CiYjNDM7CQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7CiYjNDM7CQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkJCQkJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAkJCQkJCWludCB0YXJnZXRfbmlkKQpAQCAtMzcxLDEzICYjNDM7Mzg0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAogCWxpc3Rfc3BsaWNlKCZhbXA7cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHsKLQkJZm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7Ci0JCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7Ci0JCW5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsKLQkJCQlmb2xpb19pc19maWxlX2xydShmb2xpbykpOwotCQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7Ci0JfQomIzQzOwlkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7CiAKIAlyZXR1cm4gbnJfbWlncmF0ZWQ7CiB9CkBAIC0zOTQsMTQgJiM0Mzs0MDEsNyBAQCB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpCiAKIAlpZiAodGFyZ2V0X25pZCAmbHQ7IDAgfHwgdGFyZ2V0X25pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMgfHwKIAkJCSFub2RlX3N0YXRlKHRhcmdldF9uaWQsIE5fTUVNT1JZKSkgewotCQl3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHsKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7Ci0KLQkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7Ci0JCQlub2RlX3N0YXRfc3ViX2ZvbGlvKGZvbGlvLCBOUl9JU09MQVRFRF9BTk9OICYjNDM7Ci0JCQkJCWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7Ci0JCQlmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7Ci0JCX0KJiM0MzsJCWRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChmb2xpb19saXN0KTsKIAkJcmV0dXJuIG5yX21pZ3JhdGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMi4uM2M4MWI0YzkxYWMwZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0zLDcgJiM0MzszLDYgQEAKICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZQogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9waWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKIApAQCAtMjAzNSw5ICYjNDM7MjAzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LAogCQlyZXR1cm4gLUVOT01FTTsKIAlkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7CiAJaWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHsKLQkJdC0mZ3Q7cGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtJmd0O3BpZCk7Ci0JCWlmICghdC0mZ3Q7cGlkKQotCQkJLyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovCiYjNDM7CQkvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi8KJiM0MzsJCWlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LSZndDtwaWQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXQtJmd0O29ic29sZXRlID0gc3lzX3RhcmdldC0mZ3Q7b2Jzb2xldGU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNzcwOTI3YTMwMDIxYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNDM0LDE3ICYjNDM7NDM0LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgTlJfREFNT05fT1BTKSwgLUVJTlZBTCk7CiAKIAkvKiBSZWdpc3RyYXRpb24gc2hvdWxkIHN1Y2Nlc3MgYWZ0ZXIgdW5yZWdpc3RyYXRpb24gKi8KLQltdXRleF9sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwotCWJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07Ci0JZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKLQltdXRleF91bmxvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtkYW1vbl9vcHNfbG9jaykgewomIzQzOwkJYmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTsKJiM0MzsJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPQomIzQzOwkJCShzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKJiM0MzsJfQogCiAJb3BzLmlkID0gREFNT05fT1BTX1ZBRERSOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoJmFtcDtvcHMpLCAwKTsKIAotCW11dGV4X2xvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7Ci0JZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhazsKLQltdXRleF91bmxvY2soJmFtcDtkYW1vbl9vcHNfbG9jayk7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtkYW1vbl9vcHNfbG9jaykKJiM0MzsJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7CiAKIAkvKiBDaGVjayBkb3VibGUtcmVnaXN0cmF0aW9uIGZhaWx1cmUgYWdhaW4gKi8KIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKCZhbXA7b3BzKSwgLUVJTlZBTCk7CkBAIC00NTIsMTAgJiM0Mzs0NTIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KQogCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwogCiAJaWYgKG5lZWRfY2xlYW51cCkgewotCQltdXRleF9sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwotCQlkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0KLQkJCShzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGFtb25fb3BzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2RhbW9uX29wc19sb2NrKQomIzQzOwkJCWRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPQomIzQzOwkJCQkoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307CiAJfQogfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL210aWVyLmMgYi9zYW1wbGVzL2RhbW9uL210aWVyLmMKaW5kZXggZDExMjNlYmJmYWI5MC4uYmVhNDVjODdjYzliZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuYwpAQCAtNTIsNiAmIzQzOzUyLDExIEBAIG1vZHVsZV9wYXJhbShkZXRlY3Rfbm9kZV9hZGRyZXNzZXMsIGJvb2wsIDA2MDApOwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4c1syXTsKIAomIzQzOy8qCiYjNDM7ICogVXNlIHBoeXNfYWRkcl90IGluc3RlYWQgb2YgZGFtb25fYWRkcl9yYW5nZSAodW5zaWduZWQgbG9uZykgZm9yIHBoeXNpY2FsCiYjNDM7ICogYWRkcmVzc2VzLiAgT24gMzItYml0IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gNEdCIG1lbW9yeSwgcGh5c19hZGRyX3Qgd2lsbAomIzQzOyAqIGJlIDY0LWJpdCB3aGlsZSB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KJiM0MzsgKi8KIHN0cnVjdCByZWdpb25fcmFuZ2UgewogCXBoeXNfYWRkcl90IHN0YXJ0OwogCXBoeXNfYWRkcl90IGVuZDsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vcHJjbC5jIGIvc2FtcGxlcy9kYW1vbi9wcmNsLmMKaW5kZXggODQyMDk5YmQ2MjI4Ni4uODNkZGYxMjgxMWQ1NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9wcmNsLmMKQEAgLTMyLDcgJiM0MzszMiw2IEBAIG1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCAmYW1wO2VuYWJsZWRfcGFyYW1fb3BzLCAmYW1wO2VuYWJsZWQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLCAmIzM0O0VuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9QUkNMJiMzNDspOwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4Owotc3RhdGljIHN0cnVjdCBwaWQgKnRhcmdldF9waWRwOwogCiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpCiB7CkBAIC03OSwxMiAmIzQzOzc4LDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpOwotCXRhcmdldF9waWRwID0gZmluZF9nZXRfcGlkKHRhcmdldF9waWQpOwotCWlmICghdGFyZ2V0X3BpZHApIHsKJiM0MzsJaWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHsKIAkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXRhcmdldC0mZ3Q7cGlkID0gdGFyZ2V0X3BpZHA7CiAKIAlzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKAogCQkJJmFtcDsoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3dzc2UuYyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jCmluZGV4IDM3ZmQ1ZGEyMDE1ODguLjUzOTQ0YWVhODQyOGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vd3NzZS5jCkBAIC0zMyw3ICYjNDM7MzMsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgJmFtcDtlbmFibGVkX3BhcmFtX29wcywgJmFtcDtlbmFibGVkLCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgJiMzNDtFbmFibGUgb3IgZGlzYWJsZSBEQU1PTl9TQU1QTEVfV1NTRSYjMzQ7KTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDsKLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDsKIAogc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewpAQCAtNzksMTIgJiM0Mzs3OCwxMCBAQCBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTsKLQl0YXJnZXRfcGlkcCA9IGZpbmRfZ2V0X3BpZCh0YXJnZXRfcGlkKTsKLQlpZiAoIXRhcmdldF9waWRwKSB7CiYjNDM7CWlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7CiAJCWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl0YXJnZXQtJmd0O3BpZCA9IHRhcmdldF9waWRwOwogCiAJZXJyID0gZGFtb25fc3RhcnQoJmFtcDtjdHgsIDEsIHRydWUpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQppbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CkBAIC0zMjEsOCAmIzQzOzMyMSwxMCBAQCBjbGFzcyBEYW1vc0ZpbHRlcnM6CiAgICAgZmlsdGVycyA9IE5vbmUKICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmaWx0ZXJzPVtdKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gW10KICAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwogICAgICAgICBmb3IgaWR4LCBmaWx0ZXJfIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgogICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHgKQEAgLTM2OCw3ICYjNDM7MzcwLDkgQEAgY2xhc3MgRGFtb3NEZXN0czoKICAgICBkZXN0cyA9IE5vbmUKICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1bXSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1Ob25lKToKJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZGVzdHMgPSBbXQogICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHMKICAgICAgICAgZm9yIGlkeCwgZGVzdCBpbiBlbnVtZXJhdGUoc2VsZi5kZXN0cyk6CiAgICAgICAgICAgICBkZXN0LmlkeCA9IGlkeApAQCAtNDI2LDE1ICYjNDM7NDMwLDIxIEBAIGNsYXNzIERhbW9zOgogICAgIHN0YXRzID0gTm9uZQogICAgIHRyaWVkX3JlZ2lvbnMgPSBOb25lCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSYjMzk7c3RhdCYjMzk7LCBhY2Nlc3NfcGF0dGVybj1EYW1vc0FjY2Vzc1BhdHRlcm4oKSwKLSAgICAgICAgICAgICAgICAgcXVvdGE9RGFtb3NRdW90YSgpLCB3YXRlcm1hcmtzPURhbW9zV2F0ZXJtYXJrcygpLAotICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsCi0gICAgICAgICAgICAgICAgIGRlc3RzPURhbW9zRGVzdHMoKSwgYXBwbHlfaW50ZXJ2YWxfdXM9MCk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhY3Rpb249JiMzOTtzdGF0JiMzOTssIGFjY2Vzc19wYXR0ZXJuPU5vbmUsIHF1b3RhPU5vbmUsCiYjNDM7ICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzPU5vbmUsIGNvcmVfZmlsdGVycz1Ob25lLCBvcHNfZmlsdGVycz1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgZmlsdGVycz1Ob25lLCB0YXJnZXRfbmlkPTAsIGRlc3RzPU5vbmUsCiYjNDM7ICAgICAgICAgICAgICAgICBhcHBseV9pbnRlcnZhbF91cz0wKToKICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb24KJiM0MzsgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4gPSBEYW1vc0FjY2Vzc1BhdHRlcm4oKQogICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm4KICAgICAgICAgc2VsZi5hY2Nlc3NfcGF0dGVybi5zY2hlbWUgPSBzZWxmCiYjNDM7ICAgICAgICBpZiBxdW90YSBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHF1b3RhID0gRGFtb3NRdW90YSgpCiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YQogICAgICAgICBzZWxmLnF1b3RhLnNjaGVtZSA9IHNlbGYKJiM0MzsgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICB3YXRlcm1hcmtzID0gRGFtb3NXYXRlcm1hcmtzKCkKICAgICAgICAgc2VsZi53YXRlcm1hcmtzID0gd2F0ZXJtYXJrcwogICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZgogCkBAIC00NDgsNiAmIzQzOzQ1OCw4IEBAIGNsYXNzIERhbW9zOgogICAgICAgICBzZWxmLmZpbHRlcnMuc2NoZW1lID0gc2VsZgogCiAgICAgICAgIHNlbGYudGFyZ2V0X25pZCA9IHRhcmdldF9uaWQKJiM0MzsgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZGVzdHMgPSBEYW1vc0Rlc3RzKCkKICAgICAgICAgc2VsZi5kZXN0cyA9IGRlc3RzCiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZgogCkBAIC01NjgsMTAgJiM0Mzs1ODAsMTIgQEAgY2xhc3MgRGFtb25BdHRyczoKICAgICBjb250ZXh0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCwKLSAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCwKLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKToKJiM0MzsgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCwKJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOgogICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91cwogICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzCiYjNDM7ICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGludGVydmFsc19nb2FsID0gSW50ZXJ2YWxzR29hbCgpCiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbAogICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZgogICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91cwpAQCAtNzAzLDcgJiM0Mzs3MTcsOSBAQCBjbGFzcyBLZGFtb25kOgogICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzCiAgICAga2RhbW9uZHMgPSBOb25lICMgcGFyZW50CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOgomIzQzOyAgICAgICAgaWYgY29udGV4dHMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBjb250ZXh0cyA9IFtdCiAgICAgICAgIHNlbGYuY29udGV4dHMgPSBjb250ZXh0cwogICAgICAgICBzZWxmLnJlZnJlc2hfbXMgPSByZWZyZXNoX21zCiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOgpAQCAtODUzLDcgJiM0Mzs4NjksOSBAQCBjbGFzcyBLZGFtb25kOgogY2xhc3MgS2RhbW9uZHM6CiAgICAga2RhbW9uZHMgPSBbXQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPVtdKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOgomIzQzOyAgICAgICAgaWYga2RhbW9uZHMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBrZGFtb25kcyA9IFtdCiAgICAgICAgIHNlbGYua2RhbW9uZHMgPSBrZGFtb25kcwogICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKToKICAgICAgICAgICAgIGtkYW1vbmQuaWR4ID0gaWR4CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5CkBAIC0zODUsNiAmIzQzOzM4NSwxMCBAQCBkZWYgbWFpbigpOgogICAgIGFzc2VydF9jdHhzX2NvbW1pdHRlZChrZGFtb25kcykKICAgICBrZGFtb25kcy5zdG9wKCkKIAomIzQzOyAgICBmb3IgcHJvYyBpbiAocHJvYzEsIHByb2MyLCBwcm9jMyk6CiYjNDM7ICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCiYjNDM7ICAgICAgICBwcm9jLmNvbW11bmljYXRlKCkKJiM0MzsKICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM5O19fbWFpbl9fJiMzOTs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEQU1PTiBSZWZhY3RvcmluZyAtIFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBmb2N1c2VzIG9uIGNvZGUgY2xlYW51cCBhbmQgcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgaW52b2x2ZSBleHRyYWN0aW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBmb2xpbyBwdXRiYWNrLCBjcmVhdGluZyBhIHdyYXBwZXIgZm9yIGBmaW5kX2dldF9waWRgLCB1cGRhdGluZyBhIGt1bml0IHRlc3QsIGFuZCBmaXhpbmcgc29tZSBzZWxmdGVzdCBzY3JpcHRzLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdGhhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2NlbmFyaW8gaGVyZS4KClRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgYWN0dWFsbHkgaW50cm9kdWNlIGFueSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9ucyB0byB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGlzLiBNeSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbG9naWMgY2hhbmdlcywgaW50cm9kdWNlZCBidWdzIChoaWdobHkgdW5saWtlbHkpLCBvciBuZXcgY29kZSBwYXRocyB0byB0cmlnZ2VyIGZ1enppbmcuCgpMb29raW5nIGF0IGBkYW1vbl9zZXRfdGFyZ2V0X3BpZGAsIGl0JiMzOTtzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYGZpbmRfZ2V0X3BpZGAuIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVmb3JlL2FmdGVyIGNvZGUsIEkgc2VlIHRoaXMgaXMganVzdCBjb3NtZXRpYy4KClRoZSBgZGFtb25fcHV0YmFja19mb2xpb19saXN0YCBmdW5jdGlvbj8gSWRlbnRpY2FsIGNvZGUgZnJvbSB0d28gZGlmZmVyZW50IGxvY2F0aW9ucyBmYWN0b3JlZCBvdXQgYXMgYSBzdGF0aWMgaGVscGVyLiBObyBjaGFuZ2VzIGluIHRoZSBsb2dpYyB0aGVyZS4KClRoZSBrdW5pdCB0ZXN0IHJlZmFjdG9yaW5nIHdpdGggYHNjb3BlZF9ndWFyZGA/IEEgc3RhbmRhcmQgcHJhY3RpY2UgaW4gbW9kZXJuIGtlcm5lbCBkZXZlbG9wbWVudDsgc2ltcGx5IG1ha2VzIHRoZSB0ZXN0IGNvZGUgY2xlYXJlciBhbmQgbGVzcyBwcm9uZSB0byBtYW51YWwgbG9jayBtYW5hZ2VtZW50IGVycm9ycy4KClRoZSB1cGRhdGVzIHRvIHNhbXBsZXM/IFRoZXNlIHNpbXBseSByZWZhY3RvciB0aGUgdXNlIG9mIGBmaW5kX2dldF9waWRgIHdpdGggb3VyIG5ldyBoZWxwZXIuIERvZXNuJiMzOTt0IGNoYW5nZSBob3cgdGhpbmdzICp3b3JrKi4KCkZpbmFsbHksIHRoZSBmaXhlcyB0byBzZWxmdGVzdHM/IFB5dGhvbiBmaXhlcy4gVGhlc2UgYXJlIHVzZXItc3BhY2Ugc2NyaXB0cywgYW5kIGFueSBidWcgaW4gdGhvc2Ugd291bGQgYWZmZWN0ICp0ZXN0aW5nKiB0aGUga2VybmVsLCBub3QgKnRoZSBrZXJuZWwgaXRzZWxmKi4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMgYW5kIHRoZSBzeXprYWxsZXIgdHJpYWdlIHByaW5jaXBsZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHB1cmUgcmVmYWN0b3JpbmcsIGNvZGUgY2xlYW51cCwgdGVzdHMsIGFuZCBzYW1wbGVzIHdpdGggemVybyBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgYmVoYXZpb3JhbC9mdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMuIEl0IGlzIG15IGRldGVybWluYXRpb24gdGhlcmUgaXMgemVybyBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF90YXJnZXRfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDU3PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTg6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktdm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzk5PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwNi0gKi9cbm1tL2RhbW9uL2NvcmUuYzo4MDc6aW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG5tbS9kYW1vbi9jb3JlLmMtODA4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM3LVx0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjAzODpcdFx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHQsIHN5c190YXJnZXQtXHUwMDNlcGlkKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz01OT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtODAtXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjgxOlx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTgyLVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04MC1cdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuc2FtcGxlcy9kYW1vbi93c3NlLmM6ODE6XHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xuc2FtcGxlcy9kYW1vbi93c3NlLmMtODItXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTcKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgYXVkaXQuIEJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBmdW5jdGlvbmFsIHNoaWZ0cyBoZXJlLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZC4gSSBzZWU6IGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9zeXNmcy5jYCwgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLCBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgLCBgc2FtcGxlcy9kYW1vbi93c3NlLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5YCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weWAuCgpBaCwgeWVzLiBQdXJlbHkgcmVmYWN0b3Jpbmc6IGV4dHJhY3RpbmcgYSBjb3VwbGUgb2Ygc21hbGwgaGVscGVyIGZ1bmN0aW9ucyAtIGBkYW1vbl9zZXRfdGFyZ2V0X3BpZGAgYW5kIGBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3RgIC0gYW5kIG5vIHNlbWFudGljIGNoYW5nZXMuIEkgc3BvdCBLVW5pdCB0ZXN0IG1vZGVybml6YXRpb24sIHRoZSB1c3VhbCBzYW1wbGUgY29kZSB1cGRhdGVzLCBhbmQgc29tZSBzZWxmdGVzdCBzY3JpcHQgZml4ZXMsIHRvby4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgZWRpdHMsIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuIE5vdGhpbmcgbmV3IHRvIGZ1enogaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBUaW1lIHRvIGNhbGwgaXQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNS44ODEwMzEzMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMzc1MzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb25zaXN0cyBwdXJlbHkgb2Ygbm9uLWZ1bmN0aW9uYWwgcmVmYWN0b3JpbmcsIGNvZGUgZGVkdXBsaWNhdGlvbiwgdGVzdCBjbGVhbnVwcywgYW5kIHNlbGZ0ZXN0IGZpeGVzLiBTcGVjaWZpY2FsbHk6IGl0IGV4dHJhY3RzIGEgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCkgdG8gYXNzaWduIHRoZSBQSUQgb2YgYSB0YXJnZXQsIGRlZHVwbGljYXRlcyBwYWdlIHB1dGJhY2sgY29kZSBpbnRvIGEgc3RhdGljIGhlbHBlciAoZGFtb25fcHV0YmFja19mb2xpb19saXN0KSB3aXRob3V0IGFsdGVyaW5nIGJlaGF2aW9yLCBjb252ZXJ0cyBtdXRleCBsb2NraW5nIHRvIHNjb3BlZF9ndWFyZCBpbiBLVW5pdCB0ZXN0cywgdXBkYXRlcyBzYW1wbGUgbW9kdWxlcyB0byB1c2UgdGhlIG5ldyBoZWxwZXIsIGFuZCBmaXhlcyBQeXRob24gbXV0YWJsZSBkZWZhdWx0IGFyZ3VtZW50cyBpbiBzZWxmdGVzdHMuIE5vIGZ1bmN0aW9uYWwgb3IgYWxnb3JpdGhtaWMgY2hhbmdlcyBhcmUgaW50cm9kdWNlZCB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjE1Ljg4MTAzNjcyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTEwMzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4ZDc2NGYyYjg2Y2Q4NTNhNGY2OGUyMmExMjRkZDgzMDY3MmU3YWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6MzU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uNTYwN2Y5OGVjNjMwNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMTA1NSw2ICsxMDU1LDcgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpO1xcbiB2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG4gYm9vbCBkYW1vbl90YXJnZXRzX2VtcHR5KHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcXG4gdm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG4gdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiB1bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjQ0ZGFmNWExNjU2MC4uZGU5M2U5OTQ4ZTJlZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BpZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbkBAIC04MDAsNiArODAxLDE3IEBAIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBsaXN0X2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZWFkYXB0aXZlX3RhcmdldHMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBc3NpZ24gdGhlIHN0cnVjdCBwaWQgb2YgdGhlIGdpdmVuIHBpZCBudW1iZXIgdG8gdGhlIGdpdmVuIHRhcmdldC5cXG4rICovXFxuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxcbit7XFxuK1xcdHQtXFx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChwaWQpO1xcbitcXHRpZiAoIXQtXFx1MDAzZXBpZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuIHtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnQtXFx1MDAzZWxpc3QpO1xcbkBAIC0xOTU0LDggKzE5NjYsNiBAQCBzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLVxcbiAvKipcXG4gICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxuICAqIEBjdHhzOlxcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5pbmRleCBmYmRhNzBkOGVhNGQwLi43YTJlNDBiYzdiYWVkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0zMzAsNiArMzMwLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kYW1vbl9taWdyYXRlX2ZvbGlvX2xpc3QoXFxuIFxcdHJldHVybiBucl9zdWNjZWVkZWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcbitcXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcXG4rXFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4rXFx0XFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiArXFxuK1xcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuK1xcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZClcXG5AQCAtMzcxLDEzICszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXG4gXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnJldF9mb2xpb3MsIGZvbGlvX2xpc3QpO1xcbiBcXG4tXFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XFxuLVxcdFxcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuLVxcdFxcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xcbi1cXHRcXHRcXHRcXHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xcbi1cXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuLVxcdH1cXG4rXFx0ZGFtb25fcHV0YmFja19mb2xpb19saXN0KGZvbGlvX2xpc3QpO1xcbiBcXG4gXFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xcbiB9XFxuQEAgLTM5NCwxNCArNDAxLDcgQEAgdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKVxcbiBcXG4gXFx0aWYgKHRhcmdldF9uaWQgXFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8XFxuIFxcdFxcdFxcdCFub2RlX3N0YXRlKHRhcmdldF9uaWQsIE5fTUVNT1JZKSkge1xcbi1cXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcXG4tXFxuLVxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4tXFx0XFx0XFx0bm9kZV9zdGF0X3N1Yl9mb2xpbyhmb2xpbywgTlJfSVNPTEFURURfQU5PTiArXFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XFxuIFxcdFxcdHJldHVybiBucl9taWdyYXRlZDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi4zYzgxYjRjOTFhYzBkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTMsNyArMyw2IEBAXFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuIFxcbkBAIC0yMDM1LDkgKzIwMzQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcXG4gXFx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcXG4tXFx0XFx0dC1cXHUwMDNlcGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtXFx1MDAzZXBpZCk7XFxuLVxcdFxcdGlmICghdC1cXHUwMDNlcGlkKVxcbi1cXHRcXHRcXHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cXG4rXFx0XFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXFxuK1xcdFxcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVxcdTAwM2VwaWQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHR0LVxcdTAwM2VvYnNvbGV0ZSA9IHN5c190YXJnZXQtXFx1MDAzZW9ic29sZXRlO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi43NzA5MjdhMzAwMjFjIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC00MzQsMTcgKzQzNCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcXG4gXFxuIFxcdC8qIFJlZ2lzdHJhdGlvbiBzaG91bGQgc3VjY2VzcyBhZnRlciB1bnJlZ2lzdHJhdGlvbiAqL1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxuLVxcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XFxuLVxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZkYW1vbl9vcHNfbG9jaykge1xcbitcXHRcXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xcbitcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xcbitcXHR9XFxuIFxcbiBcXHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXFx1MDAyNm9wcyksIDApO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbi1cXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID0gYmFrO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2ZGFtb25fb3BzX2xvY2spXFxuK1xcdFxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XFxuIFxcbiBcXHQvKiBDaGVjayBkb3VibGUtcmVnaXN0cmF0aW9uIGZhaWx1cmUgYWdhaW4gKi9cXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2b3BzKSwgLUVJTlZBTCk7XFxuQEAgLTQ1MiwxMCArNDUyLDkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuIFxcbiBcXHRpZiAobmVlZF9jbGVhbnVwKSB7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4tXFx0XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XFxuLVxcdFxcdFxcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmRhbW9uX29wc19sb2NrKVxcbitcXHRcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG4rXFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zKXt9O1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xcbmluZGV4IGQxMTIzZWJiZmFiOTAuLmJlYTQ1Yzg3Y2M5YmUgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuQEAgLTUyLDYgKzUyLDExIEBAIG1vZHVsZV9wYXJhbShkZXRlY3Rfbm9kZV9hZGRyZXNzZXMsIGJvb2wsIDA2MDApO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eHNbMl07XFxuIFxcbisvKlxcbisgKiBVc2UgcGh5c19hZGRyX3QgaW5zdGVhZCBvZiBkYW1vbl9hZGRyX3JhbmdlICh1bnNpZ25lZCBsb25nKSBmb3IgcGh5c2ljYWxcXG4rICogYWRkcmVzc2VzLiAgT24gMzItYml0IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gNEdCIG1lbW9yeSwgcGh5c19hZGRyX3Qgd2lsbFxcbisgKiBiZSA2NC1iaXQgd2hpbGUgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXQuXFxuKyAqL1xcbiBzdHJ1Y3QgcmVnaW9uX3JhbmdlIHtcXG4gXFx0cGh5c19hZGRyX3Qgc3RhcnQ7XFxuIFxcdHBoeXNfYWRkcl90IGVuZDtcXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9wcmNsLmMgYi9zYW1wbGVzL2RhbW9uL3ByY2wuY1xcbmluZGV4IDg0MjA5OWJkNjIyODYuLjgzZGRmMTI4MTFkNTcgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcXG4rKysgYi9zYW1wbGVzL2RhbW9uL3ByY2wuY1xcbkBAIC0zMiw3ICszMiw2IEBAIG1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZlbmFibGVkLCAwNjAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLCBcXFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fU0FNUExFX1BSQ0xcXFwiKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcXG4gXFxuIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4ge1xcbkBAIC03OSwxMiArNzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG4tXFx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XFxuLVxcdGlmICghdGFyZ2V0X3BpZHApIHtcXG4rXFx0aWYgKGRhbW9uX3NldF90YXJnZXRfcGlkKHRhcmdldCwgdGFyZ2V0X3BpZCkpIHtcXG4gXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFx0dGFyZ2V0LVxcdTAwM2VwaWQgPSB0YXJnZXRfcGlkcDtcXG4gXFxuIFxcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFxuIFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7XFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vd3NzZS5jIGIvc2FtcGxlcy9kYW1vbi93c3NlLmNcXG5pbmRleCAzN2ZkNWRhMjAxNTg4Li41Mzk0NGFlYTg0MjhlIDEwMDY0NFxcbi0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi93c3NlLmNcXG5AQCAtMzMsNyArMzMsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2ZW5hYmxlZCwgMDYwMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgXFxcIkVuYWJsZSBvciBkaXNhYmxlIERBTU9OX1NBTVBMRV9XU1NFXFxcIik7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbi1zdGF0aWMgc3RydWN0IHBpZCAqdGFyZ2V0X3BpZHA7XFxuIFxcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG5AQCAtNzksMTIgKzc4LDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XFxuLVxcdHRhcmdldF9waWRwID0gZmluZF9nZXRfcGlkKHRhcmdldF9waWQpO1xcbi1cXHRpZiAoIXRhcmdldF9waWRwKSB7XFxuK1xcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7XFxuIFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHRhcmdldC1cXHUwMDNlcGlkID0gdGFyZ2V0X3BpZHA7XFxuIFxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycikge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcXG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbkBAIC0zMjEsOCArMzIxLDEwIEBAIGNsYXNzIERhbW9zRmlsdGVyczpcXG4gICAgIGZpbHRlcnMgPSBOb25lXFxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZmlsdGVycz1bXSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZmlsdGVycz1Ob25lKTpcXG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXFxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxcbisgICAgICAgICAgICBmaWx0ZXJzID0gW11cXG4gICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXFxuICAgICAgICAgZm9yIGlkeCwgZmlsdGVyXyBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4gICAgICAgICAgICAgZmlsdGVyXy5pZHggPSBpZHhcXG5AQCAtMzY4LDcgKzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XFxuICAgICBkZXN0cyA9IE5vbmVcXG4gICAgIHNjaGVtZSA9IE5vbmUgICAjIG93bmVyIHNjaGVtZVxcbiBcXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0cz1bXSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzdHM9Tm9uZSk6XFxuKyAgICAgICAgaWYgZGVzdHMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZGVzdHMgPSBbXVxcbiAgICAgICAgIHNlbGYuZGVzdHMgPSBkZXN0c1xcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxcbiAgICAgICAgICAgICBkZXN0LmlkeCA9IGlkeFxcbkBAIC00MjYsMTUgKzQzMCwyMSBAQCBjbGFzcyBEYW1vczpcXG4gICAgIHN0YXRzID0gTm9uZVxcbiAgICAgdHJpZWRfcmVnaW9ucyA9IE5vbmVcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXFxuLSAgICAgICAgICAgICAgICAgcXVvdGE9RGFtb3NRdW90YSgpLCB3YXRlcm1hcmtzPURhbW9zV2F0ZXJtYXJrcygpLFxcbi0gICAgICAgICAgICAgICAgIGNvcmVfZmlsdGVycz1bXSwgb3BzX2ZpbHRlcnM9W10sIGZpbHRlcnM9W10sIHRhcmdldF9uaWQ9MCxcXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGlvbj0nc3RhdCcsIGFjY2Vzc19wYXR0ZXJuPU5vbmUsIHF1b3RhPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgd2F0ZXJtYXJrcz1Ob25lLCBjb3JlX2ZpbHRlcnM9Tm9uZSwgb3BzX2ZpbHRlcnM9Tm9uZSxcXG4rICAgICAgICAgICAgICAgICBmaWx0ZXJzPU5vbmUsIHRhcmdldF9uaWQ9MCwgZGVzdHM9Tm9uZSxcXG4rICAgICAgICAgICAgICAgICBhcHBseV9pbnRlcnZhbF91cz0wKTpcXG4gICAgICAgICBzZWxmLmFjdGlvbiA9IGFjdGlvblxcbisgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuID0gRGFtb3NBY2Nlc3NQYXR0ZXJuKClcXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm5cXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuLnNjaGVtZSA9IHNlbGZcXG4rICAgICAgICBpZiBxdW90YSBpcyBOb25lOlxcbisgICAgICAgICAgICBxdW90YSA9IERhbW9zUXVvdGEoKVxcbiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YVxcbiAgICAgICAgIHNlbGYucXVvdGEuc2NoZW1lID0gc2VsZlxcbisgICAgICAgIGlmIHdhdGVybWFya3MgaXMgTm9uZTpcXG4rICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXFxuICAgICAgICAgc2VsZi53YXRlcm1hcmtzID0gd2F0ZXJtYXJrc1xcbiAgICAgICAgIHNlbGYud2F0ZXJtYXJrcy5zY2hlbWUgPSBzZWxmXFxuIFxcbkBAIC00NDgsNiArNDU4LDggQEAgY2xhc3MgRGFtb3M6XFxuICAgICAgICAgc2VsZi5maWx0ZXJzLnNjaGVtZSA9IHNlbGZcXG4gXFxuICAgICAgICAgc2VsZi50YXJnZXRfbmlkID0gdGFyZ2V0X25pZFxcbisgICAgICAgIGlmIGRlc3RzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXFxuICAgICAgICAgc2VsZi5kZXN0cyA9IGRlc3RzXFxuICAgICAgICAgc2VsZi5kZXN0cy5zY2hlbWUgPSBzZWxmXFxuIFxcbkBAIC01NjgsMTAgKzU4MCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgY29udGV4dCA9IE5vbmVcXG4gXFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxcbi0gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsXFxuLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKTpcXG4rICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1Ob25lLCB1cGRhdGVfdXM9MTAwMDAwMCwgbWluX25yX3JlZ2lvbnM9MTAsXFxuKyAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XFxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXFxuKyAgICAgICAgaWYgaW50ZXJ2YWxzX2dvYWwgaXMgTm9uZTpcXG4rICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWwgPSBJbnRlcnZhbHNHb2FsKClcXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWxcXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsLmF0dHJzID0gc2VsZlxcbiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzXFxuQEAgLTcwMyw3ICs3MTcsOSBAQCBjbGFzcyBLZGFtb25kOlxcbiAgICAgaWR4ID0gTm9uZSAgICAgICMgaW5kZXggb2YgdGhpcyBrZGFtb25kIGJldHdlZW4gc2libGluZ3NcXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxcbiBcXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1bXSwgcmVmcmVzaF9tcz1Ob25lKTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOlxcbisgICAgICAgIGlmIGNvbnRleHRzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGNvbnRleHRzID0gW11cXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcXG4gICAgICAgICBzZWxmLnJlZnJlc2hfbXMgPSByZWZyZXNoX21zXFxuICAgICAgICAgZm9yIGlkeCwgY29udGV4dCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZXh0cyk6XFxuQEAgLTg1Myw3ICs4NjksOSBAQCBjbGFzcyBLZGFtb25kOlxcbiBjbGFzcyBLZGFtb25kczpcXG4gICAgIGtkYW1vbmRzID0gW11cXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwga2RhbW9uZHM9W10pOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtkYW1vbmRzPU5vbmUpOlxcbisgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGtkYW1vbmRzID0gW11cXG4gICAgICAgICBzZWxmLmtkYW1vbmRzID0ga2RhbW9uZHNcXG4gICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKTpcXG4gICAgICAgICAgICAga2RhbW9uZC5pZHggPSBpZHhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0zODUsNiArMzg1LDEwIEBAIGRlZiBtYWluKCk6XFxuICAgICBhc3NlcnRfY3R4c19jb21taXR0ZWQoa2RhbW9uZHMpXFxuICAgICBrZGFtb25kcy5zdG9wKClcXG4gXFxuKyAgICBmb3IgcHJvYyBpbiAocHJvYzEsIHByb2MyLCBwcm9jMyk6XFxuKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKVxcbisgICAgICAgIHByb2MuY29tbXVuaWNhdGUoKVxcbitcXG4gICAgIHRlc3RfbWVtY2dfZmlsdGVyX21lbWNnX3BhdGhfc3RhZ2luZygpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNy4zNzI3MDc2NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MjEyMDY1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGQ3NjRmMmI4NmNkODUzYTRmNjhlMjJhMTI0ZGQ4MzA2NzJlN2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6MzU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjU2MDdmOThlYzYzMDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTUsNiArMTA1NSw3IEBAIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpO1xuIHZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuK2ludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcbiB2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xuIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmRlOTNlOTk0OGUyZWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGlkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC04MDAsNiArODAxLDE3IEBAIGJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyk7XG4gfVxuIFxuKy8qXG4rICogQXNzaWduIHRoZSBzdHJ1Y3QgcGlkIG9mIHRoZSBnaXZlbiBwaWQgbnVtYmVyIHRvIHRoZSBnaXZlbiB0YXJnZXQuXG4rICovXG4raW50IGRhbW9uX3NldF90YXJnZXRfcGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBwaWQpXG4re1xuK1x0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQocGlkKTtcbitcdGlmICghdC1cdTAwM2VwaWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiB7XG4gXHRsaXN0X2RlbChcdTAwMjZ0LVx1MDAzZWxpc3QpO1xuQEAgLTE5NTQsOCArMTk2Niw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tXG4gLyoqXG4gICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG4gICogQGN0eHM6XHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLjdhMmU0MGJjN2JhZWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTMzMCw2ICszMzAsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2RhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChcbiBcdHJldHVybiBucl9zdWNjZWVkZWQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbitcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4rXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuK1x0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbitcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0aW50IHRhcmdldF9uaWQpXG5AQCAtMzcxLDEzICszODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21pZ3JhdGVfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2cmV0X2ZvbGlvcywgZm9saW9fbGlzdCk7XG4gXG4tXHR3aGlsZSAoIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpIHtcbi1cdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oZm9saW9fbGlzdCk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4tXHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuLVx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbi1cdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuLVx0fVxuK1x0ZGFtb25fcHV0YmFja19mb2xpb19saXN0KGZvbGlvX2xpc3QpO1xuIFxuIFx0cmV0dXJuIG5yX21pZ3JhdGVkO1xuIH1cbkBAIC0zOTQsMTQgKzQwMSw3IEBAIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZClcbiBcbiBcdGlmICh0YXJnZXRfbmlkIFx1MDAzYyAwIHx8IHRhcmdldF9uaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHxcbiBcdFx0XHQhbm9kZV9zdGF0ZSh0YXJnZXRfbmlkLCBOX01FTU9SWSkpIHtcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhmb2xpb19saXN0KTtcbi1cbi1cdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuLVx0XHRcdG5vZGVfc3RhdF9zdWJfZm9saW8oZm9saW8sIE5SX0lTT0xBVEVEX0FOT04gK1xuLVx0XHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuLVx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbi1cdFx0fVxuK1x0XHRkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCk7XG4gXHRcdHJldHVybiBucl9taWdyYXRlZDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uM2M4MWI0YzkxYWMwZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0zLDcgKzMsNiBAQFxuICAqIERBTU9OIHN5c2ZzIEludGVyZmFjZVxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuQEAgLTIwMzUsOSArMjAzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0KTtcbiBcdGlmIChkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpKSB7XG4tXHRcdHQtXHUwMDNlcGlkID0gZmluZF9nZXRfcGlkKHN5c190YXJnZXQtXHUwMDNlcGlkKTtcbi1cdFx0aWYgKCF0LVx1MDAzZXBpZClcbi1cdFx0XHQvKiBjYWxsZXIgd2lsbCBkZXN0cm95IHRhcmdldHMgKi9cbitcdFx0LyogY2FsbGVyIHdpbGwgZGVzdHJveSB0YXJnZXRzICovXG4rXHRcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0LCBzeXNfdGFyZ2V0LVx1MDAzZXBpZCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHR0LVx1MDAzZW9ic29sZXRlID0gc3lzX3RhcmdldC1cdTAwM2VvYnNvbGV0ZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjc3MDkyN2EzMDAyMWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQzNCwxNyArNDM0LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcbiBcbiBcdC8qIFJlZ2lzdHJhdGlvbiBzaG91bGQgc3VjY2VzcyBhZnRlciB1bnJlZ2lzdHJhdGlvbiAqL1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xuLVx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmRhbW9uX29wc19sb2NrKSB7XG4rXHRcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG4rXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbitcdH1cbiBcbiBcdG9wcy5pZCA9IERBTU9OX09QU19WQUREUjtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi1cdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZkYW1vbl9vcHNfbG9jaylcbitcdFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcbiBcbiBcdC8qIENoZWNrIGRvdWJsZS1yZWdpc3RyYXRpb24gZmFpbHVyZSBhZ2FpbiAqL1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcdTAwMjZvcHMpLCAtRUlOVkFMKTtcbkBAIC00NTIsMTAgKzQ1Miw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiBcbiBcdGlmIChuZWVkX2NsZWFudXApIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG4tXHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxuLVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZkYW1vbl9vcHNfbG9jaylcbitcdFx0XHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cbitcdFx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBkMTEyM2ViYmZhYjkwLi5iZWE0NWM4N2NjOWJlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC01Miw2ICs1MiwxMSBAQCBtb2R1bGVfcGFyYW0oZGV0ZWN0X25vZGVfYWRkcmVzc2VzLCBib29sLCAwNjAwKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4c1syXTtcbiBcbisvKlxuKyAqIFVzZSBwaHlzX2FkZHJfdCBpbnN0ZWFkIG9mIGRhbW9uX2FkZHJfcmFuZ2UgKHVuc2lnbmVkIGxvbmcpIGZvciBwaHlzaWNhbFxuKyAqIGFkZHJlc3Nlcy4gIE9uIDMyLWJpdCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDRHQiBtZW1vcnksIHBoeXNfYWRkcl90IHdpbGxcbisgKiBiZSA2NC1iaXQgd2hpbGUgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXQuXG4rICovXG4gc3RydWN0IHJlZ2lvbl9yYW5nZSB7XG4gXHRwaHlzX2FkZHJfdCBzdGFydDtcbiBcdHBoeXNfYWRkcl90IGVuZDtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL3ByY2wuYyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5pbmRleCA4NDIwOTliZDYyMjg2Li44M2RkZjEyODExZDU3IDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9wcmNsLmNcbisrKyBiL3NhbXBsZXMvZGFtb24vcHJjbC5jXG5AQCAtMzIsNyArMzIsNiBAQCBtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2ZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNmVuYWJsZWQsIDA2MDApO1xuIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCwgXCJFbmFibGUgb3IgZGlzYWJsZSBEQU1PTl9TQU1QTEVfUFJDTFwiKTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuLXN0YXRpYyBzdHJ1Y3QgcGlkICp0YXJnZXRfcGlkcDtcbiBcbiBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuQEAgLTc5LDEyICs3OCwxMCBAQCBzdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG4tXHR0YXJnZXRfcGlkcCA9IGZpbmRfZ2V0X3BpZCh0YXJnZXRfcGlkKTtcbi1cdGlmICghdGFyZ2V0X3BpZHApIHtcbitcdGlmIChkYW1vbl9zZXRfdGFyZ2V0X3BpZCh0YXJnZXQsIHRhcmdldF9waWQpKSB7XG4gXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0dGFyZ2V0LVx1MDAzZXBpZCA9IHRhcmdldF9waWRwO1xuIFxuIFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSB7XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi93c3NlLmMgYi9zYW1wbGVzL2RhbW9uL3dzc2UuY1xuaW5kZXggMzdmZDVkYTIwMTU4OC4uNTM5NDRhZWE4NDI4ZSAxMDA2NDRcbi0tLSBhL3NhbXBsZXMvZGFtb24vd3NzZS5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL3dzc2UuY1xuQEAgLTMzLDcgKzMzLDYgQEAgbW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNmVuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZlbmFibGVkLCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsIFwiRW5hYmxlIG9yIGRpc2FibGUgREFNT05fU0FNUExFX1dTU0VcIik7XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbi1zdGF0aWMgc3RydWN0IHBpZCAqdGFyZ2V0X3BpZHA7XG4gXG4gc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuIHtcbkBAIC03OSwxMiArNzgsMTAgQEAgc3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xuLVx0dGFyZ2V0X3BpZHAgPSBmaW5kX2dldF9waWQodGFyZ2V0X3BpZCk7XG4tXHRpZiAoIXRhcmdldF9waWRwKSB7XG4rXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xuIFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHRhcmdldC1cdTAwM2VwaWQgPSB0YXJnZXRfcGlkcDtcbiBcbiBcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5mNjA0YjdkNjUzMGIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC0zMjEsOCArMzIxLDEwIEBAIGNsYXNzIERhbW9zRmlsdGVyczpcbiAgICAgZmlsdGVycyA9IE5vbmVcbiAgICAgc2NoZW1lID0gTm9uZSAgICMgb3duZXIgc2NoZW1lXG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmaWx0ZXJzPVtdKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpbHRlcnM9Tm9uZSk6XG4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4gICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4gICAgICAgICBmb3IgaWR4LCBmaWx0ZXJfIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOlxuICAgICAgICAgICAgIGZpbHRlcl8uaWR4ID0gaWR4XG5AQCAtMzY4LDcgKzM3MCw5IEBAIGNsYXNzIERhbW9zRGVzdHM6XG4gICAgIGRlc3RzID0gTm9uZVxuICAgICBzY2hlbWUgPSBOb25lICAgIyBvd25lciBzY2hlbWVcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPVtdKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RzPU5vbmUpOlxuKyAgICAgICAgaWYgZGVzdHMgaXMgTm9uZTpcbisgICAgICAgICAgICBkZXN0cyA9IFtdXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIGZvciBpZHgsIGRlc3QgaW4gZW51bWVyYXRlKHNlbGYuZGVzdHMpOlxuICAgICAgICAgICAgIGRlc3QuaWR4ID0gaWR4XG5AQCAtNDI2LDE1ICs0MzAsMjEgQEAgY2xhc3MgRGFtb3M6XG4gICAgIHN0YXRzID0gTm9uZVxuICAgICB0cmllZF9yZWdpb25zID0gTm9uZVxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49RGFtb3NBY2Nlc3NQYXR0ZXJuKCksXG4tICAgICAgICAgICAgICAgICBxdW90YT1EYW1vc1F1b3RhKCksIHdhdGVybWFya3M9RGFtb3NXYXRlcm1hcmtzKCksXG4tICAgICAgICAgICAgICAgICBjb3JlX2ZpbHRlcnM9W10sIG9wc19maWx0ZXJzPVtdLCBmaWx0ZXJzPVtdLCB0YXJnZXRfbmlkPTAsXG4tICAgICAgICAgICAgICAgICBkZXN0cz1EYW1vc0Rlc3RzKCksIGFwcGx5X2ludGVydmFsX3VzPTApOlxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWN0aW9uPSdzdGF0JywgYWNjZXNzX3BhdHRlcm49Tm9uZSwgcXVvdGE9Tm9uZSxcbisgICAgICAgICAgICAgICAgIHdhdGVybWFya3M9Tm9uZSwgY29yZV9maWx0ZXJzPU5vbmUsIG9wc19maWx0ZXJzPU5vbmUsXG4rICAgICAgICAgICAgICAgICBmaWx0ZXJzPU5vbmUsIHRhcmdldF9uaWQ9MCwgZGVzdHM9Tm9uZSxcbisgICAgICAgICAgICAgICAgIGFwcGx5X2ludGVydmFsX3VzPTApOlxuICAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb25cbisgICAgICAgIGlmIGFjY2Vzc19wYXR0ZXJuIGlzIE5vbmU6XG4rICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4gPSBEYW1vc0FjY2Vzc1BhdHRlcm4oKVxuICAgICAgICAgc2VsZi5hY2Nlc3NfcGF0dGVybiA9IGFjY2Vzc19wYXR0ZXJuXG4gICAgICAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuLnNjaGVtZSA9IHNlbGZcbisgICAgICAgIGlmIHF1b3RhIGlzIE5vbmU6XG4rICAgICAgICAgICAgcXVvdGEgPSBEYW1vc1F1b3RhKClcbiAgICAgICAgIHNlbGYucXVvdGEgPSBxdW90YVxuICAgICAgICAgc2VsZi5xdW90YS5zY2hlbWUgPSBzZWxmXG4rICAgICAgICBpZiB3YXRlcm1hcmtzIGlzIE5vbmU6XG4rICAgICAgICAgICAgd2F0ZXJtYXJrcyA9IERhbW9zV2F0ZXJtYXJrcygpXG4gICAgICAgICBzZWxmLndhdGVybWFya3MgPSB3YXRlcm1hcmtzXG4gICAgICAgICBzZWxmLndhdGVybWFya3Muc2NoZW1lID0gc2VsZlxuIFxuQEAgLTQ0OCw2ICs0NTgsOCBAQCBjbGFzcyBEYW1vczpcbiAgICAgICAgIHNlbGYuZmlsdGVycy5zY2hlbWUgPSBzZWxmXG4gXG4gICAgICAgICBzZWxmLnRhcmdldF9uaWQgPSB0YXJnZXRfbmlkXG4rICAgICAgICBpZiBkZXN0cyBpcyBOb25lOlxuKyAgICAgICAgICAgIGRlc3RzID0gRGFtb3NEZXN0cygpXG4gICAgICAgICBzZWxmLmRlc3RzID0gZGVzdHNcbiAgICAgICAgIHNlbGYuZGVzdHMuc2NoZW1lID0gc2VsZlxuIFxuQEAgLTU2OCwxMCArNTgwLDEyIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIGNvbnRleHQgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXG4tICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1JbnRlcnZhbHNHb2FsKCksIHVwZGF0ZV91cz0xMDAwMDAwLFxuLSAgICAgICAgICAgIG1pbl9ucl9yZWdpb25zPTEwLCBtYXhfbnJfcmVnaW9ucz0xMDAwKTpcbisgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCxcbisgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbisgICAgICAgIGlmIGludGVydmFsc19nb2FsIGlzIE5vbmU6XG4rICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWwgPSBJbnRlcnZhbHNHb2FsKClcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxuICAgICAgICAgc2VsZi5pbnRlcnZhbHNfZ29hbC5hdHRycyA9IHNlbGZcbiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzXG5AQCAtNzAzLDcgKzcxNyw5IEBAIGNsYXNzIEtkYW1vbmQ6XG4gICAgIGlkeCA9IE5vbmUgICAgICAjIGluZGV4IG9mIHRoaXMga2RhbW9uZCBiZXR3ZWVuIHNpYmxpbmdzXG4gICAgIGtkYW1vbmRzID0gTm9uZSAjIHBhcmVudFxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dHM9W10sIHJlZnJlc2hfbXM9Tm9uZSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0cz1Ob25lLCByZWZyZXNoX21zPU5vbmUpOlxuKyAgICAgICAgaWYgY29udGV4dHMgaXMgTm9uZTpcbisgICAgICAgICAgICBjb250ZXh0cyA9IFtdXG4gICAgICAgICBzZWxmLmNvbnRleHRzID0gY29udGV4dHNcbiAgICAgICAgIHNlbGYucmVmcmVzaF9tcyA9IHJlZnJlc2hfbXNcbiAgICAgICAgIGZvciBpZHgsIGNvbnRleHQgaW4gZW51bWVyYXRlKHNlbGYuY29udGV4dHMpOlxuQEAgLTg1Myw3ICs4NjksOSBAQCBjbGFzcyBLZGFtb25kOlxuIGNsYXNzIEtkYW1vbmRzOlxuICAgICBrZGFtb25kcyA9IFtdXG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZGFtb25kcz1bXSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZGFtb25kcz1Ob25lKTpcbisgICAgICAgIGlmIGtkYW1vbmRzIGlzIE5vbmU6XG4rICAgICAgICAgICAga2RhbW9uZHMgPSBbXVxuICAgICAgICAgc2VsZi5rZGFtb25kcyA9IGtkYW1vbmRzXG4gICAgICAgICBmb3IgaWR4LCBrZGFtb25kIGluIGVudW1lcmF0ZShzZWxmLmtkYW1vbmRzKTpcbiAgICAgICAgICAgICBrZGFtb25kLmlkeCA9IGlkeFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg4YTI2NDIyZmY0NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0zODUsNiArMzg1LDEwIEBAIGRlZiBtYWluKCk6XG4gICAgIGFzc2VydF9jdHhzX2NvbW1pdHRlZChrZGFtb25kcylcbiAgICAga2RhbW9uZHMuc3RvcCgpXG4gXG4rICAgIGZvciBwcm9jIGluIChwcm9jMSwgcHJvYzIsIHByb2MzKTpcbisgICAgICAgIHByb2MudGVybWluYXRlKClcbisgICAgICAgIHByb2MuY29tbXVuaWNhdGUoKVxuK1xuICAgICB0ZXN0X21lbWNnX2ZpbHRlcl9tZW1jZ19wYXRoX3N0YWdpbmcoKVxuIFxuIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNToxNy4zNzI3MDkwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI4NTUzMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogREFNT04gUmVmYWN0b3JpbmcgLSBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IGZvY3VzZXMgb24gY29kZSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBpbnZvbHZlIGV4dHJhY3RpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGZvbGlvIHB1dGJhY2ssIGNyZWF0aW5nIGEgd3JhcHBlciBmb3IgYGZpbmRfZ2V0X3BpZGAsIHVwZGF0aW5nIGEga3VuaXQgdGVzdCwgYW5kIGZpeGluZyBzb21lIHNlbGZ0ZXN0IHNjcmlwdHMuIE15IGZpcnN0IGluY2xpbmF0aW9uLCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvIGhlcmUuXG5cblRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgYWN0dWFsbHkgaW50cm9kdWNlIGFueSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9ucyB0byB0aGUga2VybmVsLiBMZXQncyBkZWx2ZSBpbnRvIHRoaXMuIE15IGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBsb2dpYyBjaGFuZ2VzLCBpbnRyb2R1Y2VkIGJ1Z3MgKGhpZ2hseSB1bmxpa2VseSksIG9yIG5ldyBjb2RlIHBhdGhzIHRvIHRyaWdnZXIgZnV6emluZy5cblxuTG9va2luZyBhdCBgZGFtb25fc2V0X3RhcmdldF9waWRgLCBpdCdzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgYGZpbmRfZ2V0X3BpZGAuIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVmb3JlL2FmdGVyIGNvZGUsIEkgc2VlIHRoaXMgaXMganVzdCBjb3NtZXRpYy5cblxuVGhlIGBkYW1vbl9wdXRiYWNrX2ZvbGlvX2xpc3RgIGZ1bmN0aW9uPyBJZGVudGljYWwgY29kZSBmcm9tIHR3byBkaWZmZXJlbnQgbG9jYXRpb25zIGZhY3RvcmVkIG91dCBhcyBhIHN0YXRpYyBoZWxwZXIuIE5vIGNoYW5nZXMgaW4gdGhlIGxvZ2ljIHRoZXJlLlxuXG5UaGUga3VuaXQgdGVzdCByZWZhY3RvcmluZyB3aXRoIGBzY29wZWRfZ3VhcmRgPyBBIHN0YW5kYXJkIHByYWN0aWNlIGluIG1vZGVybiBrZXJuZWwgZGV2ZWxvcG1lbnQ7IHNpbXBseSBtYWtlcyB0aGUgdGVzdCBjb2RlIGNsZWFyZXIgYW5kIGxlc3MgcHJvbmUgdG8gbWFudWFsIGxvY2sgbWFuYWdlbWVudCBlcnJvcnMuXG5cblRoZSB1cGRhdGVzIHRvIHNhbXBsZXM/IFRoZXNlIHNpbXBseSByZWZhY3RvciB0aGUgdXNlIG9mIGBmaW5kX2dldF9waWRgIHdpdGggb3VyIG5ldyBoZWxwZXIuIERvZXNuJ3QgY2hhbmdlIGhvdyB0aGluZ3MgKndvcmsqLlxuXG5GaW5hbGx5LCB0aGUgZml4ZXMgdG8gc2VsZnRlc3RzPyBQeXRob24gZml4ZXMuIFRoZXNlIGFyZSB1c2VyLXNwYWNlIHNjcmlwdHMsIGFuZCBhbnkgYnVnIGluIHRob3NlIHdvdWxkIGFmZmVjdCAqdGVzdGluZyogdGhlIGtlcm5lbCwgbm90ICp0aGUga2VybmVsIGl0c2VsZiouXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMgYW5kIHRoZSBzeXprYWxsZXIgdHJpYWdlIHByaW5jaXBsZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHB1cmUgcmVmYWN0b3JpbmcsIGNvZGUgY2xlYW51cCwgdGVzdHMsIGFuZCBzYW1wbGVzIHdpdGggemVybyBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgYmVoYXZpb3JhbC9mdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMuIEl0IGlzIG15IGRldGVybWluYXRpb24gdGhlcmUgaXMgemVybyBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjM3LjY1ODI0NDI2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxMzMxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF90YXJnZXRfcGlkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDU3PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU4OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1OS12b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5OT1ib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwNi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6ODA3OmludCBkYW1vbl9zZXRfdGFyZ2V0X3BpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgcGlkKVxcbm1tL2RhbW9uL2NvcmUuYy04MDgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDI4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0ICpzeXNfdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDM3LVxcdFxcdC8qIGNhbGxlciB3aWxsIGRlc3Ryb3kgdGFyZ2V0cyAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzODpcXHRcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodCwgc3lzX3RhcmdldC1cXHUwMDNlcGlkKSlcXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz01OT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy04MC1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo4MTpcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTgyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04MC1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo4MTpcXHRpZiAoZGFtb25fc2V0X3RhcmdldF9waWQodGFyZ2V0LCB0YXJnZXRfcGlkKSkge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTgyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjM1OjM5LjE3OTU4MjIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDUxNjc1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgcXVpY2sgYXVkaXQuIEJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCBmdXp6aW5nLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGZ1bmN0aW9uYWwgc2hpZnRzIGhlcmUuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkLiBJIHNlZTogYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL3N5c2ZzLmNgLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AsIGBzYW1wbGVzL2RhbW9uL3ByY2wuY2AsIGBzYW1wbGVzL2RhbW9uL3dzc2UuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5YC5cblxuQWgsIHllcy4gUHVyZWx5IHJlZmFjdG9yaW5nOiBleHRyYWN0aW5nIGEgY291cGxlIG9mIHNtYWxsIGhlbHBlciBmdW5jdGlvbnMgLSBgZGFtb25fc2V0X3RhcmdldF9waWRgIGFuZCBgZGFtb25fcHV0YmFja19mb2xpb19saXN0YCAtIGFuZCBubyBzZW1hbnRpYyBjaGFuZ2VzLiBJIHNwb3QgS1VuaXQgdGVzdCBtb2Rlcm5pemF0aW9uLCB0aGUgdXN1YWwgc2FtcGxlIGNvZGUgdXBkYXRlcywgYW5kIHNvbWUgc2VsZnRlc3Qgc2NyaXB0IGZpeGVzLCB0b28uXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgZWRpdHMsIHRoZXJlJ3Mgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaGVyZS4gTm90aGluZyBuZXcgdG8gZnV6eiBpbiBhbnkgbWVhbmluZ2Z1bCB3YXkuIFRpbWUgdG8gY2FsbCBpdC4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1NywiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6MzU6NDIuNTg0NzUyNzY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgcHVyZWx5IG9mIG5vbi1mdW5jdGlvbmFsIHJlZmFjdG9yaW5nLCBjb2RlIGRlZHVwbGljYXRpb24sIHRlc3QgY2xlYW51cHMsIGFuZCBzZWxmdGVzdCBmaXhlcy4gU3BlY2lmaWNhbGx5OiBpdCBleHRyYWN0cyBhIGhlbHBlciBmdW5jdGlvbiAoZGFtb25fc2V0X3RhcmdldF9waWQpIHRvIGFzc2lnbiB0aGUgUElEIG9mIGEgdGFyZ2V0LCBkZWR1cGxpY2F0ZXMgcGFnZSBwdXRiYWNrIGNvZGUgaW50byBhIHN0YXRpYyBoZWxwZXIgKGRhbW9uX3B1dGJhY2tfZm9saW9fbGlzdCkgd2l0aG91dCBhbHRlcmluZyBiZWhhdmlvciwgY29udmVydHMgbXV0ZXggbG9ja2luZyB0byBzY29wZWRfZ3VhcmQgaW4gS1VuaXQgdGVzdHMsIHVwZGF0ZXMgc2FtcGxlIG1vZHVsZXMgdG8gdXNlIHRoZSBuZXcgaGVscGVyLCBhbmQgZml4ZXMgUHl0aG9uIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHMgaW4gc2VsZnRlc3RzLiBObyBmdW5jdGlvbmFsIG9yIGFsZ29yaXRobWljIGNoYW5nZXMgYXJlIGludHJvZHVjZWQgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTozNTo0Mi41ODQ3NzQ2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v5dl[1] Phase: Running StartedAt: 2026-08-31 21:35:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v5dl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 21:35:53 +0000 UTC FinishedAt: 2026-08-31 21:35:59 +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,}