Name: series-workflowm4jrz Phase: Failed StartedAt: 2026-08-01 19:27:26 +0000 UTC FinishedAt: 2026-08-01 19:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4jrz[0] Phase: Succeeded StartedAt: 2026-08-01 19:27:26 +0000 UTC FinishedAt: 2026-08-01 19:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4jrz[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 19:27:26 +0000 UTC FinishedAt: 2026-08-01 19:39:47 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4NzAyMTc5Y2Y2N2I5Njk5OThlZmRiYzMxMDU2ZmNhNWVjMzYxY2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE5OjM5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI2NTdjYmY2ZGY5MDMuLjE5NDcxMjRlMzRjMDYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xMjA0Myw2ICYjNDM7MTIwNDMsNyBAQCBGOlx0aW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oXG4gRjpcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0bW0vaHdwb2lzb24taW5qZWN0LmNcbiBGOlx0bW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MztGOlx0dG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbiBcbiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MzttZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUyYjNDM7PW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yNCw2ICYjNDM7MjUsNyBAQCAkKExJQlMpOlxuIFxuIGNsZWFuOlxuIFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4MDc2ZDg2ZGExNWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbkBAIC0wLDAgJiM0MzsxLDM1MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcbiYjNDM7ICogaW5qZWN0aW5nIGEgaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGVcbiYjNDM7ICoga2VybmVsIHBhbmljcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXG4mIzQzOyAqIChkZWZhdWx0OiByb2RhdGEpOlxuJiM0MzsgKlxuJiM0MzsgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cbiYjNDM7ICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0Oy4gIHg4NiBhbmQgcmlzY3Ygb25seS5cbiYjNDM7ICogICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbiYjNDM7ICpcbiYjNDM7ICogc2xhYiBhbmQgcGd0YWJsZSB3b3JrIGV2ZXJ5d2hlcmU7IHJvZGF0YSBuZWVkcyBhbiBhcmNoaXRlY3R1cmUgdGhhdFxuJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHNsYWIgYW5kIHBndGFibGUgdmFyaWFudHMgZXhlcmNpc2UgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpXG4mIzQzOyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxuJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxuJiM0MzsgKiAtRU5PVFJFQ09WRVJBQkxFLlxuJiM0MzsgKlxuJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzXG4mIzQzOyAqIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwgY29uc29sZVxuJiM0MzsgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbiYjNDM7ICogICBcJiMzNDtNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDtcbiYjNDM7ICogUmV0dXJuaW5nIGF0IGFsbCBtZWFucyBubyBwYW5pYyBmaXJlZCwgc28gZXZlcnkgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm86XG4mIzQzOyAqIGVpdGhlciBhIGZhaWx1cmUsIG9yIGFuIGluY29uY2x1c2l2ZSBydW4gd2hlcmUgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG9cbiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBTWVNDVExfUEFUSFx0XCYjMzQ7L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcJiMzNDtcbiYjNDM7I2RlZmluZSBJTkpFQ1RfUEFUSFx0XCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcJiMzNDtcbiYjNDM7I2RlZmluZSBQUk9DX0tQQUdFRkxBR1NcdFwmIzM0Oy9wcm9jL2twYWdlZmxhZ3NcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4mIzQzOyNkZWZpbmUgS1BGX1JFU0VSVkVEXHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoeClcdChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSlcbiYjNDM7XG4mIzQzOy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1aW50NjRfdCBiaXQ7XG4mIzQzO30gcGFnZV9raW5kc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7cm9kYXRhXCYjMzQ7LCAgQklUKFJFU0VSVkVEKSB9LFxuJiM0MztcdHsgXCYjMzQ7c2xhYlwmIzM0OywgICAgQklUKFNMQUIpICAgICB9LFxuJiM0MztcdHsgXCYjMzQ7cGd0YWJsZVwmIzM0OywgQklUKFBHVEFCTEUpICB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuJiM0Mzt7XG4mIzQzO1x0dmFfbGlzdCBhcDtcbiYjNDM7XG4mIzQzO1x0dmFfc3RhcnQoYXAsIHgpO1xuJiM0MztcdHZmcHJpbnRmKHN0ZGVyciwgeCwgYXApO1xuJiM0MztcdHZhX2VuZChhcCk7XG4mIzQzO1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1aW50NjRfdCAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzc2l6ZV90IGJ5dGVzO1xuJiM0MztcbiYjNDM7XHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBieXRlcyA9PSBzaXplb2YoKmZsYWdzKSA/IDAgOiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGlja19yb2RhdGFfcGh5c19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgbGFiZWxbNjRdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHRsb25nIGFkZHIgPSAtMTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oXCYjMzQ7L3Byb2MvaW9tZW1cJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0LyogU3ViLXJlc291cmNlcyBhcmUgaW5kZW50ZWQ6IFwmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXCYjMzQ7ICovXG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGlmIChzc2NhbmYobGluZSwgXCYjMzQ7ICVseC0lbHggOiAlNjNbXlxcbl1cJiMzNDssIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsIGxhYmVsKSAhPSAzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdHJjbXAobGFiZWwsIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspIHx8IGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4mIzQzO1x0XHRhZGRyID0gKChzdGFydCAmIzQzOyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCBcdTAwM2NcdTAwM2MgMjApIC8gcGFnZV9zaXplO1xuJiM0MztcdGxvbmcgYWRkciA9IC0xO1xuJiM0MztcdHVpbnQ2NF90IGZsYWdzO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgd2FudCkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChIV1BPSVNPTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEJJVChOT1BBR0UpKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWFkX3N5c2N0bCh1bnNpZ25lZCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXQgPSBmc2NhbmYoZiwgXCYjMzQ7JWx1XCYjMzQ7LCB2YWwpID09IDEgPyAwIDogLTE7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2N0bCh1bnNpZ25lZCBsb25nIHZhbClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCYjMzQ7d1wmIzM0Oyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldCA9IGZwcmludGYoZiwgXCYjMzQ7JWx1XCYjMzQ7LCB2YWwpIFx1MDAzYyAwID8gLTEgOiAwO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xuJiM0MztzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4mIzQzO1x0aW50IGZkLCBsZW47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuJiM0MztcdGlmICghZGVidWdmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cJiMzNDssIGRlYnVnZnMpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCVseFxcblwmIzM0OywgcGZuKTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcdTAwM2MgMClcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt1bnBvaXNvbi1wZm5cJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XHRpbnQgZmQsIGxlbjtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWx4IChwZm4gMHglbHgsIGtpbmQ9JXMpXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7ZXhwZWN0aW5nIGtlcm5lbCBwYW5pYzogJiMzOTtNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xcblwmIzM0Oyk7XG4mIzQzO1x0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihJTkpFQ1RfUEFUSCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtjYW5ub3Qgb3BlbiBcJiMzNDsgSU5KRUNUX1BBVEg7XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OzB4JWx4XCYjMzQ7LCBwaHlzX2FkZHIpO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBidWYsIGxlbik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ICE9IGxlbilcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFwmIzM0O2luamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmVcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGFnZV9raW5kcyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKCFzdHJjbXAocGFnZV9raW5kc1tpXS5uYW1lLCBuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFx1MDAyNnBhZ2Vfa2luZHNbaV07XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2h3cG9pc29uLXBhbmljIFtvcHRpb25zXVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgXHUwMDNja2luZFx1MDAzZSAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgLWZ8LS1mb3JjZSAgICAgICAgcmVhbGx5IHJ1biBpdDogdGhpcyBwYW5pY3MgdGhlIGtlcm5lbFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICBzaG93IHRoaXNcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtraW5kXCYjMzQ7LCAgMSwgTlVMTCwgJiMzOTtrJiMzOTsgfSxcbiYjNDM7XHR7IFwmIzM0O2ZvcmNlXCYjMzQ7LCAwLCBOVUxMLCAmIzM5O2YmIzM5OyB9LFxuJiM0MztcdHsgXCYjMzQ7aGVscFwmIzM0OywgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sXG4mIzQzO1x0eyBOVUxMLCAgICAwLCBOVUxMLCAwIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqZm9yY2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtyb2RhdGFcJiMzNDs7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2s6ZmhcJiMzNDssIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChjKSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0XHRuYW1lID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtmJiMzOTs6XG4mIzQzO1x0XHRcdCpmb3JjZSA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuJiM0MztcdGlmICgha2luZClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga2luZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgZm9yY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXG5cJiMzNDssIElOSkVDVF9QQVRIKTtcbiYjNDM7XHRpZiAoIWZvcmNlKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtZiB0byBydW4gaXQgaW4gYSBkaXNwb3NhYmxlIFZNXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbiYjNDM7e1xuJiM0MztcdGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGtpbmQtXHUwMDNlYml0ID09IEJJVChSRVNFUlZFRCkpIHtcbiYjNDM7XHRcdGFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTtcbiYjNDM7XHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyBcXFwmIzM0O0tlcm5lbCByb2RhdGFcXFwmIzM0OyBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGFkZHIgPSBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXHUwMDNlYml0KTtcbiYjNDM7XHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyB1c2FibGUgJXMgUEZOIGluICVzXFxuXCYjMzQ7LCBraW5kLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcbiYjNDM7e1xuJiM0MztcdGlmIChyZWFkX3N5c2N0bChwcmlvcikpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDtmYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0OywgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmICh3cml0ZV9zeXNjdGwoMSkpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDtmYWlsZWQgdG8gZW5hYmxlICVzXFxuXCYjMzQ7LCBTWVNDVExfUEFUSCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7XHRcdFx0IGNvbnN0IGNoYXIgKnZlcmRpY3QpXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBmbGFncztcbiYjNDM7XHRpbnQgZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChjb3VsZCBub3Qgb3BlbiAlcylcXG5cJiMzNDssIHZlcmRpY3QsIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0cmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICVzKVxcblwmIzM0OywgdmVyZGljdCxcbiYjNDM7XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBraW5kLVx1MDAzZWJpdClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxcblwmIzM0OywgdmVyZGljdCwga2luZC1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICVzOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcXG5cJiMzNDssXG4mIzQzO1x0XHRraW5kLVx1MDAzZW5hbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGZuLCBwcmlvcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuJiM0MztcdGNvbnN0IGNoYXIgKnZlcmRpY3Q7XG4mIzQzO1x0aW50IGZvcmNlID0gMDtcbiYjNDM7XG4mIzQzO1x0a2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgXHUwMDI2Zm9yY2UpO1xuJiM0MztcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XG4mIzQzO1xuJiM0MztcdHBoeXNfYWRkciA9IHBpY2tfcGh5c19hZGRyKGtpbmQpO1xuJiM0MztcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRhcm1fc3lzY3RsKFx1MDAyNnByaW9yKTtcbiYjNDM7XG4mIzQzO1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4mIzQzO1xuJiM0MztcdC8qIE5vIHBhbmljIGZpcmVkLiAgUHV0IHRoZSBtYWNoaW5lIGJhY2ssIHRoZW4gcmVwb3J0LiAqL1xuJiM0MztcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4mIzQzO1x0dW5wb2lzb25fcGZuKHBmbik7XG4mIzQzO1x0cmVjaGVja19raW5kKGtpbmQsIHBmbiwgdmVyZGljdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBFWElUX0ZBSUxVUkU7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTk6Mzk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI2NTdjYmY2ZGY5MDMuLjE5NDcxMjRlMzRjMDYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xMjA0Myw2ICYjNDM7MTIwNDMsNyBAQCBGOglpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmgKIEY6CWluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmgKIEY6CW1tL2h3cG9pc29uLWluamVjdC5jCiBGOgltbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7RjoJdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiAKIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUCmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZQppbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NAotLS0gYS90b29scy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmUKQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mbwogcGFnZS10eXBlcwogcGFnZV9vd25lcl9zb3J0CiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC00LDYgJiM0Mzs0LDcgQEAKIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlCiAKIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztCVUlMRF9UQVJHRVRTJiM0Mzs9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQpAQCAtMjQsNiAmIzQzOzI1LDcgQEAgJChMSUJTKToKIAogY2xlYW46CiAJJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzsJJChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMKIAltYWtlIC1DICQoTElCX0RJUikgY2xlYW4KIAogc2JpbmRpciA/PSAvdXNyL3NiaW4KZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4MDc2ZDg2ZGExNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jCkBAIC0wLDAgJiM0MzsxLDM1MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkKJiM0MzsgKiBpbmplY3RpbmcgYSBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZQomIzQzOyAqIGtlcm5lbCBwYW5pY3MuCiYjNDM7ICoKJiM0MzsgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWsKJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKToKJiM0MzsgKgomIzQzOyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbQomIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7LiAgeDg2IGFuZCByaXNjdiBvbmx5LgomIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS4KJiM0MzsgKgomIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXQKJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS4KJiM0MzsgKgomIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkKJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmUKJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZgomIzQzOyAqIC1FTk9UUkVDT1ZFUkFCTEUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzCiYjNDM7ICogbWVhbnQgZm9yIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggdGhlIHNlcmlhbCBjb25zb2xlCiYjNDM7ICogY2FwdHVyZWQuICBUaGUgcmVzdWx0IGlzIG9ic2VydmVkIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoCiYjNDM7ICogICAmIzM0O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDsKJiM0MzsgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzoKJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvCiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi4KJiM0MzsgKgomIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDthcGkvZnMvZnMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNZU0NUTF9QQVRICSYjMzQ7L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUmIzM0OwomIzQzOyNkZWZpbmUgSU5KRUNUX1BBVEgJJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZSYjMzQ7CiYjNDM7I2RlZmluZSBQUk9DX0tQQUdFRkxBR1MJJiMzNDsvcHJvYy9rcGFnZWZsYWdzJiMzNDsKJiM0MzsKJiM0MzsvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqLwomIzQzOyNkZWZpbmUgS1BGX1JFU0VSVkVECTMyCiYjNDM7CiYjNDM7I2RlZmluZSBCSVQobmFtZSkJKDFVTEwgJmx0OyZsdDsgS1BGXyMjbmFtZSkKJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoeCkJKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQomIzQzOwomIzQzOy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJdWludDY0X3QgYml0OwomIzQzO30gcGFnZV9raW5kc1tdID0gewomIzQzOwl7ICYjMzQ7cm9kYXRhJiMzNDssICBCSVQoUkVTRVJWRUQpIH0sCiYjNDM7CXsgJiMzNDtzbGFiJiMzNDssICAgIEJJVChTTEFCKSAgICAgfSwKJiM0MzsJeyAmIzM0O3BndGFibGUmIzM0OywgQklUKFBHVEFCTEUpICB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLikKJiM0Mzt7CiYjNDM7CXZhX2xpc3QgYXA7CiYjNDM7CiYjNDM7CXZhX3N0YXJ0KGFwLCB4KTsKJiM0MzsJdmZwcmludGYoc3RkZXJyLCB4LCBhcCk7CiYjNDM7CXZhX2VuZChhcCk7CiYjNDM7CWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIHBmbiwgdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsKJiM0MzsJYnl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIHBpY2tfcm9kYXRhX3BoeXNfYWRkcih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwomIzQzOwlsb25nIGFkZHIgPSAtMTsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKCYjMzQ7L3Byb2MvaW9tZW0mIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CS8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiAmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhJiMzNDsgKi8KJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDsgJWx4LSVseCA6ICU2M1teXG5dJiMzNDssICZhbXA7c3RhcnQsICZhbXA7ZW5kLCBsYWJlbCkgIT0gMykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdHJjbXAobGFiZWwsICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KSB8fCBlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBQYWdlLWFsaWduIHVwIGFuZCByZXR1cm4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLiAqLwomIzQzOwkJYWRkciA9ICgoc3RhcnQgJiM0MzsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCAmbHQ7Jmx0OyAyMCkgLyBwYWdlX3NpemU7CiYjNDM7CWxvbmcgYWRkciA9IC0xOwomIzQzOwl1aW50NjRfdCBmbGFnczsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWZvciAoOyBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgJmFtcDtmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKChmbGFncyAmYW1wOyB3YW50KSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQklUKEhXUE9JU09OKSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEoZmxhZ3MgJmFtcDsgQklUKE5PUEFHRSkpICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCSVQoQ09NUE9VTkRfVEFJTCkpKSB7CiYjNDM7CQkJYWRkciA9IHBmbiAqIHBhZ2Vfc2l6ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgJiMzNDtyJiMzNDspOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldCA9IGZzY2FuZihmLCAmIzM0OyVsdSYjMzQ7LCB2YWwpID09IDEgPyAwIDogLTE7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9zeXNjdGwodW5zaWduZWQgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwlGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXQgPSBmcHJpbnRmKGYsICYjMzQ7JWx1JiMzNDssIHZhbCkgJmx0OyAwID8gLTEgOiAwOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0cyB3aXRoIE1GX1NXX1NJTVVMQVRFRCwgc28gdW5wb2lzb24gaXMgYWxsb3dlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdOwomIzQzOwljb25zdCBjaGFyICpkZWJ1Z2ZzOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsKJiM0MzsJZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7CiYjNDM7CWlmICghZGVidWdmcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2h3cG9pc29uL3VucG9pc29uLXBmbiYjMzQ7LCBkZWJ1Z2ZzKTsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVseFxuJiMzNDssIHBmbik7CiYjNDM7CWlmICh3cml0ZShmZCwgYnVmLCBsZW4pICZsdDsgMCkKJiM0MzsJCXBlcnJvcigmIzM0O3VucG9pc29uLXBmbiYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaW5qZWN0X2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsJaW50IGZkLCBsZW47CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlwcmludGYoJiMzNDtpbmplY3RpbmcgaHdwb2lzb24gYXQgcGh5cyAweCVseCAocGZuIDB4JWx4LCBraW5kPSVzKVxuJiMzNDssCiYjNDM7CSAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC0mZ3Q7bmFtZSk7CiYjNDM7CXByaW50ZigmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xuJiMzNDspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gJiMzNDtjYW5ub3Qgb3BlbiAmIzM0OyBJTkpFQ1RfUEFUSDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVseCYjMzQ7LCBwaHlzX2FkZHIpOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gbGVuKQomIzQzOwkJcmV0dXJuICYjMzQ7aW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGgmIzM0OzsKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZSYjMzQ7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiAmYW1wO3BhZ2Vfa2luZHNbaV07CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgJmx0O2tpbmQmZ3Q7ICByb2RhdGEgKGRlZmF1bHQsIHg4NiBhbmQgcmlzY3Ygb25seSksXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgIC1mfC0tZm9yY2UgICAgICAgIHJlYWxseSBydW4gaXQ6IHRoaXMgcGFuaWNzIHRoZSBrZXJuZWxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgIHNob3cgdGhpc1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtraW5kJiMzNDssICAxLCBOVUxMLCAmIzM5O2smIzM5OyB9LAomIzQzOwl7ICYjMzQ7Zm9yY2UmIzM0OywgMCwgTlVMTCwgJiMzOTtmJiMzOTsgfSwKJiM0MzsJeyAmIzM0O2hlbHAmIzM0OywgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sCiYjNDM7CXsgTlVMTCwgICAgMCwgTlVMTCwgMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmZvcmNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7cm9kYXRhJiMzNDs7CiYjNDM7CWludCBjOwomIzQzOwomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2s6ZmgmIzM0Oywgb3B0cywgTlVMTCkpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKGMpIHsKJiM0MzsJCWNhc2UgJiMzOTtrJiMzOTs6CiYjNDM7CQkJbmFtZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtmJiMzOTs6CiYjNDM7CQkJKmZvcmNlID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQkJdXNhZ2UoKTsKJiM0MzsJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXVzYWdlKCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWtpbmQgPSBsb29rdXBfa2luZChuYW1lKTsKJiM0MzsJaWYgKCFraW5kKQomIzQzOwkJZmF0YWwoJiMzNDt1bmtub3duIGtpbmQgJiMzOTslcyYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcbiYjMzQ7LAomIzQzOwkJICAgICAgbmFtZSk7CiYjNDM7CiYjNDM7CXJldHVybiBraW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjaGVja19wcmVyZXFzKGludCBmb3JjZSkKJiM0Mzt7CiYjNDM7CWlmIChnZXRldWlkKCkpCiYjNDM7CQlmYXRhbCgmIzM0O211c3QgcnVuIGFzIHJvb3RcbiYjMzQ7KTsKJiM0MzsJaWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcbiYjMzQ7LAomIzQzOwkJICAgICAgU1lTQ1RMX1BBVEgpOwomIzQzOwlpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSkKJiM0MzsJCWZhdGFsKCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcbiYjMzQ7LCBJTkpFQ1RfUEFUSCk7CiYjNDM7CWlmICghZm9yY2UpCiYjNDM7CQlmYXRhbCgmIzM0O3RoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaWNrX3BoeXNfYWRkcihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kKQomIzQzO3sKJiM0MzsJbG9uZyBhZGRyOwomIzQzOwomIzQzOwlpZiAoa2luZC0mZ3Q7Yml0ID09IEJJVChSRVNFUlZFRCkpIHsKJiM0MzsJCWFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTsKJiM0MzsJCWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtJmd0O2JpdCk7CiYjNDM7CQlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQkJZmF0YWwoJiMzNDtubyB1c2FibGUgJXMgUEZOIGluICVzXG4mIzM0Oywga2luZC0mZ3Q7bmFtZSwKJiM0MzsJCQkgICAgICBQUk9DX0tQQUdFRkxBR1MpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhcm1fc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnByaW9yKQomIzQzO3sKJiM0MzsJaWYgKHJlYWRfc3lzY3RsKHByaW9yKSkKJiM0MzsJCWZhdGFsKCYjMzQ7ZmFpbGVkIHRvIHJlYWQgJXNcbiYjMzQ7LCBTWVNDVExfUEFUSCk7CiYjNDM7CWlmICh3cml0ZV9zeXNjdGwoMSkpCiYjNDM7CQlmYXRhbCgmIzM0O2ZhaWxlZCB0byBlbmFibGUgJXNcbiYjMzQ7LCBTWVNDVExfUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkgY29uc3QgY2hhciAqdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgZmQsIHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJZmF0YWwoJiMzNDslcyAoY291bGQgbm90IG9wZW4gJXMpXG4mIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTsKJiM0MzsJcmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXG4mIzM0OywgdmVyZGljdCwKJiM0MzsJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBraW5kLSZndDtiaXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxuJiMzNDssIHZlcmRpY3QsIGtpbmQtJmd0O25hbWUpOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXG4mIzM0OywKJiM0MzsJCWtpbmQtJmd0O25hbWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGZuLCBwcmlvcjsKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqdmVyZGljdDsKJiM0MzsJaW50IGZvcmNlID0gMDsKJiM0MzsKJiM0MzsJa2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgJmFtcDtmb3JjZSk7CiYjNDM7CXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiYjNDM7CWNoZWNrX3ByZXJlcXMoZm9yY2UpOwomIzQzOwomIzQzOwlwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTsKJiM0MzsJcGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplOwomIzQzOwlhcm1fc3lzY3RsKCZhbXA7cHJpb3IpOwomIzQzOwomIzQzOwl2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTsKJiM0MzsKJiM0MzsJLyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovCiYjNDM7CXdyaXRlX3N5c2N0bChwcmlvcik7CiYjNDM7CXVucG9pc29uX3BmbihwZm4pOwomIzQzOwlyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVYSVRfRkFJTFVSRTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTIKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHRvb2w6IGB0b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jYC4gIEl0IGFsc28gdG91Y2hlcyBgTUFJTlRBSU5FUlNgLCBgLmdpdGlnbm9yZWAsIGFuZCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYHRvb2xzL21tYCBkaXJlY3RvcnkuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBqdXN0IGEgdXNlcnNwYWNlIHRvb2wgZm9yIHRlc3RpbmcgbWVtb3J5IGZhaWx1cmUgYmVoYXZpb3IsIHdlJiMzOTtyZSBwcm9iYWJseSBub3QgbG9va2luZyBhdCBhbnl0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCYjMzk7cyB0cnVseSB0aGUgY2FzZS4uLiBZZXAsIHRoZSBkaWZmIGNvbmZpcm1zIGl0OiBvbmx5IHRob3NlIGZvdXIgZmlsZXMgYXJlIG1vZGlmaWVkLiAgTm8ga2VybmVsIHNvdXJjZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGd1aWRhbmNlLiAgVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtjb25maWcgY2hhbmdlcywgY29kZSBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLgoKVGhpcyBwYXRjaCAqb25seSogYWRkcyBhIHRvb2wgaW4gYHRvb2xzL21tL2AuICBJdCAqZG9lc24mIzM5O3QqIG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSwgc28gSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRpZmYgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyB3YXMgbWlzc2VkLiBOb3BlLCBpdCYjMzk7cyBqdXN0IHRob3NlIGZvdXIgZmlsZXM6IGBNQUlOVEFJTkVSU2AsIGAuZ2l0aWdub3JlYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGUgbmV3IHRvb2wgaXRzZWxmLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IGFkZGluZyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGBod3BvaXNvbi1wYW5pY2ApIGluIGB0b29scy9tbS9gLCB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zIHRvIGFjdHVhbCBrZXJuZWwgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSB1c2Vyc3BhY2UgdGVzdGluZyB0b29sIChod3BvaXNvbi1wYW5pYykgaW4gdG9vbHMvbW0vIGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjM5OjI1LjgxNzM4ODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNTQwNTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOToyNS44MTczOTUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NzUxNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE5OjM5OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyNjU3Y2JmNmRmOTAzLi4xOTQ3MTI0ZTM0YzA2IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTIwNDMsNiArMTIwNDMsNyBAQCBGOlxcdGluY2x1ZGUvbGludXgvbWVtb3J5LWZhaWx1cmUuaFxcbiBGOlxcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcXG4gRjpcXHRtbS9od3BvaXNvbi1pbmplY3QuY1xcbiBGOlxcdG1tL21lbW9yeS1mYWlsdXJlLmNcXG4rRjpcXHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXFxuIFxcbiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVFxcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5AQCAtMywzICszLDQgQEAgc2xhYmluZm9cXG4gcGFnZS10eXBlc1xcbiBwYWdlX293bmVyX3NvcnRcXG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC00LDYgKzQsNyBAQFxcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTKz1tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuQEAgLTI0LDYgKzI1LDcgQEAgJChMSUJTKTpcXG4gXFxuIGNsZWFuOlxcbiBcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xcbiBcXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cXG4gXFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iODA3NmQ4NmRhMTViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcXG5AQCAtMCwwICsxLDM1MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcXG4rICogaW5qZWN0aW5nIGEgaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGVcXG4rICoga2VybmVsIHBhbmljcy5cXG4rICpcXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXFxuKyAqIChkZWZhdWx0OiByb2RhdGEpOlxcbisgKlxcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cXG4rICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXFxcIktlcm5lbCByb2RhdGFcXFwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxcbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisgKiAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisgKlxcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XFxuKyAqIHB1Ymxpc2hlcyB0aGUgcm9kYXRhIHJlc291cmNlIGluIC9wcm9jL2lvbWVtLlxcbisgKlxcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpXFxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxcbisgKiAtRU5PVFJFQ09WRVJBQkxFLlxcbisgKlxcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzXFxuKyAqIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwgY29uc29sZVxcbisgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcXG4rICogICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXFxuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXFxuKyAqXFxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NnZXRvcHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXJnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NhcGkvZnMvZnMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcXHRcXFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcXFwiXFxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcXHRcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcXFwiXFxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXFx0XFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuK1xcbisvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqL1xcbisjZGVmaW5lIEtQRl9SRVNFUlZFRFxcdDMyXFxuK1xcbisjZGVmaW5lIEJJVChuYW1lKVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIEtQRl8jI25hbWUpXFxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVxcdChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSlcXG4rXFxuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHVpbnQ2NF90IGJpdDtcXG4rfSBwYWdlX2tpbmRzW10gPSB7XFxuK1xcdHsgXFxcInJvZGF0YVxcXCIsICBCSVQoUkVTRVJWRUQpIH0sXFxuK1xcdHsgXFxcInNsYWJcXFwiLCAgICBCSVQoU0xBQikgICAgIH0sXFxuK1xcdHsgXFxcInBndGFibGVcXFwiLCBCSVQoUEdUQUJMRSkgIH0sXFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XFxuK1xcbitzdGF0aWMgdm9pZCBmYXRhbChjb25zdCBjaGFyICp4LCAuLi4pXFxuK3tcXG4rXFx0dmFfbGlzdCBhcDtcXG4rXFxuK1xcdHZhX3N0YXJ0KGFwLCB4KTtcXG4rXFx0dmZwcmludGYoc3RkZXJyLCB4LCBhcCk7XFxuK1xcdHZhX2VuZChhcCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIHBmbiwgdWludDY0X3QgKmZsYWdzKVxcbit7XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcbitcXHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBpY2tfcm9kYXRhX3BoeXNfYWRkcih2b2lkKVxcbit7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4rXFx0bG9uZyBhZGRyID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL2lvbWVtXFxcIiwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXFxcIiAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXFxcIiAqL1xcbitcXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xcbitcXHRcXHRpZiAoc3NjYW5mKGxpbmUsIFxcXCIgJWx4LSVseCA6ICU2M1teXFxcXG5dXFxcIiwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLCBsYWJlbCkgIT0gMylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzdHJjbXAobGFiZWwsIFxcXCJLZXJuZWwgcm9kYXRhXFxcIikgfHwgZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0LyogUGFnZS1hbGlnbiB1cCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS4gKi9cXG4rXFx0XFx0YWRkciA9ICgoc3RhcnQgKyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCBcXHUwMDNjXFx1MDAzYyAyMCkgLyBwYWdlX3NpemU7XFxuK1xcdGxvbmcgYWRkciA9IC0xO1xcbitcXHR1aW50NjRfdCBmbGFncztcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFxcdTAwMjZmbGFncykgPT0gMDsgcGZuKyspIHtcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IHdhbnQpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCSVQoSFdQT0lTT04pKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShmbGFncyBcXHUwMDI2IEJJVChOT1BBR0UpKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xcbitcXHRcXHRcXHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4re1xcbitcXHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFxcXCJyXFxcIik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0ID0gZnNjYW5mKGYsIFxcXCIlbHVcXFwiLCB2YWwpID09IDEgPyAwIDogLTE7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxcbit7XFxuK1xcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXFxcIndcXFwiKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXQgPSBmcHJpbnRmKGYsIFxcXCIlbHVcXFwiLCB2YWwpIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xcbitzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmWzMyXTtcXG4rXFx0Y29uc3QgY2hhciAqZGVidWdmcztcXG4rXFx0aW50IGZkLCBsZW47XFxuK1xcbitcXHRkZWJ1Z2ZzID0gZGVidWdmc19fbW91bnQoKTtcXG4rXFx0aWYgKCFkZWJ1Z2ZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIlcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cXFwiLCBkZWJ1Z2ZzKTtcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JWx4XFxcXG5cXFwiLCBwZm4pO1xcbitcXHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcXHUwMDNjIDApXFxuK1xcdFxcdHBlcnJvcihcXFwidW5wb2lzb24tcGZuXFxcIik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZmQsIGxlbjtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRwcmludGYoXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWx4IChwZm4gMHglbHgsIGtpbmQ9JXMpXFxcXG5cXFwiLFxcbitcXHQgICAgICAgcGh5c19hZGRyLCBwZm4sIGtpbmQtXFx1MDAzZW5hbWUpO1xcbitcXHRwcmludGYoXFxcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXFx1MDAzY3BmblxcdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSdcXFxcblxcXCIpO1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFxuK1xcdGZkID0gb3BlbihJTkpFQ1RfUEFUSCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gXFxcImNhbm5vdCBvcGVuIFxcXCIgSU5KRUNUX1BBVEg7XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiMHglbHhcXFwiLCBwaHlzX2FkZHIpO1xcbitcXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAocmV0ICE9IGxlbilcXG4rXFx0XFx0cmV0dXJuIFxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCI7XFxuK1xcbitcXHRyZXR1cm4gXFxcImluamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmVcXFwiO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBhZ2Vfa2luZHMpOyBpKyspXFxuK1xcdFxcdGlmICghc3RyY21wKHBhZ2Vfa2luZHNbaV0ubmFtZSwgbmFtZSkpXFxuK1xcdFxcdFxcdHJldHVybiBcXHUwMDI2cGFnZV9raW5kc1tpXTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbit7XFxuK1xcdHByaW50ZihcXFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICAgICAgICAgLWt8LS1raW5kIFxcdTAwM2NraW5kXFx1MDAzZSAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYWIgb3IgcGd0YWJsZVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgIC1mfC0tZm9yY2UgICAgICAgIHJlYWxseSBydW4gaXQ6IHRoaXMgcGFuaWNzIHRoZSBrZXJuZWxcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICBzaG93IHRoaXNcXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XFxuK1xcdHsgXFxcImtpbmRcXFwiLCAgMSwgTlVMTCwgJ2snIH0sXFxuK1xcdHsgXFxcImZvcmNlXFxcIiwgMCwgTlVMTCwgJ2YnIH0sXFxuK1xcdHsgXFxcImhlbHBcXFwiLCAgMCwgTlVMTCwgJ2gnIH0sXFxuK1xcdHsgTlVMTCwgICAgMCwgTlVMTCwgMCB9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmZvcmNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWUgPSBcXFwicm9kYXRhXFxcIjtcXG4rXFx0aW50IGM7XFxuK1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiazpmaFxcXCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xcbitcXHRcXHRzd2l0Y2ggKGMpIHtcXG4rXFx0XFx0Y2FzZSAnayc6XFxuK1xcdFxcdFxcdG5hbWUgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdmJzpcXG4rXFx0XFx0XFx0KmZvcmNlID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfU1VDQ0VTUyk7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHVzYWdlKCk7XFxuK1xcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRraW5kID0gbG9va3VwX2tpbmQobmFtZSk7XFxuK1xcdGlmICgha2luZClcXG4rXFx0XFx0ZmF0YWwoXFxcInVua25vd24ga2luZCAnJXMnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIG5hbWUpO1xcbitcXG4rXFx0cmV0dXJuIGtpbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGZvcmNlKVxcbit7XFxuK1xcdGlmIChnZXRldWlkKCkpXFxuK1xcdFxcdGZhdGFsKFxcXCJtdXN0IHJ1biBhcyByb290XFxcXG5cXFwiKTtcXG4rXFx0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBTWVNDVExfUEFUSCk7XFxuK1xcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxcbitcXHRcXHRmYXRhbChcXFwiJXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFxcblxcXCIsIElOSkVDVF9QQVRIKTtcXG4rXFx0aWYgKCFmb3JjZSlcXG4rXFx0XFx0ZmF0YWwoXFxcInRoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpXFxuK3tcXG4rXFx0bG9uZyBhZGRyO1xcbitcXG4rXFx0aWYgKGtpbmQtXFx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XFxuK1xcdFxcdGFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTtcXG4rXFx0XFx0aWYgKGFkZHIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRmYXRhbChcXFwibm8gXFxcXFxcXCJLZXJuZWwgcm9kYXRhXFxcXFxcXCIgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhZGRyID0gcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcihraW5kLVxcdTAwM2ViaXQpO1xcbitcXHRcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGZhdGFsKFxcXCJubyB1c2FibGUgJXMgUEZOIGluICVzXFxcXG5cXFwiLCBraW5kLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gYWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcXG4re1xcbitcXHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxcbitcXHRcXHRmYXRhbChcXFwiZmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsIFNZU0NUTF9QQVRIKTtcXG4rXFx0aWYgKHdyaXRlX3N5c2N0bCgxKSlcXG4rXFx0XFx0ZmF0YWwoXFxcImZhaWxlZCB0byBlbmFibGUgJXNcXFxcblxcXCIsIFNZU0NUTF9QQVRIKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVjaGVja19raW5kKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqdmVyZGljdClcXG4re1xcbitcXHR1aW50NjRfdCBmbGFncztcXG4rXFx0aW50IGZkLCByZXQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyAoY291bGQgbm90IG9wZW4gJXMpXFxcXG5cXFwiLCB2ZXJkaWN0LCBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHRyZXQgPSBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgXFx1MDAyNmZsYWdzKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxcXG5cXFwiLCB2ZXJkaWN0LFxcbitcXHRcXHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBraW5kLVxcdTAwM2ViaXQpXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyAocGFnZSBzdGlsbCAlcylcXFxcblxcXCIsIHZlcmRpY3QsIGtpbmQtXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXFxcXG5cXFwiLFxcbitcXHRcXHRraW5kLVxcdTAwM2VuYW1lKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZm4sIHByaW9yO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xcbitcXHRjb25zdCBjaGFyICp2ZXJkaWN0O1xcbitcXHRpbnQgZm9yY2UgPSAwO1xcbitcXG4rXFx0a2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgXFx1MDAyNmZvcmNlKTtcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XFxuK1xcbitcXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcXG4rXFx0cGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplO1xcbitcXHRhcm1fc3lzY3RsKFxcdTAwMjZwcmlvcik7XFxuK1xcbitcXHR2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTtcXG4rXFxuK1xcdC8qIE5vIHBhbmljIGZpcmVkLiAgUHV0IHRoZSBtYWNoaW5lIGJhY2ssIHRoZW4gcmVwb3J0LiAqL1xcbitcXHR3cml0ZV9zeXNjdGwocHJpb3IpO1xcbitcXHR1bnBvaXNvbl9wZm4ocGZuKTtcXG4rXFx0cmVjaGVja19raW5kKGtpbmQsIHBmbiwgdmVyZGljdCk7XFxuK1xcbitcXHRyZXR1cm4gRVhJVF9GQUlMVVJFO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjM5OjI2LjE4NDE1NDc1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyNjg2MzM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTk6Mzk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAyNjU3Y2JmNmRmOTAzLi4xOTQ3MTI0ZTM0YzA2IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTIwNDMsNiArMTIwNDMsNyBAQCBGOlx0aW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oXG4gRjpcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0bW0vaHdwb2lzb24taW5qZWN0LmNcbiBGOlx0bW0vbWVtb3J5LWZhaWx1cmUuY1xuK0Y6XHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuIFxuIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICszLDQgQEAgc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbittZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC00LDYgKzQsNyBAQFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFMrPW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yNCw2ICsyNSw3IEBAICQoTElCUyk6XG4gXG4gY2xlYW46XG4gXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iODA3NmQ4NmRhMTViXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXG5AQCAtMCwwICsxLDM1MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcbisgKiBpbmplY3RpbmcgYSBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZVxuKyAqIGtlcm5lbCBwYW5pY3MuXG4rICpcbisgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWtcbisgKiAoZGVmYXVsdDogcm9kYXRhKTpcbisgKlxuKyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbVxuKyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtIFwiS2VybmVsIHJvZGF0YVwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxuKyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4rICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbisgKlxuKyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXRcbisgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS5cbisgKlxuKyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKVxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxuKyAqIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBzdWNoIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mXG4rICogLUVOT1RSRUNPVkVSQUJMRS5cbisgKlxuKyAqIEEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLCBzbyAtZiBpcyByZXF1aXJlZCBhbmQgdGhlIHRvb2wgaXNcbisgKiBtZWFudCBmb3IgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCB0aGUgc2VyaWFsIGNvbnNvbGVcbisgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbisgKiAgIFwiTWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCJcbisgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzpcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXG4rICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi5cbisgKlxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIi4uLy4uLy4uL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXCJcbisjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIlxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcIlxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcIi9wcm9jL2twYWdlZmxhZ3NcIlxuK1xuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4rI2RlZmluZSBLUEZfUkVTRVJWRURcdDMyXG4rXG4rI2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxuK1xuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1aW50NjRfdCBiaXQ7XG4rfSBwYWdlX2tpbmRzW10gPSB7XG4rXHR7IFwicm9kYXRhXCIsICBCSVQoUkVTRVJWRUQpIH0sXG4rXHR7IFwic2xhYlwiLCAgICBCSVQoU0xBQikgICAgIH0sXG4rXHR7IFwicGd0YWJsZVwiLCBCSVQoUEdUQUJMRSkgIH0sXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rXG4rc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuK3tcbitcdHZhX2xpc3QgYXA7XG4rXG4rXHR2YV9zdGFydChhcCwgeCk7XG4rXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbitcdHZhX2VuZChhcCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3BhZ2VmbGFnc19yZWFkKGludCBmZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHRzc2l6ZV90IGJ5dGVzO1xuK1xuK1x0Ynl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpO1xuK1xuK1x0cmV0dXJuIGJ5dGVzID09IHNpemVvZigqZmxhZ3MpID8gMCA6IC0xO1xuK31cbitcbitzdGF0aWMgbG9uZyBwaWNrX3JvZGF0YV9waHlzX2FkZHIodm9pZClcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgbGFiZWxbNjRdO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0bG9uZyBhZGRyID0gLTE7XG4rXHRGSUxFICpmO1xuK1xuK1x0ZiA9IGZvcGVuKFwiL3Byb2MvaW9tZW1cIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwiICovXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwiICVseC0lbHggOiAlNjNbXlxcbl1cIiwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCwgbGFiZWwpICE9IDMpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzdHJjbXAobGFiZWwsIFwiS2VybmVsIHJvZGF0YVwiKSB8fCBlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUGFnZS1hbGlnbiB1cCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS4gKi9cbitcdFx0YWRkciA9ICgoc3RhcnQgKyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0ZmNsb3NlKGYpO1xuK1x0cmV0dXJuIGFkZHI7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIodWludDY0X3Qgd2FudClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiA9ICgxNlVMIFx1MDAzY1x1MDAzYyAyMCkgLyBwYWdlX3NpemU7XG4rXHRsb25nIGFkZHIgPSAtMTtcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKSA9PSAwOyBwZm4rKykge1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiB3YW50KSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKEhXUE9JU09OKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGZsYWdzIFx1MDAyNiBCSVQoTk9QQUdFKSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcbitcdFx0XHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCByZWFkX3N5c2N0bCh1bnNpZ25lZCBsb25nICp2YWwpXG4re1xuK1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcInJcIik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXQgPSBmc2NhbmYoZiwgXCIlbHVcIiwgdmFsKSA9PSAxID8gMCA6IC0xO1xuK1x0ZmNsb3NlKGYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9zeXNjdGwodW5zaWduZWQgbG9uZyB2YWwpXG4re1xuK1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcIndcIik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXQgPSBmcHJpbnRmKGYsIFwiJWx1XCIsIHZhbCkgXHUwMDNjIDAgPyAtMSA6IDA7XG4rXHRmY2xvc2UoZik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHVucG9pc29uIGlzIGFsbG93ZWQuICovXG4rc3RhdGljIHZvaWQgdW5wb2lzb25fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZlszMl07XG4rXHRjb25zdCBjaGFyICpkZWJ1Z2ZzO1xuK1x0aW50IGZkLCBsZW47XG4rXG4rXHRkZWJ1Z2ZzID0gZGVidWdmc19fbW91bnQoKTtcbitcdGlmICghZGVidWdmcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2h3cG9pc29uL3VucG9pc29uLXBmblwiLCBkZWJ1Z2ZzKTtcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHglbHhcXG5cIiwgcGZuKTtcbitcdGlmICh3cml0ZShmZCwgYnVmLCBsZW4pIFx1MDAzYyAwKVxuK1x0XHRwZXJyb3IoXCJ1bnBvaXNvbi1wZm5cIik7XG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICppbmplY3RfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXHRpbnQgZmQsIGxlbjtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0cHJpbnRmKFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHglbHggKHBmbiAweCVseCwga2luZD0lcylcXG5cIixcbitcdCAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC1cdTAwM2VuYW1lKTtcbitcdHByaW50ZihcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxuXCIpO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXG4rXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIFwiY2Fubm90IG9wZW4gXCIgSU5KRUNUX1BBVEg7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JWx4XCIsIHBoeXNfYWRkcik7XG4rXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKHJldCAhPSBsZW4pXG4rXHRcdHJldHVybiBcImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCI7XG4rXG4rXHRyZXR1cm4gXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCI7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxuK1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiBcdTAwMjZwYWdlX2tpbmRzW2ldO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4re1xuK1x0cHJpbnRmKFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICByb2RhdGEgKGRlZmF1bHQsIHg4NiBhbmQgcmlzY3Ygb25seSksXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYWIgb3IgcGd0YWJsZVxcblwiXG4rXHQgICAgICAgXCIgICAgICAgICAgICAtZnwtLWZvcmNlICAgICAgICByZWFsbHkgcnVuIGl0OiB0aGlzIHBhbmljcyB0aGUga2VybmVsXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgIHNob3cgdGhpc1xcblwiKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0ge1xuK1x0eyBcImtpbmRcIiwgIDEsIE5VTEwsICdrJyB9LFxuK1x0eyBcImZvcmNlXCIsIDAsIE5VTEwsICdmJyB9LFxuK1x0eyBcImhlbHBcIiwgIDAsIE5VTEwsICdoJyB9LFxuK1x0eyBOVUxMLCAgICAwLCBOVUxMLCAwIH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqZm9yY2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBcInJvZGF0YVwiO1xuK1x0aW50IGM7XG4rXG4rXHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcIms6ZmhcIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7XG4rXHRcdHN3aXRjaCAoYykge1xuK1x0XHRjYXNlICdrJzpcbitcdFx0XHRuYW1lID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdmJzpcbitcdFx0XHQqZm9yY2UgPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0XHR1c2FnZSgpO1xuK1x0XHRcdGV4aXQoRVhJVF9TVUNDRVNTKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHR1c2FnZSgpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuK1x0aWYgKCFraW5kKVxuK1x0XHRmYXRhbChcInVua25vd24ga2luZCAnJXMnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXG5cIixcbitcdFx0ICAgICAgbmFtZSk7XG4rXG4rXHRyZXR1cm4ga2luZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgZm9yY2UpXG4re1xuK1x0aWYgKGdldGV1aWQoKSlcbitcdFx0ZmF0YWwoXCJtdXN0IHJ1biBhcyByb290XFxuXCIpO1xuK1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4rXHRcdGZhdGFsKFwiJXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcblwiLFxuK1x0XHQgICAgICBTWVNDVExfUEFUSCk7XG4rXHRpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSlcbitcdFx0ZmF0YWwoXCIlcyBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KVxcblwiLCBJTkpFQ1RfUEFUSCk7XG4rXHRpZiAoIWZvcmNlKVxuK1x0XHRmYXRhbChcInRoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxcblwiKTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbit7XG4rXHRsb25nIGFkZHI7XG4rXG4rXHRpZiAoa2luZC1cdTAwM2ViaXQgPT0gQklUKFJFU0VSVkVEKSkge1xuK1x0XHRhZGRyID0gcGlja19yb2RhdGFfcGh5c19hZGRyKCk7XG4rXHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRcdGZhdGFsKFwibm8gXFxcIktlcm5lbCByb2RhdGFcXFwiIGluIC9wcm9jL2lvbWVtOyB0cnkgLWsgc2xhYiBvciAtayBwZ3RhYmxlXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0YWRkciA9IHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoa2luZC1cdTAwM2ViaXQpO1xuK1x0XHRpZiAoYWRkciBcdTAwM2MgMClcbitcdFx0XHRmYXRhbChcIm5vIHVzYWJsZSAlcyBQRk4gaW4gJXNcXG5cIiwga2luZC1cdTAwM2VuYW1lLFxuK1x0XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcbit7XG4rXHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxuK1x0XHRmYXRhbChcImZhaWxlZCB0byByZWFkICVzXFxuXCIsIFNZU0NUTF9QQVRIKTtcbitcdGlmICh3cml0ZV9zeXNjdGwoMSkpXG4rXHRcdGZhdGFsKFwiZmFpbGVkIHRvIGVuYWJsZSAlc1xcblwiLCBTWVNDVExfUEFUSCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHQgY29uc3QgY2hhciAqdmVyZGljdClcbit7XG4rXHR1aW50NjRfdCBmbGFncztcbitcdGludCBmZCwgcmV0O1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRmYXRhbChcIiVzIChjb3VsZCBub3Qgb3BlbiAlcylcXG5cIiwgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTtcbitcdHJldCA9IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncyk7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRmYXRhbChcIiVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxuXCIsIHZlcmRpY3QsXG4rXHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IGtpbmQtXHUwMDNlYml0KVxuK1x0XHRmYXRhbChcIiVzIChwYWdlIHN0aWxsICVzKVxcblwiLCB2ZXJkaWN0LCBraW5kLVx1MDAzZW5hbWUpO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJXM7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcblwiLFxuK1x0XHRraW5kLVx1MDAzZW5hbWUpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBmbiwgcHJpb3I7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuK1x0Y29uc3QgY2hhciAqdmVyZGljdDtcbitcdGludCBmb3JjZSA9IDA7XG4rXG4rXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcdTAwMjZmb3JjZSk7XG4rXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuK1x0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XG4rXG4rXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbitcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbitcdGFybV9zeXNjdGwoXHUwMDI2cHJpb3IpO1xuK1xuK1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4rXG4rXHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbitcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4rXHR1bnBvaXNvbl9wZm4ocGZuKTtcbitcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuK1xuK1x0cmV0dXJuIEVYSVRfRkFJTFVSRTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOToyNi4xODQxNTY2MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY4NjA5MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBuZXcgdG9vbDogYHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNgLiAgSXQgYWxzbyB0b3VjaGVzIGBNQUlOVEFJTkVSU2AsIGAuZ2l0aWdub3JlYCwgYW5kIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgdG9vbHMvbW1gIGRpcmVjdG9yeS4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MganVzdCBhIHVzZXJzcGFjZSB0b29sIGZvciB0ZXN0aW5nIG1lbW9yeSBmYWlsdXJlIGJlaGF2aW9yLCB3ZSdyZSBwcm9iYWJseSBub3QgbG9va2luZyBhdCBhbnl0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0J3Mgbm90IGNoYW5naW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQncyB0cnVseSB0aGUgY2FzZS4uLiBZZXAsIHRoZSBkaWZmIGNvbmZpcm1zIGl0OiBvbmx5IHRob3NlIGZvdXIgZmlsZXMgYXJlIG1vZGlmaWVkLiAgTm8ga2VybmVsIHNvdXJjZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBndWlkYW5jZS4gIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0aGF0IHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBLY29uZmlnIGNoYW5nZXMsIGNvZGUgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgdG9vbCBpbiBgdG9vbHMvbW0vYC4gIEl0ICpkb2Vzbid0KiBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UsIHNvIEknbSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgZGlmZiBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBtaXNzZWQuIE5vcGUsIGl0J3MganVzdCB0aG9zZSBmb3VyIGZpbGVzOiBgTUFJTlRBSU5FUlNgLCBgLmdpdGlnbm9yZWAsIHRoZSBgTWFrZWZpbGVgLCBhbmQgdGhlIG5ldyB0b29sIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IGFkZGluZyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGBod3BvaXNvbi1wYW5pY2ApIGluIGB0b29scy9tbS9gLCB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zIHRvIGFjdHVhbCBrZXJuZWwgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTIsIk91dHB1dFRva2VucyI6NjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOTozNS40NTI3Njk4NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm4jrz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 19:27:26 +0000 UTC FinishedAt: 2026-08-01 19:39:37 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4NzAyMTc5Y2Y2N2I5Njk5OThlZmRiYzMxMDU2ZmNhNWVjMzYxY2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE5OjM5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI2NTdjYmY2ZGY5MDMuLjE5NDcxMjRlMzRjMDYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xMjA0Myw2ICYjNDM7MTIwNDMsNyBAQCBGOlx0aW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oXG4gRjpcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0bW0vaHdwb2lzb24taW5qZWN0LmNcbiBGOlx0bW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MztGOlx0dG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbiBcbiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MzttZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUyYjNDM7PW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yNCw2ICYjNDM7MjUsNyBAQCAkKExJQlMpOlxuIFxuIGNsZWFuOlxuIFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4MDc2ZDg2ZGExNWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbkBAIC0wLDAgJiM0MzsxLDM1MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcbiYjNDM7ICogaW5qZWN0aW5nIGEgaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGVcbiYjNDM7ICoga2VybmVsIHBhbmljcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXG4mIzQzOyAqIChkZWZhdWx0OiByb2RhdGEpOlxuJiM0MzsgKlxuJiM0MzsgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cbiYjNDM7ICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0Oy4gIHg4NiBhbmQgcmlzY3Ygb25seS5cbiYjNDM7ICogICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbiYjNDM7ICpcbiYjNDM7ICogc2xhYiBhbmQgcGd0YWJsZSB3b3JrIGV2ZXJ5d2hlcmU7IHJvZGF0YSBuZWVkcyBhbiBhcmNoaXRlY3R1cmUgdGhhdFxuJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHNsYWIgYW5kIHBndGFibGUgdmFyaWFudHMgZXhlcmNpc2UgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpXG4mIzQzOyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxuJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxuJiM0MzsgKiAtRU5PVFJFQ09WRVJBQkxFLlxuJiM0MzsgKlxuJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzXG4mIzQzOyAqIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwgY29uc29sZVxuJiM0MzsgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbiYjNDM7ICogICBcJiMzNDtNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDtcbiYjNDM7ICogUmV0dXJuaW5nIGF0IGFsbCBtZWFucyBubyBwYW5pYyBmaXJlZCwgc28gZXZlcnkgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm86XG4mIzQzOyAqIGVpdGhlciBhIGZhaWx1cmUsIG9yIGFuIGluY29uY2x1c2l2ZSBydW4gd2hlcmUgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG9cbiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBTWVNDVExfUEFUSFx0XCYjMzQ7L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcJiMzNDtcbiYjNDM7I2RlZmluZSBJTkpFQ1RfUEFUSFx0XCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcJiMzNDtcbiYjNDM7I2RlZmluZSBQUk9DX0tQQUdFRkxBR1NcdFwmIzM0Oy9wcm9jL2twYWdlZmxhZ3NcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4mIzQzOyNkZWZpbmUgS1BGX1JFU0VSVkVEXHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoeClcdChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSlcbiYjNDM7XG4mIzQzOy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1aW50NjRfdCBiaXQ7XG4mIzQzO30gcGFnZV9raW5kc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7cm9kYXRhXCYjMzQ7LCAgQklUKFJFU0VSVkVEKSB9LFxuJiM0MztcdHsgXCYjMzQ7c2xhYlwmIzM0OywgICAgQklUKFNMQUIpICAgICB9LFxuJiM0MztcdHsgXCYjMzQ7cGd0YWJsZVwmIzM0OywgQklUKFBHVEFCTEUpICB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuJiM0Mzt7XG4mIzQzO1x0dmFfbGlzdCBhcDtcbiYjNDM7XG4mIzQzO1x0dmFfc3RhcnQoYXAsIHgpO1xuJiM0MztcdHZmcHJpbnRmKHN0ZGVyciwgeCwgYXApO1xuJiM0MztcdHZhX2VuZChhcCk7XG4mIzQzO1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1aW50NjRfdCAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzc2l6ZV90IGJ5dGVzO1xuJiM0MztcbiYjNDM7XHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBieXRlcyA9PSBzaXplb2YoKmZsYWdzKSA/IDAgOiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGlja19yb2RhdGFfcGh5c19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgbGFiZWxbNjRdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiYjNDM7XHRsb25nIGFkZHIgPSAtMTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oXCYjMzQ7L3Byb2MvaW9tZW1cJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0LyogU3ViLXJlc291cmNlcyBhcmUgaW5kZW50ZWQ6IFwmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXCYjMzQ7ICovXG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGlmIChzc2NhbmYobGluZSwgXCYjMzQ7ICVseC0lbHggOiAlNjNbXlxcbl1cJiMzNDssIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsIGxhYmVsKSAhPSAzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdHJjbXAobGFiZWwsIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspIHx8IGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4mIzQzO1x0XHRhZGRyID0gKChzdGFydCAmIzQzOyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCBcdTAwM2NcdTAwM2MgMjApIC8gcGFnZV9zaXplO1xuJiM0MztcdGxvbmcgYWRkciA9IC0xO1xuJiM0MztcdHVpbnQ2NF90IGZsYWdzO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgd2FudCkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChIV1BPSVNPTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEJJVChOT1BBR0UpKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWFkX3N5c2N0bCh1bnNpZ25lZCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRyZXQgPSBmc2NhbmYoZiwgXCYjMzQ7JWx1XCYjMzQ7LCB2YWwpID09IDEgPyAwIDogLTE7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2N0bCh1bnNpZ25lZCBsb25nIHZhbClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCYjMzQ7d1wmIzM0Oyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldCA9IGZwcmludGYoZiwgXCYjMzQ7JWx1XCYjMzQ7LCB2YWwpIFx1MDAzYyAwID8gLTEgOiAwO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xuJiM0MztzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4mIzQzO1x0aW50IGZkLCBsZW47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuJiM0MztcdGlmICghZGVidWdmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cJiMzNDssIGRlYnVnZnMpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCVseFxcblwmIzM0OywgcGZuKTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcdTAwM2MgMClcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt1bnBvaXNvbi1wZm5cJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XHRpbnQgZmQsIGxlbjtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWx4IChwZm4gMHglbHgsIGtpbmQ9JXMpXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7ZXhwZWN0aW5nIGtlcm5lbCBwYW5pYzogJiMzOTtNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xcblwmIzM0Oyk7XG4mIzQzO1x0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihJTkpFQ1RfUEFUSCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtjYW5ub3Qgb3BlbiBcJiMzNDsgSU5KRUNUX1BBVEg7XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OzB4JWx4XCYjMzQ7LCBwaHlzX2FkZHIpO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBidWYsIGxlbik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ICE9IGxlbilcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFwmIzM0O2luamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmVcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGFnZV9raW5kcyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKCFzdHJjbXAocGFnZV9raW5kc1tpXS5uYW1lLCBuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFx1MDAyNnBhZ2Vfa2luZHNbaV07XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2h3cG9pc29uLXBhbmljIFtvcHRpb25zXVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgXHUwMDNja2luZFx1MDAzZSAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgLWZ8LS1mb3JjZSAgICAgICAgcmVhbGx5IHJ1biBpdDogdGhpcyBwYW5pY3MgdGhlIGtlcm5lbFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICBzaG93IHRoaXNcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtraW5kXCYjMzQ7LCAgMSwgTlVMTCwgJiMzOTtrJiMzOTsgfSxcbiYjNDM7XHR7IFwmIzM0O2ZvcmNlXCYjMzQ7LCAwLCBOVUxMLCAmIzM5O2YmIzM5OyB9LFxuJiM0MztcdHsgXCYjMzQ7aGVscFwmIzM0OywgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sXG4mIzQzO1x0eyBOVUxMLCAgICAwLCBOVUxMLCAwIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqZm9yY2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtyb2RhdGFcJiMzNDs7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2s6ZmhcJiMzNDssIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChjKSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0XHRuYW1lID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtmJiMzOTs6XG4mIzQzO1x0XHRcdCpmb3JjZSA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuJiM0MztcdGlmICgha2luZClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga2luZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgZm9yY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXG5cJiMzNDssIElOSkVDVF9QQVRIKTtcbiYjNDM7XHRpZiAoIWZvcmNlKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtZiB0byBydW4gaXQgaW4gYSBkaXNwb3NhYmxlIFZNXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbiYjNDM7e1xuJiM0MztcdGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGtpbmQtXHUwMDNlYml0ID09IEJJVChSRVNFUlZFRCkpIHtcbiYjNDM7XHRcdGFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTtcbiYjNDM7XHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyBcXFwmIzM0O0tlcm5lbCByb2RhdGFcXFwmIzM0OyBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGFkZHIgPSBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXHUwMDNlYml0KTtcbiYjNDM7XHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyB1c2FibGUgJXMgUEZOIGluICVzXFxuXCYjMzQ7LCBraW5kLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcbiYjNDM7e1xuJiM0MztcdGlmIChyZWFkX3N5c2N0bChwcmlvcikpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDtmYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0OywgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmICh3cml0ZV9zeXNjdGwoMSkpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDtmYWlsZWQgdG8gZW5hYmxlICVzXFxuXCYjMzQ7LCBTWVNDVExfUEFUSCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7XHRcdFx0IGNvbnN0IGNoYXIgKnZlcmRpY3QpXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBmbGFncztcbiYjNDM7XHRpbnQgZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChjb3VsZCBub3Qgb3BlbiAlcylcXG5cJiMzNDssIHZlcmRpY3QsIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0cmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICVzKVxcblwmIzM0OywgdmVyZGljdCxcbiYjNDM7XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBraW5kLVx1MDAzZWJpdClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxcblwmIzM0OywgdmVyZGljdCwga2luZC1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICVzOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcXG5cJiMzNDssXG4mIzQzO1x0XHRraW5kLVx1MDAzZW5hbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGZuLCBwcmlvcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuJiM0MztcdGNvbnN0IGNoYXIgKnZlcmRpY3Q7XG4mIzQzO1x0aW50IGZvcmNlID0gMDtcbiYjNDM7XG4mIzQzO1x0a2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgXHUwMDI2Zm9yY2UpO1xuJiM0MztcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XG4mIzQzO1xuJiM0MztcdHBoeXNfYWRkciA9IHBpY2tfcGh5c19hZGRyKGtpbmQpO1xuJiM0MztcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRhcm1fc3lzY3RsKFx1MDAyNnByaW9yKTtcbiYjNDM7XG4mIzQzO1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4mIzQzO1xuJiM0MztcdC8qIE5vIHBhbmljIGZpcmVkLiAgUHV0IHRoZSBtYWNoaW5lIGJhY2ssIHRoZW4gcmVwb3J0LiAqL1xuJiM0MztcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4mIzQzO1x0dW5wb2lzb25fcGZuKHBmbik7XG4mIzQzO1x0cmVjaGVja19raW5kKGtpbmQsIHBmbiwgdmVyZGljdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBFWElUX0ZBSUxVUkU7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTk6Mzk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI2NTdjYmY2ZGY5MDMuLjE5NDcxMjRlMzRjMDYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xMjA0Myw2ICYjNDM7MTIwNDMsNyBAQCBGOglpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmgKIEY6CWluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmgKIEY6CW1tL2h3cG9pc29uLWluamVjdC5jCiBGOgltbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7RjoJdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jCiAKIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUCmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZQppbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NAotLS0gYS90b29scy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmUKQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mbwogcGFnZS10eXBlcwogcGFnZV9vd25lcl9zb3J0CiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC00LDYgJiM0Mzs0LDcgQEAKIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlCiAKIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztCVUlMRF9UQVJHRVRTJiM0Mzs9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQpAQCAtMjQsNiAmIzQzOzI1LDcgQEAgJChMSUJTKToKIAogY2xlYW46CiAJJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzsJJChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMKIAltYWtlIC1DICQoTElCX0RJUikgY2xlYW4KIAogc2JpbmRpciA/PSAvdXNyL3NiaW4KZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4MDc2ZDg2ZGExNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jCkBAIC0wLDAgJiM0MzsxLDM1MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkKJiM0MzsgKiBpbmplY3RpbmcgYSBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZQomIzQzOyAqIGtlcm5lbCBwYW5pY3MuCiYjNDM7ICoKJiM0MzsgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWsKJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKToKJiM0MzsgKgomIzQzOyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbQomIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7LiAgeDg2IGFuZCByaXNjdiBvbmx5LgomIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS4KJiM0MzsgKgomIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXQKJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS4KJiM0MzsgKgomIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkKJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmUKJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZgomIzQzOyAqIC1FTk9UUkVDT1ZFUkFCTEUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzCiYjNDM7ICogbWVhbnQgZm9yIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggdGhlIHNlcmlhbCBjb25zb2xlCiYjNDM7ICogY2FwdHVyZWQuICBUaGUgcmVzdWx0IGlzIG9ic2VydmVkIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoCiYjNDM7ICogICAmIzM0O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDsKJiM0MzsgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzoKJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvCiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi4KJiM0MzsgKgomIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDthcGkvZnMvZnMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNZU0NUTF9QQVRICSYjMzQ7L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUmIzM0OwomIzQzOyNkZWZpbmUgSU5KRUNUX1BBVEgJJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZSYjMzQ7CiYjNDM7I2RlZmluZSBQUk9DX0tQQUdFRkxBR1MJJiMzNDsvcHJvYy9rcGFnZWZsYWdzJiMzNDsKJiM0MzsKJiM0MzsvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqLwomIzQzOyNkZWZpbmUgS1BGX1JFU0VSVkVECTMyCiYjNDM7CiYjNDM7I2RlZmluZSBCSVQobmFtZSkJKDFVTEwgJmx0OyZsdDsgS1BGXyMjbmFtZSkKJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoeCkJKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQomIzQzOwomIzQzOy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJdWludDY0X3QgYml0OwomIzQzO30gcGFnZV9raW5kc1tdID0gewomIzQzOwl7ICYjMzQ7cm9kYXRhJiMzNDssICBCSVQoUkVTRVJWRUQpIH0sCiYjNDM7CXsgJiMzNDtzbGFiJiMzNDssICAgIEJJVChTTEFCKSAgICAgfSwKJiM0MzsJeyAmIzM0O3BndGFibGUmIzM0OywgQklUKFBHVEFCTEUpICB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLikKJiM0Mzt7CiYjNDM7CXZhX2xpc3QgYXA7CiYjNDM7CiYjNDM7CXZhX3N0YXJ0KGFwLCB4KTsKJiM0MzsJdmZwcmludGYoc3RkZXJyLCB4LCBhcCk7CiYjNDM7CXZhX2VuZChhcCk7CiYjNDM7CWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIHBmbiwgdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsKJiM0MzsJYnl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIHBpY2tfcm9kYXRhX3BoeXNfYWRkcih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwomIzQzOwlsb25nIGFkZHIgPSAtMTsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKCYjMzQ7L3Byb2MvaW9tZW0mIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CS8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiAmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhJiMzNDsgKi8KJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDsgJWx4LSVseCA6ICU2M1teXG5dJiMzNDssICZhbXA7c3RhcnQsICZhbXA7ZW5kLCBsYWJlbCkgIT0gMykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdHJjbXAobGFiZWwsICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KSB8fCBlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBQYWdlLWFsaWduIHVwIGFuZCByZXR1cm4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLiAqLwomIzQzOwkJYWRkciA9ICgoc3RhcnQgJiM0MzsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCAmbHQ7Jmx0OyAyMCkgLyBwYWdlX3NpemU7CiYjNDM7CWxvbmcgYWRkciA9IC0xOwomIzQzOwl1aW50NjRfdCBmbGFnczsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWZvciAoOyBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgJmFtcDtmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKChmbGFncyAmYW1wOyB3YW50KSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQklUKEhXUE9JU09OKSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEoZmxhZ3MgJmFtcDsgQklUKE5PUEFHRSkpICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCSVQoQ09NUE9VTkRfVEFJTCkpKSB7CiYjNDM7CQkJYWRkciA9IHBmbiAqIHBhZ2Vfc2l6ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgJiMzNDtyJiMzNDspOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldCA9IGZzY2FuZihmLCAmIzM0OyVsdSYjMzQ7LCB2YWwpID09IDEgPyAwIDogLTE7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9zeXNjdGwodW5zaWduZWQgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwlGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyZXQgPSBmcHJpbnRmKGYsICYjMzQ7JWx1JiMzNDssIHZhbCkgJmx0OyAwID8gLTEgOiAwOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0cyB3aXRoIE1GX1NXX1NJTVVMQVRFRCwgc28gdW5wb2lzb24gaXMgYWxsb3dlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdOwomIzQzOwljb25zdCBjaGFyICpkZWJ1Z2ZzOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsKJiM0MzsJZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7CiYjNDM7CWlmICghZGVidWdmcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2h3cG9pc29uL3VucG9pc29uLXBmbiYjMzQ7LCBkZWJ1Z2ZzKTsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVseFxuJiMzNDssIHBmbik7CiYjNDM7CWlmICh3cml0ZShmZCwgYnVmLCBsZW4pICZsdDsgMCkKJiM0MzsJCXBlcnJvcigmIzM0O3VucG9pc29uLXBmbiYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaW5qZWN0X2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsJaW50IGZkLCBsZW47CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlwcmludGYoJiMzNDtpbmplY3RpbmcgaHdwb2lzb24gYXQgcGh5cyAweCVseCAocGZuIDB4JWx4LCBraW5kPSVzKVxuJiMzNDssCiYjNDM7CSAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC0mZ3Q7bmFtZSk7CiYjNDM7CXByaW50ZigmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xuJiMzNDspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gJiMzNDtjYW5ub3Qgb3BlbiAmIzM0OyBJTkpFQ1RfUEFUSDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVseCYjMzQ7LCBwaHlzX2FkZHIpOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gbGVuKQomIzQzOwkJcmV0dXJuICYjMzQ7aW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGgmIzM0OzsKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZSYjMzQ7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiAmYW1wO3BhZ2Vfa2luZHNbaV07CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgJmx0O2tpbmQmZ3Q7ICByb2RhdGEgKGRlZmF1bHQsIHg4NiBhbmQgcmlzY3Ygb25seSksXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgIC1mfC0tZm9yY2UgICAgICAgIHJlYWxseSBydW4gaXQ6IHRoaXMgcGFuaWNzIHRoZSBrZXJuZWxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgIHNob3cgdGhpc1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtraW5kJiMzNDssICAxLCBOVUxMLCAmIzM5O2smIzM5OyB9LAomIzQzOwl7ICYjMzQ7Zm9yY2UmIzM0OywgMCwgTlVMTCwgJiMzOTtmJiMzOTsgfSwKJiM0MzsJeyAmIzM0O2hlbHAmIzM0OywgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sCiYjNDM7CXsgTlVMTCwgICAgMCwgTlVMTCwgMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmZvcmNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7cm9kYXRhJiMzNDs7CiYjNDM7CWludCBjOwomIzQzOwomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2s6ZmgmIzM0Oywgb3B0cywgTlVMTCkpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKGMpIHsKJiM0MzsJCWNhc2UgJiMzOTtrJiMzOTs6CiYjNDM7CQkJbmFtZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtmJiMzOTs6CiYjNDM7CQkJKmZvcmNlID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQkJdXNhZ2UoKTsKJiM0MzsJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXVzYWdlKCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWtpbmQgPSBsb29rdXBfa2luZChuYW1lKTsKJiM0MzsJaWYgKCFraW5kKQomIzQzOwkJZmF0YWwoJiMzNDt1bmtub3duIGtpbmQgJiMzOTslcyYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcbiYjMzQ7LAomIzQzOwkJICAgICAgbmFtZSk7CiYjNDM7CiYjNDM7CXJldHVybiBraW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjaGVja19wcmVyZXFzKGludCBmb3JjZSkKJiM0Mzt7CiYjNDM7CWlmIChnZXRldWlkKCkpCiYjNDM7CQlmYXRhbCgmIzM0O211c3QgcnVuIGFzIHJvb3RcbiYjMzQ7KTsKJiM0MzsJaWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcbiYjMzQ7LAomIzQzOwkJICAgICAgU1lTQ1RMX1BBVEgpOwomIzQzOwlpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSkKJiM0MzsJCWZhdGFsKCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcbiYjMzQ7LCBJTkpFQ1RfUEFUSCk7CiYjNDM7CWlmICghZm9yY2UpCiYjNDM7CQlmYXRhbCgmIzM0O3RoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaWNrX3BoeXNfYWRkcihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kKQomIzQzO3sKJiM0MzsJbG9uZyBhZGRyOwomIzQzOwomIzQzOwlpZiAoa2luZC0mZ3Q7Yml0ID09IEJJVChSRVNFUlZFRCkpIHsKJiM0MzsJCWFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTsKJiM0MzsJCWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtJmd0O2JpdCk7CiYjNDM7CQlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQkJZmF0YWwoJiMzNDtubyB1c2FibGUgJXMgUEZOIGluICVzXG4mIzM0Oywga2luZC0mZ3Q7bmFtZSwKJiM0MzsJCQkgICAgICBQUk9DX0tQQUdFRkxBR1MpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhcm1fc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnByaW9yKQomIzQzO3sKJiM0MzsJaWYgKHJlYWRfc3lzY3RsKHByaW9yKSkKJiM0MzsJCWZhdGFsKCYjMzQ7ZmFpbGVkIHRvIHJlYWQgJXNcbiYjMzQ7LCBTWVNDVExfUEFUSCk7CiYjNDM7CWlmICh3cml0ZV9zeXNjdGwoMSkpCiYjNDM7CQlmYXRhbCgmIzM0O2ZhaWxlZCB0byBlbmFibGUgJXNcbiYjMzQ7LCBTWVNDVExfUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkgY29uc3QgY2hhciAqdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgZmQsIHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJZmF0YWwoJiMzNDslcyAoY291bGQgbm90IG9wZW4gJXMpXG4mIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTsKJiM0MzsJcmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXG4mIzM0OywgdmVyZGljdCwKJiM0MzsJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBraW5kLSZndDtiaXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxuJiMzNDssIHZlcmRpY3QsIGtpbmQtJmd0O25hbWUpOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXG4mIzM0OywKJiM0MzsJCWtpbmQtJmd0O25hbWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGZuLCBwcmlvcjsKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqdmVyZGljdDsKJiM0MzsJaW50IGZvcmNlID0gMDsKJiM0MzsKJiM0MzsJa2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgJmFtcDtmb3JjZSk7CiYjNDM7CXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiYjNDM7CWNoZWNrX3ByZXJlcXMoZm9yY2UpOwomIzQzOwomIzQzOwlwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTsKJiM0MzsJcGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplOwomIzQzOwlhcm1fc3lzY3RsKCZhbXA7cHJpb3IpOwomIzQzOwomIzQzOwl2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTsKJiM0MzsKJiM0MzsJLyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovCiYjNDM7CXdyaXRlX3N5c2N0bChwcmlvcik7CiYjNDM7CXVucG9pc29uX3BmbihwZm4pOwomIzQzOwlyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVYSVRfRkFJTFVSRTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTIKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHRvb2w6IGB0b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jYC4gIEl0IGFsc28gdG91Y2hlcyBgTUFJTlRBSU5FUlNgLCBgLmdpdGlnbm9yZWAsIGFuZCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYHRvb2xzL21tYCBkaXJlY3RvcnkuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBqdXN0IGEgdXNlcnNwYWNlIHRvb2wgZm9yIHRlc3RpbmcgbWVtb3J5IGZhaWx1cmUgYmVoYXZpb3IsIHdlJiMzOTtyZSBwcm9iYWJseSBub3QgbG9va2luZyBhdCBhbnl0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCYjMzk7cyB0cnVseSB0aGUgY2FzZS4uLiBZZXAsIHRoZSBkaWZmIGNvbmZpcm1zIGl0OiBvbmx5IHRob3NlIGZvdXIgZmlsZXMgYXJlIG1vZGlmaWVkLiAgTm8ga2VybmVsIHNvdXJjZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGd1aWRhbmNlLiAgVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtjb25maWcgY2hhbmdlcywgY29kZSBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLgoKVGhpcyBwYXRjaCAqb25seSogYWRkcyBhIHRvb2wgaW4gYHRvb2xzL21tL2AuICBJdCAqZG9lc24mIzM5O3QqIG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSwgc28gSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRpZmYgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgbm90aGluZyB3YXMgbWlzc2VkLiBOb3BlLCBpdCYjMzk7cyBqdXN0IHRob3NlIGZvdXIgZmlsZXM6IGBNQUlOVEFJTkVSU2AsIGAuZ2l0aWdub3JlYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGUgbmV3IHRvb2wgaXRzZWxmLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IGFkZGluZyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGBod3BvaXNvbi1wYW5pY2ApIGluIGB0b29scy9tbS9gLCB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zIHRvIGFjdHVhbCBrZXJuZWwgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSB1c2Vyc3BhY2UgdGVzdGluZyB0b29sIChod3BvaXNvbi1wYW5pYykgaW4gdG9vbHMvbW0vIGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjM5OjI1LjgxNzM4ODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNTQwNTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOToyNS44MTczOTUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NzUxNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE5OjM5OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyNjU3Y2JmNmRmOTAzLi4xOTQ3MTI0ZTM0YzA2IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTIwNDMsNiArMTIwNDMsNyBAQCBGOlxcdGluY2x1ZGUvbGludXgvbWVtb3J5LWZhaWx1cmUuaFxcbiBGOlxcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcXG4gRjpcXHRtbS9od3BvaXNvbi1pbmplY3QuY1xcbiBGOlxcdG1tL21lbW9yeS1mYWlsdXJlLmNcXG4rRjpcXHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXFxuIFxcbiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVFxcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5AQCAtMywzICszLDQgQEAgc2xhYmluZm9cXG4gcGFnZS10eXBlc1xcbiBwYWdlX293bmVyX3NvcnRcXG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC00LDYgKzQsNyBAQFxcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTKz1tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuQEAgLTI0LDYgKzI1LDcgQEAgJChMSUJTKTpcXG4gXFxuIGNsZWFuOlxcbiBcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xcbiBcXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cXG4gXFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iODA3NmQ4NmRhMTViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcXG5AQCAtMCwwICsxLDM1MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcXG4rICogaW5qZWN0aW5nIGEgaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGVcXG4rICoga2VybmVsIHBhbmljcy5cXG4rICpcXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXFxuKyAqIChkZWZhdWx0OiByb2RhdGEpOlxcbisgKlxcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cXG4rICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXFxcIktlcm5lbCByb2RhdGFcXFwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxcbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisgKiAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisgKlxcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XFxuKyAqIHB1Ymxpc2hlcyB0aGUgcm9kYXRhIHJlc291cmNlIGluIC9wcm9jL2lvbWVtLlxcbisgKlxcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpXFxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxcbisgKiAtRU5PVFJFQ09WRVJBQkxFLlxcbisgKlxcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLWYgaXMgcmVxdWlyZWQgYW5kIHRoZSB0b29sIGlzXFxuKyAqIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwgY29uc29sZVxcbisgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcXG4rICogICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXFxuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXFxuKyAqXFxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NnZXRvcHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXJnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NhcGkvZnMvZnMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcXHRcXFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcXFwiXFxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcXHRcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcXFwiXFxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXFx0XFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuK1xcbisvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqL1xcbisjZGVmaW5lIEtQRl9SRVNFUlZFRFxcdDMyXFxuK1xcbisjZGVmaW5lIEJJVChuYW1lKVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIEtQRl8jI25hbWUpXFxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVxcdChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSlcXG4rXFxuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHVpbnQ2NF90IGJpdDtcXG4rfSBwYWdlX2tpbmRzW10gPSB7XFxuK1xcdHsgXFxcInJvZGF0YVxcXCIsICBCSVQoUkVTRVJWRUQpIH0sXFxuK1xcdHsgXFxcInNsYWJcXFwiLCAgICBCSVQoU0xBQikgICAgIH0sXFxuK1xcdHsgXFxcInBndGFibGVcXFwiLCBCSVQoUEdUQUJMRSkgIH0sXFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XFxuK1xcbitzdGF0aWMgdm9pZCBmYXRhbChjb25zdCBjaGFyICp4LCAuLi4pXFxuK3tcXG4rXFx0dmFfbGlzdCBhcDtcXG4rXFxuK1xcdHZhX3N0YXJ0KGFwLCB4KTtcXG4rXFx0dmZwcmludGYoc3RkZXJyLCB4LCBhcCk7XFxuK1xcdHZhX2VuZChhcCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIHBmbiwgdWludDY0X3QgKmZsYWdzKVxcbit7XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcbitcXHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBpY2tfcm9kYXRhX3BoeXNfYWRkcih2b2lkKVxcbit7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4rXFx0bG9uZyBhZGRyID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL2lvbWVtXFxcIiwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXFxcIiAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXFxcIiAqL1xcbitcXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xcbitcXHRcXHRpZiAoc3NjYW5mKGxpbmUsIFxcXCIgJWx4LSVseCA6ICU2M1teXFxcXG5dXFxcIiwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLCBsYWJlbCkgIT0gMylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzdHJjbXAobGFiZWwsIFxcXCJLZXJuZWwgcm9kYXRhXFxcIikgfHwgZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0LyogUGFnZS1hbGlnbiB1cCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS4gKi9cXG4rXFx0XFx0YWRkciA9ICgoc3RhcnQgKyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4gPSAoMTZVTCBcXHUwMDNjXFx1MDAzYyAyMCkgLyBwYWdlX3NpemU7XFxuK1xcdGxvbmcgYWRkciA9IC0xO1xcbitcXHR1aW50NjRfdCBmbGFncztcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFxcdTAwMjZmbGFncykgPT0gMDsgcGZuKyspIHtcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IHdhbnQpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCSVQoSFdQT0lTT04pKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShmbGFncyBcXHUwMDI2IEJJVChOT1BBR0UpKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xcbitcXHRcXHRcXHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4re1xcbitcXHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFxcXCJyXFxcIik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0ID0gZnNjYW5mKGYsIFxcXCIlbHVcXFwiLCB2YWwpID09IDEgPyAwIDogLTE7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxcbit7XFxuK1xcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXFxcIndcXFwiKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXQgPSBmcHJpbnRmKGYsIFxcXCIlbHVcXFwiLCB2YWwpIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xcbitzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmWzMyXTtcXG4rXFx0Y29uc3QgY2hhciAqZGVidWdmcztcXG4rXFx0aW50IGZkLCBsZW47XFxuK1xcbitcXHRkZWJ1Z2ZzID0gZGVidWdmc19fbW91bnQoKTtcXG4rXFx0aWYgKCFkZWJ1Z2ZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIlcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cXFwiLCBkZWJ1Z2ZzKTtcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JWx4XFxcXG5cXFwiLCBwZm4pO1xcbitcXHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcXHUwMDNjIDApXFxuK1xcdFxcdHBlcnJvcihcXFwidW5wb2lzb24tcGZuXFxcIik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZmQsIGxlbjtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRwcmludGYoXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWx4IChwZm4gMHglbHgsIGtpbmQ9JXMpXFxcXG5cXFwiLFxcbitcXHQgICAgICAgcGh5c19hZGRyLCBwZm4sIGtpbmQtXFx1MDAzZW5hbWUpO1xcbitcXHRwcmludGYoXFxcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXFx1MDAzY3BmblxcdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSdcXFxcblxcXCIpO1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFxuK1xcdGZkID0gb3BlbihJTkpFQ1RfUEFUSCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gXFxcImNhbm5vdCBvcGVuIFxcXCIgSU5KRUNUX1BBVEg7XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiMHglbHhcXFwiLCBwaHlzX2FkZHIpO1xcbitcXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAocmV0ICE9IGxlbilcXG4rXFx0XFx0cmV0dXJuIFxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCI7XFxuK1xcbitcXHRyZXR1cm4gXFxcImluamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmVcXFwiO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBhZ2Vfa2luZHMpOyBpKyspXFxuK1xcdFxcdGlmICghc3RyY21wKHBhZ2Vfa2luZHNbaV0ubmFtZSwgbmFtZSkpXFxuK1xcdFxcdFxcdHJldHVybiBcXHUwMDI2cGFnZV9raW5kc1tpXTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbit7XFxuK1xcdHByaW50ZihcXFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICAgICAgICAgLWt8LS1raW5kIFxcdTAwM2NraW5kXFx1MDAzZSAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYWIgb3IgcGd0YWJsZVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgIC1mfC0tZm9yY2UgICAgICAgIHJlYWxseSBydW4gaXQ6IHRoaXMgcGFuaWNzIHRoZSBrZXJuZWxcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICBzaG93IHRoaXNcXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XFxuK1xcdHsgXFxcImtpbmRcXFwiLCAgMSwgTlVMTCwgJ2snIH0sXFxuK1xcdHsgXFxcImZvcmNlXFxcIiwgMCwgTlVMTCwgJ2YnIH0sXFxuK1xcdHsgXFxcImhlbHBcXFwiLCAgMCwgTlVMTCwgJ2gnIH0sXFxuK1xcdHsgTlVMTCwgICAgMCwgTlVMTCwgMCB9LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmZvcmNlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWUgPSBcXFwicm9kYXRhXFxcIjtcXG4rXFx0aW50IGM7XFxuK1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiazpmaFxcXCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xcbitcXHRcXHRzd2l0Y2ggKGMpIHtcXG4rXFx0XFx0Y2FzZSAnayc6XFxuK1xcdFxcdFxcdG5hbWUgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdmJzpcXG4rXFx0XFx0XFx0KmZvcmNlID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfU1VDQ0VTUyk7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHVzYWdlKCk7XFxuK1xcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRraW5kID0gbG9va3VwX2tpbmQobmFtZSk7XFxuK1xcdGlmICgha2luZClcXG4rXFx0XFx0ZmF0YWwoXFxcInVua25vd24ga2luZCAnJXMnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIG5hbWUpO1xcbitcXG4rXFx0cmV0dXJuIGtpbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGZvcmNlKVxcbit7XFxuK1xcdGlmIChnZXRldWlkKCkpXFxuK1xcdFxcdGZhdGFsKFxcXCJtdXN0IHJ1biBhcyByb290XFxcXG5cXFwiKTtcXG4rXFx0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBTWVNDVExfUEFUSCk7XFxuK1xcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxcbitcXHRcXHRmYXRhbChcXFwiJXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFxcblxcXCIsIElOSkVDVF9QQVRIKTtcXG4rXFx0aWYgKCFmb3JjZSlcXG4rXFx0XFx0ZmF0YWwoXFxcInRoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpXFxuK3tcXG4rXFx0bG9uZyBhZGRyO1xcbitcXG4rXFx0aWYgKGtpbmQtXFx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XFxuK1xcdFxcdGFkZHIgPSBwaWNrX3JvZGF0YV9waHlzX2FkZHIoKTtcXG4rXFx0XFx0aWYgKGFkZHIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRmYXRhbChcXFwibm8gXFxcXFxcXCJLZXJuZWwgcm9kYXRhXFxcXFxcXCIgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcXFxcblxcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhZGRyID0gcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcihraW5kLVxcdTAwM2ViaXQpO1xcbitcXHRcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGZhdGFsKFxcXCJubyB1c2FibGUgJXMgUEZOIGluICVzXFxcXG5cXFwiLCBraW5kLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gYWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcXG4re1xcbitcXHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxcbitcXHRcXHRmYXRhbChcXFwiZmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsIFNZU0NUTF9QQVRIKTtcXG4rXFx0aWYgKHdyaXRlX3N5c2N0bCgxKSlcXG4rXFx0XFx0ZmF0YWwoXFxcImZhaWxlZCB0byBlbmFibGUgJXNcXFxcblxcXCIsIFNZU0NUTF9QQVRIKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVjaGVja19raW5kKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbitcXHRcXHRcXHQgY29uc3QgY2hhciAqdmVyZGljdClcXG4re1xcbitcXHR1aW50NjRfdCBmbGFncztcXG4rXFx0aW50IGZkLCByZXQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyAoY291bGQgbm90IG9wZW4gJXMpXFxcXG5cXFwiLCB2ZXJkaWN0LCBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHRyZXQgPSBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgXFx1MDAyNmZsYWdzKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxcXG5cXFwiLCB2ZXJkaWN0LFxcbitcXHRcXHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBraW5kLVxcdTAwM2ViaXQpXFxuK1xcdFxcdGZhdGFsKFxcXCIlcyAocGFnZSBzdGlsbCAlcylcXFxcblxcXCIsIHZlcmRpY3QsIGtpbmQtXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXFxcXG5cXFwiLFxcbitcXHRcXHRraW5kLVxcdTAwM2VuYW1lKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZm4sIHByaW9yO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xcbitcXHRjb25zdCBjaGFyICp2ZXJkaWN0O1xcbitcXHRpbnQgZm9yY2UgPSAwO1xcbitcXG4rXFx0a2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgXFx1MDAyNmZvcmNlKTtcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFx0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XFxuK1xcbitcXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcXG4rXFx0cGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplO1xcbitcXHRhcm1fc3lzY3RsKFxcdTAwMjZwcmlvcik7XFxuK1xcbitcXHR2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTtcXG4rXFxuK1xcdC8qIE5vIHBhbmljIGZpcmVkLiAgUHV0IHRoZSBtYWNoaW5lIGJhY2ssIHRoZW4gcmVwb3J0LiAqL1xcbitcXHR3cml0ZV9zeXNjdGwocHJpb3IpO1xcbitcXHR1bnBvaXNvbl9wZm4ocGZuKTtcXG4rXFx0cmVjaGVja19raW5kKGtpbmQsIHBmbiwgdmVyZGljdCk7XFxuK1xcbitcXHRyZXR1cm4gRVhJVF9GQUlMVVJFO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjM5OjI2LjE4NDE1NDc1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyNjg2MzM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg3MDIxNzljZjY3Yjk2OTk5OGVmZGJjMzEwNTZmY2E1ZWMzNjFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTk6Mzk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAyNjU3Y2JmNmRmOTAzLi4xOTQ3MTI0ZTM0YzA2IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTIwNDMsNiArMTIwNDMsNyBAQCBGOlx0aW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oXG4gRjpcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0bW0vaHdwb2lzb24taW5qZWN0LmNcbiBGOlx0bW0vbWVtb3J5LWZhaWx1cmUuY1xuK0Y6XHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuIFxuIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICszLDQgQEAgc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbittZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLjlmNmRlOTU3YTk1YTAgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC00LDYgKzQsNyBAQFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFMrPW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbkBAIC0yNCw2ICsyNSw3IEBAICQoTElCUyk6XG4gXG4gY2xlYW46XG4gXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iODA3NmQ4NmRhMTViXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXG5AQCAtMCwwICsxLDM1MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBod3BvaXNvbi1wYW5pYzogdmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnlcbisgKiBpbmplY3RpbmcgYSBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZVxuKyAqIGtlcm5lbCBwYW5pY3MuXG4rICpcbisgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWtcbisgKiAoZGVmYXVsdDogcm9kYXRhKTpcbisgKlxuKyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbVxuKyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtIFwiS2VybmVsIHJvZGF0YVwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxuKyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4rICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbisgKlxuKyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXRcbisgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS5cbisgKlxuKyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKVxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxuKyAqIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBzdWNoIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mXG4rICogLUVOT1RSRUNPVkVSQUJMRS5cbisgKlxuKyAqIEEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLCBzbyAtZiBpcyByZXF1aXJlZCBhbmQgdGhlIHRvb2wgaXNcbisgKiBtZWFudCBmb3IgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCB0aGUgc2VyaWFsIGNvbnNvbGVcbisgKiBjYXB0dXJlZC4gIFRoZSByZXN1bHQgaXMgb2JzZXJ2ZWQgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbisgKiAgIFwiTWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCJcbisgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzpcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXG4rICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi5cbisgKlxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIi4uLy4uLy4uL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXCJcbisjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIlxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcIlxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcIi9wcm9jL2twYWdlZmxhZ3NcIlxuK1xuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4rI2RlZmluZSBLUEZfUkVTRVJWRURcdDMyXG4rXG4rI2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxuK1xuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1aW50NjRfdCBiaXQ7XG4rfSBwYWdlX2tpbmRzW10gPSB7XG4rXHR7IFwicm9kYXRhXCIsICBCSVQoUkVTRVJWRUQpIH0sXG4rXHR7IFwic2xhYlwiLCAgICBCSVQoU0xBQikgICAgIH0sXG4rXHR7IFwicGd0YWJsZVwiLCBCSVQoUEdUQUJMRSkgIH0sXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rXG4rc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuK3tcbitcdHZhX2xpc3QgYXA7XG4rXG4rXHR2YV9zdGFydChhcCwgeCk7XG4rXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbitcdHZhX2VuZChhcCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3BhZ2VmbGFnc19yZWFkKGludCBmZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHRzc2l6ZV90IGJ5dGVzO1xuK1xuK1x0Ynl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpO1xuK1xuK1x0cmV0dXJuIGJ5dGVzID09IHNpemVvZigqZmxhZ3MpID8gMCA6IC0xO1xuK31cbitcbitzdGF0aWMgbG9uZyBwaWNrX3JvZGF0YV9waHlzX2FkZHIodm9pZClcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgbGFiZWxbNjRdO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0bG9uZyBhZGRyID0gLTE7XG4rXHRGSUxFICpmO1xuK1xuK1x0ZiA9IGZvcGVuKFwiL3Byb2MvaW9tZW1cIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwiICovXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwiICVseC0lbHggOiAlNjNbXlxcbl1cIiwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCwgbGFiZWwpICE9IDMpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzdHJjbXAobGFiZWwsIFwiS2VybmVsIHJvZGF0YVwiKSB8fCBlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUGFnZS1hbGlnbiB1cCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS4gKi9cbitcdFx0YWRkciA9ICgoc3RhcnQgKyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0ZmNsb3NlKGYpO1xuK1x0cmV0dXJuIGFkZHI7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIodWludDY0X3Qgd2FudClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiA9ICgxNlVMIFx1MDAzY1x1MDAzYyAyMCkgLyBwYWdlX3NpemU7XG4rXHRsb25nIGFkZHIgPSAtMTtcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKSA9PSAwOyBwZm4rKykge1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiB3YW50KSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKEhXUE9JU09OKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGZsYWdzIFx1MDAyNiBCSVQoTk9QQUdFKSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcbitcdFx0XHRhZGRyID0gcGZuICogcGFnZV9zaXplO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCByZWFkX3N5c2N0bCh1bnNpZ25lZCBsb25nICp2YWwpXG4re1xuK1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcInJcIik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXQgPSBmc2NhbmYoZiwgXCIlbHVcIiwgdmFsKSA9PSAxID8gMCA6IC0xO1xuK1x0ZmNsb3NlKGYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9zeXNjdGwodW5zaWduZWQgbG9uZyB2YWwpXG4re1xuK1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcIndcIik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXQgPSBmcHJpbnRmKGYsIFwiJWx1XCIsIHZhbCkgXHUwMDNjIDAgPyAtMSA6IDA7XG4rXHRmY2xvc2UoZik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHVucG9pc29uIGlzIGFsbG93ZWQuICovXG4rc3RhdGljIHZvaWQgdW5wb2lzb25fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZlszMl07XG4rXHRjb25zdCBjaGFyICpkZWJ1Z2ZzO1xuK1x0aW50IGZkLCBsZW47XG4rXG4rXHRkZWJ1Z2ZzID0gZGVidWdmc19fbW91bnQoKTtcbitcdGlmICghZGVidWdmcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL2h3cG9pc29uL3VucG9pc29uLXBmblwiLCBkZWJ1Z2ZzKTtcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHglbHhcXG5cIiwgcGZuKTtcbitcdGlmICh3cml0ZShmZCwgYnVmLCBsZW4pIFx1MDAzYyAwKVxuK1x0XHRwZXJyb3IoXCJ1bnBvaXNvbi1wZm5cIik7XG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICppbmplY3RfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXHRpbnQgZmQsIGxlbjtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0cHJpbnRmKFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHglbHggKHBmbiAweCVseCwga2luZD0lcylcXG5cIixcbitcdCAgICAgICBwaHlzX2FkZHIsIHBmbiwga2luZC1cdTAwM2VuYW1lKTtcbitcdHByaW50ZihcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxuXCIpO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXG4rXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIFwiY2Fubm90IG9wZW4gXCIgSU5KRUNUX1BBVEg7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JWx4XCIsIHBoeXNfYWRkcik7XG4rXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKHJldCAhPSBsZW4pXG4rXHRcdHJldHVybiBcImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCI7XG4rXG4rXHRyZXR1cm4gXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCI7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxuK1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiBcdTAwMjZwYWdlX2tpbmRzW2ldO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4re1xuK1x0cHJpbnRmKFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICByb2RhdGEgKGRlZmF1bHQsIHg4NiBhbmQgcmlzY3Ygb25seSksXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYWIgb3IgcGd0YWJsZVxcblwiXG4rXHQgICAgICAgXCIgICAgICAgICAgICAtZnwtLWZvcmNlICAgICAgICByZWFsbHkgcnVuIGl0OiB0aGlzIHBhbmljcyB0aGUga2VybmVsXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgIHNob3cgdGhpc1xcblwiKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0ge1xuK1x0eyBcImtpbmRcIiwgIDEsIE5VTEwsICdrJyB9LFxuK1x0eyBcImZvcmNlXCIsIDAsIE5VTEwsICdmJyB9LFxuK1x0eyBcImhlbHBcIiwgIDAsIE5VTEwsICdoJyB9LFxuK1x0eyBOVUxMLCAgICAwLCBOVUxMLCAwIH0sXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqZm9yY2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBcInJvZGF0YVwiO1xuK1x0aW50IGM7XG4rXG4rXHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcIms6ZmhcIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7XG4rXHRcdHN3aXRjaCAoYykge1xuK1x0XHRjYXNlICdrJzpcbitcdFx0XHRuYW1lID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdmJzpcbitcdFx0XHQqZm9yY2UgPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0XHR1c2FnZSgpO1xuK1x0XHRcdGV4aXQoRVhJVF9TVUNDRVNTKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHR1c2FnZSgpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuK1x0aWYgKCFraW5kKVxuK1x0XHRmYXRhbChcInVua25vd24ga2luZCAnJXMnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXG5cIixcbitcdFx0ICAgICAgbmFtZSk7XG4rXG4rXHRyZXR1cm4ga2luZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgZm9yY2UpXG4re1xuK1x0aWYgKGdldGV1aWQoKSlcbitcdFx0ZmF0YWwoXCJtdXN0IHJ1biBhcyByb290XFxuXCIpO1xuK1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4rXHRcdGZhdGFsKFwiJXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcblwiLFxuK1x0XHQgICAgICBTWVNDVExfUEFUSCk7XG4rXHRpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSlcbitcdFx0ZmF0YWwoXCIlcyBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KVxcblwiLCBJTkpFQ1RfUEFUSCk7XG4rXHRpZiAoIWZvcmNlKVxuK1x0XHRmYXRhbChcInRoaXMgcGFuaWNzIHRoZSBrZXJuZWw7IHBhc3MgLWYgdG8gcnVuIGl0IGluIGEgZGlzcG9zYWJsZSBWTVxcblwiKTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbit7XG4rXHRsb25nIGFkZHI7XG4rXG4rXHRpZiAoa2luZC1cdTAwM2ViaXQgPT0gQklUKFJFU0VSVkVEKSkge1xuK1x0XHRhZGRyID0gcGlja19yb2RhdGFfcGh5c19hZGRyKCk7XG4rXHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRcdGZhdGFsKFwibm8gXFxcIktlcm5lbCByb2RhdGFcXFwiIGluIC9wcm9jL2lvbWVtOyB0cnkgLWsgc2xhYiBvciAtayBwZ3RhYmxlXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0YWRkciA9IHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoa2luZC1cdTAwM2ViaXQpO1xuK1x0XHRpZiAoYWRkciBcdTAwM2MgMClcbitcdFx0XHRmYXRhbChcIm5vIHVzYWJsZSAlcyBQRk4gaW4gJXNcXG5cIiwga2luZC1cdTAwM2VuYW1lLFxuK1x0XHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIHZvaWQgYXJtX3N5c2N0bCh1bnNpZ25lZCBsb25nICpwcmlvcilcbit7XG4rXHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxuK1x0XHRmYXRhbChcImZhaWxlZCB0byByZWFkICVzXFxuXCIsIFNZU0NUTF9QQVRIKTtcbitcdGlmICh3cml0ZV9zeXNjdGwoMSkpXG4rXHRcdGZhdGFsKFwiZmFpbGVkIHRvIGVuYWJsZSAlc1xcblwiLCBTWVNDVExfUEFUSCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHQgY29uc3QgY2hhciAqdmVyZGljdClcbit7XG4rXHR1aW50NjRfdCBmbGFncztcbitcdGludCBmZCwgcmV0O1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRmYXRhbChcIiVzIChjb3VsZCBub3Qgb3BlbiAlcylcXG5cIiwgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTtcbitcdHJldCA9IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncyk7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRmYXRhbChcIiVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxuXCIsIHZlcmRpY3QsXG4rXHRcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IGtpbmQtXHUwMDNlYml0KVxuK1x0XHRmYXRhbChcIiVzIChwYWdlIHN0aWxsICVzKVxcblwiLCB2ZXJkaWN0LCBraW5kLVx1MDAzZW5hbWUpO1xuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJXM7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcblwiLFxuK1x0XHRraW5kLVx1MDAzZW5hbWUpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBmbiwgcHJpb3I7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuK1x0Y29uc3QgY2hhciAqdmVyZGljdDtcbitcdGludCBmb3JjZSA9IDA7XG4rXG4rXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcdTAwMjZmb3JjZSk7XG4rXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuK1x0Y2hlY2tfcHJlcmVxcyhmb3JjZSk7XG4rXG4rXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbitcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbitcdGFybV9zeXNjdGwoXHUwMDI2cHJpb3IpO1xuK1xuK1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4rXG4rXHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbitcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4rXHR1bnBvaXNvbl9wZm4ocGZuKTtcbitcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuK1xuK1x0cmV0dXJuIEVYSVRfRkFJTFVSRTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOToyNi4xODQxNTY2MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY4NjA5MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBuZXcgdG9vbDogYHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNgLiAgSXQgYWxzbyB0b3VjaGVzIGBNQUlOVEFJTkVSU2AsIGAuZ2l0aWdub3JlYCwgYW5kIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgdG9vbHMvbW1gIGRpcmVjdG9yeS4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MganVzdCBhIHVzZXJzcGFjZSB0b29sIGZvciB0ZXN0aW5nIG1lbW9yeSBmYWlsdXJlIGJlaGF2aW9yLCB3ZSdyZSBwcm9iYWJseSBub3QgbG9va2luZyBhdCBhbnl0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0J3Mgbm90IGNoYW5naW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQncyB0cnVseSB0aGUgY2FzZS4uLiBZZXAsIHRoZSBkaWZmIGNvbmZpcm1zIGl0OiBvbmx5IHRob3NlIGZvdXIgZmlsZXMgYXJlIG1vZGlmaWVkLiAgTm8ga2VybmVsIHNvdXJjZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBndWlkYW5jZS4gIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0aGF0IHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBLY29uZmlnIGNoYW5nZXMsIGNvZGUgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgdG9vbCBpbiBgdG9vbHMvbW0vYC4gIEl0ICpkb2Vzbid0KiBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UsIHNvIEknbSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBzZWVtcyBhcHByb3ByaWF0ZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgZGlmZiBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBtaXNzZWQuIE5vcGUsIGl0J3MganVzdCB0aG9zZSBmb3VyIGZpbGVzOiBgTUFJTlRBSU5FUlNgLCBgLmdpdGlnbm9yZWAsIHRoZSBgTWFrZWZpbGVgLCBhbmQgdGhlIG5ldyB0b29sIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IGFkZGluZyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGBod3BvaXNvbi1wYW5pY2ApIGluIGB0b29scy9tbS9gLCB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zIHRvIGFjdHVhbCBrZXJuZWwgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTIsIk91dHB1dFRva2VucyI6NjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTozOTozNS40NTI3Njk4NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2wgKGh3cG9pc29uLXBhbmljKSBpbiB0b29scy9tbS8gYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbCAoaHdwb2lzb24tcGFuaWMpIGluIHRvb2xzL21tLyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm4jrz[1] Phase: Running StartedAt: 2026-08-01 19:39:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4jrz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 19:39:47 +0000 UTC FinishedAt: 2026-08-01 19:39:52 +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,}