Name: series-workflowzqw22 Phase: Failed StartedAt: 2026-07-01 07:01:57 +0000 UTC FinishedAt: 2026-07-01 07:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqw22[0] Phase: Succeeded StartedAt: 2026-07-01 07:01:57 +0000 UTC FinishedAt: 2026-07-01 07:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqw22[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 07:01:57 +0000 UTC FinishedAt: 2026-07-01 07:17:17 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyAmIzM5O2ludCByZWFzb24mIzM5OyB0byAmIzM5O2VudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uJiMzOTssIGV4dHJhY3RpbmcgJiMzOTtza2lwX2J1ZGR5X3BhZ2VzJiMzOTssIG1vdmluZyAjaWZkZWZzKSwgdHJhY2Vwb2ludCB1cGRhdGVzLCBhbmQgbWlub3IgZGVidWdmcyBvdXRwdXQgZm9ybWF0dGluZyBjaGFuZ2VzIChhZGRpbmcgYSBuZXdsaW5lIHRvIGEgc2ltcGxlIGF0dHJpYnV0ZSkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4gYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gaW50IGdldF9od3BvaXNvbl9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgKmh1Z2V0bGIsIGJvb2wgdW5wb2lzb24pO1xuIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7XG4mIzQzO3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbiYjNDM7XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XG5AQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG4tXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgJiM0Mzs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0Ym9vbCBhbGxvd2VkX2ZhbGxiYWNrID0gZmFsc2U7XG4gXG5AQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpO1xuIGludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpO1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsXG4tXHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4mIzQzO1x0XHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcbkBAIC03Nyw3ICYjNDM7NzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9XG4gc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsXG4gXHRcdGZyZWVfZm9saW9fdCBmcmVlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuJiM0MztcdFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuIFx0eyByZXR1cm4gLUVOT1NZUzsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxuIFx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHtcbiBcdE1SX0xPTkdURVJNX1BJTixcbiBcdE1SX0RFTU9USU9OLFxuIFx0TVJfREFNT04sXG4mIzQzO1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGVfbW9kZS5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHBhZ2Vfb3duZXJfaW5pdGVkO1xuQEAgLTE0LDcgJiM0MzsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4mIzQzO2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xuQEAgLTQzLDcgJiM0Mzs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuaW5kZXggY2QwMWRkN2IzNjQwZGMuLjE1ZWUyZWYyMDFiNWY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbkBAIC0yMyw3ICYjNDM7MjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwmIzM0O2NvbnRpZ19yYW5nZVwmIzM0OylcdFx0XHRcXFxuIFx0RU0oIE1SX0xPTkdURVJNX1BJTixcdFwmIzM0O2xvbmd0ZXJtX3BpblwmIzM0OylcdFx0XHRcXFxuIFx0RU0oIE1SX0RFTU9USU9OLFx0XCYjMzQ7ZGVtb3Rpb25cJiMzNDspXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXG4mIzQzO1x0RU0oIE1SX0RBTU9OLFx0XHRcJiMzNDtkYW1vblwmIzM0OylcdFx0XHRcXFxuJiM0MztcdEVNZShNUl9ORVZFUixcdFx0XCYjMzQ7bmV2ZXJfbWlncmF0ZWRcJiMzNDspXG4gXG4gLypcbiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlXG5AQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuIFx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRcdF9fZmllbGQoXHR1bnNpZ25lZCBsb25nLFx0XHR0aHBfc3BsaXQpXG4gXHRcdF9fZmllbGQoXHR1bnNpZ25lZCBsb25nLFx0XHRsYXJnZV9mb2xpb19zcGxpdClcbiBcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9tb2RlLFx0bW9kZSlcbi1cdFx0X19maWVsZChcdGludCxcdFx0XHRyZWFzb24pXG4mIzQzO1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyAmIzQzOzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcbiBcbi1cdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxuJiM0MztcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1MobW9kZSwgcmVhc29uKSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpXG4tXHRcdF9fZmllbGQoaW50LCByZWFzb24pXG4mIzQzO1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICYjNDM7NzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbiBcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4mIzQzO3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbiYjNDM7XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuLVx0XHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZHN0O1xuIFx0aW50IHJjID0gLUVBR0FJTjtcbkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbiBcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcbiB7XG5AQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqZHN0X2ZvbGlvcyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgJiM0MzsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi1cdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsIGludCBucl9wYXNzKVxuIHtcbkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcbiB7XG5AQCAtMjA4OCw3ICYjNDM7MjA4OCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gICovXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICYjNDM7MzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbiYjNDM7XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXG4gXHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIH1cbiBcbi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuJiM0MzsgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcbiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLFxuJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuJiM0MztcdFx0KnBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgJiM0Mzs0ODQsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzOSwxMCAmIzQzOzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRlbHNlXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCYjMzQ7KTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcblwmIzM0OyxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4mIzQzO1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCYjMzQ7KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcblwmIzM0Oyxcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiBcdFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcbiBcdH1cbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyAmIzQzOzcyMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICYjNDM7ODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICYjNDM7ODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTMzLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTU1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X2hhbmRsZXNcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y291bnRfdGhyZXNob2xkXCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgbWF4X3BmbiA9IE5vbmVcbiAgICAgcF9vcHMgPSBOb25lXG4gICAgIG1pZ3JhdGVfcmVhc29uX25hbWVzID0gTm9uZVxuJiM0MzsgICAgbXJfbmV2ZXIgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcbiAgICAgICAgIHN1cGVyKER1bXBQYWdlT3duZXIsIHNlbGYpLl9faW5pdF9fKFwmIzM0O2x4LWR1bXAtcGFnZS1vd25lclwmIzM0OywgZ2RiLkNPTU1BTkRfU1VQUE9SVClcbkBAIC02NSw2ICYjNDM7NjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCYjMzQ7bWF4X3BmblwmIzM0OykpXG4gICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwmIzM0O3BhZ2VfZXh0X3NpemVcJiMzNDspKVxuICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspXG4mIzQzOyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzOTtNUl9ORVZFUiYjMzk7KSlcbiBcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxuQEAgLTEzOCw3ICYjNDM7MTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBlbHNlOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgmIzM5O3BhZ2UgbGFzdCBmcmVlIHN0YWNrIHRyYWNlOlxcbiYjMzk7KVxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcJiMzNDtmcmVlX2hhbmRsZVwmIzM0O10pXG4tICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMTpcbiYjNDM7ICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSBzZWxmLm1yX25ldmVyOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgmIzM5O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSlcbiBcbiAgICAgZGVmIHJlYWRfcGFnZV9vd25lcihzZWxmKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLAogYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7CiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7CiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTsKIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlOwogdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpOwpAQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sCi0JCQkJCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKQomIzQzOwkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogCkBAIC05NTYsNyAmIzQzOzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gbW9kaWZpZWRfbWFzazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTsKIApAQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7CiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLAotCQkgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAomIzQzOwkJICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpOwogc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpOwogYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpOwpAQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9CiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywKIAkJZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiAJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHsKIAlNUl9MT05HVEVSTV9QSU4sCiAJTVJfREVNT1RJT04sCiAJTVJfREFNT04sCiYjNDM7CU1SX05FVkVSLAkJLyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqLwogCU1SX1RZUEVTCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oCmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlX21vZGUuaCZndDsKIAogI2lmZGVmIENPTkZJR19QQUdFX09XTkVSCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7CkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLAogZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogCQkJaW50IG5ld19vcmRlcik7CiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpOwotZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7CiYjNDM7ZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkJcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpOwpAQCAtNDMsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cGFnZV9vd25lcl9pbml0ZWQpKQogCQlfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTsKQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAppbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgKQEAgLTIzLDcgJiM0MzsyMyw4IEBACiAJRU0oIE1SX0NPTlRJR19SQU5HRSwJJiMzNDtjb250aWdfcmFuZ2UmIzM0OykJCQlcCiAJRU0oIE1SX0xPTkdURVJNX1BJTiwJJiMzNDtsb25ndGVybV9waW4mIzM0OykJCQlcCiAJRU0oIE1SX0RFTU9USU9OLAkmIzM0O2RlbW90aW9uJiMzNDspCQkJXAotCUVNZShNUl9EQU1PTiwJCSYjMzQ7ZGFtb24mIzM0OykKJiM0MzsJRU0oIE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQkJCVwKJiM0MzsJRU1lKE1SX05FVkVSLAkJJiMzNDtuZXZlcl9taWdyYXRlZCYjMzQ7KQogCiAvKgogICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZQpAQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsCiAJCSB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LAotCQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCwKIAkJdGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSwKQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQl0aHBfc3BsaXQpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQlsYXJnZV9mb2xpb19zcGxpdCkKIAkJX19maWVsZCgJZW51bSBtaWdyYXRlX21vZGUsCW1vZGUpCi0JCV9fZmllbGQoCWludCwJCQlyZWFzb24pCiYjNDM7CQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfcmVhc29uLAlyZWFzb24pCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LAogCi0JVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CVRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSwKIAogCVRQX0FSR1MobW9kZSwgcmVhc29uKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpCi0JCV9fZmllbGQoaW50LCByZWFzb24pCiYjNDM7CQlfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC03MTgyLDcgJiM0Mzs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19wdXQoZm9saW8pOwogfQogCi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAotCQlpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KQogewogCXN0cnVjdCBmb2xpbyAqZHN0OwogCWludCByYyA9IC1FQUdBSU47CkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgewogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJCSAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkJICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKQogewpAQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJaW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLApAQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcywKICAqLwogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAJCW5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLAotCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpCiB7CkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAKIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLAogCQlzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpCiB7CkBAIC0yMDg4LDcgJiM0MzsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKICAqLwogaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIHsKIAlpbnQgcmMsIHJjX2dhdGhlcjsKIAlpbnQgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMzksMTMgJiM0MzszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUiwKIAkJCQkgICB0c19uc2VjLCBjdXJyZW50LSZndDtwaWQsIGN1cnJlbnQtJmd0O3RnaWQsCiAJCQkJICAgY3VycmVudC0mZ3Q7Y29tbSk7CiAJaW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxICZsdDsmbHQ7IG9yZGVyKTsKIH0KIAotdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjsKQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLgomIzQzOyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1cwomIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyCiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQomIzQzOwkJKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM5LDEwICYjNDM7NTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCQkJbmFtZSk7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAomIzQzOwkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAocmV0ICZndDs9IGNvdW50KQogCQlnb3RvIGVycjsKIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwpAQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJZWxzZQogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXG4mIzM0Oyk7CiAKLQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XG4mIzM0OywKJiM0MzsJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcbiYjMzQ7LAogCQkgcGFnZV9vd25lci0mZ3Q7b3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssICZhbXA7Z2ZwX21hc2ssCiAJCSBwYWdlX293bmVyLSZndDtwaWQsIHBhZ2Vfb3duZXItJmd0O3RnaWQsIHBhZ2Vfb3duZXItJmd0O2NvbW0sCi0JCSBwYWdlX293bmVyLSZndDt0c19uc2VjLCBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwomIzQzOwkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMpOwogCiAJaGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItJmd0O2hhbmRsZSk7CiAJaWYgKCFoYW5kbGUpCkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoIWhhbmRsZSkgewogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXG4mIzM0Oyk7CiAJfSBlbHNlIHsKLQkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcbiYjMzQ7LAotCQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkKTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcbiYjMzQ7LAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCwKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiAJCXN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7CiAJfQogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpCiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKIAkJCQkJCSAgIGN1cnJlbnQtJmd0O3RnaWQsIGN1cnJlbnQtJmd0O2NvbW0pOwogCQkJY291bnQmIzQzOyYjNDM7OwogZXh0X3B1dF9jb250aW51ZToKQEAgLTg4Nyw3ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpCiAJcmV0dXJuIHN0YWNrOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7CiAKIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewpAQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAlucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZCgmYW1wO3N0YWNrX3JlY29yZC0mZ3Q7Y291bnQpIC0gMTsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgJmFtcDsmYW1wOwotCSAgICAobnJfYmFzZV9wYWdlcyAmbHQ7IDEgfHwgbnJfYmFzZV9wYWdlcyAmbHQ7IHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSkKJiM0MzsJICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZXNfdGhyZXNob2xkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7CkBAIC05MjYsMTYgJiM0Mzs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0gewogCS5zdGFydAk9IHN0YWNrX3N0YXJ0LAogCS5uZXh0CT0gc3RhY2tfbmV4dCwKIAkuc3RvcAk9IHN0YWNrX3N0b3AsCiAJLnNob3cJPSBzdGFja19wcmludAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cGFnZV9vd25lcl9zdGFja19vcCwKJiM0MzsJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtzdGFja19vcCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpOwogCiAJaWYgKCFyZXQpIHsKQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gcGFnZV9vd25lcl9zdGFja19vcGVuLAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7CiYjNDM7CS5vcGVuCQk9IHN0YWNrX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewotCSp2YWwgPSBSRUFEX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpOwomIzQzOwkqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JV1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTsKJiM0MzsJV1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKLURFRklORV9TSU1QTEVfQVRUUklCVVRFKHBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMsICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LAotCQkJJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdSYjMzQ7KTsKLQomIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCAmYW1wO3RocmVzaG9sZF9nZXQsICZhbXA7dGhyZXNob2xkX3NldCwgJiMzNDslbGx1XG4mIzM0Oyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiB7CkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKQEAgLTM0LDYgJiM0MzszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgIG1heF9wZm4gPSBOb25lCiAgICAgcF9vcHMgPSBOb25lCiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lCiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXygmIzM0O2x4LWR1bXAtcGFnZS1vd25lciYjMzQ7LCBnZGIuQ09NTUFORF9TVVBQT1JUKQpAQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6CiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzNDttYXhfcGZuJiMzNDspKQogICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzQ7cGFnZV9leHRfc2l6ZSYjMzQ7KSkKICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspCiYjNDM7ICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O01SX05FVkVSJiMzOTspKQogCiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOgogICAgICAgICBpZiBwYWdlX2V4dCA9PSBnZGIuVmFsdWUoMCk6CkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZ2RiLndyaXRlKCYjMzk7cGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XG4mIzM5OykKICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lclsmIzM0O2ZyZWVfaGFuZGxlJiMzNDtdKQotICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMToKJiM0MzsgICAgICAgIGlmIHBhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdICE9IHNlbGYubXJfbmV2ZXI6CiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSkKIAogICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTYKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgb2YgYSBQYWdlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyBzZXZlcmFsIHBhZ2UgbWlncmF0aW9uIGFuZCBgcGFnZV9vd25lcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogaXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIHRoZXJlJiMzOTtzIGEgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWNvbWluZyBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBBbHNvLCBgTVJfTkVWRVJgIGlzIGJlaW5nIGludHJvZHVjZWQsIHJlcGxhY2luZyBgLTFgIGluIGBwYWdlX293bmVyLmNgLiBUaGlzICpmZWVscyogbGlrZSBhIHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0IGFsc28gdG91Y2hlcyBgc2tpcF9idWRkeV9wYWdlc2AsIHNvbWUgcmVuYW1pbmcgaW4gYHBhZ2Vfb3duZXIuY2AsIGFkZHMgYE1SX05FVkVSYCB0byBhIHRyYWNlcG9pbnQsIGFuZCB1cGRhdGVzIGEgR0RCIHNjcmlwdC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBza2lwX2J1ZGR5X3BhZ2VzYCByZWZhY3RvcmluZy4gVGhlIG9sZCBjb2RlIGhhZCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBidWRkeSBwYWdlcyBhbmQgb3JkZXJzLiBUaGUgbmV3IHZlcnNpb24gc2ltcGxpZmllcyBpdCwgY2FsbGluZyB0aGUgc2FtZSBmdW5jdGlvbiBpbiBzZXZlcmFsIG90aGVyIHBsYWNlcy4gSSBuZWVkIHRvIGJlICpzdXJlKiB0aGlzIGRvZXNuJiMzOTt0IGNoYW5nZSBiZWhhdmlvci4gQ29tcGFyaW5nIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW5jZSB3aGVyZSB0aGUgbmV3IHZlcnNpb24gY2hlY2tzICBgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVJgIHdoZXJlIHRoZSBvbGQgdmVyc2lvbiBjaGVja2VkIGBvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUmAuIEJ1dCBpZiBgb3JkZXJgIGlzIDAsIHRoZSBgcGZuYCBpc24mIzM5O3QgY2hhbmdlZCBpbiBlaXRoZXIgY2FzZSwgc28gdGhpcyAqaXNuJiMzOTt0KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgb3RoZXIgY2hhbmdlcyBpbiB0aGlzIGFyZWEgYXJlIHNpbWlsYXIgcmVmYWN0b3JpbmdzLCBqdXN0IGNhbGxpbmcgdGhlIG5ldyBmdW5jdGlvbiBpbiBwbGFjZSBvZiB0aGUgb2xkIGNvbmRpdGlvbmFsIGNoZWNrcywgc28gc3RpbGwgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpNb3Zpbmcgb24sIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBub3cgcmVmYWN0b3JlZCB3aXRoIGEgbW92ZSBvZiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIG91dHNpZGUgdGhlIGZ1bmN0aW9uLiBQdXJlbHkgY29zbWV0aWMsIHRoYXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZy4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHRocmVzaG9sZF9mb3BzYCBjaGFuZ2U6IGEgYFxuYCBhZGRlZCB0byB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBpcyBhIHRyaXZpYWwgY2hhbmdlIGFuZCBhIGRlZmluaXRlIG5vbi1pc3N1ZS4KCkkmIzM5O20gbWFraW5nIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhlIGNoYW5nZXMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCBhbmQgdGhlIGNvbXBhcmlzb24gYHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVJgIGFyZSBqdXN0IGNvbnNpc3RlbmN5IGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGBNUl9ORVZFUmAsIGFub3RoZXIgdHlwZS1yZWxhdGVkIGNoYW5nZS4gQWRkaW5nIGBNUl9ORVZFUmAgdG8gdGhlIGBtaWdyYXRlX3JlYXNvbl9uYW1lc2AgYXJyYXkgaW4gdGhlIHRyYWNlcG9pbnQgaGVhZGVyLi4uIGFnYWluLCByZWZhY3RvcmluZywgYWRkaW5nIHRvIGEgdHJhY2UgcG9pbnQmIzM5O3Mgb3V0cHV0LCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCB0aGUgb3ZlcmFyY2hpbmcgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBuZXcgY29yZSBrZXJuZWwgbG9naWMsIG9yIGFueSBkcml2ZXJzL2FyY2hpdGVjdHVyZXMgYmVpbmcgdG91Y2hlZCB0aGF0IGNhbiBiZSBleGVjdXRlZCBhbmQgZnV6emVkPyBOb3BlLiBJdCYjMzk7cyBtb3N0bHkgcmVmYWN0b3JpbmcsIHNvbWUgdHlwZSB1cGRhdGVzLCBhbmQgbWlub3IgY2hhbmdlcyB0byBob3cgdGhlIGBwYWdlX293bmVyYCBkZWJ1ZyBmZWF0dXJlIHdvcmtzLgoKVGhlIGBwYWdlX293bmVyYCBpcyByZWFsbHkgYSBkZWJ1Z2dpbmcgYWlkLCBub3QgYSBjb3JlIHBhdGgsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1Z3MgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IuCgpUaGUgcGF0Y2ggcmVhbGx5IG9ubHkgbWFrZXMgY2hhbmdlcyB0aGF0IGFyZTogbW9kaWZpY2F0aW9ucyB0byBudW1lcmljIGNvbnN0YW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhbmQgcmVmYWN0b3JpbmcuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdXp6aW5nIHJ1bGVzLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzQuNDM1MTMxNDM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjY2OTY5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyAnaW50IHJlYXNvbicgdG8gJ2VudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uJywgZXh0cmFjdGluZyAnc2tpcF9idWRkeV9wYWdlcycsIG1vdmluZyAjaWZkZWZzKSwgdHJhY2Vwb2ludCB1cGRhdGVzLCBhbmQgbWlub3IgZGVidWdmcyBvdXRwdXQgZm9ybWF0dGluZyBjaGFuZ2VzIChhZGRpbmcgYSBuZXdsaW5lIHRvIGEgc2ltcGxlIGF0dHJpYnV0ZSkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA3OjE2OjM0LjQzNTE0MjgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MDgwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIwN2JiMjY3MWNkMGVhMGI5MGI0MGE0Y2MxMTRiMDA4ZDIxMmU5OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA3OjE2OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNTQsNyArMTU0LDggQEAgbG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcXG4gYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcXG4gdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7XFxuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG4rXFx0XFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XFxuQEAgLTQyNCw3ICs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gfVxcbiBcXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcXG4gXFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xcbiBcXG5AQCAtMTIzOCw3ICsxMjM5LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbkBAIC01Nyw3ICs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpO1xcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LCBmcmVlX2ZvbGlvX3QgZnJlZSxcXG4tXFx0XFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxcbitcXHRcXHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XFxuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcXG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xcbkBAIC03Nyw3ICs3OCw4IEBAIGludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuIFxcdHsgcmV0dXJuIC1FTk9TWVM7IH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG5AQCAtMjUsNiArMjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHtcXG4gXFx0TVJfTE9OR1RFUk1fUElOLFxcbiBcXHRNUl9ERU1PVElPTixcXG4gXFx0TVJfREFNT04sXFxuK1xcdE1SX05FVkVSLFxcdFxcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cXG4gXFx0TVJfVFlQRVNcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbkBAIC0zLDYgKzMsNyBAQFxcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZV9tb2RlLmhcXHUwMDNlXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHBhZ2Vfb3duZXJfaW5pdGVkO1xcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4gXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XFxuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xcbitleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XFxuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0XFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xcbkBAIC00Myw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXFxuIFxcdFxcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xcbkBAIC02OCw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuaW5kZXggY2QwMWRkN2IzNjQwZGMuLjE1ZWUyZWYyMDFiNWY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbkBAIC0yMyw3ICsyMyw4IEBAXFxuIFxcdEVNKCBNUl9DT05USUdfUkFOR0UsXFx0XFxcImNvbnRpZ19yYW5nZVxcXCIpXFx0XFx0XFx0XFxcXFxcbiBcXHRFTSggTVJfTE9OR1RFUk1fUElOLFxcdFxcXCJsb25ndGVybV9waW5cXFwiKVxcdFxcdFxcdFxcXFxcXG4gXFx0RU0oIE1SX0RFTU9USU9OLFxcdFxcXCJkZW1vdGlvblxcXCIpXFx0XFx0XFx0XFxcXFxcbi1cXHRFTWUoTVJfREFNT04sXFx0XFx0XFxcImRhbW9uXFxcIilcXG4rXFx0RU0oIE1SX0RBTU9OLFxcdFxcdFxcXCJkYW1vblxcXCIpXFx0XFx0XFx0XFxcXFxcbitcXHRFTWUoTVJfTkVWRVIsXFx0XFx0XFxcIm5ldmVyX21pZ3JhdGVkXFxcIilcXG4gXFxuIC8qXFxuICAqIEZpcnN0IGRlZmluZSB0aGUgZW51bXMgaW4gdGhlIGFib3ZlIG1hY3JvcyB0byBiZSBleHBvcnRlZCB0byB1c2Vyc3BhY2VcXG5AQCAtNTEsNyArNTIsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcXG4gXFx0XFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxcbi1cXHRcXHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXFxuK1xcdFxcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxcbiBcXHRcXHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxcbkBAIC02NCw3ICs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHR0aHBfc3BsaXQpXFxuIFxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHRsYXJnZV9mb2xpb19zcGxpdClcXG4gXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfbW9kZSxcXHRtb2RlKVxcbi1cXHRcXHRfX2ZpZWxkKFxcdGludCxcXHRcXHRcXHRyZWFzb24pXFxuK1xcdFxcdF9fZmllbGQoXFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcXHRyZWFzb24pXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5AQCAtOTEsMTMgKzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxcbiBcXG4tXFx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXFxuK1xcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcXG4gXFxuIFxcdFRQX0FSR1MobW9kZSwgcmVhc29uKSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdF9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpXFxuLVxcdFxcdF9fZmllbGQoaW50LCByZWFzb24pXFxuK1xcdFxcdF9fZmllbGQoZW51bSBtaWdyYXRlX3JlYXNvbiwgcmVhc29uKVxcbiBcXHQpLFxcbiBcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gfVxcbiBcXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXFxuK1xcdFxcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcXG4tXFx0XFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZHN0O1xcbiBcXHRpbnQgcmMgPSAtRUFHQUlOO1xcbkBAIC0xNjI2LDcgKzE2MjYsNyBAQCBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7XFxuICAqL1xcbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0XFx0ICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxcbiB7XFxuQEAgLTE3MTYsNyArMTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuIFxcdFxcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcXG5AQCAtMTc5OSw3ICsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbiAgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuIFxcdFxcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcXG4ge1xcbkBAIC0yMDExLDcgKzIwMTEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcXG4ge1xcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiAgKi9cXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbiB7XFxuIFxcdGludCByYywgcmNfZ2F0aGVyO1xcbiBcXHRpbnQgbnJfcGFnZXM7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gXFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiBcXG4gXFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XFxuLVxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcXG4rXFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxcbiBcXHRcXHRcXHRcXHQgICB0c19uc2VjLCBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZXRnaWQsXFxuIFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiBcXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbiB9XFxuIFxcbi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiBcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG5AQCAtNDIyLDYgKzQyMiwyOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suXFxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxcbisgKiBpdGVyYXRpb24gcHVycG9zZXMuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXFxuKyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBvcmRlcjtcXG4rXFxuK1xcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4rXFx0aWYgKG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbitcXHRcXHQqcGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbkBAIC00NjEsMTQgKzQ4NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuLVxcdFxcdFxcdFxcdFxcdHBmbiArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XFxuK1xcdFxcdFxcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFxcdTAwMjZwZm4sIHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTUwNSwxMyArNTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gLypcXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuIFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRib29sIG9ubGluZTtcXG5AQCAtNTM5LDEwICs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdG5hbWUpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuQEAgLTU3OSw3ICs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcXG4gXFx0XFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcXG4gXFx0XFx0XFx0XFxcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuQEAgLTYzMCwxMCArNjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcXFxuXFxcIixcXG4rXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcXHUwMDI2Z2ZwX21hc2ssXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VwaWQsIHBhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbitcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYyk7XFxuIFxcbiBcXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0aWYgKCFoYW5kbGUpXFxuQEAgLTY0NSwxMiArNjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmICghaGFuZGxlKSB7XFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcXFxuXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCk7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuIFxcdFxcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNldGdpZCwgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuIGV4dF9wdXRfY29udGludWU6XFxuQEAgLTg4Nyw3ICs4OTQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4gXFx0cmV0dXJuIHN0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xcbiBcXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG5AQCAtOTA0LDcgKzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZChcXHUwMDI2c3RhY2tfcmVjb3JkLVxcdTAwM2Vjb3VudCkgLSAxO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAobnJfYmFzZV9wYWdlcyBcXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcXG4rXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcXG5AQCAtOTI2LDE2ICs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xcbiBcXHQuc3RhcnRcXHQ9IHN0YWNrX3N0YXJ0LFxcbiBcXHQubmV4dFxcdD0gc3RhY2tfbmV4dCxcXG4gXFx0LnN0b3BcXHQ9IHN0YWNrX3N0b3AsXFxuIFxcdC5zaG93XFx0PSBzdGFja19wcmludFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbi1cXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcXG4rXFx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXFx1MDAyNnN0YWNrX29wLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xcbiBcXG4gXFx0aWYgKCFyZXQpIHtcXG5AQCAtOTQ4LDI4ICs5NTUsMjYgQEAgc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcXG4tXFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbixcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcXG4rXFx0Lm9wZW5cXHRcXHQ9IHN0YWNrX29wZW4sXFxuIFxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiBcXHQucmVsZWFzZVxcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuIHtcXG4tXFx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XFxuK1xcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbiB7XFxuLVxcdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuK1xcdFdSSVRFX09OQ0UocGFnZXNfdGhyZXNob2xkLCB2YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCxcXG4tXFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFwiKTtcXG4tXFxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcXHUwMDI2dGhyZXNob2xkX2dldCwgXFx1MDAyNnRocmVzaG9sZF9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIHtcXG5AQCAtOTg1LDE3ICs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcXG4tXFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfaGFuZGxlc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImNvdW50X3RocmVzaG9sZFxcXCIsIDA2MDAsIGRpciwgTlVMTCxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZ0aHJlc2hvbGRfZm9wcyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXFxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NFxcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcXG4rKysgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICBtYXhfcGZuID0gTm9uZVxcbiAgICAgcF9vcHMgPSBOb25lXFxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcXG4rICAgIG1yX25ldmVyID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcXG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcXFwibHgtZHVtcC1wYWdlLW93bmVyXFxcIiwgZ2RiLkNPTU1BTkRfU1VQUE9SVClcXG5AQCAtNjUsNiArNjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcXG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFxcXCJtYXhfcGZuXFxcIikpXFxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcXFwicGFnZV9leHRfc2l6ZVxcXCIpKVxcbiAgICAgICAgIHNlbGYubWlncmF0ZV9yZWFzb25fbmFtZXMgPSBnZGIucGFyc2VfYW5kX2V2YWwoJ21pZ3JhdGVfcmVhc29uX25hbWVzJylcXG4rICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgnTVJfTkVWRVInKSlcXG4gXFxuICAgICBkZWYgcGFnZV9leHRfaW52YWxpZChzZWxmLCBwYWdlX2V4dCk6XFxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxcbkBAIC0xMzgsNyArMTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICAgICAgZWxzZTpcXG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXFxcbicpXFxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcXFwiZnJlZV9oYW5kbGVcXFwiXSlcXG4tICAgICAgICBpZiBwYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ10gIT0gLTE6XFxuKyAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IHNlbGYubXJfbmV2ZXI6XFxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcbicgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXV0pXFxuIFxcbiAgICAgZGVmIHJlYWRfcGFnZV9vd25lcihzZWxmKTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzUuMDY1MzE1NjQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkzNjUwMzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nICdpbnQgcmVhc29uJyB0byAnZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24nLCBleHRyYWN0aW5nICdza2lwX2J1ZGR5X3BhZ2VzJywgbW92aW5nICNpZmRlZnMpLCB0cmFjZXBvaW50IHVwZGF0ZXMsIGFuZCBtaW5vciBkZWJ1Z2ZzIG91dHB1dCBmb3JtYXR0aW5nIGNoYW5nZXMgKGFkZGluZyBhIG5ld2xpbmUgdG8gYSBzaW1wbGUgYXR0cmlidXRlKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbitcdFx0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiBtb2RpZmllZF9tYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4rXHRcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4gXHR7IHJldHVybiAtRU5PU1lTOyB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuK1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyArMjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwiY29udGlnX3JhbmdlXCIpXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcImxvbmd0ZXJtX3BpblwiKVx0XHRcdFxcXG4gXHRFTSggTVJfREVNT1RJT04sXHRcImRlbW90aW9uXCIpXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCJkYW1vblwiKVxuK1x0RU0oIE1SX0RBTU9OLFx0XHRcImRhbW9uXCIpXHRcdFx0XFxcbitcdEVNZShNUl9ORVZFUixcdFx0XCJuZXZlcl9taWdyYXRlZFwiKVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbitcdFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXG4gXHRcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuK1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxuIFxuLVx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuK1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gfVxuIFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4tXHRcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbitcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuIHtcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gICovXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLVx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxuIHtcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiBcbiBcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xuLVx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxuK1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICs0MjIsMjkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcbisgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuK1xuK1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuK1x0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4rXHRcdCpwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuQEAgLTQ2MSwxNCArNDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXI7XG4tXG4tXHRcdFx0XHRmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cdFx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbitcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC01MDUsMTMgKzUyMiwxMyBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRzZXFfcHV0YyhtLCAnXFxuJyk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbiAvKlxuICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXRcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIG9ubGluZTtcbkBAIC01MzksMTAgKzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbitcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHJldHVybiByZXQ7XG4rfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuQEAgLTU3OSw3ICs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgKzY1MywxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCIpO1xuIFxuLVx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwiLFxuK1x0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cIixcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4rXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiArNjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cIixcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbitcdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwiLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4rXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCJwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcblwiLFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgKzcyMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCArODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbitcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyArODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbitcdFx0XHRcdFx0XHQgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4gXHRcdFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2V0Z2lkLCBjdXJyZW50LVx1MDAzZWNvbW0pO1xuIFx0XHRcdGNvdW50Kys7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyArODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpXG4gXHRyZXR1cm4gc3RhY2s7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDtcbiBcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG5AQCAtOTA0LDcgKzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbitcdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcbkBAIC05MjYsMTYgKzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfb3AsXG4rXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZzdGFja19vcCxcbiBcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XG4gXG4gXHRpZiAoIXJldCkge1xuQEAgLTk0OCwyOCArOTU1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcbitcdC5vcGVuXHRcdD0gc3RhY2tfb3BlbixcbiBcdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG4gXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuIFx0LnJlbGVhc2VcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbitcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIHtcbi1cdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XG4rXHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcIiVsbHVcIik7XG4tXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwiJWxsdVxcblwiKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgKzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzX2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJjb3VudF90aHJlc2hvbGRcIiwgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbisrKyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxuICAgICBtYXhfcGZuID0gTm9uZVxuICAgICBwX29wcyA9IE5vbmVcbiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lXG4rICAgIG1yX25ldmVyID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcImx4LWR1bXAtcGFnZS1vd25lclwiLCBnZGIuQ09NTUFORF9TVVBQT1JUKVxuQEAgLTY1LDYgKzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwibWF4X3BmblwiKSlcbiAgICAgICAgIHNlbGYucGFnZV9leHRfc2l6ZSA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCJwYWdlX2V4dF9zaXplXCIpKVxuICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgnbWlncmF0ZV9yZWFzb25fbmFtZXMnKVxuKyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJ01SX05FVkVSJykpXG4gXG4gICAgIGRlZiBwYWdlX2V4dF9pbnZhbGlkKHNlbGYsIHBhZ2VfZXh0KTpcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcbkBAIC0xMzgsNyArMTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBlbHNlOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XFxuJylcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXCJmcmVlX2hhbmRsZVwiXSlcbi0gICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSAtMTpcbisgICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSBzZWxmLm1yX25ldmVyOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG4nICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ11dKVxuIFxuICAgICBkZWYgcmVhZF9wYWdlX293bmVyKHNlbGYpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzUuMDY1MzIwNDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5MzY0NjMzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBhIFBhZ2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyBzZXZlcmFsIHBhZ2UgbWlncmF0aW9uIGFuZCBgcGFnZV9vd25lcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogaXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCB0aGVyZSdzIGEgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWNvbWluZyBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBBbHNvLCBgTVJfTkVWRVJgIGlzIGJlaW5nIGludHJvZHVjZWQsIHJlcGxhY2luZyBgLTFgIGluIGBwYWdlX293bmVyLmNgLiBUaGlzICpmZWVscyogbGlrZSBhIHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0IGFsc28gdG91Y2hlcyBgc2tpcF9idWRkeV9wYWdlc2AsIHNvbWUgcmVuYW1pbmcgaW4gYHBhZ2Vfb3duZXIuY2AsIGFkZHMgYE1SX05FVkVSYCB0byBhIHRyYWNlcG9pbnQsIGFuZCB1cGRhdGVzIGEgR0RCIHNjcmlwdC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBgc2tpcF9idWRkeV9wYWdlc2AgcmVmYWN0b3JpbmcuIFRoZSBvbGQgY29kZSBoYWQgc29tZSBjb25kaXRpb25hbCBsb2dpYyByZWdhcmRpbmcgYnVkZHkgcGFnZXMgYW5kIG9yZGVycy4gVGhlIG5ldyB2ZXJzaW9uIHNpbXBsaWZpZXMgaXQsIGNhbGxpbmcgdGhlIHNhbWUgZnVuY3Rpb24gaW4gc2V2ZXJhbCBvdGhlciBwbGFjZXMuIEkgbmVlZCB0byBiZSAqc3VyZSogdGhpcyBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4gQ29tcGFyaW5nIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBkaWZmZXJlbmNlIHdoZXJlIHRoZSBuZXcgdmVyc2lvbiBjaGVja3MgIGBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSYCB3aGVyZSB0aGUgb2xkIHZlcnNpb24gY2hlY2tlZCBgb3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVJgLiBCdXQgaWYgYG9yZGVyYCBpcyAwLCB0aGUgYHBmbmAgaXNuJ3QgY2hhbmdlZCBpbiBlaXRoZXIgY2FzZSwgc28gdGhpcyAqaXNuJ3QqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgc2ltaWxhciByZWZhY3RvcmluZ3MsIGp1c3QgY2FsbGluZyB0aGUgbmV3IGZ1bmN0aW9uIGluIHBsYWNlIG9mIHRoZSBvbGQgY29uZGl0aW9uYWwgY2hlY2tzLCBzbyBzdGlsbCBubyBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTW92aW5nIG9uLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AgaXMgbm93IHJlZmFjdG9yZWQgd2l0aCBhIG1vdmUgb2YgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBvdXRzaWRlIHRoZSBmdW5jdGlvbi4gUHVyZWx5IGNvc21ldGljLCB0aGF0J3MgYSBuby1nbyBmb3IgZnV6emluZy4gVGhlbiB0aGVyZSdzIHRoZSBgdGhyZXNob2xkX2ZvcHNgIGNoYW5nZTogYSBgXFxuYCBhZGRlZCB0byB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBpcyBhIHRyaXZpYWwgY2hhbmdlIGFuZCBhIGRlZmluaXRlIG5vbi1pc3N1ZS5cblxuSSdtIG1ha2luZyBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gVGhlIGNoYW5nZXMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCBhbmQgdGhlIGNvbXBhcmlzb24gYHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUmAgYXJlIGp1c3QgY29uc2lzdGVuY3kgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE1SX05FVkVSYCwgYW5vdGhlciB0eXBlLXJlbGF0ZWQgY2hhbmdlLiBBZGRpbmcgYE1SX05FVkVSYCB0byB0aGUgYG1pZ3JhdGVfcmVhc29uX25hbWVzYCBhcnJheSBpbiB0aGUgdHJhY2Vwb2ludCBoZWFkZXIuLi4gYWdhaW4sIHJlZmFjdG9yaW5nLCBhZGRpbmcgdG8gYSB0cmFjZSBwb2ludCdzIG91dHB1dCwgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvLCB0aGUgb3ZlcmFyY2hpbmcgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBuZXcgY29yZSBrZXJuZWwgbG9naWMsIG9yIGFueSBkcml2ZXJzL2FyY2hpdGVjdHVyZXMgYmVpbmcgdG91Y2hlZCB0aGF0IGNhbiBiZSBleGVjdXRlZCBhbmQgZnV6emVkPyBOb3BlLiBJdCdzIG1vc3RseSByZWZhY3RvcmluZywgc29tZSB0eXBlIHVwZGF0ZXMsIGFuZCBtaW5vciBjaGFuZ2VzIHRvIGhvdyB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnIGZlYXR1cmUgd29ya3MuXG5cblRoZSBgcGFnZV9vd25lcmAgaXMgcmVhbGx5IGEgZGVidWdnaW5nIGFpZCwgbm90IGEgY29yZSBwYXRoLCBzbyBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1Z3MgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IuXG5cblRoZSBwYXRjaCByZWFsbHkgb25seSBtYWtlcyBjaGFuZ2VzIHRoYXQgYXJlOiBtb2RpZmljYXRpb25zIHRvIG51bWVyaWMgY29uc3RhbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGFuZCByZWZhY3RvcmluZy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcyBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnV6emluZyBydWxlcywgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTYsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6NTAuMDAxNzg3NDQ1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJ2ludCByZWFzb24nIHRvICdlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbicsIGV4dHJhY3RpbmcgJ3NraXBfYnVkZHlfcGFnZXMnLCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJ2ludCByZWFzb24nIHRvICdlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbicsIGV4dHJhY3RpbmcgJ3NraXBfYnVkZHlfcGFnZXMnLCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqw22[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 07:01:57 +0000 UTC FinishedAt: 2026-07-01 07:16:51 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyAmIzM5O2ludCByZWFzb24mIzM5OyB0byAmIzM5O2VudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uJiMzOTssIGV4dHJhY3RpbmcgJiMzOTtza2lwX2J1ZGR5X3BhZ2VzJiMzOTssIG1vdmluZyAjaWZkZWZzKSwgdHJhY2Vwb2ludCB1cGRhdGVzLCBhbmQgbWlub3IgZGVidWdmcyBvdXRwdXQgZm9ybWF0dGluZyBjaGFuZ2VzIChhZGRpbmcgYSBuZXdsaW5lIHRvIGEgc2ltcGxlIGF0dHJpYnV0ZSkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4gYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gaW50IGdldF9od3BvaXNvbl9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgKmh1Z2V0bGIsIGJvb2wgdW5wb2lzb24pO1xuIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7XG4mIzQzO3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbiYjNDM7XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XG5AQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG4tXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgJiM0Mzs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0Ym9vbCBhbGxvd2VkX2ZhbGxiYWNrID0gZmFsc2U7XG4gXG5AQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpO1xuIGludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpO1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsXG4tXHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4mIzQzO1x0XHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcbkBAIC03Nyw3ICYjNDM7NzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9XG4gc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsXG4gXHRcdGZyZWVfZm9saW9fdCBmcmVlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuJiM0MztcdFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuIFx0eyByZXR1cm4gLUVOT1NZUzsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxuIFx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHtcbiBcdE1SX0xPTkdURVJNX1BJTixcbiBcdE1SX0RFTU9USU9OLFxuIFx0TVJfREFNT04sXG4mIzQzO1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGVfbW9kZS5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHBhZ2Vfb3duZXJfaW5pdGVkO1xuQEAgLTE0LDcgJiM0MzsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4mIzQzO2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xuQEAgLTQzLDcgJiM0Mzs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuaW5kZXggY2QwMWRkN2IzNjQwZGMuLjE1ZWUyZWYyMDFiNWY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbkBAIC0yMyw3ICYjNDM7MjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwmIzM0O2NvbnRpZ19yYW5nZVwmIzM0OylcdFx0XHRcXFxuIFx0RU0oIE1SX0xPTkdURVJNX1BJTixcdFwmIzM0O2xvbmd0ZXJtX3BpblwmIzM0OylcdFx0XHRcXFxuIFx0RU0oIE1SX0RFTU9USU9OLFx0XCYjMzQ7ZGVtb3Rpb25cJiMzNDspXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXG4mIzQzO1x0RU0oIE1SX0RBTU9OLFx0XHRcJiMzNDtkYW1vblwmIzM0OylcdFx0XHRcXFxuJiM0MztcdEVNZShNUl9ORVZFUixcdFx0XCYjMzQ7bmV2ZXJfbWlncmF0ZWRcJiMzNDspXG4gXG4gLypcbiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlXG5AQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuIFx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRcdF9fZmllbGQoXHR1bnNpZ25lZCBsb25nLFx0XHR0aHBfc3BsaXQpXG4gXHRcdF9fZmllbGQoXHR1bnNpZ25lZCBsb25nLFx0XHRsYXJnZV9mb2xpb19zcGxpdClcbiBcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9tb2RlLFx0bW9kZSlcbi1cdFx0X19maWVsZChcdGludCxcdFx0XHRyZWFzb24pXG4mIzQzO1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyAmIzQzOzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcbiBcbi1cdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxuJiM0MztcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1MobW9kZSwgcmVhc29uKSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpXG4tXHRcdF9fZmllbGQoaW50LCByZWFzb24pXG4mIzQzO1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICYjNDM7NzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbiBcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4mIzQzO3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbiYjNDM7XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuLVx0XHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZHN0O1xuIFx0aW50IHJjID0gLUVBR0FJTjtcbkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbiBcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcbiB7XG5AQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqZHN0X2ZvbGlvcyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgJiM0MzsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi1cdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsIGludCBucl9wYXNzKVxuIHtcbkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcbiB7XG5AQCAtMjA4OCw3ICYjNDM7MjA4OCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gICovXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICYjNDM7MzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbiYjNDM7XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXG4gXHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIH1cbiBcbi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuJiM0MzsgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcbiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHNraXBwZWQgKGNhbGxlciBzaG91bGQgY29udGludWUgaXRzIGxvb3ApLFxuJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuJiM0MztcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuJiM0MztcdFx0KnBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgJiM0Mzs0ODQsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICYjMzk7XFxuJiMzOTspO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzOSwxMCAmIzQzOzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRlbHNlXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCYjMzQ7KTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcblwmIzM0OyxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4mIzQzO1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCYjMzQ7KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcblwmIzM0Oyxcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiBcdFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcbiBcdH1cbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyAmIzQzOzcyMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICYjNDM7ODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICYjNDM7ODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTMzLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTU1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X2hhbmRsZXNcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y291bnRfdGhyZXNob2xkXCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgbWF4X3BmbiA9IE5vbmVcbiAgICAgcF9vcHMgPSBOb25lXG4gICAgIG1pZ3JhdGVfcmVhc29uX25hbWVzID0gTm9uZVxuJiM0MzsgICAgbXJfbmV2ZXIgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcbiAgICAgICAgIHN1cGVyKER1bXBQYWdlT3duZXIsIHNlbGYpLl9faW5pdF9fKFwmIzM0O2x4LWR1bXAtcGFnZS1vd25lclwmIzM0OywgZ2RiLkNPTU1BTkRfU1VQUE9SVClcbkBAIC02NSw2ICYjNDM7NjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCYjMzQ7bWF4X3BmblwmIzM0OykpXG4gICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwmIzM0O3BhZ2VfZXh0X3NpemVcJiMzNDspKVxuICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspXG4mIzQzOyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzOTtNUl9ORVZFUiYjMzk7KSlcbiBcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxuQEAgLTEzOCw3ICYjNDM7MTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBlbHNlOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgmIzM5O3BhZ2UgbGFzdCBmcmVlIHN0YWNrIHRyYWNlOlxcbiYjMzk7KVxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcJiMzNDtmcmVlX2hhbmRsZVwmIzM0O10pXG4tICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMTpcbiYjNDM7ICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSBzZWxmLm1yX25ldmVyOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgmIzM5O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSlcbiBcbiAgICAgZGVmIHJlYWRfcGFnZV9vd25lcihzZWxmKTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLAogYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7CiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7CiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTsKIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlOwogdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpOwpAQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sCi0JCQkJCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKQomIzQzOwkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogCkBAIC05NTYsNyAmIzQzOzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gbW9kaWZpZWRfbWFzazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTsKIApAQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7CiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLAotCQkgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAomIzQzOwkJICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpOwogc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpOwogYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpOwpAQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9CiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywKIAkJZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiAJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHsKIAlNUl9MT05HVEVSTV9QSU4sCiAJTVJfREVNT1RJT04sCiAJTVJfREFNT04sCiYjNDM7CU1SX05FVkVSLAkJLyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqLwogCU1SX1RZUEVTCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oCmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlX21vZGUuaCZndDsKIAogI2lmZGVmIENPTkZJR19QQUdFX09XTkVSCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7CkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLAogZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogCQkJaW50IG5ld19vcmRlcik7CiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpOwotZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7CiYjNDM7ZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkJcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpOwpAQCAtNDMsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cGFnZV9vd25lcl9pbml0ZWQpKQogCQlfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTsKQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAppbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgKQEAgLTIzLDcgJiM0MzsyMyw4IEBACiAJRU0oIE1SX0NPTlRJR19SQU5HRSwJJiMzNDtjb250aWdfcmFuZ2UmIzM0OykJCQlcCiAJRU0oIE1SX0xPTkdURVJNX1BJTiwJJiMzNDtsb25ndGVybV9waW4mIzM0OykJCQlcCiAJRU0oIE1SX0RFTU9USU9OLAkmIzM0O2RlbW90aW9uJiMzNDspCQkJXAotCUVNZShNUl9EQU1PTiwJCSYjMzQ7ZGFtb24mIzM0OykKJiM0MzsJRU0oIE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQkJCVwKJiM0MzsJRU1lKE1SX05FVkVSLAkJJiMzNDtuZXZlcl9taWdyYXRlZCYjMzQ7KQogCiAvKgogICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZQpAQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsCiAJCSB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LAotCQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCwKIAkJdGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSwKQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQl0aHBfc3BsaXQpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQlsYXJnZV9mb2xpb19zcGxpdCkKIAkJX19maWVsZCgJZW51bSBtaWdyYXRlX21vZGUsCW1vZGUpCi0JCV9fZmllbGQoCWludCwJCQlyZWFzb24pCiYjNDM7CQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfcmVhc29uLAlyZWFzb24pCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LAogCi0JVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CVRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSwKIAogCVRQX0FSR1MobW9kZSwgcmVhc29uKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpCi0JCV9fZmllbGQoaW50LCByZWFzb24pCiYjNDM7CQlfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC03MTgyLDcgJiM0Mzs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19wdXQoZm9saW8pOwogfQogCi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAotCQlpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KQogewogCXN0cnVjdCBmb2xpbyAqZHN0OwogCWludCByYyA9IC1FQUdBSU47CkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgewogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJCSAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkJICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKQogewpAQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJaW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLApAQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcywKICAqLwogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAJCW5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLAotCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpCiB7CkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAKIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLAogCQlzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpCiB7CkBAIC0yMDg4LDcgJiM0MzsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKICAqLwogaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIHsKIAlpbnQgcmMsIHJjX2dhdGhlcjsKIAlpbnQgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMzksMTMgJiM0MzszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUiwKIAkJCQkgICB0c19uc2VjLCBjdXJyZW50LSZndDtwaWQsIGN1cnJlbnQtJmd0O3RnaWQsCiAJCQkJICAgY3VycmVudC0mZ3Q7Y29tbSk7CiAJaW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxICZsdDsmbHQ7IG9yZGVyKTsKIH0KIAotdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjsKQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLgomIzQzOyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1cwomIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyCiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQomIzQzOwkJKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM5LDEwICYjNDM7NTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCQkJbmFtZSk7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAomIzQzOwkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAocmV0ICZndDs9IGNvdW50KQogCQlnb3RvIGVycjsKIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwpAQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJZWxzZQogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXG4mIzM0Oyk7CiAKLQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XG4mIzM0OywKJiM0MzsJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcbiYjMzQ7LAogCQkgcGFnZV9vd25lci0mZ3Q7b3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssICZhbXA7Z2ZwX21hc2ssCiAJCSBwYWdlX293bmVyLSZndDtwaWQsIHBhZ2Vfb3duZXItJmd0O3RnaWQsIHBhZ2Vfb3duZXItJmd0O2NvbW0sCi0JCSBwYWdlX293bmVyLSZndDt0c19uc2VjLCBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwomIzQzOwkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMpOwogCiAJaGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItJmd0O2hhbmRsZSk7CiAJaWYgKCFoYW5kbGUpCkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoIWhhbmRsZSkgewogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXG4mIzM0Oyk7CiAJfSBlbHNlIHsKLQkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcbiYjMzQ7LAotCQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkKTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcbiYjMzQ7LAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCwKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiAJCXN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7CiAJfQogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpCiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKIAkJCQkJCSAgIGN1cnJlbnQtJmd0O3RnaWQsIGN1cnJlbnQtJmd0O2NvbW0pOwogCQkJY291bnQmIzQzOyYjNDM7OwogZXh0X3B1dF9jb250aW51ZToKQEAgLTg4Nyw3ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpCiAJcmV0dXJuIHN0YWNrOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7CiAKIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewpAQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAlucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZCgmYW1wO3N0YWNrX3JlY29yZC0mZ3Q7Y291bnQpIC0gMTsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgJmFtcDsmYW1wOwotCSAgICAobnJfYmFzZV9wYWdlcyAmbHQ7IDEgfHwgbnJfYmFzZV9wYWdlcyAmbHQ7IHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSkKJiM0MzsJICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZXNfdGhyZXNob2xkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7CkBAIC05MjYsMTYgJiM0Mzs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0gewogCS5zdGFydAk9IHN0YWNrX3N0YXJ0LAogCS5uZXh0CT0gc3RhY2tfbmV4dCwKIAkuc3RvcAk9IHN0YWNrX3N0b3AsCiAJLnNob3cJPSBzdGFja19wcmludAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cGFnZV9vd25lcl9zdGFja19vcCwKJiM0MzsJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtzdGFja19vcCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpOwogCiAJaWYgKCFyZXQpIHsKQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gcGFnZV9vd25lcl9zdGFja19vcGVuLAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7CiYjNDM7CS5vcGVuCQk9IHN0YWNrX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewotCSp2YWwgPSBSRUFEX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpOwomIzQzOwkqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JV1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTsKJiM0MzsJV1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKLURFRklORV9TSU1QTEVfQVRUUklCVVRFKHBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMsICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LAotCQkJJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdSYjMzQ7KTsKLQomIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCAmYW1wO3RocmVzaG9sZF9nZXQsICZhbXA7dGhyZXNob2xkX3NldCwgJiMzNDslbGx1XG4mIzM0Oyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiB7CkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKQEAgLTM0LDYgJiM0MzszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgIG1heF9wZm4gPSBOb25lCiAgICAgcF9vcHMgPSBOb25lCiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lCiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXygmIzM0O2x4LWR1bXAtcGFnZS1vd25lciYjMzQ7LCBnZGIuQ09NTUFORF9TVVBQT1JUKQpAQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6CiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzNDttYXhfcGZuJiMzNDspKQogICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzQ7cGFnZV9leHRfc2l6ZSYjMzQ7KSkKICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspCiYjNDM7ICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O01SX05FVkVSJiMzOTspKQogCiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOgogICAgICAgICBpZiBwYWdlX2V4dCA9PSBnZGIuVmFsdWUoMCk6CkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZ2RiLndyaXRlKCYjMzk7cGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XG4mIzM5OykKICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lclsmIzM0O2ZyZWVfaGFuZGxlJiMzNDtdKQotICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMToKJiM0MzsgICAgICAgIGlmIHBhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdICE9IHNlbGYubXJfbmV2ZXI6CiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSkKIAogICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTYKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgb2YgYSBQYWdlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyBzZXZlcmFsIHBhZ2UgbWlncmF0aW9uIGFuZCBgcGFnZV9vd25lcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogaXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIHRoZXJlJiMzOTtzIGEgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWNvbWluZyBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBBbHNvLCBgTVJfTkVWRVJgIGlzIGJlaW5nIGludHJvZHVjZWQsIHJlcGxhY2luZyBgLTFgIGluIGBwYWdlX293bmVyLmNgLiBUaGlzICpmZWVscyogbGlrZSBhIHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0IGFsc28gdG91Y2hlcyBgc2tpcF9idWRkeV9wYWdlc2AsIHNvbWUgcmVuYW1pbmcgaW4gYHBhZ2Vfb3duZXIuY2AsIGFkZHMgYE1SX05FVkVSYCB0byBhIHRyYWNlcG9pbnQsIGFuZCB1cGRhdGVzIGEgR0RCIHNjcmlwdC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBza2lwX2J1ZGR5X3BhZ2VzYCByZWZhY3RvcmluZy4gVGhlIG9sZCBjb2RlIGhhZCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBidWRkeSBwYWdlcyBhbmQgb3JkZXJzLiBUaGUgbmV3IHZlcnNpb24gc2ltcGxpZmllcyBpdCwgY2FsbGluZyB0aGUgc2FtZSBmdW5jdGlvbiBpbiBzZXZlcmFsIG90aGVyIHBsYWNlcy4gSSBuZWVkIHRvIGJlICpzdXJlKiB0aGlzIGRvZXNuJiMzOTt0IGNoYW5nZSBiZWhhdmlvci4gQ29tcGFyaW5nIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW5jZSB3aGVyZSB0aGUgbmV3IHZlcnNpb24gY2hlY2tzICBgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVJgIHdoZXJlIHRoZSBvbGQgdmVyc2lvbiBjaGVja2VkIGBvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUmAuIEJ1dCBpZiBgb3JkZXJgIGlzIDAsIHRoZSBgcGZuYCBpc24mIzM5O3QgY2hhbmdlZCBpbiBlaXRoZXIgY2FzZSwgc28gdGhpcyAqaXNuJiMzOTt0KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgb3RoZXIgY2hhbmdlcyBpbiB0aGlzIGFyZWEgYXJlIHNpbWlsYXIgcmVmYWN0b3JpbmdzLCBqdXN0IGNhbGxpbmcgdGhlIG5ldyBmdW5jdGlvbiBpbiBwbGFjZSBvZiB0aGUgb2xkIGNvbmRpdGlvbmFsIGNoZWNrcywgc28gc3RpbGwgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpNb3Zpbmcgb24sIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBub3cgcmVmYWN0b3JlZCB3aXRoIGEgbW92ZSBvZiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIG91dHNpZGUgdGhlIGZ1bmN0aW9uLiBQdXJlbHkgY29zbWV0aWMsIHRoYXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZy4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHRocmVzaG9sZF9mb3BzYCBjaGFuZ2U6IGEgYFxuYCBhZGRlZCB0byB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBpcyBhIHRyaXZpYWwgY2hhbmdlIGFuZCBhIGRlZmluaXRlIG5vbi1pc3N1ZS4KCkkmIzM5O20gbWFraW5nIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhlIGNoYW5nZXMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCBhbmQgdGhlIGNvbXBhcmlzb24gYHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVJgIGFyZSBqdXN0IGNvbnNpc3RlbmN5IGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGBNUl9ORVZFUmAsIGFub3RoZXIgdHlwZS1yZWxhdGVkIGNoYW5nZS4gQWRkaW5nIGBNUl9ORVZFUmAgdG8gdGhlIGBtaWdyYXRlX3JlYXNvbl9uYW1lc2AgYXJyYXkgaW4gdGhlIHRyYWNlcG9pbnQgaGVhZGVyLi4uIGFnYWluLCByZWZhY3RvcmluZywgYWRkaW5nIHRvIGEgdHJhY2UgcG9pbnQmIzM5O3Mgb3V0cHV0LCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClNvLCB0aGUgb3ZlcmFyY2hpbmcgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBuZXcgY29yZSBrZXJuZWwgbG9naWMsIG9yIGFueSBkcml2ZXJzL2FyY2hpdGVjdHVyZXMgYmVpbmcgdG91Y2hlZCB0aGF0IGNhbiBiZSBleGVjdXRlZCBhbmQgZnV6emVkPyBOb3BlLiBJdCYjMzk7cyBtb3N0bHkgcmVmYWN0b3JpbmcsIHNvbWUgdHlwZSB1cGRhdGVzLCBhbmQgbWlub3IgY2hhbmdlcyB0byBob3cgdGhlIGBwYWdlX293bmVyYCBkZWJ1ZyBmZWF0dXJlIHdvcmtzLgoKVGhlIGBwYWdlX293bmVyYCBpcyByZWFsbHkgYSBkZWJ1Z2dpbmcgYWlkLCBub3QgYSBjb3JlIHBhdGgsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1Z3MgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IuCgpUaGUgcGF0Y2ggcmVhbGx5IG9ubHkgbWFrZXMgY2hhbmdlcyB0aGF0IGFyZTogbW9kaWZpY2F0aW9ucyB0byBudW1lcmljIGNvbnN0YW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhbmQgcmVmYWN0b3JpbmcuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdXp6aW5nIHJ1bGVzLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJiMzOTtpbnQgcmVhc29uJiMzOTsgdG8gJiMzOTtlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiYjMzk7LCBleHRyYWN0aW5nICYjMzk7c2tpcF9idWRkeV9wYWdlcyYjMzk7LCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzQuNDM1MTMxNDM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjY2OTY5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyAnaW50IHJlYXNvbicgdG8gJ2VudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uJywgZXh0cmFjdGluZyAnc2tpcF9idWRkeV9wYWdlcycsIG1vdmluZyAjaWZkZWZzKSwgdHJhY2Vwb2ludCB1cGRhdGVzLCBhbmQgbWlub3IgZGVidWdmcyBvdXRwdXQgZm9ybWF0dGluZyBjaGFuZ2VzIChhZGRpbmcgYSBuZXdsaW5lIHRvIGEgc2ltcGxlIGF0dHJpYnV0ZSkuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA3OjE2OjM0LjQzNTE0MjgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MDgwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIwN2JiMjY3MWNkMGVhMGI5MGI0MGE0Y2MxMTRiMDA4ZDIxMmU5OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA3OjE2OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNTQsNyArMTU0LDggQEAgbG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcXG4gYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcXG4gdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7XFxuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG4rXFx0XFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XFxuQEAgLTQyNCw3ICs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gfVxcbiBcXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcXG4gXFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xcbiBcXG5AQCAtMTIzOCw3ICsxMjM5LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbkBAIC01Nyw3ICs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpO1xcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LCBmcmVlX2ZvbGlvX3QgZnJlZSxcXG4tXFx0XFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxcbitcXHRcXHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XFxuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcXG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xcbkBAIC03Nyw3ICs3OCw4IEBAIGludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuIFxcdHsgcmV0dXJuIC1FTk9TWVM7IH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG5AQCAtMjUsNiArMjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHtcXG4gXFx0TVJfTE9OR1RFUk1fUElOLFxcbiBcXHRNUl9ERU1PVElPTixcXG4gXFx0TVJfREFNT04sXFxuK1xcdE1SX05FVkVSLFxcdFxcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cXG4gXFx0TVJfVFlQRVNcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbkBAIC0zLDYgKzMsNyBAQFxcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZV9tb2RlLmhcXHUwMDNlXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHBhZ2Vfb3duZXJfaW5pdGVkO1xcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4gXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XFxuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xcbitleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XFxuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0XFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xcbkBAIC00Myw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXFxuIFxcdFxcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xcbkBAIC02OCw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuaW5kZXggY2QwMWRkN2IzNjQwZGMuLjE1ZWUyZWYyMDFiNWY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbkBAIC0yMyw3ICsyMyw4IEBAXFxuIFxcdEVNKCBNUl9DT05USUdfUkFOR0UsXFx0XFxcImNvbnRpZ19yYW5nZVxcXCIpXFx0XFx0XFx0XFxcXFxcbiBcXHRFTSggTVJfTE9OR1RFUk1fUElOLFxcdFxcXCJsb25ndGVybV9waW5cXFwiKVxcdFxcdFxcdFxcXFxcXG4gXFx0RU0oIE1SX0RFTU9USU9OLFxcdFxcXCJkZW1vdGlvblxcXCIpXFx0XFx0XFx0XFxcXFxcbi1cXHRFTWUoTVJfREFNT04sXFx0XFx0XFxcImRhbW9uXFxcIilcXG4rXFx0RU0oIE1SX0RBTU9OLFxcdFxcdFxcXCJkYW1vblxcXCIpXFx0XFx0XFx0XFxcXFxcbitcXHRFTWUoTVJfTkVWRVIsXFx0XFx0XFxcIm5ldmVyX21pZ3JhdGVkXFxcIilcXG4gXFxuIC8qXFxuICAqIEZpcnN0IGRlZmluZSB0aGUgZW51bXMgaW4gdGhlIGFib3ZlIG1hY3JvcyB0byBiZSBleHBvcnRlZCB0byB1c2Vyc3BhY2VcXG5AQCAtNTEsNyArNTIsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcXG4gXFx0XFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxcbi1cXHRcXHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXFxuK1xcdFxcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxcbiBcXHRcXHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxcbkBAIC02NCw3ICs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHR0aHBfc3BsaXQpXFxuIFxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHRsYXJnZV9mb2xpb19zcGxpdClcXG4gXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfbW9kZSxcXHRtb2RlKVxcbi1cXHRcXHRfX2ZpZWxkKFxcdGludCxcXHRcXHRcXHRyZWFzb24pXFxuK1xcdFxcdF9fZmllbGQoXFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcXHRyZWFzb24pXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5AQCAtOTEsMTMgKzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxcbiBcXG4tXFx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXFxuK1xcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcXG4gXFxuIFxcdFRQX0FSR1MobW9kZSwgcmVhc29uKSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdF9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpXFxuLVxcdFxcdF9fZmllbGQoaW50LCByZWFzb24pXFxuK1xcdFxcdF9fZmllbGQoZW51bSBtaWdyYXRlX3JlYXNvbiwgcmVhc29uKVxcbiBcXHQpLFxcbiBcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gfVxcbiBcXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXFxuK1xcdFxcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcXG4tXFx0XFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZHN0O1xcbiBcXHRpbnQgcmMgPSAtRUFHQUlOO1xcbkBAIC0xNjI2LDcgKzE2MjYsNyBAQCBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7XFxuICAqL1xcbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0XFx0ICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxcbiB7XFxuQEAgLTE3MTYsNyArMTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuIFxcdFxcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcXG5AQCAtMTc5OSw3ICsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbiAgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuIFxcdFxcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcXG4ge1xcbkBAIC0yMDExLDcgKzIwMTEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcXG4ge1xcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiAgKi9cXG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbiB7XFxuIFxcdGludCByYywgcmNfZ2F0aGVyO1xcbiBcXHRpbnQgbnJfcGFnZXM7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gXFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiBcXG4gXFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XFxuLVxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcXG4rXFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxcbiBcXHRcXHRcXHRcXHQgICB0c19uc2VjLCBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZXRnaWQsXFxuIFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiBcXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbiB9XFxuIFxcbi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiBcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG5AQCAtNDIyLDYgKzQyMiwyOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suXFxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxcbisgKiBpdGVyYXRpb24gcHVycG9zZXMuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXFxuKyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBvcmRlcjtcXG4rXFxuK1xcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4rXFx0aWYgKG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbitcXHRcXHQqcGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbkBAIC00NjEsMTQgKzQ4NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuLVxcdFxcdFxcdFxcdFxcdHBmbiArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XFxuK1xcdFxcdFxcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFxcdTAwMjZwZm4sIHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTUwNSwxMyArNTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gLypcXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuIFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRib29sIG9ubGluZTtcXG5AQCAtNTM5LDEwICs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdG5hbWUpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuQEAgLTU3OSw3ICs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcXG4gXFx0XFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcXG4gXFx0XFx0XFx0XFxcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuQEAgLTYzMCwxMCArNjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcXFxuXFxcIixcXG4rXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcXHUwMDI2Z2ZwX21hc2ssXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VwaWQsIHBhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbitcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYyk7XFxuIFxcbiBcXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0aWYgKCFoYW5kbGUpXFxuQEAgLTY0NSwxMiArNjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmICghaGFuZGxlKSB7XFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcXFxuXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCk7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuIFxcdFxcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNldGdpZCwgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuIGV4dF9wdXRfY29udGludWU6XFxuQEAgLTg4Nyw3ICs4OTQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4gXFx0cmV0dXJuIHN0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xcbiBcXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG5AQCAtOTA0LDcgKzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZChcXHUwMDI2c3RhY2tfcmVjb3JkLVxcdTAwM2Vjb3VudCkgLSAxO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAobnJfYmFzZV9wYWdlcyBcXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcXG4rXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcXG5AQCAtOTI2LDE2ICs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xcbiBcXHQuc3RhcnRcXHQ9IHN0YWNrX3N0YXJ0LFxcbiBcXHQubmV4dFxcdD0gc3RhY2tfbmV4dCxcXG4gXFx0LnN0b3BcXHQ9IHN0YWNrX3N0b3AsXFxuIFxcdC5zaG93XFx0PSBzdGFja19wcmludFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbi1cXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcXG4rXFx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXFx1MDAyNnN0YWNrX29wLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xcbiBcXG4gXFx0aWYgKCFyZXQpIHtcXG5AQCAtOTQ4LDI4ICs5NTUsMjYgQEAgc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcXG4tXFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbixcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcXG4rXFx0Lm9wZW5cXHRcXHQ9IHN0YWNrX29wZW4sXFxuIFxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiBcXHQucmVsZWFzZVxcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuIHtcXG4tXFx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XFxuK1xcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbiB7XFxuLVxcdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuK1xcdFdSSVRFX09OQ0UocGFnZXNfdGhyZXNob2xkLCB2YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCxcXG4tXFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFwiKTtcXG4tXFxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcXHUwMDI2dGhyZXNob2xkX2dldCwgXFx1MDAyNnRocmVzaG9sZF9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIHtcXG5AQCAtOTg1LDE3ICs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcXG4tXFx0XFx0XFx0ICAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfaGFuZGxlc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImNvdW50X3RocmVzaG9sZFxcXCIsIDA2MDAsIGRpciwgTlVMTCxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZ0aHJlc2hvbGRfZm9wcyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXFxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NFxcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcXG4rKysgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICBtYXhfcGZuID0gTm9uZVxcbiAgICAgcF9vcHMgPSBOb25lXFxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcXG4rICAgIG1yX25ldmVyID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcXG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcXFwibHgtZHVtcC1wYWdlLW93bmVyXFxcIiwgZ2RiLkNPTU1BTkRfU1VQUE9SVClcXG5AQCAtNjUsNiArNjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcXG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFxcXCJtYXhfcGZuXFxcIikpXFxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcXFwicGFnZV9leHRfc2l6ZVxcXCIpKVxcbiAgICAgICAgIHNlbGYubWlncmF0ZV9yZWFzb25fbmFtZXMgPSBnZGIucGFyc2VfYW5kX2V2YWwoJ21pZ3JhdGVfcmVhc29uX25hbWVzJylcXG4rICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgnTVJfTkVWRVInKSlcXG4gXFxuICAgICBkZWYgcGFnZV9leHRfaW52YWxpZChzZWxmLCBwYWdlX2V4dCk6XFxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxcbkBAIC0xMzgsNyArMTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICAgICAgZWxzZTpcXG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXFxcbicpXFxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcXFwiZnJlZV9oYW5kbGVcXFwiXSlcXG4tICAgICAgICBpZiBwYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ10gIT0gLTE6XFxuKyAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IHNlbGYubXJfbmV2ZXI6XFxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcbicgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXV0pXFxuIFxcbiAgICAgZGVmIHJlYWRfcGFnZV9vd25lcihzZWxmKTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzUuMDY1MzE1NjQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkzNjUwMzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nICdpbnQgcmVhc29uJyB0byAnZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24nLCBleHRyYWN0aW5nICdza2lwX2J1ZGR5X3BhZ2VzJywgbW92aW5nICNpZmRlZnMpLCB0cmFjZXBvaW50IHVwZGF0ZXMsIGFuZCBtaW5vciBkZWJ1Z2ZzIG91dHB1dCBmb3JtYXR0aW5nIGNoYW5nZXMgKGFkZGluZyBhIG5ld2xpbmUgdG8gYSBzaW1wbGUgYXR0cmlidXRlKS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjA3YmIyNjcxY2QwZWEwYjkwYjQwYTRjYzExNGIwMDhkMjEyZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoxNjozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbitcdFx0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiBtb2RpZmllZF9tYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4rXHRcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4gXHR7IHJldHVybiAtRU5PU1lTOyB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuK1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyArMjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwiY29udGlnX3JhbmdlXCIpXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcImxvbmd0ZXJtX3BpblwiKVx0XHRcdFxcXG4gXHRFTSggTVJfREVNT1RJT04sXHRcImRlbW90aW9uXCIpXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCJkYW1vblwiKVxuK1x0RU0oIE1SX0RBTU9OLFx0XHRcImRhbW9uXCIpXHRcdFx0XFxcbitcdEVNZShNUl9ORVZFUixcdFx0XCJuZXZlcl9taWdyYXRlZFwiKVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbitcdFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXG4gXHRcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuK1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxuIFxuLVx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuK1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gfVxuIFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4tXHRcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbitcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuIHtcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gICovXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLVx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxuIHtcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi40NmE5MzNmOWMyMjliZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiBcbiBcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xuLVx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxuK1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICs0MjIsMjkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcbisgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuK1xuK1x0aWYgKCFQYWdlQnVkZHkocGFnZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuK1x0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4rXHRcdCpwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuQEAgLTQ2MSwxNCArNDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXI7XG4tXG4tXHRcdFx0XHRmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cdFx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbitcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC01MDUsMTMgKzUyMiwxMyBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRzZXFfcHV0YyhtLCAnXFxuJyk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbiAvKlxuICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXRcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIG9ubGluZTtcbkBAIC01MzksMTAgKzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbitcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHJldHVybiByZXQ7XG4rfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuQEAgLTU3OSw3ICs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbkBAIC02MzAsMTAgKzY1MywxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCIpO1xuIFxuLVx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwiLFxuK1x0cHJfYWxlcnQoXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cIixcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4rXHRcdCBwYWdlX293bmVyLVx1MDAzZXRzX25zZWMpO1xuIFxuIFx0aGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItXHUwMDNlaGFuZGxlKTtcbiBcdGlmICghaGFuZGxlKVxuQEAgLTY0NSwxMiArNjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cIixcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbitcdFx0cHJfYWxlcnQoXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwiLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4rXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuK1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCJwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcblwiLFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgKzcyMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCArODE3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gKz0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIC0gMTtcbitcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyArODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbitcdFx0XHRcdFx0XHQgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4gXHRcdFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2V0Z2lkLCBjdXJyZW50LVx1MDAzZWNvbW0pO1xuIFx0XHRcdGNvdW50Kys7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyArODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpXG4gXHRyZXR1cm4gc3RhY2s7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDtcbiBcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG5AQCAtOTA0LDcgKzkxMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbitcdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcbkBAIC05MjYsMTYgKzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfb3AsXG4rXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZzdGFja19vcCxcbiBcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XG4gXG4gXHRpZiAoIXJldCkge1xuQEAgLTk0OCwyOCArOTU1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcbitcdC5vcGVuXHRcdD0gc3RhY2tfb3BlbixcbiBcdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG4gXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuIFx0LnJlbGVhc2VcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbitcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIHtcbi1cdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XG4rXHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcIiVsbHVcIik7XG4tXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwiJWxsdVxcblwiKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgKzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzX2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJjb3VudF90aHJlc2hvbGRcIiwgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGxhdGVfaW5pdGNhbGwocGFnZW93bmVyX2luaXQpXG5kaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcbi0tLSBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbisrKyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlcbkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxuICAgICBtYXhfcGZuID0gTm9uZVxuICAgICBwX29wcyA9IE5vbmVcbiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lXG4rICAgIG1yX25ldmVyID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcImx4LWR1bXAtcGFnZS1vd25lclwiLCBnZGIuQ09NTUFORF9TVVBQT1JUKVxuQEAgLTY1LDYgKzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwibWF4X3BmblwiKSlcbiAgICAgICAgIHNlbGYucGFnZV9leHRfc2l6ZSA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCJwYWdlX2V4dF9zaXplXCIpKVxuICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgnbWlncmF0ZV9yZWFzb25fbmFtZXMnKVxuKyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJ01SX05FVkVSJykpXG4gXG4gICAgIGRlZiBwYWdlX2V4dF9pbnZhbGlkKHNlbGYsIHBhZ2VfZXh0KTpcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcbkBAIC0xMzgsNyArMTQwLDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBlbHNlOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XFxuJylcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXCJmcmVlX2hhbmRsZVwiXSlcbi0gICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSAtMTpcbisgICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSBzZWxmLm1yX25ldmVyOlxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG4nICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ11dKVxuIFxuICAgICBkZWYgcmVhZF9wYWdlX293bmVyKHNlbGYpOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6MzUuMDY1MzIwNDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5MzY0NjMzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBhIFBhZ2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyBzZXZlcmFsIHBhZ2UgbWlncmF0aW9uIGFuZCBgcGFnZV9vd25lcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogaXMgdGhlcmUgYW55dGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCB0aGVyZSdzIGEgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWNvbWluZyBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBBbHNvLCBgTVJfTkVWRVJgIGlzIGJlaW5nIGludHJvZHVjZWQsIHJlcGxhY2luZyBgLTFgIGluIGBwYWdlX293bmVyLmNgLiBUaGlzICpmZWVscyogbGlrZSBhIHJlZmFjdG9yaW5nLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0IGFsc28gdG91Y2hlcyBgc2tpcF9idWRkeV9wYWdlc2AsIHNvbWUgcmVuYW1pbmcgaW4gYHBhZ2Vfb3duZXIuY2AsIGFkZHMgYE1SX05FVkVSYCB0byBhIHRyYWNlcG9pbnQsIGFuZCB1cGRhdGVzIGEgR0RCIHNjcmlwdC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBgc2tpcF9idWRkeV9wYWdlc2AgcmVmYWN0b3JpbmcuIFRoZSBvbGQgY29kZSBoYWQgc29tZSBjb25kaXRpb25hbCBsb2dpYyByZWdhcmRpbmcgYnVkZHkgcGFnZXMgYW5kIG9yZGVycy4gVGhlIG5ldyB2ZXJzaW9uIHNpbXBsaWZpZXMgaXQsIGNhbGxpbmcgdGhlIHNhbWUgZnVuY3Rpb24gaW4gc2V2ZXJhbCBvdGhlciBwbGFjZXMuIEkgbmVlZCB0byBiZSAqc3VyZSogdGhpcyBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4gQ29tcGFyaW5nIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBkaWZmZXJlbmNlIHdoZXJlIHRoZSBuZXcgdmVyc2lvbiBjaGVja3MgIGBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSYCB3aGVyZSB0aGUgb2xkIHZlcnNpb24gY2hlY2tlZCBgb3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVJgLiBCdXQgaWYgYG9yZGVyYCBpcyAwLCB0aGUgYHBmbmAgaXNuJ3QgY2hhbmdlZCBpbiBlaXRoZXIgY2FzZSwgc28gdGhpcyAqaXNuJ3QqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgc2ltaWxhciByZWZhY3RvcmluZ3MsIGp1c3QgY2FsbGluZyB0aGUgbmV3IGZ1bmN0aW9uIGluIHBsYWNlIG9mIHRoZSBvbGQgY29uZGl0aW9uYWwgY2hlY2tzLCBzbyBzdGlsbCBubyBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTW92aW5nIG9uLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AgaXMgbm93IHJlZmFjdG9yZWQgd2l0aCBhIG1vdmUgb2YgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBvdXRzaWRlIHRoZSBmdW5jdGlvbi4gUHVyZWx5IGNvc21ldGljLCB0aGF0J3MgYSBuby1nbyBmb3IgZnV6emluZy4gVGhlbiB0aGVyZSdzIHRoZSBgdGhyZXNob2xkX2ZvcHNgIGNoYW5nZTogYSBgXFxuYCBhZGRlZCB0byB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBpcyBhIHRyaXZpYWwgY2hhbmdlIGFuZCBhIGRlZmluaXRlIG5vbi1pc3N1ZS5cblxuSSdtIG1ha2luZyBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gVGhlIGNoYW5nZXMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCBhbmQgdGhlIGNvbXBhcmlzb24gYHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUmAgYXJlIGp1c3QgY29uc2lzdGVuY3kgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE1SX05FVkVSYCwgYW5vdGhlciB0eXBlLXJlbGF0ZWQgY2hhbmdlLiBBZGRpbmcgYE1SX05FVkVSYCB0byB0aGUgYG1pZ3JhdGVfcmVhc29uX25hbWVzYCBhcnJheSBpbiB0aGUgdHJhY2Vwb2ludCBoZWFkZXIuLi4gYWdhaW4sIHJlZmFjdG9yaW5nLCBhZGRpbmcgdG8gYSB0cmFjZSBwb2ludCdzIG91dHB1dCwgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvLCB0aGUgb3ZlcmFyY2hpbmcgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBuZXcgY29yZSBrZXJuZWwgbG9naWMsIG9yIGFueSBkcml2ZXJzL2FyY2hpdGVjdHVyZXMgYmVpbmcgdG91Y2hlZCB0aGF0IGNhbiBiZSBleGVjdXRlZCBhbmQgZnV6emVkPyBOb3BlLiBJdCdzIG1vc3RseSByZWZhY3RvcmluZywgc29tZSB0eXBlIHVwZGF0ZXMsIGFuZCBtaW5vciBjaGFuZ2VzIHRvIGhvdyB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnIGZlYXR1cmUgd29ya3MuXG5cblRoZSBgcGFnZV9vd25lcmAgaXMgcmVhbGx5IGEgZGVidWdnaW5nIGFpZCwgbm90IGEgY29yZSBwYXRoLCBzbyBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1Z3MgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IuXG5cblRoZSBwYXRjaCByZWFsbHkgb25seSBtYWtlcyBjaGFuZ2VzIHRoYXQgYXJlOiBtb2RpZmljYXRpb25zIHRvIG51bWVyaWMgY29uc3RhbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGFuZCByZWZhY3RvcmluZy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcyBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnV6emluZyBydWxlcywgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTYsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6MTY6NTAuMDAxNzg3NDQ1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJ2ludCByZWFzb24nIHRvICdlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbicsIGV4dHJhY3RpbmcgJ3NraXBfYnVkZHlfcGFnZXMnLCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgJ2ludCByZWFzb24nIHRvICdlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbicsIGV4dHJhY3RpbmcgJ3NraXBfYnVkZHlfcGFnZXMnLCBtb3ZpbmcgI2lmZGVmcyksIHRyYWNlcG9pbnQgdXBkYXRlcywgYW5kIG1pbm9yIGRlYnVnZnMgb3V0cHV0IGZvcm1hdHRpbmcgY2hhbmdlcyAoYWRkaW5nIGEgbmV3bGluZSB0byBhIHNpbXBsZSBhdHRyaWJ1dGUpLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqw22[1] Phase: Running StartedAt: 2026-07-01 07:17:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqw22[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 07:17:17 +0000 UTC FinishedAt: 2026-07-01 07:17:26 +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,}