Name: series-workflowqq45p Phase: Failed StartedAt: 2026-07-30 19:02:52 +0000 UTC FinishedAt: 2026-07-30 19:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq45p[0] Phase: Succeeded StartedAt: 2026-07-30 19:02:52 +0000 UTC FinishedAt: 2026-07-30 19:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq45p[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 19:02:52 +0000 UTC FinishedAt: 2026-07-30 19:06:16 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDU2ZGZlNzYyZDVmOWE5ODcxZWRkM2FlZTFmMjY3NmQwNDU0MjJiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE5OjA1OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzUuLmZhMmVkMDEyZTczNjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbkBAIC0xOTgsNiAmIzQzOzE5OCwyNSBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYXG4mIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGUgcmV0cmlldmFsLiBPbGRlciBURFhcbiYjNDM7ICogbW9kdWxlcyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsLCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRkZ192bV9yZChURENTX1FVT1RFX01BWF9TSVpFLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBfX25vcmV0dXJuIHRkeF9wYW5pYyhjb25zdCBjaGFyICptc2cpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5AQCAtNTAsNiAmIzQzOzUwLDcgQEBcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cbiAjZGVmaW5lIFREQ1NfQ09ORklHX0ZMQUdTXHRcdDB4MTExMDAwMDMwMDAwMDAxNlxuICNkZWZpbmUgVERDU19URF9DVExTXHRcdFx0MHgxMTEwMDAwMzAwMDAwMDE3XG4mIzQzOyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRVx0XHQweDkwMTAwMDAyMDAwMDAwMDhcbiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVNcdFx0MHg5MTAwMDAwMDAwMDAwMDEwXG4gI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRFx0MHg5MTAwMDAwMDAwMDAwMDE5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTgzLDYgJiM0Mzs4Myw4IEBAIGludCB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIodTggaW5kZXgsIHU4ICpkYXRhKTtcbiBcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XG4gXG4mIzQzO3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpO1xuJiM0MztcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTtcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuQEAgLTE2Miw3ICYjNDM7MTYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xuICAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuXG4gICovXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcdFx0U1pfMTI4S1xuJiM0MzsjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gXG4gI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gXG5AQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXHRcdDBcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG4gXG4tI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTlx0XHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcbiYjNDM7I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVx0XHRzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0ZHhfcXVvdGVfYnVmLCBkYXRhLCBuKVxuIFxuIC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuXG4gICogQHZlcnNpb246IFF1b3RlIGZvcm1hdCB2ZXJzaW9uLCBmaWxsZWQgYnkgVEQuXG5AQCAtMTkxLDggJiM0MzsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7XG4gXHR1OCBkYXRhW107XG4gfTtcbiBcbi0vKiBRdW90ZSBkYXRhIGJ1ZmZlciAqL1xuJiM0MzsvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovXG4gc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7XG4mIzQzO3N0YXRpYyBzaXplX3QgcXVvdGVfZGF0YV9sZW47XG4gXG4gLyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovXG4gc3RhdGljIERFRklORV9NVVRFWChxdW90ZV9sb2NrKTtcbkBAIC0yMDksOSAmIzQzOzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpXG4gXHRcdFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVx1MDAzZXRkcmVwb3J0KSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHtcbkBAIC0yMjIsMTIgJiM0MzsyMjIsMzEgQEAgc3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmKVxuIFx0ZnJlZV9wYWdlc19leGFjdChidWYsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYodm9pZClcbiYjNDM7LyogUmV0dXJuIGEgYnVmZmVyIHNpemUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBRdW90ZSAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90IHJlcG9ydCBhIG1heGltdW0gUXVvdGUgc2l6ZSwgc28gdXNlXG4mIzQzO1x0ICogdGhlIGRlZmF1bHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFxdW90ZV9zaXplKVxuJiM0MztcdFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgcmVwb3J0ZWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBidWZmZXIgaGVhZGVyICovXG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04oVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3NcbiYjNDM7XHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cbiYjNDM7XHQgKi9cbiBcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjg1LDcgJiM0MzszMDQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcbiBcbiBcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXG4gXHRxdW90ZV9idWYtXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xuQEAgLTI5Niw3ICYjNDM7MzE1LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcJiMzNDtHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcblwmIzM0OywgZXJyKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5AQCAtMzE1LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4mIzQzO1x0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcbiBcdFx0cmV0dXJuIC1FRkJJRztcbiBcbiBcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cdTAwM2VkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTtcbkBAIC00MTcsNyAmIzQzOzQzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlaW5pdF9tcjtcbiBcbi1cdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTtcbiYjNDM7XHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuJiM0MztcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xuIFx0aWYgKCFxdW90ZV9kYXRhKSB7XG4gXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUXVvdGUgYnVmZmVyXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MzEsNyAmIzQzOzQ1MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX3F1b3RlOlxuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4mIzQzO1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIGZyZWVfbWlzYzpcbiBcdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIGRlaW5pdF9tcjpcbkBAIC00NDQsNyAmIzQzOzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcbiB7XG4gXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMpO1xuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4mIzQzO1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZHJpdmVyLiBURFggZ3Vlc3QgY29kZSByZWxpZXMgb24gdGhlIFREQ0FMTCBpbnN0cnVjdGlvbiBhbmQgc3BlY2lmaWMgaGFyZHdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0IHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gQXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgVERYIENQVSBmZWF0dXJlIHdvdWxkIHJlc3VsdCBpbiBhICNVRCBleGNlcHRpb24gZHVyaW5nIGVhcmx5IGJvb3Qgd2hlbiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgVERDQUxMcy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1NmRmZTc2MmQ1ZjlhOTg3MWVkZDNhZWUxZjI2NzZkMDQ1NDIyYmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxOTowNTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKaW5kZXggMjliNmYxZWQ1OWVjNS4uZmEyZWQwMTJlNzM2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKQEAgLTE5OCw2ICYjNDM7MTk4LDI1IEBAIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZQomIzQzOyAqCiYjNDM7ICogUmVhZCB0aGUgbWF4aW11bSBzaXplIG9mIGEgVEQgUXVvdGUgZnJvbSBhIDQtYnl0ZSBURCBtZXRhZGF0YSBmaWVsZC4gVGhlIFREWAomIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGUgcmV0cmlldmFsLiBPbGRlciBURFgKJiM0MzsgKiBtb2R1bGVzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmllbGQgYW5kIHJldHVybiBhbiBlcnJvci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IHZhbCwgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfZ2V0X21heF9xdW90ZV9zaXplKTsKJiM0MzsKIHN0YXRpYyB2b2lkIF9fbm9yZXR1cm4gdGR4X3BhbmljKGNvbnN0IGNoYXIgKm1zZykKIHsKIAlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaApAQCAtNTAsNiAmIzQzOzUwLDcgQEAKIC8qIFREWCBURC1TY29wZSBNZXRhZGF0YS4gVG8gYmUgdXNlZCBieSBUREcuVk0uV1IgYW5kIFRERy5WTS5SRCAqLwogI2RlZmluZSBURENTX0NPTkZJR19GTEFHUwkJMHgxMTEwMDAwMzAwMDAwMDE2CiAjZGVmaW5lIFREQ1NfVERfQ1RMUwkJCTB4MTExMDAwMDMwMDAwMDAxNwomIzQzOyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRQkJMHg5MDEwMDAwMjAwMDAwMDA4CiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVMJCTB4OTEwMDAwMDAwMDAwMDAxMAogI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRAkweDkxMDAwMDAwMDAwMDAwMTkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaApAQCAtODMsNiAmIzQzOzgzLDggQEAgaW50IHRkeF9tY2FsbF9leHRlbmRfcnRtcih1OCBpbmRleCwgdTggKmRhdGEpOwogCiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7CiAKJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTsKJiM0MzsKIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpOwogdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYwppbmRleCBkMDMwM2UzMWU4MTYxLi44OTE5YjFhMTE1NGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jCkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKQogICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlcwogICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS4KICAqLwotI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkUJCVNaXzEyOEsKJiM0MzsjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFCVNaXzEyOEsKIAogI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUgkJMQogCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKQogI2RlZmluZSBHRVRfUVVPVEVfU1VDQ0VTUwkJMAogI2RlZmluZSBHRVRfUVVPVEVfSU5fRkxJR0hUCQkweGZmZmZmZmZmZmZmZmZmZmYKIAotI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTgkJKEdFVF9RVU9URV9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGR4X3F1b3RlX2J1ZikpCiYjNDM7I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKQkJc3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbikKIAogLyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci4KICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELgpAQCAtMTkxLDggJiM0MzsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7CiAJdTggZGF0YVtdOwogfTsKIAotLyogUXVvdGUgZGF0YSBidWZmZXIgKi8KJiM0MzsvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovCiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTsKJiM0MztzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuOwogCiAvKiBMb2NrIHRvIHN0cmVhbWxpbmUgcXVvdGUgcmVxdWVzdHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7CkBAIC0yMDksOSAmIzQzOzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpCiAJCQkgICAgIFVTRVJfU09DS1BUUihyZXEtJmd0O3RkcmVwb3J0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZikKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7Ci0Jc2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkgewpAQCAtMjIyLDEyICYjNDM7MjIyLDMxIEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZikKIAlmcmVlX3BhZ2VzX2V4YWN0KGJ1ZiwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgKmFsbG9jX3F1b3RlX2J1Zih2b2lkKQomIzQzOy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi8KJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZQomIzQzOwkgKiB0aGUgZGVmYXVsdC4KJiM0MzsJICovCiYjNDM7CWlmICghcXVvdGVfc2l6ZSkKJiM0MzsJCXJldHVybiBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRTsKJiM0MzsKJiM0MzsJLyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqLwomIzQzOwlyZXR1cm4gUEFHRV9BTElHTihURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbikKIHsKLQlzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IGxlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXZvaWQgKmFkZHI7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJiMzOTtzCiYjNDM7CSAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLgomIzQzOwkgKi8KIAlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4NSw3ICYjNDM7MzA0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAlpZiAoZGVzYy0mZ3Q7aW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CW1lbXNldChxdW90ZV9kYXRhLCAwLCBxdW90ZV9kYXRhX2xlbik7CiAKIAkvKiBVcGRhdGUgUXVvdGUgYnVmZmVyIGhlYWRlciAqLwogCXF1b3RlX2J1Zi0mZ3Q7dmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSOwpAQCAtMjk2LDcgJiM0MzszMTUsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQllcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CWVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7R2V0UXVvdGUgaHlwZXJjYWxsIGZhaWxlZCwgc3RhdHVzOiVsbHhcbiYjMzQ7LCBlcnIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMxNSw3ICYjNDM7MzM0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAogCW91dF9sZW4gPSBSRUFEX09OQ0UocXVvdGVfYnVmLSZndDtvdXRfbGVuKTsKIAotCWlmIChvdXRfbGVuICZndDsgVERYX1FVT1RFX01BWF9MRU4pCiYjNDM7CWlmIChURFhfUVVPVEVfQlVGX0xFTihvdXRfbGVuKSAmZ3Q7IHF1b3RlX2RhdGFfbGVuKQogCQlyZXR1cm4gLUVGQklHOwogCiAJYnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLSZndDtkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTQxNyw3ICYjNDM7NDM2LDggQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGRlaW5pdF9tcjsKIAotCXF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTsKJiM0MzsJcXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTsKJiM0MzsJcXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7CiAJaWYgKCFxdW90ZV9kYXRhKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcbiYjMzQ7KTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQzMSw3ICYjNDM7NDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlyZXR1cm4gMDsKIAogZnJlZV9xdW90ZToKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogZnJlZV9taXNjOgogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiBkZWluaXRfbXI6CkBAIC00NDQsNyAmIzQzOzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTsKIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKQogewogCXRzbV9yZXBvcnRfdW5yZWdpc3RlcigmYW1wO3RkeF90c21fb3BzKTsKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiAJdGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgVERYIGd1ZXN0IGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgYW5kIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBxdW90ZSBzaXplIG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGluc3RlYWQgb2YgaGFyZGNvZGluZyB0aGUgYnVmZmVyIHNpemUgYXQgYEdFVF9RVU9URV9CVUZfU0laRWAgKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBhIGJpdCBzdXNwZWN0IGluIGl0c2VsZiksIHRoZSBjb2RlIG5vdyByZWFkcyB0aGUgKmFjdHVhbCogbWF4aW11bSBxdW90ZSBzaXplIGZyb20gdGhlIFREWCBtZXRhZGF0YSAoYFREQ1NfUVVPVEVfTUFYX1NJWkVgKS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiB0aGUgcXVvdGUgYnVmZmVyLgoKTm93LCBhIHJlZCBmbGFnIHBvcHMgdXAuIFREWCwgYXMgSSBrbm93LCBpcyBhbGwgYWJvdXQgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIEl0JiMzOTtzIEludGVsJiMzOTtzIHRlY2gsIGFuZCBpdCBuZWNlc3NpdGF0ZXMgYm90aCBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQsIGNydWNpYWxseSwgaHlwZXJ2aXNvciBzdXBwb3J0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IGZ1enplZCBvciB0ZXN0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gVERYIGd1ZXN0IGNvZGUsIGJ5IGl0cyBuYXR1cmUsIGlzIHVzdWFsbHkgKm5vdCogcmVhY2hhYmxlIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgaGFzIFREWCBoYXJkd2FyZS4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgdGVzdGFiaWxpdHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlciByZWFjaGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIGFuZCBzZWUgd2hlcmUgaXQgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ3Vlc3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHNtX3JlcG9ydF9vcHMgdGR4X3RzbV9vcHMgPSB7XG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyMy1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MjQ6c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MjUte1xuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00NjEtfVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQ2Mjptb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgYWxsIGFib3V0LiBGcm9tIG15IHBlcnNwZWN0aXZlLCBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBsZXZlbCBvZiBzeXN0ZW1zIHByb2dyYW1taW5nLCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZW52aXJvbm1lbnQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIHNldCB1cCB3aXRoaW4gdGhlIHNlY3VyZSBlbmNsYXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGJyZWFraW5nIGRvd24gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVERYIGJvb3QgcHJvY2Vzcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIHJvb3Qgb2YgdHJ1c3QgaXMgZXN0YWJsaXNoZWQsIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBwcm90ZWN0ZWQgd2l0aGluIHRoZSBlbmNsYXZlLCBhbmQgd2hhdCBpbml0aWFsIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHBsaWVkLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhhY3Qgcm9sZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFREWCBlbnZpcm9ubWVudCBpcyBicm91Z2h0IHRvIGxpZmUgYW5kIHNlY3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdFx0LnJlcG9ydF9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2F0dHJfdmlzaWJsZSxcbiA0MjE6XHRcdC5yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSxcbiA0MjI6XHR9O1xuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gNDI1Olx0e1xuIDQyNjpcdFx0aW50IHJldDtcbiA0Mjc6XHRcbiA0Mjg6XHRcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcbiA0Mjk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDMwOlx0XG4gNDMxOlx0XHR0ZHhfYXR0cl9ncm91cHNbMF0gPSB0ZHhfbXJfaW5pdCgpO1xuIDQzMjpcdFx0aWYgKElTX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pKVxuIDQzMzpcdFx0XHRyZXR1cm4gUFRSX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pO1xuIDQzNDpcdFxuIDQzNTpcdFx0cmV0ID0gbWlzY19yZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIDQzNjpcdFx0aWYgKHJldClcbiA0Mzc6XHRcdFx0Z290byBkZWluaXRfbXI7XG4gNDM4Olx0XG4gNDM5Olx0XHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuIDQ0MDpcdFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gNDQxOlx0XHRpZiAoIXF1b3RlX2RhdGEpIHtcbiA0NDI6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cJiMzNDspO1xuIDQ0MzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDQ0NDpcdFx0XHRnb3RvIGZyZWVfbWlzYztcbiA0NDU6XHRcdH1cbiA0NDY6XHRcbiA0NDc6XHRcdHJldCA9IHRzbV9yZXBvcnRfcmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMsIE5VTEwpO1xuIDQ0ODpcdFx0aWYgKHJldClcbiA0NDk6XHRcdFx0Z290byBmcmVlX3F1b3RlO1xuIDQ1MDpcdFxuIDQ1MTpcdFx0cmV0dXJuIDA7XG4gNDUyOlx0XG4gNDUzOlx0ZnJlZV9xdW90ZTpcbiA0NTQ6XHRcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiA0NTU6XHRmcmVlX21pc2M6XG4gNDU2Olx0XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiA0NTc6XHRkZWluaXRfbXI6XG4gNDU4Olx0XHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gNDU5Olx0XG4gNDYwOlx0XHRyZXR1cm4gcmV0O1xuIDQ2MTpcdH1cbiA0NjI6XHRtb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG4gNDYzOlx0XG4gNDY0Olx0c3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXG4gNDY1Olx0e1xuIDQ2NjpcdFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFx1MDAyNnRkeF90c21fb3BzKTtcbiA0Njc6XHRcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiA0Njg6XHRcdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIDQ2OTpcdFx0dGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHg4NiBDUFUgTWF0Y2hpbmcgaW4gYSBURFggR3Vlc3QgQ29udGV4dCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBpcyBoaXR0aW5nIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2VhciDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2d1ZXN0X2lkc2AgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEl0JiMzOTtzIGNsZWFybHkgYSBjcml0aWNhbCBpbnB1dCB0byB0aGUgQ1BVIG1hdGNoaW5nIGxvZ2ljLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoaXMgaXMgc29tZSBraW5kIG9mIGlkZW50aWZpZXIgb3Igc2V0IG9mIGlkZW50aWZpZXJzIHNwZWNpZmljYWxseSBmb3IgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgZGVmaW5pdGlvbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBsaWtlbHkgcGVyZm9ybWluZyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB0aGUgaG9zdCBzeXN0ZW0gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBURFggZ3Vlc3QsIG9yIHBlcmhhcHMgdG8gZGVmaW5lIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGd1ZXN0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIG5vdyBhbmQgdW5kZXJzdGFuZCB0aGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ3Vlc3RfaWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDEwLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMi1cdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxNC19O1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpNT0RVTEVfREVWSUNFX1RBQkxFKHg4NmNwdSwgdGR4X2d1ZXN0X2lkcyk7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MjQ9c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDI3LVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQyODpcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MjktXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgUmVxdWlyZW1lbnQqKgoKT2theSwgc28gdGhpcyBjb2RlIHBhdGggaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7VERYIGd1ZXN0IGVudmlyb25tZW50JiMzNDsgdG8gbWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHNvbWVob3cgKmVtdWxhdGUqIHRoaXMgZmVhdHVyZSB3aXRoaW4gUUVNVT8gSSYjMzk7bSB0aGlua2luZyBvZiB0ZXN0aW5nIHRoaXMgb24gYSBtb3JlIGdlbmVyaWMgcGxhdGZvcm0sIHNvIHRoYXQgaXMgYSBjcml0aWNhbCBxdWVzdGlvbi4KClRoZSBkZWVwZXIgSSBnZXQgaW50byB0aGlzLCB0aGUgbW9yZSBvYnZpb3VzIGl0IGJlY29tZXM6IFREWCBndWVzdHMgYXJlIGEgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgdGhpbmcuIFlvdSBuZWVkIGEgaG9zdCBDUFUgdGhhdCBzdXBwb3J0cyBURFggYW5kIGEgaHlwZXJ2aXNvciB0aGF0JiMzOTtzIHNldCB1cCB0byB3b3JrIHdpdGggaXQuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IGNvbmp1cmUgdXAgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIG9yIGV2ZW4gb24gYSBzdGFuZGFyZCBHQ0UgaW5zdGFuY2UsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQuIFdpdGhvdXQgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgaG9zdCBjb25maWd1cmF0aW9uLCB3ZSBhcmUgaW4gYSBuby1nbyB6b25lLgoKU28sIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLiBUaGF0JiMzOTtzIHRoZSBzaW1wbGUgY29uY2x1c2lvbiwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNvbmNsdXNpb24gaXMgc291bmQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBzb21ldGltZXMgdGhlcmUgYXJlIHdheXMgdG8gY29lcmNlIGZlYXR1cmVzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHRlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IHdheSB0byBmb3JjZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSSByZWNhbGwgdGhlIENQVSBmZWF0dXJlIGZsYWdzIGFyZSBvZnRlbiBzZXQgcXVpdGUgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGVjdGlvbi4gU28sIGlmIHRoZSBoYXJkd2FyZSBzYXlzIG5vIFREWCwgdGhlIGZsYWcgaXMgbm90IHNldC4gV2Ugd2lsbCBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBkb25lIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1g4Nl9GRUFUVVJFX1REWF9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTMzPXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Mi1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDM6XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQ0LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD0zND1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDAodW5zaWduZWQgaW50IG5yKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMzctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjM4Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMzktXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgMCwgMCwgMCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD00OD1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDEodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNTEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjUyOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNTMtXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIDAsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NjI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwyKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTY2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo2NzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTY4LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgMCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD03Nz1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtODEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjgyOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtODMtXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD05Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDQodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtOTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjk4Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtOTktXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgcDQpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5Lmg9OD1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NlcHRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMC1cdC8qIFBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeS1hY2NlcHRhbmNlIGNhbGwgZ29lcyBoZXJlICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oOjExOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMi1cdFx0aWYgKCF0ZHhfYWNjZXB0X21lbW9yeShzdGFydCwgZW5kKSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD05OT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMDM6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTA0LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTIzPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDModW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyNy1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjEyODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjktXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNDg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNCh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTUyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTUzOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1NC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTE3Mz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw1KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNzgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxNzk6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTgwLVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgaW40LCBpbjUsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MjAxPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDYodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjIwNzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDgtXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIyOD11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw3KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzQtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMzU6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM2LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgaW40LCBpbjUsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz00NDA9dm9pZCBndWVzdF9mb3JjZV9tdHJyX3N0YXRlKHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdmFyLCB1bnNpZ25lZCBpbnQgbnVtX3Zhcixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2Mi1cdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YRU5QVikgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjQ2MzpcdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jPTkzOD12b2lkIF9faW5pdCBzZWxlY3RfaWRsZV9yb3V0aW5lKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTItXHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh4ODZfaWRsZSwgbXdhaXRfaWRsZSk7XG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjk1MzpcdH0gZWxzZSBpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTk1NC1cdFx0cHJfaW5mbyhcJiMzNDt1c2luZyBURFggYXdhcmUgaWRsZSByb3V0aW5lXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM9MTI5PVNZTV9DT0RFX1NUQVJUX0xPQ0FMX05PQUxJR04oaWRlbnRpdHlfbWFwcGVkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUy0yMDQtXHRhbmRsXHQkKFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9MQTU3KSwgJXIxM2RcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUzoyMDU6XHRBTFRFUk5BVElWRSBcJiMzNDtcJiMzNDssIF9fc3RyaW5naWZ5KG9ybCAkWDg2X0NSNF9NQ0UsICVyMTNkKSwgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA2LVx0bW92cVx0JXIxMywgJWNyNFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MTE9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTI6XHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMy1cdHt9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjktI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFx0XHQoIDgqMzImIzQzOzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMzA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcdFx0KCA4KjMyJiM0MzsyMikgLyogXCYjMzQ7dGR4X2d1ZXN0XCYjMzQ7IEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGlzIGJlaW5nIGVuYWJsZWQgc29tZXdoZXJlIGluIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc3BlY2lmaWNhbGx5IGJ5IHRoZSBgdGR4X2Vhcmx5X2luaXQoKWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiBgdGR4X2Vhcmx5X2luaXQoKWAgaXMgYmVpbmcgaW52b2tlZC4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBldmVudD8gV2hhdCYjMzk7cyB0aGUgY2FsbCBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBjcnVjaWFsIGVuYWJsaW5nIG9mIHRoZSBURFggZ3Vlc3QgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZSBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gZnVsbHkgZ3Jhc3AgdGhlIFREWCBndWVzdCBzZXR1cC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjYWxsIGlzIG1hZGUuLi4gdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9lYXJseV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTk5OT1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDAzLVx0ICogT25seSBoYW5kbGUgc2hhcmVkLVx1MDAzZXByaXZhdGUgY29udmVyc2lvbiBoZXJlLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAwNDpcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwNS1cdCAqL1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTEwMTI9c3RhdGljIGludCB0ZHhfZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDE2LVx0ICogT25seSBoYW5kbGUgcHJpdmF0ZS1cdTAwM2VzaGFyZWQgY29udmVyc2lvbiBoZXJlLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAxNzpcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAxOC1cdCAqL1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMTk9c3RhdGljIF9faW5pdCB2b2lkIHRkeF9hbm5vdW5jZSh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzItXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTMzOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM0LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD01Nz1zdHJ1Y3QgdmVfaW5mbyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNjktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo3MDp2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTcxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg5PXZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTkyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6OTM6c3RhdGljIGlubGluZSB2b2lkIHRkeF9lYXJseV9pbml0KHZvaWQpIHsgfTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTk0LXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4tLVxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jPTIyMj1hc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIF9faW5pdCBfX25vcmV0dXJuIHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqIHJlYWxfbW9kZV9kYXRhKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yNzgtXHQvKiBOZWVkZWQgYmVmb3JlIGNjX3BsYXRmb3JtX2hhcygpIGNhbiBiZSB1c2VkIGZvciBURFggKi9cbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYzoyNzk6XHR0ZHhfZWFybHlfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jLTI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBhcmUgaW5pdGlhbGl6ZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgZWFybHkgc3RhZ2VzLiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB0ZHhfZWFybHlfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB4ODYtc3BlY2lmaWMgYW5kIHJlbGF0ZWQgdG8gQ29DbyAoQ29uZmlkZW50aWFsIENvbXB1dGluZyksIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBvcGVyYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHBlcmhhcHMgc29tZSBlYXJseSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gVERYIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHBlcmZvcm1lZCBhdCB0aGlzIGNyaXRpY2FsIHN0YWdlLiBVbmRlcnN0YW5kaW5nIHRoZSBlYXJseSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBzZWN1cml0eSBhbmQgb3BlcmF0aW9uYWwgYXNwZWN0cyBvZiBURFguIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzM6XHR2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuMTEzNDpcdHtcbjExMzU6XHRcdHU2NCBjY19tYXNrO1xuMTEzNjpcdFx0dTMyIGVheCwgc2lnWzNdO1xuMTEzNzpcdFxuMTEzODpcdFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuMTEzOTpcdFxuMTE0MDpcdFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxuMTE0MTpcdFx0XHRyZXR1cm47XG4xMTQyOlx0XG4xMTQzOlx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG4xMTQ0Olx0XG4xMTQ1Olx0XHQvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovXG4xMTQ2Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfSU5URUw7XG4xMTQ5Olx0XG4xMTUwOlx0XHQvKiBDb25maWd1cmUgdGhlIFREICovXG4xMTUxOlx0XHR0ZHhfc2V0dXAoXHUwMDI2Y2NfbWFzayk7XG4xMTUyOlx0XG4xMTUzOlx0XHRjY19zZXRfbWFzayhjY19tYXNrKTtcbjExNTQ6XHRcbjExNTU6XHRcdC8qXG4xMTU2Olx0XHQgKiBBbGwgYml0cyBhYm92ZSBHUEEgd2lkdGggYXJlIHJlc2VydmVkIGFuZCBrZXJuZWwgdHJlYXRzIHNoYXJlZCBiaXRcbjExNTc6XHRcdCAqIGFzIGZsYWcsIG5vdCBhcyBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MuXG4xMTU4Olx0XHQgKlxuMTE1OTpcdFx0ICogQWRqdXN0IHBoeXNpY2FsIG1hc2sgdG8gb25seSBjb3ZlciB2YWxpZCBHUEEgYml0cy5cbjExNjA6XHRcdCAqL1xuMTE2MTpcdFx0cGh5c2ljYWxfbWFzayBcdTAwMjY9IGNjX21hc2sgLSAxO1xuMTE2MjpcdFxuMTE2MzpcdFx0LypcbjExNjQ6XHRcdCAqIFRoZSBrZXJuZWwgbWFwcGluZyBzaG91bGQgbWF0Y2ggdGhlIFREWCBtZXRhZGF0YSBmb3IgdGhlIHBhZ2UuXG4xMTY1Olx0XHQgKiBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKCkgY2FuIHRvdWNoIG1lbW9yeSAqYWRqYWNlbnQqIHRvIHRoYXQgd2hpY2ggaXNcbjExNjY6XHRcdCAqIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGNhbiBjYXRjaCBldmVuIF9tb21lbnRhcnlfIG1pc21hdGNoZXMuICBCYWRcbjExNjc6XHRcdCAqIHRoaW5ncyBoYXBwZW4gb24gbWlzbWF0Y2g6XG4xMTY4Olx0XHQgKlxuMTE2OTpcdFx0ICogICAtIFByaXZhdGUgbWFwcGluZyA9XHUwMDNlIFNoYXJlZCBQYWdlICA9PSBHdWVzdCBzaHV0ZG93blxuMTE3MDpcdCAgICAgICAgICogICAtIFNoYXJlZCBtYXBwaW5nICA9XHUwMDNlIFByaXZhdGUgUGFnZSA9PSBSZWNvdmVyYWJsZSAjVkVcbjExNzE6XHRcdCAqXG4xMTcyOlx0XHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxuMTE3MzpcdFx0ICogc2hhcmVkPVx1MDAzZXByaXZhdGUgYmVmb3JlIHRoZSBtYXBwaW5nIGJlY29tZXMgcHJpdmF0ZS5cbjExNzQ6XHRcdCAqXG4xMTc1Olx0XHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2goKSBjb252ZXJ0cyB0aGUgcGFnZSBmcm9tXG4xMTc2Olx0XHQgKiBwcml2YXRlPVx1MDAzZXNoYXJlZCBhZnRlciB0aGUgbWFwcGluZyBiZWNvbWVzIHByaXZhdGUuXG4xMTc3Olx0XHQgKlxuMTE3ODpcdFx0ICogSW4gYm90aCBjYXNlcyB0aGVyZSBpcyBhIHRlbXBvcmFyeSBzaGFyZWQgbWFwcGluZyB0byBhIHByaXZhdGUgcGFnZSxcbjExNzk6XHRcdCAqIHdoaWNoIGNhbiByZXN1bHQgaW4gYSAjVkUuICBCdXQsIHRoZXJlIGlzIG5ldmVyIGEgcHJpdmF0ZSBtYXBwaW5nIHRvXG4xMTgwOlx0XHQgKiBhIHNoYXJlZCBwYWdlLlxuMTE4MTpcdFx0ICovXG4xMTgyOlx0XHR4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSA9IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVERYIEd1ZXN0IERldGVjdGlvbiBhbmQgSHlwZXJjYWxsIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjaGVja2luZyBmb3IgVERYIHN1cHBvcnQgdXNpbmcgYGNwdWlkX2NvdW50YCBhbmQgY29tcGFyaW5nIGFnYWluc3QgYFREWF9JREVOVGAuIFRoaXMgcmVsaWVzIG9uIHNwZWNpZmljIENQVUlEIHZhbHVlcyBiZWluZyByZXR1cm5lZCwgd2hpY2ggd2UgKmNhbiogc2V0IGluIFFFTVUuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGVtdWxhdGUgdGhlIFREWCBoeXBlcmNhbGxzIHRoZW1zZWx2ZXM/IFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBtb2RpZmllcyBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYHRkZ192bV9yZGAgd2l0aCBgVERDU19RVU9URV9NQVhfU0laRWAuIEFuZCBgdGRnX3ZtX3JkYD8gVGhhdCBleGVjdXRlcyBhIFREQ0FMTCBpbnN0cnVjdGlvbiDigJMgdGhvc2UgYC5ieXRlIDB4NjYsMHgwZiwweDAxLDB4Y2NgIGJ5dGVzLgoKTm93LCBpZiB0aGUgaHlwZXJ2aXNvciBpc24mIzM5O3QgVERYLWF3YXJlLCBleGVjdXRpbmcgdGhhdCBURENBTEwgaXMgZ29pbmcgdG8gY2F1c2UgYSAjVUQgKEludmFsaWQgT3Bjb2RlKSBvciBzb21lIHNpbWlsYXIgZXhjZXB0aW9uLiBCYXNpY2FsbHksIHRoZSBrZXJuZWwgY3Jhc2hlcyBvciBmYWlscyB0byBib290IGlmIGl0IGJlbGlldmVzIGl0JiMzOTtzIGEgVERYIGd1ZXN0LCBidXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgaHlwZXJjYWxsLgoKV2FpdCBhIHNlY29uZC4uLiBjYW4gUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgVERDQUxMPyBJIGtub3cgd2UgY2FuIHNldCB0aGUgQ1BVSUQgdmFsdWVzLCBidXQgaXMgdGhlcmUgYWN0dWFsIGh5cGVyY2FsbCBzdXBwb3J0PyBObywgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBkbyB0aGF0IHVubGVzcyBpdCYjMzk7cyBydW5uaW5nIG9uIGEgaG9zdCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlIGFuZCBLVk0gVERYIHN1cHBvcnQuIFRoYXQmIzM5O3MgKm5vdCogdGhlIHVzdWFsIEdDRS9RRU1VIGVudmlyb25tZW50IEkmIzM5O20gZGVhbGluZyB3aXRoLiBTbywgcmVhbGlzdGljYWxseSwgdGhpcyBURFggZ3Vlc3QgY29kZSBpc24mIzM5O3QgZXZlbiByZWFjaGFibGUgb3IgZ2V0dGluZyBleGVjdXRlZCBpbiBhIHR5cGljYWwgR0NFL1FFTVUgc2V0dXAuCgpMZXQgbWUganVzdCB2ZXJpZnkgcXVpY2tseSB0aGF0IGB0ZGdfdm1fcmRgIGlzICpkZWZpbml0ZWx5KiB1c2luZyBhIFREQ0FMTC4gTmVlZCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkZ192bV9yZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04MS0vKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODI6c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTgzLXtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yMTA9dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMTMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMTQ6XHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNS1cbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yNzQ9c3RhdGljIHZvaWQgZGlzYWJsZV9zZXB0X3ZlKHU2NCB0ZF9hdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTI4MC1cdC8qIElzIHRoaXMgVEQgYWxsb3dlZCB0byBkaXNhYmxlIFNFUFQgI1ZFICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyODE6XHR0ZGdfdm1fcmQoVERDU19DT05GSUdfRkxBR1MsIFx1MDAyNmNvbmZpZyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODItXHRpZiAoIShjb25maWcgXHUwMDI2IFREQ1NfQ09ORklHX0ZMRVhJQkxFX1BFTkRJTkdfVkUpKSB7XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjk1LVx0LyogQ2hlY2sgaWYgU0VQVCAjVkUgaGFzIGJlZW4gZGlzYWJsZWQgYmVmb3JlIHVzICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyOTY6XHR0ZGdfdm1fcmQoVERDU19URF9DVExTLCBcdTAwMjZjb250cm9scyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yOTctXHRpZiAoY29udHJvbHMgXHUwMDI2IFREX0NUTFNfUEVORElOR19WRV9ESVNBQkxFKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTMyMT1zdGF0aWMgdm9pZCBlbmFibGVfY3B1X3RvcG9sb2d5X2VudW1lcmF0aW9uKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI1LVx0LyogSGFzIHRoZSBWTU0gcHJvdmlkZWQgYSB2YWxpZCB0b3BvbG9neSBjb25maWd1cmF0aW9uPyAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MzI2Olx0dGRnX3ZtX3JkKFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVELCBcdTAwMjZjb25maWd1cmVkKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTMyNy1cdGlmICghY29uZmlndXJlZCkge1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMTk9c3RhdGljIF9faW5pdCB2b2lkIHRkeF9hbm5vdW5jZSh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMjgtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTI5Olx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXHUwMDI2Y29udHJvbHMpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTEzMC1cdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoaXMga2luZCBvZiB3b3JrOgoKKipBbmFseXppbmcgdGhlIFJlcXVlc3Q6IGB0ZGdfdm1fcmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgcmVhZCBgdGRnX3ZtX3JkYC4mIzM0OyBPa2F5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mIGB0ZGdfdm1fcmRgLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkmIzM5O20gYWxyZWFkeSBtYWtpbmcgc29tZSBhc3N1bXB0aW9ucy4gJiMzNDt0ZGcmIzM0OyBsaWtlbHkgcmVsYXRlcyB0byBhIHNwZWNpZmljIHRhcmdldCBvciBkYXRhIGdlbmVyYXRpb24sIGxpa2VseSBzb21lIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uICYjMzQ7dm0mIzM0OyBwcm9iYWJseSBtZWFucyBhIHZpcnR1YWwgbWFjaGluZS4gQW5kICYjMzQ7cmQmIzM0OyBjb3VsZCBzdGFuZCBmb3IgJiMzNDtyZWFkJiMzNDssIGltcGx5aW5nIGl0JiMzOTtzIGEgZmlsZSwgY29uZmlndXJhdGlvbiwgb3Igc29tZSBkYXRhIHNwZWNpZmljIHRvIHJlYWRpbmcgYW5kIHV0aWxpemluZyBhIHZpcnR1YWwgbWFjaGluZSBzZXR1cCByZWxhdGVkIHRvIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uIElzIGl0IGEgY29uZmlndXJhdGlvbj8gQSBzY3JpcHQ/IEEgbG9nPyBBbiBpbnB1dCBmaWxlPyBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBhcnRpZmFjdCAqaXMqIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZS4gVGhlIGNvbnRleHQgaXMgdml0YWw7IGFtIEkgZGVidWdnaW5nPyBJbnRlZ3JhdGluZz8gVGVzdGluZz8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0ZGNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKVxuICA3NjpcdHtcbiAgNzc6XHRcdGlmIChfX3RkY2FsbF9yZXQoZm4sIGFyZ3MpKVxuICA3ODpcdFx0XHRwYW5pYyhcJiMzNDtURENBTEwgJWxsZCBmYWlsZWQgKEJ1Z2d5IFREWCBtb2R1bGUhKVxcblwmIzM0OywgZm4pO1xuICA3OTpcdH1cbiAgODA6XHRcbiAgODE6XHQvKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xuICA4MjpcdHN0YXRpYyBpbmxpbmUgdTY0IHRkZ192bV9yZCh1NjQgZmllbGQsIHU2NCAqdmFsdWUpXG4gIDgzOlx0e1xuICA4NDpcdFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuICA4NTpcdFx0XHQucmR4ID0gZmllbGQsXG4gIDg2Olx0XHR9O1xuICA4NzpcdFx0dTY0IHJldDtcbiAgODg6XHRcbiAgODk6XHRcdHJldCA9IF9fdGRjYWxsX3JldChUREdfVk1fUkQsIFx1MDAyNmFyZ3MpO1xuICA5MDpcdFx0KnZhbHVlID0gYXJncy5yODtcbiAgOTE6XHRcbiAgOTI6XHRcdHJldHVybiByZXQ7XG4gIDkzOlx0fVxuICA5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIGBfX3RkY2FsbF9yZXRgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBgX190ZGNhbGxfcmV0YC4uLnRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYXNzZW1ibHkuIE9mIGNvdXJzZS4gSXQgaGFzIHRvIGJlLiBUaGVyZSYjMzk7cyBzaW1wbHkgbm8gb3RoZXIgd2F5IHRvIG9yY2hlc3RyYXRlIHRoZSBraW5kIG9mIGxvdy1sZXZlbCByZXR1cm4gcGF0aCBtYW5pcHVsYXRpb24gbmVlZGVkIGZvciBhIHN5c3RlbS1jYWxsLWJhc2VkIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGRyb3BwaW5nIGRvd24gdG8gdGhlIGJhcmUgbWV0YWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1hbmFnaW5nIHRoZSBzdGFjayBwb2ludGVyLCBwb3RlbnRpYWxseSByZXN0b3JpbmcgcmVnaXN0ZXJzLCBhbmQgZW5zdXJpbmcgYSBzZWFtbGVzcyBjb250ZXh0IHN3aXRjaCBiYWNrIHRvIHRoZSBjYWxsaW5nIHRocmVhZC4gVGhlIGNvbXBpbGVyLCBldmVuIHdpdGggYWdncmVzc2l2ZSBpbmxpbmluZywgd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZ2VuZXJhdGUgdGhlIG9wdGltYWwgc2VxdWVuY2UgYW5kIGhhbmRsZSBhbGwgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBpbiBhIHRydWx5IGVmZmljaWVudCBhbmQgcmVsaWFibGUgbWFubmVyLiBBc3NlbWJseSBnaXZlcyB1cyB0aGUgcHJlY2lzZSBjb250cm9sIHdlIGRlbWFuZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUsIHRvby4gSXTigJlsbCBtYWtlIGEgbG90IG9mIGFzc3VtcHRpb25zIGFib3V0IEFCSSBhbmQgcmVnaXN0ZXIgdXNhZ2U7IEkmIzM5O2xsIGFsc28gaGF2ZSB0byBjb25zaWRlciBhbnkgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgY2FsbGluZyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190ZGNhbGxfcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TPTI3PVNZTV9GVU5DX0VORChfX3RkY2FsbClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0yOS0vKlxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzA6ICogX190ZGNhbGxfcmV0KCkgLSBVc2VkIGJ5IFREWCBndWVzdHMgdG8gcmVxdWVzdCBzZXJ2aWNlcyBmcm9tIHRoZSBURFhcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMxLSAqIG1vZHVsZSAoZG9lcyBub3QgaW5jbHVkZSBWTU0gc2VydmljZXMpIHVzaW5nIFREQ0FMTCBpbnN0cnVjdGlvbiwgd2l0aFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMzLSAqXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzozNDogKiBfX3RkY2FsbF9yZXQoKSBmdW5jdGlvbiBBQkk6XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0zNS0gKlxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTQyLSAqL1xuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6NDM6U1lNX0ZVTkNfU1RBUlQoX190ZGNhbGxfcmV0KVxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDQtXHRURFhfTU9EVUxFX0NBTEwgaG9zdD0wIHJldD0xXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzo0NTpTWU1fRlVOQ19FTkQoX190ZGNhbGxfcmV0KVxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDYtXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NzU9c3RhdGljIGlubGluZSB2b2lkIHRkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03Ni17XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo3NzpcdGlmIChfX3RkY2FsbF9yZXQoZm4sIGFyZ3MpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzgtXHRcdHBhbmljKFwmIzM0O1REQ0FMTCAlbGxkIGZhaWxlZCAoQnVnZ3kgVERYIG1vZHVsZSEpXFxuXCYjMzQ7LCBmbik7XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9ODI9c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04OC1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjg5Olx0cmV0ID0gX190ZGNhbGxfcmV0KFRER19WTV9SRCwgXHUwMDI2YXJncyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy05MC1cdCp2YWx1ZSA9IGFyZ3Mucjg7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oPTE1MD11NjQgX190ZGNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxNTE6dTY0IF9fdGRjYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTE1Mi11NjQgX190ZGNhbGxfc2F2ZWRfcmV0KHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDcxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggR3Vlc3QgQ29kZSBGdXp6YWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBURFhfTU9EVUxFX0NBTExgIG1hY3JvLiBJdCB1c2VzIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBURFggZ3Vlc3Qtc3BlY2lmaWMgY29tcG9uZW50LiBOb3csIGtub3dpbmcgdGhlIGVudmlyb25tZW50IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgc3RhbmRhcmQgUUVNVSBpbnN0YWxsYXRpb25zIGFyZSBub3QgY29uZmlndXJlZCB0byBlbXVsYXRlIFREWCBndWVzdHMuIFRoYXQmIzM5O3MgYmVjYXVzZSBpdCByZWxpZXMgb24gc3BlY2lmaWMgaG9zdCBoYXJkd2FyZSBhbmQgS1ZNIHN1cHBvcnQsIHNvIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIgaW4gYSB2YW5pbGxhIHNldHVwLiBDb25zZXF1ZW50bHksIHRoaXMgYFREWF9NT0RVTEVfQ0FMTGAgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgdW5mdXp6YWJsZSB1bmRlciB0aG9zZSBjb25kaXRpb25zLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgYXNzZXNzbWVudCB3b3VsZCBiZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKQnV0LCBhcyBhIGdvb2QgcHJhY3RpY2UsIEkgd2FudCB0byBjb25maXJtIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBwYXRoIHRvIHRoaXMgY29kZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHNlZSB0aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgdGhlIG1vZHVsZSYjMzk7cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSXQgY2hlY2tzIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gVGhhdCBjaGVjayByZWxhdGVzIHRvIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBJIHJlY2FsbCB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGdldHMgc2V0IHdpdGhpbiBgdGR4X2Vhcmx5X2luaXRgLiBBbmQgdGhlIGNydWNpYWwgcGFydCBpbiBgdGR4X2Vhcmx5X2luaXRgIGlzIGEgYGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAuLi4pYCBjaGVjay4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBIeXBvdGhldGljYWxseSwgaWYgd2UgY291bGQgc29tZWhvdyBtb2NrIHRoZSBDUFVJRCB2YWx1ZXMgaW4gUUVNVSwgd2UgbWlnaHQgYmUgYWJsZSB0byB0cmljayBgdGR4X2Vhcmx5X2luaXRgIGludG8gc2V0dGluZyBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSG93ZXZlciwgZXZlbiBpZiB3ZSB3ZXJlIHN1Y2Nlc3NmdWwgaW4gc2V0dGluZyB0aGF0IGZsYWcgYW5kIHRyaWNraW5nIHRoZSBtb2R1bGUgaW5pdCwgdGhlIGZ1bmN0aW9uIGB0ZHhfc2V0dXBgIGlzIGFsd2F5cyBjYWxsZWQsIHdoaWNoIGFsc28gY2FsbHMgdGhlIGBURENBTExgIGluc3RydWN0aW9ucy4gTm93LCB1bmxlc3MgdGhlIGh5cGVydmlzb3IgKmFjdHVhbGx5KiBzdXBwb3J0cyBgVERDQUxMYCwgdGhlIGNvZGUgd2lsbCByZXN1bHQgaW4gYSAjVUQgKGludmFsaWQgb3Bjb2RlKSBleGNlcHRpb24gYW5kIGxpa2VseSBjcmFzaCB0aGUga2VybmVsIGR1cmluZyB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLiBUaGlzIG1lYW5zIHdlJiMzOTtkIG5ldmVyIGV2ZW4gZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UgY291bGQgZnV6eiBhbnl0aGluZywgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkbiYjMzk7dCBldmVuIGJvb3QuIFNvLCBtb2NraW5nIENQVUlEIHdvdWxkbiYjMzk7dCBnZXQgdXMgYXJvdW5kIGl0LgoKVGh1cywgZ2l2ZW4gdGhlIG5lY2Vzc2l0eSBmb3IgZ2VudWluZSBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24sIGl0JiMzOTtzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGB0ZHhfZ3Vlc3RfaW5pdGAsIGFuZCBieSBleHRlbnNpb24sIGBURFhfTU9EVUxFX0NBTExgIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhIGNyYXNoLiBNeSBmaW5hbCBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjb3JlIHJlYXNvbiBmb3IgdGhpcyBjb25jbHVzaW9uIGhpbmdlcyBvbiB0aGUgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIFREWCwgcGFydGljdWxhcmx5IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGBURENBTExgIGluc3RydWN0aW9uLCB3aGljaCBpcyBtaXNzaW5nIGluIHN0YW5kYXJkIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGRyaXZlci4gVERYIGd1ZXN0IGNvZGUgcmVsaWVzIG9uIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24gYW5kIHNwZWNpZmljIGhhcmR3YXJlL2h5cGVydmlzb3Igc3VwcG9ydCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIFREWCBDUFUgZmVhdHVyZSB3b3VsZCByZXN1bHQgaW4gYSAjVUQgZXhjZXB0aW9uIGR1cmluZyBlYXJseSBib290IHdoZW4gdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBleGVjdXRlIFREQ0FMTHMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MDguOTM5NzkxNTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTg3NjY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTowOC45Mzk3OTk5NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTQ0MTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1NmRmZTc2MmQ1ZjlhOTg3MWVkZDNhZWUxZjI2NzZkMDQ1NDIyYmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6MDU6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbmluZGV4IDI5YjZmMWVkNTllYzUuLmZhMmVkMDEyZTczNjggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbkBAIC0xOTgsNiArMTk4LDI1IEBAIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHRkeF9oY2FsbF9nZXRfcXVvdGUpO1xcbiBcXG4rLyoqXFxuKyAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplXFxuKyAqXFxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcXG4rICogZ3Vlc3QgZHJpdmVyIHVzZXMgaXQgdG8gc2l6ZSB0aGUgYnVmZmVyIGZvciBRdW90ZSByZXRyaWV2YWwuIE9sZGVyIFREWFxcbisgKiBtb2R1bGVzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmllbGQgYW5kIHJldHVybiBhbiBlcnJvci5cXG4rICpcXG4rICogUmV0dXJuOiBNYXhpbXVtIFF1b3RlIHNpemUgaW4gYnl0ZXMgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4re1xcbitcXHR1NjQgdmFsLCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXFx1MDAyNnZhbCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbitcXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG5AQCAtNTAsNiArNTAsNyBAQFxcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1xcdFxcdDB4MTExMDAwMDMwMDAwMDAxNlxcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1xcdFxcdFxcdDB4MTExMDAwMDMwMDAwMDAxN1xcbisjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcXHRcXHQweDkwMTAwMDAyMDAwMDAwMDhcXG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXFx0XFx0MHg5MTAwMDAwMDAwMDAwMDEwXFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcXHQweDkxMDAwMDAwMDAwMDAwMTlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XFxuIFxcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XFxuIFxcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG4rXFxuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxcbiAgKi9cXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcXHRcXHRTWl8xMjhLXFxuKyNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIFxcbiAjZGVmaW5lIEdFVF9RVU9URV9DTURfVkVSXFx0XFx0MVxcbiBcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXFx0XFx0MFxcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gXFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cXHRcXHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcXG4rI2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIFxcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxcbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG5AQCAtMTkxLDggKzE5MSw5IEBAIHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gXFx0dTggZGF0YVtdO1xcbiB9O1xcbiBcXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cXG4rLyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xcbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcXG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gXFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbkBAIC0yMDksOSArMjEwLDggQEAgc3RhdGljIGxvbmcgdGR4X2dldF9yZXBvcnQwKHN0cnVjdCB0ZHhfcmVwb3J0X3JlcSBfX3VzZXIgKnJlcSlcXG4gXFx0XFx0XFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVxcdTAwM2V0ZHJlcG9ydCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuK3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xcbkBAIC0yMjIsMTIgKzIyMiwzMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuIFxcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXFxuKy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi9cXG4rc3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcXG4re1xcbitcXHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZVxcbitcXHQgKiB0aGUgZGVmYXVsdC5cXG4rXFx0ICovXFxuK1xcdGlmICghcXVvdGVfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xcbitcXG4rXFx0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0dm9pZCAqYWRkcjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgZmFpbHMgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGV4Y2VlZHMgdGhlIGJ1ZGR5IGFsbG9jYXRvcidzXFxuK1xcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxcbitcXHQgKi9cXG4gXFx0YWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0KGxlbiwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiBcXHRpZiAoIWFkZHIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0yODUsNyArMzA0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcXG4gXFx0aWYgKGRlc2MtXFx1MDAzZWluYmxvYl9sZW4gIT0gVERYX1JFUE9SVERBVEFfTEVOKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG1lbXNldChxdW90ZV9kYXRhLCAwLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbitcXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xcbiBcXG4gXFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cXG4gXFx0cXVvdGVfYnVmLVxcdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XFxuQEAgLTI5Niw3ICszMTUsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbitcXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9lcnIoXFxcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG5AQCAtMzE1LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRvdXRfbGVuID0gUkVBRF9PTkNFKHF1b3RlX2J1Zi1cXHUwMDNlb3V0X2xlbik7XFxuIFxcbi1cXHRpZiAob3V0X2xlbiBcXHUwMDNlIFREWF9RVU9URV9NQVhfTEVOKVxcbitcXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkJJRztcXG4gXFxuIFxcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cXHUwMDNlZGF0YSwgb3V0X2xlbiwgR0ZQX0tFUk5FTCk7XFxuQEAgLTQxNyw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGRlaW5pdF9tcjtcXG4gXFxuLVxcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTtcXG4rXFx0cXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTtcXG4rXFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XFxuIFxcdGlmICghcXVvdGVfZGF0YSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbkBAIC00MzEsNyArNDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlX3F1b3RlOlxcbi1cXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcXG4rXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xcbiBmcmVlX21pc2M6XFxuIFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gZGVpbml0X21yOlxcbkBAIC00NDQsNyArNDY0LDcgQEAgbW9kdWxlX2luaXQodGR4X2d1ZXN0X2luaXQpO1xcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcXG4ge1xcbiBcXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXFx1MDAyNnRkeF90c21fb3BzKTtcXG4tXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XFxuK1xcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ0ZHhfbWlzY19kZXYpO1xcbiBcXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MDkuNDQ2MjM3MjkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTkwOTIzMTM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNTZkZmU3NjJkNWY5YTk4NzFlZGQzYWVlMWYyNjc2ZDA0NTQyMmJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6MDU6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCAyOWI2ZjFlZDU5ZWM1Li5mYTJlZDAxMmU3MzY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMTk4LDYgKzE5OCwyNSBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4rLyoqXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbisgKlxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3RlIHJldHJpZXZhbC4gT2xkZXIgVERYXG4rICogbW9kdWxlcyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4rICpcbisgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuXG4rICovXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcbit7XG4rXHR1NjQgdmFsLCByZXQ7XG4rXG4rXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbitcbitcdHJldHVybiByZXQgPyAwIDogKHUzMil2YWw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuK1xuIHN0YXRpYyB2b2lkIF9fbm9yZXR1cm4gdGR4X3BhbmljKGNvbnN0IGNoYXIgKm1zZylcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5pbmRleCBmMjBlOTFkN2FjMzViLi5hNTg3NTEzMjE2MTNiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbkBAIC01MCw2ICs1MCw3IEBAXG4gLyogVERYIFRELVNjb3BlIE1ldGFkYXRhLiBUbyBiZSB1c2VkIGJ5IFRERy5WTS5XUiBhbmQgVERHLlZNLlJEICovXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1x0XHQweDExMTAwMDAzMDAwMDAwMTZcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1x0XHRcdDB4MTExMDAwMDMwMDAwMDAxN1xuKyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRVx0XHQweDkwMTAwMDAyMDAwMDAwMDhcbiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVNcdFx0MHg5MTAwMDAwMDAwMDAwMDEwXG4gI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRFx0MHg5MTAwMDAwMDAwMDAwMDE5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTgzLDYgKzgzLDggQEAgaW50IHRkeF9tY2FsbF9leHRlbmRfcnRtcih1OCBpbmRleCwgdTggKmRhdGEpO1xuIFxuIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcbiBcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcbitcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTtcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbisrKyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAgKiBESUNFLWJhc2VkIGF0dGVzdGF0aW9uIHVzZXMgbGF5ZXJlZCBldmlkZW5jZSB0aGF0IHJlcXVpcmVzXG4gICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS5cbiAgKi9cbi0jZGVmaW5lIEdFVF9RVU9URV9CVUZfU0laRVx0XHRTWl8xMjhLXG4rI2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRVx0U1pfMTI4S1xuIFxuICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcdFx0MVxuIFxuQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXHRcdDBcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG4gXG4tI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTlx0XHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcbisjZGVmaW5lIFREWF9RVU9URV9CVUZfTEVOKG4pXHRcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXG4gXG4gLyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci5cbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cbkBAIC0xOTEsOCArMTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYge1xuIFx0dTggZGF0YVtdO1xuIH07XG4gXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cbisvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovXG4gc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7XG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcbiBcbiAvKiBMb2NrIHRvIHN0cmVhbWxpbmUgcXVvdGUgcmVxdWVzdHMgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xuQEAgLTIwOSw5ICsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKVxuIFx0XHRcdCAgICAgVVNFUl9TT0NLUFRSKHJlcS1cdTAwM2V0ZHJlcG9ydCkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4rc3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHtcbkBAIC0yMjIsMTIgKzIyMiwzMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4gXHRmcmVlX3BhZ2VzX2V4YWN0KGJ1ZiwgbGVuKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmFsbG9jX3F1b3RlX2J1Zih2b2lkKVxuKy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi9cbitzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuK3tcbitcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xuK1xuK1x0LypcbitcdCAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZVxuK1x0ICogdGhlIGRlZmF1bHQuXG4rXHQgKi9cbitcdGlmICghcXVvdGVfc2l6ZSlcbitcdFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuK1xuK1x0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xuK1x0cmV0dXJuIFBBR0VfQUxJR04oVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJ3NcbitcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxuK1x0ICovXG4gXHRhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI4NSw3ICszMDQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4rXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xuIFxuIFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cbiBcdHF1b3RlX2J1Zi1cdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XG5AQCAtMjk2LDcgKzMxNSw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xuK1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxuXCIsIGVycik7XG4gXHRcdHJldHVybiAtRUlPO1xuQEAgLTMxNSw3ICszMzQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4rXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXHUwMDNlIHF1b3RlX2RhdGFfbGVuKVxuIFx0XHRyZXR1cm4gLUVGQklHO1xuIFxuIFx0YnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLVx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xuQEAgLTQxNyw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWluaXRfbXI7XG4gXG4tXHRxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7XG4rXHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuK1x0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoIXF1b3RlX2RhdGEpIHtcbiBcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIFF1b3RlIGJ1ZmZlclxcblwiKTtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MzEsNyArNDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdHJldHVybiAwO1xuIFxuIGZyZWVfcXVvdGU6XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbitcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiBmcmVlX21pc2M6XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBkZWluaXRfbXI6XG5AQCAtNDQ0LDcgKzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcbiB7XG4gXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMpO1xuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4rXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTowOS40NDYyMzk4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ1Nzg3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBURFggZ3Vlc3QgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBhbmQgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgcXVvdGUgc2l6ZSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYmVjYXVzZSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlIGJ1ZmZlciBzaXplIGF0IGBHRVRfUVVPVEVfQlVGX1NJWkVgICh3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpcyBhIGJpdCBzdXNwZWN0IGluIGl0c2VsZiksIHRoZSBjb2RlIG5vdyByZWFkcyB0aGUgKmFjdHVhbCogbWF4aW11bSBxdW90ZSBzaXplIGZyb20gdGhlIFREWCBtZXRhZGF0YSAoYFREQ1NfUVVPVEVfTUFYX1NJWkVgKS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiB0aGUgcXVvdGUgYnVmZmVyLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcyB1cC4gVERYLCBhcyBJIGtub3csIGlzIGFsbCBhYm91dCBoYXJkd2FyZS1iYWNrZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gSXQncyBJbnRlbCdzIHRlY2gsIGFuZCBpdCBuZWNlc3NpdGF0ZXMgYm90aCBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQsIGNydWNpYWxseSwgaHlwZXJ2aXNvciBzdXBwb3J0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IGZ1enplZCBvciB0ZXN0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gVERYIGd1ZXN0IGNvZGUsIGJ5IGl0cyBuYXR1cmUsIGlzIHVzdWFsbHkgKm5vdCogcmVhY2hhYmxlIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgaGFzIFREWCBoYXJkd2FyZS4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgdGVzdGFiaWxpdHkuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgcGF0aCBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBgdGR4X2d1ZXN0X2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlciByZWFjaGVkLiBMZXQncyBzdGFydCB3aXRoIHRoYXQgYHRkeF9ndWVzdF9pbml0YCBmdW5jdGlvbiwgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MTQuODkyMDMxMTU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU0Nzg4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2d1ZXN0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRzbV9yZXBvcnRfb3BzIHRkeF90c21fb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyMy1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDI0OnN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyNS17XFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYxLX1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDYyOm1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToxNy4zODc1MTYxMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcwNzc0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2d1ZXN0X2luaXRgIGlzIGFsbCBhYm91dC4gRnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2Ygc3lzdGVtcyBwcm9ncmFtbWluZywgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGVudmlyb25tZW50LiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIHNldCB1cCB3aXRoaW4gdGhlIHNlY3VyZSBlbmNsYXZlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgYnJlYWtpbmcgZG93biBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBURFggYm9vdCBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByb290IG9mIHRydXN0IGlzIGVzdGFibGlzaGVkLCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgcHJvdGVjdGVkIHdpdGhpbiB0aGUgZW5jbGF2ZSwgYW5kIHdoYXQgaW5pdGlhbCBzZWN1cml0eSBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFREWCBlbnZpcm9ubWVudCBpcyBicm91Z2h0IHRvIGxpZmUgYW5kIHNlY3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyMC4zNTgyOTQ3MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHQucmVwb3J0X2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYXR0cl92aXNpYmxlLFxcbiA0MjE6XFx0XFx0LnJlcG9ydF9iaW5fYXR0cl92aXNpYmxlID0gdGR4X3JlcG9ydF9iaW5fYXR0cl92aXNpYmxlLFxcbiA0MjI6XFx0fTtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdGludCByZXQ7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG4gNDI5OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHR0ZHhfYXR0cl9ncm91cHNbMF0gPSB0ZHhfbXJfaW5pdCgpO1xcbiA0MzI6XFx0XFx0aWYgKElTX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pKVxcbiA0MzM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG4gNDM0OlxcdFxcbiA0MzU6XFx0XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDM2OlxcdFxcdGlmIChyZXQpXFxuIDQzNzpcXHRcXHRcXHRnb3RvIGRlaW5pdF9tcjtcXG4gNDM4OlxcdFxcbiA0Mzk6XFx0XFx0cXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTtcXG4gNDQwOlxcdFxcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xcbiA0NDE6XFx0XFx0aWYgKCFxdW90ZV9kYXRhKSB7XFxuIDQ0MjpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXFxcblxcXCIpO1xcbiA0NDM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNDQ0OlxcdFxcdFxcdGdvdG8gZnJlZV9taXNjO1xcbiA0NDU6XFx0XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRyZXQgPSB0c21fcmVwb3J0X3JlZ2lzdGVyKFxcdTAwMjZ0ZHhfdHNtX29wcywgTlVMTCk7XFxuIDQ0ODpcXHRcXHRpZiAocmV0KVxcbiA0NDk6XFx0XFx0XFx0Z290byBmcmVlX3F1b3RlO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZnJlZV9xdW90ZTpcXG4gNDU0OlxcdFxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gNDU1OlxcdGZyZWVfbWlzYzpcXG4gNDU2OlxcdFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDU3OlxcdGRlaW5pdF9tcjpcXG4gNDU4OlxcdFxcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYxOlxcdH1cXG4gNDYyOlxcdG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG4gNDYzOlxcdFxcbiA0NjQ6XFx0c3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXFxuIDQ2NTpcXHR7XFxuIDQ2NjpcXHRcXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXFx1MDAyNnRkeF90c21fb3BzKTtcXG4gNDY3OlxcdFxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gNDY4OlxcdFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDY5OlxcdFxcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MjAuMzU4NDU1NDMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5ODA1MDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHg4NiBDUFUgTWF0Y2hpbmcgaW4gYSBURFggR3Vlc3QgQ29udGV4dCoqXG5cbkFscmlnaHQsIEkgc2VlIHRoZSBjb2RlIGlzIGhpdHRpbmcgYHg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4ga2lja3MgaW50byBnZWFyIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfZ3Vlc3RfaWRzYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBjbGVhcmx5IGEgY3JpdGljYWwgaW5wdXQgdG8gdGhlIENQVSBtYXRjaGluZyBsb2dpYy4gQmFzZWQgb24gdGhlIG5hbWUsIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGlzIGlzIHNvbWUga2luZCBvZiBpZGVudGlmaWVyIG9yIHNldCBvZiBpZGVudGlmaWVycyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBURFggZ3Vlc3QgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgZGVmaW5pdGlvbiBhbmQgc2VlIGhvdyBpdCdzIHBvcHVsYXRlZC4gVGhpcyBmdW5jdGlvbiBjYWxsIGlzIGxpa2VseSBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIHRoZSBob3N0IHN5c3RlbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIFREWCBndWVzdCwgb3IgcGVyaGFwcyB0byBkZWZpbmUgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZ3Vlc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gbm93IGFuZCB1bmRlcnN0YW5kIHRoZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyMy4zNTY1MDg0ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Nzk4ODQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfZ3Vlc3RfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTAtXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTItXFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTQtfTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQyND1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyNy1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDI4OlxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDI5LVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyNS40NTQ1MDIzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODkwNjM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgcGF0aCBoaW5nZXMgb24gdGhlIHByZXNlbmNlIG9mIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJURFggZ3Vlc3QgZW52aXJvbm1lbnRcIiB0byBtZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2Ugc29tZWhvdyAqZW11bGF0ZSogdGhpcyBmZWF0dXJlIHdpdGhpbiBRRU1VPyBJJ20gdGhpbmtpbmcgb2YgdGVzdGluZyB0aGlzIG9uIGEgbW9yZSBnZW5lcmljIHBsYXRmb3JtLCBzbyB0aGF0IGlzIGEgY3JpdGljYWwgcXVlc3Rpb24uXG5cblRoZSBkZWVwZXIgSSBnZXQgaW50byB0aGlzLCB0aGUgbW9yZSBvYnZpb3VzIGl0IGJlY29tZXM6IFREWCBndWVzdHMgYXJlIGEgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgdGhpbmcuIFlvdSBuZWVkIGEgaG9zdCBDUFUgdGhhdCBzdXBwb3J0cyBURFggYW5kIGEgaHlwZXJ2aXNvciB0aGF0J3Mgc2V0IHVwIHRvIHdvcmsgd2l0aCBpdC4gSXQncyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBjb25qdXJlIHVwIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBvciBldmVuIG9uIGEgc3RhbmRhcmQgR0NFIGluc3RhbmNlLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGhvc3QgY29uZmlndXJhdGlvbiwgd2UgYXJlIGluIGEgbm8tZ28gem9uZS5cblxuU28sIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLiBUaGF0J3MgdGhlIHNpbXBsZSBjb25jbHVzaW9uLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29uY2x1c2lvbiBpcyBzb3VuZC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2Ugc29tZXRpbWVzIHRoZXJlIGFyZSB3YXlzIHRvIGNvZXJjZSBmZWF0dXJlcywgcGFydGljdWxhcmx5IGR1cmluZyB0ZXN0aW5nLiBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IHdheSB0byBmb3JjZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSSByZWNhbGwgdGhlIENQVSBmZWF0dXJlIGZsYWdzIGFyZSBvZnRlbiBzZXQgcXVpdGUgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGVjdGlvbi4gU28sIGlmIHRoZSBoYXJkd2FyZSBzYXlzIG5vIFREWCwgdGhlIGZsYWcgaXMgbm90IHNldC4gV2Ugd2lsbCBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBkb25lIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MzAuNjQzNTY4ODM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4NjkxNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlg4Nl9GRUFUVVJFX1REWF9HVUVTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTMzPXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQyLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDM6XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDQtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFx0XFx0KCA4KjMyKzIyKSAvKiBcXFwidGR4X2d1ZXN0XFxcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD0zND1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDAodW5zaWduZWQgaW50IG5yKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC0zNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjM4OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC0zOS1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIDAsIDAsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD00OD1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDEodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC01MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjUyOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC01My1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCAwLCAwLCAwKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NjI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwyKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNjYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo2NzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNjgtXFx0XFx0cmV0dXJuIHRkeF9rdm1faHlwZXJjYWxsKG5yLCBwMSwgcDIsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD03Nz1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC04MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjgyOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC04My1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD05Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDQodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC05Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjk4OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC05OS1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIHA0KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5Lmg9OD1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NlcHRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oLTEwLVxcdC8qIFBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeS1hY2NlcHRhbmNlIGNhbGwgZ29lcyBoZXJlICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaDoxMTpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMi1cXHRcXHRpZiAoIXRkeF9hY2NlcHRfbWVtb3J5KHN0YXJ0LCBlbmQpKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9OTk9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTAzOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTA0LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTEyMz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwzKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMjg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjktXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTQ4PXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDQodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTUyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjE1MzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1NC1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNzM9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNzgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTc5OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTgwLVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCBpbjQsIGluNSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIwMT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw2KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwNi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMDc6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDgtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0yMjg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNyh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzQtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MjM1OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM2LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCBpbjQsIGluNSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9NDQwPXZvaWQgZ3Vlc3RfZm9yY2VfbXRycl9zdGF0ZShzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZhciwgdW5zaWduZWQgaW50IG51bV92YXIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2Mi1cXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWEVOUFYpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzo0NjM6XFx0ICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05Mzg9dm9pZCBfX2luaXQgc2VsZWN0X2lkbGVfcm91dGluZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTItXFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHg4Nl9pZGxlLCBtd2FpdF9pZGxlKTtcXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjk1MzpcXHR9IGVsc2UgaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtOTU0LVxcdFxcdHByX2luZm8oXFxcInVzaW5nIFREWCBhd2FyZSBpZGxlIHJvdXRpbmVcXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TPTEyOT1TWU1fQ09ERV9TVEFSVF9MT0NBTF9OT0FMSUdOKGlkZW50aXR5X21hcHBlZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUy0yMDQtXFx0YW5kbFxcdCQoWDg2X0NSNF9QQUUgfCBYODZfQ1I0X0xBNTcpLCAlcjEzZFxcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUzoyMDU6XFx0QUxURVJOQVRJVkUgXFxcIlxcXCIsIF9fc3RyaW5naWZ5KG9ybCAkWDg2X0NSNF9NQ0UsICVyMTNkKSwgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNi1cXHRtb3ZxXFx0JXIxMywgJWNyNFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTI6XFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDEzLVxcdHt9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFx0XFx0KCA4KjMyKzIyKSAvKiBcXFwidGR4X2d1ZXN0XFxcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTozMi45MjIyNjYyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzYyOTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgYmVpbmcgZW5hYmxlZCBzb21ld2hlcmUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGB0ZHhfZWFybHlfaW5pdCgpYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlbiogYW5kICp3aHkqIGB0ZHhfZWFybHlfaW5pdCgpYCBpcyBiZWluZyBpbnZva2VkLiBXaGF0J3MgdGhlIHRyaWdnZXJpbmcgZXZlbnQ/IFdoYXQncyB0aGUgY2FsbCBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBjcnVjaWFsIGVuYWJsaW5nIG9mIHRoZSBURFggZ3Vlc3QgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZSBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gZnVsbHkgZ3Jhc3AgdGhlIFREWCBndWVzdCBzZXR1cC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNhbGwgaXMgbWFkZS4uLiB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyOTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTozNi4xMDk4OTg4NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDI1NTkwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2Vhcmx5X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmM9OTk5PXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmUodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwMy1cXHQgKiBPbmx5IGhhbmRsZSBzaGFyZWQtXFx1MDAzZXByaXZhdGUgY29udmVyc2lvbiBoZXJlLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjEwMDQ6XFx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwNS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTEwMTI9c3RhdGljIGludCB0ZHhfZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTYtXFx0ICogT25seSBoYW5kbGUgcHJpdmF0ZS1cXHUwMDNlc2hhcmVkIGNvbnZlcnNpb24gaGVyZS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDE3OlxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTE5PXN0YXRpYyBfX2luaXQgdm9pZCB0ZHhfYW5ub3VuY2Uodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzItXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTEzMzp2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzQte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9NTc9c3RydWN0IHZlX2luZm8ge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNjktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6NzA6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNzEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD04OT12b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTkyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTQtc3RhdGljIGlubGluZSB2b2lkIHRkeF9oYWx0KHZvaWQpIHsgfTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYz0yMjI9YXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgX19ub3JldHVybiB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKiByZWFsX21vZGVfZGF0YSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yNzgtXFx0LyogTmVlZGVkIGJlZm9yZSBjY19wbGF0Zm9ybV9oYXMoKSBjYW4gYmUgdXNlZCBmb3IgVERYICovXFxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jOjI3OTpcXHR0ZHhfZWFybHlfaW5pdCgpO1xcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjM4LjI1MjQ2MjQ1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE0OTM5NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zIChURFgpIGFyZSBpbml0aWFsaXplZCwgcGFydGljdWxhcmx5IGluIHRoZSBlYXJseSBzdGFnZXMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHRkeF9lYXJseV9pbml0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGl0J3MgeDg2LXNwZWNpZmljIGFuZCByZWxhdGVkIHRvIENvQ28gKENvbmZpZGVudGlhbCBDb21wdXRpbmcpLCBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIG9wZXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGVhcmx5IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBURFggd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBwZXJmb3JtZWQgYXQgdGhpcyBjcml0aWNhbCBzdGFnZS4gVW5kZXJzdGFuZGluZyB0aGUgZWFybHkgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgc2VjdXJpdHkgYW5kIG9wZXJhdGlvbmFsIGFzcGVjdHMgb2YgVERYLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo0Mi40Njc0MDQ2MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMzOlxcdHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuMTEzNDpcXHR7XFxuMTEzNTpcXHRcXHR1NjQgY2NfbWFzaztcXG4xMTM2OlxcdFxcdHUzMiBlYXgsIHNpZ1szXTtcXG4xMTM3OlxcdFxcbjExMzg6XFx0XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxcbjExNDE6XFx0XFx0XFx0cmV0dXJuO1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4xMTQ2OlxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuMTE1MTpcXHRcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHRjY19zZXRfbWFzayhjY19tYXNrKTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0LypcXG4xMTU2OlxcdFxcdCAqIEFsbCBiaXRzIGFib3ZlIEdQQSB3aWR0aCBhcmUgcmVzZXJ2ZWQgYW5kIGtlcm5lbCB0cmVhdHMgc2hhcmVkIGJpdFxcbjExNTc6XFx0XFx0ICogYXMgZmxhZywgbm90IGFzIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcy5cXG4xMTU4OlxcdFxcdCAqXFxuMTE1OTpcXHRcXHQgKiBBZGp1c3QgcGh5c2ljYWwgbWFzayB0byBvbmx5IGNvdmVyIHZhbGlkIEdQQSBiaXRzLlxcbjExNjA6XFx0XFx0ICovXFxuMTE2MTpcXHRcXHRwaHlzaWNhbF9tYXNrIFxcdTAwMjY9IGNjX21hc2sgLSAxO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHQvKlxcbjExNjQ6XFx0XFx0ICogVGhlIGtlcm5lbCBtYXBwaW5nIHNob3VsZCBtYXRjaCB0aGUgVERYIG1ldGFkYXRhIGZvciB0aGUgcGFnZS5cXG4xMTY1OlxcdFxcdCAqIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoKSBjYW4gdG91Y2ggbWVtb3J5ICphZGphY2VudCogdG8gdGhhdCB3aGljaCBpc1xcbjExNjY6XFx0XFx0ICogb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgY2FuIGNhdGNoIGV2ZW4gX21vbWVudGFyeV8gbWlzbWF0Y2hlcy4gIEJhZFxcbjExNjc6XFx0XFx0ICogdGhpbmdzIGhhcHBlbiBvbiBtaXNtYXRjaDpcXG4xMTY4OlxcdFxcdCAqXFxuMTE2OTpcXHRcXHQgKiAgIC0gUHJpdmF0ZSBtYXBwaW5nID1cXHUwMDNlIFNoYXJlZCBQYWdlICA9PSBHdWVzdCBzaHV0ZG93blxcbjExNzA6XFx0ICAgICAgICAgKiAgIC0gU2hhcmVkIG1hcHBpbmcgID1cXHUwMDNlIFByaXZhdGUgUGFnZSA9PSBSZWNvdmVyYWJsZSAjVkVcXG4xMTcxOlxcdFxcdCAqXFxuMTE3MjpcXHRcXHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxcbjExNzM6XFx0XFx0ICogc2hhcmVkPVxcdTAwM2Vwcml2YXRlIGJlZm9yZSB0aGUgbWFwcGluZyBiZWNvbWVzIHByaXZhdGUuXFxuMTE3NDpcXHRcXHQgKlxcbjExNzU6XFx0XFx0ICogZ3Vlc3QuZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxcbjExNzY6XFx0XFx0ICogcHJpdmF0ZT1cXHUwMDNlc2hhcmVkIGFmdGVyIHRoZSBtYXBwaW5nIGJlY29tZXMgcHJpdmF0ZS5cXG4xMTc3OlxcdFxcdCAqXFxuMTE3ODpcXHRcXHQgKiBJbiBib3RoIGNhc2VzIHRoZXJlIGlzIGEgdGVtcG9yYXJ5IHNoYXJlZCBtYXBwaW5nIHRvIGEgcHJpdmF0ZSBwYWdlLFxcbjExNzk6XFx0XFx0ICogd2hpY2ggY2FuIHJlc3VsdCBpbiBhICNWRS4gIEJ1dCwgdGhlcmUgaXMgbmV2ZXIgYSBwcml2YXRlIG1hcHBpbmcgdG9cXG4xMTgwOlxcdFxcdCAqIGEgc2hhcmVkIHBhZ2UuXFxuMTE4MTpcXHRcXHQgKi9cXG4xMTgyOlxcdFxcdHg4Nl9wbGF0Zm9ybS5ndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlID0gdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjQyLjQ2OTI3OTU3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTgxNTQ4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggR3Vlc3QgRGV0ZWN0aW9uIGFuZCBIeXBlcmNhbGwgRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNoZWNraW5nIGZvciBURFggc3VwcG9ydCB1c2luZyBgY3B1aWRfY291bnRgIGFuZCBjb21wYXJpbmcgYWdhaW5zdCBgVERYX0lERU5UYC4gVGhpcyByZWxpZXMgb24gc3BlY2lmaWMgQ1BVSUQgdmFsdWVzIGJlaW5nIHJldHVybmVkLCB3aGljaCB3ZSAqY2FuKiBzZXQgaW4gUUVNVS4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSB0aGUgVERYIGh5cGVyY2FsbHMgdGhlbXNlbHZlcz8gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplYCwgd2hpY2ggdWx0aW1hdGVseSBjYWxscyBgdGRnX3ZtX3JkYCB3aXRoIGBURENTX1FVT1RFX01BWF9TSVpFYC4gQW5kIGB0ZGdfdm1fcmRgPyBUaGF0IGV4ZWN1dGVzIGEgVERDQUxMIGluc3RydWN0aW9uIOKAkyB0aG9zZSBgLmJ5dGUgMHg2NiwweDBmLDB4MDEsMHhjY2AgYnl0ZXMuXG5cbk5vdywgaWYgdGhlIGh5cGVydmlzb3IgaXNuJ3QgVERYLWF3YXJlLCBleGVjdXRpbmcgdGhhdCBURENBTEwgaXMgZ29pbmcgdG8gY2F1c2UgYSAjVUQgKEludmFsaWQgT3Bjb2RlKSBvciBzb21lIHNpbWlsYXIgZXhjZXB0aW9uLiBCYXNpY2FsbHksIHRoZSBrZXJuZWwgY3Jhc2hlcyBvciBmYWlscyB0byBib290IGlmIGl0IGJlbGlldmVzIGl0J3MgYSBURFggZ3Vlc3QsIGJ1dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGh5cGVyY2FsbC5cblxuV2FpdCBhIHNlY29uZC4uLiBjYW4gUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgVERDQUxMPyBJIGtub3cgd2UgY2FuIHNldCB0aGUgQ1BVSUQgdmFsdWVzLCBidXQgaXMgdGhlcmUgYWN0dWFsIGh5cGVyY2FsbCBzdXBwb3J0PyBObywgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGRvIHRoYXQgdW5sZXNzIGl0J3MgcnVubmluZyBvbiBhIGhvc3Qgd2l0aCBURFgtY2FwYWJsZSBoYXJkd2FyZSBhbmQgS1ZNIFREWCBzdXBwb3J0LiBUaGF0J3MgKm5vdCogdGhlIHVzdWFsIEdDRS9RRU1VIGVudmlyb25tZW50IEknbSBkZWFsaW5nIHdpdGguIFNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIFREWCBndWVzdCBjb2RlIGlzbid0IGV2ZW4gcmVhY2hhYmxlIG9yIGdldHRpbmcgZXhlY3V0ZWQgaW4gYSB0eXBpY2FsIEdDRS9RRU1VIHNldHVwLlxuXG5MZXQgbWUganVzdCB2ZXJpZnkgcXVpY2tseSB0aGF0IGB0ZGdfdm1fcmRgIGlzICpkZWZpbml0ZWx5KiB1c2luZyBhIFREQ0FMTC4gTmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6NDkuMDUwODMxODk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc4NTgxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkZ192bV9yZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTgxLS8qIFJlYWQgVEQtc2NvcGVkIG1ldGFkYXRhICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODI6c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04My17XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yMTA9dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxMy1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMTQ6XFx0cmV0ID0gdGRnX3ZtX3JkKFREQ1NfUVVPVEVfTUFYX1NJWkUsIFxcdTAwMjZ2YWwpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNS1cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTI3ND1zdGF0aWMgdm9pZCBkaXNhYmxlX3NlcHRfdmUodTY0IHRkX2F0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODAtXFx0LyogSXMgdGhpcyBURCBhbGxvd2VkIHRvIGRpc2FibGUgU0VQVCAjVkUgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyODE6XFx0dGRnX3ZtX3JkKFREQ1NfQ09ORklHX0ZMQUdTLCBcXHUwMDI2Y29uZmlnKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODItXFx0aWYgKCEoY29uZmlnIFxcdTAwMjYgVERDU19DT05GSUdfRkxFWElCTEVfUEVORElOR19WRSkpIHtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTI5NS1cXHQvKiBDaGVjayBpZiBTRVBUICNWRSBoYXMgYmVlbiBkaXNhYmxlZCBiZWZvcmUgdXMgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyOTY6XFx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXFx1MDAyNmNvbnRyb2xzKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yOTctXFx0aWYgKGNvbnRyb2xzIFxcdTAwMjYgVERfQ1RMU19QRU5ESU5HX1ZFX0RJU0FCTEUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0zMjE9c3RhdGljIHZvaWQgZW5hYmxlX2NwdV90b3BvbG9neV9lbnVtZXJhdGlvbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI1LVxcdC8qIEhhcyB0aGUgVk1NIHByb3ZpZGVkIGEgdmFsaWQgdG9wb2xvZ3kgY29uZmlndXJhdGlvbj8gKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozMjY6XFx0dGRnX3ZtX3JkKFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVELCBcXHUwMDI2Y29uZmlndXJlZCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI3LVxcdGlmICghY29uZmlndXJlZCkge1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTExOT1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTI4LVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMjk6XFx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXFx1MDAyNmNvbnRyb2xzKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTMwLVxcdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1MS4yMjk0MTkzNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NTk0Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBgdGRnX3ZtX3JkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcIkxldCdzIHJlYWQgYHRkZ192bV9yZGAuXCIgT2theSwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgdGRnX3ZtX3JkYC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJ20gYWxyZWFkeSBtYWtpbmcgc29tZSBhc3N1bXB0aW9ucy4gXCJ0ZGdcIiBsaWtlbHkgcmVsYXRlcyB0byBhIHNwZWNpZmljIHRhcmdldCBvciBkYXRhIGdlbmVyYXRpb24sIGxpa2VseSBzb21lIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uIFwidm1cIiBwcm9iYWJseSBtZWFucyBhIHZpcnR1YWwgbWFjaGluZS4gQW5kIFwicmRcIiBjb3VsZCBzdGFuZCBmb3IgXCJyZWFkXCIsIGltcGx5aW5nIGl0J3MgYSBmaWxlLCBjb25maWd1cmF0aW9uLCBvciBzb21lIGRhdGEgc3BlY2lmaWMgdG8gcmVhZGluZyBhbmQgdXRpbGl6aW5nIGEgdmlydHVhbCBtYWNoaW5lIHNldHVwIHJlbGF0ZWQgdG8gdGFyZ2V0IGRhdGEgZ2VuZXJhdGlvbi4gSXMgaXQgYSBjb25maWd1cmF0aW9uPyBBIHNjcmlwdD8gQSBsb2c/IEFuIGlucHV0IGZpbGU/IEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYXJ0aWZhY3QgKmlzKiBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuIFRoZSBjb250ZXh0IGlzIHZpdGFsOyBhbSBJIGRlYnVnZ2luZz8gSW50ZWdyYXRpbmc/IFRlc3Rpbmc/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1NC41MTUzNjYyNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIHRkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRpZiAoX190ZGNhbGxfcmV0KGZuLCBhcmdzKSlcXG4gIDc4OlxcdFxcdFxcdHBhbmljKFxcXCJURENBTEwgJWxsZCBmYWlsZWQgKEJ1Z2d5IFREWCBtb2R1bGUhKVxcXFxuXFxcIiwgZm4pO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHQvKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xcbiAgODI6XFx0c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcXG4gIDgzOlxcdHtcXG4gIDg0OlxcdFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG4gIDg1OlxcdFxcdFxcdC5yZHggPSBmaWVsZCxcXG4gIDg2OlxcdFxcdH07XFxuICA4NzpcXHRcXHR1NjQgcmV0O1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHRyZXQgPSBfX3RkY2FsbF9yZXQoVERHX1ZNX1JELCBcXHUwMDI2YXJncyk7XFxuICA5MDpcXHRcXHQqdmFsdWUgPSBhcmdzLnI4O1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjU0LjUxNTQ2MDQ1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg5Mzc1ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIGBfX3RkY2FsbF9yZXRgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGBfX3RkY2FsbF9yZXRgLi4udGhhdCBpbW1lZGlhdGVseSBmbGFncyBhc3NlbWJseS4gT2YgY291cnNlLiBJdCBoYXMgdG8gYmUuIFRoZXJlJ3Mgc2ltcGx5IG5vIG90aGVyIHdheSB0byBvcmNoZXN0cmF0ZSB0aGUga2luZCBvZiBsb3ctbGV2ZWwgcmV0dXJuIHBhdGggbWFuaXB1bGF0aW9uIG5lZWRlZCBmb3IgYSBzeXN0ZW0tY2FsbC1iYXNlZCB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb24gd2l0aG91dCBkcm9wcGluZyBkb3duIHRvIHRoZSBiYXJlIG1ldGFsLiBXZSdyZSB0YWxraW5nIGFib3V0IG1hbmFnaW5nIHRoZSBzdGFjayBwb2ludGVyLCBwb3RlbnRpYWxseSByZXN0b3JpbmcgcmVnaXN0ZXJzLCBhbmQgZW5zdXJpbmcgYSBzZWFtbGVzcyBjb250ZXh0IHN3aXRjaCBiYWNrIHRvIHRoZSBjYWxsaW5nIHRocmVhZC4gVGhlIGNvbXBpbGVyLCBldmVuIHdpdGggYWdncmVzc2l2ZSBpbmxpbmluZywgd291bGRuJ3QgYmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUgb3B0aW1hbCBzZXF1ZW5jZSBhbmQgaGFuZGxlIGFsbCB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGluIGEgdHJ1bHkgZWZmaWNpZW50IGFuZCByZWxpYWJsZSBtYW5uZXIuIEFzc2VtYmx5IGdpdmVzIHVzIHRoZSBwcmVjaXNlIGNvbnRyb2wgd2UgZGVtYW5kLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgdG9vLiBJdOKAmWxsIG1ha2UgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYWJvdXQgQUJJIGFuZCByZWdpc3RlciB1c2FnZTsgSSdsbCBhbHNvIGhhdmUgdG8gY29uc2lkZXIgYW55IGNhbGxpbmcgY29udmVudGlvbnMgYW5kIGNhbGxpbmcgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1Ny42MDQ4Mzg0ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQzMTkwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190ZGNhbGxfcmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TPTI3PVNZTV9GVU5DX0VORChfX3RkY2FsbClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTI5LS8qXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzA6ICogX190ZGNhbGxfcmV0KCkgLSBVc2VkIGJ5IFREWCBndWVzdHMgdG8gcmVxdWVzdCBzZXJ2aWNlcyBmcm9tIHRoZSBURFhcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0zMS0gKiBtb2R1bGUgKGRvZXMgbm90IGluY2x1ZGUgVk1NIHNlcnZpY2VzKSB1c2luZyBURENBTEwgaW5zdHJ1Y3Rpb24sIHdpdGhcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMzLSAqXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzQ6ICogX190ZGNhbGxfcmV0KCkgZnVuY3Rpb24gQUJJOlxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTM1LSAqXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy00Mi0gKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzo0MzpTWU1fRlVOQ19TVEFSVChfX3RkY2FsbF9yZXQpXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDQtXFx0VERYX01PRFVMRV9DQUxMIGhvc3Q9MCByZXQ9MVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TOjQ1OlNZTV9GVU5DX0VORChfX3RkY2FsbF9yZXQpXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDYtXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03Ni17XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6Nzc6XFx0aWYgKF9fdGRjYWxsX3JldChmbiwgYXJncykpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzgtXFx0XFx0cGFuaWMoXFxcIlREQ0FMTCAlbGxkIGZhaWxlZCAoQnVnZ3kgVERYIG1vZHVsZSEpXFxcXG5cXFwiLCBmbik7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz04Mj1zdGF0aWMgaW5saW5lIHU2NCB0ZGdfdm1fcmQodTY0IGZpZWxkLCB1NjQgKnZhbHVlKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtODgtXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODk6XFx0cmV0ID0gX190ZGNhbGxfcmV0KFRER19WTV9SRCwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTkwLVxcdCp2YWx1ZSA9IGFyZ3Mucjg7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4Lmg9MTUwPXU2NCBfX3RkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxNTE6dTY0IF9fdGRjYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xNTItdTY0IF9fdGRjYWxsX3NhdmVkX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNjowMC4wMTkxODM1NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxOTMxMjkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipURFggR3Vlc3QgQ29kZSBGdXp6YWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgVERYX01PRFVMRV9DQUxMYCBtYWNyby4gSXQgdXNlcyB0aGUgYHRkY2FsbGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgVERYIGd1ZXN0LXNwZWNpZmljIGNvbXBvbmVudC4gTm93LCBrbm93aW5nIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZSwgc3RhbmRhcmQgUUVNVSBpbnN0YWxsYXRpb25zIGFyZSBub3QgY29uZmlndXJlZCB0byBlbXVsYXRlIFREWCBndWVzdHMuIFRoYXQncyBiZWNhdXNlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBob3N0IGhhcmR3YXJlIGFuZCBLVk0gc3VwcG9ydCwgc28gaXQncyBhIG5vbi1zdGFydGVyIGluIGEgdmFuaWxsYSBzZXR1cC4gQ29uc2VxdWVudGx5LCB0aGlzIGBURFhfTU9EVUxFX0NBTExgIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHVuZnV6emFibGUgdW5kZXIgdGhvc2UgY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuQnV0LCBhcyBhIGdvb2QgcHJhY3RpY2UsIEkgd2FudCB0byBjb25maXJtIHRoZXJlJ3Mgbm8gc3VidGxlIHBhdGggdG8gdGhpcyBjb2RlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSBzZWUgdGhhdCBgdGR4X2d1ZXN0X2luaXRgIGlzIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSXQgY2hlY2tzIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gVGhhdCBjaGVjayByZWxhdGVzIHRvIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBJIHJlY2FsbCB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGdldHMgc2V0IHdpdGhpbiBgdGR4X2Vhcmx5X2luaXRgLiBBbmQgdGhlIGNydWNpYWwgcGFydCBpbiBgdGR4X2Vhcmx5X2luaXRgIGlzIGEgYGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAuLi4pYCBjaGVjay5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSHlwb3RoZXRpY2FsbHksIGlmIHdlIGNvdWxkIHNvbWVob3cgbW9jayB0aGUgQ1BVSUQgdmFsdWVzIGluIFFFTVUsIHdlIG1pZ2h0IGJlIGFibGUgdG8gdHJpY2sgYHRkeF9lYXJseV9pbml0YCBpbnRvIHNldHRpbmcgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAuIEhvd2V2ZXIsIGV2ZW4gaWYgd2Ugd2VyZSBzdWNjZXNzZnVsIGluIHNldHRpbmcgdGhhdCBmbGFnIGFuZCB0cmlja2luZyB0aGUgbW9kdWxlIGluaXQsIHRoZSBmdW5jdGlvbiBgdGR4X3NldHVwYCBpcyBhbHdheXMgY2FsbGVkLCB3aGljaCBhbHNvIGNhbGxzIHRoZSBgVERDQUxMYCBpbnN0cnVjdGlvbnMuIE5vdywgdW5sZXNzIHRoZSBoeXBlcnZpc29yICphY3R1YWxseSogc3VwcG9ydHMgYFREQ0FMTGAsIHRoZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgI1VEIChpbnZhbGlkIG9wY29kZSkgZXhjZXB0aW9uIGFuZCBsaWtlbHkgY3Jhc2ggdGhlIGtlcm5lbCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcy4gVGhpcyBtZWFucyB3ZSdkIG5ldmVyIGV2ZW4gZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UgY291bGQgZnV6eiBhbnl0aGluZywgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkbid0IGV2ZW4gYm9vdC4gU28sIG1vY2tpbmcgQ1BVSUQgd291bGRuJ3QgZ2V0IHVzIGFyb3VuZCBpdC5cblxuVGh1cywgZ2l2ZW4gdGhlIG5lY2Vzc2l0eSBmb3IgZ2VudWluZSBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24sIGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggYHRkeF9ndWVzdF9pbml0YCwgYW5kIGJ5IGV4dGVuc2lvbiwgYFREWF9NT0RVTEVfQ0FMTGAgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IGEgY3Jhc2guIE15IGZpbmFsIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGNvbmNsdXNpb24gaGluZ2VzIG9uIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCBmb3IgVERYLCBwYXJ0aWN1bGFybHkgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgYFREQ0FMTGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG1pc3NpbmcgaW4gc3RhbmRhcmQgUUVNVSBhbmQgR0NFIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NzEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA2OjA4LjUzODQ5OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZHJpdmVyLiBURFggZ3Vlc3QgY29kZSByZWxpZXMgb24gdGhlIFREQ0FMTCBpbnN0cnVjdGlvbiBhbmQgc3BlY2lmaWMgaGFyZHdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0IHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gQXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgVERYIENQVSBmZWF0dXJlIHdvdWxkIHJlc3VsdCBpbiBhICNVRCBleGNlcHRpb24gZHVyaW5nIGVhcmx5IGJvb3Qgd2hlbiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgVERDQUxMcy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGRyaXZlci4gVERYIGd1ZXN0IGNvZGUgcmVsaWVzIG9uIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24gYW5kIHNwZWNpZmljIGhhcmR3YXJlL2h5cGVydmlzb3Igc3VwcG9ydCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIFREWCBDUFUgZmVhdHVyZSB3b3VsZCByZXN1bHQgaW4gYSAjVUQgZXhjZXB0aW9uIGR1cmluZyBlYXJseSBib290IHdoZW4gdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBleGVjdXRlIFREQ0FMTHMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqq45p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 19:02:52 +0000 UTC FinishedAt: 2026-07-30 19:06:10 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDU2ZGZlNzYyZDVmOWE5ODcxZWRkM2FlZTFmMjY3NmQwNDU0MjJiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE5OjA1OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzUuLmZhMmVkMDEyZTczNjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbkBAIC0xOTgsNiAmIzQzOzE5OCwyNSBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBURCBRdW90ZSBmcm9tIGEgNC1ieXRlIFREIG1ldGFkYXRhIGZpZWxkLiBUaGUgVERYXG4mIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGUgcmV0cmlldmFsLiBPbGRlciBURFhcbiYjNDM7ICogbW9kdWxlcyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsLCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRkZ192bV9yZChURENTX1FVT1RFX01BWF9TSVpFLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBfX25vcmV0dXJuIHRkeF9wYW5pYyhjb25zdCBjaGFyICptc2cpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5AQCAtNTAsNiAmIzQzOzUwLDcgQEBcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cbiAjZGVmaW5lIFREQ1NfQ09ORklHX0ZMQUdTXHRcdDB4MTExMDAwMDMwMDAwMDAxNlxuICNkZWZpbmUgVERDU19URF9DVExTXHRcdFx0MHgxMTEwMDAwMzAwMDAwMDE3XG4mIzQzOyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRVx0XHQweDkwMTAwMDAyMDAwMDAwMDhcbiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVNcdFx0MHg5MTAwMDAwMDAwMDAwMDEwXG4gI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRFx0MHg5MTAwMDAwMDAwMDAwMDE5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTgzLDYgJiM0Mzs4Myw4IEBAIGludCB0ZHhfbWNhbGxfZXh0ZW5kX3J0bXIodTggaW5kZXgsIHU4ICpkYXRhKTtcbiBcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XG4gXG4mIzQzO3UzMiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKHZvaWQpO1xuJiM0MztcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTtcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuQEAgLTE2Miw3ICYjNDM7MTYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X21yX2RlaW5pdChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICptcl9ncnApXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xuICAqIGxhcmdlciBRdW90ZSBzaXplICh+MTAwSykuXG4gICovXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcdFx0U1pfMTI4S1xuJiM0MzsjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFXHRTWl8xMjhLXG4gXG4gI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUlx0XHQxXG4gXG5AQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXHRcdDBcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG4gXG4tI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTlx0XHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcbiYjNDM7I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVx0XHRzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0ZHhfcXVvdGVfYnVmLCBkYXRhLCBuKVxuIFxuIC8qIHN0cnVjdCB0ZHhfcXVvdGVfYnVmOiBGb3JtYXQgb2YgUXVvdGUgcmVxdWVzdCBidWZmZXIuXG4gICogQHZlcnNpb246IFF1b3RlIGZvcm1hdCB2ZXJzaW9uLCBmaWxsZWQgYnkgVEQuXG5AQCAtMTkxLDggJiM0MzsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7XG4gXHR1OCBkYXRhW107XG4gfTtcbiBcbi0vKiBRdW90ZSBkYXRhIGJ1ZmZlciAqL1xuJiM0MzsvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovXG4gc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7XG4mIzQzO3N0YXRpYyBzaXplX3QgcXVvdGVfZGF0YV9sZW47XG4gXG4gLyogTG9jayB0byBzdHJlYW1saW5lIHF1b3RlIHJlcXVlc3RzICovXG4gc3RhdGljIERFRklORV9NVVRFWChxdW90ZV9sb2NrKTtcbkBAIC0yMDksOSAmIzQzOzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpXG4gXHRcdFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVx1MDAzZXRkcmVwb3J0KSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZilcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHtcbkBAIC0yMjIsMTIgJiM0MzsyMjIsMzEgQEAgc3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmKVxuIFx0ZnJlZV9wYWdlc19leGFjdChidWYsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYodm9pZClcbiYjNDM7LyogUmV0dXJuIGEgYnVmZmVyIHNpemUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBRdW90ZSAqL1xuJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT2xkZXIgVERYIG1vZHVsZXMgZG8gbm90IHJlcG9ydCBhIG1heGltdW0gUXVvdGUgc2l6ZSwgc28gdXNlXG4mIzQzO1x0ICogdGhlIGRlZmF1bHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFxdW90ZV9zaXplKVxuJiM0MztcdFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgcmVwb3J0ZWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBidWZmZXIgaGVhZGVyICovXG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04oVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGZhaWxzIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBleGNlZWRzIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3NcbiYjNDM7XHQgKiBtYXhpbXVtIG9yZGVyIChvcmRlci0xMCwgNE1CKS5cbiYjNDM7XHQgKi9cbiBcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdChsZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjg1LDcgJiM0MzszMDQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIHF1b3RlX2RhdGFfbGVuKTtcbiBcbiBcdC8qIFVwZGF0ZSBRdW90ZSBidWZmZXIgaGVhZGVyICovXG4gXHRxdW90ZV9idWYtXHUwMDNldmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSO1xuQEAgLTI5Niw3ICYjNDM7MzE1LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4mIzQzO1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcJiMzNDtHZXRRdW90ZSBoeXBlcmNhbGwgZmFpbGVkLCBzdGF0dXM6JWxseFxcblwmIzM0OywgZXJyKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5AQCAtMzE1LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4mIzQzO1x0aWYgKFREWF9RVU9URV9CVUZfTEVOKG91dF9sZW4pIFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcbiBcdFx0cmV0dXJuIC1FRkJJRztcbiBcbiBcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cdTAwM2VkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTtcbkBAIC00MTcsNyAmIzQzOzQzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlaW5pdF9tcjtcbiBcbi1cdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTtcbiYjNDM7XHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuJiM0MztcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xuIFx0aWYgKCFxdW90ZV9kYXRhKSB7XG4gXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUXVvdGUgYnVmZmVyXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MzEsNyAmIzQzOzQ1MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX3F1b3RlOlxuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4mIzQzO1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIGZyZWVfbWlzYzpcbiBcdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIGRlaW5pdF9tcjpcbkBAIC00NDQsNyAmIzQzOzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcbiB7XG4gXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMpO1xuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4mIzQzO1x0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xuIFx0bWlzY19kZXJlZ2lzdGVyKFx1MDAyNnRkeF9taXNjX2Rldik7XG4gXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZHJpdmVyLiBURFggZ3Vlc3QgY29kZSByZWxpZXMgb24gdGhlIFREQ0FMTCBpbnN0cnVjdGlvbiBhbmQgc3BlY2lmaWMgaGFyZHdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0IHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gQXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgVERYIENQVSBmZWF0dXJlIHdvdWxkIHJlc3VsdCBpbiBhICNVRCBleGNlcHRpb24gZHVyaW5nIGVhcmx5IGJvb3Qgd2hlbiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgVERDQUxMcy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1NmRmZTc2MmQ1ZjlhOTg3MWVkZDNhZWUxZjI2NzZkMDQ1NDIyYmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxOTowNTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKaW5kZXggMjliNmYxZWQ1OWVjNS4uZmEyZWQwMTJlNzM2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKQEAgLTE5OCw2ICYjNDM7MTk4LDI1IEBAIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7CiAKJiM0MzsvKioKJiM0MzsgKiB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCkgLSBHZXQgdGhlIG1heGltdW0gVEQgUXVvdGUgc2l6ZQomIzQzOyAqCiYjNDM7ICogUmVhZCB0aGUgbWF4aW11bSBzaXplIG9mIGEgVEQgUXVvdGUgZnJvbSBhIDQtYnl0ZSBURCBtZXRhZGF0YSBmaWVsZC4gVGhlIFREWAomIzQzOyAqIGd1ZXN0IGRyaXZlciB1c2VzIGl0IHRvIHNpemUgdGhlIGJ1ZmZlciBmb3IgUXVvdGUgcmV0cmlldmFsLiBPbGRlciBURFgKJiM0MzsgKiBtb2R1bGVzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmllbGQgYW5kIHJldHVybiBhbiBlcnJvci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTWF4aW11bSBRdW90ZSBzaXplIGluIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IHZhbCwgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0ZHhfZ2V0X21heF9xdW90ZV9zaXplKTsKJiM0MzsKIHN0YXRpYyB2b2lkIF9fbm9yZXR1cm4gdGR4X3BhbmljKGNvbnN0IGNoYXIgKm1zZykKIHsKIAlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaApAQCAtNTAsNiAmIzQzOzUwLDcgQEAKIC8qIFREWCBURC1TY29wZSBNZXRhZGF0YS4gVG8gYmUgdXNlZCBieSBUREcuVk0uV1IgYW5kIFRERy5WTS5SRCAqLwogI2RlZmluZSBURENTX0NPTkZJR19GTEFHUwkJMHgxMTEwMDAwMzAwMDAwMDE2CiAjZGVmaW5lIFREQ1NfVERfQ1RMUwkJCTB4MTExMDAwMDMwMDAwMDAxNwomIzQzOyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRQkJMHg5MDEwMDAwMjAwMDAwMDA4CiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVMJCTB4OTEwMDAwMDAwMDAwMDAxMAogI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRAkweDkxMDAwMDAwMDAwMDAwMTkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaApAQCAtODMsNiAmIzQzOzgzLDggQEAgaW50IHRkeF9tY2FsbF9leHRlbmRfcnRtcih1OCBpbmRleCwgdTggKmRhdGEpOwogCiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7CiAKJiM0Mzt1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTsKJiM0MzsKIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpOwogdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYwppbmRleCBkMDMwM2UzMWU4MTYxLi44OTE5YjFhMTE1NGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jCkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKQogICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlcwogICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS4KICAqLwotI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkUJCVNaXzEyOEsKJiM0MzsjZGVmaW5lIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFCVNaXzEyOEsKIAogI2RlZmluZSBHRVRfUVVPVEVfQ01EX1ZFUgkJMQogCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKQogI2RlZmluZSBHRVRfUVVPVEVfU1VDQ0VTUwkJMAogI2RlZmluZSBHRVRfUVVPVEVfSU5fRkxJR0hUCQkweGZmZmZmZmZmZmZmZmZmZmYKIAotI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTgkJKEdFVF9RVU9URV9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGR4X3F1b3RlX2J1ZikpCiYjNDM7I2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKQkJc3RydWN0X3NpemVfdChzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiwgZGF0YSwgbikKIAogLyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci4KICAqIEB2ZXJzaW9uOiBRdW90ZSBmb3JtYXQgdmVyc2lvbiwgZmlsbGVkIGJ5IFRELgpAQCAtMTkxLDggJiM0MzsxOTEsOSBAQCBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZiB7CiAJdTggZGF0YVtdOwogfTsKIAotLyogUXVvdGUgZGF0YSBidWZmZXIgKi8KJiM0MzsvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovCiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTsKJiM0MztzdGF0aWMgc2l6ZV90IHF1b3RlX2RhdGFfbGVuOwogCiAvKiBMb2NrIHRvIHN0cmVhbWxpbmUgcXVvdGUgcmVxdWVzdHMgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgocXVvdGVfbG9jayk7CkBAIC0yMDksOSAmIzQzOzIxMCw4IEBAIHN0YXRpYyBsb25nIHRkeF9nZXRfcmVwb3J0MChzdHJ1Y3QgdGR4X3JlcG9ydF9yZXEgX191c2VyICpyZXEpCiAJCQkgICAgIFVTRVJfU09DS1BUUihyZXEtJmd0O3RkcmVwb3J0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZikKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7Ci0Jc2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkgewpAQCAtMjIyLDEyICYjNDM7MjIyLDMxIEBAIHN0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1ZikKIAlmcmVlX3BhZ2VzX2V4YWN0KGJ1ZiwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgKmFsbG9jX3F1b3RlX2J1Zih2b2lkKQomIzQzOy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi8KJiM0MztzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJdTMyIHF1b3RlX3NpemUgPSB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZQomIzQzOwkgKiB0aGUgZGVmYXVsdC4KJiM0MzsJICovCiYjNDM7CWlmICghcXVvdGVfc2l6ZSkKJiM0MzsJCXJldHVybiBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRTsKJiM0MzsKJiM0MzsJLyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqLwomIzQzOwlyZXR1cm4gUEFHRV9BTElHTihURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbikKIHsKLQlzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IGxlbiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXZvaWQgKmFkZHI7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJiMzOTtzCiYjNDM7CSAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLgomIzQzOwkgKi8KIAlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4NSw3ICYjNDM7MzA0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAlpZiAoZGVzYy0mZ3Q7aW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CW1lbXNldChxdW90ZV9kYXRhLCAwLCBxdW90ZV9kYXRhX2xlbik7CiAKIAkvKiBVcGRhdGUgUXVvdGUgYnVmZmVyIGhlYWRlciAqLwogCXF1b3RlX2J1Zi0mZ3Q7dmVyc2lvbiA9IEdFVF9RVU9URV9DTURfVkVSOwpAQCAtMjk2LDcgJiM0MzszMTUsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQllcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIEdFVF9RVU9URV9CVUZfU0laRSk7CiYjNDM7CWVyciA9IHRkeF9oY2FsbF9nZXRfcXVvdGUocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCYjMzQ7R2V0UXVvdGUgaHlwZXJjYWxsIGZhaWxlZCwgc3RhdHVzOiVsbHhcbiYjMzQ7LCBlcnIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMxNSw3ICYjNDM7MzM0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSkKIAogCW91dF9sZW4gPSBSRUFEX09OQ0UocXVvdGVfYnVmLSZndDtvdXRfbGVuKTsKIAotCWlmIChvdXRfbGVuICZndDsgVERYX1FVT1RFX01BWF9MRU4pCiYjNDM7CWlmIChURFhfUVVPVEVfQlVGX0xFTihvdXRfbGVuKSAmZ3Q7IHF1b3RlX2RhdGFfbGVuKQogCQlyZXR1cm4gLUVGQklHOwogCiAJYnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLSZndDtkYXRhLCBvdXRfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTQxNyw3ICYjNDM7NDM2LDggQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGRlaW5pdF9tcjsKIAotCXF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTsKJiM0MzsJcXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTsKJiM0MzsJcXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7CiAJaWYgKCFxdW90ZV9kYXRhKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcbiYjMzQ7KTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQzMSw3ICYjNDM7NDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZCkKIAlyZXR1cm4gMDsKIAogZnJlZV9xdW90ZToKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogZnJlZV9taXNjOgogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiBkZWluaXRfbXI6CkBAIC00NDQsNyAmIzQzOzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTsKIHN0YXRpYyB2b2lkIF9fZXhpdCB0ZHhfZ3Vlc3RfZXhpdCh2b2lkKQogewogCXRzbV9yZXBvcnRfdW5yZWdpc3RlcigmYW1wO3RkeF90c21fb3BzKTsKLQlmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTsKJiM0MzsJZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pOwogCW1pc2NfZGVyZWdpc3RlcigmYW1wO3RkeF9taXNjX2Rldik7CiAJdGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgVERYIGd1ZXN0IGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY2AgYW5kIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBxdW90ZSBzaXplIG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplKClgIGZ1bmN0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGluc3RlYWQgb2YgaGFyZGNvZGluZyB0aGUgYnVmZmVyIHNpemUgYXQgYEdFVF9RVU9URV9CVUZfU0laRWAgKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBhIGJpdCBzdXNwZWN0IGluIGl0c2VsZiksIHRoZSBjb2RlIG5vdyByZWFkcyB0aGUgKmFjdHVhbCogbWF4aW11bSBxdW90ZSBzaXplIGZyb20gdGhlIFREWCBtZXRhZGF0YSAoYFREQ1NfUVVPVEVfTUFYX1NJWkVgKS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiB0aGUgcXVvdGUgYnVmZmVyLgoKTm93LCBhIHJlZCBmbGFnIHBvcHMgdXAuIFREWCwgYXMgSSBrbm93LCBpcyBhbGwgYWJvdXQgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIEl0JiMzOTtzIEludGVsJiMzOTtzIHRlY2gsIGFuZCBpdCBuZWNlc3NpdGF0ZXMgYm90aCBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQsIGNydWNpYWxseSwgaHlwZXJ2aXNvciBzdXBwb3J0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IGZ1enplZCBvciB0ZXN0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gVERYIGd1ZXN0IGNvZGUsIGJ5IGl0cyBuYXR1cmUsIGlzIHVzdWFsbHkgKm5vdCogcmVhY2hhYmxlIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgaGFzIFREWCBoYXJkd2FyZS4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgdGVzdGFiaWxpdHkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlciByZWFjaGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIGFuZCBzZWUgd2hlcmUgaXQgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ3Vlc3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHNtX3JlcG9ydF9vcHMgdGR4X3RzbV9vcHMgPSB7XG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyMy1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MjQ6c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MjUte1xuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00NjEtfVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQ2Mjptb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgYWxsIGFib3V0LiBGcm9tIG15IHBlcnNwZWN0aXZlLCBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBsZXZlbCBvZiBzeXN0ZW1zIHByb2dyYW1taW5nLCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZW52aXJvbm1lbnQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIHNldCB1cCB3aXRoaW4gdGhlIHNlY3VyZSBlbmNsYXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGJyZWFraW5nIGRvd24gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVERYIGJvb3QgcHJvY2Vzcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIHJvb3Qgb2YgdHJ1c3QgaXMgZXN0YWJsaXNoZWQsIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBwcm90ZWN0ZWQgd2l0aGluIHRoZSBlbmNsYXZlLCBhbmQgd2hhdCBpbml0aWFsIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHBsaWVkLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhhY3Qgcm9sZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFREWCBlbnZpcm9ubWVudCBpcyBicm91Z2h0IHRvIGxpZmUgYW5kIHNlY3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdFx0LnJlcG9ydF9hdHRyX3Zpc2libGUgPSB0ZHhfcmVwb3J0X2F0dHJfdmlzaWJsZSxcbiA0MjE6XHRcdC5yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYmluX2F0dHJfdmlzaWJsZSxcbiA0MjI6XHR9O1xuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXG4gNDI1Olx0e1xuIDQyNjpcdFx0aW50IHJldDtcbiA0Mjc6XHRcbiA0Mjg6XHRcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcbiA0Mjk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDMwOlx0XG4gNDMxOlx0XHR0ZHhfYXR0cl9ncm91cHNbMF0gPSB0ZHhfbXJfaW5pdCgpO1xuIDQzMjpcdFx0aWYgKElTX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pKVxuIDQzMzpcdFx0XHRyZXR1cm4gUFRSX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pO1xuIDQzNDpcdFxuIDQzNTpcdFx0cmV0ID0gbWlzY19yZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIDQzNjpcdFx0aWYgKHJldClcbiA0Mzc6XHRcdFx0Z290byBkZWluaXRfbXI7XG4gNDM4Olx0XG4gNDM5Olx0XHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuIDQ0MDpcdFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gNDQxOlx0XHRpZiAoIXF1b3RlX2RhdGEpIHtcbiA0NDI6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXG5cJiMzNDspO1xuIDQ0MzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDQ0NDpcdFx0XHRnb3RvIGZyZWVfbWlzYztcbiA0NDU6XHRcdH1cbiA0NDY6XHRcbiA0NDc6XHRcdHJldCA9IHRzbV9yZXBvcnRfcmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMsIE5VTEwpO1xuIDQ0ODpcdFx0aWYgKHJldClcbiA0NDk6XHRcdFx0Z290byBmcmVlX3F1b3RlO1xuIDQ1MDpcdFxuIDQ1MTpcdFx0cmV0dXJuIDA7XG4gNDUyOlx0XG4gNDUzOlx0ZnJlZV9xdW90ZTpcbiA0NTQ6XHRcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiA0NTU6XHRmcmVlX21pc2M6XG4gNDU2Olx0XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiA0NTc6XHRkZWluaXRfbXI6XG4gNDU4Olx0XHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XG4gNDU5Olx0XG4gNDYwOlx0XHRyZXR1cm4gcmV0O1xuIDQ2MTpcdH1cbiA0NjI6XHRtb2R1bGVfaW5pdCh0ZHhfZ3Vlc3RfaW5pdCk7XG4gNDYzOlx0XG4gNDY0Olx0c3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXG4gNDY1Olx0e1xuIDQ2NjpcdFx0dHNtX3JlcG9ydF91bnJlZ2lzdGVyKFx1MDAyNnRkeF90c21fb3BzKTtcbiA0Njc6XHRcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiA0Njg6XHRcdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ0ZHhfbWlzY19kZXYpO1xuIDQ2OTpcdFx0dGR4X21yX2RlaW5pdCh0ZHhfYXR0cl9ncm91cHNbMF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHg4NiBDUFUgTWF0Y2hpbmcgaW4gYSBURFggR3Vlc3QgQ29udGV4dCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBpcyBoaXR0aW5nIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2VhciDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2d1ZXN0X2lkc2AgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIEl0JiMzOTtzIGNsZWFybHkgYSBjcml0aWNhbCBpbnB1dCB0byB0aGUgQ1BVIG1hdGNoaW5nIGxvZ2ljLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoaXMgaXMgc29tZSBraW5kIG9mIGlkZW50aWZpZXIgb3Igc2V0IG9mIGlkZW50aWZpZXJzIHNwZWNpZmljYWxseSBmb3IgdGhlIFREWCBndWVzdCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgZGVmaW5pdGlvbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBsaWtlbHkgcGVyZm9ybWluZyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB0aGUgaG9zdCBzeXN0ZW0gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBURFggZ3Vlc3QsIG9yIHBlcmhhcHMgdG8gZGVmaW5lIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGd1ZXN0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIG5vdyBhbmQgdW5kZXJzdGFuZCB0aGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfZ3Vlc3RfaWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDEwLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMi1cdFg4Nl9NQVRDSF9GRUFUVVJFKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCwgTlVMTCksXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxNC19O1xuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxNTpNT0RVTEVfREVWSUNFX1RBQkxFKHg4NmNwdSwgdGR4X2d1ZXN0X2lkcyk7XG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MjQ9c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDI3LVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQyODpcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MjktXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgUmVxdWlyZW1lbnQqKgoKT2theSwgc28gdGhpcyBjb2RlIHBhdGggaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7VERYIGd1ZXN0IGVudmlyb25tZW50JiMzNDsgdG8gbWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHNvbWVob3cgKmVtdWxhdGUqIHRoaXMgZmVhdHVyZSB3aXRoaW4gUUVNVT8gSSYjMzk7bSB0aGlua2luZyBvZiB0ZXN0aW5nIHRoaXMgb24gYSBtb3JlIGdlbmVyaWMgcGxhdGZvcm0sIHNvIHRoYXQgaXMgYSBjcml0aWNhbCBxdWVzdGlvbi4KClRoZSBkZWVwZXIgSSBnZXQgaW50byB0aGlzLCB0aGUgbW9yZSBvYnZpb3VzIGl0IGJlY29tZXM6IFREWCBndWVzdHMgYXJlIGEgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgdGhpbmcuIFlvdSBuZWVkIGEgaG9zdCBDUFUgdGhhdCBzdXBwb3J0cyBURFggYW5kIGEgaHlwZXJ2aXNvciB0aGF0JiMzOTtzIHNldCB1cCB0byB3b3JrIHdpdGggaXQuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBqdXN0IGNvbmp1cmUgdXAgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIG9yIGV2ZW4gb24gYSBzdGFuZGFyZCBHQ0UgaW5zdGFuY2UsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQuIFdpdGhvdXQgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgaG9zdCBjb25maWd1cmF0aW9uLCB3ZSBhcmUgaW4gYSBuby1nbyB6b25lLgoKU28sIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLiBUaGF0JiMzOTtzIHRoZSBzaW1wbGUgY29uY2x1c2lvbiwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNvbmNsdXNpb24gaXMgc291bmQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBzb21ldGltZXMgdGhlcmUgYXJlIHdheXMgdG8gY29lcmNlIGZlYXR1cmVzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHRlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IHdheSB0byBmb3JjZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSSByZWNhbGwgdGhlIENQVSBmZWF0dXJlIGZsYWdzIGFyZSBvZnRlbiBzZXQgcXVpdGUgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGVjdGlvbi4gU28sIGlmIHRoZSBoYXJkd2FyZSBzYXlzIG5vIFREWCwgdGhlIGZsYWcgaXMgbm90IHNldC4gV2Ugd2lsbCBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBkb25lIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1g4Nl9GRUFUVVJFX1REWF9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTMzPXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTE0Mi1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDM6XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQ0LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjI5LSNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMiYjNDM7MjIpIC8qIFwmIzM0O3RkeF9ndWVzdFwmIzM0OyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMzEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD0zND1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDAodW5zaWduZWQgaW50IG5yKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMzctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjM4Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMzktXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgMCwgMCwgMCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD00OD1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDEodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNTEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjUyOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNTMtXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIDAsIDAsIDApO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NjI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwyKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTY2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo2NzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oLTY4LVx0XHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgMCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD03Nz1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtODEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjgyOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtODMtXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD05Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDQodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtOTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjk4Olx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtOTktXHRcdHJldHVybiB0ZHhfa3ZtX2h5cGVyY2FsbChuciwgcDEsIHAyLCBwMywgcDQpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5Lmg9OD1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NlcHRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMC1cdC8qIFBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeS1hY2NlcHRhbmNlIGNhbGwgZ29lcyBoZXJlICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oOjExOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMi1cdFx0aWYgKCF0ZHhfYWNjZXB0X21lbW9yeShzdGFydCwgZW5kKSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD05OT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMDM6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTA0LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTIzPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDModW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyNy1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjEyODpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjktXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNDg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNCh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTUyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTUzOlx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1NC1cdFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTE3Mz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw1KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNzgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxNzk6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTgwLVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgaW40LCBpbjUsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MjAxPXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDYodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjIwNzpcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDgtXHRcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCAwLCAwLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIyOD11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw3KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzQtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMzU6XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM2LVx0XHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIGluMywgaW40LCBpbjUsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz00NDA9dm9pZCBndWVzdF9mb3JjZV9tdHJyX3N0YXRlKHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdmFyLCB1bnNpZ25lZCBpbnQgbnVtX3Zhcixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2Mi1cdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YRU5QVikgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjQ2MzpcdCAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjQtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jPTkzOD12b2lkIF9faW5pdCBzZWxlY3RfaWRsZV9yb3V0aW5lKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTItXHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh4ODZfaWRsZSwgbXdhaXRfaWRsZSk7XG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjk1MzpcdH0gZWxzZSBpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTk1NC1cdFx0cHJfaW5mbyhcJiMzNDt1c2luZyBURFggYXdhcmUgaWRsZSByb3V0aW5lXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlM9MTI5PVNZTV9DT0RFX1NUQVJUX0xPQ0FMX05PQUxJR04oaWRlbnRpdHlfbWFwcGVkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUy0yMDQtXHRhbmRsXHQkKFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9MQTU3KSwgJXIxM2RcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUzoyMDU6XHRBTFRFUk5BVElWRSBcJiMzNDtcJiMzNDssIF9fc3RyaW5naWZ5KG9ybCAkWDg2X0NSNF9NQ0UsICVyMTNkKSwgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXG5hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMtMjA2LVx0bW92cVx0JXIxMywgJWNyNFxuLS1cbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MTE9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHRkeF9ndWVzdF9pZHNbXSA9IHtcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTI6XHRYODZfTUFUQ0hfRkVBVFVSRShYODZfRkVBVFVSRV9URFhfR1VFU1QsIE5VTEwpLFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQxMy1cdHt9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0yMjktI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFx0XHQoIDgqMzImIzQzOzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoyMzA6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcdFx0KCA4KjMyJiM0MzsyMikgLyogXCYjMzQ7dGR4X2d1ZXN0XCYjMzQ7IEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGlzIGJlaW5nIGVuYWJsZWQgc29tZXdoZXJlIGluIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc3BlY2lmaWNhbGx5IGJ5IHRoZSBgdGR4X2Vhcmx5X2luaXQoKWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiBgdGR4X2Vhcmx5X2luaXQoKWAgaXMgYmVpbmcgaW52b2tlZC4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBldmVudD8gV2hhdCYjMzk7cyB0aGUgY2FsbCBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBjcnVjaWFsIGVuYWJsaW5nIG9mIHRoZSBURFggZ3Vlc3QgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZSBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gZnVsbHkgZ3Jhc3AgdGhlIFREWCBndWVzdCBzZXR1cC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjYWxsIGlzIG1hZGUuLi4gdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9lYXJseV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jPTk5OT1zdGF0aWMgaW50IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDAzLVx0ICogT25seSBoYW5kbGUgc2hhcmVkLVx1MDAzZXByaXZhdGUgY29udmVyc2lvbiBoZXJlLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAwNDpcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwNS1cdCAqL1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTEwMTI9c3RhdGljIGludCB0ZHhfZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMDE2LVx0ICogT25seSBoYW5kbGUgcHJpdmF0ZS1cdTAwM2VzaGFyZWQgY29udmVyc2lvbiBoZXJlLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTAxNzpcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAxOC1cdCAqL1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMTk9c3RhdGljIF9faW5pdCB2b2lkIHRkeF9hbm5vdW5jZSh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzItXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTMzOnZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTM0LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD01Nz1zdHJ1Y3QgdmVfaW5mbyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNjktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDo3MDp2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTcxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTg5PXZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTkyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6OTM6c3RhdGljIGlubGluZSB2b2lkIHRkeF9lYXJseV9pbml0KHZvaWQpIHsgfTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTk0LXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4tLVxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jPTIyMj1hc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIF9faW5pdCBfX25vcmV0dXJuIHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqIHJlYWxfbW9kZV9kYXRhKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yNzgtXHQvKiBOZWVkZWQgYmVmb3JlIGNjX3BsYXRmb3JtX2hhcygpIGNhbiBiZSB1c2VkIGZvciBURFggKi9cbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYzoyNzk6XHR0ZHhfZWFybHlfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jLTI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBhcmUgaW5pdGlhbGl6ZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgZWFybHkgc3RhZ2VzLiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB0ZHhfZWFybHlfaW5pdGAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB4ODYtc3BlY2lmaWMgYW5kIHJlbGF0ZWQgdG8gQ29DbyAoQ29uZmlkZW50aWFsIENvbXB1dGluZyksIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBvcGVyYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHBlcmhhcHMgc29tZSBlYXJseSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gVERYIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHBlcmZvcm1lZCBhdCB0aGlzIGNyaXRpY2FsIHN0YWdlLiBVbmRlcnN0YW5kaW5nIHRoZSBlYXJseSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBzZWN1cml0eSBhbmQgb3BlcmF0aW9uYWwgYXNwZWN0cyBvZiBURFguIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzM6XHR2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxuMTEzNDpcdHtcbjExMzU6XHRcdHU2NCBjY19tYXNrO1xuMTEzNjpcdFx0dTMyIGVheCwgc2lnWzNdO1xuMTEzNzpcdFxuMTEzODpcdFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFx1MDAyNmVheCwgXHUwMDI2c2lnWzBdLCBcdTAwMjZzaWdbMl0sICBcdTAwMjZzaWdbMV0pO1xuMTEzOTpcdFxuMTE0MDpcdFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxuMTE0MTpcdFx0XHRyZXR1cm47XG4xMTQyOlx0XG4xMTQzOlx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XG4xMTQ0Olx0XG4xMTQ1Olx0XHQvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovXG4xMTQ2Olx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfSU5URUw7XG4xMTQ5Olx0XG4xMTUwOlx0XHQvKiBDb25maWd1cmUgdGhlIFREICovXG4xMTUxOlx0XHR0ZHhfc2V0dXAoXHUwMDI2Y2NfbWFzayk7XG4xMTUyOlx0XG4xMTUzOlx0XHRjY19zZXRfbWFzayhjY19tYXNrKTtcbjExNTQ6XHRcbjExNTU6XHRcdC8qXG4xMTU2Olx0XHQgKiBBbGwgYml0cyBhYm92ZSBHUEEgd2lkdGggYXJlIHJlc2VydmVkIGFuZCBrZXJuZWwgdHJlYXRzIHNoYXJlZCBiaXRcbjExNTc6XHRcdCAqIGFzIGZsYWcsIG5vdCBhcyBwYXJ0IG9mIHBoeXNpY2FsIGFkZHJlc3MuXG4xMTU4Olx0XHQgKlxuMTE1OTpcdFx0ICogQWRqdXN0IHBoeXNpY2FsIG1hc2sgdG8gb25seSBjb3ZlciB2YWxpZCBHUEEgYml0cy5cbjExNjA6XHRcdCAqL1xuMTE2MTpcdFx0cGh5c2ljYWxfbWFzayBcdTAwMjY9IGNjX21hc2sgLSAxO1xuMTE2MjpcdFxuMTE2MzpcdFx0LypcbjExNjQ6XHRcdCAqIFRoZSBrZXJuZWwgbWFwcGluZyBzaG91bGQgbWF0Y2ggdGhlIFREWCBtZXRhZGF0YSBmb3IgdGhlIHBhZ2UuXG4xMTY1Olx0XHQgKiBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKCkgY2FuIHRvdWNoIG1lbW9yeSAqYWRqYWNlbnQqIHRvIHRoYXQgd2hpY2ggaXNcbjExNjY6XHRcdCAqIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGNhbiBjYXRjaCBldmVuIF9tb21lbnRhcnlfIG1pc21hdGNoZXMuICBCYWRcbjExNjc6XHRcdCAqIHRoaW5ncyBoYXBwZW4gb24gbWlzbWF0Y2g6XG4xMTY4Olx0XHQgKlxuMTE2OTpcdFx0ICogICAtIFByaXZhdGUgbWFwcGluZyA9XHUwMDNlIFNoYXJlZCBQYWdlICA9PSBHdWVzdCBzaHV0ZG93blxuMTE3MDpcdCAgICAgICAgICogICAtIFNoYXJlZCBtYXBwaW5nICA9XHUwMDNlIFByaXZhdGUgUGFnZSA9PSBSZWNvdmVyYWJsZSAjVkVcbjExNzE6XHRcdCAqXG4xMTcyOlx0XHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxuMTE3MzpcdFx0ICogc2hhcmVkPVx1MDAzZXByaXZhdGUgYmVmb3JlIHRoZSBtYXBwaW5nIGJlY29tZXMgcHJpdmF0ZS5cbjExNzQ6XHRcdCAqXG4xMTc1Olx0XHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2goKSBjb252ZXJ0cyB0aGUgcGFnZSBmcm9tXG4xMTc2Olx0XHQgKiBwcml2YXRlPVx1MDAzZXNoYXJlZCBhZnRlciB0aGUgbWFwcGluZyBiZWNvbWVzIHByaXZhdGUuXG4xMTc3Olx0XHQgKlxuMTE3ODpcdFx0ICogSW4gYm90aCBjYXNlcyB0aGVyZSBpcyBhIHRlbXBvcmFyeSBzaGFyZWQgbWFwcGluZyB0byBhIHByaXZhdGUgcGFnZSxcbjExNzk6XHRcdCAqIHdoaWNoIGNhbiByZXN1bHQgaW4gYSAjVkUuICBCdXQsIHRoZXJlIGlzIG5ldmVyIGEgcHJpdmF0ZSBtYXBwaW5nIHRvXG4xMTgwOlx0XHQgKiBhIHNoYXJlZCBwYWdlLlxuMTE4MTpcdFx0ICovXG4xMTgyOlx0XHR4ODZfcGxhdGZvcm0uZ3Vlc3QuZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSA9IHRkeF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVERYIEd1ZXN0IERldGVjdGlvbiBhbmQgSHlwZXJjYWxsIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjaGVja2luZyBmb3IgVERYIHN1cHBvcnQgdXNpbmcgYGNwdWlkX2NvdW50YCBhbmQgY29tcGFyaW5nIGFnYWluc3QgYFREWF9JREVOVGAuIFRoaXMgcmVsaWVzIG9uIHNwZWNpZmljIENQVUlEIHZhbHVlcyBiZWluZyByZXR1cm5lZCwgd2hpY2ggd2UgKmNhbiogc2V0IGluIFFFTVUuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGVtdWxhdGUgdGhlIFREWCBoeXBlcmNhbGxzIHRoZW1zZWx2ZXM/IFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBtb2RpZmllcyBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZWAsIHdoaWNoIHVsdGltYXRlbHkgY2FsbHMgYHRkZ192bV9yZGAgd2l0aCBgVERDU19RVU9URV9NQVhfU0laRWAuIEFuZCBgdGRnX3ZtX3JkYD8gVGhhdCBleGVjdXRlcyBhIFREQ0FMTCBpbnN0cnVjdGlvbiDigJMgdGhvc2UgYC5ieXRlIDB4NjYsMHgwZiwweDAxLDB4Y2NgIGJ5dGVzLgoKTm93LCBpZiB0aGUgaHlwZXJ2aXNvciBpc24mIzM5O3QgVERYLWF3YXJlLCBleGVjdXRpbmcgdGhhdCBURENBTEwgaXMgZ29pbmcgdG8gY2F1c2UgYSAjVUQgKEludmFsaWQgT3Bjb2RlKSBvciBzb21lIHNpbWlsYXIgZXhjZXB0aW9uLiBCYXNpY2FsbHksIHRoZSBrZXJuZWwgY3Jhc2hlcyBvciBmYWlscyB0byBib290IGlmIGl0IGJlbGlldmVzIGl0JiMzOTtzIGEgVERYIGd1ZXN0LCBidXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgaHlwZXJjYWxsLgoKV2FpdCBhIHNlY29uZC4uLiBjYW4gUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgVERDQUxMPyBJIGtub3cgd2UgY2FuIHNldCB0aGUgQ1BVSUQgdmFsdWVzLCBidXQgaXMgdGhlcmUgYWN0dWFsIGh5cGVyY2FsbCBzdXBwb3J0PyBObywgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBkbyB0aGF0IHVubGVzcyBpdCYjMzk7cyBydW5uaW5nIG9uIGEgaG9zdCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlIGFuZCBLVk0gVERYIHN1cHBvcnQuIFRoYXQmIzM5O3MgKm5vdCogdGhlIHVzdWFsIEdDRS9RRU1VIGVudmlyb25tZW50IEkmIzM5O20gZGVhbGluZyB3aXRoLiBTbywgcmVhbGlzdGljYWxseSwgdGhpcyBURFggZ3Vlc3QgY29kZSBpc24mIzM5O3QgZXZlbiByZWFjaGFibGUgb3IgZ2V0dGluZyBleGVjdXRlZCBpbiBhIHR5cGljYWwgR0NFL1FFTVUgc2V0dXAuCgpMZXQgbWUganVzdCB2ZXJpZnkgcXVpY2tseSB0aGF0IGB0ZGdfdm1fcmRgIGlzICpkZWZpbml0ZWx5KiB1c2luZyBhIFREQ0FMTC4gTmVlZCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkZ192bV9yZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04MS0vKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODI6c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTgzLXtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yMTA9dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yMTMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMTQ6XHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNS1cbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yNzQ9c3RhdGljIHZvaWQgZGlzYWJsZV9zZXB0X3ZlKHU2NCB0ZF9hdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTI4MC1cdC8qIElzIHRoaXMgVEQgYWxsb3dlZCB0byBkaXNhYmxlIFNFUFQgI1ZFICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyODE6XHR0ZGdfdm1fcmQoVERDU19DT05GSUdfRkxBR1MsIFx1MDAyNmNvbmZpZyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODItXHRpZiAoIShjb25maWcgXHUwMDI2IFREQ1NfQ09ORklHX0ZMRVhJQkxFX1BFTkRJTkdfVkUpKSB7XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMjk1LVx0LyogQ2hlY2sgaWYgU0VQVCAjVkUgaGFzIGJlZW4gZGlzYWJsZWQgYmVmb3JlIHVzICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyOTY6XHR0ZGdfdm1fcmQoVERDU19URF9DVExTLCBcdTAwMjZjb250cm9scyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yOTctXHRpZiAoY29udHJvbHMgXHUwMDI2IFREX0NUTFNfUEVORElOR19WRV9ESVNBQkxFKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTMyMT1zdGF0aWMgdm9pZCBlbmFibGVfY3B1X3RvcG9sb2d5X2VudW1lcmF0aW9uKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI1LVx0LyogSGFzIHRoZSBWTU0gcHJvdmlkZWQgYSB2YWxpZCB0b3BvbG9neSBjb25maWd1cmF0aW9uPyAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MzI2Olx0dGRnX3ZtX3JkKFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVELCBcdTAwMjZjb25maWd1cmVkKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTMyNy1cdGlmICghY29uZmlndXJlZCkge1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTExMTk9c3RhdGljIF9faW5pdCB2b2lkIHRkeF9hbm5vdW5jZSh2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMjgtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMTI5Olx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXHUwMDI2Y29udHJvbHMpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTEzMC1cdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoaXMga2luZCBvZiB3b3JrOgoKKipBbmFseXppbmcgdGhlIFJlcXVlc3Q6IGB0ZGdfdm1fcmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgcmVhZCBgdGRnX3ZtX3JkYC4mIzM0OyBPa2F5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mIGB0ZGdfdm1fcmRgLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkmIzM5O20gYWxyZWFkeSBtYWtpbmcgc29tZSBhc3N1bXB0aW9ucy4gJiMzNDt0ZGcmIzM0OyBsaWtlbHkgcmVsYXRlcyB0byBhIHNwZWNpZmljIHRhcmdldCBvciBkYXRhIGdlbmVyYXRpb24sIGxpa2VseSBzb21lIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uICYjMzQ7dm0mIzM0OyBwcm9iYWJseSBtZWFucyBhIHZpcnR1YWwgbWFjaGluZS4gQW5kICYjMzQ7cmQmIzM0OyBjb3VsZCBzdGFuZCBmb3IgJiMzNDtyZWFkJiMzNDssIGltcGx5aW5nIGl0JiMzOTtzIGEgZmlsZSwgY29uZmlndXJhdGlvbiwgb3Igc29tZSBkYXRhIHNwZWNpZmljIHRvIHJlYWRpbmcgYW5kIHV0aWxpemluZyBhIHZpcnR1YWwgbWFjaGluZSBzZXR1cCByZWxhdGVkIHRvIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uIElzIGl0IGEgY29uZmlndXJhdGlvbj8gQSBzY3JpcHQ/IEEgbG9nPyBBbiBpbnB1dCBmaWxlPyBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBhcnRpZmFjdCAqaXMqIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZS4gVGhlIGNvbnRleHQgaXMgdml0YWw7IGFtIEkgZGVidWdnaW5nPyBJbnRlZ3JhdGluZz8gVGVzdGluZz8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0ZGNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKVxuICA3NjpcdHtcbiAgNzc6XHRcdGlmIChfX3RkY2FsbF9yZXQoZm4sIGFyZ3MpKVxuICA3ODpcdFx0XHRwYW5pYyhcJiMzNDtURENBTEwgJWxsZCBmYWlsZWQgKEJ1Z2d5IFREWCBtb2R1bGUhKVxcblwmIzM0OywgZm4pO1xuICA3OTpcdH1cbiAgODA6XHRcbiAgODE6XHQvKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xuICA4MjpcdHN0YXRpYyBpbmxpbmUgdTY0IHRkZ192bV9yZCh1NjQgZmllbGQsIHU2NCAqdmFsdWUpXG4gIDgzOlx0e1xuICA4NDpcdFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuICA4NTpcdFx0XHQucmR4ID0gZmllbGQsXG4gIDg2Olx0XHR9O1xuICA4NzpcdFx0dTY0IHJldDtcbiAgODg6XHRcbiAgODk6XHRcdHJldCA9IF9fdGRjYWxsX3JldChUREdfVk1fUkQsIFx1MDAyNmFyZ3MpO1xuICA5MDpcdFx0KnZhbHVlID0gYXJncy5yODtcbiAgOTE6XHRcbiAgOTI6XHRcdHJldHVybiByZXQ7XG4gIDkzOlx0fVxuICA5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIGBfX3RkY2FsbF9yZXRgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBgX190ZGNhbGxfcmV0YC4uLnRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYXNzZW1ibHkuIE9mIGNvdXJzZS4gSXQgaGFzIHRvIGJlLiBUaGVyZSYjMzk7cyBzaW1wbHkgbm8gb3RoZXIgd2F5IHRvIG9yY2hlc3RyYXRlIHRoZSBraW5kIG9mIGxvdy1sZXZlbCByZXR1cm4gcGF0aCBtYW5pcHVsYXRpb24gbmVlZGVkIGZvciBhIHN5c3RlbS1jYWxsLWJhc2VkIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGRyb3BwaW5nIGRvd24gdG8gdGhlIGJhcmUgbWV0YWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1hbmFnaW5nIHRoZSBzdGFjayBwb2ludGVyLCBwb3RlbnRpYWxseSByZXN0b3JpbmcgcmVnaXN0ZXJzLCBhbmQgZW5zdXJpbmcgYSBzZWFtbGVzcyBjb250ZXh0IHN3aXRjaCBiYWNrIHRvIHRoZSBjYWxsaW5nIHRocmVhZC4gVGhlIGNvbXBpbGVyLCBldmVuIHdpdGggYWdncmVzc2l2ZSBpbmxpbmluZywgd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZ2VuZXJhdGUgdGhlIG9wdGltYWwgc2VxdWVuY2UgYW5kIGhhbmRsZSBhbGwgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBpbiBhIHRydWx5IGVmZmljaWVudCBhbmQgcmVsaWFibGUgbWFubmVyLiBBc3NlbWJseSBnaXZlcyB1cyB0aGUgcHJlY2lzZSBjb250cm9sIHdlIGRlbWFuZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUsIHRvby4gSXTigJlsbCBtYWtlIGEgbG90IG9mIGFzc3VtcHRpb25zIGFib3V0IEFCSSBhbmQgcmVnaXN0ZXIgdXNhZ2U7IEkmIzM5O2xsIGFsc28gaGF2ZSB0byBjb25zaWRlciBhbnkgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgY2FsbGluZyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190ZGNhbGxfcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TPTI3PVNZTV9GVU5DX0VORChfX3RkY2FsbClcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0yOS0vKlxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzA6ICogX190ZGNhbGxfcmV0KCkgLSBVc2VkIGJ5IFREWCBndWVzdHMgdG8gcmVxdWVzdCBzZXJ2aWNlcyBmcm9tIHRoZSBURFhcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMxLSAqIG1vZHVsZSAoZG9lcyBub3QgaW5jbHVkZSBWTU0gc2VydmljZXMpIHVzaW5nIFREQ0FMTCBpbnN0cnVjdGlvbiwgd2l0aFxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMzLSAqXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzozNDogKiBfX3RkY2FsbF9yZXQoKSBmdW5jdGlvbiBBQkk6XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0zNS0gKlxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTQyLSAqL1xuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6NDM6U1lNX0ZVTkNfU1RBUlQoX190ZGNhbGxfcmV0KVxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDQtXHRURFhfTU9EVUxFX0NBTEwgaG9zdD0wIHJldD0xXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzo0NTpTWU1fRlVOQ19FTkQoX190ZGNhbGxfcmV0KVxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDYtXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NzU9c3RhdGljIGlubGluZSB2b2lkIHRkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03Ni17XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo3NzpcdGlmIChfX3RkY2FsbF9yZXQoZm4sIGFyZ3MpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzgtXHRcdHBhbmljKFwmIzM0O1REQ0FMTCAlbGxkIGZhaWxlZCAoQnVnZ3kgVERYIG1vZHVsZSEpXFxuXCYjMzQ7LCBmbik7XG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9ODI9c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04OC1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjg5Olx0cmV0ID0gX190ZGNhbGxfcmV0KFRER19WTV9SRCwgXHUwMDI2YXJncyk7XG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy05MC1cdCp2YWx1ZSA9IGFyZ3Mucjg7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oPTE1MD11NjQgX190ZGNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxNTE6dTY0IF9fdGRjYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oLTE1Mi11NjQgX190ZGNhbGxfc2F2ZWRfcmV0KHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDcxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggR3Vlc3QgQ29kZSBGdXp6YWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBURFhfTU9EVUxFX0NBTExgIG1hY3JvLiBJdCB1c2VzIHRoZSBgdGRjYWxsYCBpbnN0cnVjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBURFggZ3Vlc3Qtc3BlY2lmaWMgY29tcG9uZW50LiBOb3csIGtub3dpbmcgdGhlIGVudmlyb25tZW50IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgc3RhbmRhcmQgUUVNVSBpbnN0YWxsYXRpb25zIGFyZSBub3QgY29uZmlndXJlZCB0byBlbXVsYXRlIFREWCBndWVzdHMuIFRoYXQmIzM5O3MgYmVjYXVzZSBpdCByZWxpZXMgb24gc3BlY2lmaWMgaG9zdCBoYXJkd2FyZSBhbmQgS1ZNIHN1cHBvcnQsIHNvIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIgaW4gYSB2YW5pbGxhIHNldHVwLiBDb25zZXF1ZW50bHksIHRoaXMgYFREWF9NT0RVTEVfQ0FMTGAgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgdW5mdXp6YWJsZSB1bmRlciB0aG9zZSBjb25kaXRpb25zLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgYXNzZXNzbWVudCB3b3VsZCBiZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKQnV0LCBhcyBhIGdvb2QgcHJhY3RpY2UsIEkgd2FudCB0byBjb25maXJtIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBwYXRoIHRvIHRoaXMgY29kZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHNlZSB0aGF0IGB0ZHhfZ3Vlc3RfaW5pdGAgaXMgdGhlIG1vZHVsZSYjMzk7cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSXQgY2hlY2tzIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gVGhhdCBjaGVjayByZWxhdGVzIHRvIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBJIHJlY2FsbCB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGdldHMgc2V0IHdpdGhpbiBgdGR4X2Vhcmx5X2luaXRgLiBBbmQgdGhlIGNydWNpYWwgcGFydCBpbiBgdGR4X2Vhcmx5X2luaXRgIGlzIGEgYGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAuLi4pYCBjaGVjay4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBIeXBvdGhldGljYWxseSwgaWYgd2UgY291bGQgc29tZWhvdyBtb2NrIHRoZSBDUFVJRCB2YWx1ZXMgaW4gUUVNVSwgd2UgbWlnaHQgYmUgYWJsZSB0byB0cmljayBgdGR4X2Vhcmx5X2luaXRgIGludG8gc2V0dGluZyBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSG93ZXZlciwgZXZlbiBpZiB3ZSB3ZXJlIHN1Y2Nlc3NmdWwgaW4gc2V0dGluZyB0aGF0IGZsYWcgYW5kIHRyaWNraW5nIHRoZSBtb2R1bGUgaW5pdCwgdGhlIGZ1bmN0aW9uIGB0ZHhfc2V0dXBgIGlzIGFsd2F5cyBjYWxsZWQsIHdoaWNoIGFsc28gY2FsbHMgdGhlIGBURENBTExgIGluc3RydWN0aW9ucy4gTm93LCB1bmxlc3MgdGhlIGh5cGVydmlzb3IgKmFjdHVhbGx5KiBzdXBwb3J0cyBgVERDQUxMYCwgdGhlIGNvZGUgd2lsbCByZXN1bHQgaW4gYSAjVUQgKGludmFsaWQgb3Bjb2RlKSBleGNlcHRpb24gYW5kIGxpa2VseSBjcmFzaCB0aGUga2VybmVsIGR1cmluZyB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLiBUaGlzIG1lYW5zIHdlJiMzOTtkIG5ldmVyIGV2ZW4gZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UgY291bGQgZnV6eiBhbnl0aGluZywgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkbiYjMzk7dCBldmVuIGJvb3QuIFNvLCBtb2NraW5nIENQVUlEIHdvdWxkbiYjMzk7dCBnZXQgdXMgYXJvdW5kIGl0LgoKVGh1cywgZ2l2ZW4gdGhlIG5lY2Vzc2l0eSBmb3IgZ2VudWluZSBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24sIGl0JiMzOTtzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGB0ZHhfZ3Vlc3RfaW5pdGAsIGFuZCBieSBleHRlbnNpb24sIGBURFhfTU9EVUxFX0NBTExgIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhIGNyYXNoLiBNeSBmaW5hbCBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjb3JlIHJlYXNvbiBmb3IgdGhpcyBjb25jbHVzaW9uIGhpbmdlcyBvbiB0aGUgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIFREWCwgcGFydGljdWxhcmx5IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGBURENBTExgIGluc3RydWN0aW9uLCB3aGljaCBpcyBtaXNzaW5nIGluIHN0YW5kYXJkIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGRyaXZlci4gVERYIGd1ZXN0IGNvZGUgcmVsaWVzIG9uIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24gYW5kIHNwZWNpZmljIGhhcmR3YXJlL2h5cGVydmlzb3Igc3VwcG9ydCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIFREWCBDUFUgZmVhdHVyZSB3b3VsZCByZXN1bHQgaW4gYSAjVUQgZXhjZXB0aW9uIGR1cmluZyBlYXJseSBib290IHdoZW4gdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBleGVjdXRlIFREQ0FMTHMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MDguOTM5NzkxNTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTg3NjY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTowOC45Mzk3OTk5NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTQ0MTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1NmRmZTc2MmQ1ZjlhOTg3MWVkZDNhZWUxZjI2NzZkMDQ1NDIyYmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6MDU6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbmluZGV4IDI5YjZmMWVkNTllYzUuLmZhMmVkMDEyZTczNjggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbkBAIC0xOTgsNiArMTk4LDI1IEBAIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHRkeF9oY2FsbF9nZXRfcXVvdGUpO1xcbiBcXG4rLyoqXFxuKyAqIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKSAtIEdldCB0aGUgbWF4aW11bSBURCBRdW90ZSBzaXplXFxuKyAqXFxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcXG4rICogZ3Vlc3QgZHJpdmVyIHVzZXMgaXQgdG8gc2l6ZSB0aGUgYnVmZmVyIGZvciBRdW90ZSByZXRyaWV2YWwuIE9sZGVyIFREWFxcbisgKiBtb2R1bGVzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmllbGQgYW5kIHJldHVybiBhbiBlcnJvci5cXG4rICpcXG4rICogUmV0dXJuOiBNYXhpbXVtIFF1b3RlIHNpemUgaW4gYnl0ZXMgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4re1xcbitcXHR1NjQgdmFsLCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXFx1MDAyNnZhbCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID8gMCA6ICh1MzIpdmFsO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xcbitcXG4gc3RhdGljIHZvaWQgX19ub3JldHVybiB0ZHhfcGFuaWMoY29uc3QgY2hhciAqbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuaW5kZXggZjIwZTkxZDdhYzM1Yi4uYTU4NzUxMzIxNjEzYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcXG5AQCAtNTAsNiArNTAsNyBAQFxcbiAvKiBURFggVEQtU2NvcGUgTWV0YWRhdGEuIFRvIGJlIHVzZWQgYnkgVERHLlZNLldSIGFuZCBUREcuVk0uUkQgKi9cXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1xcdFxcdDB4MTExMDAwMDMwMDAwMDAxNlxcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1xcdFxcdFxcdDB4MTExMDAwMDMwMDAwMDAxN1xcbisjZGVmaW5lIFREQ1NfUVVPVEVfTUFYX1NJWkVcXHRcXHQweDkwMTAwMDAyMDAwMDAwMDhcXG4gI2RlZmluZSBURENTX05PVElGWV9FTkFCTEVTXFx0XFx0MHg5MTAwMDAwMDAwMDAwMDEwXFxuICNkZWZpbmUgVERDU19UT1BPTE9HWV9FTlVNX0NPTkZJR1VSRURcXHQweDkxMDAwMDAwMDAwMDAwMTlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li5hNzVkYmJlMDA0YmRmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtODMsNiArODMsOCBAQCBpbnQgdGR4X21jYWxsX2V4dGVuZF9ydG1yKHU4IGluZGV4LCB1OCAqZGF0YSk7XFxuIFxcbiB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSk7XFxuIFxcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcXG4rXFxuIHZvaWQgX19pbml0IHRkeF9kdW1wX2F0dHJpYnV0ZXModTY0IHRkX2F0dHIpO1xcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuKysrIGIvZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcXG4gICogRElDRS1iYXNlZCBhdHRlc3RhdGlvbiB1c2VzIGxheWVyZWQgZXZpZGVuY2UgdGhhdCByZXF1aXJlc1xcbiAgKiBsYXJnZXIgUXVvdGUgc2l6ZSAofjEwMEspLlxcbiAgKi9cXG4tI2RlZmluZSBHRVRfUVVPVEVfQlVGX1NJWkVcXHRcXHRTWl8xMjhLXFxuKyNkZWZpbmUgR0VUX1FVT1RFX0RFRkFVTFRfQlVGX1NJWkVcXHRTWl8xMjhLXFxuIFxcbiAjZGVmaW5lIEdFVF9RVU9URV9DTURfVkVSXFx0XFx0MVxcbiBcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHRkeF9tcl9kZWluaXQoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbXJfZ3JwKVxcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXFx0XFx0MFxcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcXHRcXHQweGZmZmZmZmZmZmZmZmZmZmZcXG4gXFxuLSNkZWZpbmUgVERYX1FVT1RFX01BWF9MRU5cXHRcXHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcXG4rI2RlZmluZSBURFhfUVVPVEVfQlVGX0xFTihuKVxcdFxcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXFxuIFxcbiAvKiBzdHJ1Y3QgdGR4X3F1b3RlX2J1ZjogRm9ybWF0IG9mIFF1b3RlIHJlcXVlc3QgYnVmZmVyLlxcbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cXG5AQCAtMTkxLDggKzE5MSw5IEBAIHN0cnVjdCB0ZHhfcXVvdGVfYnVmIHtcXG4gXFx0dTggZGF0YVtdO1xcbiB9O1xcbiBcXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cXG4rLyogUXVvdGUgZGF0YSBidWZmZXIgYW5kIGxlbmd0aCAqL1xcbiBzdGF0aWMgdm9pZCAqcXVvdGVfZGF0YTtcXG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcXG4gXFxuIC8qIExvY2sgdG8gc3RyZWFtbGluZSBxdW90ZSByZXF1ZXN0cyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xcbkBAIC0yMDksOSArMjEwLDggQEAgc3RhdGljIGxvbmcgdGR4X2dldF9yZXBvcnQwKHN0cnVjdCB0ZHhfcmVwb3J0X3JlcSBfX3VzZXIgKnJlcSlcXG4gXFx0XFx0XFx0ICAgICBVU0VSX1NPQ0tQVFIocmVxLVxcdTAwM2V0ZHJlcG9ydCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuK3N0YXRpYyB2b2lkIGZyZWVfcXVvdGVfYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylidWYsIGNvdW50KSkge1xcbkBAIC0yMjIsMTIgKzIyMiwzMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXFxuIFxcdGZyZWVfcGFnZXNfZXhhY3QoYnVmLCBsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHZvaWQpXFxuKy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi9cXG4rc3RhdGljIHNpemVfdCBnZXRfcXVvdGVfYnVmX3NpemUodm9pZClcXG4re1xcbitcXHR1MzIgcXVvdGVfc2l6ZSA9IHRkeF9nZXRfbWF4X3F1b3RlX3NpemUoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZVxcbitcXHQgKiB0aGUgZGVmYXVsdC5cXG4rXFx0ICovXFxuK1xcdGlmICghcXVvdGVfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xcbitcXG4rXFx0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihURFhfUVVPVEVfQlVGX0xFTihxdW90ZV9zaXplKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICphbGxvY19xdW90ZV9idWYoc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzaXplX3QgbGVuID0gUEFHRV9BTElHTihHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0dm9pZCAqYWRkcjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgZmFpbHMgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGV4Y2VlZHMgdGhlIGJ1ZGR5IGFsbG9jYXRvcidzXFxuK1xcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxcbitcXHQgKi9cXG4gXFx0YWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0KGxlbiwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiBcXHRpZiAoIWFkZHIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0yODUsNyArMzA0LDcgQEAgc3RhdGljIGludCB0ZHhfcmVwb3J0X25ld19sb2NrZWQoc3RydWN0IHRzbV9yZXBvcnQgKnJlcG9ydCwgdm9pZCAqZGF0YSlcXG4gXFx0aWYgKGRlc2MtXFx1MDAzZWluYmxvYl9sZW4gIT0gVERYX1JFUE9SVERBVEFfTEVOKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG1lbXNldChxdW90ZV9kYXRhLCAwLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbitcXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xcbiBcXG4gXFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cXG4gXFx0cXVvdGVfYnVmLVxcdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XFxuQEAgLTI5Niw3ICszMTUsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xcbitcXHRlcnIgPSB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9lcnIoXFxcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG5AQCAtMzE1LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRvdXRfbGVuID0gUkVBRF9PTkNFKHF1b3RlX2J1Zi1cXHUwMDNlb3V0X2xlbik7XFxuIFxcbi1cXHRpZiAob3V0X2xlbiBcXHUwMDNlIFREWF9RVU9URV9NQVhfTEVOKVxcbitcXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXFx1MDAzZSBxdW90ZV9kYXRhX2xlbilcXG4gXFx0XFx0cmV0dXJuIC1FRkJJRztcXG4gXFxuIFxcdGJ1ZiA9IGt2bWVtZHVwKHF1b3RlX2J1Zi1cXHUwMDNlZGF0YSwgb3V0X2xlbiwgR0ZQX0tFUk5FTCk7XFxuQEAgLTQxNyw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGRlaW5pdF9tcjtcXG4gXFxuLVxcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYoKTtcXG4rXFx0cXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTtcXG4rXFx0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XFxuIFxcdGlmICghcXVvdGVfZGF0YSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbkBAIC00MzEsNyArNDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlX3F1b3RlOlxcbi1cXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcXG4rXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSwgcXVvdGVfZGF0YV9sZW4pO1xcbiBmcmVlX21pc2M6XFxuIFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gZGVpbml0X21yOlxcbkBAIC00NDQsNyArNDY0LDcgQEAgbW9kdWxlX2luaXQodGR4X2d1ZXN0X2luaXQpO1xcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcXG4ge1xcbiBcXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXFx1MDAyNnRkeF90c21fb3BzKTtcXG4tXFx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XFxuK1xcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ0ZHhfbWlzY19kZXYpO1xcbiBcXHR0ZHhfbXJfZGVpbml0KHRkeF9hdHRyX2dyb3Vwc1swXSk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MDkuNDQ2MjM3MjkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTkwOTIzMTM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBndWVzdCBkcml2ZXIuIFREWCBndWVzdCBjb2RlIHJlbGllcyBvbiB0aGUgVERDQUxMIGluc3RydWN0aW9uIGFuZCBzcGVjaWZpYyBoYXJkd2FyZS9oeXBlcnZpc29yIHN1cHBvcnQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBBdHRlbXB0aW5nIHRvIGZvcmNlIHRoZSBURFggQ1BVIGZlYXR1cmUgd291bGQgcmVzdWx0IGluIGEgI1VEIGV4Y2VwdGlvbiBkdXJpbmcgZWFybHkgYm9vdCB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBURENBTExzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNTZkZmU3NjJkNWY5YTk4NzFlZGQzYWVlMWYyNjc2ZDA0NTQyMmJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTk6MDU6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCAyOWI2ZjFlZDU5ZWM1Li5mYTJlZDAxMmU3MzY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMTk4LDYgKzE5OCwyNSBAQCB1NjQgdGR4X2hjYWxsX2dldF9xdW90ZSh1OCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodGR4X2hjYWxsX2dldF9xdW90ZSk7XG4gXG4rLyoqXG4rICogdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpIC0gR2V0IHRoZSBtYXhpbXVtIFREIFF1b3RlIHNpemVcbisgKlxuKyAqIFJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIFREIFF1b3RlIGZyb20gYSA0LWJ5dGUgVEQgbWV0YWRhdGEgZmllbGQuIFRoZSBURFhcbisgKiBndWVzdCBkcml2ZXIgdXNlcyBpdCB0byBzaXplIHRoZSBidWZmZXIgZm9yIFF1b3RlIHJldHJpZXZhbC4gT2xkZXIgVERYXG4rICogbW9kdWxlcyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZpZWxkIGFuZCByZXR1cm4gYW4gZXJyb3IuXG4rICpcbisgKiBSZXR1cm46IE1heGltdW0gUXVvdGUgc2l6ZSBpbiBieXRlcyBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUuXG4rICovXG4rdTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcbit7XG4rXHR1NjQgdmFsLCByZXQ7XG4rXG4rXHRyZXQgPSB0ZGdfdm1fcmQoVERDU19RVU9URV9NQVhfU0laRSwgXHUwMDI2dmFsKTtcbitcbitcdHJldHVybiByZXQgPyAwIDogKHUzMil2YWw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRkeF9nZXRfbWF4X3F1b3RlX3NpemUpO1xuK1xuIHN0YXRpYyB2b2lkIF9fbm9yZXR1cm4gdGR4X3BhbmljKGNvbnN0IGNoYXIgKm1zZylcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5pbmRleCBmMjBlOTFkN2FjMzViLi5hNTg3NTEzMjE2MTNiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbkBAIC01MCw2ICs1MCw3IEBAXG4gLyogVERYIFRELVNjb3BlIE1ldGFkYXRhLiBUbyBiZSB1c2VkIGJ5IFRERy5WTS5XUiBhbmQgVERHLlZNLlJEICovXG4gI2RlZmluZSBURENTX0NPTkZJR19GTEFHU1x0XHQweDExMTAwMDAzMDAwMDAwMTZcbiAjZGVmaW5lIFREQ1NfVERfQ1RMU1x0XHRcdDB4MTExMDAwMDMwMDAwMDAxN1xuKyNkZWZpbmUgVERDU19RVU9URV9NQVhfU0laRVx0XHQweDkwMTAwMDAyMDAwMDAwMDhcbiAjZGVmaW5lIFREQ1NfTk9USUZZX0VOQUJMRVNcdFx0MHg5MTAwMDAwMDAwMDAwMDEwXG4gI2RlZmluZSBURENTX1RPUE9MT0dZX0VOVU1fQ09ORklHVVJFRFx0MHg5MTAwMDAwMDAwMDAwMDE5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uYTc1ZGJiZTAwNGJkZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTgzLDYgKzgzLDggQEAgaW50IHRkeF9tY2FsbF9leHRlbmRfcnRtcih1OCBpbmRleCwgdTggKmRhdGEpO1xuIFxuIHU2NCB0ZHhfaGNhbGxfZ2V0X3F1b3RlKHU4ICpidWYsIHNpemVfdCBzaXplKTtcbiBcbit1MzIgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSh2b2lkKTtcbitcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF9hdHRyaWJ1dGVzKHU2NCB0ZF9hdHRyKTtcbiB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMgYi9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbmluZGV4IGQwMzAzZTMxZTgxNjEuLjg5MTliMWExMTU0ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmNcbisrKyBiL2RyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuY1xuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAgKiBESUNFLWJhc2VkIGF0dGVzdGF0aW9uIHVzZXMgbGF5ZXJlZCBldmlkZW5jZSB0aGF0IHJlcXVpcmVzXG4gICogbGFyZ2VyIFF1b3RlIHNpemUgKH4xMDBLKS5cbiAgKi9cbi0jZGVmaW5lIEdFVF9RVU9URV9CVUZfU0laRVx0XHRTWl8xMjhLXG4rI2RlZmluZSBHRVRfUVVPVEVfREVGQVVMVF9CVUZfU0laRVx0U1pfMTI4S1xuIFxuICNkZWZpbmUgR0VUX1FVT1RFX0NNRF9WRVJcdFx0MVxuIFxuQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfbXJfZGVpbml0KGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1yX2dycClcbiAjZGVmaW5lIEdFVF9RVU9URV9TVUNDRVNTXHRcdDBcbiAjZGVmaW5lIEdFVF9RVU9URV9JTl9GTElHSFRcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG4gXG4tI2RlZmluZSBURFhfUVVPVEVfTUFYX0xFTlx0XHQoR0VUX1FVT1RFX0JVRl9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0ZHhfcXVvdGVfYnVmKSlcbisjZGVmaW5lIFREWF9RVU9URV9CVUZfTEVOKG4pXHRcdHN0cnVjdF9zaXplX3Qoc3RydWN0IHRkeF9xdW90ZV9idWYsIGRhdGEsIG4pXG4gXG4gLyogc3RydWN0IHRkeF9xdW90ZV9idWY6IEZvcm1hdCBvZiBRdW90ZSByZXF1ZXN0IGJ1ZmZlci5cbiAgKiBAdmVyc2lvbjogUXVvdGUgZm9ybWF0IHZlcnNpb24sIGZpbGxlZCBieSBURC5cbkBAIC0xOTEsOCArMTkxLDkgQEAgc3RydWN0IHRkeF9xdW90ZV9idWYge1xuIFx0dTggZGF0YVtdO1xuIH07XG4gXG4tLyogUXVvdGUgZGF0YSBidWZmZXIgKi9cbisvKiBRdW90ZSBkYXRhIGJ1ZmZlciBhbmQgbGVuZ3RoICovXG4gc3RhdGljIHZvaWQgKnF1b3RlX2RhdGE7XG4rc3RhdGljIHNpemVfdCBxdW90ZV9kYXRhX2xlbjtcbiBcbiAvKiBMb2NrIHRvIHN0cmVhbWxpbmUgcXVvdGUgcmVxdWVzdHMgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKHF1b3RlX2xvY2spO1xuQEAgLTIwOSw5ICsyMTAsOCBAQCBzdGF0aWMgbG9uZyB0ZHhfZ2V0X3JlcG9ydDAoc3RydWN0IHRkeF9yZXBvcnRfcmVxIF9fdXNlciAqcmVxKVxuIFx0XHRcdCAgICAgVVNFUl9TT0NLUFRSKHJlcS1cdTAwM2V0ZHJlcG9ydCkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4rc3RhdGljIHZvaWQgZnJlZV9xdW90ZV9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbi1cdHNpemVfdCBsZW4gPSBQQUdFX0FMSUdOKEdFVF9RVU9URV9CVUZfU0laRSk7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQgPSBsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCkpIHtcbkBAIC0yMjIsMTIgKzIyMiwzMSBAQCBzdGF0aWMgdm9pZCBmcmVlX3F1b3RlX2J1Zih2b2lkICpidWYpXG4gXHRmcmVlX3BhZ2VzX2V4YWN0KGJ1ZiwgbGVuKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmFsbG9jX3F1b3RlX2J1Zih2b2lkKVxuKy8qIFJldHVybiBhIGJ1ZmZlciBzaXplIGxhcmdlIGVub3VnaCB0byBob2xkIGEgUXVvdGUgKi9cbitzdGF0aWMgc2l6ZV90IGdldF9xdW90ZV9idWZfc2l6ZSh2b2lkKVxuK3tcbitcdHUzMiBxdW90ZV9zaXplID0gdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpO1xuK1xuK1x0LypcbitcdCAqIE9sZGVyIFREWCBtb2R1bGVzIGRvIG5vdCByZXBvcnQgYSBtYXhpbXVtIFF1b3RlIHNpemUsIHNvIHVzZVxuK1x0ICogdGhlIGRlZmF1bHQuXG4rXHQgKi9cbitcdGlmICghcXVvdGVfc2l6ZSlcbitcdFx0cmV0dXJuIEdFVF9RVU9URV9ERUZBVUxUX0JVRl9TSVpFO1xuK1xuK1x0LyogVGhlIHJlcG9ydGVkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVmZmVyIGhlYWRlciAqL1xuK1x0cmV0dXJuIFBBR0VfQUxJR04oVERYX1FVT1RFX0JVRl9MRU4ocXVvdGVfc2l6ZSkpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqYWxsb2NfcXVvdGVfYnVmKHNpemVfdCBsZW4pXG4ge1xuLVx0c2l6ZV90IGxlbiA9IFBBR0VfQUxJR04oR0VUX1FVT1RFX0JVRl9TSVpFKTtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IGxlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHZvaWQgKmFkZHI7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBmYWlscyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcyB0aGUgYnVkZHkgYWxsb2NhdG9yJ3NcbitcdCAqIG1heGltdW0gb3JkZXIgKG9yZGVyLTEwLCA0TUIpLlxuK1x0ICovXG4gXHRhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3QobGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI4NSw3ICszMDQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFx0aWYgKGRlc2MtXHUwMDNlaW5ibG9iX2xlbiAhPSBURFhfUkVQT1JUREFUQV9MRU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWVtc2V0KHF1b3RlX2RhdGEsIDAsIEdFVF9RVU9URV9CVUZfU0laRSk7XG4rXHRtZW1zZXQocXVvdGVfZGF0YSwgMCwgcXVvdGVfZGF0YV9sZW4pO1xuIFxuIFx0LyogVXBkYXRlIFF1b3RlIGJ1ZmZlciBoZWFkZXIgKi9cbiBcdHF1b3RlX2J1Zi1cdTAwM2V2ZXJzaW9uID0gR0VUX1FVT1RFX0NNRF9WRVI7XG5AQCAtMjk2LDcgKzMxNSw3IEBAIHN0YXRpYyBpbnQgdGR4X3JlcG9ydF9uZXdfbG9ja2VkKHN0cnVjdCB0c21fcmVwb3J0ICpyZXBvcnQsIHZvaWQgKmRhdGEpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBHRVRfUVVPVEVfQlVGX1NJWkUpO1xuK1x0ZXJyID0gdGR4X2hjYWxsX2dldF9xdW90ZShxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIkdldFF1b3RlIGh5cGVyY2FsbCBmYWlsZWQsIHN0YXR1czolbGx4XFxuXCIsIGVycik7XG4gXHRcdHJldHVybiAtRUlPO1xuQEAgLTMxNSw3ICszMzQsNyBAQCBzdGF0aWMgaW50IHRkeF9yZXBvcnRfbmV3X2xvY2tlZChzdHJ1Y3QgdHNtX3JlcG9ydCAqcmVwb3J0LCB2b2lkICpkYXRhKVxuIFxuIFx0b3V0X2xlbiA9IFJFQURfT05DRShxdW90ZV9idWYtXHUwMDNlb3V0X2xlbik7XG4gXG4tXHRpZiAob3V0X2xlbiBcdTAwM2UgVERYX1FVT1RFX01BWF9MRU4pXG4rXHRpZiAoVERYX1FVT1RFX0JVRl9MRU4ob3V0X2xlbikgXHUwMDNlIHF1b3RlX2RhdGFfbGVuKVxuIFx0XHRyZXR1cm4gLUVGQklHO1xuIFxuIFx0YnVmID0ga3ZtZW1kdXAocXVvdGVfYnVmLVx1MDAzZWRhdGEsIG91dF9sZW4sIEdGUF9LRVJORUwpO1xuQEAgLTQxNyw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWluaXRfbXI7XG4gXG4tXHRxdW90ZV9kYXRhID0gYWxsb2NfcXVvdGVfYnVmKCk7XG4rXHRxdW90ZV9kYXRhX2xlbiA9IGdldF9xdW90ZV9idWZfc2l6ZSgpO1xuK1x0cXVvdGVfZGF0YSA9IGFsbG9jX3F1b3RlX2J1ZihxdW90ZV9kYXRhX2xlbik7XG4gXHRpZiAoIXF1b3RlX2RhdGEpIHtcbiBcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIFF1b3RlIGJ1ZmZlclxcblwiKTtcbiBcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MzEsNyArNDUxLDcgQEAgc3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcbiBcdHJldHVybiAwO1xuIFxuIGZyZWVfcXVvdGU6XG4tXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhKTtcbitcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcbiBmcmVlX21pc2M6XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBkZWluaXRfbXI6XG5AQCAtNDQ0LDcgKzQ2NCw3IEBAIG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdGR4X2d1ZXN0X2V4aXQodm9pZClcbiB7XG4gXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXHUwMDI2dGR4X3RzbV9vcHMpO1xuLVx0ZnJlZV9xdW90ZV9idWYocXVvdGVfZGF0YSk7XG4rXHRmcmVlX3F1b3RlX2J1ZihxdW90ZV9kYXRhLCBxdW90ZV9kYXRhX2xlbik7XG4gXHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dGR4X21pc2NfZGV2KTtcbiBcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTowOS40NDYyMzk4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ1Nzg3NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVERYIEd1ZXN0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBURFggZ3Vlc3QgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jYCBhbmQgYGFyY2gveDg2L2NvY28vdGR4L3RkeC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgcXVvdGUgc2l6ZSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgdGR4X2dldF9tYXhfcXVvdGVfc2l6ZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYmVjYXVzZSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlIGJ1ZmZlciBzaXplIGF0IGBHRVRfUVVPVEVfQlVGX1NJWkVgICh3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpcyBhIGJpdCBzdXNwZWN0IGluIGl0c2VsZiksIHRoZSBjb2RlIG5vdyByZWFkcyB0aGUgKmFjdHVhbCogbWF4aW11bSBxdW90ZSBzaXplIGZyb20gdGhlIFREWCBtZXRhZGF0YSAoYFREQ1NfUVVPVEVfTUFYX1NJWkVgKS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiB0aGUgcXVvdGUgYnVmZmVyLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcyB1cC4gVERYLCBhcyBJIGtub3csIGlzIGFsbCBhYm91dCBoYXJkd2FyZS1iYWNrZWQgY29uZmlkZW50aWFsIGNvbXB1dGluZy4gSXQncyBJbnRlbCdzIHRlY2gsIGFuZCBpdCBuZWNlc3NpdGF0ZXMgYm90aCBzcGVjaWFsaXplZCBoYXJkd2FyZSBhbmQsIGNydWNpYWxseSwgaHlwZXJ2aXNvciBzdXBwb3J0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IGZ1enplZCBvciB0ZXN0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gVERYIGd1ZXN0IGNvZGUsIGJ5IGl0cyBuYXR1cmUsIGlzIHVzdWFsbHkgKm5vdCogcmVhY2hhYmxlIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgaGFzIFREWCBoYXJkd2FyZS4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgdGVzdGFiaWxpdHkuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgcGF0aCBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBgdGR4X2d1ZXN0X2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlciByZWFjaGVkLiBMZXQncyBzdGFydCB3aXRoIHRoYXQgYHRkeF9ndWVzdF9pbml0YCBmdW5jdGlvbiwgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MTQuODkyMDMxMTU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU0Nzg4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2d1ZXN0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRzbV9yZXBvcnRfb3BzIHRkeF90c21fb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyMy1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDI0OnN0YXRpYyBpbnQgX19pbml0IHRkeF9ndWVzdF9pbml0KHZvaWQpXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyNS17XFxuLS1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYxLX1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDYyOm1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToxNy4zODc1MTYxMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcwNzc0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2d1ZXN0X2luaXRgIGlzIGFsbCBhYm91dC4gRnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2Ygc3lzdGVtcyBwcm9ncmFtbWluZywgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGVudmlyb25tZW50LiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIHNldCB1cCB3aXRoaW4gdGhlIHNlY3VyZSBlbmNsYXZlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgYnJlYWtpbmcgZG93biBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBURFggYm9vdCBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSByb290IG9mIHRydXN0IGlzIGVzdGFibGlzaGVkLCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgcHJvdGVjdGVkIHdpdGhpbiB0aGUgZW5jbGF2ZSwgYW5kIHdoYXQgaW5pdGlhbCBzZWN1cml0eSBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFREWCBlbnZpcm9ubWVudCBpcyBicm91Z2h0IHRvIGxpZmUgYW5kIHNlY3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyMC4zNTgyOTQ3MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHQucmVwb3J0X2F0dHJfdmlzaWJsZSA9IHRkeF9yZXBvcnRfYXR0cl92aXNpYmxlLFxcbiA0MjE6XFx0XFx0LnJlcG9ydF9iaW5fYXR0cl92aXNpYmxlID0gdGR4X3JlcG9ydF9iaW5fYXR0cl92aXNpYmxlLFxcbiA0MjI6XFx0fTtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0c3RhdGljIGludCBfX2luaXQgdGR4X2d1ZXN0X2luaXQodm9pZClcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdGludCByZXQ7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG4gNDI5OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHR0ZHhfYXR0cl9ncm91cHNbMF0gPSB0ZHhfbXJfaW5pdCgpO1xcbiA0MzI6XFx0XFx0aWYgKElTX0VSUih0ZHhfYXR0cl9ncm91cHNbMF0pKVxcbiA0MzM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG4gNDM0OlxcdFxcbiA0MzU6XFx0XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDM2OlxcdFxcdGlmIChyZXQpXFxuIDQzNzpcXHRcXHRcXHRnb3RvIGRlaW5pdF9tcjtcXG4gNDM4OlxcdFxcbiA0Mzk6XFx0XFx0cXVvdGVfZGF0YV9sZW4gPSBnZXRfcXVvdGVfYnVmX3NpemUoKTtcXG4gNDQwOlxcdFxcdHF1b3RlX2RhdGEgPSBhbGxvY19xdW90ZV9idWYocXVvdGVfZGF0YV9sZW4pO1xcbiA0NDE6XFx0XFx0aWYgKCFxdW90ZV9kYXRhKSB7XFxuIDQ0MjpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBRdW90ZSBidWZmZXJcXFxcblxcXCIpO1xcbiA0NDM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNDQ0OlxcdFxcdFxcdGdvdG8gZnJlZV9taXNjO1xcbiA0NDU6XFx0XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRyZXQgPSB0c21fcmVwb3J0X3JlZ2lzdGVyKFxcdTAwMjZ0ZHhfdHNtX29wcywgTlVMTCk7XFxuIDQ0ODpcXHRcXHRpZiAocmV0KVxcbiA0NDk6XFx0XFx0XFx0Z290byBmcmVlX3F1b3RlO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZnJlZV9xdW90ZTpcXG4gNDU0OlxcdFxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gNDU1OlxcdGZyZWVfbWlzYzpcXG4gNDU2OlxcdFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDU3OlxcdGRlaW5pdF9tcjpcXG4gNDU4OlxcdFxcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYxOlxcdH1cXG4gNDYyOlxcdG1vZHVsZV9pbml0KHRkeF9ndWVzdF9pbml0KTtcXG4gNDYzOlxcdFxcbiA0NjQ6XFx0c3RhdGljIHZvaWQgX19leGl0IHRkeF9ndWVzdF9leGl0KHZvaWQpXFxuIDQ2NTpcXHR7XFxuIDQ2NjpcXHRcXHR0c21fcmVwb3J0X3VucmVnaXN0ZXIoXFx1MDAyNnRkeF90c21fb3BzKTtcXG4gNDY3OlxcdFxcdGZyZWVfcXVvdGVfYnVmKHF1b3RlX2RhdGEsIHF1b3RlX2RhdGFfbGVuKTtcXG4gNDY4OlxcdFxcdG1pc2NfZGVyZWdpc3RlcihcXHUwMDI2dGR4X21pc2NfZGV2KTtcXG4gNDY5OlxcdFxcdHRkeF9tcl9kZWluaXQodGR4X2F0dHJfZ3JvdXBzWzBdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MjAuMzU4NDU1NDMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5ODA1MDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHg4NiBDUFUgTWF0Y2hpbmcgaW4gYSBURFggR3Vlc3QgQ29udGV4dCoqXG5cbkFscmlnaHQsIEkgc2VlIHRoZSBjb2RlIGlzIGhpdHRpbmcgYHg4Nl9tYXRjaF9jcHUodGR4X2d1ZXN0X2lkcylgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4ga2lja3MgaW50byBnZWFyIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfZ3Vlc3RfaWRzYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQncyBjbGVhcmx5IGEgY3JpdGljYWwgaW5wdXQgdG8gdGhlIENQVSBtYXRjaGluZyBsb2dpYy4gQmFzZWQgb24gdGhlIG5hbWUsIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGlzIGlzIHNvbWUga2luZCBvZiBpZGVudGlmaWVyIG9yIHNldCBvZiBpZGVudGlmaWVycyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBURFggZ3Vlc3QgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgZGVmaW5pdGlvbiBhbmQgc2VlIGhvdyBpdCdzIHBvcHVsYXRlZC4gVGhpcyBmdW5jdGlvbiBjYWxsIGlzIGxpa2VseSBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIHRoZSBob3N0IHN5c3RlbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIFREWCBndWVzdCwgb3IgcGVyaGFwcyB0byBkZWZpbmUgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZ3Vlc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gbm93IGFuZCB1bmRlcnN0YW5kIHRoZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyMy4zNTY1MDg0ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Nzk4ODQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfZ3Vlc3RfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYz00MDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRkeF9taXNjX2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTAtXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jOjQxMTpzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTItXFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYy00MTQtfTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDE1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB0ZHhfZ3Vlc3RfaWRzKTtcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDE2LVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQyND1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZ3Vlc3RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jLTQyNy1cXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmM6NDI4OlxcdGlmICgheDg2X21hdGNoX2NwdSh0ZHhfZ3Vlc3RfaWRzKSlcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDI5LVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNToyNS40NTQ1MDIzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODkwNjM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggR3Vlc3QgUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgcGF0aCBoaW5nZXMgb24gdGhlIHByZXNlbmNlIG9mIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJURFggZ3Vlc3QgZW52aXJvbm1lbnRcIiB0byBtZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2Ugc29tZWhvdyAqZW11bGF0ZSogdGhpcyBmZWF0dXJlIHdpdGhpbiBRRU1VPyBJJ20gdGhpbmtpbmcgb2YgdGVzdGluZyB0aGlzIG9uIGEgbW9yZSBnZW5lcmljIHBsYXRmb3JtLCBzbyB0aGF0IGlzIGEgY3JpdGljYWwgcXVlc3Rpb24uXG5cblRoZSBkZWVwZXIgSSBnZXQgaW50byB0aGlzLCB0aGUgbW9yZSBvYnZpb3VzIGl0IGJlY29tZXM6IFREWCBndWVzdHMgYXJlIGEgaGFyZHdhcmUtYmFja2VkIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgdGhpbmcuIFlvdSBuZWVkIGEgaG9zdCBDUFUgdGhhdCBzdXBwb3J0cyBURFggYW5kIGEgaHlwZXJ2aXNvciB0aGF0J3Mgc2V0IHVwIHRvIHdvcmsgd2l0aCBpdC4gSXQncyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBjb25qdXJlIHVwIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBvciBldmVuIG9uIGEgc3RhbmRhcmQgR0NFIGluc3RhbmNlLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGhvc3QgY29uZmlndXJhdGlvbiwgd2UgYXJlIGluIGEgbm8tZ28gem9uZS5cblxuU28sIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLiBUaGF0J3MgdGhlIHNpbXBsZSBjb25jbHVzaW9uLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29uY2x1c2lvbiBpcyBzb3VuZC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2Ugc29tZXRpbWVzIHRoZXJlIGFyZSB3YXlzIHRvIGNvZXJjZSBmZWF0dXJlcywgcGFydGljdWxhcmx5IGR1cmluZyB0ZXN0aW5nLiBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55IHdheSB0byBmb3JjZSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYC4gSSByZWNhbGwgdGhlIENQVSBmZWF0dXJlIGZsYWdzIGFyZSBvZnRlbiBzZXQgcXVpdGUgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGVjdGlvbi4gU28sIGlmIHRoZSBoYXJkd2FyZSBzYXlzIG5vIFREWCwgdGhlIGZsYWcgaXMgbm90IHNldC4gV2Ugd2lsbCBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBkb25lIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6MzAuNjQzNTY4ODM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4NjkxNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlg4Nl9GRUFUVVJFX1REWF9HVUVTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTMzPXZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTQyLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExNDM6XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfR1VFU1QpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExNDQtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFx0XFx0KCA4KjMyKzIyKSAvKiBcXFwidGR4X2d1ZXN0XFxcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD0zND1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDAodW5zaWduZWQgaW50IG5yKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC0zNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjM4OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC0zOS1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIDAsIDAsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD00OD1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDEodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC01MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjUyOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC01My1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCAwLCAwLCAwKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9NjI9c3RhdGljIGlubGluZSBsb25nIGt2bV9oeXBlcmNhbGwyKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNjYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDo2NzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtNjgtXFx0XFx0cmV0dXJuIHRkeF9rdm1faHlwZXJjYWxsKG5yLCBwMSwgcDIsIDAsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD03Nz1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC04MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjgyOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC04My1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIDApO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaD05Mj1zdGF0aWMgaW5saW5lIGxvbmcga3ZtX2h5cGVyY2FsbDQodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC05Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjk4OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaC05OS1cXHRcXHRyZXR1cm4gdGR4X2t2bV9oeXBlcmNhbGwobnIsIHAxLCBwMiwgcDMsIHA0KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWNjZXB0ZWRfbWVtb3J5Lmg9OD1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NlcHRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmFjY2VwdGVkX21lbW9yeS5oLTEwLVxcdC8qIFBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeS1hY2NlcHRhbmNlIGNhbGwgZ29lcyBoZXJlICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaDoxMTpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKSB7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdW5hY2NlcHRlZF9tZW1vcnkuaC0xMi1cXHRcXHRpZiAoIXRkeF9hY2NlcHRfbWVtb3J5KHN0YXJ0LCBlbmQpKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9OTk9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsMSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMDItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTAzOlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTA0LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgMCwgMCwgMCxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTEyMz11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGwzKHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTEyNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoxMjg6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xMjktXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCAwLCAwLCAwLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg9MTQ4PXVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbDQodW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgaW4xLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTUyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oOjE1MzpcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTE1NC1cXHRcXHRyZXR1cm4gdm13YXJlX3RkeF9oeXBlcmNhbGwoY21kLCBpbjEsIDAsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0xNzM9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNSh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0xNzgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MTc5OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMTgwLVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCBpbjQsIGluNSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oPTIwMT11bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGw2KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGluMSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Ztd2FyZS5oLTIwNi1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaDoyMDc6XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMDgtXFx0XFx0cmV0dXJuIHZtd2FyZV90ZHhfaHlwZXJjYWxsKGNtZCwgaW4xLCBpbjMsIDAsIDAsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaD0yMjg9dW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsNyh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBpbjEsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXdhcmUuaC0yMzQtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmg6MjM1OlxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm13YXJlLmgtMjM2LVxcdFxcdHJldHVybiB2bXdhcmVfdGR4X2h5cGVyY2FsbChjbWQsIGluMSwgaW4zLCBpbjQsIGluNSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9NDQwPXZvaWQgZ3Vlc3RfZm9yY2VfbXRycl9zdGF0ZShzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZhciwgdW5zaWduZWQgaW50IG51bV92YXIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTQ2Mi1cXHQgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWEVOUFYpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzo0NjM6XFx0ICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy00NjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05Mzg9dm9pZCBfX2luaXQgc2VsZWN0X2lkbGVfcm91dGluZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYy05NTItXFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHg4Nl9pZGxlLCBtd2FpdF9pZGxlKTtcXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjk1MzpcXHR9IGVsc2UgaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkge1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtOTU0LVxcdFxcdHByX2luZm8oXFxcInVzaW5nIFREWCBhd2FyZSBpZGxlIHJvdXRpbmVcXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TPTEyOT1TWU1fQ09ERV9TVEFSVF9MT0NBTF9OT0FMSUdOKGlkZW50aXR5X21hcHBlZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUy0yMDQtXFx0YW5kbFxcdCQoWDg2X0NSNF9QQUUgfCBYODZfQ1I0X0xBNTcpLCAlcjEzZFxcbmFyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUzoyMDU6XFx0QUxURVJOQVRJVkUgXFxcIlxcXCIsIF9fc3RyaW5naWZ5KG9ybCAkWDg2X0NSNF9NQ0UsICVyMTNkKSwgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFxuYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TLTIwNi1cXHRtb3ZxXFx0JXIxMywgJWNyNFxcbi0tXFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWd1ZXN0L3RkeC1ndWVzdC5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdGR4X2d1ZXN0X2lkc1tdID0ge1xcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ndWVzdC90ZHgtZ3Vlc3QuYzo0MTI6XFx0WDg2X01BVENIX0ZFQVRVUkUoWDg2X0ZFQVRVUkVfVERYX0dVRVNULCBOVUxMKSxcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtZ3Vlc3QvdGR4LWd1ZXN0LmMtNDEzLVxcdHt9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTIyOS0jZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MjMwOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXFx0XFx0KCA4KjMyKzIyKSAvKiBcXFwidGR4X2d1ZXN0XFxcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMjMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTozMi45MjIyNjYyNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzYyOTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgVERYIEd1ZXN0IEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgYmVpbmcgZW5hYmxlZCBzb21ld2hlcmUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGB0ZHhfZWFybHlfaW5pdCgpYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlbiogYW5kICp3aHkqIGB0ZHhfZWFybHlfaW5pdCgpYCBpcyBiZWluZyBpbnZva2VkLiBXaGF0J3MgdGhlIHRyaWdnZXJpbmcgZXZlbnQ/IFdoYXQncyB0aGUgY2FsbCBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBjcnVjaWFsIGVuYWJsaW5nIG9mIHRoZSBURFggZ3Vlc3QgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZSBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gZnVsbHkgZ3Jhc3AgdGhlIFREWCBndWVzdCBzZXR1cC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNhbGwgaXMgbWFkZS4uLiB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyOTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTozNi4xMDk4OTg4NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDI1NTkwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2Vhcmx5X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmM9OTk5PXN0YXRpYyBpbnQgdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmUodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwMy1cXHQgKiBPbmx5IGhhbmRsZSBzaGFyZWQtXFx1MDAzZXByaXZhdGUgY29udmVyc2lvbiBoZXJlLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjEwMDQ6XFx0ICogU2VlIHRoZSBjb21tZW50IGluIHRkeF9lYXJseV9pbml0KCkuXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAwNS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTEwMTI9c3RhdGljIGludCB0ZHhfZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTYtXFx0ICogT25seSBoYW5kbGUgcHJpdmF0ZS1cXHUwMDNlc2hhcmVkIGNvbnZlcnNpb24gaGVyZS5cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDE3OlxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiB0ZHhfZWFybHlfaW5pdCgpLlxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMTgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMTE5PXN0YXRpYyBfX2luaXQgdm9pZCB0ZHhfYW5ub3VuY2Uodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzItXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6MTEzMzp2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTExMzQte1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9NTc9c3RydWN0IHZlX2luZm8ge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNjktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg6NzA6dm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtNzEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD04OT12b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTkyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtOTQtc3RhdGljIGlubGluZSB2b2lkIHRkeF9oYWx0KHZvaWQpIHsgfTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYz0yMjI9YXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgX19ub3JldHVybiB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKiByZWFsX21vZGVfZGF0YSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yNzgtXFx0LyogTmVlZGVkIGJlZm9yZSBjY19wbGF0Zm9ybV9oYXMoKSBjYW4gYmUgdXNlZCBmb3IgVERYICovXFxuYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jOjI3OTpcXHR0ZHhfZWFybHlfaW5pdCgpO1xcbmFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYy0yODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjM4LjI1MjQ2MjQ1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE0OTM5NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEVhcmx5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBUcnVzdGVkIERvbWFpbiBFeHRlbnNpb25zIChURFgpIGFyZSBpbml0aWFsaXplZCwgcGFydGljdWxhcmx5IGluIHRoZSBlYXJseSBzdGFnZXMuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHRkeF9lYXJseV9pbml0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGl0J3MgeDg2LXNwZWNpZmljIGFuZCByZWxhdGVkIHRvIENvQ28gKENvbmZpZGVudGlhbCBDb21wdXRpbmcpLCBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIG9wZXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGVhcmx5IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBURFggd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBwZXJmb3JtZWQgYXQgdGhpcyBjcml0aWNhbCBzdGFnZS4gVW5kZXJzdGFuZGluZyB0aGUgZWFybHkgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgc2VjdXJpdHkgYW5kIG9wZXJhdGlvbmFsIGFzcGVjdHMgb2YgVERYLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo0Mi40Njc0MDQ2MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMzOlxcdHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXFxuMTEzNDpcXHR7XFxuMTEzNTpcXHRcXHR1NjQgY2NfbWFzaztcXG4xMTM2OlxcdFxcdHUzMiBlYXgsIHNpZ1szXTtcXG4xMTM3OlxcdFxcbjExMzg6XFx0XFx0Y3B1aWRfY291bnQoVERYX0NQVUlEX0xFQUZfSUQsIDAsIFxcdTAwMjZlYXgsIFxcdTAwMjZzaWdbMF0sIFxcdTAwMjZzaWdbMl0sICBcXHUwMDI2c2lnWzFdKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0aWYgKG1lbWNtcChURFhfSURFTlQsIHNpZywgc2l6ZW9mKHNpZykpKVxcbjExNDE6XFx0XFx0XFx0cmV0dXJuO1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4xMTQ2OlxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHQvKiBDb25maWd1cmUgdGhlIFREICovXFxuMTE1MTpcXHRcXHR0ZHhfc2V0dXAoXFx1MDAyNmNjX21hc2spO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHRjY19zZXRfbWFzayhjY19tYXNrKTtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0LypcXG4xMTU2OlxcdFxcdCAqIEFsbCBiaXRzIGFib3ZlIEdQQSB3aWR0aCBhcmUgcmVzZXJ2ZWQgYW5kIGtlcm5lbCB0cmVhdHMgc2hhcmVkIGJpdFxcbjExNTc6XFx0XFx0ICogYXMgZmxhZywgbm90IGFzIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcy5cXG4xMTU4OlxcdFxcdCAqXFxuMTE1OTpcXHRcXHQgKiBBZGp1c3QgcGh5c2ljYWwgbWFzayB0byBvbmx5IGNvdmVyIHZhbGlkIEdQQSBiaXRzLlxcbjExNjA6XFx0XFx0ICovXFxuMTE2MTpcXHRcXHRwaHlzaWNhbF9tYXNrIFxcdTAwMjY9IGNjX21hc2sgLSAxO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHQvKlxcbjExNjQ6XFx0XFx0ICogVGhlIGtlcm5lbCBtYXBwaW5nIHNob3VsZCBtYXRjaCB0aGUgVERYIG1ldGFkYXRhIGZvciB0aGUgcGFnZS5cXG4xMTY1OlxcdFxcdCAqIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoKSBjYW4gdG91Y2ggbWVtb3J5ICphZGphY2VudCogdG8gdGhhdCB3aGljaCBpc1xcbjExNjY6XFx0XFx0ICogb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgY2FuIGNhdGNoIGV2ZW4gX21vbWVudGFyeV8gbWlzbWF0Y2hlcy4gIEJhZFxcbjExNjc6XFx0XFx0ICogdGhpbmdzIGhhcHBlbiBvbiBtaXNtYXRjaDpcXG4xMTY4OlxcdFxcdCAqXFxuMTE2OTpcXHRcXHQgKiAgIC0gUHJpdmF0ZSBtYXBwaW5nID1cXHUwMDNlIFNoYXJlZCBQYWdlICA9PSBHdWVzdCBzaHV0ZG93blxcbjExNzA6XFx0ICAgICAgICAgKiAgIC0gU2hhcmVkIG1hcHBpbmcgID1cXHUwMDNlIFByaXZhdGUgUGFnZSA9PSBSZWNvdmVyYWJsZSAjVkVcXG4xMTcxOlxcdFxcdCAqXFxuMTE3MjpcXHRcXHQgKiBndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxcbjExNzM6XFx0XFx0ICogc2hhcmVkPVxcdTAwM2Vwcml2YXRlIGJlZm9yZSB0aGUgbWFwcGluZyBiZWNvbWVzIHByaXZhdGUuXFxuMTE3NDpcXHRcXHQgKlxcbjExNzU6XFx0XFx0ICogZ3Vlc3QuZW5jX3N0YXR1c19jaGFuZ2VfZmluaXNoKCkgY29udmVydHMgdGhlIHBhZ2UgZnJvbVxcbjExNzY6XFx0XFx0ICogcHJpdmF0ZT1cXHUwMDNlc2hhcmVkIGFmdGVyIHRoZSBtYXBwaW5nIGJlY29tZXMgcHJpdmF0ZS5cXG4xMTc3OlxcdFxcdCAqXFxuMTE3ODpcXHRcXHQgKiBJbiBib3RoIGNhc2VzIHRoZXJlIGlzIGEgdGVtcG9yYXJ5IHNoYXJlZCBtYXBwaW5nIHRvIGEgcHJpdmF0ZSBwYWdlLFxcbjExNzk6XFx0XFx0ICogd2hpY2ggY2FuIHJlc3VsdCBpbiBhICNWRS4gIEJ1dCwgdGhlcmUgaXMgbmV2ZXIgYSBwcml2YXRlIG1hcHBpbmcgdG9cXG4xMTgwOlxcdFxcdCAqIGEgc2hhcmVkIHBhZ2UuXFxuMTE4MTpcXHRcXHQgKi9cXG4xMTgyOlxcdFxcdHg4Nl9wbGF0Zm9ybS5ndWVzdC5lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlID0gdGR4X2VuY19zdGF0dXNfY2hhbmdlX3ByZXBhcmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjQyLjQ2OTI3OTU3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTgxNTQ4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggR3Vlc3QgRGV0ZWN0aW9uIGFuZCBIeXBlcmNhbGwgRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNoZWNraW5nIGZvciBURFggc3VwcG9ydCB1c2luZyBgY3B1aWRfY291bnRgIGFuZCBjb21wYXJpbmcgYWdhaW5zdCBgVERYX0lERU5UYC4gVGhpcyByZWxpZXMgb24gc3BlY2lmaWMgQ1BVSUQgdmFsdWVzIGJlaW5nIHJldHVybmVkLCB3aGljaCB3ZSAqY2FuKiBzZXQgaW4gUUVNVS4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSB0aGUgVERYIGh5cGVyY2FsbHMgdGhlbXNlbHZlcz8gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGB0ZHhfZ2V0X21heF9xdW90ZV9zaXplYCwgd2hpY2ggdWx0aW1hdGVseSBjYWxscyBgdGRnX3ZtX3JkYCB3aXRoIGBURENTX1FVT1RFX01BWF9TSVpFYC4gQW5kIGB0ZGdfdm1fcmRgPyBUaGF0IGV4ZWN1dGVzIGEgVERDQUxMIGluc3RydWN0aW9uIOKAkyB0aG9zZSBgLmJ5dGUgMHg2NiwweDBmLDB4MDEsMHhjY2AgYnl0ZXMuXG5cbk5vdywgaWYgdGhlIGh5cGVydmlzb3IgaXNuJ3QgVERYLWF3YXJlLCBleGVjdXRpbmcgdGhhdCBURENBTEwgaXMgZ29pbmcgdG8gY2F1c2UgYSAjVUQgKEludmFsaWQgT3Bjb2RlKSBvciBzb21lIHNpbWlsYXIgZXhjZXB0aW9uLiBCYXNpY2FsbHksIHRoZSBrZXJuZWwgY3Jhc2hlcyBvciBmYWlscyB0byBib290IGlmIGl0IGJlbGlldmVzIGl0J3MgYSBURFggZ3Vlc3QsIGJ1dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGh5cGVyY2FsbC5cblxuV2FpdCBhIHNlY29uZC4uLiBjYW4gUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgVERDQUxMPyBJIGtub3cgd2UgY2FuIHNldCB0aGUgQ1BVSUQgdmFsdWVzLCBidXQgaXMgdGhlcmUgYWN0dWFsIGh5cGVyY2FsbCBzdXBwb3J0PyBObywgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGRvIHRoYXQgdW5sZXNzIGl0J3MgcnVubmluZyBvbiBhIGhvc3Qgd2l0aCBURFgtY2FwYWJsZSBoYXJkd2FyZSBhbmQgS1ZNIFREWCBzdXBwb3J0LiBUaGF0J3MgKm5vdCogdGhlIHVzdWFsIEdDRS9RRU1VIGVudmlyb25tZW50IEknbSBkZWFsaW5nIHdpdGguIFNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIFREWCBndWVzdCBjb2RlIGlzbid0IGV2ZW4gcmVhY2hhYmxlIG9yIGdldHRpbmcgZXhlY3V0ZWQgaW4gYSB0eXBpY2FsIEdDRS9RRU1VIHNldHVwLlxuXG5MZXQgbWUganVzdCB2ZXJpZnkgcXVpY2tseSB0aGF0IGB0ZGdfdm1fcmRgIGlzICpkZWZpbml0ZWx5KiB1c2luZyBhIFREQ0FMTC4gTmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDU6NDkuMDUwODMxODk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc4NTgxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkZ192bV9yZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTgxLS8qIFJlYWQgVEQtc2NvcGVkIG1ldGFkYXRhICovXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODI6c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy04My17XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0yMTA9dTMyIHRkeF9nZXRfbWF4X3F1b3RlX3NpemUodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxMy1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyMTQ6XFx0cmV0ID0gdGRnX3ZtX3JkKFREQ1NfUVVPVEVfTUFYX1NJWkUsIFxcdTAwMjZ2YWwpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTIxNS1cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTI3ND1zdGF0aWMgdm9pZCBkaXNhYmxlX3NlcHRfdmUodTY0IHRkX2F0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODAtXFx0LyogSXMgdGhpcyBURCBhbGxvd2VkIHRvIGRpc2FibGUgU0VQVCAjVkUgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyODE6XFx0dGRnX3ZtX3JkKFREQ1NfQ09ORklHX0ZMQUdTLCBcXHUwMDI2Y29uZmlnKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yODItXFx0aWYgKCEoY29uZmlnIFxcdTAwMjYgVERDU19DT05GSUdfRkxFWElCTEVfUEVORElOR19WRSkpIHtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTI5NS1cXHQvKiBDaGVjayBpZiBTRVBUICNWRSBoYXMgYmVlbiBkaXNhYmxlZCBiZWZvcmUgdXMgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoyOTY6XFx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXFx1MDAyNmNvbnRyb2xzKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0yOTctXFx0aWYgKGNvbnRyb2xzIFxcdTAwMjYgVERfQ1RMU19QRU5ESU5HX1ZFX0RJU0FCTEUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0zMjE9c3RhdGljIHZvaWQgZW5hYmxlX2NwdV90b3BvbG9neV9lbnVtZXJhdGlvbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI1LVxcdC8qIEhhcyB0aGUgVk1NIHByb3ZpZGVkIGEgdmFsaWQgdG9wb2xvZ3kgY29uZmlndXJhdGlvbj8gKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzozMjY6XFx0dGRnX3ZtX3JkKFREQ1NfVE9QT0xPR1lfRU5VTV9DT05GSUdVUkVELCBcXHUwMDI2Y29uZmlndXJlZCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMzI3LVxcdGlmICghY29uZmlndXJlZCkge1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9MTExOT1zdGF0aWMgX19pbml0IHZvaWQgdGR4X2Fubm91bmNlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTI4LVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjExMjk6XFx0dGRnX3ZtX3JkKFREQ1NfVERfQ1RMUywgXFx1MDAyNmNvbnRyb2xzKTtcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy0xMTMwLVxcdHRkeF9kdW1wX3RkX2N0bHMoY29udHJvbHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1MS4yMjk0MTkzNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NTk0Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHdvcms6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBgdGRnX3ZtX3JkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcIkxldCdzIHJlYWQgYHRkZ192bV9yZGAuXCIgT2theSwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgdGRnX3ZtX3JkYC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJ20gYWxyZWFkeSBtYWtpbmcgc29tZSBhc3N1bXB0aW9ucy4gXCJ0ZGdcIiBsaWtlbHkgcmVsYXRlcyB0byBhIHNwZWNpZmljIHRhcmdldCBvciBkYXRhIGdlbmVyYXRpb24sIGxpa2VseSBzb21lIHRhcmdldCBkYXRhIGdlbmVyYXRpb24uIFwidm1cIiBwcm9iYWJseSBtZWFucyBhIHZpcnR1YWwgbWFjaGluZS4gQW5kIFwicmRcIiBjb3VsZCBzdGFuZCBmb3IgXCJyZWFkXCIsIGltcGx5aW5nIGl0J3MgYSBmaWxlLCBjb25maWd1cmF0aW9uLCBvciBzb21lIGRhdGEgc3BlY2lmaWMgdG8gcmVhZGluZyBhbmQgdXRpbGl6aW5nIGEgdmlydHVhbCBtYWNoaW5lIHNldHVwIHJlbGF0ZWQgdG8gdGFyZ2V0IGRhdGEgZ2VuZXJhdGlvbi4gSXMgaXQgYSBjb25maWd1cmF0aW9uPyBBIHNjcmlwdD8gQSBsb2c/IEFuIGlucHV0IGZpbGU/IEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYXJ0aWZhY3QgKmlzKiBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuIFRoZSBjb250ZXh0IGlzIHZpdGFsOyBhbSBJIGRlYnVnZ2luZz8gSW50ZWdyYXRpbmc/IFRlc3Rpbmc/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1NC41MTUzNjYyNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvY29jby90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIHRkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRpZiAoX190ZGNhbGxfcmV0KGZuLCBhcmdzKSlcXG4gIDc4OlxcdFxcdFxcdHBhbmljKFxcXCJURENBTEwgJWxsZCBmYWlsZWQgKEJ1Z2d5IFREWCBtb2R1bGUhKVxcXFxuXFxcIiwgZm4pO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHQvKiBSZWFkIFRELXNjb3BlZCBtZXRhZGF0YSAqL1xcbiAgODI6XFx0c3RhdGljIGlubGluZSB1NjQgdGRnX3ZtX3JkKHU2NCBmaWVsZCwgdTY0ICp2YWx1ZSlcXG4gIDgzOlxcdHtcXG4gIDg0OlxcdFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG4gIDg1OlxcdFxcdFxcdC5yZHggPSBmaWVsZCxcXG4gIDg2OlxcdFxcdH07XFxuICA4NzpcXHRcXHR1NjQgcmV0O1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHRyZXQgPSBfX3RkY2FsbF9yZXQoVERHX1ZNX1JELCBcXHUwMDI2YXJncyk7XFxuICA5MDpcXHRcXHQqdmFsdWUgPSBhcmdzLnI4O1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA1OjU0LjUxNTQ2MDQ1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg5Mzc1ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIGBfX3RkY2FsbF9yZXRgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGBfX3RkY2FsbF9yZXRgLi4udGhhdCBpbW1lZGlhdGVseSBmbGFncyBhc3NlbWJseS4gT2YgY291cnNlLiBJdCBoYXMgdG8gYmUuIFRoZXJlJ3Mgc2ltcGx5IG5vIG90aGVyIHdheSB0byBvcmNoZXN0cmF0ZSB0aGUga2luZCBvZiBsb3ctbGV2ZWwgcmV0dXJuIHBhdGggbWFuaXB1bGF0aW9uIG5lZWRlZCBmb3IgYSBzeXN0ZW0tY2FsbC1iYXNlZCB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb24gd2l0aG91dCBkcm9wcGluZyBkb3duIHRvIHRoZSBiYXJlIG1ldGFsLiBXZSdyZSB0YWxraW5nIGFib3V0IG1hbmFnaW5nIHRoZSBzdGFjayBwb2ludGVyLCBwb3RlbnRpYWxseSByZXN0b3JpbmcgcmVnaXN0ZXJzLCBhbmQgZW5zdXJpbmcgYSBzZWFtbGVzcyBjb250ZXh0IHN3aXRjaCBiYWNrIHRvIHRoZSBjYWxsaW5nIHRocmVhZC4gVGhlIGNvbXBpbGVyLCBldmVuIHdpdGggYWdncmVzc2l2ZSBpbmxpbmluZywgd291bGRuJ3QgYmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUgb3B0aW1hbCBzZXF1ZW5jZSBhbmQgaGFuZGxlIGFsbCB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGluIGEgdHJ1bHkgZWZmaWNpZW50IGFuZCByZWxpYWJsZSBtYW5uZXIuIEFzc2VtYmx5IGdpdmVzIHVzIHRoZSBwcmVjaXNlIGNvbnRyb2wgd2UgZGVtYW5kLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgdG9vLiBJdOKAmWxsIG1ha2UgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYWJvdXQgQUJJIGFuZCByZWdpc3RlciB1c2FnZTsgSSdsbCBhbHNvIGhhdmUgdG8gY29uc2lkZXIgYW55IGNhbGxpbmcgY29udmVudGlvbnMgYW5kIGNhbGxpbmcgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNTo1Ny42MDQ4Mzg0ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQzMTkwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190ZGNhbGxfcmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TPTI3PVNZTV9GVU5DX0VORChfX3RkY2FsbClcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTI5LS8qXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzA6ICogX190ZGNhbGxfcmV0KCkgLSBVc2VkIGJ5IFREWCBndWVzdHMgdG8gcmVxdWVzdCBzZXJ2aWNlcyBmcm9tIHRoZSBURFhcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy0zMS0gKiBtb2R1bGUgKGRvZXMgbm90IGluY2x1ZGUgVk1NIHNlcnZpY2VzKSB1c2luZyBURENBTEwgaW5zdHJ1Y3Rpb24sIHdpdGhcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTMzLSAqXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlM6MzQ6ICogX190ZGNhbGxfcmV0KCkgZnVuY3Rpb24gQUJJOlxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TLTM1LSAqXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUy00Mi0gKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZGNhbGwuUzo0MzpTWU1fRlVOQ19TVEFSVChfX3RkY2FsbF9yZXQpXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDQtXFx0VERYX01PRFVMRV9DQUxMIGhvc3Q9MCByZXQ9MVxcbmFyY2gveDg2L2NvY28vdGR4L3RkY2FsbC5TOjQ1OlNZTV9GVU5DX0VORChfX3RkY2FsbF9yZXQpXFxuYXJjaC94ODYvY29jby90ZHgvdGRjYWxsLlMtNDYtXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz03NT1zdGF0aWMgaW5saW5lIHZvaWQgdGRjYWxsKHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncylcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03Ni17XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6Nzc6XFx0aWYgKF9fdGRjYWxsX3JldChmbiwgYXJncykpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzgtXFx0XFx0cGFuaWMoXFxcIlREQ0FMTCAlbGxkIGZhaWxlZCAoQnVnZ3kgVERYIG1vZHVsZSEpXFxcXG5cXFwiLCBmbik7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz04Mj1zdGF0aWMgaW5saW5lIHU2NCB0ZGdfdm1fcmQodTY0IGZpZWxkLCB1NjQgKnZhbHVlKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtODgtXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6ODk6XFx0cmV0ID0gX190ZGNhbGxfcmV0KFRER19WTV9SRCwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTkwLVxcdCp2YWx1ZSA9IGFyZ3Mucjg7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4Lmg9MTUwPXU2NCBfX3RkY2FsbCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaDoxNTE6dTY0IF9fdGRjYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaC0xNTItdTY0IF9fdGRjYWxsX3NhdmVkX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowNjowMC4wMTkxODM1NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxOTMxMjkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipURFggR3Vlc3QgQ29kZSBGdXp6YWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgVERYX01PRFVMRV9DQUxMYCBtYWNyby4gSXQgdXNlcyB0aGUgYHRkY2FsbGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgVERYIGd1ZXN0LXNwZWNpZmljIGNvbXBvbmVudC4gTm93LCBrbm93aW5nIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZSwgc3RhbmRhcmQgUUVNVSBpbnN0YWxsYXRpb25zIGFyZSBub3QgY29uZmlndXJlZCB0byBlbXVsYXRlIFREWCBndWVzdHMuIFRoYXQncyBiZWNhdXNlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBob3N0IGhhcmR3YXJlIGFuZCBLVk0gc3VwcG9ydCwgc28gaXQncyBhIG5vbi1zdGFydGVyIGluIGEgdmFuaWxsYSBzZXR1cC4gQ29uc2VxdWVudGx5LCB0aGlzIGBURFhfTU9EVUxFX0NBTExgIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHVuZnV6emFibGUgdW5kZXIgdGhvc2UgY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuQnV0LCBhcyBhIGdvb2QgcHJhY3RpY2UsIEkgd2FudCB0byBjb25maXJtIHRoZXJlJ3Mgbm8gc3VidGxlIHBhdGggdG8gdGhpcyBjb2RlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSBzZWUgdGhhdCBgdGR4X2d1ZXN0X2luaXRgIGlzIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSXQgY2hlY2tzIGB4ODZfbWF0Y2hfY3B1KHRkeF9ndWVzdF9pZHMpYC4gVGhhdCBjaGVjayByZWxhdGVzIHRvIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgLiBJIHJlY2FsbCB0aGF0IGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIGdldHMgc2V0IHdpdGhpbiBgdGR4X2Vhcmx5X2luaXRgLiBBbmQgdGhlIGNydWNpYWwgcGFydCBpbiBgdGR4X2Vhcmx5X2luaXRgIGlzIGEgYGNwdWlkX2NvdW50KFREWF9DUFVJRF9MRUFGX0lELCAuLi4pYCBjaGVjay5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSHlwb3RoZXRpY2FsbHksIGlmIHdlIGNvdWxkIHNvbWVob3cgbW9jayB0aGUgQ1BVSUQgdmFsdWVzIGluIFFFTVUsIHdlIG1pZ2h0IGJlIGFibGUgdG8gdHJpY2sgYHRkeF9lYXJseV9pbml0YCBpbnRvIHNldHRpbmcgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAuIEhvd2V2ZXIsIGV2ZW4gaWYgd2Ugd2VyZSBzdWNjZXNzZnVsIGluIHNldHRpbmcgdGhhdCBmbGFnIGFuZCB0cmlja2luZyB0aGUgbW9kdWxlIGluaXQsIHRoZSBmdW5jdGlvbiBgdGR4X3NldHVwYCBpcyBhbHdheXMgY2FsbGVkLCB3aGljaCBhbHNvIGNhbGxzIHRoZSBgVERDQUxMYCBpbnN0cnVjdGlvbnMuIE5vdywgdW5sZXNzIHRoZSBoeXBlcnZpc29yICphY3R1YWxseSogc3VwcG9ydHMgYFREQ0FMTGAsIHRoZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgI1VEIChpbnZhbGlkIG9wY29kZSkgZXhjZXB0aW9uIGFuZCBsaWtlbHkgY3Jhc2ggdGhlIGtlcm5lbCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcy4gVGhpcyBtZWFucyB3ZSdkIG5ldmVyIGV2ZW4gZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UgY291bGQgZnV6eiBhbnl0aGluZywgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkbid0IGV2ZW4gYm9vdC4gU28sIG1vY2tpbmcgQ1BVSUQgd291bGRuJ3QgZ2V0IHVzIGFyb3VuZCBpdC5cblxuVGh1cywgZ2l2ZW4gdGhlIG5lY2Vzc2l0eSBmb3IgZ2VudWluZSBoeXBlcnZpc29yIHN1cHBvcnQgZm9yIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24sIGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggYHRkeF9ndWVzdF9pbml0YCwgYW5kIGJ5IGV4dGVuc2lvbiwgYFREWF9NT0RVTEVfQ0FMTGAgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IGEgY3Jhc2guIE15IGZpbmFsIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGNvbmNsdXNpb24gaGluZ2VzIG9uIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCBmb3IgVERYLCBwYXJ0aWN1bGFybHkgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgYFREQ0FMTGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG1pc3NpbmcgaW4gc3RhbmRhcmQgUUVNVSBhbmQgR0NFIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NzEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjA2OjA4LjUzODQ5OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZ3Vlc3QgZHJpdmVyLiBURFggZ3Vlc3QgY29kZSByZWxpZXMgb24gdGhlIFREQ0FMTCBpbnN0cnVjdGlvbiBhbmQgc3BlY2lmaWMgaGFyZHdhcmUvaHlwZXJ2aXNvciBzdXBwb3J0IHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gQXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgVERYIENQVSBmZWF0dXJlIHdvdWxkIHJlc3VsdCBpbiBhICNVRCBleGNlcHRpb24gZHVyaW5nIGVhcmx5IGJvb3Qgd2hlbiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgVERDQUxMcy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGd1ZXN0IGRyaXZlci4gVERYIGd1ZXN0IGNvZGUgcmVsaWVzIG9uIHRoZSBURENBTEwgaW5zdHJ1Y3Rpb24gYW5kIHNwZWNpZmljIGhhcmR3YXJlL2h5cGVydmlzb3Igc3VwcG9ydCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIFREWCBDUFUgZmVhdHVyZSB3b3VsZCByZXN1bHQgaW4gYSAjVUQgZXhjZXB0aW9uIGR1cmluZyBlYXJseSBib290IHdoZW4gdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBleGVjdXRlIFREQ0FMTHMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqq45p[1] Phase: Running StartedAt: 2026-07-30 19:06:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq45p[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 19:06:16 +0000 UTC FinishedAt: 2026-07-30 19:06:22 +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,}