Name: series-workflowmf7w6 Phase: Failed StartedAt: 2026-07-01 21:07:37 +0000 UTC FinishedAt: 2026-07-01 21:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf7w6[0] Phase: Succeeded StartedAt: 2026-07-01 21:07:38 +0000 UTC FinishedAt: 2026-07-01 21:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf7w6[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 21:07:38 +0000 UTC FinishedAt: 2026-07-01 21:19:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU0NmQ4N2NiMmQ0MGU3ZWQ2MTA1MGEyOGYxYzJmNDYxOTA4OWFmMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDIxOjE1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGVcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxuQEAgLTI0LDYgJiM0MzsyNCw2IEBAIGhjbGdldmYtb2JqcyA9IGhuczN2Zi9oY2xnZXZmX21haW4ubyBobnMzdmYvaGNsZ2V2Zl9tYngubyAgaG5zM3ZmL2hjbGdldmZfZGV2bGluXG4gb2JqLSQoQ09ORklHX0hOUzNfSENMR0UpICYjNDM7PSBoY2xnZS5vIGhjbGdlLWNvbW1vbi5vXG4gaGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXG4gXHRcdGhuczNwZi9oY2xnZV9tYngubyBobnMzcGYvaGNsZ2VfZXJyLm8gIGhuczNwZi9oY2xnZV9kZWJ1Z2ZzLm8gaG5zM3BmL2hjbGdlX3B0cC5vIGhuczNwZi9oY2xnZV9kZXZsaW5rLm8gXFxcbi1cdFx0aG5zM3BmL2hjbGdlX2ZkLm9cbiYjNDM7XHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuIFxuIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSAmIzQzOz0gaG5zM3BmL2hjbGdlX2RjYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi5kMmMxYzczNjE3YTQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbkBAIC03OTYsNiAmIzQzOzc5Niw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8pKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgKnN0YXR1c19jb2RlKTtcbiBcdHZvaWQgKCpjbGVhbl92Zl9jb25maWcpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpO1xuJiM0MztcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbiYjNDM7XHR2b2lkICgqZGVzdHJveV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpO1xuIFx0aW50ICgqZ2V0X2RzY3BfcHJpbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1OCBkc2NwLFxuIFx0XHRcdCAgICAgdTggKnRjX21hcF9tb2RlLCB1OCAqcHJpb3JpdHkpO1xuIFx0dm9pZCAoKmdldF93b2wpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXG5pbmRleCA2ZWNiMzJlMjhlNzlhOC4uZjM5M2U5ZjgxZmE2OWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcbkBAIC0zMjExLDYgJiM0MzszMjExLDcgQEAgc3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gICoqL1xuIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbiB7XG4mIzQzO1x0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcbkBAIC0zMjIwLDEzICYjNDM7MzIyMSwyNCBAQCBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4gXG4gXHRpZiAobnVtX3Zmcykge1xuIFx0XHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG51bV92ZnMpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1NSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cJiMzNDssIHJldCk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VjcmVhdGVfdmZfcmVwcyhhZV9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIG51bV92ZnMpO1xuJiM0MztcdFx0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIG51bV92ZnM7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XG4gXHRcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XG4gXG4mIzQzO1x0XHRpZiAoYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXN0cm95X3ZmX3JlcHMpXG4mIzQzO1x0XHRcdGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XG4gXHRcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFx0XHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcbmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC92eGxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aGNsZ2VfZmQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hjbGdlX21haW4uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoY2xnZV92Zl9yZXAuaFwmIzM0O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5X2luZm8gbWV0YV9kYXRhX2tleV9pbmZvW10gPSB7XG4gXHR7IFBBQ0tFVF9UWVBFX0lELCA2IH0sXG5AQCAtMjI4NSw2ICYjNDM7MjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZSlcbiB7XG5AQCAtMjI5MiwxMCAmIzQzOzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuIFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWM7XG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbiA9IFx1MDAyNmZsb3ctXHUwMDNlYWN0aW9uO1xuJiM0MztcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVx1MDAzZW5pYy5raW5mby5udW1fdHFwcztcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuIFx0aW50IHRjO1xuIFxuIFx0aWYgKCFmbG93X2FjdGlvbl9oYXNfZW50cmllcyhcdTAwMjZmbG93LVx1MDAzZWFjdGlvbikpIHtcbiYjNDM7XHRcdGlmICh2cG9ydCAhPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtWRiBkb2VzIG5vdCBzdXBwb3J0IHNlbGVjdCBUQyBhY3Rpb25cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHR0YyA9IHRjX2NsYXNzaWRfdG9faHd0YyhoYW5kbGUtXHUwMDNlbmV0ZGV2LCBjbHNfZmxvd2VyLVx1MDAzZWNsYXNzaWQpO1xuIFx0XHRpZiAodGMgXHUwMDNjIDAgfHwgdGMgXHUwMDNlIGhkZXYtXHUwMDNldGNfbWF4KSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG5AQCAtMjMxMSwxMSAmIzQzOzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0YWN0ID0gXHUwMDI2YWN0aW9uLVx1MDAzZWVudHJpZXNbMF07XG4gXHRzd2l0Y2ggKGFjdC1cdTAwM2VpZCkge1xuIFx0Y2FzZSBGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HOlxuLVx0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gaGFuZGxlLVx1MDAzZWtpbmZvLm51bV90cXBzKSB7XG4mIzQzO1x0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gbnVtX3RxcHMpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3F1ZXVlIGlkICgldSkgc2hvdWxkIGJlIGxlc3MgdGhhbiAldVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgICAgIGFjdC1cdTAwM2VyeF9xdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGhhbmRsZS1cdTAwM2VraW5mby5udW1fdHFwcyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWN0LVx1MDAzZXJ4X3F1ZXVlLCBudW1fdHFwcyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbkBAIC0yNDIzLDEyICYjNDM7MjQzMSwxMSBAQCBzdGF0aWMgaW50IGhjbGdlX2NoZWNrX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuLVx0XHRcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7c3RhdGljIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4ge1xuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuLVx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xuLVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4gXHRzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMjQ1MSwxNCAmIzQzOzI0NTgsMTQgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpO1xuJiM0MztcdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIHZwb3J0LCBjbHNfZmxvd2VyLCBydWxlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a2ZyZWUocnVsZSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydWxlLVx1MDAzZWxvY2F0aW9uID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24ucHJpbyAtIDE7XG4tXHRydWxlLVx1MDAzZXZmX2lkID0gMDtcbiYjNDM7XHRydWxlLVx1MDAzZXZmX2lkID0gdnBvcnQtXHUwMDNldnBvcnRfaWQ7XG4gXHRydWxlLVx1MDAzZWNsc19mbG93ZXIuY29va2llID0gY2xzX2Zsb3dlci1cdTAwM2Vjb29raWU7XG4gXHRydWxlLVx1MDAzZXJ1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7XG4gXG5AQCAtMjQ2OSw2ICYjNDM7MjQ3NiwyMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbih2cG9ydC1cdTAwM2ViYWNrLCB2cG9ydCwgY2xzX2Zsb3dlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVx1MDAzZWhkZXYsIHZmX3JlcC1cdTAwM2V2cG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgIGNsc19mbG93ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXG4ge1xuQEAgLTI1MjIsNiAmIzQzOzI1NDQsMTQgQEAgaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXIoXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWMsIGNsc19mbG93ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhjbGdlX3N5bmNfZmRfbGlzdChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QpXG4ge1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxuaW5kZXggMmY2NmNjOWMzYzY1YzQuLjIwMGQ4MWNlMTJjOGQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXG5AQCAtNiw2ICYjNDM7Niw4IEBAXG4gXG4gc3RydWN0IGhuYWUzX2hhbmRsZTtcbiBzdHJ1Y3QgaGNsZ2VfZGV2O1xuJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwO1xuJiM0MztzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcbiBcbiBpbnQgaGNsZ2VfaW5pdF9mZF9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldik7XG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuQEAgLTI2LDYgJiM0MzsyOCwxMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIGludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKTtcbiBib29sIGhjbGdlX2lzX2Nsc19mbG93ZXJfYWN0aXZlKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSk7XG4mIzQzO1xuJiM0MztpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuJiM0MztpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGludCBoY2xnZV9jbGVhcl9hcmZzX3J1bGVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuIHZvaWQgaGNsZ2Vfc3luY19mZF90YWJsZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uNWY4ODE4N2YxY2E4M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMTA1MzQsNiAmIzQzOzEwNTM0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xuIFx0LmdldF90c19pbmZvID0gaGNsZ2VfcHRwX2dldF90c19pbmZvLFxuIFx0LmdldF9saW5rX2RpYWdub3Npc19pbmZvID0gaGNsZ2VfZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8sXG4gXHQuY2xlYW5fdmZfY29uZmlnID0gaGNsZ2VfY2xlYW5fdnBvcnRfY29uZmlnLFxuJiM0MztcdC5jcmVhdGVfdmZfcmVwcyA9IGhjbGdlX2NyZWF0ZV92Zl9yZXBzLFxuJiM0MztcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXG4gXHQuZ2V0X2RzY3BfcHJpbyA9IGhjbGdlX2dldF9kc2NwX3ByaW8sXG4gXHQuZ2V0X3dvbCA9IGhjbGdlX2dldF93b2wsXG4gXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbmluZGV4IDc0MTk0ODE0MjJjMzEwLi40ZjExYjljMzhlNjllMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbkBAIC0xNyw2ICYjNDM7MTcsOSBAQFxuICNpbmNsdWRlIFwmIzM0O2huYWUzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoY2xnZV9jb21tX3Jzcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGNsZ2VfY29tbV90cXBfc3RhdHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoY2xnZV92Zl9yZXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGhjbGdlX3ZmX3JlcDtcbiBcbiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OIFwmIzM0OzEuMFwmIzM0O1xuICNkZWZpbmUgSENMR0VfRFJJVkVSX05BTUUgXCYjMzQ7aGNsZ2VcJiMzNDtcbkBAIC05MzUsNiAmIzQzOzkzOCw5IEBAIHN0cnVjdCBoY2xnZV9kZXYge1xuIFx0Ym9vbCBjdXJfcHJvbWlzYztcbiBcdGludCBudW1fYWxsb2NfdmZzO1x0LyogQWN0dWFsIG51bWJlciBvZiBWRnMgYWxsb2NhdGVkICovXG4gXG4mIzQzO1x0c3RydWN0IGhjbGdlX3ZmX3JlcFx0Kip2Zl9yZXBzO1xuJiM0MztcdHUxNlx0XHRcdG51bV92Zl9yZXBzO1xuJiM0MztcbiBcdHN0cnVjdCBoY2xnZV9jb21tX3RxcCAqaHRxcDtcbiBcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1MTMzNjA0MGQ2ZmIzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmNcbkBAIC0wLDAgJiM0MzsxLDE1OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8vIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC5cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGNsZ2VfbWFpbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hjbGdlX3ZmX3JlcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hjbGdlX2ZkLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBoY2xnZV92Zl9yZXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSBzbnByaW50ZihidWYsIGxlbiwgXCYjMzQ7cGYldXZmJXVcJiMzNDssIFBDSV9GVU5DKGhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXZmbiksXG4mIzQzO1x0XHQgICAgICB2Zl9yZXAtXHUwMDNldnBvcnQtXHUwMDNldnBvcnRfaWQgLSAxKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNlPSBsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IGNiX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdGNfY2xzX2Nhbl9vZmZsb2FkX2FuZF9jaGFpbjAodmZfcmVwLVx1MDAzZW5ldGRldiwgdHlwZV9kYXRhKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9DTFNGTE9XRVI6XG4mIzQzO1x0XHRzd2l0Y2ggKGNsc19mbG93ZXItXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxuJiM0MztcdFx0XHRyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcbiYjNDM7XHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbiYjNDM7XHRcdFx0cmV0dXJuIGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHZmX3JlcCwgY2xzX2Zsb3dlcik7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQoaGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBoY2xnZV92Zl9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4mIzQzO1x0XHRyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmhjbGdlX3ZmX3JlcF9ibG9ja19jYl9saXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYixcbiYjNDM7XHRcdFx0XHRcdFx0ICB2Zl9yZXAsIHZmX3JlcCwgdHJ1ZSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHMgPSB7XG4mIzQzO1x0Lm5kb19zdGFydF94bWl0XHRcdD0gaGNsZ2VfdmZfcmVwX3htaXQsXG4mIzQzO1x0Lm5kb19nZXRfcGh5c19wb3J0X25hbWVcdD0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSxcbiYjNDM7XHQubmRvX3NldHVwX3RjXHRcdFx0PSBoY2xnZV92Zl9yZXBfc2V0dXBfdGMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoY2xnZV92Zl9yZXBfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XG4mIzQzO1x0bmRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4mIzQzO1x0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3ZmcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBhZV9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXA7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0Y2hhciBuYW1lW0lGTkFNU0laXTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aGRldi1cdTAwM2V2Zl9yZXBzID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCAqKSxcbiYjNDM7XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWhkZXYtXHUwMDNldmZfcmVwcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgSUZOQU1TSVosIFwmIzM0OyVzX3JlcCVkXCYjMzQ7LFxuJiM0MztcdFx0XHQgaGRldi1cdTAwM2V2cG9ydFswXS5uaWMubmV0ZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCksIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5FVF9OQU1FX1VOS05PV04sIGV0aGVyX3NldHVwKTtcbiYjNDM7XHRcdGlmICghbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoY2xnZV92Zl9yZXBfbmV0X3NldHVwKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRcdHZmX3JlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdFx0dmZfcmVwLVx1MDAzZWhkZXYgPSBoZGV2O1xuJiM0MztcdFx0dmZfcmVwLVx1MDAzZXZwb3J0ID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFtpICYjNDM7IEhDTEdFX1ZGX1ZQT1JUX1NUQVJUX05VTV07XG4mIzQzO1x0XHR2Zl9yZXAtXHUwMDNlbmV0ZGV2ID0gbmRldjtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXZmX3JlcHNbaV0gPSB2Zl9yZXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZW51bV92Zl9yZXBzID0gbnVtX3ZmcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR3aGlsZSAoaS0tKVxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cdTAwM2V2Zl9yZXBzW2ldLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0a2ZyZWUoaGRldi1cdTAwM2V2Zl9yZXBzKTtcbiYjNDM7XHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBOVUxMO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBhZV9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZGV2LVx1MDAzZXZmX3JlcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhkZXYtXHUwMDNlbnVtX3ZmX3JlcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaGRldi1cdTAwM2V2Zl9yZXBzW2ldKVxuJiM0MztcdFx0XHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVx1MDAzZXZmX3JlcHNbaV0tXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGhkZXYtXHUwMDNldmZfcmVwcyk7XG4mIzQzO1x0aGRldi1cdTAwM2V2Zl9yZXBzID0gTlVMTDtcbiYjNDM7XHRoZGV2LVx1MDAzZW51bV92Zl9yZXBzID0gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oXG5AQCAtMCwwICYjNDM7MSwyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7ICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19IQ0xHRV9WRl9SRVBfSFxuJiM0MzsjZGVmaW5lIF9fSENMR0VfVkZfUkVQX0hcbiYjNDM7XG4mIzQzO3N0cnVjdCBobmFlM19hZV9kZXY7XG4mIzQzO3N0cnVjdCBoY2xnZV9kZXY7XG4mIzQzO3N0cnVjdCBoY2xnZV92cG9ydDtcbiYjNDM7c3RydWN0IG5ldF9kZXZpY2U7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwIHtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfZGV2XHQqaGRldjtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfdnBvcnRcdCp2cG9ydDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBoY2xnZV9jcmVhdGVfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbiYjNDM7dm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTQ2ZDg3Y2IyZDQwZTdlZDYxMDUwYTI4ZjFjMmY0NjE5MDg5YWYxNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMjE6MTU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlCmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUKQEAgLTI0LDYgJiM0MzsyNCw2IEBAIGhjbGdldmYtb2JqcyA9IGhuczN2Zi9oY2xnZXZmX21haW4ubyBobnMzdmYvaGNsZ2V2Zl9tYngubyAgaG5zM3ZmL2hjbGdldmZfZGV2bGluCiBvYmotJChDT05GSUdfSE5TM19IQ0xHRSkgJiM0Mzs9IGhjbGdlLm8gaGNsZ2UtY29tbW9uLm8KIGhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcCiAJCWhuczNwZi9oY2xnZV9tYngubyBobnMzcGYvaGNsZ2VfZXJyLm8gIGhuczNwZi9oY2xnZV9kZWJ1Z2ZzLm8gaG5zM3BmL2hjbGdlX3B0cC5vIGhuczNwZi9oY2xnZV9kZXZsaW5rLm8gXAotCQlobnMzcGYvaGNsZ2VfZmQubwomIzQzOwkJaG5zM3BmL2hjbGdlX2ZkLm8gaG5zM3BmL2hjbGdlX3ZmX3JlcC5vCiAKIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSAmIzQzOz0gaG5zM3BmL2hjbGdlX2RjYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaAppbmRleCBhODc5OGVlY2Q5ZmJkMC4uZDJjMWM3MzYxN2E0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaApAQCAtNzk2LDYgJiM0Mzs3OTYsOCBAQCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHsKIAlpbnQgKCpnZXRfbGlua19kaWFnbm9zaXNfaW5mbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQkJCSAgICAgICB1MzIgKnN0YXR1c19jb2RlKTsKIAl2b2lkICgqY2xlYW5fdmZfY29uZmlnKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTsKJiM0MzsJaW50ICgqY3JlYXRlX3ZmX3JlcHMpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpOwomIzQzOwl2b2lkICgqZGVzdHJveV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpOwogCWludCAoKmdldF9kc2NwX3ByaW8pKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTggZHNjcCwKIAkJCSAgICAgdTggKnRjX21hcF9tb2RlLCB1OCAqcHJpb3JpdHkpOwogCXZvaWQgKCpnZXRfd29sKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jCmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMKQEAgLTMyMTEsNiAmIzQzOzMyMTEsNyBAQCBzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKICAqKi8KIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcykKIHsKJiM0MzsJc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSAmYW1wOyZhbXA7IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkgewpAQCAtMzIyMCwxMyAmIzQzOzMyMjEsMjQgQEAgc3RhdGljIGludCBobnMzX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKQogCiAJaWYgKG51bV92ZnMpIHsKIAkJcmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7U1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxuJiMzNDssIHJldCk7Ci0JCWVsc2UKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKGFlX2Rldi0mZ3Q7b3BzLSZndDtjcmVhdGVfdmZfcmVwcykgewomIzQzOwkJCQlyZXQgPSBhZV9kZXYtJmd0O29wcy0mZ3Q7Y3JlYXRlX3ZmX3JlcHMoYWVfZGV2LAomIzQzOwkJCQkJCQkJICBudW1fdmZzKTsKJiM0MzsJCQkJaWYgKHJldCkKJiM0MzsJCQkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXG4mIzM0OywKJiM0MzsJCQkJCQlyZXQpOwomIzQzOwkJCX0KIAkJCXJldHVybiBudW1fdmZzOwomIzQzOwkJfQogCX0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHsKIAkJaW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTsKIAomIzQzOwkJaWYgKGFlX2Rldi0mZ3Q7b3BzLSZndDtkZXN0cm95X3ZmX3JlcHMpCiYjNDM7CQkJYWVfZGV2LSZndDtvcHMtJmd0O2Rlc3Ryb3lfdmZfcmVwcyhhZV9kZXYpOwogCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKIAkJaG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jCmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC92eGxhbi5oJmd0OwogI2luY2x1ZGUgJiMzNDtoY2xnZV9mZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGNsZ2VfbWFpbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX3ZmX3JlcC5oJiMzNDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlfaW5mbyBtZXRhX2RhdGFfa2V5X2luZm9bXSA9IHsKIAl7IFBBQ0tFVF9UWVBFX0lELCA2IH0sCkBAIC0yMjg1LDYgJiM0MzsyMjg2LDcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfY2xzX2tleV9pcF90b3MoY29uc3Qgc3RydWN0IGZsb3dfcnVsZSAqZmxvdywKIH0KIAogc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LAogCQkJCSAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyLAogCQkJCSAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKQogewpAQCAtMjI5MiwxMCAmIzQzOzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7CiAJc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gJmFtcDtoZGV2LSZndDt2cG9ydFswXS5uaWM7CiAJc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24gPSAmYW1wO2Zsb3ctJmd0O2FjdGlvbjsKJiM0MzsJdTE2IG51bV90cXBzID0gdnBvcnQtJmd0O25pYy5raW5mby5udW1fdHFwczsKIAlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKIAlpbnQgdGM7CiAKIAlpZiAoIWZsb3dfYWN0aW9uX2hhc19lbnRyaWVzKCZhbXA7Zmxvdy0mZ3Q7YWN0aW9uKSkgewomIzQzOwkJaWYgKHZwb3J0ICE9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0pIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtWRiBkb2VzIG5vdCBzdXBwb3J0IHNlbGVjdCBUQyBhY3Rpb24mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwogCQl0YyA9IHRjX2NsYXNzaWRfdG9faHd0YyhoYW5kbGUtJmd0O25ldGRldiwgY2xzX2Zsb3dlci0mZ3Q7Y2xhc3NpZCk7CiAJCWlmICh0YyAmbHQ7IDAgfHwgdGMgJmd0OyBoZGV2LSZndDt0Y19tYXgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLApAQCAtMjMxMSwxMSAmIzQzOzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAogCWFjdCA9ICZhbXA7YWN0aW9uLSZndDtlbnRyaWVzWzBdOwogCXN3aXRjaCAoYWN0LSZndDtpZCkgewogCWNhc2UgRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORzoKLQkJaWYgKGFjdC0mZ3Q7cnhfcXVldWUgJmd0Oz0gaGFuZGxlLSZndDtraW5mby5udW1fdHFwcykgewomIzQzOwkJaWYgKGFjdC0mZ3Q7cnhfcXVldWUgJmd0Oz0gbnVtX3RxcHMpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAogCQkJCQkgICAgICAgJiMzNDtxdWV1ZSBpZCAoJXUpIHNob3VsZCBiZSBsZXNzIHRoYW4gJXUmIzM0OywKLQkJCQkJICAgICAgIGFjdC0mZ3Q7cnhfcXVldWUsCi0JCQkJCSAgICAgICBoYW5kbGUtJmd0O2tpbmZvLm51bV90cXBzKTsKJiM0MzsJCQkJCSAgICAgICBhY3QtJmd0O3J4X3F1ZXVlLCBudW1fdHFwcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yNDIzLDEyICYjNDM7MjQzMSwxMSBAQCBzdGF0aWMgaW50IGhjbGdlX2NoZWNrX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKLQkJCSBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcikKJiM0MztzdGF0aWMgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQogewogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7Ci0Jc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpOwotCXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKIAlzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTsKIAlpbnQgcmV0OwogCkBAIC0yNDUxLDE0ICYjNDM7MjQ1OCwxNCBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpOwomIzQzOwlyZXQgPSBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihoZGV2LCB2cG9ydCwgY2xzX2Zsb3dlciwgcnVsZSk7CiAJaWYgKHJldCkgewogCQlrZnJlZShydWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlydWxlLSZndDtsb2NhdGlvbiA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvIC0gMTsKLQlydWxlLSZndDt2Zl9pZCA9IDA7CiYjNDM7CXJ1bGUtJmd0O3ZmX2lkID0gdnBvcnQtJmd0O3Zwb3J0X2lkOwogCXJ1bGUtJmd0O2Nsc19mbG93ZXIuY29va2llID0gY2xzX2Zsb3dlci0mZ3Q7Y29va2llOwogCXJ1bGUtJmd0O3J1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7CiAKQEAgLTI0NjksNiAmIzQzOzI0NzYsMjEgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7aW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKJiM0MzsJCQkgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0ID0gaGNsZ2VfZ2V0X3Zwb3J0KGhhbmRsZSk7CiYjNDM7CiYjNDM7CXJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odnBvcnQtJmd0O2JhY2ssIHZwb3J0LCBjbHNfZmxvd2VyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCwKJiM0MzsJCQkgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfY29tbW9uKHZmX3JlcC0mZ3Q7aGRldiwgdmZfcmVwLSZndDt2cG9ydCwKJiM0MzsJCQkJCSAgIGNsc19mbG93ZXIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsCiAJCQkJCQkgICB1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKQEAgLTI1MjIsNiAmIzQzOzI1NDQsMTQgQEAgaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsCiYjNDM7CQkJICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC0mZ3Q7aGRldjsKJiM0MzsKJiM0MzsJcmV0dXJuIGhjbGdlX2RlbF9jbHNfZmxvd2VyKCZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0ubmljLCBjbHNfZmxvd2VyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBoY2xnZV9zeW5jX2ZkX2xpc3Qoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgc3RydWN0IGhsaXN0X2hlYWQgKmhsaXN0KQogewogCXN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaAppbmRleCAyZjY2Y2M5YzNjNjVjNC4uMjAwZDgxY2UxMmM4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oCkBAIC02LDYgJiM0Mzs2LDggQEAKIAogc3RydWN0IGhuYWUzX2hhbmRsZTsKIHN0cnVjdCBoY2xnZV9kZXY7CiYjNDM7c3RydWN0IGhjbGdlX3ZmX3JlcDsKJiM0MztzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDsKIAogaW50IGhjbGdlX2luaXRfZmRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpOwogaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpOwpAQCAtMjYsNiAmIzQzOzI4LDExIEBAIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCiBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQkJIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKTsKIGJvb2wgaGNsZ2VfaXNfY2xzX2Zsb3dlcl9hY3RpdmUoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKTsKJiM0MzsKJiM0MztpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLAomIzQzOwkJCSAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcik7CiYjNDM7aW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCwKJiM0MzsJCQkgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpOwogaW50IGhjbGdlX2NsZWFyX2FyZnNfcnVsZXMoc3RydWN0IGhjbGdlX2RldiAqaGRldik7CiB2b2lkIGhjbGdlX3N5bmNfZmRfdGFibGUoc3RydWN0IGhjbGdlX2RldiAqaGRldik7CiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKaW5kZXggZmM4NTg3YzgwODEzNzEuLjVmODgxODdmMWNhODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKQEAgLTEwNTM0LDYgJiM0MzsxMDUzNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHsKIAkuZ2V0X3RzX2luZm8gPSBoY2xnZV9wdHBfZ2V0X3RzX2luZm8sCiAJLmdldF9saW5rX2RpYWdub3Npc19pbmZvID0gaGNsZ2VfZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8sCiAJLmNsZWFuX3ZmX2NvbmZpZyA9IGhjbGdlX2NsZWFuX3Zwb3J0X2NvbmZpZywKJiM0MzsJLmNyZWF0ZV92Zl9yZXBzID0gaGNsZ2VfY3JlYXRlX3ZmX3JlcHMsCiYjNDM7CS5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsCiAJLmdldF9kc2NwX3ByaW8gPSBoY2xnZV9nZXRfZHNjcF9wcmlvLAogCS5nZXRfd29sID0gaGNsZ2VfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaAppbmRleCA3NDE5NDgxNDIyYzMxMC4uNGYxMWI5YzM4ZTY5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaApAQCAtMTcsNiAmIzQzOzE3LDkgQEAKICNpbmNsdWRlICYjMzQ7aG5hZTMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hjbGdlX2NvbW1fcnNzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoY2xnZV9jb21tX3RxcF9zdGF0cy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX3ZmX3JlcC5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwOwogCiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OICYjMzQ7MS4wJiMzNDsKICNkZWZpbmUgSENMR0VfRFJJVkVSX05BTUUgJiMzNDtoY2xnZSYjMzQ7CkBAIC05MzUsNiAmIzQzOzkzOCw5IEBAIHN0cnVjdCBoY2xnZV9kZXYgewogCWJvb2wgY3VyX3Byb21pc2M7CiAJaW50IG51bV9hbGxvY192ZnM7CS8qIEFjdHVhbCBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZCAqLwogCiYjNDM7CXN0cnVjdCBoY2xnZV92Zl9yZXAJKip2Zl9yZXBzOwomIzQzOwl1MTYJCQludW1fdmZfcmVwczsKJiM0MzsKIAlzdHJ1Y3QgaGNsZ2VfY29tbV90cXAgKmh0cXA7CiAJc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNTEzMzYwNDBkNmZiMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYwpAQCAtMCwwICYjNDM7MSwxNTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7Ly8gQ29weXJpZ2h0IChjKSAyMDI2IEhpc2lsaWNvbiBMaW1pdGVkLgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9mbG93X29mZmxvYWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX21haW4uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoY2xnZV92Zl9yZXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoY2xnZV9mZC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgaGNsZ2VfdmZfcmVwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoY2xnZV92Zl9yZXBfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC0mZ3Q7aGRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAmIzM0O3BmJXV2ZiV1JiMzNDssIFBDSV9GVU5DKGhkZXYtJmd0O3BkZXYtJmd0O2RldmZuKSwKJiM0MzsJCSAgICAgIHZmX3JlcC0mZ3Q7dnBvcnQtJmd0O3Zwb3J0X2lkIC0gMSk7CiYjNDM7CWlmIChyYyAmZ3Q7PSBsZW4pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2OwomIzQzOwomIzQzOwlpZiAoIXRjX2Nsc19jYW5fb2ZmbG9hZF9hbmRfY2hhaW4wKHZmX3JlcC0mZ3Q7bmV0ZGV2LCB0eXBlX2RhdGEpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19TRVRVUF9DTFNGTE9XRVI6CiYjNDM7CQlzd2l0Y2ggKGNsc19mbG93ZXItJmd0O2NvbW1hbmQpIHsKJiM0MzsJCWNhc2UgRkxPV19DTFNfUkVQTEFDRToKJiM0MzsJCQlyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTsKJiM0MzsJCWNhc2UgRkxPV19DTFNfREVTVFJPWToKJiM0MzsJCQlyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQoaGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfQkxPQ0s6CiYjNDM7CQlyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLAomIzQzOwkJCQkJCSAgJmFtcDtoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCwKJiM0MzsJCQkJCQkgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYiwKJiM0MzsJCQkJCQkgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhjbGdlX3ZmX3JlcF9uZXRkZXZfb3BzID0gewomIzQzOwkubmRvX3N0YXJ0X3htaXQJCT0gaGNsZ2VfdmZfcmVwX3htaXQsCiYjNDM7CS5uZG9fZ2V0X3BoeXNfcG9ydF9uYW1lCT0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSwKJiM0MzsJLm5kb19zZXR1cF90YwkJCT0gaGNsZ2VfdmZfcmVwX3NldHVwX3RjLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfdmZfcmVwX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO2hjbGdlX3ZmX3JlcF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoY2xnZV9jcmVhdGVfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJY2hhciBuYW1lW0lGTkFNU0laXTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKCFudW1fdmZzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWhkZXYtJmd0O3ZmX3JlcHMgPSBrY2FsbG9jKG51bV92ZnMsIHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICopLAomIzQzOwkJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFoZGV2LSZndDt2Zl9yZXBzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fdmZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICYjMzQ7JXNfcmVwJWQmIzM0OywKJiM0MzsJCQkgaGRldi0mZ3Q7dnBvcnRbMF0ubmljLm5ldGRldi0mZ3Q7bmFtZSwgaSk7CiYjNDM7CQluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwKSwgbmFtZSwKJiM0MzsJCQkJICAgIE5FVF9OQU1FX1VOS05PV04sIGV0aGVyX3NldHVwKTsKJiM0MzsJCWlmICghbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQloY2xnZV92Zl9yZXBfbmV0X3NldHVwKG5kZXYpOwomIzQzOwomIzQzOwkJdmZfcmVwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CQl2Zl9yZXAtJmd0O2hkZXYgPSBoZGV2OwomIzQzOwkJdmZfcmVwLSZndDt2cG9ydCA9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbaSAmIzQzOyBIQ0xHRV9WRl9WUE9SVF9TVEFSVF9OVU1dOwomIzQzOwkJdmZfcmVwLSZndDtuZXRkZXYgPSBuZGV2OwomIzQzOwomIzQzOwkJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRldi0mZ3Q7dmZfcmVwc1tpXSA9IHZmX3JlcDsKJiM0MzsJfQomIzQzOwomIzQzOwloZGV2LSZndDtudW1fdmZfcmVwcyA9IG51bV92ZnM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJd2hpbGUgKGktLSkKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2KGhkZXYtJmd0O3ZmX3JlcHNbaV0tJmd0O25ldGRldik7CiYjNDM7CWtmcmVlKGhkZXYtJmd0O3ZmX3JlcHMpOwomIzQzOwloZGV2LSZndDt2Zl9yZXBzID0gTlVMTDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghaGRldi0mZ3Q7dmZfcmVwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGhkZXYtJmd0O251bV92Zl9yZXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGhkZXYtJmd0O3ZmX3JlcHNbaV0pCiYjNDM7CQkJdW5yZWdpc3Rlcl9uZXRkZXYoaGRldi0mZ3Q7dmZfcmVwc1tpXS0mZ3Q7bmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShoZGV2LSZndDt2Zl9yZXBzKTsKJiM0MzsJaGRldi0mZ3Q7dmZfcmVwcyA9IE5VTEw7CiYjNDM7CWhkZXYtJmd0O251bV92Zl9yZXBzID0gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZiMjA4MGFlNjI3YmZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oCkBAIC0wLDAgJiM0MzsxLDIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fSENMR0VfVkZfUkVQX0gKJiM0MzsjZGVmaW5lIF9fSENMR0VfVkZfUkVQX0gKJiM0MzsKJiM0MztzdHJ1Y3QgaG5hZTNfYWVfZGV2OwomIzQzO3N0cnVjdCBoY2xnZV9kZXY7CiYjNDM7c3RydWN0IGhjbGdlX3Zwb3J0OwomIzQzO3N0cnVjdCBuZXRfZGV2aWNlOwomIzQzOwomIzQzO3N0cnVjdCBoY2xnZV92Zl9yZXAgewomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGV2CSpoZGV2OwomIzQzOwlzdHJ1Y3QgaGNsZ2VfdnBvcnQJKnZwb3J0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwomIzQzO307CiYjNDM7CiYjNDM7aW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpOwomIzQzO3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBITlMzIEV0aGVybmV0IERyaXZlciBWRiBSZXByZXNlbnRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWRkaW5nIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSByZXByZXNlbnRvcnMsIHdoaWNoIGlzIGEgY29tbW9uIGFwcHJvYWNoIGZvciBTUklPViBzdXBwb3J0LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGBobnMzX2VuZXQuY2AsIHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxpbmcgYGNyZWF0ZV92Zl9yZXBzYCBhbmQgYGRlc3Ryb3lfdmZfcmVwc2Agd2hlbiBTUklPViBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIHRvIGR5bmFtaWNhbGx5IGNyZWF0ZSBhbmQgZGVzdHJveSB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVkYuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyB0dWNrZWQgYXdheSBpbiBgaGNsZ2VfdmZfcmVwLmNgLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBWRiByZXByZXNlbnRvciYjMzk7cyBjb3JlIGxvZ2ljOiBgaGNsZ2VfY3JlYXRlX3ZmX3JlcHNgIGFuZCBgaGNsZ2VfZGVzdHJveV92Zl9yZXBzYC4gVGhlIHJlcHJlc2VudG9yLCBvZiBjb3Vyc2UsIHJlZ2lzdGVycyBhIG5ldyBuZXRkZXYgd2l0aCBgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHNgLiBJIHNlZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgZXNzZW50aWFsIG5ldGRldiBvcGVyYXRpb25zOiBgbmRvX3N0YXJ0X3htaXRgIGZvciB0cmFuc21pdHRpbmcsIGBuZG9fZ2V0X3BoeXNfcG9ydF9uYW1lYCBmb3IgcG9ydCBpZGVudGlmaWNhdGlvbiwgYW5kIGBuZG9fc2V0dXBfdGNgIGZvciBUcmFmZmljIENvbnRyb2wgc2V0dXAuCgpUaGUgYG5kb19zZXR1cF90Y2AgaW1wbGVtZW50YXRpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgaGFuZGxlcyBgVENfU0VUVVBfQkxPQ0tgLCBhbmQgc3Vic2VxdWVudGx5LCBhIGJsb2NrIGNhbGxiYWNrIGBoY2xnZV92Zl9yZXBfc2V0dXBfdGNfYmxvY2tfY2JgLiBUaGlzIGNhbGxiYWNrIGlzIHdoZXJlIHRoZSBhZHZhbmNlZCBzdHVmZiBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBjbGFzc2lmaWNhdGlvbiBvZiBwYWNrZXRzLiBJdCBoYW5kbGVzIGBUQ19TRVRVUF9DTFNGTE9XRVJgLCBjYWxsaW5nIGBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZmAgYW5kIGBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZmAgdG8gbWFuYWdlIEZsb3cgQ2xhc3NpZmljYXRpb24gcnVsZXMgYXQgdGhlIFZGIGxldmVsLiBUaGVzZSBmbG93ZXItYmFzZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBoY2xnZV9mZC5jYC4KCk5vdywgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqaG93KiB3ZSYjMzk7ZCB0ZXN0IHRoaXMsIGFuZCBpZiB0aGlzIGNvZGUgaXMgZXZlbiByZWFjaGFibGUgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIHNjZW5hcmlvLiBTaW5jZSB0aGlzIGlzIGFuIEhOUzMgZHJpdmVyLCBhbmQgSE5TMyBhcmUgSGlzaWxpY29uJiMzOTtzIFBDSSBuZXR3b3JrIGNhcmRzLCB0aGlzIGRyaXZlciBleHBlY3RzIGEgcmVhbCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZW11bGF0ZSB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVT8gSSBkb3VidCB0aGF0IFFFTVUgaGFzIGFueSBuYXRpdmUgc3VwcG9ydCBvciBhIGRlZGljYXRlZCBITlMzIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBmb3JtIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIEhOUzMgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbmV0d29yayBjYXJkcyB3aXRoaW4gUUVNVSwgYW5kIHRoZXJlJiMzOTtzIG5vdGhpbmcgb24gdGhhdCBsaXN0IGFib3V0IEhOUzMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5zMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZTo3OmNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6ODpjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjk6Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX0hOUzMpICYjNDM7PSBobmFlMy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ITlMzX0VORVQpICYjNDM7PSBobnMzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE0OmhuczMtb2JqcyA9IGhuczNfZW5ldC5vIGhuczNfZXRodG9vbC5vIGhuczNfZGVidWdmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE2OmhuczMtJChDT05GSUdfSE5TM19EQ0IpICYjNDM7PSBobnMzX2RjYm5sLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0hOUzNfSENMR0VWRikgJiM0Mzs9IGhjbGdldmYubyBoY2xnZS1jb21tb24ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyMDpoY2xnZS1jb21tb24tb2JqcyAmIzQzOz0gaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQubyBobnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5vIGhuczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjI6aGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5rLm8gaG5zM3ZmL2hjbGdldmZfcmVncy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ITlMzX0hDTEdFKSAmIzQzOz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjU6aGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyNjpcdFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjc6XHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyOTpoY2xnZS0kKENPTkZJR19ITlMzX0RDQikgJiM0Mzs9IGhuczNwZi9oY2xnZV9kY2Iub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9MTk4PXN0cnVjdCBobmFlM19xdWV1ZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjIwOTpzdHJ1Y3QgaG5zM19tYWNfc3RhdHMge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMTAtXHR1NjQgdHhfcGF1c2VfY250O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjA2PXN0cnVjdCBobmFlM19hZV9vcHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjg1LVx0dm9pZCAoKmdldF9tYWNfc3RhdHMpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6Njg2Olx0XHRcdCAgICAgIHN0cnVjdCBobnMzX21hY19zdGF0cyAqbWFjX3N0YXRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjg3LVx0dm9pZCAoKmdldF9zdHJpbmdzKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQtI2luY2x1ZGUgXCYjMzQ7aG5hZTMuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU6I2luY2x1ZGUgXCYjMzQ7aG5zM19lbmV0LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo5Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTItXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIwOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGV0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfZXRzICpldHMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIyOlx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoyNDpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjUtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjMzOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjM1Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzozNzpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzgtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ2OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ4Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy00OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo1MDpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNTEtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU5OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGRjYl9hcHAgKmFwcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NjE6XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjYzOlx0aWYgKGhuczNfbmljX3Jlc2V0dGluZyhuZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02NC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzI6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTczLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo3NDpcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzY6XHRpZiAoaG5zM19uaWNfcmVzZXR0aW5nKG5kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTc3LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04NS0vKiBEQ0JYIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4NjpzdGF0aWMgdTggaG5zM19kY2JubF9nZXRkY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4ODpcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtODktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk2LS8qIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWlsICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTc6c3RhdGljIHU4IGhuczNfZGNibmxfc2V0ZGNieChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggbW9kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy05OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTk6XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEwMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwNzpzdGF0aWMgY29uc3Qgc3RydWN0IGRjYm5sX3J0bmxfb3BzIGhuczNfZGNibmxfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwODpcdC5pZWVlX2dldGV0c1x0PSBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwOTpcdC5pZWVlX3NldGV0c1x0PSBobnMzX2RjYm5sX2llZWVfc2V0ZXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMDpcdC5pZWVlX2dldHBmY1x0PSBobnMzX2RjYm5sX2llZWVfZ2V0cGZjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMTpcdC5pZWVlX3NldHBmY1x0PSBobnMzX2RjYm5sX2llZWVfc2V0cGZjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMjpcdC5pZWVlX3NldGFwcCAgICA9IGhuczNfZGNibmxfaWVlZV9zZXRhcHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTEzOlx0LmllZWVfZGVsYXBwICAgID0gaG5zM19kY2JubF9pZWVlX2RlbGFwcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTQ6XHQuZ2V0ZGNieFx0PSBobnMzX2RjYm5sX2dldGRjYngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTE1Olx0LnNldGRjYnhcdD0gaG5zM19kY2JubF9zZXRkY2J4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTExNi19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTIyOnZvaWQgaG5zM19kY2JubF9zZXR1cChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEyOTpcdGRldi1cdTAwM2VkY2JubF9vcHMgPSBcdTAwMjZobnMzX2RjYm5sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMzAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTktI2luY2x1ZGUgXCYjMzQ7aG5hZTMuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTA6I2luY2x1ZGUgXCYjMzQ7aG5zM19kZWJ1Z2ZzLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjExOiNpbmNsdWRlIFwmIzM0O2huczNfZW5ldC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEzOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpobnMzX2RiZ2ZzX3Jvb3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjE1OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfZGVudHJ5X2luZm8gaG5zM19kYmdfZGVudHJ5W10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNi1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQzOnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfZmlsZV9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NDpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NTpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ3OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfY21kX2luZm8gaG5zM19kYmdfY21kW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00OC1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTg6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc1LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzY6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03Ny1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04Ny1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODktXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTkzLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6OTQ6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy05NS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDA6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMDEtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEwNjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNy1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTExLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTEyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTEzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMTctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTE5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVFhfQkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMjQ6XHRcdC5pbml0ID0gaG5zM19kYmdfYmRfZmlsZV9pbml0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTI1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUlhfQkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMzA6XHRcdC5pbml0ID0gaG5zM19kYmdfYmRfZmlsZV9pbml0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTMxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMzUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTM2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTM3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQ4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQ5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTU1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTYwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTYxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNjUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTY2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTY3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTcyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTczLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTc4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTc5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTg0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTg1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTkwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTkxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xOTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTk2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTk3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjAyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjAzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjA4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjA5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjE0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjE1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjIwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjIxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMjUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjI2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjI3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjMyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjMzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjM4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjM5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjQ0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjQ1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjUwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjUxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUVVFVUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNTY6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTctXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2MS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9RVUVVRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI2MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2My1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1FVRVVFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjY4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfRkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNzQ6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzUtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI3OS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9GRCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4MDpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4MS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjg1LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4NjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4Ny1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjkxLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5My1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjk3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5ODpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5OS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzAzLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0ZELFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzA0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzA1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMDktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzEwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzExLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzE2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzE3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzIyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzIzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzozMjY6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19jYXBfaW5mbyBobnMzX2RiZ19jYXBbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTMyNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYz0zOTA9ZGltX3R1bmVfc3RhdF9zdHJbXSA9IHsgXCYjMzQ7T05fVE9QXCYjMzQ7LCBcJiMzNDtUSVJFRFwmIzM0OywgXCYjMzQ7UklHSFRcJiMzNDssIFwmIzM0O0xFRlRcJiMzNDsgfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5MjpzdGF0aWMgdm9pZCBobnMzX2dldF9jb2FsX2luZm8oc3RydWN0IGhuczNfZW5ldF90cXBfdmVjdG9yICp0cXBfdmVjdG9yLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzkzLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpLCBib29sIGlzX3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5NS1cdHVuc2lnbmVkIGludCBnbF9vZmZzZXQsIHFsX29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5NjpcdHN0cnVjdCBobnMzX2VuZXRfY29hbGVzY2UgKmNvYWw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zOTctXHR1bnNpZ25lZCBpbnQgcmVnX3ZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0Mzc6c3RhdGljIHZvaWQgaG5zM19kdW1wX2NvYWxfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGJvb2wgaXNfdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mzgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDM5LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MDpcdHN0cnVjdCBobnMzX2VuZXRfdHFwX3ZlY3RvciAqdHFwX3ZlY3RvcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MTpcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDQyLVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDUxLVx0XHR0cXBfdmVjdG9yID0gXHUwMDI2cHJpdi1cdTAwM2V0cXBfdmVjdG9yW2ldO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDUyOlx0XHRobnMzX2dldF9jb2FsX2luZm8odHFwX3ZlY3RvciwgcywgaSwgaXNfdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDUzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1NjpzdGF0aWMgaW50IGhuczNfZGJnX2NvYWxfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDU4Olx0aG5zM19kdW1wX2NvYWxfaW5mbyhzLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1OS1cdHNlcV9wdXRzKHMsIFwmIzM0O1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjA6XHRobnMzX2R1bXBfY29hbF9pbmZvKHMsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ2MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjU6c3RhdGljIHZvaWQgaG5zM19kdW1wX3J4X3F1ZXVlX2luZm8oc3RydWN0IGhuczNfZW5ldF9yaW5nICpyaW5nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY2LVx0XHRcdFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwMDpzdGF0aWMgaW50IGhuczNfZGJnX3J4X3F1ZXVlX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTAxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwMi1cdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobmFlM19zZXFfZmlsZV90b19oYW5kbGUocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1MDM6XHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwNDpcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwNS1cdHUzMiBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUyNC1cdFx0cmluZyA9IFx1MDAyNnByaXYtXHUwMDNlcmluZ1sodTMyKShpICYjNDM7IGgtXHUwMDNla2luZm8ubnVtX3RxcHMpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyNTpcdFx0aG5zM19kdW1wX3J4X3F1ZXVlX2luZm8ocmluZywgcywgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTMxOnN0YXRpYyB2b2lkIGhuczNfZHVtcF90eF9xdWV1ZV9pbmZvKHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUzMi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1NjU6c3RhdGljIGludCBobnMzX2RiZ190eF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjctXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTY4Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1Njk6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NzAtXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01ODktXHRcdHJpbmcgPSBcdTAwMjZwcml2LVx1MDAzZXJpbmdbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1OTA6XHRcdGhuczNfZHVtcF90eF9xdWV1ZV9pbmZvKHJpbmcsIHMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTkxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5NjpzdGF0aWMgaW50IGhuczNfZGJnX3F1ZXVlX21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk4LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5OTpcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjAwLVx0dTMyIGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE4OnN0YXRpYyB2b2lkIGhuczNfZHVtcF9yeF9iZF9pbmZvKHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE5Olx0XHRcdFx0IHN0cnVjdCBobnMzX2Rlc2MgKmRlc2MsIHN0cnVjdCBzZXFfZmlsZSAqcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYyMC1cdFx0XHRcdCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0MzpzdGF0aWMgaW50IGhuczNfZGJnX3J4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQ0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0NTpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQ2LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXHUwMDNlaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ3Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDg6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDk6XHRzdHJ1Y3QgaG5zM19kZXNjICpkZXNjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjUwLVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjY2Olx0XHRobnMzX2R1bXBfcnhfYmRfaW5mbyhwcml2LCBkZXNjLCBzLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY2Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NzI6c3RhdGljIHZvaWQgaG5zM19kdW1wX3R4X2JkX2luZm8oc3RydWN0IGhuczNfZGVzYyAqZGVzYywgc3RydWN0IHNlcV9maWxlICpzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjczLVx0XHRcdFx0IGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Njg4OnN0YXRpYyBpbnQgaG5zM19kYmdfdHhfYmRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnByaXZhdGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02ODkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjkwOlx0c3RydWN0IGhuczNfZGJnX2RhdGEgKmRhdGEgPSBzLVx1MDAzZXByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTEtXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gZGF0YS1cdTAwM2VoYW5kbGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2OTI6XHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5MzpcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5NDpcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MTE6XHRcdGhuczNfZHVtcF90eF9iZF9pbmZvKGRlc2MsIHMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxNzpzdGF0aWMgdm9pZCBobnMzX2RiZ19kZXZfY2FwcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzE5Olx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gaG5zM19nZXRfYWVfZGV2KGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzIwLVx0dW5zaWduZWQgbG9uZyAqY2FwcyA9IGFlX2Rldi1cdTAwM2VjYXBzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaG5zM19kYmdfY2FwKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNjpcdFx0c3RhdGUgPSB0ZXN0X2JpdChobnMzX2RiZ19jYXBbaV0uY2FwX2JpdCwgY2Fwcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3Mjc6XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXM6ICVzXFxuXCYjMzQ7LCBobnMzX2RiZ19jYXBbaV0ubmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyOC1cdFx0XHQgICBzdHJfeWVzX25vKHN0YXRlKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzM0OnN0YXRpYyB2b2lkIGhuczNfZGJnX2Rldl9zcGVjcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc2OTpzdGF0aWMgaW50IGhuczNfZGJnX2Rldl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzczOlx0aG5zM19kYmdfZGV2X2NhcHMoaCwgcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3NzQ6XHRobnMzX2RiZ19kZXZfc3BlY3MoaCwgcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03NzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Nzc5OnN0YXRpYyB2b2lkIGhuczNfZHVtcF9wYWdlX3Bvb2xfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03ODAtXHRcdFx0XHQgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc5MjpzdGF0aWMgaW50IGhuczNfZGJnX3BhZ2VfcG9vbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTQtXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Nzk1Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTY6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTctXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MTctXHRcdHJpbmcgPSBcdTAwMjZwcml2LVx1MDAzZXJpbmdbKHUzMikoaSAmIzQzOyBoLVx1MDAzZWtpbmZvLm51bV90cXBzKV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MTg6XHRcdGhuczNfZHVtcF9wYWdlX3Bvb2xfaW5mbyhyaW5nLCBzLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgxOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjQ6c3RhdGljIGludCBobnMzX2RiZ19iZF9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgyNjpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI3LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXHUwMDNlaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI4Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODM0LVx0aWYgKGRhdGEtXHUwMDNlY21kID09IEhOQUUzX0RCR19DTURfVFhfQkQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MzU6XHRcdHJldHVybiBobnMzX2RiZ190eF9iZF9pbmZvKHMsIHByaXZhdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODM2LVx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VjbWQgPT0gSE5BRTNfREJHX0NNRF9SWF9CRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgzNzpcdFx0cmV0dXJuIGhuczNfZGJnX3J4X2JkX2luZm8ocywgcHJpdmF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQwLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0MTpERUZJTkVfU0hPV19BVFRSSUJVVEUoaG5zM19kYmdfYmRfaW5mbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4NDM6c3RhdGljIGludCBobnMzX2RiZ19iZF9maWxlX2luaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MzIgY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0NTpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ2LVx0c3RydWN0IGRlbnRyeSAqZW50cnlfZGlyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MDpcdGVudHJ5X2RpciA9IGhuczNfZGJnX2RlbnRyeVtobnMzX2RiZ19jbWRbY21kXS5kZW50cnldLmRlbnRyeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MTpcdG1heF9xdWV1ZV9udW0gPSBobnMzX2dldF9tYXhfYXZhaWxhYmxlX2NoYW5uZWxzKGhhbmRsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NTItXHRkYXRhID0gZGV2bV9rY2FsbG9jKFx1MDAyNmhhbmRsZS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgbWF4X3F1ZXVlX251bSwgc2l6ZW9mKCpkYXRhKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NjAtXHRcdGRhdGFbaV0uaGFuZGxlID0gaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODYxOlx0XHRkYXRhW2ldLmNtZCA9IGhuczNfZGJnX2NtZFtjbWRdLmNtZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg2Mi1cdFx0ZGF0YVtpXS5xaWQgPSBpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxOTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBITlMzIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgSE5TMyBkcml2ZXIuLi5yaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRpZWQgdG8gSGlzaWxpY29uIG5ldHdvcmsgaGFyZHdhcmUuIFBoeXNpY2FsIHN0dWZmLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBvZmZlciAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQ/IEV2ZW4gYSBiYXNpYyBtb2NrIHdvdWxkIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGhpbnQgb2YgYSBtb2NrIG1vZHVsZSwgYSBzdHViLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIHN0YW5kIGluIGZvciB0aGF0IGhhcmR3YXJlIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5zMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSE5TMyBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGZvciBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IGZpbmQgYW55dGhpbmcuIFRoZW4gSSBzYXcgdGhlIG1lbnRpb24gb2YgYSBwYXRjaCByZWxhdGVkIHRvIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IG5vdGluZyBpdCB3YXMgdW5kZXIgcmV2aWV3LiBUaGF0IGdvdCBtZSB0aGlua2luZyDigJMgaWYgc3l6a2FsbGVyIGlzIGZ1enppbmcgaXQsIHRoZXJlICptdXN0KiBiZSBzb21lIHdheSB0byByZWFjaCBpdC4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBhbmQgcG90ZW50aWFsIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZHJpdmVycywgZXZlbiB3aXRob3V0IGZ1bGwgaGFyZHdhcmUgZW11bGF0aW9uLiBJdCBkb2VzIHRoaXMgYnkgZW11bGF0aW5nIFBDSSBkZXZpY2VzIHRocm91Z2ggYSBrZXJuZWwgbW9kdWxlIG9yIHVzaW5nIFFFTVUmIzM5O3MgUENJIGVtdWxhdGlvbi4gRm9yIFVTQiwgaXQgdXNlcyBgdmhjaWAsIGJ1dCBmb3IgUENJLCBpdCBpcyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgLCBpbmplY3RpbmcgdGhlIFBDSSBkZXZpY2VzLiBJdCBwcm92aWRlcyBmYWtlIFBDSSBjb25maWcgc3BhY2UgYW5kIGhhbmRsZXMgbWVtb3J5LW1hcHBlZCBJL08gKE1NSU8pLgoKQnV0IHRoZW4sIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoYXQgcmFpc2VzIGEga2V5IHF1ZXN0aW9uLiBEb2VzIHRoaXMgUENJIGZ1enplciwgd2hpY2ggaXMgbm90IGEgZnVsbCBoYXJkd2FyZSBlbXVsYXRvciwgc3RpbGwgcXVhbGlmeSBhcyAmIzM0O3NvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDs/IEl0JiMzOTtzIGluamVjdGluZyBkYXRhIGludG8gTU1JTyByZWFkcywgYnV0IGl0JiMzOTtzIG5vdCBwcm92aWRpbmcgYSBmdWxseSBmdW5jdGlvbmFsIGhhcmR3YXJlIGVudmlyb25tZW50LgoKVHlwaWNhbGx5LCB3aXRoIHBoeXNpY2FsIFBDSSBkcml2ZXJzIHRoYXQgKmxhY2sqIGRlZGljYXRlZCBlbXVsYXRvcnMsIGZ1bmN0aW9uYWwgZnV6emluZyBpcyBwcm9ibGVtYXRpYy4gVGhlIGRyaXZlciB1c3VhbGx5IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbiwgb3IgZ2V0cyBzdHVjayB3aGVuIGl0IGVuY291bnRlcnMgZ2FyYmFnZSBNTUlPLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gbWVhbmluZ2Z1bGx5IGludGVyYWN0IHdpdGggdGhlIGRyaXZlci4KClRoZSBwYXRjaCBtZW50aW9ucyBWRiByZXByZXNlbnRvcnMgaW4gSE5TMywgc28gSSBtdXN0IGNvbnNpZGVyIHRoYXQuIFRoYXQgc2FpZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBITlMzIGNhbiBpbml0aWFsaXplIGluIHRoaXMgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobnMzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMxMzA9c3RhdGljIHZvaWQgaG5zM19kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ1Oi8qIGhuczNfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0Ni0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ4LSAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ5OiAqIGhuczNfcHJvYmUgaW5pdGlhbGl6ZXMgYSBQRiBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTUwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIFBGIHByaXZhdGUgc3RydWN0dXJlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTU1OnN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNjk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzEtXHQuaWRfdGFibGUgPSBobnMzX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzcyOlx0LnByb2JlICAgID0gaG5zM19wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzMtXHQucmVtb3ZlICAgPSBobnMzX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg2MAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGhuczNfcHJvYmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBgaG5zM19wcm9iZWAgaXMgYWxsIGFib3V0LiBObyBhc3N1bXB0aW9ucywganVzdCBwdXJlLCBpbml0aWFsIGN1cmlvc2l0eS4gSSYjMzk7bSB0YWtpbmcgYSBmcmVzaCBsb29rLCBmb2N1c2luZyBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHRvb2wgYnJpbmdzIHRvIHRoZSB0YWJsZSBhbmQgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZS4gSSYjMzk7bSBmb3JtaW5nIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZG8gYW55dGhpbmcgbW9yZSBjb21wbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1NTpcdHN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbjMxNTY6XHR7XG4zMTU3Olx0XHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXY7XG4zMTU4Olx0XHRpbnQgcmV0O1xuMzE1OTpcdFxuMzE2MDpcdFx0YWVfZGV2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFlX2RldiksIEdGUF9LRVJORUwpO1xuMzE2MTpcdFx0aWYgKCFhZV9kZXYpXG4zMTYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzE2MzpcdFxuMzE2NDpcdFx0YWVfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuMzE2NTpcdFx0YWVfZGV2LVx1MDAzZWZsYWcgPSBlbnQtXHUwMDNlZHJpdmVyX2RhdGE7XG4zMTY2Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWVfZGV2KTtcbjMxNjc6XHRcbjMxNjg6XHRcdHJldCA9IGhuYWUzX3JlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuMzE2OTpcdFx0aWYgKHJldClcbjMxNzA6XHRcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMzE3MTpcdFxuMzE3MjpcdFx0cmV0dXJuIHJldDtcbjMxNzM6XHR9XG4zMTc0Olx0XG4zMTc1Olx0LyoqXG4zMTc2Olx0ICogaG5zM19jbGVhbl92Zl9jb25maWdcbjMxNzc6XHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXG4zMTc4Olx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgYWxsb2NhdGVkXG4zMTc5Olx0ICpcbjMxODA6XHQgKiBDbGVhbiByZXNpZHVhbCB2ZiBjb25maWcgYWZ0ZXIgZGlzYWJsZSBzcmlvdlxuMzE4MTpcdCAqKi9cbjMxODI6XHRzdGF0aWMgdm9pZCBobnMzX2NsZWFuX3ZmX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4zMTgzOlx0e1xuMzE4NDpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzE4NTpcdFxuMzE4NjpcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY2xlYW5fdmZfY29uZmlnKVxuMzE4NzpcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNsZWFuX3ZmX2NvbmZpZyhhZV9kZXYsIG51bV92ZnMpO1xuMzE4ODpcdH1cbjMxODk6XHRcbjMxOTA6XHQvKiBobnMzX3JlbW92ZSAtIERldmljZSByZW1vdmFsIHJvdXRpbmVcbjMxOTE6XHQgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbjMxOTI6XHQgKi9cbjMxOTM6XHRzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjMxOTQ6XHR7XG4zMTk1Olx0XHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4zMTk2Olx0XG4zMTk3Olx0XHRpZiAoaG5zM19pc19waHlzX2Z1bmMocGRldikgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKVxuMzE5ODpcdFx0XHRobnMzX2Rpc2FibGVfc3Jpb3YocGRldik7XG4zMTk5Olx0XG4zMjAwOlx0XHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuMzIwMTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMzIwMjpcdH1cbjMyMDM6XHRcbjMyMDQ6XHQvKipcbjMyMDU6XHQgKiBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVcbjMyMDY6XHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXG4zMjA3Olx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgdG8gYWxsb2NhdGVcbjMyMDg6XHQgKlxuMzIwOTpcdCAqIEVuYWJsZSBvciBjaGFuZ2UgdGhlIG51bWJlciBvZiBWRnMuIENhbGxlZCB3aGVuIHRoZSB1c2VyIHVwZGF0ZXMgdGhlIG51bWJlclxuMzIxMDpcdCAqIG9mIFZGcyBpbiBzeXNmcy5cbjMyMTE6XHQgKiovXG4zMjEyOlx0c3RhdGljIGludCBobnMzX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuMzIxMzpcdHtcbjMyMTQ6XHRcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjMyMTU6XHRcdGludCByZXQ7XG4zMjE2Olx0XG4zMjE3Olx0XHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUENJX0lPVikpKSB7XG4zMjE4Olx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW4gbm90IGNvbmZpZyBTUklPVlxcblwmIzM0Oyk7XG4zMjE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzIyMDpcdFx0fVxuMzIyMTpcdFxuMzIyMjpcdFx0aWYgKG51bV92ZnMpIHtcbjMyMjM6XHRcdFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTtcbjMyMjQ6XHRcdFx0aWYgKHJldCkge1xuMzIyNTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1NSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cJiMzNDssIHJldCk7XG4zMjI2Olx0XHRcdH0gZWxzZSB7XG4zMjI3Olx0XHRcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3ZmX3JlcHMpIHtcbjMyMjg6XHRcdFx0XHRcdHJldCA9IGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3ZmX3JlcHMoYWVfZGV2LFxuMzIyOTpcdFx0XHRcdFx0XHRcdFx0XHQgIG51bV92ZnMpO1xuMzIzMDpcdFx0XHRcdFx0aWYgKHJldClcbjMyMzE6XHRcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCYjMzQ7LFxuMzIzMzpcdFx0XHRcdFx0XHRcdHJldCk7XG4zMjM0Olx0XHRcdFx0fVxuMzIzNTpcdFx0XHRcdHJldHVybiBudW1fdmZzO1xuMzIzNjpcdFx0XHR9XG4zMjM3Olx0XHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XG4zMjM4Olx0XHRcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XG4zMjM5Olx0XG4zMjQwOlx0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3lfdmZfcmVwcylcbjMyNDE6XHRcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3lfdmZfcmVwcyhhZV9kZXYpO1xuMzI0MjpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjMyNDM6XHRcdFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xuMzI0NDpcdFx0fSBlbHNlIHtcbjMyNDU6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjQ2Olx0XHRcdFx0IFwmIzM0O1VuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXG5cJiMzNDspO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFxuMzI0OTpcdFx0cmV0dXJuIDA7XG4zMjUwOlx0fVxuMzI1MTpcdFxuMzI1MjpcdHN0YXRpYyB2b2lkIGhuczNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMjUzOlx0e1xuMzI1NDpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSBITlMzIGRyaXZlciBpcyBhIFBDSSBkcml2ZXIsIGFuZCB0aGF0JiMzOTtzIGtleS4gU3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXLigJR0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGF2ZW51ZS4gV2FpdCwgdGhlIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiBhbnkgUENJIGRyaXZlciwgcmlnaHQ/IEl0IHdvcmtzIGJ5IG1hdGNoaW5nIFBDSSBJRHMuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgSE5TMyBpcyBldmVuIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBzZXR1cCBvciBpZiBpdOKAmXMgYWNjZXNzaWJsZS4KCkJ1dCBob2xkIG9uLCB0aGUgcHJvbXB0IG1lbnRpb25zIHNvbWV0aGluZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldHMgYW5kIG1hYzgwMjExX2h3c2ltLiBUaGUgSE5TMyBkcml2ZXIgKmlzKiBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZC4gRG9lcyB0aGUgUENJIGZ1enplciBjb3VudCBhcyDigJxzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZeKAnT8gVGVjaG5pY2FsbHksIGl0IHNob3VsZCwgYnV0IGRvZXMgdGhlIHByb21wdCYjMzk7cyBleGNsdXNpb24gY292ZXIgdGhpcyBjYXNlPyBUaGUgcHJvbXB0IHNheXMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkmIzM0Oy4gU28sIHRoZSBQQ0kgZnV6emVyICppcyogYSB3YXkgdG8gcG90ZW50aWFsbHkgcmVhY2ggdGhlIEhOUzMgZHJpdmVyLgoKTm93LCBpZiBpdCYjMzk7cyBhICpwaHlzaWNhbCogUENJIGRyaXZlciwgaXQgdHlwaWNhbGx5IG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGUgUENJIGZ1enplciBoYXMgdG8gZW11bGF0ZSB0aGUgY29uZmlnIHNwYWNlIGFuZCBNTUlPLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpbGUgdXNlZnVsLCBjYW4gYmUgZmFpcmx5IGJhc2ljLiBJdCBvZnRlbiBzdHJ1Z2dsZXMgd2l0aCBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyDigJMgeW91IGtub3csIHdhaXRpbmcgZm9yIHNwZWNpZmljIGJpdHMgaW4gTU1JTyByZWdpc3RlcnMsIGZpcm13YXJlIGxvYWRpbmcsIHRob3NlIGtpbmRzIG9mIHRoaW5ncy4gU28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGUgSE5TMyBkcml2ZXIgaGFzIGFueSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIERvIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIG9yIGFueSBjb21wbGV4IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcz8gVGhhdCB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxdWVzdF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDA1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgTWlzc2luZyBGaXJtd2FyZSBSZXF1ZXN0KioKCkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBleHBsaWNpdCByZXF1ZXN0cyBmb3IgZmlybXdhcmUgaW4gdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgbWlnaHQgYmUgYWJzZW50IG9yIGlmIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgZGlmZmVyZW50bHkuIExldCYjMzk7cyBzdGFydCB3aXRoIGBoY2xnZV9tYWluLmNgLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luLCBzaW5jZSBpdCBvZnRlbiBvcmNoZXN0cmF0ZXMgdGhlIGluaXRpYWwgZGV2aWNlIHNldHVwIHdpdGhpbiB0aGlzIEhDTEdFIGRyaXZlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZmlybXdhcmUgbG9hZCBpcyBiZWluZyBpbnRlZ3JhdGVkIGluIHRoZXJlLCBpZiBpdCYjMzk7cyBleHRlcm5hbCwgb3IgbWF5YmUgaWYgaXQmIzM5O3MgYmVpbmcgcHVsbGVkIGZyb20gYSBwcmUtbG9hZGVkIGFyZWEsIHdoaWNoIGNvdWxkIGV4cGxhaW4gdGhlIGxhY2sgb2YgYW4gaW1tZWRpYXRlIHJlcXVlc3QuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgc2VlIHdoYXQgdGhleSYjMzk7cmUgdXAgdG8uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbmV4dCBzdGVwIGZvciByZXNvbHZpbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfaW5pdF9hZV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05MzE5PXN0YXRpYyBpbnQgaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5MzQwOnN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTEwNDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA0MzU6XHQuaW5pdF9hZV9kZXYgPSBoY2xnZV9pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA0MzYtXHQudW5pbml0X2FlX2RldiA9IGhjbGdlX3VuaW5pdF9hZV9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDQ1CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZvciBQb3RlbnRpYWwgUENJIEZ1enplciBCbG9ja2luZyoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGZ1bmN0aW9uIGBoY2xnZV9pbml0X2FlX2RldmAgaXMgZ29pbmcgdG8gdHJpcCBtZSB1cCB3aGVuIEkmIzM5O20gcnVubmluZyBteSBQQ0kgZnV6emVyLiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCYjMzk7cyBkb2luZyBhbnkgY29tcGxleCBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgcmVhZHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYmxvY2tpbmcgYmVoYXZpb3IuIEJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBmdXp6aW5nIOKAkyB0aGV5IHNsb3cgZXZlcnl0aGluZyBkb3duIGFuZCBjYW4gcHJldmVudCBtZSBmcm9tIGV4cGxvcmluZyBhIGJyb2FkZXIgcmFuZ2Ugb2YgY29kZSBwYXRocyBxdWlja2x5LiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0byBpZGVudGlmeSBhbnkgcmVkIGZsYWdzIHJlbGF0ZWQgdG8gTU1JTyBpbnRlcmFjdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgc2hhcnAg4oCTIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBwb3RlbnRpYWxseSB0aW1lLWNvbnN1bWluZyBvciBjb21wbGV4IHJlYWQgb3BlcmF0aW9ucyBmcm9tIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzLiBBbnl0aGluZyB0aGF0IGNvdWxkIHN0YWxsIHRoZSBmdXp6ZXIgaXMgYSBwb3RlbnRpYWwgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTM0MDpcdHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuOTM0MTpcdHtcbjkzNDI6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWVfZGV2LVx1MDAzZXBkZXY7XG45MzQzOlx0XHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2O1xuOTM0NDpcdFx0aW50IHJldDtcbjkzNDU6XHRcbjkzNDY6XHRcdGhkZXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqaGRldiksIEdGUF9LRVJORUwpO1xuOTM0NzpcdFx0aWYgKCFoZGV2KVxuOTM0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjkzNDk6XHRcbjkzNTA6XHRcdGhkZXYtXHUwMDNlcGRldiA9IHBkZXY7XG45MzUxOlx0XHRoZGV2LVx1MDAzZWFlX2RldiA9IGFlX2RldjtcbjkzNTI6XHRcdGhkZXYtXHUwMDNlcmVzZXRfdHlwZSA9IEhOQUUzX05PTkVfUkVTRVQ7XG45MzUzOlx0XHRoZGV2LVx1MDAzZXJlc2V0X2xldmVsID0gSE5BRTNfRlVOQ19SRVNFVDtcbjkzNTQ6XHRcdGFlX2Rldi1cdTAwM2Vwcml2ID0gaGRldjtcbjkzNTU6XHRcbjkzNTY6XHRcdC8qIEhXIHN1cHBydCAyIGxheWVyIHZsYW4gKi9cbjkzNTc6XHRcdGhkZXYtXHUwMDNlbXBzID0gRVRIX0ZSQU1FX0xFTiAmIzQzOyBFVEhfRkNTX0xFTiAmIzQzOyAyICogVkxBTl9ITEVOO1xuOTM1ODpcdFxuOTM1OTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZoZGV2LVx1MDAzZXZwb3J0X2xvY2spO1xuOTM2MDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGRldi1cdTAwM2VmZF9ydWxlX2xvY2spO1xuOTM2MTpcdFx0c2VtYV9pbml0KFx1MDAyNmhkZXYtXHUwMDNlcmVzZXRfc2VtLCAxKTtcbjkzNjI6XHRcbjkzNjM6XHRcdHJldCA9IGhjbGdlX3BjaV9pbml0KGhkZXYpO1xuOTM2NDpcdFx0aWYgKHJldClcbjkzNjU6XHRcdFx0Z290byBvdXQ7XG45MzY2Olx0XG45MzY3Olx0XHQvKiBGaXJtd2FyZSBjb21tYW5kIHF1ZXVlIGluaXRpYWxpemUgKi9cbjkzNjg6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3F1ZXVlX2luaXQoaGRldi1cdTAwM2VwZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbjkzNjk6XHRcdGlmIChyZXQpXG45MzcwOlx0XHRcdGdvdG8gZXJyX3BjaV91bmluaXQ7XG45MzcxOlx0XG45MzcyOlx0XHQvKiBGaXJtd2FyZSBjb21tYW5kIGluaXRpYWxpemUgKi9cbjkzNzM6XHRcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFx1MDAyNmhkZXYtXHUwMDNlaHcuaHcsIFx1MDAyNmhjbGdlX2NtcV9vcHMpO1xuOTM3NDpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuOTM3NTpcdFx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuOTM3NjpcdFx0aWYgKHJldClcbjkzNzc6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzNzg6XHRcbjkzNzk6XHRcdHJldCAgPSBoY2xnZV9jbGVhcl9od19yZXNvdXJjZShoZGV2KTtcbjkzODA6XHRcdGlmIChyZXQpXG45MzgxOlx0XHRcdGdvdG8gZXJyX2NtZF91bmluaXQ7XG45MzgyOlx0XG45MzgzOlx0XHRyZXQgPSBoY2xnZV9nZXRfY2FwKGhkZXYpO1xuOTM4NDpcdFx0aWYgKHJldClcbjkzODU6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzODY6XHRcbjkzODc6XHRcdHJldCA9IGhjbGdlX3F1ZXJ5X2Rldl9zcGVjcyhoZGV2KTtcbjkzODg6XHRcdGlmIChyZXQpIHtcbjkzODk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IGRldiBzcGVjaWZpY2F0aW9ucywgcmV0ID0gJWQuXFxuXCYjMzQ7LFxuOTM5MDpcdFx0XHRcdHJldCk7XG45MzkxOlx0XHRcdGdvdG8gZXJyX2NtZF91bmluaXQ7XG45MzkyOlx0XHR9XG45MzkzOlx0XG45Mzk0Olx0XHRyZXQgPSBoY2xnZV9jb25maWd1cmUoaGRldik7XG45Mzk1Olx0XHRpZiAocmV0KSB7XG45Mzk2Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0NvbmZpZ3VyZSBkZXYgZXJyb3IsIHJldCA9ICVkLlxcblwmIzM0OywgcmV0KTtcbjkzOTc6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzOTg6XHRcdH1cbjkzOTk6XHRcbjk0MDA6XHRcdHJldCA9IGhjbGdlX2luaXRfbXNpKGhkZXYpO1xuOTQwMTpcdFx0aWYgKHJldCkge1xuOTQwMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtJbml0IE1TSS9NU0ktWCBlcnJvciwgcmV0ID0gJWQuXFxuXCYjMzQ7LCByZXQpO1xuOTQwMzpcdFx0XHRnb3RvIGVycl9jbWRfdW5pbml0O1xuOTQwNDpcdFx0fVxuOTQwNTpcdFxuOTQwNjpcdFx0cmV0ID0gaGNsZ2VfbWlzY19pcnFfaW5pdChoZGV2KTtcbjk0MDc6XHRcdGlmIChyZXQpXG45NDA4Olx0XHRcdGdvdG8gZXJyX21zaV91bmluaXQ7XG45NDA5Olx0XG45NDEwOlx0XHRyZXQgPSBoY2xnZV9hbGxvY190cXBzKGhkZXYpO1xuOTQxMTpcdFx0aWYgKHJldCkge1xuOTQxMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtBbGxvY2F0ZSBUUVBzIGVycm9yLCByZXQgPSAlZC5cXG5cJiMzNDssIHJldCk7XG45NDEzOlx0XHRcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xuOTQxNDpcdFx0fVxuOTQxNTpcdFxuOTQxNjpcdFx0cmV0ID0gaGNsZ2VfYWxsb2NfdnBvcnQoaGRldik7XG45NDE3Olx0XHRpZiAocmV0KVxuOTQxODpcdFx0XHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcbjk0MTk6XHRcbjk0MjA6XHRcdHJldCA9IGhjbGdlX21hcF90cXAoaGRldik7XG45NDIxOlx0XHRpZiAocmV0KVxuOTQyMjpcdFx0XHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcbjk0MjM6XHRcbjk0MjQ6XHRcdGlmIChoZGV2LVx1MDAzZWh3Lm1hYy5tZWRpYV90eXBlID09IEhOQUUzX01FRElBX1RZUEVfQ09QUEVSKSB7XG45NDI1Olx0XHRcdGNsZWFyX2JpdChITkFFM19ERVZfU1VQUE9SVF9GRUNfQiwgYWVfZGV2LVx1MDAzZWNhcHMpO1xuOTQyNjpcdFx0XHRpZiAoaG5hZTNfZGV2X3BoeV9pbXBfc3VwcG9ydGVkKGhkZXYpKVxuOTQyNzpcdFx0XHRcdHJldCA9IGhjbGdlX3VwZGF0ZV90cF9wb3J0X2luZm8oaGRldik7XG45NDI4Olx0XHRcdGVsc2Vcbjk0Mjk6XHRcdFx0XHRyZXQgPSBoY2xnZV9tYWNfbWRpb19jb25maWcoaGRldik7XG45NDMwOlx0XG45NDMxOlx0XHRcdGlmIChyZXQpXG45NDMyOlx0XHRcdFx0Z290byBlcnJfbXNpX2lycV91bmluaXQ7XG45NDMzOlx0XHR9XG45NDM0Olx0XG45NDM1Olx0XHRyZXQgPSBoY2xnZV9pbml0X3Vtdl9zcGFjZShoZGV2KTtcbjk0MzY6XHRcdGlmIChyZXQpXG45NDM3Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NDM4Olx0XG45NDM5Olx0XHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgSE5TMyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGUgYGhjbGdlYCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgaGNsZ2VfY29tbV9jbWRfaW5pdGAgYW5kIGBoY2xnZV9nZXRfY2FwYC4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIsIHNwZWNpZmljYWxseSwgaXMgaW50cmlndWluZy4gSXQgY2FuIGluamVjdCByYW5kb20gTU1JTyByZWFkIHZhbHVlcywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYnlwYXNzIGluaXRpYWwgY2hlY2tzLiBIb3dldmVyLCBJIGhpZ2hseSBkb3VidCBpdCBjYW4gbmF2aWdhdGUgdGhlIGNvbXBsZXggZmlybXdhcmUgY29tbWFuZCBxdWV1ZXMgcmVxdWlyZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4KCkJ1dCBob2xkIG9uISBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIGNvZGUgcGF0aHMgZGVlbWVkICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cy4gRG9lcyBzeXprYWxsZXIgZXZlbiB0YXJnZXQgUENJIGRyaXZlcnMgd2l0aCBpdHMgZnV6emVyPyBZZXMsIGl0IGhhcyB0aGUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBpdCBkb2VzLgoKVGhlIGtleSBpcyBpbiB0aGUgZGVmaW5pdGlvbiBvZiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2gmIzM0Oy4gIFRoZSBwcm9tcHQgZXhwbGljaXRseSBleGNsdWRlcyBhbnkgcGF0aCB1bnJlYWNoYWJsZSBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaWYgdGhlIGZ1enppbmcgYXBwcm9hY2ggY2FuJiMzOTt0IHJlYWNoIGEgY29kZSBibG9jayBpbiBRRU1VL0dDRSBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpTbywgaXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCBITlMzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIFFFTVUgd2l0aCB0aGUgUENJIGZ1enplcj8gIEl0JiMzOTtzIGEgZ2VuZXJpYyBQQ0kgZnV6emVyLCBub3QgYW4gSE5TMy1zcGVjaWZpYyBlbXVsYXRvci4gIFRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlLgoKQ2FuIHRoaXMgZ2VuZXJpYyBmdXp6ZXIgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgdG8gYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWA/IFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIHRocm91Z2ggc3lzZnMuIEl0IHJlcXVpcmVzIHRoYXQgdGhlIFBDSSBkZXZpY2UgYmUgcHJvcGVybHkgcHJvYmVkIGFuZCByZWdpc3RlcmVkIGZpcnN0LiBJZiB0aGUgUENJIGZ1enplciB0aHJvd3MgcmFuZG9tIE1NSU8gZGF0YSwgdGhlbiBgaGNsZ2VfaW5pdF9hZV9kZXZgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5IG9uLCBsaWtlbHkgYXQgdGhlIGBoY2xnZV9jb21tX2NtZF9pbml0YCBvciBgaGNsZ2VfZ2V0X2NhcGAgc3RhZ2UsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGV4cGVjdCBzcGVjaWZpYyByZXNwb25zZXMgZnJvbSB0aGUgZmlybXdhcmUmIzM5O3MgY29tbWFuZCBxdWV1ZS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpbiBkZXRhaWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGV4YW1pbmluZyBgaGNsZ2VfY29tbV9jbWRfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fY21kX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX2NvbmZpZ19yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNjp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTU5OD1FWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2MDA6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X29wcyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYwMS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYwOS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYxMDpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9pbml0X29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjEyOmludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MTMtXHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2Mjc6XHRoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3MoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02ODAtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2ODE6RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY4Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ2Nj1zdGF0aWMgaW5saW5lIHUzMiBoY2xnZV9jb21tX3JlYWRfcmVnKHU4IF9faW9tZW0gKmJhc2UsIHUzMiByZWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ3ODp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzktaW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDk0PWludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0OTU6aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ni1cdFx0XHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ny1cdFx0XHR1bnNpZ25lZCBsb25nIHJlc2V0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0OTg6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X29wcyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz00MTEzPXN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy00MTMzLVx0XHQgKiBhbnkgbWFpbGJveCBoYW5kbGluZyBvciBjb21tYW5kIHRvIGZpcm13YXJlIGlzIG9ubHkgdmFsaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6NDEzNDpcdFx0ICogYWZ0ZXIgaGNsZ2VfY29tbV9jbWRfaW5pdCBpcyBjYWxsZWQuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTQxMzUtXHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTM0MD1zdGF0aWMgaW50IGhjbGdlX2luaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTkzNzItXHQvKiBGaXJtd2FyZSBjb21tYW5kIGluaXRpYWxpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTM3MzpcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFx1MDAyNmhkZXYtXHUwMDNlaHcuaHcsIFx1MDAyNmhjbGdlX2NtcV9vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5Mzc0Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05Mzc1LVx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTgwNj1zdGF0aWMgaW50IGhjbGdlX3Jlc2V0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5ODI2Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI3LVx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yODY3PXN0YXRpYyBpbnQgaGNsZ2V2Zl9yZXNldF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjg3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyODgwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yODgxLVx0XHRcdFx0ICBcdTAwMjZoZGV2LVx1MDAzZWZ3X3ZlcnNpb24sIGZhbHNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yOTIwPXN0YXRpYyBpbnQgaGNsZ2V2Zl9pbml0X2hkZXYoc3RydWN0IGhjbGdldmZfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzU6XHRoY2xnZV9jb21tX2NtZF9pbml0X29wcyhcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LCBcdTAwMjZoY2xnZXZmX2NtcV9vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzY6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTI5MzctXHRcdFx0XHQgIFx1MDAyNmhkZXYtXHUwMDNlZndfdmVyc2lvbiwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjEyCgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgaGNsZ2VfY29tbV9jbWRfaW5pdGA6CgoqKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9pbml0YCoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24sIGBoY2xnZV9jb21tX2NtZF9pbml0YC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIHdpdGggJiMzNDtoY2xnZSYjMzQ7IHByZXN1bWFibHkgaW5kaWNhdGluZyBhIGNvbm5lY3Rpb24gdG8gaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBjb21tdW5pY2F0aW9uIGxheWVyLCBhbmQgJiMzNDtjb21tX2NtZCYjMzQ7IGhpbnRpbmcgYXQgY29tbXVuaWNhdGlvbiBjb21tYW5kcywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBpbml0aWFsaXppbmcgYSBjb21wb25lbnQgb2YgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgb3IgdGhlIGNvbW1hbmQgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiB0aGlzIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgb3BlcmF0aW9uIHRvIHByb3Blcmx5IGFzc2VzcyB3aGF0IGlzIGdvaW5nIG9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGVyaGFwcyBldmVuIHJlZ2lzdHJhdGlvbiBvZiBjb21tYW5kIGhhbmRsZXJzIGlmIHRoaXMgaXMgYSBmcmFtZXdvcmsuIEl0IHdvdWxkIGJlIHZhbHVhYmxlIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdCBzZXRzIHVwIGEgY29udGV4dCwgcHJlcGFyZXMgZGF0YSBidWZmZXJzLCByZWdpc3RlcnMgY29tbWFuZHMsIG9yIGNvbmZpZ3VyZXMgdW5kZXJseWluZyBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9uIHByaW9yIGluaXRpYWxpemF0aW9uIHN0ZXBzIHdpbGwgYmUgZXNzZW50aWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IGZ1dHVyZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEyOlx0aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gNjEzOlx0XHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxuIDYxNDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmVzZXRfcGVuZGluZylcbiA2MTU6XHR7XG4gNjE2Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcdTAwMjZody1cdTAwM2VjbXE7XG4gNjE3Olx0XHRpbnQgcmV0O1xuIDYxODpcdFxuIDYxOTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDYyMDpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtZHEtXHUwMDNlY3JxLmxvY2spO1xuIDYyMTpcdFxuIDYyMjpcdFx0Y21kcS1cdTAwM2Vjc3EubmV4dF90b19jbGVhbiA9IDA7XG4gNjIzOlx0XHRjbWRxLVx1MDAzZWNzcS5uZXh0X3RvX3VzZSA9IDA7XG4gNjI0Olx0XHRjbWRxLVx1MDAzZWNycS5uZXh0X3RvX2NsZWFuID0gMDtcbiA2MjU6XHRcdGNtZHEtXHUwMDNlY3JxLm5leHRfdG9fdXNlID0gMDtcbiA2MjY6XHRcbiA2Mjc6XHRcdGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhodyk7XG4gNjI4Olx0XG4gNjI5Olx0XHRzcGluX3VubG9jayhcdTAwMjZjbWRxLVx1MDAzZWNycS5sb2NrKTtcbiA2MzA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDYzMTpcdFxuIDYzMjpcdFx0Y2xlYXJfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpO1xuIDYzMzpcdFxuIDYzNDpcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgbmV3IHJlc2V0IHBlbmRpbmcsIGJlY2F1c2UgdGhlIGhpZ2hlciBsZXZlbFxuIDYzNTpcdFx0ICogcmVzZXQgbWF5IGhhcHBlbiB3aGVuIGxvd2VyIGxldmVsIHJlc2V0IGlzIGJlaW5nIHByb2Nlc3NlZC5cbiA2MzY6XHRcdCAqL1xuIDYzNzpcdFx0aWYgKHJlc2V0X3BlbmRpbmcpIHtcbiA2Mzg6XHRcdFx0cmV0ID0gLUVCVVNZO1xuIDYzOTpcdFx0XHRnb3RvIGVycl9jbWRfaW5pdDtcbiA2NDA6XHRcdH1cbiA2NDE6XHRcbiA2NDI6XHRcdC8qIGdldCB2ZXJzaW9uIGFuZCBkZXZpY2UgY2FwYWJpbGl0aWVzICovXG4gNjQzOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KGFlX2RldiwgaHcsXG4gNjQ0Olx0XHRcdFx0XHRcdFx0XHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcbiA2NDU6XHRcdGlmIChyZXQpIHtcbiA2NDY6XHRcdFx0ZGV2X2VycihcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gNjQ3Olx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gYW5kIGNhcGFiaWxpdGllcywgcmV0ID0gJWRcXG5cJiMzNDssXG4gNjQ4Olx0XHRcdFx0cmV0KTtcbiA2NDk6XHRcdFx0Z290byBlcnJfY21kX2luaXQ7XG4gNjUwOlx0XHR9XG4gNjUxOlx0XG4gNjUyOlx0XHRkZXZfaW5mbyhcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gNjUzOlx0XHRcdCBcJiMzNDtUaGUgZmlybXdhcmUgdmVyc2lvbiBpcyAlbHUuJWx1LiVsdS4lbHVcXG5cJiMzNDssXG4gNjU0Olx0XHRcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTNfTUFTSyxcbiA2NTU6XHRcdFx0XHRcdCBITkFFM19GV19WRVJTSU9OX0JZVEUzX1NISUZUKSxcbiA2NTY6XHRcdFx0IGhuYWUzX2dldF9maWVsZCgqZndfdmVyc2lvbiwgSE5BRTNfRldfVkVSU0lPTl9CWVRFMl9NQVNLLFxuIDY1NzpcdFx0XHRcdFx0IEhOQUUzX0ZXX1ZFUlNJT05fQllURTJfU0hJRlQpLFxuIDY1ODpcdFx0XHQgaG5hZTNfZ2V0X2ZpZWxkKCpmd192ZXJzaW9uLCBITkFFM19GV19WRVJTSU9OX0JZVEUxX01BU0ssXG4gNjU5Olx0XHRcdFx0XHQgSE5BRTNfRldfVkVSU0lPTl9CWVRFMV9TSElGVCksXG4gNjYwOlx0XHRcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTBfTUFTSyxcbiA2NjE6XHRcdFx0XHRcdCBITkFFM19GV19WRVJTSU9OX0JZVEUwX1NISUZUKSk7XG4gNjYyOlx0XG4gNjYzOlx0XHRpZiAoIWlzX3BmIFx1MDAyNlx1MDAyNiBhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuIDY2NDpcdFx0XHRyZXR1cm4gMDtcbiA2NjU6XHRcbiA2NjY6XHRcdC8qIGFzayB0aGUgZmlybXdhcmUgdG8gZW5hYmxlIHNvbWUgZmVhdHVyZXMsIGRyaXZlciBjYW4gd29yayB3aXRob3V0XG4gNjY3Olx0XHQgKiBpdC5cbiA2Njg6XHRcdCAqL1xuIDY2OTpcdFx0cmV0ID0gaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIHRydWUpO1xuIDY3MDpcdFx0aWYgKHJldClcbiA2NzE6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2YWVfZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIDY3MjpcdFx0XHRcdCBcJiMzNDtGaXJtd2FyZSBjb21wYXRpYmxlIGZlYXR1cmVzIG5vdCBlbmFibGVkKCVkKS5cXG5cJiMzNDssXG4gNjczOlx0XHRcdFx0IHJldCk7XG4gNjc0Olx0XHRyZXR1cm4gMDtcbiA2NzU6XHRcbiA2NzY6XHRlcnJfY21kX2luaXQ6XG4gNjc3Olx0XHRzZXRfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpO1xuIDY3ODpcdFxuIDY3OTpcdFx0cmV0dXJuIHJldDtcbiA2ODA6XHR9XG4gNjgxOlx0RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XG4gNjgyOlx0XG4gNjgzOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiA2ODQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XCYjMzQ7KTtcbiA2ODU6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0h1YXdlaSBUZWNoLiBDby4sIEx0ZC5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE4NQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBjYWxsOgoKKipBbmFseXppbmcgYGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlgKioKCkFscmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5YCBpcyBsaWtlbHkgYSBsb3ctbGV2ZWwgZnVuY3Rpb24sIHByb2JhYmx5IHBhcnQgb2YgdGhlIGhhcmR3YXJlIGNvbW11bmljYXRpb24gbGF5ZXIuIEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBoYXJkd2FyZS4gSXQgc2VuZHMgYSBjb21tYW5kLCBwcmVzdW1hYmx5IGEgcXVlcnksIHRvIHRoZSBlbWJlZGRlZCBmaXJtd2FyZSBvbiB0aGUgZGV2aWNlLiBUaGVuLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgbWVhbnMgaXQmIzM5O3MgYSBzeW5jaHJvbm91cyBvcGVyYXRpb247IHdlJiMzOTtyZSBibG9ja2luZyB1bnRpbCB0aGUgZmlybXdhcmUgcmVwbGllcy4KClRoaXMgcmVzcG9uc2UgaXMgZ29pbmcgdG8gYmUgdml0YWwgYmVjYXVzZSBpdCYjMzk7bGwgbGlrZWx5IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpcm13YXJlIHZlcnNpb24sIHdoaWNoIHdpbGwgYWZmZWN0IHdoYXQgY29kZSBwYXRocyBuZWVkIHRvIGJlIHRha2VuLiBJdCB3aWxsIGFsc28gcHJvdmlkZSB0aGUgaGFyZHdhcmUmIzM5O3MgY2FwYWJpbGl0aWVzLiBUaGlzICYjMzQ7Y2FwYWJpbGl0eSYjMzQ7IGluZm9ybWF0aW9uIGlzIHdoYXQgSSYjMzk7bSByZWFsbHkgY3VyaW91cyBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkYXRhIHRoYXQgY29tZXMgYmFjay4gSXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGNhcGFibGUgb2Yg4oCTIGZlYXR1cmVzLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBwb3NzaWJseSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucy4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiBvbiB3aGljaCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIG9yIGNvbW11bmljYXRpb24gc3RhY2sgYnVpbGRzLiBBbnkgZGlzY3JlcGFuY2llcyBoZXJlIGNvdWxkIGNhdXNlIG1ham9yIHByb2JsZW1zIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoaXMgcmVzcG9uc2UgY2FyZWZ1bGx5IHRvIGRldGVybWluZSBob3cgdGhlIHNvZnR3YXJlIGhhbmRsZXMgdGhlc2UgcG90ZW50aWFsIHZhcmlhdGlvbnMuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHVzaW5nIHRoZSBoYXJkd2FyZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTIxMD1pbnQgaGNsZ2VfY29tbV9hbGxvY19jbWRfcXVldWUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBpbnQgcmluZ190eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyMjg6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMjktXHRcdFx0XHRcdFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NjEyPWludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjQyLVx0LyogZ2V0IHZlcnNpb24gYW5kIGRldmljZSBjYXBhYmlsaXRpZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjQzOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShhZV9kZXYsIGh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02NDQtXHRcdFx0XHRcdFx0XHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ3OD12b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzk6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODAtXHRcdFx0XHRcdFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTIwNwoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWA6CgoqKkFuYWx5emluZyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAqKgoKQWxyaWdodCwgc28gdGhlIG5hbWUgYWxvbmUgZ2l2ZXMgbWUgYSBwcmV0dHkgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBsaWtlbHkgcmVwcmVzZW50cyBhIGNvbW1hbmQgd2l0aGluIHRoZSBgaGNsZ2VfY29tbWAgbW9kdWxlICh3aGljaCwgZ2l2ZW4gdGhlIG5hbWluZywgSSYjMzk7bSBpbmZlcnJpbmcgaXMgcmVsYXRlZCB0byBzb21lIGNvbW11bmljYXRpb24gbGF5ZXIsIHBlcmhhcHMgaGFyZHdhcmUgY29udHJvbCBsYW5ndWFnZSBvciBhIHNpbWlsYXIgZW1iZWRkZWQgc3lzdGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIHRoaXMgcGFydGljdWxhciBjb21tYW5kIGFpbXMgdG8gcmV0cmlldmUsIGJ1dCAmIzM5O3ZlcnNpb24mIzM5OyBhbmQgJiMzOTtjYXBhYmlsaXR5JiMzOTsgYXJlIGh1Z2UgY2x1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBxdWVyeSBzb21lIGRldmljZSBvciBtb2R1bGUgZm9yIGl0cyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIGZ1bmN0aW9uYWwgY2FwYWJpbGl0aWVzLiBJJiMzOTttIHRoaW5raW5nIGluIHRlcm1zIG9mIGJlaW5nIGFibGUgdG8gY2hlY2sgdGhlIGNvbXBhdGliaWxpdHkgb2YgZGlmZmVyZW50IG1vZHVsZXMuIE1heWJlIGl0JiMzOTtzIGNoZWNraW5nIHdoYXQgZmVhdHVyZXMgdGhlIGRldmljZSBzdXBwb3J0cywgbGlrZSBjZXJ0YWluIGRhdGEgdHJhbnNmZXIgc3BlZWRzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB1bml0cy4KCkkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNvbW1hbmQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSXMgaXQgYSBzeW5jaHJvbm91cyByZXF1ZXN0LXJlc3BvbnNlIHR5cGUsIG9yIG1vcmUgb2YgYW4gYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbj8gRG9lcyBpdCB1dGlsaXplIGEgcGFydGljdWxhciBjb21tdW5pY2F0aW9uIHByb3RvY29sPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIG9yIHRpbWVvdXQgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZD8gVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCBiZSBrZXksIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgY29tbWFuZCBpcyBzdHJ1Y3R1cmVkLiBTcGVjaWZpY2FsbHksIGhvdyB0aGUgY29tbWFuZCBpcyBzdHJ1Y3R1cmVkIGFzIHdlbGwgYXMgaG93IHRoZSByZXNwb25zZSBpcyBpbnRlcnByZXRlZCBhbmQgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyODpcdGludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcbiAyMjk6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gMjMwOlx0XHRcdFx0XHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHN0cnVjdCBoY2xnZV9jb21tX3F1ZXJ5X3ZlcnNpb25fY21kICpyZXNwO1xuIDIzMzpcdFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbiAyMzQ6XHRcdGludCByZXQ7XG4gMjM1Olx0XG4gMjM2Olx0XHRoY2xnZV9jb21tX2NtZF9zZXR1cF9iYXNpY19kZXNjKFx1MDAyNmRlc2MsIEhDTEdFX09QQ19RVUVSWV9GV19WRVIsIDEpO1xuIDIzNzpcdFx0cmVzcCA9IChzdHJ1Y3QgaGNsZ2VfY29tbV9xdWVyeV92ZXJzaW9uX2NtZCAqKWRlc2MuZGF0YTtcbiAyMzg6XHRcdHJlc3AtXHUwMDNlYXBpX2NhcHMgPSBoY2xnZV9jb21tX2J1aWxkX2FwaV9jYXBzKCk7XG4gMjM5Olx0XG4gMjQwOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbiAyNDE6XHRcdGlmIChyZXQpXG4gMjQyOlx0XHRcdHJldHVybiByZXQ7XG4gMjQzOlx0XG4gMjQ0Olx0XHQqZndfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlZmlybXdhcmUpO1xuIDI0NTpcdFxuIDI0NjpcdFx0YWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uID0gbGUzMl90b19jcHUocmVzcC1cdTAwM2VoYXJkd2FyZSkgXHUwMDNjXHUwMDNjXG4gMjQ3Olx0XHRcdFx0XHRcdCBITkFFM19QQ0lfUkVWSVNJT05fQklUX1NJWkU7XG4gMjQ4Olx0XHRhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gfD0gYWVfZGV2LVx1MDAzZXBkZXYtXHUwMDNlcmV2aXNpb247XG4gMjQ5Olx0XG4gMjUwOlx0XHRpZiAoYWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uID09IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyKSB7XG4gMjUxOlx0XHRcdGhjbGdlX2NvbW1fc2V0X2RlZmF1bHRfY2FwYWJpbGl0eShhZV9kZXYsIGlzX3BmKTtcbiAyNTI6XHRcdFx0cmV0dXJuIDA7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRoY2xnZV9jb21tX3BhcnNlX2NhcGFiaWxpdHkoYWVfZGV2LCBpc19wZiwgcmVzcCk7XG4gMjU2Olx0XG4gMjU3Olx0XHRyZXR1cm4gcmV0O1xuIDI1ODpcdH1cbiAyNTk6XHRcbiAyNjA6XHRzdGF0aWMgY29uc3QgdTE2IHNwZWNfb3Bjb2RlW10gPSB7IEhDTEdFX09QQ19TVEFUU182NF9CSVQsXG4gMjYxOlx0XHRcdFx0XHQgICBIQ0xHRV9PUENfU1RBVFNfMzJfQklULFxuIDI2MjpcdFx0XHRcdFx0ICAgSENMR0VfT1BDX1NUQVRTX01BQyxcbiAyNjM6XHRcdFx0XHRcdCAgIEhDTEdFX09QQ19TVEFUU19NQUNfQUxMLFxuIDI2NDpcdFx0XHRcdFx0ICAgSENMR0VfT1BDX1FVRVJZXzMyX0JJVF9SRUcsXG4gMjY1Olx0XHRcdFx0XHQgICBIQ0xHRV9PUENfUVVFUllfNjRfQklUX1JFRyxcbiAyNjY6XHRcdFx0XHRcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX01QRl9SQVNfSU5ULFxuIDI2NzpcdFx0XHRcdFx0ICAgSENMR0VfUVVFUllfQ0xFQVJfUEZfUkFTX0lOVCxcbiAyNjg6XHRcdFx0XHRcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX0FMTF9NUEZfTVNJWF9JTlQsXG4gMjY5Olx0XHRcdFx0XHQgICBIQ0xHRV9RVUVSWV9DTEVBUl9BTExfUEZfTVNJWF9JTlQsXG4gMjcwOlx0XHRcdFx0XHQgICBIQ0xHRV9RVUVSWV9BTExfRVJSX0lORk8gfTtcbiAyNzE6XHRcbiAyNzI6XHRzdGF0aWMgYm9vbCBoY2xnZV9jb21tX2lzX3NwZWNpYWxfb3Bjb2RlKHUxNiBvcGNvZGUpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogdGhlc2UgY29tbWFuZHMgaGF2ZSBzZXZlcmFsIGRlc2NyaXB0b3JzLFxuIDI3NTpcdFx0ICogYW5kIHVzZSB0aGUgZmlyc3Qgb25lIHRvIHNhdmUgb3Bjb2RlIGFuZCByZXR1cm4gdmFsdWVcbiAyNzY6XHRcdCAqL1xuIDI3NzpcdFx0dTMyIGk7XG4gMjc4Olx0XG4gMjc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNwZWNfb3Bjb2RlKTsgaSYjNDM7JiM0MzspXG4gMjgwOlx0XHRcdGlmIChzcGVjX29wY29kZVtpXSA9PSBvcGNvZGUpXG4gMjgxOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gZmFsc2U7XG4gMjg0Olx0fVxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpyaW5nKVxuIDI4NzpcdHtcbiAyODg6XHRcdGludCBudGMgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4gMjg5Olx0XHRpbnQgbnR1ID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiAyOTA6XHRcdGludCB1c2VkID0gKG50dSAtIG50YyAmIzQzOyByaW5nLVx1MDAzZWRlc2NfbnVtKSAlIHJpbmctXHUwMDNlZGVzY19udW07XG4gMjkxOlx0XG4gMjkyOlx0XHRyZXR1cm4gcmluZy1cdTAwM2VkZXNjX251bSAtIHVzZWQgLSAxO1xuIDI5MzpcdH1cbiAyOTQ6XHRcbiAyOTU6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuIDI5NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcbiAyOTc6XHR7XG4gMjk4Olx0XHRzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzY190b191c2U7XG4gMjk5Olx0XHRpbnQgaGFuZGxlID0gMDtcbiAzMDA6XHRcbiAzMDE6XHRcdHdoaWxlIChoYW5kbGUgXHUwMDNjIG51bSkge1xuIDMwMjpcdFx0XHRkZXNjX3RvX3VzZSA9IFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EuZGVzY1tody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlXTtcbiAzMDM6XHRcdFx0KmRlc2NfdG9fdXNlID0gZGVzY1toYW5kbGVdO1xuIDMwNDpcdFx0XHQoaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSkmIzQzOyYjNDM7O1xuIDMwNTpcdFx0XHRpZiAoaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSBcdTAwM2U9IGh3LVx1MDAzZWNtcS5jc3EuZGVzY19udW0pXG4gMzA2Olx0XHRcdFx0aHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSA9IDA7XG4gMzA3Olx0XHRcdGhhbmRsZSYjNDM7JiM0Mzs7XG4gMzA4Olx0XHR9XG4gMzA5Olx0fVxuIDMxMDpcdFxuIDMxMTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9pc192YWxpZF9jc3FfY2xlYW5faGVhZChzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqcmluZyxcbiAzMTI6XHRcdFx0XHRcdFx0ICAgICAgaW50IGhlYWQpXG4gMzEzOlx0e1xuIDMxNDpcdFx0aW50IG50YyA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiAzMTU6XHRcdGludCBudHUgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuIDMxNjpcdFxuIDMxNzpcdFx0aWYgKG50dSBcdTAwM2UgbnRjKVxuIDMxODpcdFx0XHRyZXR1cm4gaGVhZCBcdTAwM2U9IG50YyBcdTAwMjZcdTAwMjYgaGVhZCBcdTAwM2M9IG50dTtcbiAzMTk6XHRcbiAzMjA6XHRcdHJldHVybiBoZWFkIFx1MDAzZT0gbnRjIHx8IGhlYWQgXHUwMDNjPSBudHU7XG4gMzIxOlx0fVxuIDMyMjpcdFxuIDMyMzpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2NsZWFuKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbiAzMjQ6XHR7XG4gMzI1Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqY3NxID0gXHUwMDI2aHctXHUwMDNlY21xLmNzcTtcbiAzMjY6XHRcdGludCBjbGVhbjtcbiAzMjc6XHRcdHUzMiBoZWFkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdGFuZGFyZCDigJMgc2VuZHMgYSBjb21tYW5kLCB3YWl0cyBmb3IgY29tcGxldGlvbi4gVGhlIFBDSSBmdXp6ZXIsIGlmIGl0JiMzOTtzIGhpdHRpbmcgdGhpcywgKmNvdWxkKiBwb3RlbnRpYWxseSB0cmlnZ2VyIGEgY29tcGxldGlvbiByYW5kb21seSB2aWEgTU1JTywgYnV0IGl0JiMzOTtzIGV4Y2VwdGlvbmFsbHkgdW5saWtlbHkgaXQgd2lsbCBjcmVhdGUgYSB2YWxpZCBmaXJtd2FyZSB2ZXJzaW9uIG9yIGhhcmR3YXJlIHZlcnNpb24gdGhhdCBnZXRzIHBhc3QgYW55IHJlYWwgY2hlY2tzLCB1bmxlc3MgdGhlIGNoZWNrcyBhcmUgbGF1Z2hhYmx5IHdlYWsuCgpBaCwgYnV0IGhhbmcgb24uLi4gYGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlgIGp1c3QgKnJlYWRzKiB0aG9zZSB2ZXJzaW9ucyBmcm9tIHRoZSBkZXNjcmlwdG9yLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSWYgYGFlX2Rldi0mZ3Q7ZGV2X3ZlcnNpb25gIGhhcHBlbnMgdG8gYmUgYEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyYCwgaXQganVzdCByZXR1cm5zIHplcm8uIE90aGVyd2lzZSwgaXQgY2FsbHMgYGhjbGdlX2NvbW1fcGFyc2VfY2FwYWJpbGl0eWAuIFNvLCB0aGUgUENJIGZ1enplciAqbWlnaHQqIGJlIGFibGUgdG8gYnlwYXNzIHRoaXMgaWYgaXQgcmFuZG9tbHkgc2V0cyBhIHZhbGlkIHZlcnNpb24sIG9yIHBlcmhhcHMgaWYgYW55IHZlcnNpb24gaXMgYWNjZXB0ZWQuIFRoaXMgY291bGQgYmUgcHJvbWlzaW5nLgoKQnV0IHRoZSBwcm9tcHQgYWxzbyBzYXlzLCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0IHR5cGljYWxseSBtZWFucyBpZiBpdCYjMzk7cyBhIGRyaXZlciBmb3IgKnNwZWNpZmljKiBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdG9yLCBpdCYjMzk7cyBjb25zaWRlcmVkIHVucmVhY2hhYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0b3IgZm9yIEhOUzM/IEkgZG9uJiMzOTt0IHRoaW5rIHRoZXJlIGlzLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgZGVhZCBlbmQuCgpXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGZ1enogSE5TMz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyBvbiBITlMzIHRvIHNlZSBpZiBhbnlvbmUgaGFzIGhhZCBzdWNjZXNzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5LCBvciBkaWZmaWN1bHQsIGl0IHdpbGwgYmUgdG8gcmVhY2ggdGhpcyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2huczMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtNQUlOVEFJTkVSUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0xMTY5Nz1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoxMTY5ODpGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmL2huczMtcG11LnJzdFxuTUFJTlRBSU5FUlM6MTE2OTk6RjpcdGRyaXZlcnMvcGVyZi9oaXNpbGljb24vaG5zM19wbXUuY1xuTUFJTlRBSU5FUlMtMTE3MDAtXG4tLVxuTUFJTlRBSU5FUlM9MTE3MzM9VzpcdGh0dHA6Ly93d3cuaGlzaWxpY29uLmNvbVxuTUFJTlRBSU5FUlM6MTE3MzQ6RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1xuTUFJTlRBSU5FUlMtMTE3MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTk0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIEhOUzMgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gcmVhY2ggdGhpcyBzcGVjaWZpYyBITlMzIGRyaXZlci4gQWgsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplci4gSXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBQQ0kgZHJpdmVycyBieSBtYXRjaGluZyB0aGUgUENJIElEIGFuZCB0aGVuIGZlZWRpbmcgcmFuZG9tIE1NSU8gYWNjZXNzZXMuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHRoZSB3aG9sZSBzdG9yeS4gUmVhbGlzdGljYWxseSwgaWYgdGhlIGRyaXZlciByZWxpZXMgb24gY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGl0IHVzdWFsbHkgZmFpbHMgZHVyaW5nIHRoZSBwcm9iaW5nIHN0YWdlLiAKCkhvbGQgb24sIHRob3VnaCwgdGhlIHBhdGNoIGFwcGxpY2F0aW9uIGNvbW1lbnQgaW5kaWNhdGVzIGBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdgLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50LiBJdCBtZWFucyBzeXprYWxsZXIgaXMgZWl0aGVyIGFjdGl2ZWx5IGZ1enppbmcgaXQsIG9yIGF0IGxlYXN0IHNvbWVvbmUgc3VibWl0dGVkIGl0IGZvciB0ZXN0aW5nLiBPa2F5LCBpZiBzeXprYWxsZXIgaXMgKnRlc3RpbmcqIGl0LCBpdCBtdXN0IGJlIHNvbWV3aGF0IHJlYWNoYWJsZSwgb3IgYXQgbGVhc3QgYmVpbmcgdGVzdGVkIGZvciBjb21waWxhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZTogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFJpZ2h0LCBidXQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgY2F2ZWF0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpUaGUgSE5TMyBpcyBhICpwaHlzaWNhbCogbmV0d29yayBjYXJkLCBhbmQgYXMgZmFyIGFzIEkga25vdywgdGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0IGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBvZiBgbWFjODAyMTFfaHdzaW1gIG9yIGBuZXRkZXZzaW1gIGZvciBITlMzLiBUaGUgUENJIGZ1enplciBtaWdodCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRvIGZhaWwgZGVlcCBpbnRvIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgbGlrZWx5IHdoaWxlIHdhaXRpbmcgZm9yIGZpcm13YXJlIHRvIGxvYWQsIG9yIHRyeWluZyB0byBpbml0aWFsaXplIHRoZSBjb21tYW5kIHF1ZXVlLgoKVG8gYmUgdGhvcm91Z2gsIGxldCBtZSB2ZXJpZnkgaWYgYGhjbGdlX2NvbW1fY21kX3NlbmRgIGlzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgYml0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfY29tbV9jbWRfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTc4PWludCBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWcoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoxMDE6XHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTEwMi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NjQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDY2LSAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NzM6aW50IGhjbGdlX2NvbW1fY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDc0LVx0XHRcdGludCBudW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjEtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo1MjI6RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfc2VuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ4Mj1pbnQgaGNsZ2VfY29tbV9hbGxvY19jbWRfcXVldWUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBpbnQgcmluZ190eXBlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDgzOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ4NC1cdFx0XHRpbnQgbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMwNC1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzozMDU6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTMxNz1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2lucHV0X3R1cGxlKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MzM4Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zODM9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19hbGdvX2tleShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGNvbnN0IHU4IGhmdW5jLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVx0XHRrZXlfb2Zmc2V0JiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6NDEyOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDEzLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy03Mi1cdFx0ZGVzYy5kYXRhWzBdID0gY3B1X3RvX2xlMzIodHFwLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy03NC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtODYtXHRcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3Olx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtODgtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmM9MzQ0Mj1pbnQgaGNsZ2VfaGFuZGxlX3ZmX3F1ZXVlX2Vycl9yYXMoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmMtMzQ1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYzozNDYwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LCBkZXNjLCAyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzIxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzIyOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTUwPWludCBoY2xnZXZmX2NtZF9zZW5kKHN0cnVjdCBoY2xnZXZmX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjUyOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA2NgoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIENvbW11bmljYXRpb24qKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gWWVhaCwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UgdXNlIHRvIGFjdHVhbGx5ICp0cmFuc21pdCogY29tbWFuZHMgdG8gdGhlIGZpcm13YXJlLCBpc24mIzM5O3QgaXQ/IE9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhpcyBjb3JyZWN0bHkgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29tbWFuZCB0cmFuc21pc3Npb24gd29ya3MuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGhjbGdlX2NvbW1fY21kLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gR290IHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHQgKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcbiA0NjY6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuIDQ2NzpcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxuIDQ2ODpcdCAqIEBudW0gOiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGJlIHNlbnRcbiA0Njk6XHQgKlxuIDQ3MDpcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxuIDQ3MTpcdCAqIHNlbmRzIHRoZSBxdWV1ZSwgY2xlYW5zIHRoZSBxdWV1ZSwgZXRjXG4gNDcyOlx0ICoqL1xuIDQ3MzpcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gNDc0Olx0XHRcdFx0aW50IG51bSlcbiA0NzU6XHR7XG4gNDc2Olx0XHRib29sIGlzX3NwZWNpYWwgPSBoY2xnZV9jb21tX2lzX3NwZWNpYWxfb3Bjb2RlKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlb3Bjb2RlKSk7XG4gNDc3Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqY3NxID0gXHUwMDI2aHctXHUwMDNlY21xLmNzcTtcbiA0Nzg6XHRcdGludCByZXQ7XG4gNDc5Olx0XHRpbnQgbnRjO1xuIDQ4MDpcdFxuIDQ4MTpcdFx0aWYgKGh3LVx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQpXG4gNDgyOlx0XHRcdGh3LVx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XG4gNDgzOlx0XG4gNDg0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHctXHUwMDNlY21xLmNzcS5sb2NrKTtcbiA0ODU6XHRcbiA0ODY6XHRcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcdTAwMjZody1cdTAwM2Vjb21tX3N0YXRlKSkge1xuIDQ4NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKG51bSBcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EpKSB7XG4gNDkyOlx0XHRcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXG4gNDkzOlx0XHRcdCAqIG5lZWQgdXBkYXRlIHRoZSBTVyBIRUFEIHBvaW50ZXIgY3NxLVx1MDAzZW5leHRfdG9fY2xlYW5cbiA0OTQ6XHRcdFx0ICovXG4gNDk1Olx0XHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID1cbiA0OTY6XHRcdFx0XHRoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xuIDQ5NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQ5OTpcdFx0fVxuIDUwMDpcdFxuIDUwMTpcdFx0LyoqXG4gNTAyOlx0XHQgKiBSZWNvcmQgdGhlIGxvY2F0aW9uIG9mIGRlc2MgaW4gdGhlIHJpbmcgZm9yIHRoaXMgdGltZVxuIDUwMzpcdFx0ICogd2hpY2ggd2lsbCBiZSB1c2UgZm9yIGhhcmR3YXJlIHRvIHdyaXRlIGJhY2tcbiA1MDQ6XHRcdCAqL1xuIDUwNTpcdFx0bnRjID0gaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcbiA1MDY6XHRcbiA1MDc6XHRcdGhjbGdlX2NvbW1fY21kX2NvcHlfZGVzYyhodywgZGVzYywgbnVtKTtcbiA1MDg6XHRcbiA1MDk6XHRcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXG4gNTEwOlx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuIDUxMTpcdFx0XHRcdCAgICAgaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XG4gNTEyOlx0XG4gNTEzOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoaHcsIGRlc2MsIG51bSwgbnRjKTtcbiA1MTQ6XHRcbiA1MTU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNTE2Olx0XG4gNTE3Olx0XHRpZiAoaHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfZ2V0KVxuIDUxODpcdFx0XHRody1cdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9nZXQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XG4gNTE5Olx0XG4gNTIwOlx0XHRyZXR1cm4gcmV0O1xuIDUyMTpcdH1cbiA1MjI6XHRFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcbiA1MjM6XHRcbiA1MjQ6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4gNTI1Olx0e1xuIDUyNjpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRywgMCk7XG4gNTI3Olx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0hfUkVHLCAwKTtcbiA1Mjg6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCAwKTtcbiA1Mjk6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xuIDUzMDpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9UQUlMX1JFRywgMCk7XG4gNTMxOlx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLCAwKTtcbiA1MzI6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfSF9SRUcsIDApO1xuIDUzMzpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9ERVBUSF9SRUcsIDApO1xuIDUzNDpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9IRUFEX1JFRywgMCk7XG4gNTM1Olx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX1RBSUxfUkVHLCAwKTtcbiA1MzY6XHR9XG4gNTM3Olx0XG4gNTM4Olx0dm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuIDUzOTpcdFx0XHRcdCAgIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbiA1NDA6XHR7XG4gNTQxOlx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcdTAwMjZody1cdTAwM2VjbXE7XG4gNTQyOlx0XG4gNTQzOlx0XHRoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWcoYWVfZGV2LCBodywgZmFsc2UpO1xuIDU0NDpcdFx0c2V0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcdTAwMjZody1cdTAwM2Vjb21tX3N0YXRlKTtcbiA1NDU6XHRcbiA1NDY6XHRcdC8qIHdhaXQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpcm13YXJlIGNvbXBsZXRlcyB0aGUgcG9zc2libGUgbGVmdFxuIDU0NzpcdFx0ICogb3ZlciBjb21tYW5kcy5cbiA1NDg6XHRcdCAqL1xuIDU0OTpcdFx0bXNsZWVwKEhDTEdFX0NPTU1fQ01EUV9DTEVBUl9XQUlUX1RJTUUpO1xuIDU1MDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDU1MTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtZHEtXHUwMDNlY3JxLmxvY2spO1xuIDU1MjpcdFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0X3JlZ3MoaHcpO1xuIDU1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y21kcS1cdTAwM2VjcnEubG9jayk7XG4gNTU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjbWRxLVx1MDAzZWNzcS5sb2NrKTtcbiA1NTU6XHRcbiA1NTY6XHRcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcdTAwMjZjbWRxLVx1MDAzZWNzcSk7XG4gNTU3Olx0XHRoY2xnZV9jb21tX2ZyZWVfY21kX2Rlc2MoXHUwMDI2Y21kcS1cdTAwM2VjcnEpO1xuIDU1ODpcdH1cbiA1NTk6XHRFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF91bmluaXQpO1xuIDU2MDpcdFxuIDU2MTpcdGludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4gNTYyOlx0e1xuIDU2MzpcdFx0c3RydWN0IGhjbGdlX2NvbW1fY21xICpjbWRxID0gXHUwMDI2aHctXHUwMDNlY21xO1xuIDU2NDpcdFx0aW50IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMTYKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIENvbW1hbmQgRXhlY3V0aW9uIFJlc3VsdHMqKgoKUmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGlzIHdoZXJlIHdlJiMzOTtyZSBhdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgdmVyaWZpY2F0aW9uIHN0ZXA7IHRoZSBjcnVjaWFsIHBvaW50IG9mIGRldGVybWluaW5nIGlmIHRoZSBjb21tYW5kLCB3aGF0ZXZlciBpdCB3YXMsIGFjdHVhbGx5IGRpZCB3aGF0IGl0IHdhcyBzdXBwb3NlZCB0byBkby4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciwgZW5zdXJpbmcgdGhhdCB0aGUgc3lzdGVtIG1vdmVzIGZvcndhcmQgb25seSBpZiB0aGUgcHJldmlvdXMgYWN0aW9uIGFjaGlldmVkIGl0cyBpbnRlbmRlZCBvdXRjb21lLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHZhcmlvdXMgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBjaGVjayBoYW5kbGVzIHRoZW0uIElzIGl0IGEgc2ltcGxlIHJldHVybiBjb2RlIGNoZWNrLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIHN0YXRlIHZlcmlmaWNhdGlvbj8gRG9lcyBpdCBjb25zaWRlciB0aGUgaW5mbHVlbmNlIG9mIHRoZSBjb21tYW5kIG9uIGRlcGVuZGVudCBtb2R1bGVzPyBIb3cgdGhvcm91Z2ggaXMgaXQ/IFRoZSBxdWFsaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBzdGVwIGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZzogd2hhdCBzcGVjaWZpYyBlcnJvciBjb2RlcyBhcmUgYW50aWNpcGF0ZWQsIGhvdyBhcmUgdGhleSBpbnRlcnByZXRlZCwgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQgZm9sbG93aW5nIGEgZmFpbHVyZSBkZXRlY3RlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBpdCBjb25zaWRlcnMgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlcm1pdHRlbnQgZmFpbHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBleGVjdXRpb24gcGF0aCBpcyBjb25maXJtZWQsIG9yIGRpdmVyZ2VkLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGNoZWNrIGlzIGtleSB0byBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuIDQzNjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxuIDQzNzpcdFx0XHRcdFx0ICAgICAgIGludCBudW0sIGludCBudGMpXG4gNDM4Olx0e1xuIDQzOTpcdFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcbiA0NDA6XHRcdGludCBoYW5kbGUsIHJldDtcbiA0NDE6XHRcbiA0NDI6XHRcdC8qIElmIHRoZSBjb21tYW5kIGlzIHN5bmMsIHdhaXQgZm9yIHRoZSBmaXJtd2FyZSB0byB3cml0ZSBiYWNrLFxuIDQ0MzpcdFx0ICogaWYgbXVsdGkgZGVzY3JpcHRvcnMgdG8gYmUgc2VudCwgdXNlIHRoZSBmaXJzdCBvbmUgdG8gY2hlY2tcbiA0NDQ6XHRcdCAqL1xuIDQ0NTpcdFx0aWYgKEhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlZmxhZykpKVxuIDQ0NjpcdFx0XHRoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3AoaHcsIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlb3Bjb2RlKSxcbiA0NDc6XHRcdFx0XHRcdFx0IFx1MDAyNmlzX2NvbXBsZXRlZCk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAoIWlzX2NvbXBsZXRlZClcbiA0NTA6XHRcdFx0cmV0ID0gLUVCQURFO1xuIDQ1MTpcdFx0ZWxzZVxuIDQ1MjpcdFx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWwoaHcsIGRlc2MsIG51bSwgbnRjKTtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIENsZWFuIHRoZSBjb21tYW5kIHNlbmQgcXVldWUgKi9cbiA0NTU6XHRcdGhhbmRsZSA9IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihodyk7XG4gNDU2Olx0XHRpZiAoaGFuZGxlIFx1MDAzYyAwKVxuIDQ1NzpcdFx0XHRyZXQgPSBoYW5kbGU7XG4gNDU4Olx0XHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxuIDQ1OTpcdFx0XHRkZXZfd2FybihcdTAwMjZody1cdTAwM2VjbXEuY3NxLnBkZXYtXHUwMDNlZGV2LFxuIDQ2MDpcdFx0XHRcdCBcJiMzNDtjbGVhbmVkICVkLCBuZWVkIHRvIGNsZWFuICVkXFxuXCYjMzQ7LCBoYW5kbGUsIG51bSk7XG4gNDYxOlx0XHRyZXR1cm4gcmV0O1xuIDQ2MjpcdH1cbiA0NjM6XHRcbiA0NjQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNTQKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKldhaXRpbmcgb24gdGhlIEZpcm13YXJlJiMzOTtzIFJlcGx5KioKClJpZ2h0LCBzbyBgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwYC4uLiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBoYW5naW5nLCBpc24mIzM5O3QgaXQ/IFdlJiMzOTt2ZSBzZW50IHRoZSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSDigJMgaXQgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSByZWdpc3RlciByZWFkIHRvIGEgY29tcGxleCBjb25maWd1cmF0aW9uIHNlcXVlbmNlIOKAkyBhbmQgbm93IHdlJiMzOTtyZSBlc3NlbnRpYWxseSBpbiBhIHBvbGxpbmcgbG9vcCwgb3IgcGVyaGFwcyB1c2luZyBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbSBpbnRlcm5hbGx5LCB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgdG8gYWNrbm93bGVkZ2UgYW5kIHdyaXRlIGJhY2sgdGhlIHJlc3BvbnNlLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGNvbnZlcmdlcy4gV2UgKmhhdmUqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXRzZWxmIGlzIHNvbGlkIGhlcmU7IGEgZ2xpdGNoIGF0IHRoaXMgc3RhZ2UgaXMgYSBkaXNhc3Rlci4gV2hhdCBhcmUgb3VyIHRpbWVvdXQgbWVjaGFuaXNtcz8gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZSBpZiB0aGUgZmlybXdhcmUgZ29lcyBzaWxlbnQ/IEFyZSB3ZSBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggYW55IGNvbmN1cnJlbnQgb3BlcmF0aW9ucz8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB3b3JzdC1jYXNlIHNjZW5hcmlvcyBoZXJlLCBsaWtlIGlmIHRoZSBmaXJtd2FyZSBjcmFzaGVzIGR1cmluZyBwcm9jZXNzaW5nIGFuZCBuZXZlciB3cml0ZXMgYmFjay4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbSYjMzk7cyByb2J1c3RuZXNzIGFyZSBtYXNzaXZlIGRlcGVuZGluZyBvbiB3aGF0IGNvbW1hbmQgd2FzIGlzc3VlZC4gSXQmIzM5O3MgdGhlIGFic29sdXRlIGVzc2VuY2Ugb2Ygc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4Y2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0fTtcbiA0MDE6XHRcdHUzMiBlcnJjb2RlX2NvdW50ID0gQVJSQVlfU0laRShoY2xnZV9jb21tX2NtZF9lcnJjb2RlKTtcbiA0MDI6XHRcdHUzMiBpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXJyY29kZV9jb3VudDsgaSYjNDM7JiM0MzspXG4gNDA1Olx0XHRcdGlmIChoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmltcF9lcnJjb2RlID09IGRlc2NfcmV0KVxuIDQwNjpcdFx0XHRcdHJldHVybiBoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmNvbW1vbl9lcnJubztcbiA0MDc6XHRcbiA0MDg6XHRcdHJldHVybiAtRUlPO1xuIDQwOTpcdH1cbiA0MTA6XHRcbiA0MTE6XHRzdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gNDEyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0sXG4gNDEzOlx0XHRcdFx0XHQgICAgICAgaW50IG50YylcbiA0MTQ6XHR7XG4gNDE1Olx0XHR1MTYgb3Bjb2RlLCBkZXNjX3JldDtcbiA0MTY6XHRcdGludCBoYW5kbGU7XG4gNDE3Olx0XG4gNDE4Olx0XHRvcGNvZGUgPSBsZTE2X3RvX2NwdShkZXNjWzBdLm9wY29kZSk7XG4gNDE5Olx0XHRmb3IgKGhhbmRsZSA9IDA7IGhhbmRsZSBcdTAwM2MgbnVtOyBoYW5kbGUmIzQzOyYjNDM7KSB7XG4gNDIwOlx0XHRcdGRlc2NbaGFuZGxlXSA9IGh3LVx1MDAzZWNtcS5jc3EuZGVzY1tudGNdO1xuIDQyMTpcdFx0XHRudGMmIzQzOyYjNDM7O1xuIDQyMjpcdFx0XHRpZiAobnRjIFx1MDAzZT0gaHctXHUwMDNlY21xLmNzcS5kZXNjX251bSlcbiA0MjM6XHRcdFx0XHRudGMgPSAwO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFx0aWYgKGxpa2VseSghaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShvcGNvZGUpKSlcbiA0MjY6XHRcdFx0ZGVzY19yZXQgPSBsZTE2X3RvX2NwdShkZXNjW251bSAtIDFdLnJldHZhbCk7XG4gNDI3Olx0XHRlbHNlXG4gNDI4Olx0XHRcdGRlc2NfcmV0ID0gbGUxNl90b19jcHUoZGVzY1swXS5yZXR2YWwpO1xuIDQyOTpcdFxuIDQzMDpcdFx0aHctXHUwMDNlY21xLmxhc3Rfc3RhdHVzID0gZGVzY19yZXQ7XG4gNDMxOlx0XG4gNDMyOlx0XHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZShkZXNjX3JldCk7XG4gNDMzOlx0fVxuIDQzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA2NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIHRoZSBIQ0xHRSBDb250ZXh0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2hvdWxkIGJlIHNlZWluZyBhIGNhbGwgdG8gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAgcmlnaHQgYWJvdXQuLi4gKmhlcmUqLiBCdXQgaXQmIzM5O3Mgbm90IHRoZXJlLiBTdHJhbmdlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIG1ha2Ugc3VyZSBpdCB3YXNuJiMzOTt0IGFjY2lkZW50YWxseSBjb21tZW50ZWQgb3V0IG9yIHJlbmFtZWQgaW4gYSByZWNlbnQgY29tbWl0LiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVybmFsIG1hY3JvIHRoYXQmIzM5O3Mgc3Vic3RpdHV0aW5nIGl0IGluLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpc24mIzM5O3QgbXkgZXJyb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTM1ND1zdGF0aWMgdTMyIGhjbGdlX2dldF9jbWRxX3R4X3RpbWVvdXQodTE2IG9wY29kZSwgdTMyIHR4X3RpbWVvdXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM2ODpzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjktXHRcdFx0XHQgICAgIGJvb2wgKmlzX2NvbXBsZXRlZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NDUtXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cdTAwM2VmbGFnKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ0NjpcdFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZW9wY29kZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ0Ny1cdFx0XHRcdFx0IFx1MDAyNmlzX2NvbXBsZXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzYxCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLCBkaXN0aWxsZWQgZG93biB0byBpdHMgY29yZSBjb25jZXB0czoKCioqQW5hbHl6aW5nIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUuIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgbmFtZTogYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGluIGEgY29tbXVuaWNhdGlvbiBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIsIGdpdmVuIHRoZSAmIzM5O2hjbGdlJiMzOTsgcHJlZml4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaXMgYmVpbmcgd2FpdGVkIG9uLCAqd2h5KiwgYW5kICpob3cqIHRoZSB3YWl0IGlzIGltcGxlbWVudGVkLiBUaGUgaW1wbGljaXQgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBnb2luZyBvbiDigJMgdGhlIHN5c3RlbSBzZW5kcyBhIHJlcXVlc3QsIGFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNydWNpYWwgcGF1c2UgdW50aWwgdGhlIGhhcmR3YXJlIHJldHVybnMgd2l0aCBhbiBhbnN3ZXIuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBmZXcga2V5IGFyZWFzIEkgZXhwZWN0IHRvIHNlZToKCiogICAqKkludGVycnVwdCBIYW5kbGluZy9Qb2xsaW5nOioqIEkgYW50aWNpcGF0ZSBlaXRoZXIgYW4gaW50ZXJydXB0LWRyaXZlbiBtZWNoYW5pc20sIHdoZXJlIGFuIGludGVycnVwdCBzaWduYWxzIHRoZSByZXNwb25zZSYjMzk7cyBhcnJpdmFsLCBvciBhIHBvbGxpbmcgc3RyYXRlZ3kgd2hlcmUgdGhlIGZ1bmN0aW9uIGNvbnRpbnVvdXNseSBjaGVja3MgYSBzdGF0dXMgcmVnaXN0ZXIgb3IgZmxhZy4gVGhlIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5IGltcGxpY2F0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LgoqICAgKipUaW1lb3V0IE1lY2hhbmlzbToqKiBBbnkgcm9idXN0IGltcGxlbWVudGF0aW9uICptdXN0KiBpbmNsdWRlIGEgdGltZW91dC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHNjZW5hcmlvcyB3aGVyZSB0aGUgcmVzcG9uc2UgaXMgZGVsYXllZCBvciBuZXZlciBhcnJpdmVzLiBBIHNpbXBsZSBsb29wIHdpdGggYSBjb3VudGVyLCBvciBhIG1vcmUgc29waGlzdGljYXRlZCB0aW1lciBpbXBsZW1lbnRhdGlvbi4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSB3YWl0IGZhaWxzLCBlaXRoZXIgZHVlIHRvIGEgdGltZW91dCBvciBwZXJoYXBzIGEgaGFyZHdhcmUgZXJyb3I/IFByb3BlciBlcnJvciBjb2RlcyBvciBmbGFncyBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoqICAgKipTeW5jaHJvbml6YXRpb24vQ29uY3VycmVuY3k6KiogSWYgdGhpcyBpcyBwYXJ0IG9mIGEgbXVsdGktdGhyZWFkZWQgc3lzdGVtLCBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIGNvbmN1cnJlbmN5IGFuZCB0aHJlYWQgc2FmZXR5LiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHdhaXRpbmcgcHJvY2Vzcz8KKiAgICoqUmVzcG9uc2UgVmFsaWRhdGlvbjoqKiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGhhcmR3YXJlLCBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgcmV0dXJuZWQgcmVzcG9uc2UuIElzIHRoZXJlIGEgY2hlY2tzdW0gY2hlY2s/IElzIHRoZSBkYXRhIGZvcm1hdCB2YWxpZGF0ZWQ/CiogICAqKkNvbnRleHQ6KiogSXMgdGhpcyBhIGxvdy1sZXZlbCBkcml2ZXIgZnVuY3Rpb24sIG9yIHBhcnQgb2YgYSBtb3JlIGFic3RyYWN0ZWQgY29tbXVuaWNhdGlvbnMgbGlicmFyeT8gSXRzIGRlc2lnbiB3aWxsIGdpdmUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IHRvIGJlIGFzc2Vzc2luZyB0aGUgZWxlZ2FuY2UsIGVmZmljaWVuY3ksIHJvYnVzdG5lc3MsIGFuZCB0aHJlYWQtc2FmZXR5IG9mIHRoZSB3YWl0IG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjg6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxuIDM2OTpcdFx0XHRcdFx0ICAgICBib29sICppc19jb21wbGV0ZWQpXG4gMzcwOlx0e1xuIDM3MTpcdFx0dTMyIGNtZHFfdHhfdGltZW91dCA9IGhjbGdlX2dldF9jbWRxX3R4X3RpbWVvdXQob3Bjb2RlLFxuIDM3MjpcdFx0XHRcdFx0XHRcdFx0aHctXHUwMDNlY21xLnR4X3RpbWVvdXQpO1xuIDM3MzpcdFx0dTMyIHRpbWVvdXQgPSAwO1xuIDM3NDpcdFxuIDM3NTpcdFx0ZG8ge1xuIDM3NjpcdFx0XHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XG4gMzc3Olx0XHRcdFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XG4gMzc4Olx0XHRcdFx0YnJlYWs7XG4gMzc5Olx0XHRcdH1cbiAzODA6XHRcdFx0dWRlbGF5KDEpO1xuIDM4MTpcdFx0XHR0aW1lb3V0JiM0MzsmIzQzOztcbiAzODI6XHRcdH0gd2hpbGUgKHRpbWVvdXQgXHUwMDNjIGNtZHFfdHhfdGltZW91dCk7XG4gMzgzOlx0fVxuIDM4NDpcdFxuIDM4NTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZSh1MTYgZGVzY19yZXQpXG4gMzg2Olx0e1xuIDM4NzpcdFx0c3RydWN0IGhjbGdlX2NvbW1fZXJyY29kZSBoY2xnZV9jb21tX2NtZF9lcnJjb2RlW10gPSB7XG4gMzg4Olx0XHRcdHsgSENMR0VfQ09NTV9DTURfRVhFQ19TVUNDRVNTLCAwIH0sXG4gMzg5Olx0XHRcdHsgSENMR0VfQ09NTV9DTURfTk9fQVVUSCwgLUVQRVJNIH0sXG4gMzkwOlx0XHRcdHsgSENMR0VfQ09NTV9DTURfTk9UX1NVUFBPUlRFRCwgLUVPUE5PVFNVUFAgfSxcbiAzOTE6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9RVUVVRV9GVUxMLCAtRVhGVUxMIH0sXG4gMzkyOlx0XHRcdHsgSENMR0VfQ09NTV9DTURfTkVYVF9FUlIsIC1FTk9TUiB9LFxuIDM5MzpcdFx0XHR7IEhDTEdFX0NPTU1fQ01EX1VORVhFX0VSUiwgLUVOT1RCTEsgfSxcbiAzOTQ6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9QQVJBX0VSUiwgLUVJTlZBTCB9LFxuIDM5NTpcdFx0XHR7IEhDTEdFX0NPTU1fQ01EX1JFU1VMVF9FUlIsIC1FUkFOR0UgfSxcbiAzOTY6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9USU1FT1VULCAtRVRJTUUgfSxcbiAzOTc6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9ISUxJTktfRVJSLCAtRU5PTElOSyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkzMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgQ29tbWFuZCBDb21wbGV0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgaXMgYSBjaGVjayBmb3IgY29tbWFuZCBjb21wbGV0aW9uLCBzaWduYWxlZCBieSB0aGUgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCBmdW5jdGlvbi4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBhc3N1bXB0aW9uczogdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIG9yIG1vZHVsZSwgZ2l2ZW4gdGhlICYjMzQ7aGNsZ2UmIzM0OyBwcmVmaXgg4oCTIHBlcmhhcHMgSGlnaC1DYXBhY2l0eSBMaW5rIEdpZ2FiaXQgRXRoZXJuZXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuICYjMzQ7Q1NRJiMzNDsgc3VnZ2VzdHMgQ29tbWFuZCBTZXF1ZW5jZSBvciBDb21tYW5kIFF1ZXVlLCBpbXBseWluZyBhIHN0cnVjdHVyZWQgZmxvdyBvZiBpbnN0cnVjdGlvbnMgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIFRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgbm90IGp1c3QgbG9va2luZyBmb3IgKmFueSogaW5kaWNhdGlvbiBvZiB3b3JrLCB3ZSYjMzk7cmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpdmUgJiMzNDtkb25lJiMzNDsgc3RhdHVzLCBtZWFuaW5nIHRoZSBjb21tYW5kIG9yIHNlcXVlbmNlIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBhIHN0YXR1cyByZWdpc3RlciwgYSBkZWRpY2F0ZWQgZmxhZywgb3IgcGVyaGFwcyBtb25pdG9yaW5nIGZvciBhIHNwZWNpZmljIGludGVycnVwdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IFVudGlsIHRoaXMgZnVuY3Rpb24gcmVwb3J0cyAmIzM0O2RvbmUmIzM0Oywgd2UgbmVlZCB0byBzdGFsbCwgcG9sbCwgb3IgbWFuYWdlIHRoZSB3YWl0LXN0YXRlIGZvciB0aGUgY29tbWFuZCBvciBjb21tYW5kIHNlcXVlbmNlIHRvIGZpbmlzaC4gVGhpcyBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcmVseWluZyBvbiB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgdGhlIGNvbW1hbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fY21kX2NzcV9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MzIzPXN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2NsZWFuKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MzQ4OnN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MzY4PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiBvcGNvZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzUtXHRkbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM3NjpcdFx0aWYgKGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKGh3KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzctXHRcdFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjc5CgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29tbXVuaWNhdGlvbiwgY29tbWFuZHMsIGFuZCBjb21wbGV0aW9uIG9mIGEgY29tbWFuZCBzZXF1ZW5jZSAoQ1NRKSB3aXRoaW4gdGhlIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb250cm9sIGxheWVyIG9yIHNpbWlsYXIsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbikuIFRoaXMgZnVuY3Rpb24sIG9yIHN0cnVjdHVyZSwgbGlrZWx5IHNpZ25hbHMgdGhlIGVuZCBvZiBhIGNvbW1hbmQgZmxvdy4gSSBiZXQgaXQgaGFuZGxlcyB0aGUgY29tcGxldGlvbiBwcm9jZXNzLiBXZSYjMzk7cmUgcHJvYmFibHkgaGFuZGxpbmcgY29tcGxldGlvbiB3aXRoaW4gdGhlIEhDTEdFIGxheWVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBhIHRyaWdnZXIgb3IgaW5mb3JtYXRpb24gdG8gdGhlIHVwcGVyIGxheWVycyB0byBzaWduYWwgdGhlIGNvbmNsdXNpb24gb2YgYW4gb3BlcmF0aW9uLiBJdCBpcyBwcm9iYWJseSBpbXBvcnRhbnQgdG8gbG9vayBpbnRvIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCByZWxhdGVzIHRvIGNvbXBsZXRpb24gaGFuZGxpbmcgd2hpY2ggaXMgcmVhbGx5IGltcG9ydGFudCBmb3IgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0ODpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxuIDM0OTpcdHtcbiAzNTA6XHRcdHUzMiBoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcbiAzNTE6XHRcdHJldHVybiBoZWFkID09ICh1MzIpaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcbiAzNTI6XHR9XG4gMzUzOlx0XG4gMzU0Olx0c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxuIDM1NTpcdHtcbiAzNTY6XHRcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNsZ2VfY21kcV90eF90aW1lb3V0X21hcCBjbWRxX3R4X3RpbWVvdXRfbWFwW10gPSB7XG4gMzU3Olx0XHRcdHtIQ0xHRV9PUENfQ0ZHX1JTVF9UUklHR0VSLCBIQ0xHRV9DT01NX0NNRFFfQ0ZHX1JTVF9USU1FT1VUfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxOTIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2AgTU1JTyBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGlzIGBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdgIHJlZ2lzdGVyLiBUaGUgZHJpdmVyIHJlYWRzIHRoaXMgcmVnaXN0ZXIgYW5kIGNoZWNrcyBpZiBpdHMgdmFsdWUgbWF0Y2hlcyBgbmV4dF90b191c2VgLiBTaW5jZSB0aGUgUENJIGZ1enplciBwcm92aWRlcyByYW5kb20gTU1JTyB2YWx1ZXMsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIGl0JiMzOTtsbCBldmVudHVhbGx5IGhpdCB0aGUgcmlnaHQgdmFsdWUsIG9yIG1heWJlIGV2ZW4gb24gdGhlIGZpcnN0IHRyeSBpZiB3ZSYjMzk7cmUgbHVja3ksIGJ1dCBhIHRpbWVvdXQgaXMgYWxzbyBwb3NzaWJsZS4gSWYgYSB0aW1lb3V0IG9jY3VycywgdGhlIGNvbW1hbmQgaXMgY29uc2lkZXJlZCBpbmNvbXBsZXRlIGFuZCByZXR1cm5zIGFuIGAtRUJBREVgIGVycm9yLiBJZiBpdCBtYXRjaGVzLCB0aGVuIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWxgIGlzIGNhbGxlZCwgYW5kIGl0IHByb2NlZWRzIHRvIHJlYWQgdGhlIGRlc2NyaXB0b3IgZnJvbSBtZW1vcnkuCgpOb3csIHRoZSBkZXNjcmlwdG9yIGlzIGluIERNQSBtZW1vcnksIG1lYW5pbmcgdGhlIGhhcmR3YXJlIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhlIHJlc3VsdCB0aGVyZS4gQnV0IHNpbmNlIHdlJiMzOTtyZSBmdXp6aW5nIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aGUgRE1BIG1lbW9yeSB3aWxsIGp1c3QgY29udGFpbiB3aGF0ZXZlciB0aGUgZHJpdmVyIHdyb3RlIGludG8gaXQuIEFuZCB0aGUgZHJpdmVyIHdyb3RlIHRoZSBjb21tYW5kIHRoZXJlLgoKTG9va2luZyBjbG9zZXIgYXQgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbGAsIGl0IHJlYWRzIGBkZXNjW251bSAtIDFdLnJldHZhbGAuIEluIHRoZSBub3JtYWwgb3BlcmF0aW5nIGNhc2UsIHRoZSBoYXJkd2FyZSBzaG91bGQgc2V0IHRoaXMsIGJ1dCBpbiB0aGlzIGNhc2UsIHRoZSBkcml2ZXIgcHJvYmFibHkgZGlkbiYjMzk7dCwgb3IgaXQganVzdCB6ZXJvZWQgaXQgb3V0LiBUaHVzLCBgcmV0dmFsYCB3aWxsIGJlIDAuIEFuZCAwIG1lYW5zIGBIQ0xHRV9DT01NX0NNRF9FWEVDX1NVQ0NFU1NgLCBtZWFuaW5nIHRoZSBjb21tYW5kIHdpbGwgKnN1Y2NlZWQqISBTbywgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBwYXNzIHRoaXMgaWYgaXQgZ3Vlc3NlcyB0aGUgYEhFQURfUkVHYCBvciBpZiBpdCYjMzk7cyB6ZXJvLgoKQnV0IHdhaXQsIGBuZXh0X3RvX3VzZWAgaW5jcmVtZW50cyB3aXRoIGVhY2ggY29tbWFuZCEgVGhlIGZ1enplciByZXR1cm5zIHJhbmRvbSB2YWx1ZXMuIFNvIGl0IGhhcyBhIDEvMl4zMiBjaGFuY2Ugb2YgbWF0Y2hpbmcgaXQgb24gKmVhY2gqIHJlYWQuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgbm93LiBJdCBtaWdodCBub3QgYmUgdG90YWxseSByYW5kb20uIEl0IG1pZ2h0IHJldHVybiB2YWx1ZXMgaXQgaGFzIHNlZW4gYmVmb3JlLCBvciBpdCBtaWdodCBqdXN0IHJldHVybiAwLiBJZiBpdCYjMzk7cyByZXR1cm5pbmcgMCwgaXQgd2lsbCBvbmx5IG1hdGNoIHdoZW4gYG5leHRfdG9fdXNlYCBpcyAwLgoKV2FpdCwgc3l6a2FsbGVyICpjYW4qIGludGVyY2VwdCBgcmVhZGxgIGFuZCBsZWFybiB3aGljaCB2YWx1ZXMgdG8gcmV0dXJuLCBzbyB0aGUgZnV6emVyIGNvdWxkIGJlIHNtYXJ0LiBIb3dldmVyLCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZXJlIGFyZSBtYW55IGNvbW1hbmRzLCBzbyBsZXQmIzM5O3Mgc2VlIGhvdyBtYW55IGNvbW1hbmRzIGFyZSBzZW50IGluIGBoY2xnZV9pbml0X2FlX2RldmAuCgpJdCBsb29rcyBsaWtlIHRoZSBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAsIGBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWdgLCBgaGNsZ2VfY2xlYXJfaHdfcmVzb3VyY2VgLCBgaGNsZ2VfZ2V0X2NhcGAsIGBoY2xnZV9xdWVyeV9kZXZfc3BlY3NgLCBgaGNsZ2VfY29uZmlndXJlYCwgYGhjbGdlX2luaXRfbXNpYCwgYGhjbGdlX21pc2NfaXJxX2luaXRgLCBgaGNsZ2VfYWxsb2NfdHFwc2AsIGBoY2xnZV9hbGxvY192cG9ydGAsIGBoY2xnZV9tYXBfdHFwYCwgYW5kIGBoY2xnZV9tYWNfaW5pdGAgcm91dGluZXMsIGFsbCBzZW5kIGNvbW1hbmRzLCBzbyBkb3plbnMgb2YgY29tbWFuZHMgYXJlIHNlbnQuCgpTbywgZm9yICplYWNoKiBjb21tYW5kLCB0aGUgTU1JTyByZWFkIG9mIGBIRUFEX1JFR2AgbmVlZHMgdG8gbWF0Y2ggYG5leHRfdG9fdXNlYC4gQW5kIGJlY2F1c2UgYG5leHRfdG9fdXNlYCBpbmNyZW1lbnRzICgxLCAyLCAzLCBldGMuKSwgdGhlIGZ1enplciB3b3VsZCBoYXZlIHRvIHJldHVybiAxLCB0aGVuIDIsIHRoZW4gMyBpbiBzZXF1ZW5jZS4gSSAqaGlnaGx5KiBkb3VidCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyB0aGF0IHNtYXJ0LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBob29rLgoKQWN0dWFsbHksIHRoZSBQQ0kgZnV6emVyIGluIHN5emthbGxlciBqdXN0IG1hcHMgdGhlIEJBUnMgdG8gYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIGtlcm5lbCByZWFkcyBmcm9tIHRoYXQgbWVtb3J5IHJlZ2lvbi4KCldhaXQsIHNvIHJlYWRpbmcgZnJvbSB0aGF0IG1lbW9yeSByZWdpb24gbWVhbnMgdGhhdCBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgd2FzIHdyaXR0ZW4gdGhlcmUsIG9yIDAgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4gRG9lcyB0aGUgZHJpdmVyIGV2ZW4gd3JpdGUgdG8gYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2A/IE5vcGUsIHRoZSBkcml2ZXIgd3JpdGVzIHRvIGBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUdgLiBTbyBgSEVBRF9SRUdgIHdpbGwgKmFsd2F5cyogcmVhZCBhcyAwLCBvciB3aGF0ZXZlciB0aGUgZnV6emVyIGluaXRpYWxpemVkIGl0IHRvLgoKSWYgYEhFQURfUkVHYCBpcyBhbHdheXMgMCwgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgIHdpbGwgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBuZXh0X3RvX3VzZWAgd3JhcHMgYXJvdW5kIHRvIDAuIFRoaXMgd2lsbCB0YWtlIGBkZXNjX251bWAgY29tbWFuZHMuIEJ1dCBsZXQmIzM5O3MgbG9vayBjbG9zZXIuIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBoYXMgdGhpcyBjaGVjazoKCmBgYGMKCWlmIChudW0gJmd0OyBoY2xnZV9jb21tX3Jpbmdfc3BhY2UoJmFtcDtody0mZ3Q7Y21xLmNzcSkpIHsKCQljc3EtJmd0O25leHRfdG9fY2xlYW4gPSBoY2xnZV9jb21tX3JlYWRfZGV2Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9Nz1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb25maWdfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMS1cdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9ERVBUSF9SRUcsIHJlZ192YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyMjpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIzLVx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTMyMz1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjMyOTpcdGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zMzAtXHRybWIoKTsgLyogTWFrZSBzdXJlIGhlYWQgaXMgcmVhZHkgYmVmb3JlIHRvdWNoIGFueSBkYXRhICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNDg9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0OS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM1MDpcdHUzMiBoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzUxLVx0cmV0dXJuIGhlYWQgPT0gKHUzMilody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NDczPWludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00OTUtXHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDk2Olx0XHRcdGhjbGdlX2NvbW1fcmVhZF9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ5Ny1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHctXHUwMDNlY21xLmNzcS5sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTUyND1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjgtXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0RFUFRIX1JFRywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyOTpcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MzAtXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTM3LSNkZWZpbmUgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHXHRcdDB4MjcwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6Mzg6I2RlZmluZSBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdcdFx0MHgyNzAxNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC0zOS0jZGVmaW5lIEhDTEdFX0NPTU1fTklDX0NSUV9CQVNFQUREUl9MX1JFR1x0MHgyNzAxOFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmM9OT1zdGF0aWMgY29uc3QgdTMyIGNtZHFfcmVnX2FkZHJfbGlzdFtdID0ge0hDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfcmVncy5jLTEyLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYzoxMzpcdFx0XHRcdFx0IEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmMtMTQtXHRcdFx0XHRcdCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jPTg9c3RhdGljIGNvbnN0IHUzMiBjbWRxX3JlZ19hZGRyX2xpc3RbXSA9IHtIQ0xHRV9DT01NX05JQ19DU1FfQkFTRUFERFJfTF9SRUcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jLTExLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jOjEyOlx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jLTEzLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpczogSE5TMyBEcml2ZXIgU1JJT1YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGUgZnV6emVyIHRocm93cyByYW5kb20gTU1JTyBhdCBgaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKWAsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB3ZSYjMzk7bGwgZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQgdG8gdHJpZ2dlciB0aGUgaW50ZW5kZWQgbG9naWMuIFRoZSBmdXp6ZXIgaGFzIGEgbWluaXNjdWxlIGNoYW5jZSBvZiBnZXR0aW5nIHRoZSB2YWx1ZSBgMWAgb3V0IG9mIHRoZSBnYXRlIHdpdGggYG5leHRfdG9fdXNlYCBzZXQgdG8gYDFgLiBCdXQgdGhlbiwgd2l0aGluIHRoZSBsb29wLCB0aGUgY29kZSBjYWxscyB0aGUgc2FtZSByZWdpc3RlciAqYWdhaW4qIHRoaXJ0eSB0aG91c2FuZCB0aW1lcyB2aWEgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKGh3KWAuIFRoaXMgZ2l2ZXMgdXMgYSBzbGlnaHRseSBiZXR0ZXIgY2hhbmNlLCAzMDAwMC80IGJpbGxpb24gb3IgLjAwMDc1JSwgYnV0IHN0aWxsIGVmZmVjdGl2ZWx5IHplcm8sIGVzcGVjaWFsbHkgYXMgdGhlIG5leHQgb3BlcmF0aW9uIHJlcXVpcmVzIGEgdmFsdWUgb2YgYDJgLiAgR2l2ZW4gdGhlIHNoZWVyIG51bWJlciBvZiBzdWJzZXF1ZW50IGNvbW1hbmRzLCBwYXNzaW5nIGFsbCB0aGUgY2hlY2tzIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBwcm9iZSwgYW5kIGNvbnNlcXVlbnRseSwgdGhlIGRldmljZSByZWdpc3RyYXRpb24sIHdpbGwgZmFpbC4KClRoZSBjcml0aWNhbCBpc3N1ZSBpcyB0aGUgYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIGNhbGxiYWNrLCBhbmQgd2hpbGUgaXQgKmNvdWxkKiBiZSBpbnZva2VkIHZpYSBzeXNmcywgdGhpcyBwYXRoIGlzIGJsb2NrZWQgaWYgdGhlIHByb2JlIGZhaWxzLiBUaGUgZGV2aWNlIGlzbiYjMzk7dCBwcm9wZXJseSBib3VuZCB0byB0aGUgZHJpdmVyIGlmIGBwcm9iZWAgZmFpbHMsIHNvIHdyaXRpbmcgdG8gYC9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9zcmlvdl9udW12ZnNgIHdpbGwgYmUgYSBkZWFkIGVuZC4gRnVydGhlcm1vcmUsIGV2ZW4gaWYgd2Ugd2VyZSBzb21laG93IGFibGUgdG8gdHJpZ2dlciBgc3Jpb3ZfY29uZmlndXJlYCwgdGhlIGNvZGUgd291bGQgY3Jhc2ggYmVjYXVzZSBgcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpYCBpcyBjYWxsZWQgZHVyaW5nIHByb2JlIGZhaWx1cmUgYW5kIGBzcmlvdl9jb25maWd1cmVgIHRoZW4gZGVyZWZlcmVuY2VzIGEgTlVMTCBwb2ludGVyLiBIb3dldmVyLCB0aGUgZmlyc3Qgc2NlbmFyaW8gaXMgdGhlIHJlYWxpdHk7IGl0IGlzbiYjMzk7dCByZWFjaGVkIGJlY2F1c2UgdGhlIHByb2JlIGZhaWxzLCBzbyB0aGUgUENJIGNvcmUgd291bGQgbm90IGxldCB5b3Ugd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGUuCgpFc3NlbnRpYWxseSwgKmJlY2F1c2UqIHRoZSBwcm9iZSBmYWlscywgdGhlIGNyaXRpY2FsIGBzcmlvdl9jb25maWd1cmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB1bnJlYWNoYWJsZS4KCk5vdywgdG8gY29uZmlybSB0aGlzIGNvbmNsdXNpb24sIEkmIzM5O2QgY2hlY2sgZm9yIHN5emthbGxlciBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBsYWNrIGFjY2VzcyB0byB0aGUgdG9vbHMuIEkmIzM5O20gb3BlcmF0aW5nIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHByYWN0aWNlcywgd2hpY2ggZGljdGF0ZSB0aGF0IHBoeXNpY2FsIG5ldHdvcmsgZHJpdmVycyB3aXRob3V0IGVtdWxhdG9ycyBhcmVuJiMzOTt0IHByYWN0aWNhbGx5IGZ1enphYmxlIGZvciBmdW5jdGlvbmFsIGxvZ2ljLiBCYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzLCBJIGFtIGNvbmZpZGVudCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGEgdmlydHVhbCBkZXZpY2UuICYjMzQ7SE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5JiMzNDsgc291bmRzIGxpa2UgYSBQQ0llIE5JQywgbm90IHZpcnRpbyBvciB2RFBBLiBObywgdGhpcyBhcHBlYXJzIHRvIGJlIGEgcGh5c2ljYWwgTklDLiBJIGFtIGNoZWNraW5nIGZvciBhbnkgbW9ja3Mgb3IgYWx0ZXJuYXRpdmUgdmlydHVhbCBkZXZpY2UgYmFja2VuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiAmIzM0O2R1bW15JiMzNDsqKgoKUmlnaHQsIHNvIHRoZSB3b3JkICYjMzQ7ZHVtbXkmIzM0OyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEltbWVkaWF0ZWx5LCBJJiMzOTttIGFscmVhZHkgc2lmdGluZyB0aHJvdWdoIGl0cyBwb3RlbnRpYWwgbWVhbmluZ3MgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgdmFyaWFibGU/IEEgdGVzdCBjYXNlPyBQZXJoYXBzIGEgd2F5IHRvIHNpbXBsaWZ5IGFuIGFyZ3VtZW50IG9yIG1vZGVsIGJ5IGludGVudGlvbmFsbHkgaWdub3JpbmcgY29tcGxleGl0aWVzPyBPciBpcyBpdCBiZWluZyB1c2VkIGRpc3BhcmFnaW5nbHksIGFzIGluLCBhICYjMzQ7ZHVtbXkgdmFyaWFibGU/JiMzNDsgVGhlIGFtYmlndWl0eSBoZXJlIHJlcXVpcmVzIGEgYml0IG1vcmUgaW5mb3JtYXRpb24uIFdoYXTigJlzIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBpbiBxdWVzdGlvbj8gSG93IGNvbXBsZXggaXMgdGhlIHN5c3RlbSBiZWluZyBkZXNjcmliZWQ/IFdoYXQgaXMgdGhpcyAmIzM0O2R1bW15JiMzNDsgc3VwcG9zZWQgdG8gKmRvKj8gV2l0aG91dCBjb250ZXh0LCAmIzM0O2R1bW15JiMzNDsgY291bGQgcmVwcmVzZW50IGEgYnJvYWQgc3BlY3RydW0gb2YgdGhpbmdzLiBJdCYjMzk7cyBhIGxvYWRlZCB0ZXJtLCBpbmhlcmVudGx5IGNhcnJ5aW5nIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gb3Igc2ltcGxpZmljYXRpb24sIGJ1dCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoYXQgYWJzdHJhY3Rpb24gaXMgd2hhdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIG1vcmUgZGV0YWlsIHRvIGV2YWx1YXRlIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGFwcHJvcHJpYXRlbmVzcy4gVGhpcyB0aG91Z2h0IG5lZWRzIHVucGFja2luZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgdGhlICYjMzQ7ZW11bCYjMzQ7IEFuZ2xlKioKCkhtbSwgJiMzNDtlbXVsJiMzNDsuLi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGluY29tcGxldGUgd2l0aG91dCBjb25zaWRlcmluZyB0aGUgJiMzNDtlbXVsJiMzNDsgYXNwZWN0LiBOb3csICYjMzQ7ZW11bCYjMzQ7IGNvdWxkIHJlZmVyIHRvIGEgZmV3IGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJZiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbXVsYXRpb24sIHRoZW4gcGVyaGFwcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNvZnR3YXJlIHNvbHV0aW9uIHRvIHRoZSBpc3N1ZS4gT3IsIHBlcmhhcHMgaXQgcG9pbnRzIHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGFuIGVtdWxhdG9yIGluIGEgc3BlY2lmaWMgZnJhbWV3b3JrLiBXZSBuZWVkIHRvIGRlZmluZSBleGFjdGx5IHdoYXQgY29udGV4dCBpcyByZWxldmFudC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoYXQgYW5kIHdoZXRoZXIgaXQmIzM5O3MgbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBicm9hZGVyIGlzc3VlcyB0aGF0IGFyZSBpbiBwbGF5LiBJIHNob3VsZCBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlciB3aGF0IGtpbmQgb2YgJiMzNDtlbXVsJiMzNDsgaXMgdGhlIHN1YmplY3Qgb2YgY29udGVtcGxhdGlvbiwgYW5kIGhvdyBpdCBpbmZvcm1zIGFueSBwcmV2aW91c2x5IGNvbnNpZGVyZWQgc29sdXRpb25zLiBVbHRpbWF0ZWx5LCB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IC0gaG93IGRvZXMgaXQgZml0PyBEb2VzIGl0IHJlcHJlc2VudCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgYSBzdWJzZXQgb2Ygb3RoZXIgY29uY2VybnMsIG9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudD8gSXTigJlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLCByZWdhcmRsZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTYxNAoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSB2ZXJ5IHNwZWNpZmljLCBoYXJkd2FyZS1sZXZlbCBhc3BlY3Q6IHRoZSBITlMzIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFZGIHJlcHJlc2VudG9ycywgbmV0ZGV2cyBjcmVhdGVkIG9uIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpIHRvIHJlcHJlc2VudCBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSwgcGFydGljdWxhcmx5IGZvciBzd2l0Y2hkZXYgZnVuY3Rpb25hbGl0eSwgbGlrZSBUQyBmbG93ZXIgb2ZmbG9hZC4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyYWwgZmVhdHVyZSwgY29tcGFyYWJsZSB0byB3aGF0IHlvdSBzZWUgd2l0aCBNZWxsYW5veCBDb25uZWN0WCBvciBJbnRlbCBJQ0UgTklDcy4KClRoZSBjcnVjaWFsIGlzc3VlIGlzIGl0cyBpbmhlcmVudCBoYXJkd2FyZSBkZXBlbmRlbmNlLiBUaGlzIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIGhlYXZpbHkgb24gdGhlIFBGIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb21tdW5pY2F0aW5nIGZsYXdsZXNzbHkgd2l0aCBpdHMgZmlybXdhcmUuIFRoaXMgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGJlY2F1c2UgaXQmIzM5O3Mgc28gbG93LWxldmVsIGFuZCBoYXJkd2FyZS1zcGVjaWZpYywgcmVuZGVycyB0aGUgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIGVudmlyb25tZW50LCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBUaGVyZSBpcyBubyB3YXkgSSBjb3VsZCBmdXp6IHRoaXMgY29kZSBpbiBRRU1VLgoKVGhlcmVmb3JlLCBhcHBseWluZyBteSBleHBlcnQga25vd2xlZGdlIGFuZCBtYXRjaGluZyB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgbGFzdCBidWxsZXQgcG9pbnQgb2YgdGhlICYjMzQ7bm90IHdvcnRoIGZ1enppbmcmIzM0OyBndWlkZWxpbmVzLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBiZWNhdXNlIGl0IHJlbGllcyBvbiB0aGUgY29tcGxldGUgc3RhdGUgb2YgYSBwaHlzaWNhbCBkZXZpY2Ugd2l0aCBmaXJtd2FyZSBpbnRlcmFjdGlvbi4KCkkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlIHJlYXNvbnMgb3V0bGluZWQsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBWRiByZXByZXNlbnRvciBzdXBwb3J0IHRvIHRoZSBIaXNpbGljb24gSE5TMyBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcyB0aGF0IHJlcXVpcmVzIGNvbXBsZXggZmlybXdhcmUgaW50ZXJhY3Rpb25zIChlLmcuLCB3YWl0aW5nIGZvciBjb21tYW5kIHF1ZXVlIGNvbXBsZXRpb25zIHZpYSBNTUlPKSBkdXJpbmcgZGV2aWNlIHByb2JlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFZGIHJlcHJlc2VudG9yIHN1cHBvcnQgdG8gdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmRzIHRoYXQgcmVxdWlyZXMgY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMgKGUuZy4sIHdhaXRpbmcgZm9yIGNvbW1hbmQgcXVldWUgY29tcGxldGlvbnMgdmlhIE1NSU8pIGR1cmluZyBkZXZpY2UgcHJvYmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTozOC4yMDc4NDE5MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1NDg5ODg2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6MzguMjA3ODUxMjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjczMjk1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NDZkODdjYjJkNDBlN2VkNjEwNTBhMjhmMWMyZjQ2MTkwODlhZjE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMjE6MTU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXFxuQEAgLTI0LDYgKzI0LDYgQEAgaGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5cXG4gb2JqLSQoQ09ORklHX0hOUzNfSENMR0UpICs9IGhjbGdlLm8gaGNsZ2UtY29tbW9uLm9cXG4gaGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXFxcXG4gXFx0XFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxcXFxuLVxcdFxcdGhuczNwZi9oY2xnZV9mZC5vXFxuK1xcdFxcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xcbiBcXG4gaGNsZ2UtJChDT05GSUdfSE5TM19EQ0IpICs9IGhuczNwZi9oY2xnZV9kY2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi5kMmMxYzczNjE3YTQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbkBAIC03OTYsNiArNzk2LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmdldF9saW5rX2RpYWdub3Npc19pbmZvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnN0YXR1c19jb2RlKTtcXG4gXFx0dm9pZCAoKmNsZWFuX3ZmX2NvbmZpZykoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XFxuK1xcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcXG4rXFx0dm9pZCAoKmRlc3Ryb3lfdmZfcmVwcykoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcXG4gXFx0aW50ICgqZ2V0X2RzY3BfcHJpbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1OCBkc2NwLFxcbiBcXHRcXHRcXHQgICAgIHU4ICp0Y19tYXBfbW9kZSwgdTggKnByaW9yaXR5KTtcXG4gXFx0dm9pZCAoKmdldF93b2wpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xcbmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXFxuQEAgLTMyMTEsNiArMzIxMSw3IEBAIHN0YXRpYyB2b2lkIGhuczNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAgKiovXFxuIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4ge1xcbitcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcXG5AQCAtMzIyMCwxMyArMzIyMSwyNCBAQCBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuIFxcbiBcXHRpZiAobnVtX3Zmcykge1xcbiBcXHRcXHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG51bV92ZnMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjcmVhdGVfdmZfcmVwcykge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlY3JlYXRlX3ZmX3JlcHMoYWVfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG51bV92ZnMpO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXQpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiBudW1fdmZzO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcXG4gXFx0XFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcXG4gXFxuK1xcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV92Zl9yZXBzKVxcbitcXHRcXHRcXHRhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XFxuIFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbiBcXHRcXHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcXG5pbmRleCAyZmNjYjBhODcwYjVmMC4uOGNkOWExYThlZmYxYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3Z4bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoY2xnZV9mZC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGNsZ2VfbWFpbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGNsZ2VfdmZfcmVwLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9pbmZvIG1ldGFfZGF0YV9rZXlfaW5mb1tdID0ge1xcbiBcXHR7IFBBQ0tFVF9UWVBFX0lELCA2IH0sXFxuQEAgLTIyODUsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKVxcbiB7XFxuQEAgLTIyOTIsMTAgKzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxcbiBcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb21tb24uZXh0YWNrO1xcbiBcXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0ubmljO1xcbiBcXHRzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbiA9IFxcdTAwMjZmbG93LVxcdTAwM2VhY3Rpb247XFxuK1xcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVxcdTAwM2VuaWMua2luZm8ubnVtX3RxcHM7XFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbiBcXHRpbnQgdGM7XFxuIFxcbiBcXHRpZiAoIWZsb3dfYWN0aW9uX2hhc19lbnRyaWVzKFxcdTAwMjZmbG93LVxcdTAwM2VhY3Rpb24pKSB7XFxuK1xcdFxcdGlmICh2cG9ydCAhPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0pIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlZGIGRvZXMgbm90IHN1cHBvcnQgc2VsZWN0IFRDIGFjdGlvblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHRjID0gdGNfY2xhc3NpZF90b19od3RjKGhhbmRsZS1cXHUwMDNlbmV0ZGV2LCBjbHNfZmxvd2VyLVxcdTAwM2VjbGFzc2lkKTtcXG4gXFx0XFx0aWYgKHRjIFxcdTAwM2MgMCB8fCB0YyBcXHUwMDNlIGhkZXYtXFx1MDAzZXRjX21heCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG5AQCAtMjMxMSwxMSArMjMyMCwxMCBAQCBzdGF0aWMgaW50IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdGFjdCA9IFxcdTAwMjZhY3Rpb24tXFx1MDAzZWVudHJpZXNbMF07XFxuIFxcdHN3aXRjaCAoYWN0LVxcdTAwM2VpZCkge1xcbiBcXHRjYXNlIEZMT1dfQUNUSU9OX1JYX1FVRVVFX01BUFBJTkc6XFxuLVxcdFxcdGlmIChhY3QtXFx1MDAzZXJ4X3F1ZXVlIFxcdTAwM2U9IGhhbmRsZS1cXHUwMDNla2luZm8ubnVtX3RxcHMpIHtcXG4rXFx0XFx0aWYgKGFjdC1cXHUwMDNlcnhfcXVldWUgXFx1MDAzZT0gbnVtX3RxcHMpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicXVldWUgaWQgKCV1KSBzaG91bGQgYmUgbGVzcyB0aGFuICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjdC1cXHUwMDNlcnhfcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBoYW5kbGUtXFx1MDAzZWtpbmZvLm51bV90cXBzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjdC1cXHUwMDNlcnhfcXVldWUsIG51bV90cXBzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTI0MjMsMTIgKzI0MzEsMTEgQEAgc3RhdGljIGludCBoY2xnZV9jaGVja19jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbi1cXHRcXHRcXHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuK3N0YXRpYyBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfY29tbW9uKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLmV4dGFjaztcXG4tXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xcbi1cXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdnBvcnQtXFx1MDAzZWJhY2s7XFxuIFxcdHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMjQ1MSwxNCArMjQ1OCwxNCBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihoZGV2LCBjbHNfZmxvd2VyLCBydWxlKTtcXG4rXFx0cmV0ID0gaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oaGRldiwgdnBvcnQsIGNsc19mbG93ZXIsIHJ1bGUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdGtmcmVlKHJ1bGUpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydWxlLVxcdTAwM2Vsb2NhdGlvbiA9IGNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5wcmlvIC0gMTtcXG4tXFx0cnVsZS1cXHUwMDNldmZfaWQgPSAwO1xcbitcXHRydWxlLVxcdTAwM2V2Zl9pZCA9IHZwb3J0LVxcdTAwM2V2cG9ydF9pZDtcXG4gXFx0cnVsZS1cXHUwMDNlY2xzX2Zsb3dlci5jb29raWUgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWU7XFxuIFxcdHJ1bGUtXFx1MDAzZXJ1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7XFxuIFxcbkBAIC0yNDY5LDYgKzI0NzYsMjEgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG4rXFx0XFx0XFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcXG4rXFxuK1xcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odnBvcnQtXFx1MDAzZWJhY2ssIHZwb3J0LCBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVxcdTAwM2VoZGV2LCB2Zl9yZXAtXFx1MDAzZXZwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpoY2xnZV9maW5kX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXFxuIHtcXG5AQCAtMjUyMiw2ICsyNTQ0LDE0IEBAIGludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cXHUwMDNlaGRldjtcXG4rXFxuK1xcdHJldHVybiBoY2xnZV9kZWxfY2xzX2Zsb3dlcihcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0ubmljLCBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaGNsZ2Vfc3luY19mZF9saXN0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsIHN0cnVjdCBobGlzdF9oZWFkICpobGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxcbmluZGV4IDJmNjZjYzljM2M2NWM0Li4yMDBkODFjZTEyYzhkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXFxuQEAgLTYsNiArNiw4IEBAXFxuIFxcbiBzdHJ1Y3QgaG5hZTNfaGFuZGxlO1xcbiBzdHJ1Y3QgaGNsZ2VfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfdmZfcmVwO1xcbitzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcXG4gXFxuIGludCBoY2xnZV9pbml0X2ZkX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcXG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbkBAIC0yNiw2ICsyOCwxMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbiBib29sIGhjbGdlX2lzX2Nsc19mbG93ZXJfYWN0aXZlKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSk7XFxuK1xcbitpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbitpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbiBpbnQgaGNsZ2VfY2xlYXJfYXJmc19ydWxlcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcXG4gdm9pZCBoY2xnZV9zeW5jX2ZkX3RhYmxlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xcbmluZGV4IGZjODU4N2M4MDgxMzcxLi41Zjg4MTg3ZjFjYTgzZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xcbkBAIC0xMDUzNCw2ICsxMDUzNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcXG4gXFx0LmdldF90c19pbmZvID0gaGNsZ2VfcHRwX2dldF90c19pbmZvLFxcbiBcXHQuZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8gPSBoY2xnZV9nZXRfbGlua19kaWFnbm9zaXNfaW5mbyxcXG4gXFx0LmNsZWFuX3ZmX2NvbmZpZyA9IGhjbGdlX2NsZWFuX3Zwb3J0X2NvbmZpZyxcXG4rXFx0LmNyZWF0ZV92Zl9yZXBzID0gaGNsZ2VfY3JlYXRlX3ZmX3JlcHMsXFxuK1xcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXFxuIFxcdC5nZXRfZHNjcF9wcmlvID0gaGNsZ2VfZ2V0X2RzY3BfcHJpbyxcXG4gXFx0LmdldF93b2wgPSBoY2xnZV9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuaW5kZXggNzQxOTQ4MTQyMmMzMTAuLjRmMTFiOWMzOGU2OWUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuQEAgLTE3LDYgKzE3LDkgQEBcXG4gI2luY2x1ZGUgXFxcImhuYWUzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoY2xnZV9jb21tX3Jzcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGNsZ2VfY29tbV90cXBfc3RhdHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImhjbGdlX3ZmX3JlcC5oXFxcIlxcbitcXG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcXG4gXFxuICNkZWZpbmUgSENMR0VfTU9EX1ZFUlNJT04gXFxcIjEuMFxcXCJcXG4gI2RlZmluZSBIQ0xHRV9EUklWRVJfTkFNRSBcXFwiaGNsZ2VcXFwiXFxuQEAgLTkzNSw2ICs5MzgsOSBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcXG4gXFx0Ym9vbCBjdXJfcHJvbWlzYztcXG4gXFx0aW50IG51bV9hbGxvY192ZnM7XFx0LyogQWN0dWFsIG51bWJlciBvZiBWRnMgYWxsb2NhdGVkICovXFxuIFxcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwXFx0Kip2Zl9yZXBzO1xcbitcXHR1MTZcXHRcXHRcXHRudW1fdmZfcmVwcztcXG4rXFxuIFxcdHN0cnVjdCBoY2xnZV9jb21tX3RxcCAqaHRxcDtcXG4gXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1MTMzNjA0MGQ2ZmIzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xcbkBAIC0wLDAgKzEsMTU5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbisvLyBDb3B5cmlnaHQgKGMpIDIwMjYgSGlzaWxpY29uIExpbWl0ZWQuXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoY2xnZV9tYWluLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoY2xnZV92Zl9yZXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImhjbGdlX2ZkLmhcXFwiXFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgaGNsZ2VfdmZfcmVwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9nZXRfcGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdmZfcmVwLVxcdTAwM2VoZGV2O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCBcXFwicGYldXZmJXVcXFwiLCBQQ0lfRlVOQyhoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXZmbiksXFxuK1xcdFxcdCAgICAgIHZmX3JlcC1cXHUwMDNldnBvcnQtXFx1MDAzZXZwb3J0X2lkIC0gMSk7XFxuK1xcdGlmIChyYyBcXHUwMDNlPSBsZW4pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2O1xcbitcXG4rXFx0aWYgKCF0Y19jbHNfY2FuX29mZmxvYWRfYW5kX2NoYWluMCh2Zl9yZXAtXFx1MDAzZW5ldGRldiwgdHlwZV9kYXRhKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfU0VUVVBfQ0xTRkxPV0VSOlxcbitcXHRcXHRzd2l0Y2ggKGNsc19mbG93ZXItXFx1MDAzZWNvbW1hbmQpIHtcXG4rXFx0XFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxcbitcXHRcXHRcXHRyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcXG4rXFx0XFx0Y2FzZSBGTE9XX0NMU19ERVNUUk9ZOlxcbitcXHRcXHRcXHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgTElTVF9IRUFEKGhjbGdlX3ZmX3JlcF9ibG9ja19jYl9saXN0KTtcXG4rXFxuK3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG4rXFx0XFx0cmV0dXJuIGZsb3dfYmxvY2tfY2Jfc2V0dXBfc2ltcGxlKHR5cGVfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2aGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHMgPSB7XFxuK1xcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaGNsZ2VfdmZfcmVwX3htaXQsXFxuK1xcdC5uZG9fZ2V0X3BoeXNfcG9ydF9uYW1lXFx0PSBoY2xnZV92Zl9yZXBfZ2V0X3BoeXNfcG9ydF9uYW1lLFxcbitcXHQubmRvX3NldHVwX3RjXFx0XFx0XFx0PSBoY2xnZV92Zl9yZXBfc2V0dXBfdGMsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBoY2xnZV92Zl9yZXBfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XFxuK1xcdG5kZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG4rXFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG4rfVxcbitcXG4raW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0Y2hhciBuYW1lW0lGTkFNU0laXTtcXG4rXFx0aW50IHJldCwgaTtcXG4rXFxuK1xcdGlmICghbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRoZGV2LVxcdTAwM2V2Zl9yZXBzID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCAqKSxcXG4rXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaGRldi1cXHUwMDNldmZfcmVwcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdHNucHJpbnRmKG5hbWUsIElGTkFNU0laLCBcXFwiJXNfcmVwJWRcXFwiLFxcbitcXHRcXHRcXHQgaGRldi1cXHUwMDNldnBvcnRbMF0ubmljLm5ldGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBoY2xnZV92Zl9yZXApLCBuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgTkVUX05BTUVfVU5LTk9XTiwgZXRoZXJfc2V0dXApO1xcbitcXHRcXHRpZiAoIW5kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGhjbGdlX3ZmX3JlcF9uZXRfc2V0dXAobmRldik7XFxuK1xcbitcXHRcXHR2Zl9yZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2VoZGV2ID0gaGRldjtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2V2cG9ydCA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFtpICsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2VuZXRkZXYgPSBuZGV2O1xcbitcXG4rXFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aGRldi1cXHUwMDNldmZfcmVwc1tpXSA9IHZmX3JlcDtcXG4rXFx0fVxcbitcXG4rXFx0aGRldi1cXHUwMDNlbnVtX3ZmX3JlcHMgPSBudW1fdmZzO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0d2hpbGUgKGktLSlcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cXHUwMDNldmZfcmVwc1tpXS1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0a2ZyZWUoaGRldi1cXHUwMDNldmZfcmVwcyk7XFxuK1xcdGhkZXYtXFx1MDAzZXZmX3JlcHMgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGhjbGdlX2Rlc3Ryb3lfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWhkZXYtXFx1MDAzZXZmX3JlcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBoZGV2LVxcdTAwM2VudW1fdmZfcmVwczsgaSsrKSB7XFxuK1xcdFxcdGlmIChoZGV2LVxcdTAwM2V2Zl9yZXBzW2ldKVxcbitcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVxcdTAwM2V2Zl9yZXBzW2ldLVxcdTAwM2VuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShoZGV2LVxcdTAwM2V2Zl9yZXBzKTtcXG4rXFx0aGRldi1cXHUwMDNldmZfcmVwcyA9IE5VTEw7XFxuK1xcdGhkZXYtXFx1MDAzZW51bV92Zl9yZXBzID0gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmhcXG5AQCAtMCwwICsxLDIxIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSGlzaWxpY29uIExpbWl0ZWQuICovXFxuK1xcbisjaWZuZGVmIF9fSENMR0VfVkZfUkVQX0hcXG4rI2RlZmluZSBfX0hDTEdFX1ZGX1JFUF9IXFxuK1xcbitzdHJ1Y3QgaG5hZTNfYWVfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfdnBvcnQ7XFxuK3N0cnVjdCBuZXRfZGV2aWNlO1xcbitcXG4rc3RydWN0IGhjbGdlX3ZmX3JlcCB7XFxuK1xcdHN0cnVjdCBoY2xnZV9kZXZcXHQqaGRldjtcXG4rXFx0c3RydWN0IGhjbGdlX3Zwb3J0XFx0KnZwb3J0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdCpuZXRkZXY7XFxuK307XFxuK1xcbitpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XFxuK3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6MzguODM2MzY5MDYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA5MjA0NTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZkODdjYjJkNDBlN2VkNjEwNTBhMjhmMWMyZjQ2MTkwODlhZjE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMToxNTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGVcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxuQEAgLTI0LDYgKzI0LDYgQEAgaGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5cbiBvYmotJChDT05GSUdfSE5TM19IQ0xHRSkgKz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xuIGhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcXFxuIFx0XHRobnMzcGYvaGNsZ2VfbWJ4Lm8gaG5zM3BmL2hjbGdlX2Vyci5vICBobnMzcGYvaGNsZ2VfZGVidWdmcy5vIGhuczNwZi9oY2xnZV9wdHAubyBobnMzcGYvaGNsZ2VfZGV2bGluay5vIFxcXG4tXHRcdGhuczNwZi9oY2xnZV9mZC5vXG4rXHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuIFxuIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSArPSBobnMzcGYvaGNsZ2VfZGNiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuaW5kZXggYTg3OThlZWNkOWZiZDAuLmQyYzFjNzM2MTdhNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuQEAgLTc5Niw2ICs3OTYsOCBAQCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHtcbiBcdGludCAoKmdldF9saW5rX2RpYWdub3Npc19pbmZvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICAgdTMyICpzdGF0dXNfY29kZSk7XG4gXHR2b2lkICgqY2xlYW5fdmZfY29uZmlnKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbitcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbitcdHZvaWQgKCpkZXN0cm95X3ZmX3JlcHMpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XG4gXHRpbnQgKCpnZXRfZHNjcF9wcmlvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHU4IGRzY3AsXG4gXHRcdFx0ICAgICB1OCAqdGNfbWFwX21vZGUsIHU4ICpwcmlvcml0eSk7XG4gXHR2b2lkICgqZ2V0X3dvbCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcbmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xuQEAgLTMyMTEsNiArMzIxMSw3IEBAIHN0YXRpYyB2b2lkIGhuczNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuICAqKi9cbiBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4ge1xuK1x0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcbkBAIC0zMjIwLDEzICszMjIxLDI0IEBAIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbiBcbiBcdGlmIChudW1fdmZzKSB7XG4gXHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cIiwgcmV0KTtcbi1cdFx0ZWxzZVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKSB7XG4rXHRcdFx0XHRyZXQgPSBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKGFlX2RldixcbitcdFx0XHRcdFx0XHRcdFx0ICBudW1fdmZzKTtcbitcdFx0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdFwiZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdFx0cmV0KTtcbitcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIG51bV92ZnM7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcbiBcdFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcbiBcbitcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKVxuK1x0XHRcdGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XG4gXHRcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFx0XHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcbmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3Z4bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhjbGdlX2ZkLmhcIlxuICNpbmNsdWRlIFwiaGNsZ2VfbWFpbi5oXCJcbisjaW5jbHVkZSBcImhjbGdlX3ZmX3JlcC5oXCJcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9pbmZvIG1ldGFfZGF0YV9rZXlfaW5mb1tdID0ge1xuIFx0eyBQQUNLRVRfVFlQRV9JRCwgNiB9LFxuQEAgLTIyODUsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKVxuIHtcbkBAIC0yMjkyLDEwICsyMjk0LDE3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXHUwMDNlY29tbW9uLmV4dGFjaztcbiBcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFx1MDAyNmhkZXYtXHUwMDNldnBvcnRbMF0ubmljO1xuIFx0c3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24gPSBcdTAwMjZmbG93LVx1MDAzZWFjdGlvbjtcbitcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVx1MDAzZW5pYy5raW5mby5udW1fdHFwcztcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuIFx0aW50IHRjO1xuIFxuIFx0aWYgKCFmbG93X2FjdGlvbl9oYXNfZW50cmllcyhcdTAwMjZmbG93LVx1MDAzZWFjdGlvbikpIHtcbitcdFx0aWYgKHZwb3J0ICE9IFx1MDAyNmhkZXYtXHUwMDNldnBvcnRbMF0pIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlZGIGRvZXMgbm90IHN1cHBvcnQgc2VsZWN0IFRDIGFjdGlvblwiKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcbiBcdFx0dGMgPSB0Y19jbGFzc2lkX3RvX2h3dGMoaGFuZGxlLVx1MDAzZW5ldGRldiwgY2xzX2Zsb3dlci1cdTAwM2VjbGFzc2lkKTtcbiBcdFx0aWYgKHRjIFx1MDAzYyAwIHx8IHRjIFx1MDAzZSBoZGV2LVx1MDAzZXRjX21heCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuQEAgLTIzMTEsMTEgKzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0YWN0ID0gXHUwMDI2YWN0aW9uLVx1MDAzZWVudHJpZXNbMF07XG4gXHRzd2l0Y2ggKGFjdC1cdTAwM2VpZCkge1xuIFx0Y2FzZSBGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HOlxuLVx0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gaGFuZGxlLVx1MDAzZWtpbmZvLm51bV90cXBzKSB7XG4rXHRcdGlmIChhY3QtXHUwMDNlcnhfcXVldWUgXHUwMDNlPSBudW1fdHFwcykge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICAgXCJxdWV1ZSBpZCAoJXUpIHNob3VsZCBiZSBsZXNzIHRoYW4gJXVcIixcbi1cdFx0XHRcdFx0ICAgICAgIGFjdC1cdTAwM2VyeF9xdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGhhbmRsZS1cdTAwM2VraW5mby5udW1fdHFwcyk7XG4rXHRcdFx0XHRcdCAgICAgICBhY3QtXHUwMDNlcnhfcXVldWUsIG51bV90cXBzKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTI0MjMsMTIgKzI0MzEsMTEgQEAgc3RhdGljIGludCBoY2xnZV9jaGVja19jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbi1cdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4rc3RhdGljIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuIHtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXHUwMDNlY29tbW9uLmV4dGFjaztcbi1cdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcbi1cdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cdTAwM2ViYWNrO1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTI0NTEsMTQgKzI0NTgsMTQgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oaGRldiwgdnBvcnQsIGNsc19mbG93ZXIsIHJ1bGUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRrZnJlZShydWxlKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ1bGUtXHUwMDNlbG9jYXRpb24gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvIC0gMTtcbi1cdHJ1bGUtXHUwMDNldmZfaWQgPSAwO1xuK1x0cnVsZS1cdTAwM2V2Zl9pZCA9IHZwb3J0LVx1MDAzZXZwb3J0X2lkO1xuIFx0cnVsZS1cdTAwM2VjbHNfZmxvd2VyLmNvb2tpZSA9IGNsc19mbG93ZXItXHUwMDNlY29va2llO1xuIFx0cnVsZS1cdTAwM2VydWxlX3R5cGUgPSBIQ0xHRV9GRF9UQ19GTE9XRVJfQUNUSVZFO1xuIFxuQEAgLTI0NjksNiArMjQ3NiwyMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbitcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4re1xuK1x0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xuK1xuK1x0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbih2cG9ydC1cdTAwM2ViYWNrLCB2cG9ydCwgY2xzX2Zsb3dlcik7XG4rfVxuK1xuK2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4rXHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuK3tcbitcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVx1MDAzZWhkZXYsIHZmX3JlcC1cdTAwM2V2cG9ydCxcbitcdFx0XHRcdFx0ICAgY2xzX2Zsb3dlcik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXG4ge1xuQEAgLTI1MjIsNiArMjU0NCwxNCBAQCBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4rXHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2Zl9yZXAtXHUwMDNlaGRldjtcbitcbitcdHJldHVybiBoY2xnZV9kZWxfY2xzX2Zsb3dlcihcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYywgY2xzX2Zsb3dlcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGhjbGdlX3N5bmNfZmRfbGlzdChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QpXG4ge1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxuaW5kZXggMmY2NmNjOWMzYzY1YzQuLjIwMGQ4MWNlMTJjOGQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXG5AQCAtNiw2ICs2LDggQEBcbiBcbiBzdHJ1Y3QgaG5hZTNfaGFuZGxlO1xuIHN0cnVjdCBoY2xnZV9kZXY7XG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcbitzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcbiBcbiBpbnQgaGNsZ2VfaW5pdF9mZF9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldik7XG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuQEAgLTI2LDYgKzI4LDExIEBAIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGJvb2wgaGNsZ2VfaXNfY2xzX2Zsb3dlcl9hY3RpdmUoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKTtcbitcbitpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuK1x0XHRcdCAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcik7XG4raW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcbitcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGludCBoY2xnZV9jbGVhcl9hcmZzX3J1bGVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuIHZvaWQgaGNsZ2Vfc3luY19mZF90YWJsZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uNWY4ODE4N2YxY2E4M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMTA1MzQsNiArMTA1MzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XG4gXHQuZ2V0X3RzX2luZm8gPSBoY2xnZV9wdHBfZ2V0X3RzX2luZm8sXG4gXHQuZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8gPSBoY2xnZV9nZXRfbGlua19kaWFnbm9zaXNfaW5mbyxcbiBcdC5jbGVhbl92Zl9jb25maWcgPSBoY2xnZV9jbGVhbl92cG9ydF9jb25maWcsXG4rXHQuY3JlYXRlX3ZmX3JlcHMgPSBoY2xnZV9jcmVhdGVfdmZfcmVwcyxcbitcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXG4gXHQuZ2V0X2RzY3BfcHJpbyA9IGhjbGdlX2dldF9kc2NwX3ByaW8sXG4gXHQuZ2V0X3dvbCA9IGhjbGdlX2dldF93b2wsXG4gXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbmluZGV4IDc0MTk0ODE0MjJjMzEwLi40ZjExYjljMzhlNjllMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbkBAIC0xNyw2ICsxNyw5IEBAXG4gI2luY2x1ZGUgXCJobmFlMy5oXCJcbiAjaW5jbHVkZSBcImhjbGdlX2NvbW1fcnNzLmhcIlxuICNpbmNsdWRlIFwiaGNsZ2VfY29tbV90cXBfc3RhdHMuaFwiXG4rI2luY2x1ZGUgXCJoY2xnZV92Zl9yZXAuaFwiXG4rXG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcbiBcbiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OIFwiMS4wXCJcbiAjZGVmaW5lIEhDTEdFX0RSSVZFUl9OQU1FIFwiaGNsZ2VcIlxuQEAgLTkzNSw2ICs5MzgsOSBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcbiBcdGJvb2wgY3VyX3Byb21pc2M7XG4gXHRpbnQgbnVtX2FsbG9jX3ZmcztcdC8qIEFjdHVhbCBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZCAqL1xuIFxuK1x0c3RydWN0IGhjbGdlX3ZmX3JlcFx0Kip2Zl9yZXBzO1xuK1x0dTE2XHRcdFx0bnVtX3ZmX3JlcHM7XG4rXG4gXHRzdHJ1Y3QgaGNsZ2VfY29tbV90cXAgKmh0cXA7XG4gXHRzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNTEzMzYwNDBkNmZiM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jXG5AQCAtMCwwICsxLDE1OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8vIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC5cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2Zsb3dfb2ZmbG9hZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoY2xnZV9tYWluLmhcIlxuKyNpbmNsdWRlIFwiaGNsZ2VfdmZfcmVwLmhcIlxuKyNpbmNsdWRlIFwiaGNsZ2VfZmQuaFwiXG4rXG4rc3RhdGljIG5ldGRldl90eF90IGhjbGdlX3ZmX3JlcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK31cbitcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9nZXRfcGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSBzbnByaW50ZihidWYsIGxlbiwgXCJwZiV1dmYldVwiLCBQQ0lfRlVOQyhoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Zm4pLFxuK1x0XHQgICAgICB2Zl9yZXAtXHUwMDNldnBvcnQtXHUwMDNldnBvcnRfaWQgLSAxKTtcbitcdGlmIChyYyBcdTAwM2U9IGxlbilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXG4re1xuK1x0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2O1xuK1xuK1x0aWYgKCF0Y19jbHNfY2FuX29mZmxvYWRfYW5kX2NoYWluMCh2Zl9yZXAtXHUwMDNlbmV0ZGV2LCB0eXBlX2RhdGEpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfQ0xTRkxPV0VSOlxuK1x0XHRzd2l0Y2ggKGNsc19mbG93ZXItXHUwMDNlY29tbWFuZCkge1xuK1x0XHRjYXNlIEZMT1dfQ0xTX1JFUExBQ0U6XG4rXHRcdFx0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHZmX3JlcCwgY2xzX2Zsb3dlcik7XG4rXHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbitcdFx0XHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIExJU1RfSEVBRChoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCk7XG4rXG4rc3RhdGljIGludCBoY2xnZV92Zl9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4rXHRcdHJldHVybiBmbG93X2Jsb2NrX2NiX3NldHVwX3NpbXBsZSh0eXBlX2RhdGEsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCxcbitcdFx0XHRcdFx0XHQgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYixcbitcdFx0XHRcdFx0XHQgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoY2xnZV92Zl9yZXBfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGhjbGdlX3ZmX3JlcF94bWl0LFxuK1x0Lm5kb19nZXRfcGh5c19wb3J0X25hbWVcdD0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSxcbitcdC5uZG9fc2V0dXBfdGNcdFx0XHQ9IGhjbGdlX3ZmX3JlcF9zZXR1cF90Yyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGhjbGdlX3ZmX3JlcF9uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XG4rXHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbitcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbit9XG4rXG4raW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpXG4re1xuK1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghbnVtX3ZmcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBrY2FsbG9jKG51bV92ZnMsIHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICopLFxuK1x0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWhkZXYtXHUwMDNldmZfcmVwcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpKyspIHtcbitcdFx0c25wcmludGYobmFtZSwgSUZOQU1TSVosIFwiJXNfcmVwJWRcIixcbitcdFx0XHQgaGRldi1cdTAwM2V2cG9ydFswXS5uaWMubmV0ZGV2LVx1MDAzZW5hbWUsIGkpO1xuK1x0XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwKSwgbmFtZSxcbitcdFx0XHRcdCAgICBORVRfTkFNRV9VTktOT1dOLCBldGhlcl9zZXR1cCk7XG4rXHRcdGlmICghbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcbitcdFx0aGNsZ2VfdmZfcmVwX25ldF9zZXR1cChuZGV2KTtcbitcbitcdFx0dmZfcmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRcdHZmX3JlcC1cdTAwM2VoZGV2ID0gaGRldjtcbitcdFx0dmZfcmVwLVx1MDAzZXZwb3J0ID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFtpICsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcbitcdFx0dmZfcmVwLVx1MDAzZW5ldGRldiA9IG5kZXY7XG4rXG4rXHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGhkZXYtXHUwMDNldmZfcmVwc1tpXSA9IHZmX3JlcDtcbitcdH1cbitcbitcdGhkZXYtXHUwMDNlbnVtX3ZmX3JlcHMgPSBudW1fdmZzO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0d2hpbGUgKGktLSlcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cdTAwM2V2Zl9yZXBzW2ldLVx1MDAzZW5ldGRldik7XG4rXHRrZnJlZShoZGV2LVx1MDAzZXZmX3JlcHMpO1xuK1x0aGRldi1cdTAwM2V2Zl9yZXBzID0gTlVMTDtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldilcbit7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gYWVfZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgaTtcbitcbitcdGlmICghaGRldi1cdTAwM2V2Zl9yZXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBoZGV2LVx1MDAzZW51bV92Zl9yZXBzOyBpKyspIHtcbitcdFx0aWYgKGhkZXYtXHUwMDNldmZfcmVwc1tpXSlcbitcdFx0XHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVx1MDAzZXZmX3JlcHNbaV0tXHUwMDNlbmV0ZGV2KTtcbitcdH1cbitcbitcdGtmcmVlKGhkZXYtXHUwMDNldmZfcmVwcyk7XG4rXHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBOVUxMO1xuK1x0aGRldi1cdTAwM2VudW1fdmZfcmVwcyA9IDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oXG5AQCAtMCwwICsxLDIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEhpc2lsaWNvbiBMaW1pdGVkLiAqL1xuK1xuKyNpZm5kZWYgX19IQ0xHRV9WRl9SRVBfSFxuKyNkZWZpbmUgX19IQ0xHRV9WRl9SRVBfSFxuK1xuK3N0cnVjdCBobmFlM19hZV9kZXY7XG4rc3RydWN0IGhjbGdlX2RldjtcbitzdHJ1Y3QgaGNsZ2VfdnBvcnQ7XG4rc3RydWN0IG5ldF9kZXZpY2U7XG4rXG4rc3RydWN0IGhjbGdlX3ZmX3JlcCB7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2XHQqaGRldjtcbitcdHN0cnVjdCBoY2xnZV92cG9ydFx0KnZwb3J0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG4rfTtcbitcbitpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XG4rdm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjM4LjgzNjM3MjkyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDYxNTc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBITlMzIEV0aGVybmV0IERyaXZlciBWRiBSZXByZXNlbnRvciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBIaXNpbGljb24gSE5TMyBldGhlcm5ldCBkcml2ZXIuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYWRkaW5nIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSByZXByZXNlbnRvcnMsIHdoaWNoIGlzIGEgY29tbW9uIGFwcHJvYWNoIGZvciBTUklPViBzdXBwb3J0LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGBobnMzX2VuZXQuY2AsIHdoZXJlIHRoZXkncmUgY2FsbGluZyBgY3JlYXRlX3ZmX3JlcHNgIGFuZCBgZGVzdHJveV92Zl9yZXBzYCB3aGVuIFNSSU9WIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdG8gZHluYW1pY2FsbHkgY3JlYXRlIGFuZCBkZXN0cm95IHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBWRi5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgdHVja2VkIGF3YXkgaW4gYGhjbGdlX3ZmX3JlcC5jYCwgd2hpY2ggaW1wbGVtZW50cyB0aGUgVkYgcmVwcmVzZW50b3IncyBjb3JlIGxvZ2ljOiBgaGNsZ2VfY3JlYXRlX3ZmX3JlcHNgIGFuZCBgaGNsZ2VfZGVzdHJveV92Zl9yZXBzYC4gVGhlIHJlcHJlc2VudG9yLCBvZiBjb3Vyc2UsIHJlZ2lzdGVycyBhIG5ldyBuZXRkZXYgd2l0aCBgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHNgLiBJIHNlZSB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSBlc3NlbnRpYWwgbmV0ZGV2IG9wZXJhdGlvbnM6IGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRyYW5zbWl0dGluZywgYG5kb19nZXRfcGh5c19wb3J0X25hbWVgIGZvciBwb3J0IGlkZW50aWZpY2F0aW9uLCBhbmQgYG5kb19zZXR1cF90Y2AgZm9yIFRyYWZmaWMgQ29udHJvbCBzZXR1cC5cblxuVGhlIGBuZG9fc2V0dXBfdGNgIGltcGxlbWVudGF0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgYFRDX1NFVFVQX0JMT0NLYCwgYW5kIHN1YnNlcXVlbnRseSwgYSBibG9jayBjYWxsYmFjayBgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiYC4gVGhpcyBjYWxsYmFjayBpcyB3aGVyZSB0aGUgYWR2YW5jZWQgc3R1ZmYgaGFwcGVucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgY2xhc3NpZmljYXRpb24gb2YgcGFja2V0cy4gSXQgaGFuZGxlcyBgVENfU0VUVVBfQ0xTRkxPV0VSYCwgY2FsbGluZyBgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmZgIGFuZCBgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmZgIHRvIG1hbmFnZSBGbG93IENsYXNzaWZpY2F0aW9uIHJ1bGVzIGF0IHRoZSBWRiBsZXZlbC4gVGhlc2UgZmxvd2VyLWJhc2VkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBgaGNsZ2VfZmQuY2AuXG5cbk5vdywgSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0ICpob3cqIHdlJ2QgdGVzdCB0aGlzLCBhbmQgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzY2VuYXJpby4gU2luY2UgdGhpcyBpcyBhbiBITlMzIGRyaXZlciwgYW5kIEhOUzMgYXJlIEhpc2lsaWNvbidzIFBDSSBuZXR3b3JrIGNhcmRzLCB0aGlzIGRyaXZlciBleHBlY3RzIGEgcmVhbCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZW11bGF0ZSB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVT8gSSBkb3VidCB0aGF0IFFFTVUgaGFzIGFueSBuYXRpdmUgc3VwcG9ydCBvciBhIGRlZGljYXRlZCBITlMzIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgSE5TMyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBuZXR3b3JrIGNhcmRzIHdpdGhpbiBRRU1VLCBhbmQgdGhlcmUncyBub3RoaW5nIG9uIHRoYXQgbGlzdCBhYm91dCBITlMzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6NDYuNjQyNTM2NzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODEzODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6NzpjY2ZsYWdzLXkgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjg6Y2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZTo5OmNjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfSE5TMykgKz0gaG5hZTMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ITlMzX0VORVQpICs9IGhuczMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE0OmhuczMtb2JqcyA9IGhuczNfZW5ldC5vIGhuczNfZXRodG9vbC5vIGhuczNfZGVidWdmcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MTY6aG5zMy0kKENPTkZJR19ITlMzX0RDQikgKz0gaG5zM19kY2JubC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0hOUzNfSENMR0VWRikgKz0gaGNsZ2V2Zi5vIGhjbGdlLWNvbW1vbi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjA6aGNsZ2UtY29tbW9uLW9ianMgKz0gaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQubyBobnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5vIGhuczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyMjpoY2xnZXZmLW9ianMgPSBobnMzdmYvaGNsZ2V2Zl9tYWluLm8gaG5zM3ZmL2hjbGdldmZfbWJ4Lm8gIGhuczN2Zi9oY2xnZXZmX2RldmxpbmsubyBobnMzdmYvaGNsZ2V2Zl9yZWdzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSE5TM19IQ0xHRSkgKz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjI1OmhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjY6XFx0XFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjc6XFx0XFx0aG5zM3BmL2hjbGdlX2ZkLm8gaG5zM3BmL2hjbGdlX3ZmX3JlcC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjk6aGNsZ2UtJChDT05GSUdfSE5TM19EQ0IpICs9IGhuczNwZi9oY2xnZV9kY2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaD0xOTg9c3RydWN0IGhuYWUzX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtMjA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6MjA5OnN0cnVjdCBobnMzX21hY19zdGF0cyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMTAtXFx0dTY0IHR4X3BhdXNlX2NudDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjA2PXN0cnVjdCBobmFlM19hZV9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02ODUtXFx0dm9pZCAoKmdldF9tYWNfc3RhdHMpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjY4NjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaG5zM19tYWNfc3RhdHMgKm1hY19zdGF0cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02ODctXFx0dm9pZCAoKmdldF9zdHJpbmdzKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNC0jaW5jbHVkZSBcXFwiaG5hZTMuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NTojaW5jbHVkZSBcXFwiaG5zM19lbmV0LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjk6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExOlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEyLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIwOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGV0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfZXRzICpldHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTIxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MjI6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjI0OlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTI1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjMzOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTM0LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MzU6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjM3OlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTM4LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ2OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQ3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NDg6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjUwOlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTUxLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU5OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGRjYl9hcHAgKmFwcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNjAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo2MTpcXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NjM6XFx0aWYgKGhuczNfbmljX3Jlc2V0dGluZyhuZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNjQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzI6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc0OlxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo3NjpcXHRpZiAoaG5zM19uaWNfcmVzZXR0aW5nKG5kZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03Ny1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg1LS8qIERDQlggY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4NjpzdGF0aWMgdTggaG5zM19kY2JubF9nZXRkY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjg4OlxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk2LS8qIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWlsICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjk3OnN0YXRpYyB1OCBobnMzX2RjYm5sX3NldGRjYngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG1vZGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTk6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTA3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgaG5zM19kY2JubF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwODpcXHQuaWVlZV9nZXRldHNcXHQ9IGhuczNfZGNibmxfaWVlZV9nZXRldHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwOTpcXHQuaWVlZV9zZXRldHNcXHQ9IGhuczNfZGNibmxfaWVlZV9zZXRldHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMDpcXHQuaWVlZV9nZXRwZmNcXHQ9IGhuczNfZGNibmxfaWVlZV9nZXRwZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMTpcXHQuaWVlZV9zZXRwZmNcXHQ9IGhuczNfZGNibmxfaWVlZV9zZXRwZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMjpcXHQuaWVlZV9zZXRhcHAgICAgPSBobnMzX2RjYm5sX2llZWVfc2V0YXBwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTM6XFx0LmllZWVfZGVsYXBwICAgID0gaG5zM19kY2JubF9pZWVlX2RlbGFwcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTE0OlxcdC5nZXRkY2J4XFx0PSBobnMzX2RjYm5sX2dldGRjYngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExNTpcXHQuc2V0ZGNieFxcdD0gaG5zM19kY2JubF9zZXRkY2J4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEyMjp2b2lkIGhuczNfZGNibmxfc2V0dXAoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTI5OlxcdGRldi1cXHUwMDNlZGNibmxfb3BzID0gXFx1MDAyNmhuczNfZGNibmxfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMzAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOS0jaW5jbHVkZSBcXFwiaG5hZTMuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDojaW5jbHVkZSBcXFwiaG5zM19kZWJ1Z2ZzLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE6I2luY2x1ZGUgXFxcImhuczNfZW5ldC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEzOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpobnMzX2RiZ2ZzX3Jvb3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19kZW50cnlfaW5mbyBobnMzX2RiZ19kZW50cnlbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNi1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0MzpzdGF0aWMgaW50IGhuczNfZGJnX2JkX2ZpbGVfaW5pdChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUzMiBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0OnN0YXRpYyBpbnQgaG5zM19kYmdfY29tbW9uX2luaXRfdDEoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MzIgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NTpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDc6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19jbWRfaW5mbyBobnMzX2RiZ19jbWRbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00OC1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTg6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc1LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzY6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03Ny1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04Ny1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODktXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTkzLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6OTQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy05NS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDA6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMDEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEwNjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNy1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTExLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTEyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTEzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMTctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTE5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UWF9CRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMjQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19iZF9maWxlX2luaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTI1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SWF9CRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMzA6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19iZF9maWxlX2luaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTMxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMzUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9NQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTM2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTM3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9NQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQ4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQ5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTU1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTYwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTYxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNjUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTY2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTY3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTcyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTczLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTc4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTc5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTg0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTg1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTkwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTkxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xOTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTk2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTk3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjAyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjAzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjA4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjA5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjE0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjE1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjIwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjIxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMjUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjI2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjI3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjMyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjMzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjM4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjM5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjQ0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjQ1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjUwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjUxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9RVUVVRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNTY6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTctXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2MS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1FVRVVFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI2MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2My1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUVVFVUUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjY4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9GRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNzQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzUtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI3OS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0ZELFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4MDpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4MS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjg1LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4NjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4Ny1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjkxLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5My1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjk3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5ODpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5OS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzAzLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfRkQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzA0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzA1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMDktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzEwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzExLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzE2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzE3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzIyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzIzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzI2OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfY2FwX2luZm8gaG5zM19kYmdfY2FwW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzI3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jPTM5MD1kaW1fdHVuZV9zdGF0X3N0cltdID0geyBcXFwiT05fVE9QXFxcIiwgXFxcIlRJUkVEXFxcIiwgXFxcIlJJR0hUXFxcIiwgXFxcIkxFRlRcXFwiIH07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5MjpzdGF0aWMgdm9pZCBobnMzX2dldF9jb2FsX2luZm8oc3RydWN0IGhuczNfZW5ldF90cXBfdmVjdG9yICp0cXBfdmVjdG9yLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5My1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSwgYm9vbCBpc190eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5NS1cXHR1bnNpZ25lZCBpbnQgZ2xfb2Zmc2V0LCBxbF9vZmZzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Mzk2OlxcdHN0cnVjdCBobnMzX2VuZXRfY29hbGVzY2UgKmNvYWw7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzk3LVxcdHVuc2lnbmVkIGludCByZWdfdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQzNzpzdGF0aWMgdm9pZCBobnMzX2R1bXBfY29hbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgYm9vbCBpc190eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQzOS1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MDpcXHRzdHJ1Y3QgaG5zM19lbmV0X3RxcF92ZWN0b3IgKnRxcF92ZWN0b3I7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDQxOlxcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NDItXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTEtXFx0XFx0dHFwX3ZlY3RvciA9IFxcdTAwMjZwcml2LVxcdTAwM2V0cXBfdmVjdG9yW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1MjpcXHRcXHRobnMzX2dldF9jb2FsX2luZm8odHFwX3ZlY3RvciwgcywgaSwgaXNfdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDU2OnN0YXRpYyBpbnQgaG5zM19kYmdfY29hbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1ODpcXHRobnMzX2R1bXBfY29hbF9pbmZvKHMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1OS1cXHRzZXFfcHV0cyhzLCBcXFwiXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjA6XFx0aG5zM19kdW1wX2NvYWxfaW5mbyhzLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDYxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ2NTpzdGF0aWMgdm9pZCBobnMzX2R1bXBfcnhfcXVldWVfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ5OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1MDA6c3RhdGljIGludCBobnMzX2RiZ19yeF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MDEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwMi1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwMzpcXHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTA0OlxcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MDUtXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjQtXFx0XFx0cmluZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VyaW5nWyh1MzIpKGkgKyBoLVxcdTAwM2VraW5mby5udW1fdHFwcyldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyNTpcXHRcXHRobnMzX2R1bXBfcnhfcXVldWVfaW5mbyhyaW5nLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUzMTpzdGF0aWMgdm9pZCBobnMzX2R1bXBfdHhfcXVldWVfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1NjU6c3RhdGljIGludCBobnMzX2RiZ190eF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2Ny1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU2ODpcXHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTY5OlxcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NzAtXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01ODktXFx0XFx0cmluZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VyaW5nW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5MDpcXHRcXHRobnMzX2R1bXBfdHhfcXVldWVfaW5mbyhyaW5nLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5NjpzdGF0aWMgaW50IGhuczNfZGJnX3F1ZXVlX21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTgtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1OTk6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYwMC1cXHR1MzIgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYxNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2MTg6c3RhdGljIHZvaWQgaG5zM19kdW1wX3J4X2JkX2luZm8oc3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE5OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaG5zM19kZXNjICpkZXNjLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjIwLVxcdFxcdFxcdFxcdCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0MzpzdGF0aWMgaW50IGhuczNfZGJnX3J4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY0NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ1OlxcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NDYtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXFx1MDAzZWhhbmRsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDc6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0ODpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ5OlxcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjUwLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY2NjpcXHRcXHRobnMzX2R1bXBfcnhfYmRfaW5mbyhwcml2LCBkZXNjLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NjctXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY3MjpzdGF0aWMgdm9pZCBobnMzX2R1bXBfdHhfYmRfaW5mbyhzdHJ1Y3QgaG5zM19kZXNjICpkZXNjLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjczLVxcdFxcdFxcdFxcdCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY4ODpzdGF0aWMgaW50IGhuczNfZGJnX3R4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY4OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjkwOlxcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTEtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXFx1MDAzZWhhbmRsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2OTI6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5MzpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Njk0OlxcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjk1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxMTpcXHRcXHRobnMzX2R1bXBfdHhfYmRfaW5mbyhkZXNjLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxNzpzdGF0aWMgdm9pZCBobnMzX2RiZ19kZXZfY2FwcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzE4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MTk6XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gaG5zM19nZXRfYWVfZGV2KGgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyMC1cXHR1bnNpZ25lZCBsb25nICpjYXBzID0gYWVfZGV2LVxcdTAwM2VjYXBzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShobnMzX2RiZ19jYXApOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MjY6XFx0XFx0c3RhdGUgPSB0ZXN0X2JpdChobnMzX2RiZ19jYXBbaV0uY2FwX2JpdCwgY2Fwcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzI3OlxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzOiAlc1xcXFxuXFxcIiwgaG5zM19kYmdfY2FwW2ldLm5hbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzI4LVxcdFxcdFxcdCAgIHN0cl95ZXNfbm8oc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTczMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MzQ6c3RhdGljIHZvaWQgaG5zM19kYmdfZGV2X3NwZWNzKHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHN0cnVjdCBzZXFfZmlsZSAqcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc2OTpzdGF0aWMgaW50IGhuczNfZGJnX2Rldl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03NzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc3MzpcXHRobnMzX2RiZ19kZXZfY2FwcyhoLCBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3NzQ6XFx0aG5zM19kYmdfZGV2X3NwZWNzKGgsIHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3Nzk6c3RhdGljIHZvaWQgaG5zM19kdW1wX3BhZ2VfcG9vbF9pbmZvKHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03ODAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTI6c3RhdGljIGludCBobnMzX2RiZ19wYWdlX3Bvb2xfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzkzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTQtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTU6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc5NjpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzk3LVxcdHUzMiBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODE3LVxcdFxcdHJpbmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcmluZ1sodTMyKShpICsgaC1cXHUwMDNla2luZm8ubnVtX3RxcHMpXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MTg6XFx0XFx0aG5zM19kdW1wX3BhZ2VfcG9vbF9pbmZvKHJpbmcsIHMsIGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgxOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI0OnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcHJpdmF0ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgyNjpcXHRzdHJ1Y3QgaG5zM19kYmdfZGF0YSAqZGF0YSA9IHMtXFx1MDAzZXByaXZhdGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI3LVxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBkYXRhLVxcdTAwM2VoYW5kbGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI4OlxcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzQtXFx0aWYgKGRhdGEtXFx1MDAzZWNtZCA9PSBITkFFM19EQkdfQ01EX1RYX0JEKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgzNTpcXHRcXHRyZXR1cm4gaG5zM19kYmdfdHhfYmRfaW5mbyhzLCBwcml2YXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzYtXFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlY21kID09IEhOQUUzX0RCR19DTURfUlhfQkQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODM3OlxcdFxcdHJldHVybiBobnMzX2RiZ19yeF9iZF9pbmZvKHMsIHByaXZhdGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg0MC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODQxOkRFRklORV9TSE9XX0FUVFJJQlVURShobnMzX2RiZ19iZF9pbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODQzOnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfZmlsZV9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0NTpcXHRzdHJ1Y3QgaG5zM19kYmdfZGF0YSAqZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDYtXFx0c3RydWN0IGRlbnRyeSAqZW50cnlfZGlyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MDpcXHRlbnRyeV9kaXIgPSBobnMzX2RiZ19kZW50cnlbaG5zM19kYmdfY21kW2NtZF0uZGVudHJ5XS5kZW50cnk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODUxOlxcdG1heF9xdWV1ZV9udW0gPSBobnMzX2dldF9tYXhfYXZhaWxhYmxlX2NoYW5uZWxzKGhhbmRsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODUyLVxcdGRhdGEgPSBkZXZtX2tjYWxsb2MoXFx1MDAyNmhhbmRsZS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBtYXhfcXVldWVfbnVtLCBzaXplb2YoKmRhdGEpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODYwLVxcdFxcdGRhdGFbaV0uaGFuZGxlID0gaGFuZGxlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg2MTpcXHRcXHRkYXRhW2ldLmNtZCA9IGhuczNfZGJnX2NtZFtjbWRdLmNtZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NjItXFx0XFx0ZGF0YVtpXS5xaWQgPSBpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo0Ny4wMDA2ODIzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ4NTA4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEhOUzMgRHJpdmVyKipcblxuT2theSwgc28gdGhlIEhOUzMgZHJpdmVyLi4ucmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gSGlzaWxpY29uIG5ldHdvcmsgaGFyZHdhcmUuIFBoeXNpY2FsIHN0dWZmLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBvZmZlciAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQ/IEV2ZW4gYSBiYXNpYyBtb2NrIHdvdWxkIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgaGludCBvZiBhIG1vY2sgbW9kdWxlLCBhIHN0dWIsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgc3RhbmQgaW4gZm9yIHRoYXQgaGFyZHdhcmUgaW50ZXJmYWNlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo1MC41NDkxOTUyNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NTEyMjcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3RpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo1MS4xNjU3MjY1NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDQwMjg1ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBITlMzIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGZvciBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBkaWRuJ3QgaW1tZWRpYXRlbHkgZmluZCBhbnl0aGluZy4gVGhlbiBJIHNhdyB0aGUgbWVudGlvbiBvZiBhIHBhdGNoIHJlbGF0ZWQgdG8gc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgbm90aW5nIGl0IHdhcyB1bmRlciByZXZpZXcuIFRoYXQgZ290IG1lIHRoaW5raW5nIOKAkyBpZiBzeXprYWxsZXIgaXMgZnV6emluZyBpdCwgdGhlcmUgKm11c3QqIGJlIHNvbWUgd2F5IHRvIHJlYWNoIGl0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHdlbnQgdG8gdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGFuZCBwb3RlbnRpYWwgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgc3l6a2FsbGVyIGNhbiBmdXp6IFBDSSBkcml2ZXJzLCBldmVuIHdpdGhvdXQgZnVsbCBoYXJkd2FyZSBlbXVsYXRpb24uIEl0IGRvZXMgdGhpcyBieSBlbXVsYXRpbmcgUENJIGRldmljZXMgdGhyb3VnaCBhIGtlcm5lbCBtb2R1bGUgb3IgdXNpbmcgUUVNVSdzIFBDSSBlbXVsYXRpb24uIEZvciBVU0IsIGl0IHVzZXMgYHZoY2lgLCBidXQgZm9yIFBDSSwgaXQgaXMgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCwgaW5qZWN0aW5nIHRoZSBQQ0kgZGV2aWNlcy4gSXQgcHJvdmlkZXMgZmFrZSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKS5cblxuQnV0IHRoZW4sIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIFRoYXQgcmFpc2VzIGEga2V5IHF1ZXN0aW9uLiBEb2VzIHRoaXMgUENJIGZ1enplciwgd2hpY2ggaXMgbm90IGEgZnVsbCBoYXJkd2FyZSBlbXVsYXRvciwgc3RpbGwgcXVhbGlmeSBhcyBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCI/IEl0J3MgaW5qZWN0aW5nIGRhdGEgaW50byBNTUlPIHJlYWRzLCBidXQgaXQncyBub3QgcHJvdmlkaW5nIGEgZnVsbHkgZnVuY3Rpb25hbCBoYXJkd2FyZSBlbnZpcm9ubWVudC5cblxuVHlwaWNhbGx5LCB3aXRoIHBoeXNpY2FsIFBDSSBkcml2ZXJzIHRoYXQgKmxhY2sqIGRlZGljYXRlZCBlbXVsYXRvcnMsIGZ1bmN0aW9uYWwgZnV6emluZyBpcyBwcm9ibGVtYXRpYy4gVGhlIGRyaXZlciB1c3VhbGx5IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbiwgb3IgZ2V0cyBzdHVjayB3aGVuIGl0IGVuY291bnRlcnMgZ2FyYmFnZSBNTUlPLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgYmVjYXVzZSB0aGVyZSdzIG5vIHdheSB0byBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgVkYgcmVwcmVzZW50b3JzIGluIEhOUzMsIHNvIEkgbXVzdCBjb25zaWRlciB0aGF0LiBUaGF0IHNhaWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgSE5TMyBjYW4gaW5pdGlhbGl6ZSBpbiB0aGlzIGVudmlyb25tZW50IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjU4LjYwNjAxNjk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODU1NjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTMwPXN0YXRpYyB2b2lkIGhuczNfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE0NTovKiBobnMzX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ2LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0OC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDk6ICogaG5zM19wcm9iZSBpbml0aWFsaXplcyBhIFBGIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTUwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIFBGIHByaXZhdGUgc3RydWN0dXJlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTU1OnN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNjk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM3MS1cXHQuaWRfdGFibGUgPSBobnMzX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM3MjpcXHQucHJvYmUgICAgPSBobnMzX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzMtXFx0LnJlbW92ZSAgID0gaG5zM19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjU4LjcxNDU4MDcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MTExMDQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGhuczNfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGhuczNfcHJvYmVgIGlzIGFsbCBhYm91dC4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgcHVyZSwgaW5pdGlhbCBjdXJpb3NpdHkuIEknbSB0YWtpbmcgYSBmcmVzaCBsb29rLCBmb2N1c2luZyBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIExldCdzIHNlZSB3aGF0IHRoaXMgdG9vbCBicmluZ3MgdG8gdGhlIHRhYmxlIGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIEknbSBmb3JtaW5nIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZG8gYW55dGhpbmcgbW9yZSBjb21wbGV4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg2MCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjA4LjA1NTY5NTQ2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTU6XFx0c3RhdGljIGludCBobnMzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjMxNTY6XFx0e1xcbjMxNTc6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2O1xcbjMxNTg6XFx0XFx0aW50IHJldDtcXG4zMTU5OlxcdFxcbjMxNjA6XFx0XFx0YWVfZGV2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqYWVfZGV2KSwgR0ZQX0tFUk5FTCk7XFxuMzE2MTpcXHRcXHRpZiAoIWFlX2RldilcXG4zMTYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRhZV9kZXYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjMxNjU6XFx0XFx0YWVfZGV2LVxcdTAwM2VmbGFnID0gZW50LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4zMTY2OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZV9kZXYpO1xcbjMxNjc6XFx0XFxuMzE2ODpcXHRcXHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG4zMTY5OlxcdFxcdGlmIChyZXQpXFxuMzE3MDpcXHRcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuMzE3MTpcXHRcXG4zMTcyOlxcdFxcdHJldHVybiByZXQ7XFxuMzE3MzpcXHR9XFxuMzE3NDpcXHRcXG4zMTc1OlxcdC8qKlxcbjMxNzY6XFx0ICogaG5zM19jbGVhbl92Zl9jb25maWdcXG4zMTc3OlxcdCAqIEBwZGV2OiBwb2ludGVyIHRvIGEgcGNpX2RldiBzdHJ1Y3R1cmVcXG4zMTc4OlxcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZFxcbjMxNzk6XFx0ICpcXG4zMTgwOlxcdCAqIENsZWFuIHJlc2lkdWFsIHZmIGNvbmZpZyBhZnRlciBkaXNhYmxlIHNyaW92XFxuMzE4MTpcXHQgKiovXFxuMzE4MjpcXHRzdGF0aWMgdm9pZCBobnMzX2NsZWFuX3ZmX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuMzE4MzpcXHR7XFxuMzE4NDpcXHRcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMzE4NTpcXHRcXG4zMTg2OlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlY2xlYW5fdmZfY29uZmlnKVxcbjMxODc6XFx0XFx0XFx0YWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNsZWFuX3ZmX2NvbmZpZyhhZV9kZXYsIG51bV92ZnMpO1xcbjMxODg6XFx0fVxcbjMxODk6XFx0XFxuMzE5MDpcXHQvKiBobnMzX3JlbW92ZSAtIERldmljZSByZW1vdmFsIHJvdXRpbmVcXG4zMTkxOlxcdCAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbjMxOTI6XFx0ICovXFxuMzE5MzpcXHRzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4zMTk0OlxcdHtcXG4zMTk1OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4zMTk2OlxcdFxcbjMxOTc6XFx0XFx0aWYgKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKVxcbjMxOTg6XFx0XFx0XFx0aG5zM19kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjMxOTk6XFx0XFxuMzIwMDpcXHRcXHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xcbjMyMDE6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMyMDI6XFx0fVxcbjMyMDM6XFx0XFxuMzIwNDpcXHQvKipcXG4zMjA1OlxcdCAqIGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZVxcbjMyMDY6XFx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxcbjMyMDc6XFx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgdG8gYWxsb2NhdGVcXG4zMjA4OlxcdCAqXFxuMzIwOTpcXHQgKiBFbmFibGUgb3IgY2hhbmdlIHRoZSBudW1iZXIgb2YgVkZzLiBDYWxsZWQgd2hlbiB0aGUgdXNlciB1cGRhdGVzIHRoZSBudW1iZXJcXG4zMjEwOlxcdCAqIG9mIFZGcyBpbiBzeXNmcy5cXG4zMjExOlxcdCAqKi9cXG4zMjEyOlxcdHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4zMjEzOlxcdHtcXG4zMjE0OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4zMjE1OlxcdFxcdGludCByZXQ7XFxuMzIxNjpcXHRcXG4zMjE3OlxcdFxcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkge1xcbjMyMTg6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbiBub3QgY29uZmlnIFNSSU9WXFxcXG5cXFwiKTtcXG4zMjE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMyMjA6XFx0XFx0fVxcbjMyMjE6XFx0XFxuMzIyMjpcXHRcXHRpZiAobnVtX3Zmcykge1xcbjMyMjM6XFx0XFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTtcXG4zMjI0OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMjI1OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuMzIyNjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMyMjc6XFx0XFx0XFx0XFx0aWYgKGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjcmVhdGVfdmZfcmVwcykge1xcbjMyMjg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV92Zl9yZXBzKGFlX2RldixcXG4zMjI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX3Zmcyk7XFxuMzIzMDpcXHRcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjMyMzE6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMjMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJmYWlsZWQgdG8gY3JlYXRlIFZGIHJlcHJlc2VudG9yczogJWRcXFxcblxcXCIsXFxuMzIzMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXQpO1xcbjMyMzQ6XFx0XFx0XFx0XFx0fVxcbjMyMzU6XFx0XFx0XFx0XFx0cmV0dXJuIG51bV92ZnM7XFxuMzIzNjpcXHRcXHRcXHR9XFxuMzIzNzpcXHRcXHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XFxuMzIzODpcXHRcXHRcXHRpbnQgbnVtX3Zmc19wcmUgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbjMyMzk6XFx0XFxuMzI0MDpcXHRcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlc3Ryb3lfdmZfcmVwcylcXG4zMjQxOlxcdFxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXN0cm95X3ZmX3JlcHMoYWVfZGV2KTtcXG4zMjQyOlxcdFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjMyNDM6XFx0XFx0XFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xcbjMyNDQ6XFx0XFx0fSBlbHNlIHtcXG4zMjQ1OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzI0NjpcXHRcXHRcXHRcXHQgXFxcIlVuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXFxcblxcXCIpO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFxuMzI0OTpcXHRcXHRyZXR1cm4gMDtcXG4zMjUwOlxcdH1cXG4zMjUxOlxcdFxcbjMyNTI6XFx0c3RhdGljIHZvaWQgaG5zM19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4zMjUzOlxcdHtcXG4zMjU0OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MDguMDU2MTEwMTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTUwMDg1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBITlMzIERyaXZlcidzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIEhOUzMgZHJpdmVyIGlzIGEgUENJIGRyaXZlciwgYW5kIHRoYXQncyBrZXkuIFN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVy4oCUdGhhdCdzIGEgcG90ZW50aWFsIGF2ZW51ZS4gV2FpdCwgdGhlIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiBhbnkgUENJIGRyaXZlciwgcmlnaHQ/IEl0IHdvcmtzIGJ5IG1hdGNoaW5nIFBDSSBJRHMuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgSE5TMyBpcyBldmVuIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBzZXR1cCBvciBpZiBpdOKAmXMgYWNjZXNzaWJsZS5cblxuQnV0IGhvbGQgb24sIHRoZSBwcm9tcHQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cyBhbmQgbWFjODAyMTFfaHdzaW0uIFRoZSBITlMzIGRyaXZlciAqaXMqIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLiBEb2VzIHRoZSBQQ0kgZnV6emVyIGNvdW50IGFzIOKAnHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJl4oCdPyBUZWNobmljYWxseSwgaXQgc2hvdWxkLCBidXQgZG9lcyB0aGUgcHJvbXB0J3MgZXhjbHVzaW9uIGNvdmVyIHRoaXMgY2FzZT8gVGhlIHByb21wdCBzYXlzIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pXCIuIFNvLCB0aGUgUENJIGZ1enplciAqaXMqIGEgd2F5IHRvIHBvdGVudGlhbGx5IHJlYWNoIHRoZSBITlMzIGRyaXZlci5cblxuTm93LCBpZiBpdCdzIGEgKnBoeXNpY2FsKiBQQ0kgZHJpdmVyLCBpdCB0eXBpY2FsbHkgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHRoZSBQQ0kgZnV6emVyIGhhcyB0byBlbXVsYXRlIHRoZSBjb25maWcgc3BhY2UgYW5kIE1NSU8uIFN5emthbGxlcidzIFBDSSBmdXp6ZXIsIHdoaWxlIHVzZWZ1bCwgY2FuIGJlIGZhaXJseSBiYXNpYy4gSXQgb2Z0ZW4gc3RydWdnbGVzIHdpdGggY29tcGxleCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMg4oCTIHlvdSBrbm93LCB3YWl0aW5nIGZvciBzcGVjaWZpYyBiaXRzIGluIE1NSU8gcmVnaXN0ZXJzLCBmaXJtd2FyZSBsb2FkaW5nLCB0aG9zZSBraW5kcyBvZiB0aGluZ3MuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIEhOUzMgZHJpdmVyIGhhcyBhbnkgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLiBEbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBvciBhbnkgY29tcGxleCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXM/IFRoYXQgd2lsbCBiZSB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjE1LjExMTEyMjYzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMDcyNjEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3RfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjoxNS4yMDkzMzk3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODM3NTg1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IE1pc3NpbmcgRmlybXdhcmUgUmVxdWVzdCoqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIG5vdCBzZWVpbmcgYW55IGV4cGxpY2l0IHJlcXVlc3RzIGZvciBmaXJtd2FyZSBpbiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0IG1pZ2h0IGJlIGFic2VudCBvciBpZiBpdCdzIGJlaW5nIGhhbmRsZWQgZGlmZmVyZW50bHkuIExldCdzIHN0YXJ0IHdpdGggYGhjbGdlX21haW4uY2AuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgc2luY2UgaXQgb2Z0ZW4gb3JjaGVzdHJhdGVzIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCB3aXRoaW4gdGhpcyBIQ0xHRSBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGZpcm13YXJlIGxvYWQgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbiB0aGVyZSwgaWYgaXQncyBleHRlcm5hbCwgb3IgbWF5YmUgaWYgaXQncyBiZWluZyBwdWxsZWQgZnJvbSBhIHByZS1sb2FkZWQgYXJlYSwgd2hpY2ggY291bGQgZXhwbGFpbiB0aGUgbGFjayBvZiBhbiBpbW1lZGlhdGUgcmVxdWVzdC4gSSdsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIHNlZSB3aGF0IHRoZXkncmUgdXAgdG8uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbmV4dCBzdGVwIGZvciByZXNvbHZpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjoyNS4yOTMxMDEzNzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDUyMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2luaXRfYWVfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTkzMTk9c3RhdGljIGludCBoY2xnZV9zZXRfYXV0b25lZ19zcGVlZF9kdXAoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtOTMzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjkzNDA6c3RhdGljIGludCBoY2xnZV9pbml0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MTA0MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA0MzU6XFx0LmluaXRfYWVfZGV2ID0gaGNsZ2VfaW5pdF9hZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xMDQzNi1cXHQudW5pbml0X2FlX2RldiA9IGhjbGdlX3VuaW5pdF9hZV9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjI1LjM4OTU3NDI0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ1NTc1Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZvciBQb3RlbnRpYWwgUENJIEZ1enplciBCbG9ja2luZyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgZnVuY3Rpb24gYGhjbGdlX2luaXRfYWVfZGV2YCBpcyBnb2luZyB0byB0cmlwIG1lIHVwIHdoZW4gSSdtIHJ1bm5pbmcgbXkgUENJIGZ1enplci4gTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgaXQncyBkb2luZyBhbnkgY29tcGxleCBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgcmVhZHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYmxvY2tpbmcgYmVoYXZpb3IuIEJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBmdXp6aW5nIOKAkyB0aGV5IHNsb3cgZXZlcnl0aGluZyBkb3duIGFuZCBjYW4gcHJldmVudCBtZSBmcm9tIGV4cGxvcmluZyBhIGJyb2FkZXIgcmFuZ2Ugb2YgY29kZSBwYXRocyBxdWlja2x5LiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGFueSByZWQgZmxhZ3MgcmVsYXRlZCB0byBNTUlPIGludGVyYWN0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBzaGFycCDigJMgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgcG90ZW50aWFsbHkgdGltZS1jb25zdW1pbmcgb3IgY29tcGxleCByZWFkIG9wZXJhdGlvbnMgZnJvbSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycy4gQW55dGhpbmcgdGhhdCBjb3VsZCBzdGFsbCB0aGUgZnV6emVyIGlzIGEgcG90ZW50aWFsIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDQ1LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MzAuMDM1MTU1ODQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MzQwOlxcdHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbjkzNDE6XFx0e1xcbjkzNDI6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZV9kZXYtXFx1MDAzZXBkZXY7XFxuOTM0MzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2O1xcbjkzNDQ6XFx0XFx0aW50IHJldDtcXG45MzQ1OlxcdFxcbjkzNDY6XFx0XFx0aGRldiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmhkZXYpLCBHRlBfS0VSTkVMKTtcXG45MzQ3OlxcdFxcdGlmICghaGRldilcXG45MzQ4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjkzNDk6XFx0XFxuOTM1MDpcXHRcXHRoZGV2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG45MzUxOlxcdFxcdGhkZXYtXFx1MDAzZWFlX2RldiA9IGFlX2RldjtcXG45MzUyOlxcdFxcdGhkZXYtXFx1MDAzZXJlc2V0X3R5cGUgPSBITkFFM19OT05FX1JFU0VUO1xcbjkzNTM6XFx0XFx0aGRldi1cXHUwMDNlcmVzZXRfbGV2ZWwgPSBITkFFM19GVU5DX1JFU0VUO1xcbjkzNTQ6XFx0XFx0YWVfZGV2LVxcdTAwM2Vwcml2ID0gaGRldjtcXG45MzU1OlxcdFxcbjkzNTY6XFx0XFx0LyogSFcgc3VwcHJ0IDIgbGF5ZXIgdmxhbiAqL1xcbjkzNTc6XFx0XFx0aGRldi1cXHUwMDNlbXBzID0gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOICsgMiAqIFZMQU5fSExFTjtcXG45MzU4OlxcdFxcbjkzNTk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRfbG9jayk7XFxuOTM2MDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlZmRfcnVsZV9sb2NrKTtcXG45MzYxOlxcdFxcdHNlbWFfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlcmVzZXRfc2VtLCAxKTtcXG45MzYyOlxcdFxcbjkzNjM6XFx0XFx0cmV0ID0gaGNsZ2VfcGNpX2luaXQoaGRldik7XFxuOTM2NDpcXHRcXHRpZiAocmV0KVxcbjkzNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuOTM2NjpcXHRcXG45MzY3OlxcdFxcdC8qIEZpcm13YXJlIGNvbW1hbmQgcXVldWUgaW5pdGlhbGl6ZSAqL1xcbjkzNjg6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfcXVldWVfaW5pdChoZGV2LVxcdTAwM2VwZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcpO1xcbjkzNjk6XFx0XFx0aWYgKHJldClcXG45MzcwOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV91bmluaXQ7XFxuOTM3MTpcXHRcXG45MzcyOlxcdFxcdC8qIEZpcm13YXJlIGNvbW1hbmQgaW5pdGlhbGl6ZSAqL1xcbjkzNzM6XFx0XFx0aGNsZ2VfY29tbV9jbWRfaW5pdF9vcHMoXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGNsZ2VfY21xX29wcyk7XFxuOTM3NDpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXFx1MDAzZWFlX2RldiwgXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbixcXG45Mzc1OlxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgaGRldi1cXHUwMDNlcmVzZXRfcGVuZGluZyk7XFxuOTM3NjpcXHRcXHRpZiAocmV0KVxcbjkzNzc6XFx0XFx0XFx0Z290byBlcnJfY21kX3VuaW5pdDtcXG45Mzc4OlxcdFxcbjkzNzk6XFx0XFx0cmV0ICA9IGhjbGdlX2NsZWFyX2h3X3Jlc291cmNlKGhkZXYpO1xcbjkzODA6XFx0XFx0aWYgKHJldClcXG45MzgxOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM4MjpcXHRcXG45MzgzOlxcdFxcdHJldCA9IGhjbGdlX2dldF9jYXAoaGRldik7XFxuOTM4NDpcXHRcXHRpZiAocmV0KVxcbjkzODU6XFx0XFx0XFx0Z290byBlcnJfY21kX3VuaW5pdDtcXG45Mzg2OlxcdFxcbjkzODc6XFx0XFx0cmV0ID0gaGNsZ2VfcXVlcnlfZGV2X3NwZWNzKGhkZXYpO1xcbjkzODg6XFx0XFx0aWYgKHJldCkge1xcbjkzODk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHF1ZXJ5IGRldiBzcGVjaWZpY2F0aW9ucywgcmV0ID0gJWQuXFxcXG5cXFwiLFxcbjkzOTA6XFx0XFx0XFx0XFx0cmV0KTtcXG45MzkxOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM5MjpcXHRcXHR9XFxuOTM5MzpcXHRcXG45Mzk0OlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ3VyZShoZGV2KTtcXG45Mzk1OlxcdFxcdGlmIChyZXQpIHtcXG45Mzk2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNvbmZpZ3VyZSBkZXYgZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45Mzk3OlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM5ODpcXHRcXHR9XFxuOTM5OTpcXHRcXG45NDAwOlxcdFxcdHJldCA9IGhjbGdlX2luaXRfbXNpKGhkZXYpO1xcbjk0MDE6XFx0XFx0aWYgKHJldCkge1xcbjk0MDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiSW5pdCBNU0kvTVNJLVggZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45NDAzOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTQwNDpcXHRcXHR9XFxuOTQwNTpcXHRcXG45NDA2OlxcdFxcdHJldCA9IGhjbGdlX21pc2NfaXJxX2luaXQoaGRldik7XFxuOTQwNzpcXHRcXHRpZiAocmV0KVxcbjk0MDg6XFx0XFx0XFx0Z290byBlcnJfbXNpX3VuaW5pdDtcXG45NDA5OlxcdFxcbjk0MTA6XFx0XFx0cmV0ID0gaGNsZ2VfYWxsb2NfdHFwcyhoZGV2KTtcXG45NDExOlxcdFxcdGlmIChyZXQpIHtcXG45NDEyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFsbG9jYXRlIFRRUHMgZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45NDEzOlxcdFxcdFxcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xcbjk0MTQ6XFx0XFx0fVxcbjk0MTU6XFx0XFxuOTQxNjpcXHRcXHRyZXQgPSBoY2xnZV9hbGxvY192cG9ydChoZGV2KTtcXG45NDE3OlxcdFxcdGlmIChyZXQpXFxuOTQxODpcXHRcXHRcXHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcXG45NDE5OlxcdFxcbjk0MjA6XFx0XFx0cmV0ID0gaGNsZ2VfbWFwX3RxcChoZGV2KTtcXG45NDIxOlxcdFxcdGlmIChyZXQpXFxuOTQyMjpcXHRcXHRcXHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcXG45NDIzOlxcdFxcbjk0MjQ6XFx0XFx0aWYgKGhkZXYtXFx1MDAzZWh3Lm1hYy5tZWRpYV90eXBlID09IEhOQUUzX01FRElBX1RZUEVfQ09QUEVSKSB7XFxuOTQyNTpcXHRcXHRcXHRjbGVhcl9iaXQoSE5BRTNfREVWX1NVUFBPUlRfRkVDX0IsIGFlX2Rldi1cXHUwMDNlY2Fwcyk7XFxuOTQyNjpcXHRcXHRcXHRpZiAoaG5hZTNfZGV2X3BoeV9pbXBfc3VwcG9ydGVkKGhkZXYpKVxcbjk0Mjc6XFx0XFx0XFx0XFx0cmV0ID0gaGNsZ2VfdXBkYXRlX3RwX3BvcnRfaW5mbyhoZGV2KTtcXG45NDI4OlxcdFxcdFxcdGVsc2VcXG45NDI5OlxcdFxcdFxcdFxcdHJldCA9IGhjbGdlX21hY19tZGlvX2NvbmZpZyhoZGV2KTtcXG45NDMwOlxcdFxcbjk0MzE6XFx0XFx0XFx0aWYgKHJldClcXG45NDMyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xcbjk0MzM6XFx0XFx0fVxcbjk0MzQ6XFx0XFxuOTQzNTpcXHRcXHRyZXQgPSBoY2xnZV9pbml0X3Vtdl9zcGFjZShoZGV2KTtcXG45NDM2OlxcdFxcdGlmIChyZXQpXFxuOTQzNzpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk0Mzg6XFx0XFxuOTQzOTpcXHRcXHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MzAuMDM1NzYwMTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTUxNjA0OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIEhOUzMgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgaG93IHRoZSBgaGNsZ2VgIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBoY2xnZV9jb21tX2NtZF9pbml0YCBhbmQgYGhjbGdlX2dldF9jYXBgLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyLCBzcGVjaWZpY2FsbHksIGlzIGludHJpZ3VpbmcuIEl0IGNhbiBpbmplY3QgcmFuZG9tIE1NSU8gcmVhZCB2YWx1ZXMsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGJ5cGFzcyBpbml0aWFsIGNoZWNrcy4gSG93ZXZlciwgSSBoaWdobHkgZG91YnQgaXQgY2FuIG5hdmlnYXRlIHRoZSBjb21wbGV4IGZpcm13YXJlIGNvbW1hbmQgcXVldWVzIHJlcXVpcmVkIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24uXG5cbkJ1dCBob2xkIG9uISBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIGNvZGUgcGF0aHMgZGVlbWVkIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cy4gRG9lcyBzeXprYWxsZXIgZXZlbiB0YXJnZXQgUENJIGRyaXZlcnMgd2l0aCBpdHMgZnV6emVyPyBZZXMsIGl0IGhhcyB0aGUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBpdCBkb2VzLlxuXG5UaGUga2V5IGlzIGluIHRoZSBkZWZpbml0aW9uIG9mIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiLiAgVGhlIHByb21wdCBleHBsaWNpdGx5IGV4Y2x1ZGVzIGFueSBwYXRoIHVucmVhY2hhYmxlIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBtZWFucyBpZiB0aGUgZnV6emluZyBhcHByb2FjaCBjYW4ndCByZWFjaCBhIGNvZGUgYmxvY2sgaW4gUUVNVS9HQ0UgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5TbywgaXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCBITlMzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIFFFTVUgd2l0aCB0aGUgUENJIGZ1enplcj8gIEl0J3MgYSBnZW5lcmljIFBDSSBmdXp6ZXIsIG5vdCBhbiBITlMzLXNwZWNpZmljIGVtdWxhdG9yLiAgVGhpcyBtYWtlcyBhIGRpZmZlcmVuY2UuXG5cbkNhbiB0aGlzIGdlbmVyaWMgZnV6emVyIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIHRvIGBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVgPyBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSB0aHJvdWdoIHN5c2ZzLiBJdCByZXF1aXJlcyB0aGF0IHRoZSBQQ0kgZGV2aWNlIGJlIHByb3Blcmx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBmaXJzdC4gSWYgdGhlIFBDSSBmdXp6ZXIgdGhyb3dzIHJhbmRvbSBNTUlPIGRhdGEsIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBpcyBsaWtlbHkgdG8gZmFpbCBlYXJseSBvbiwgbGlrZWx5IGF0IHRoZSBgaGNsZ2VfY29tbV9jbWRfaW5pdGAgb3IgYGhjbGdlX2dldF9jYXBgIHN0YWdlLCBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBleHBlY3Qgc3BlY2lmaWMgcmVzcG9uc2VzIGZyb20gdGhlIGZpcm13YXJlJ3MgY29tbWFuZCBxdWV1ZS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpbiBkZXRhaWwuIExldCdzIHN0YXJ0IHdpdGggZXhhbWluaW5nIGBoY2xnZV9jb21tX2NtZF9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5ODAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjo0NS41ODczNjkxMDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjM4NDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2xnZV9jb21tX2NtZF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTc9c3RhdGljIHZvaWQgaGNsZ2VfY29tbV9jbWRfY29uZmlnX3JlZ3Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM2OnZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NTk4PUVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3F1ZXVlX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjAwOnZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9vcHMoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjAxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGhjbGdlX2NvbW1fY21xX29wcyAqb3BzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MDktfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjEwOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYxMjppbnQgaGNsZ2VfY29tbV9jbWRfaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMy1cXHRcXHRcXHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYyNzpcXHRoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3MoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02ODAtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjgxOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaD00NjY9c3RhdGljIGlubGluZSB1MzIgaGNsZ2VfY29tbV9yZWFkX3JlZyh1OCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzg6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ3OS1pbnQgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ5ND1pbnQgaGNsZ2VfY29tbV9jbWRfcXVldWVfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ5NTppbnQgaGNsZ2VfY29tbV9jbWRfaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ni1cXHRcXHRcXHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00OTctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXNldF9wZW5kaW5nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ5ODp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTQxMTM9c3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtNDEzMy1cXHRcXHQgKiBhbnkgbWFpbGJveCBoYW5kbGluZyBvciBjb21tYW5kIHRvIGZpcm13YXJlIGlzIG9ubHkgdmFsaWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjQxMzQ6XFx0XFx0ICogYWZ0ZXIgaGNsZ2VfY29tbV9jbWRfaW5pdCBpcyBjYWxsZWQuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy00MTM1LVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05MzQwPXN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzcyLVxcdC8qIEZpcm13YXJlIGNvbW1hbmQgaW5pdGlhbGl6ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTM3MzpcXHRoY2xnZV9jb21tX2NtZF9pbml0X29wcyhcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIFxcdTAwMjZoY2xnZV9jbXFfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjkzNzQ6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVxcdTAwM2VhZV9kZXYsIFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odywgXFx1MDAyNmhkZXYtXFx1MDAzZWZ3X3ZlcnNpb24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05Mzc1LVxcdFxcdFxcdFxcdCAgdHJ1ZSwgaGRldi1cXHUwMDNlcmVzZXRfcGVuZGluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTk4MDY9c3RhdGljIGludCBoY2xnZV9yZXNldF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTgyNjpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXFx1MDAzZWFlX2RldiwgXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk4MjctXFx0XFx0XFx0XFx0ICB0cnVlLCBoZGV2LVxcdTAwM2VyZXNldF9wZW5kaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yODY3PXN0YXRpYyBpbnQgaGNsZ2V2Zl9yZXNldF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yODc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyODgwOlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2luaXQoaGRldi1cXHUwMDNlYWVfZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTI4ODEtXFx0XFx0XFx0XFx0ICBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbiwgZmFsc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9MjkyMD1zdGF0aWMgaW50IGhjbGdldmZfaW5pdF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yOTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyOTM1OlxcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odywgXFx1MDAyNmhjbGdldmZfY21xX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzY6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVxcdTAwM2VhZV9kZXYsIFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjkzNy1cXHRcXHRcXHRcXHQgIFxcdTAwMjZoZGV2LVxcdTAwM2Vmd192ZXJzaW9uLCBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6NDUuNzk5NzY3NzYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTM0Nzk1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYGhjbGdlX2NvbW1fY21kX2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9pbml0YCoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiwgYGhjbGdlX2NvbW1fY21kX2luaXRgLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCBcImhjbGdlXCIgcHJlc3VtYWJseSBpbmRpY2F0aW5nIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGNvbW11bmljYXRpb24gbGF5ZXIsIGFuZCBcImNvbW1fY21kXCIgaGludGluZyBhdCBjb21tdW5pY2F0aW9uIGNvbW1hbmRzLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gaW5pdGlhbGl6aW5nIGEgY29tcG9uZW50IG9mIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIG9yIHRoZSBjb21tYW5kIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gdGhpcyBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgb3BlcmF0aW9uIHRvIHByb3Blcmx5IGFzc2VzcyB3aGF0IGlzIGdvaW5nIG9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzIGV2ZW4gcmVnaXN0cmF0aW9uIG9mIGNvbW1hbmQgaGFuZGxlcnMgaWYgdGhpcyBpcyBhIGZyYW1ld29yay4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IHNldHMgdXAgYSBjb250ZXh0LCBwcmVwYXJlcyBkYXRhIGJ1ZmZlcnMsIHJlZ2lzdGVycyBjb21tYW5kcywgb3IgY29uZmlndXJlcyB1bmRlcmx5aW5nIGhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIFVuZGVyc3RhbmRpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb24gcHJpb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgZnV0dXJlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYxMiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjUwLjk1MzI1MTMyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEyOlxcdGludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbiA2MTM6XFx0XFx0XFx0XFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxcbiA2MTQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXNldF9wZW5kaW5nKVxcbiA2MTU6XFx0e1xcbiA2MTY6XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1fY21xICpjbWRxID0gXFx1MDAyNmh3LVxcdTAwM2VjbXE7XFxuIDYxNzpcXHRcXHRpbnQgcmV0O1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZHEtXFx1MDAzZWNzcS5sb2NrKTtcXG4gNjIwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxLmxvY2spO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRjbWRxLVxcdTAwM2Vjc3EubmV4dF90b19jbGVhbiA9IDA7XFxuIDYyMzpcXHRcXHRjbWRxLVxcdTAwM2Vjc3EubmV4dF90b191c2UgPSAwO1xcbiA2MjQ6XFx0XFx0Y21kcS1cXHUwMDNlY3JxLm5leHRfdG9fY2xlYW4gPSAwO1xcbiA2MjU6XFx0XFx0Y21kcS1cXHUwMDNlY3JxLm5leHRfdG9fdXNlID0gMDtcXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0aGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKGh3KTtcXG4gNjI4OlxcdFxcbiA2Mjk6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNtZHEtXFx1MDAzZWNycS5sb2NrKTtcXG4gNjMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjbWRxLVxcdTAwM2Vjc3EubG9jayk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGNsZWFyX2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHQvKiBDaGVjayBpZiB0aGVyZSBpcyBuZXcgcmVzZXQgcGVuZGluZywgYmVjYXVzZSB0aGUgaGlnaGVyIGxldmVsXFxuIDYzNTpcXHRcXHQgKiByZXNldCBtYXkgaGFwcGVuIHdoZW4gbG93ZXIgbGV2ZWwgcmVzZXQgaXMgYmVpbmcgcHJvY2Vzc2VkLlxcbiA2MzY6XFx0XFx0ICovXFxuIDYzNzpcXHRcXHRpZiAocmVzZXRfcGVuZGluZykge1xcbiA2Mzg6XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbiA2Mzk6XFx0XFx0XFx0Z290byBlcnJfY21kX2luaXQ7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdC8qIGdldCB2ZXJzaW9uIGFuZCBkZXZpY2UgY2FwYWJpbGl0aWVzICovXFxuIDY0MzpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KGFlX2RldiwgaHcsXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcXG4gNjQ1OlxcdFxcdGlmIChyZXQpIHtcXG4gNjQ2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiA2NDc6XFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIGFuZCBjYXBhYmlsaXRpZXMsIHJldCA9ICVkXFxcXG5cXFwiLFxcbiA2NDg6XFx0XFx0XFx0XFx0cmV0KTtcXG4gNjQ5OlxcdFxcdFxcdGdvdG8gZXJyX2NtZF9pbml0O1xcbiA2NTA6XFx0XFx0fVxcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuIDY1MzpcXHRcXHRcXHQgXFxcIlRoZSBmaXJtd2FyZSB2ZXJzaW9uIGlzICVsdS4lbHUuJWx1LiVsdVxcXFxuXFxcIixcXG4gNjU0OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTNfTUFTSyxcXG4gNjU1OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUzX1NISUZUKSxcXG4gNjU2OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTJfTUFTSyxcXG4gNjU3OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUyX1NISUZUKSxcXG4gNjU4OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTFfTUFTSyxcXG4gNjU5OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUxX1NISUZUKSxcXG4gNjYwOlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTBfTUFTSyxcXG4gNjYxOlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUwX1NISUZUKSk7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdGlmICghaXNfcGYgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VkZXZfdmVyc2lvbiBcXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXG4gNjY2OlxcdFxcdC8qIGFzayB0aGUgZmlybXdhcmUgdG8gZW5hYmxlIHNvbWUgZmVhdHVyZXMsIGRyaXZlciBjYW4gd29yayB3aXRob3V0XFxuIDY2NzpcXHRcXHQgKiBpdC5cXG4gNjY4OlxcdFxcdCAqL1xcbiA2Njk6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIHRydWUpO1xcbiA2NzA6XFx0XFx0aWYgKHJldClcXG4gNjcxOlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZhZV9kZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4gNjcyOlxcdFxcdFxcdFxcdCBcXFwiRmlybXdhcmUgY29tcGF0aWJsZSBmZWF0dXJlcyBub3QgZW5hYmxlZCglZCkuXFxcXG5cXFwiLFxcbiA2NzM6XFx0XFx0XFx0XFx0IHJldCk7XFxuIDY3NDpcXHRcXHRyZXR1cm4gMDtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0ZXJyX2NtZF9pbml0OlxcbiA2Nzc6XFx0XFx0c2V0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2ODA6XFx0fVxcbiA2ODE6XFx0RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XFxuIDY4MjpcXHRcXG4gNjgzOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gNjg0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiSE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XFxcIik7XFxuIDY4NTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJIdWF3ZWkgVGVjaC4gQ28uLCBMdGQuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjUwLjk1MzQzNzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5Mjg4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAqKlxuXG5BbHJpZ2h0LCBzbyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAgaXMgbGlrZWx5IGEgbG93LWxldmVsIGZ1bmN0aW9uLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGxheWVyLiBJdCBzb3VuZHMgbGlrZSBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBoYXJkd2FyZS4gSXQgc2VuZHMgYSBjb21tYW5kLCBwcmVzdW1hYmx5IGEgcXVlcnksIHRvIHRoZSBlbWJlZGRlZCBmaXJtd2FyZSBvbiB0aGUgZGV2aWNlLiBUaGVuLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgbWVhbnMgaXQncyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbjsgd2UncmUgYmxvY2tpbmcgdW50aWwgdGhlIGZpcm13YXJlIHJlcGxpZXMuXG5cblRoaXMgcmVzcG9uc2UgaXMgZ29pbmcgdG8gYmUgdml0YWwgYmVjYXVzZSBpdCdsbCBsaWtlbHkgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlybXdhcmUgdmVyc2lvbiwgd2hpY2ggd2lsbCBhZmZlY3Qgd2hhdCBjb2RlIHBhdGhzIG5lZWQgdG8gYmUgdGFrZW4uIEl0IHdpbGwgYWxzbyBwcm92aWRlIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcy4gVGhpcyBcImNhcGFiaWxpdHlcIiBpbmZvcm1hdGlvbiBpcyB3aGF0IEknbSByZWFsbHkgY3VyaW91cyBhYm91dC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGRhdGEgdGhhdCBjb21lcyBiYWNrLiBJdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogY2FwYWJsZSBvZiDigJMgZmVhdHVyZXMsIHN1cHBvcnRlZCBwcm90b2NvbHMsIHBvc3NpYmx5IGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgb3IgY29tbXVuaWNhdGlvbiBzdGFjayBidWlsZHMuIEFueSBkaXNjcmVwYW5jaWVzIGhlcmUgY291bGQgY2F1c2UgbWFqb3IgcHJvYmxlbXMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGlzIHJlc3BvbnNlIGNhcmVmdWxseSB0byBkZXRlcm1pbmUgaG93IHRoZSBzb2Z0d2FyZSBoYW5kbGVzIHRoZXNlIHBvdGVudGlhbCB2YXJpYXRpb25zLiBJdCdzIHRoZSBmaXJzdCBzdGVwIHRvIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHVzaW5nIHRoZSBoYXJkd2FyZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxODUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjU0Ljg0NzM3MzA0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwNTQxMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MjEwPWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjIyODppbnQgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMjktXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz02MTI9aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY0Mi1cXHQvKiBnZXQgdmVyc2lvbiBhbmQgZGV2aWNlIGNhcGFiaWxpdGllcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjQzOlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoYWVfZGV2LCBodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDc4PXZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzk6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgtNDgwLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6NTUuMjA3OTIwNjQ3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODc5MzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWA6XG5cbioqQW5hbHl6aW5nIGBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIGFsb25lIGdpdmVzIG1lIGEgcHJldHR5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBjb21tYW5kIHdpdGhpbiB0aGUgYGhjbGdlX2NvbW1gIG1vZHVsZSAod2hpY2gsIGdpdmVuIHRoZSBuYW1pbmcsIEknbSBpbmZlcnJpbmcgaXMgcmVsYXRlZCB0byBzb21lIGNvbW11bmljYXRpb24gbGF5ZXIsIHBlcmhhcHMgaGFyZHdhcmUgY29udHJvbCBsYW5ndWFnZSBvciBhIHNpbWlsYXIgZW1iZWRkZWQgc3lzdGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIHRoaXMgcGFydGljdWxhciBjb21tYW5kIGFpbXMgdG8gcmV0cmlldmUsIGJ1dCAndmVyc2lvbicgYW5kICdjYXBhYmlsaXR5JyBhcmUgaHVnZSBjbHVlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcXVlcnkgc29tZSBkZXZpY2Ugb3IgbW9kdWxlIGZvciBpdHMgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0cyBmdW5jdGlvbmFsIGNhcGFiaWxpdGllcy4gSSdtIHRoaW5raW5nIGluIHRlcm1zIG9mIGJlaW5nIGFibGUgdG8gY2hlY2sgdGhlIGNvbXBhdGliaWxpdHkgb2YgZGlmZmVyZW50IG1vZHVsZXMuIE1heWJlIGl0J3MgY2hlY2tpbmcgd2hhdCBmZWF0dXJlcyB0aGUgZGV2aWNlIHN1cHBvcnRzLCBsaWtlIGNlcnRhaW4gZGF0YSB0cmFuc2ZlciBzcGVlZHMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVuaXRzLlxuXG5JIHdpbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBjb21tYW5kIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIElzIGl0IGEgc3luY2hyb25vdXMgcmVxdWVzdC1yZXNwb25zZSB0eXBlLCBvciBtb3JlIG9mIGFuIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24/IERvZXMgaXQgdXRpbGl6ZSBhIHBhcnRpY3VsYXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBvciB0aW1lb3V0IG1lY2hhbmlzbXMgaW1wbGVtZW50ZWQ/IFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBob3cgdGhlIGNvbW1hbmQgaXMgc3RydWN0dXJlZCBhcyB3ZWxsIGFzIGhvdyB0aGUgcmVzcG9uc2UgaXMgaW50ZXJwcmV0ZWQgYW5kIHRoZW4gcHJvY2Vzc2VkIGJ5IHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIwNywiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjU5LjE5NTg1NjU3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI4OlxcdGludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4gMjI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHUzMiAqZndfdmVyc2lvbiwgYm9vbCBpc19wZilcXG4gMjMxOlxcdHtcXG4gMjMyOlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX3F1ZXJ5X3ZlcnNpb25fY21kICpyZXNwO1xcbiAyMzM6XFx0XFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4gMjM0OlxcdFxcdGludCByZXQ7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdGhjbGdlX2NvbW1fY21kX3NldHVwX2Jhc2ljX2Rlc2MoXFx1MDAyNmRlc2MsIEhDTEdFX09QQ19RVUVSWV9GV19WRVIsIDEpO1xcbiAyMzc6XFx0XFx0cmVzcCA9IChzdHJ1Y3QgaGNsZ2VfY29tbV9xdWVyeV92ZXJzaW9uX2NtZCAqKWRlc2MuZGF0YTtcXG4gMjM4OlxcdFxcdHJlc3AtXFx1MDAzZWFwaV9jYXBzID0gaGNsZ2VfY29tbV9idWlsZF9hcGlfY2FwcygpO1xcbiAyMzk6XFx0XFxuIDI0MDpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuIDI0MTpcXHRcXHRpZiAocmV0KVxcbiAyNDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0KmZ3X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VmaXJtd2FyZSk7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGFlX2Rldi1cXHUwMDNlZGV2X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VoYXJkd2FyZSkgXFx1MDAzY1xcdTAwM2NcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBITkFFM19QQ0lfUkVWSVNJT05fQklUX1NJWkU7XFxuIDI0ODpcXHRcXHRhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIHw9IGFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlcmV2aXNpb247XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uID09IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyKSB7XFxuIDI1MTpcXHRcXHRcXHRoY2xnZV9jb21tX3NldF9kZWZhdWx0X2NhcGFiaWxpdHkoYWVfZGV2LCBpc19wZik7XFxuIDI1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjUzOlxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aGNsZ2VfY29tbV9wYXJzZV9jYXBhYmlsaXR5KGFlX2RldiwgaXNfcGYsIHJlc3ApO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNTg6XFx0fVxcbiAyNTk6XFx0XFxuIDI2MDpcXHRzdGF0aWMgY29uc3QgdTE2IHNwZWNfb3Bjb2RlW10gPSB7IEhDTEdFX09QQ19TVEFUU182NF9CSVQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9PUENfU1RBVFNfMzJfQklULFxcbiAyNjI6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfT1BDX1NUQVRTX01BQyxcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX09QQ19TVEFUU19NQUNfQUxMLFxcbiAyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfT1BDX1FVRVJZXzMyX0JJVF9SRUcsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9PUENfUVVFUllfNjRfQklUX1JFRyxcXG4gMjY2OlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX01QRl9SQVNfSU5ULFxcbiAyNjc6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfUVVFUllfQ0xFQVJfUEZfUkFTX0lOVCxcXG4gMjY4OlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX0FMTF9NUEZfTVNJWF9JTlQsXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9RVUVSWV9DTEVBUl9BTExfUEZfTVNJWF9JTlQsXFxuIDI3MDpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9RVUVSWV9BTExfRVJSX0lORk8gfTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIGJvb2wgaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZSh1MTYgb3Bjb2RlKVxcbiAyNzM6XFx0e1xcbiAyNzQ6XFx0XFx0LyogdGhlc2UgY29tbWFuZHMgaGF2ZSBzZXZlcmFsIGRlc2NyaXB0b3JzLFxcbiAyNzU6XFx0XFx0ICogYW5kIHVzZSB0aGUgZmlyc3Qgb25lIHRvIHNhdmUgb3Bjb2RlIGFuZCByZXR1cm4gdmFsdWVcXG4gMjc2OlxcdFxcdCAqL1xcbiAyNzc6XFx0XFx0dTMyIGk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNwZWNfb3Bjb2RlKTsgaSsrKVxcbiAyODA6XFx0XFx0XFx0aWYgKHNwZWNfb3Bjb2RlW2ldID09IG9wY29kZSlcXG4gMjgxOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI4NDpcXHR9XFxuIDI4NTpcXHRcXG4gMjg2OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpyaW5nKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0aW50IG50YyA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuIDI4OTpcXHRcXHRpbnQgbnR1ID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuIDI5MDpcXHRcXHRpbnQgdXNlZCA9IChudHUgLSBudGMgKyByaW5nLVxcdTAwM2VkZXNjX251bSkgJSByaW5nLVxcdTAwM2VkZXNjX251bTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0cmV0dXJuIHJpbmctXFx1MDAzZWRlc2NfbnVtIC0gdXNlZCAtIDE7XFxuIDI5MzpcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdHN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX2NvcHlfZGVzYyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0c3RydWN0IGhjbGdlX2Rlc2MgKmRlc2NfdG9fdXNlO1xcbiAyOTk6XFx0XFx0aW50IGhhbmRsZSA9IDA7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdHdoaWxlIChoYW5kbGUgXFx1MDAzYyBudW0pIHtcXG4gMzAyOlxcdFxcdFxcdGRlc2NfdG9fdXNlID0gXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLmRlc2NbaHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2VdO1xcbiAzMDM6XFx0XFx0XFx0KmRlc2NfdG9fdXNlID0gZGVzY1toYW5kbGVdO1xcbiAzMDQ6XFx0XFx0XFx0KGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlKSsrO1xcbiAzMDU6XFx0XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlIFxcdTAwM2U9IGh3LVxcdTAwM2VjbXEuY3NxLmRlc2NfbnVtKVxcbiAzMDY6XFx0XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2UgPSAwO1xcbiAzMDc6XFx0XFx0XFx0aGFuZGxlKys7XFxuIDMwODpcXHRcXHR9XFxuIDMwOTpcXHR9XFxuIDMxMDpcXHRcXG4gMzExOlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9pc192YWxpZF9jc3FfY2xlYW5faGVhZChzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqcmluZyxcXG4gMzEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBoZWFkKVxcbiAzMTM6XFx0e1xcbiAzMTQ6XFx0XFx0aW50IG50YyA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuIDMxNTpcXHRcXHRpbnQgbnR1ID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdGlmIChudHUgXFx1MDAzZSBudGMpXFxuIDMxODpcXHRcXHRcXHRyZXR1cm4gaGVhZCBcXHUwMDNlPSBudGMgXFx1MDAyNlxcdTAwMjYgaGVhZCBcXHUwMDNjPSBudHU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdHJldHVybiBoZWFkIFxcdTAwM2U9IG50YyB8fCBoZWFkIFxcdTAwM2M9IG50dTtcXG4gMzIxOlxcdH1cXG4gMzIyOlxcdFxcbiAzMjM6XFx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1fY21xX3JpbmcgKmNzcSA9IFxcdTAwMjZody1cXHUwMDNlY21xLmNzcTtcXG4gMzI2OlxcdFxcdGludCBjbGVhbjtcXG4gMzI3OlxcdFxcdHUzMiBoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjo1OS4xOTYwNjcyMTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NTEyMDYxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQXR0YWNrIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0YW5kYXJkIOKAkyBzZW5kcyBhIGNvbW1hbmQsIHdhaXRzIGZvciBjb21wbGV0aW9uLiBUaGUgUENJIGZ1enplciwgaWYgaXQncyBoaXR0aW5nIHRoaXMsICpjb3VsZCogcG90ZW50aWFsbHkgdHJpZ2dlciBhIGNvbXBsZXRpb24gcmFuZG9tbHkgdmlhIE1NSU8sIGJ1dCBpdCdzIGV4Y2VwdGlvbmFsbHkgdW5saWtlbHkgaXQgd2lsbCBjcmVhdGUgYSB2YWxpZCBmaXJtd2FyZSB2ZXJzaW9uIG9yIGhhcmR3YXJlIHZlcnNpb24gdGhhdCBnZXRzIHBhc3QgYW55IHJlYWwgY2hlY2tzLCB1bmxlc3MgdGhlIGNoZWNrcyBhcmUgbGF1Z2hhYmx5IHdlYWsuXG5cbkFoLCBidXQgaGFuZyBvbi4uLiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAganVzdCAqcmVhZHMqIHRob3NlIHZlcnNpb25zIGZyb20gdGhlIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJZiBgYWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uYCBoYXBwZW5zIHRvIGJlIGBITkFFM19ERVZJQ0VfVkVSU0lPTl9WMmAsIGl0IGp1c3QgcmV0dXJucyB6ZXJvLiBPdGhlcndpc2UsIGl0IGNhbGxzIGBoY2xnZV9jb21tX3BhcnNlX2NhcGFiaWxpdHlgLiBTbywgdGhlIFBDSSBmdXp6ZXIgKm1pZ2h0KiBiZSBhYmxlIHRvIGJ5cGFzcyB0aGlzIGlmIGl0IHJhbmRvbWx5IHNldHMgYSB2YWxpZCB2ZXJzaW9uLCBvciBwZXJoYXBzIGlmIGFueSB2ZXJzaW9uIGlzIGFjY2VwdGVkLiBUaGlzIGNvdWxkIGJlIHByb21pc2luZy5cblxuQnV0IHRoZSBwcm9tcHQgYWxzbyBzYXlzLCBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0IHR5cGljYWxseSBtZWFucyBpZiBpdCdzIGEgZHJpdmVyIGZvciAqc3BlY2lmaWMqIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciwgaXQncyBjb25zaWRlcmVkIHVucmVhY2hhYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0b3IgZm9yIEhOUzM/IEkgZG9uJ3QgdGhpbmsgdGhlcmUgaXMsIHdoaWNoIHdvdWxkIHN1Z2dlc3QgYSBkZWFkIGVuZC5cblxuV2FpdCwgZG9lcyBzeXprYWxsZXIgZXZlbiBmdXp6IEhOUzM/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyBvbiBITlMzIHRvIHNlZSBpZiBhbnlvbmUgaGFzIGhhZCBzdWNjZXNzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5LCBvciBkaWZmaWN1bHQsIGl0IHdpbGwgYmUgdG8gcmVhY2ggdGhpcyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6MDkuOTQ3MjgwNjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3Mjg5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG5zM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJNQUlOVEFJTkVSU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz0xMTY5Nz1TOlxcdFN1cHBvcnRlZFxcbk1BSU5UQUlORVJTOjExNjk4OkY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmL2huczMtcG11LnJzdFxcbk1BSU5UQUlORVJTOjExNjk5OkY6XFx0ZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9obnMzX3BtdS5jXFxuTUFJTlRBSU5FUlMtMTE3MDAtXFxuLS1cXG5NQUlOVEFJTkVSUz0xMTczMz1XOlxcdGh0dHA6Ly93d3cuaGlzaWxpY29uLmNvbVxcbk1BSU5UQUlORVJTOjExNzM0OkY6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXFxuTUFJTlRBSU5FUlMtMTE3MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjEwLjA5MjAyNDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjU2NzY4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgSE5TMyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byByZWFjaCB0aGlzIHNwZWNpZmljIEhOUzMgZHJpdmVyLiBBaCwgeWVzLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLiBJdCdzIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggUENJIGRyaXZlcnMgYnkgbWF0Y2hpbmcgdGhlIFBDSSBJRCBhbmQgdGhlbiBmZWVkaW5nIHJhbmRvbSBNTUlPIGFjY2Vzc2VzLiBIb3dldmVyLCB0aGF0J3Mgbm90IHRoZSB3aG9sZSBzdG9yeS4gUmVhbGlzdGljYWxseSwgaWYgdGhlIGRyaXZlciByZWxpZXMgb24gY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGl0IHVzdWFsbHkgZmFpbHMgZHVyaW5nIHRoZSBwcm9iaW5nIHN0YWdlLiBcblxuSG9sZCBvbiwgdGhvdWdoLCB0aGUgcGF0Y2ggYXBwbGljYXRpb24gY29tbWVudCBpbmRpY2F0ZXMgYHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld2AuIFRoYXQncyBzaWduaWZpY2FudC4gSXQgbWVhbnMgc3l6a2FsbGVyIGlzIGVpdGhlciBhY3RpdmVseSBmdXp6aW5nIGl0LCBvciBhdCBsZWFzdCBzb21lb25lIHN1Ym1pdHRlZCBpdCBmb3IgdGVzdGluZy4gT2theSwgaWYgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiBpdCwgaXQgbXVzdCBiZSBzb21ld2hhdCByZWFjaGFibGUsIG9yIGF0IGxlYXN0IGJlaW5nIHRlc3RlZCBmb3IgY29tcGlsYXRpb24uXG5cbk5vdywgbGV0J3Mgc2VlLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgUmlnaHQsIGJ1dCB0aGVuIHRoZXJlJ3MgdGhlIGNhdmVhdDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cblRoZSBITlMzIGlzIGEgKnBoeXNpY2FsKiBuZXR3b3JrIGNhcmQsIGFuZCBhcyBmYXIgYXMgSSBrbm93LCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdCBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZXJlJ3Mgbm8gZXF1aXZhbGVudCBvZiBgbWFjODAyMTFfaHdzaW1gIG9yIGBuZXRkZXZzaW1gIGZvciBITlMzLiBUaGUgUENJIGZ1enplciBtaWdodCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IGl0J3MgYWxtb3N0IGNlcnRhaW4gdG8gZmFpbCBkZWVwIGludG8gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBsaWtlbHkgd2hpbGUgd2FpdGluZyBmb3IgZmlybXdhcmUgdG8gbG9hZCwgb3IgdHJ5aW5nIHRvIGluaXRpYWxpemUgdGhlIGNvbW1hbmQgcXVldWUuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQgbWUgdmVyaWZ5IGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBpcyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIGJpdC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOTQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6MTcuMjE3NzA0Nzk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1NDkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNsZ2VfY29tbV9jbWRfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzQtXFx0XFx0XFx0aW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDgyPWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDgzOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODQtXFx0XFx0XFx0aW50IG51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1OlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMwNTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVxcdFxcdGtleV9vZmZzZXQrKztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy00MTMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTcyLVxcdFxcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy04Ni1cXHRcXHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3OlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYz0zNDQyPWludCBoY2xnZV9oYW5kbGVfdmZfcXVldWVfZXJyX3JhcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jOjM0NjA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIGRlc2MsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjI6XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9NTA9aW50IGhjbGdldmZfY21kX3NlbmQoc3RydWN0IGhjbGdldmZfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcXHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aHctXFx1MDAzZWh3LCBkZXNjLCBudW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy01My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjE3LjMxODI2MTk1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1Nzc2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBDb21tdW5pY2F0aW9uKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuLi4gdGhhdCdzIHJpbmdpbmcgYSBiZWxsLiBZZWFoLCB0aGF0J3MgdGhlIGZ1bmN0aW9uIHdlIHVzZSB0byBhY3R1YWxseSAqdHJhbnNtaXQqIGNvbW1hbmRzIHRvIHRoZSBmaXJtd2FyZSwgaXNuJ3QgaXQ/IE9rYXksIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoaXMgY29ycmVjdGx5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gVGltZSB0byBnbyByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvbW1hbmQgdHJhbnNtaXNzaW9uIHdvcmtzLiBMZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGhjbGdlX2NvbW1fY21kLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gR290IHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA2NiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjIwLjk2NDA0NDg4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxcbiA0NjY6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG4gNDY3OlxcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxcbiA0Njg6XFx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxcbiA0Njk6XFx0ICpcXG4gNDcwOlxcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxcbiA0NzE6XFx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcXG4gNDcyOlxcdCAqKi9cXG4gNDczOlxcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuIDQ3NDpcXHRcXHRcXHRcXHRpbnQgbnVtKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0Ym9vbCBpc19zcGVjaWFsID0gaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpKTtcXG4gNDc3OlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3E7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFx0aW50IG50YztcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9zZW5kKVxcbiA0ODI6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpKSB7XFxuIDQ4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobnVtIFxcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcSkpIHtcXG4gNDkyOlxcdFxcdFxcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXFxuIDQ5MzpcXHRcXHRcXHQgKiBuZWVkIHVwZGF0ZSB0aGUgU1cgSEVBRCBwb2ludGVyIGNzcS1cXHUwMDNlbmV4dF90b19jbGVhblxcbiA0OTQ6XFx0XFx0XFx0ICovXFxuIDQ5NTpcXHRcXHRcXHRjc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPVxcbiA0OTY6XFx0XFx0XFx0XFx0aGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG4gNDk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdC8qKlxcbiA1MDI6XFx0XFx0ICogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiBkZXNjIGluIHRoZSByaW5nIGZvciB0aGlzIHRpbWVcXG4gNTAzOlxcdFxcdCAqIHdoaWNoIHdpbGwgYmUgdXNlIGZvciBoYXJkd2FyZSB0byB3cml0ZSBiYWNrXFxuIDUwNDpcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdG50YyA9IGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2MoaHcsIGRlc2MsIG51bSk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXFxuIDUxMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICBody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xcbiA1MTQ6XFx0XFxuIDUxNTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGlmIChody1cXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfZ2V0KVxcbiA1MTg6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX2dldChodywgZGVzYywgbnVtLCBpc19zcGVjaWFsKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTIxOlxcdH1cXG4gNTIyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3NlbmQpO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDUyNTpcXHR7XFxuIDUyNjpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0xfUkVHLCAwKTtcXG4gNTI3OlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfQkFTRUFERFJfSF9SRUcsIDApO1xcbiA1Mjg6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9ERVBUSF9SRUcsIDApO1xcbiA1Mjk6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRywgMCk7XFxuIDUzMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcXG4gNTMxOlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsIDApO1xcbiA1MzI6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9CQVNFQUREUl9IX1JFRywgMCk7XFxuIDUzMzpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0RFUFRIX1JFRywgMCk7XFxuIDUzNDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0hFQURfUkVHLCAwKTtcXG4gNTM1OlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfVEFJTF9SRUcsIDApO1xcbiA1MzY6XFx0fVxcbiA1Mzc6XFx0XFxuIDUzODpcXHR2b2lkIGhjbGdlX2NvbW1fY21kX3VuaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuIDUzOTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDU0MDpcXHR7XFxuIDU0MTpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcXHUwMDI2aHctXFx1MDAzZWNtcTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0aGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIGZhbHNlKTtcXG4gNTQ0OlxcdFxcdHNldF9iaXQoSENMR0VfQ09NTV9TVEFURV9DTURfRElTQUJMRSwgXFx1MDAyNmh3LVxcdTAwM2Vjb21tX3N0YXRlKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0Lyogd2FpdCB0byBlbnN1cmUgdGhhdCB0aGUgZmlybXdhcmUgY29tcGxldGVzIHRoZSBwb3NzaWJsZSBsZWZ0XFxuIDU0NzpcXHRcXHQgKiBvdmVyIGNvbW1hbmRzLlxcbiA1NDg6XFx0XFx0ICovXFxuIDU0OTpcXHRcXHRtc2xlZXAoSENMR0VfQ09NTV9DTURRX0NMRUFSX1dBSVRfVElNRSk7XFxuIDU1MDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZHEtXFx1MDAzZWNzcS5sb2NrKTtcXG4gNTUxOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxLmxvY2spO1xcbiA1NTI6XFx0XFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0X3JlZ3MoaHcpO1xcbiA1NTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNtZHEtXFx1MDAzZWNycS5sb2NrKTtcXG4gNTU0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjbWRxLVxcdTAwM2Vjc3EubG9jayk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcXHUwMDI2Y21kcS1cXHUwMDNlY3NxKTtcXG4gNTU3OlxcdFxcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxKTtcXG4gNTU4OlxcdH1cXG4gNTU5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3VuaW5pdCk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdGludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDU2MjpcXHR7XFxuIDU2MzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcXHUwMDI2aHctXFx1MDAzZWNtcTtcXG4gNTY0OlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjIwLjk2NDI2NjM0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI2MDY0NzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBDb21tYW5kIEV4ZWN1dGlvbiBSZXN1bHRzKipcblxuUmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGlzIHdoZXJlIHdlJ3JlIGF0LiBJJ20gZm9jdXNpbmcgb24gdGhlIHZlcmlmaWNhdGlvbiBzdGVwOyB0aGUgY3J1Y2lhbCBwb2ludCBvZiBkZXRlcm1pbmluZyBpZiB0aGUgY29tbWFuZCwgd2hhdGV2ZXIgaXQgd2FzLCBhY3R1YWxseSBkaWQgd2hhdCBpdCB3YXMgc3VwcG9zZWQgdG8gZG8uIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGdhdGVrZWVwZXIsIGVuc3VyaW5nIHRoYXQgdGhlIHN5c3RlbSBtb3ZlcyBmb3J3YXJkIG9ubHkgaWYgdGhlIHByZXZpb3VzIGFjdGlvbiBhY2hpZXZlZCBpdHMgaW50ZW5kZWQgb3V0Y29tZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHZhcmlvdXMgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBjaGVjayBoYW5kbGVzIHRoZW0uIElzIGl0IGEgc2ltcGxlIHJldHVybiBjb2RlIGNoZWNrLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIHN0YXRlIHZlcmlmaWNhdGlvbj8gRG9lcyBpdCBjb25zaWRlciB0aGUgaW5mbHVlbmNlIG9mIHRoZSBjb21tYW5kIG9uIGRlcGVuZGVudCBtb2R1bGVzPyBIb3cgdGhvcm91Z2ggaXMgaXQ/IFRoZSBxdWFsaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBzdGVwIGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZzogd2hhdCBzcGVjaWZpYyBlcnJvciBjb2RlcyBhcmUgYW50aWNpcGF0ZWQsIGhvdyBhcmUgdGhleSBpbnRlcnByZXRlZCwgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQgZm9sbG93aW5nIGEgZmFpbHVyZSBkZXRlY3RlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBpdCBjb25zaWRlcnMgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlcm1pdHRlbnQgZmFpbHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBleGVjdXRpb24gcGF0aCBpcyBjb25maXJtZWQsIG9yIGRpdmVyZ2VkLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGNoZWNrIGlzIGtleSB0byBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzE2LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozNS4yMjQ5MjE4MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNDQwOlxcdFxcdGludCBoYW5kbGUsIHJldDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogSWYgdGhlIGNvbW1hbmQgaXMgc3luYywgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIHdyaXRlIGJhY2ssXFxuIDQ0MzpcXHRcXHQgKiBpZiBtdWx0aSBkZXNjcmlwdG9ycyB0byBiZSBzZW50LCB1c2UgdGhlIGZpcnN0IG9uZSB0byBjaGVja1xcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cXHUwMDNlZmxhZykpKVxcbiA0NDY6XFx0XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbiA0NDc6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpc19jb21wbGV0ZWQpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAoIWlzX2NvbXBsZXRlZClcXG4gNDUwOlxcdFxcdFxcdHJldCA9IC1FQkFERTtcXG4gNDUxOlxcdFxcdGVsc2VcXG4gNDUyOlxcdFxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChodywgZGVzYywgbnVtLCBudGMpO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXFxuIDQ1NTpcXHRcXHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xcbiA0NTY6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRyZXQgPSBoYW5kbGU7XFxuIDQ1ODpcXHRcXHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxcbiA0NTk6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLnBkZXYtXFx1MDAzZWRldixcXG4gNDYwOlxcdFxcdFxcdFxcdCBcXFwiY2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcXFxuXFxcIiwgaGFuZGxlLCBudW0pO1xcbiA0NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjM1LjIyNTE0MDQ5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyMTk1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKldhaXRpbmcgb24gdGhlIEZpcm13YXJlJ3MgUmVwbHkqKlxuXG5SaWdodCwgc28gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuLi4gdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHdlJ3JlIGhhbmdpbmcsIGlzbid0IGl0PyBXZSd2ZSBzZW50IHRoZSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSDigJMgaXQgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSByZWdpc3RlciByZWFkIHRvIGEgY29tcGxleCBjb25maWd1cmF0aW9uIHNlcXVlbmNlIOKAkyBhbmQgbm93IHdlJ3JlIGVzc2VudGlhbGx5IGluIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIHVzaW5nIGFuIGludGVycnVwdC1kcml2ZW4gbWVjaGFuaXNtIGludGVybmFsbHksIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSB0byBhY2tub3dsZWRnZSBhbmQgd3JpdGUgYmFjayB0aGUgcmVzcG9uc2UuIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgZXZlcnl0aGluZyBjb252ZXJnZXMuIFdlICpoYXZlKiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGl0c2VsZiBpcyBzb2xpZCBoZXJlOyBhIGdsaXRjaCBhdCB0aGlzIHN0YWdlIGlzIGEgZGlzYXN0ZXIuIFdoYXQgYXJlIG91ciB0aW1lb3V0IG1lY2hhbmlzbXM/IFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgaW4gcGxhY2UgaWYgdGhlIGZpcm13YXJlIGdvZXMgc2lsZW50PyBBcmUgd2UgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGFueSBjb25jdXJyZW50IG9wZXJhdGlvbnM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgd29yc3QtY2FzZSBzY2VuYXJpb3MgaGVyZSwgbGlrZSBpZiB0aGUgZmlybXdhcmUgY3Jhc2hlcyBkdXJpbmcgcHJvY2Vzc2luZyBhbmQgbmV2ZXIgd3JpdGVzIGJhY2suIFRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0ncyByb2J1c3RuZXNzIGFyZSBtYXNzaXZlIGRlcGVuZGluZyBvbiB3aGF0IGNvbW1hbmQgd2FzIGlzc3VlZC4gSXQncyB0aGUgYWJzb2x1dGUgZXNzZW5jZSBvZiBzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uLCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciB0aGlzIHBhcnRpY3VsYXIgZXhjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTU0LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozOS4yMTczNDA2NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdH07XFxuIDQwMTpcXHRcXHR1MzIgZXJyY29kZV9jb3VudCA9IEFSUkFZX1NJWkUoaGNsZ2VfY29tbV9jbWRfZXJyY29kZSk7XFxuIDQwMjpcXHRcXHR1MzIgaTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVycmNvZGVfY291bnQ7IGkrKylcXG4gNDA1OlxcdFxcdFxcdGlmIChoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmltcF9lcnJjb2RlID09IGRlc2NfcmV0KVxcbiA0MDY6XFx0XFx0XFx0XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX2VycmNvZGVbaV0uY29tbW9uX2Vycm5vO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRyZXR1cm4gLUVJTztcXG4gNDA5OlxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWwoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtLFxcbiA0MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBudGMpXFxuIDQxNDpcXHR7XFxuIDQxNTpcXHRcXHR1MTYgb3Bjb2RlLCBkZXNjX3JldDtcXG4gNDE2OlxcdFxcdGludCBoYW5kbGU7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdG9wY29kZSA9IGxlMTZfdG9fY3B1KGRlc2NbMF0ub3Bjb2RlKTtcXG4gNDE5OlxcdFxcdGZvciAoaGFuZGxlID0gMDsgaGFuZGxlIFxcdTAwM2MgbnVtOyBoYW5kbGUrKykge1xcbiA0MjA6XFx0XFx0XFx0ZGVzY1toYW5kbGVdID0gaHctXFx1MDAzZWNtcS5jc3EuZGVzY1tudGNdO1xcbiA0MjE6XFx0XFx0XFx0bnRjKys7XFxuIDQyMjpcXHRcXHRcXHRpZiAobnRjIFxcdTAwM2U9IGh3LVxcdTAwM2VjbXEuY3NxLmRlc2NfbnVtKVxcbiA0MjM6XFx0XFx0XFx0XFx0bnRjID0gMDtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcdGlmIChsaWtlbHkoIWhjbGdlX2NvbW1faXNfc3BlY2lhbF9vcGNvZGUob3Bjb2RlKSkpXFxuIDQyNjpcXHRcXHRcXHRkZXNjX3JldCA9IGxlMTZfdG9fY3B1KGRlc2NbbnVtIC0gMV0ucmV0dmFsKTtcXG4gNDI3OlxcdFxcdGVsc2VcXG4gNDI4OlxcdFxcdFxcdGRlc2NfcmV0ID0gbGUxNl90b19jcHUoZGVzY1swXS5yZXR2YWwpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRody1cXHUwMDNlY21xLmxhc3Rfc3RhdHVzID0gZGVzY19yZXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9jb252ZXJ0X2Vycl9jb2RlKGRlc2NfcmV0KTtcXG4gNDMzOlxcdH1cXG4gNDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozOS4yMTc0NjMxODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjkwMTM3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIHRoZSBIQ0xHRSBDb250ZXh0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIGJlIHNlZWluZyBhIGNhbGwgdG8gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAgcmlnaHQgYWJvdXQuLi4gKmhlcmUqLiBCdXQgaXQncyBub3QgdGhlcmUuIFN0cmFuZ2UuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBtYWtlIHN1cmUgaXQgd2Fzbid0IGFjY2lkZW50YWxseSBjb21tZW50ZWQgb3V0IG9yIHJlbmFtZWQgaW4gYSByZWNlbnQgY29tbWl0LiBQZXJoYXBzIHRoZXJlJ3MgYW4gaW50ZXJuYWwgbWFjcm8gdGhhdCdzIHN1YnN0aXR1dGluZyBpdCBpbiwgYnV0IHRoYXQgc2VlbXMgdW5saWtlbHksIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpc24ndCBteSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwNjcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjUxLjM4NjQ4MDA1NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODI0ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNTQ9c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNjg6c3RhdGljIHZvaWQgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgdTE2IG9wY29kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM2OS1cXHRcXHRcXHRcXHQgICAgIGJvb2wgKmlzX2NvbXBsZXRlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NDM1PXN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDQ1LVxcdGlmIChIQ0xHRV9DT01NX1NFTkRfU1lOQyhsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VmbGFnKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NDY6XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDQ3LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aXNfY29tcGxldGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6NTEuNTM4MzE5MDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NTI5MjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLCBkaXN0aWxsZWQgZG93biB0byBpdHMgY29yZSBjb25jZXB0czpcblxuKipBbmFseXppbmcgYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBjb2RlLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG5hbWU6IGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGluIGEgY29tbXVuaWNhdGlvbiBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIsIGdpdmVuIHRoZSAnaGNsZ2UnIHByZWZpeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoYXQqIGlzIGJlaW5nIHdhaXRlZCBvbiwgKndoeSosIGFuZCAqaG93KiB0aGUgd2FpdCBpcyBpbXBsZW1lbnRlZC4gVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSdzIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBnb2luZyBvbiDigJMgdGhlIHN5c3RlbSBzZW5kcyBhIHJlcXVlc3QsIGFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNydWNpYWwgcGF1c2UgdW50aWwgdGhlIGhhcmR3YXJlIHJldHVybnMgd2l0aCBhbiBhbnN3ZXIuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmV3IGtleSBhcmVhcyBJIGV4cGVjdCB0byBzZWU6XG5cbiogICAqKkludGVycnVwdCBIYW5kbGluZy9Qb2xsaW5nOioqIEkgYW50aWNpcGF0ZSBlaXRoZXIgYW4gaW50ZXJydXB0LWRyaXZlbiBtZWNoYW5pc20sIHdoZXJlIGFuIGludGVycnVwdCBzaWduYWxzIHRoZSByZXNwb25zZSdzIGFycml2YWwsIG9yIGEgcG9sbGluZyBzdHJhdGVneSB3aGVyZSB0aGUgZnVuY3Rpb24gY29udGludW91c2x5IGNoZWNrcyBhIHN0YXR1cyByZWdpc3RlciBvciBmbGFnLiBUaGUgcGVyZm9ybWFuY2UgYW5kIGVmZmljaWVuY3kgaW1wbGljYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuXG4qICAgKipUaW1lb3V0IE1lY2hhbmlzbToqKiBBbnkgcm9idXN0IGltcGxlbWVudGF0aW9uICptdXN0KiBpbmNsdWRlIGEgdGltZW91dC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NlbmFyaW9zIHdoZXJlIHRoZSByZXNwb25zZSBpcyBkZWxheWVkIG9yIG5ldmVyIGFycml2ZXMuIEEgc2ltcGxlIGxvb3Agd2l0aCBhIGNvdW50ZXIsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRpbWVyIGltcGxlbWVudGF0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSB3YWl0IGZhaWxzLCBlaXRoZXIgZHVlIHRvIGEgdGltZW91dCBvciBwZXJoYXBzIGEgaGFyZHdhcmUgZXJyb3I/IFByb3BlciBlcnJvciBjb2RlcyBvciBmbGFncyBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LlxuKiAgICoqU3luY2hyb25pemF0aW9uL0NvbmN1cnJlbmN5OioqIElmIHRoaXMgaXMgcGFydCBvZiBhIG11bHRpLXRocmVhZGVkIHN5c3RlbSwgSSdsbCBiZSBzY3J1dGluaXppbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIGNvbmN1cnJlbmN5IGFuZCB0aHJlYWQgc2FmZXR5LiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHdhaXRpbmcgcHJvY2Vzcz9cbiogICAqKlJlc3BvbnNlIFZhbGlkYXRpb246KiogRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBoYXJkd2FyZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnVuY3Rpb24gcGVyZm9ybXMgYW55IHZhbGlkYXRpb24gb24gdGhlIHJldHVybmVkIHJlc3BvbnNlLiBJcyB0aGVyZSBhIGNoZWNrc3VtIGNoZWNrPyBJcyB0aGUgZGF0YSBmb3JtYXQgdmFsaWRhdGVkP1xuKiAgICoqQ29udGV4dDoqKiBJcyB0aGlzIGEgbG93LWxldmVsIGRyaXZlciBmdW5jdGlvbiwgb3IgcGFydCBvZiBhIG1vcmUgYWJzdHJhY3RlZCBjb21tdW5pY2F0aW9ucyBsaWJyYXJ5PyBJdHMgZGVzaWduIHdpbGwgZ2l2ZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgZGVwZW5kZW5jaWVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IHRvIGJlIGFzc2Vzc2luZyB0aGUgZWxlZ2FuY2UsIGVmZmljaWVuY3ksIHJvYnVzdG5lc3MsIGFuZCB0aHJlYWQtc2FmZXR5IG9mIHRoZSB3YWl0IG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzYxLCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6NTcuMzMzNjE1OTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2ODpcXHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxcbiAzNjk6XFx0XFx0XFx0XFx0XFx0ICAgICBib29sICppc19jb21wbGV0ZWQpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHR1MzIgY21kcV90eF90aW1lb3V0ID0gaGNsZ2VfZ2V0X2NtZHFfdHhfdGltZW91dChvcGNvZGUsXFxuIDM3MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRody1cXHUwMDNlY21xLnR4X3RpbWVvdXQpO1xcbiAzNzM6XFx0XFx0dTMyIHRpbWVvdXQgPSAwO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRkbyB7XFxuIDM3NjpcXHRcXHRcXHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XFxuIDM3NzpcXHRcXHRcXHRcXHQqaXNfY29tcGxldGVkID0gdHJ1ZTtcXG4gMzc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzk6XFx0XFx0XFx0fVxcbiAzODA6XFx0XFx0XFx0dWRlbGF5KDEpO1xcbiAzODE6XFx0XFx0XFx0dGltZW91dCsrO1xcbiAzODI6XFx0XFx0fSB3aGlsZSAodGltZW91dCBcXHUwMDNjIGNtZHFfdHhfdGltZW91dCk7XFxuIDM4MzpcXHR9XFxuIDM4NDpcXHRcXG4gMzg1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZSh1MTYgZGVzY19yZXQpXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9lcnJjb2RlIGhjbGdlX2NvbW1fY21kX2VycmNvZGVbXSA9IHtcXG4gMzg4OlxcdFxcdFxcdHsgSENMR0VfQ09NTV9DTURfRVhFQ19TVUNDRVNTLCAwIH0sXFxuIDM4OTpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX05PX0FVVEgsIC1FUEVSTSB9LFxcbiAzOTA6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9OT1RfU1VQUE9SVEVELCAtRU9QTk9UU1VQUCB9LFxcbiAzOTE6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9RVUVVRV9GVUxMLCAtRVhGVUxMIH0sXFxuIDM5MjpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX05FWFRfRVJSLCAtRU5PU1IgfSxcXG4gMzkzOlxcdFxcdFxcdHsgSENMR0VfQ09NTV9DTURfVU5FWEVfRVJSLCAtRU5PVEJMSyB9LFxcbiAzOTQ6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9QQVJBX0VSUiwgLUVJTlZBTCB9LFxcbiAzOTU6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9SRVNVTFRfRVJSLCAtRVJBTkdFIH0sXFxuIDM5NjpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX1RJTUVPVVQsIC1FVElNRSB9LFxcbiAzOTc6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9ISUxJTktfRVJSLCAtRU5PTElOSyB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzo1Ny4zMzM3ODIxNDdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDgwOTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBDb21tYW5kIENvbXBsZXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgaXMgYSBjaGVjayBmb3IgY29tbWFuZCBjb21wbGV0aW9uLCBzaWduYWxlZCBieSB0aGUgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCBmdW5jdGlvbi4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBhc3N1bXB0aW9uczogdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIG9yIG1vZHVsZSwgZ2l2ZW4gdGhlIFwiaGNsZ2VcIiBwcmVmaXgg4oCTIHBlcmhhcHMgSGlnaC1DYXBhY2l0eSBMaW5rIEdpZ2FiaXQgRXRoZXJuZXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFwiQ1NRXCIgc3VnZ2VzdHMgQ29tbWFuZCBTZXF1ZW5jZSBvciBDb21tYW5kIFF1ZXVlLCBpbXBseWluZyBhIHN0cnVjdHVyZWQgZmxvdyBvZiBpbnN0cnVjdGlvbnMgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIFRoZSBmdW5jdGlvbidzIHJvbGUgaXMgY3JpdGljYWwuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgZm9yICphbnkqIGluZGljYXRpb24gb2Ygd29yaywgd2UncmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpdmUgXCJkb25lXCIgc3RhdHVzLCBtZWFuaW5nIHRoZSBjb21tYW5kIG9yIHNlcXVlbmNlIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBhIHN0YXR1cyByZWdpc3RlciwgYSBkZWRpY2F0ZWQgZmxhZywgb3IgcGVyaGFwcyBtb25pdG9yaW5nIGZvciBhIHNwZWNpZmljIGludGVycnVwdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IFVudGlsIHRoaXMgZnVuY3Rpb24gcmVwb3J0cyBcImRvbmVcIiwgd2UgbmVlZCB0byBzdGFsbCwgcG9sbCwgb3IgbWFuYWdlIHRoZSB3YWl0LXN0YXRlIGZvciB0aGUgY29tbWFuZCBvciBjb21tYW5kIHNlcXVlbmNlIHRvIGZpbmlzaC4gVGhpcyBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcmVseWluZyBvbiB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgdGhlIGNvbW1hbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTMzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODowMS4zNTg1OTUzNzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTcyMTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2xnZV9jb21tX2NtZF9jc3FfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zMjM9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNDg6c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNjg9c3RhdGljIHZvaWQgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgdTE2IG9wY29kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzc1LVxcdGRvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM3NjpcXHRcXHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzctXFx0XFx0XFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE4OjAxLjU1MDMyMzMzN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2NDUzMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21tdW5pY2F0aW9uLCBjb21tYW5kcywgYW5kIGNvbXBsZXRpb24gb2YgYSBjb21tYW5kIHNlcXVlbmNlIChDU1EpIHdpdGhpbiB0aGUgSENMR0UgKGxpa2VseSBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIgb3Igc2ltaWxhciwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uKS4gVGhpcyBmdW5jdGlvbiwgb3Igc3RydWN0dXJlLCBsaWtlbHkgc2lnbmFscyB0aGUgZW5kIG9mIGEgY29tbWFuZCBmbG93LiBJIGJldCBpdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIHByb2Nlc3MuIFdlJ3JlIHByb2JhYmx5IGhhbmRsaW5nIGNvbXBsZXRpb24gd2l0aGluIHRoZSBIQ0xHRSBsYXllci4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYSB0cmlnZ2VyIG9yIGluZm9ybWF0aW9uIHRvIHRoZSB1cHBlciBsYXllcnMgdG8gc2lnbmFsIHRoZSBjb25jbHVzaW9uIG9mIGFuIG9wZXJhdGlvbi4gSXQgaXMgcHJvYmFibHkgaW1wb3J0YW50IHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgcmVsYXRlcyB0byBjb21wbGV0aW9uIGhhbmRsaW5nIHdoaWNoIGlzIHJlYWxseSBpbXBvcnRhbnQgZm9yIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NzksIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODowNS4yOTY3Nzk2NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ4OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbiAzNDk6XFx0e1xcbiAzNTA6XFx0XFx0dTMyIGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbiAzNTE6XFx0XFx0cmV0dXJuIGhlYWQgPT0gKHUzMilody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcXG4gMzUyOlxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9jbWRxX3R4X3RpbWVvdXRfbWFwIGNtZHFfdHhfdGltZW91dF9tYXBbXSA9IHtcXG4gMzU3OlxcdFxcdFxcdHtIQ0xHRV9PUENfQ0ZHX1JTVF9UUklHR0VSLCBIQ0xHRV9DT01NX0NNRFFfQ0ZHX1JTVF9USU1FT1VUfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MDUuMjk2ODgzODAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Nzg0MDM1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2AgTU1JTyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhpcyBgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHYCByZWdpc3Rlci4gVGhlIGRyaXZlciByZWFkcyB0aGlzIHJlZ2lzdGVyIGFuZCBjaGVja3MgaWYgaXRzIHZhbHVlIG1hdGNoZXMgYG5leHRfdG9fdXNlYC4gU2luY2UgdGhlIFBDSSBmdXp6ZXIgcHJvdmlkZXMgcmFuZG9tIE1NSU8gdmFsdWVzLCB0aGVyZSdzIGEgY2hhbmNlIGl0J2xsIGV2ZW50dWFsbHkgaGl0IHRoZSByaWdodCB2YWx1ZSwgb3IgbWF5YmUgZXZlbiBvbiB0aGUgZmlyc3QgdHJ5IGlmIHdlJ3JlIGx1Y2t5LCBidXQgYSB0aW1lb3V0IGlzIGFsc28gcG9zc2libGUuIElmIGEgdGltZW91dCBvY2N1cnMsIHRoZSBjb21tYW5kIGlzIGNvbnNpZGVyZWQgaW5jb21wbGV0ZSBhbmQgcmV0dXJucyBhbiBgLUVCQURFYCBlcnJvci4gSWYgaXQgbWF0Y2hlcywgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmV0dmFsYCBpcyBjYWxsZWQsIGFuZCBpdCBwcm9jZWVkcyB0byByZWFkIHRoZSBkZXNjcmlwdG9yIGZyb20gbWVtb3J5LlxuXG5Ob3csIHRoZSBkZXNjcmlwdG9yIGlzIGluIERNQSBtZW1vcnksIG1lYW5pbmcgdGhlIGhhcmR3YXJlIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhlIHJlc3VsdCB0aGVyZS4gQnV0IHNpbmNlIHdlJ3JlIGZ1enppbmcgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIHRoZSBETUEgbWVtb3J5IHdpbGwganVzdCBjb250YWluIHdoYXRldmVyIHRoZSBkcml2ZXIgd3JvdGUgaW50byBpdC4gQW5kIHRoZSBkcml2ZXIgd3JvdGUgdGhlIGNvbW1hbmQgdGhlcmUuXG5cbkxvb2tpbmcgY2xvc2VyIGF0IGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWxgLCBpdCByZWFkcyBgZGVzY1tudW0gLSAxXS5yZXR2YWxgLiBJbiB0aGUgbm9ybWFsIG9wZXJhdGluZyBjYXNlLCB0aGUgaGFyZHdhcmUgc2hvdWxkIHNldCB0aGlzLCBidXQgaW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIHByb2JhYmx5IGRpZG4ndCwgb3IgaXQganVzdCB6ZXJvZWQgaXQgb3V0LiBUaHVzLCBgcmV0dmFsYCB3aWxsIGJlIDAuIEFuZCAwIG1lYW5zIGBIQ0xHRV9DT01NX0NNRF9FWEVDX1NVQ0NFU1NgLCBtZWFuaW5nIHRoZSBjb21tYW5kIHdpbGwgKnN1Y2NlZWQqISBTbywgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBwYXNzIHRoaXMgaWYgaXQgZ3Vlc3NlcyB0aGUgYEhFQURfUkVHYCBvciBpZiBpdCdzIHplcm8uXG5cbkJ1dCB3YWl0LCBgbmV4dF90b191c2VgIGluY3JlbWVudHMgd2l0aCBlYWNoIGNvbW1hbmQhIFRoZSBmdXp6ZXIgcmV0dXJucyByYW5kb20gdmFsdWVzLiBTbyBpdCBoYXMgYSAxLzJeMzIgY2hhbmNlIG9mIG1hdGNoaW5nIGl0IG9uICplYWNoKiByZWFkLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIG5vdy4gSXQgbWlnaHQgbm90IGJlIHRvdGFsbHkgcmFuZG9tLiBJdCBtaWdodCByZXR1cm4gdmFsdWVzIGl0IGhhcyBzZWVuIGJlZm9yZSwgb3IgaXQgbWlnaHQganVzdCByZXR1cm4gMC4gSWYgaXQncyByZXR1cm5pbmcgMCwgaXQgd2lsbCBvbmx5IG1hdGNoIHdoZW4gYG5leHRfdG9fdXNlYCBpcyAwLlxuXG5XYWl0LCBzeXprYWxsZXIgKmNhbiogaW50ZXJjZXB0IGByZWFkbGAgYW5kIGxlYXJuIHdoaWNoIHZhbHVlcyB0byByZXR1cm4sIHNvIHRoZSBmdXp6ZXIgY291bGQgYmUgc21hcnQuIEhvd2V2ZXIsIGR1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMsIHNvIGxldCdzIHNlZSBob3cgbWFueSBjb21tYW5kcyBhcmUgc2VudCBpbiBgaGNsZ2VfaW5pdF9hZV9kZXZgLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAsIGBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWdgLCBgaGNsZ2VfY2xlYXJfaHdfcmVzb3VyY2VgLCBgaGNsZ2VfZ2V0X2NhcGAsIGBoY2xnZV9xdWVyeV9kZXZfc3BlY3NgLCBgaGNsZ2VfY29uZmlndXJlYCwgYGhjbGdlX2luaXRfbXNpYCwgYGhjbGdlX21pc2NfaXJxX2luaXRgLCBgaGNsZ2VfYWxsb2NfdHFwc2AsIGBoY2xnZV9hbGxvY192cG9ydGAsIGBoY2xnZV9tYXBfdHFwYCwgYW5kIGBoY2xnZV9tYWNfaW5pdGAgcm91dGluZXMsIGFsbCBzZW5kIGNvbW1hbmRzLCBzbyBkb3plbnMgb2YgY29tbWFuZHMgYXJlIHNlbnQuXG5cblNvLCBmb3IgKmVhY2gqIGNvbW1hbmQsIHRoZSBNTUlPIHJlYWQgb2YgYEhFQURfUkVHYCBuZWVkcyB0byBtYXRjaCBgbmV4dF90b191c2VgLiBBbmQgYmVjYXVzZSBgbmV4dF90b191c2VgIGluY3JlbWVudHMgKDEsIDIsIDMsIGV0Yy4pLCB0aGUgZnV6emVyIHdvdWxkIGhhdmUgdG8gcmV0dXJuIDEsIHRoZW4gMiwgdGhlbiAzIGluIHNlcXVlbmNlLiBJICpoaWdobHkqIGRvdWJ0IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgdGhhdCBzbWFydCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBob29rLlxuXG5BY3R1YWxseSwgdGhlIFBDSSBmdXp6ZXIgaW4gc3l6a2FsbGVyIGp1c3QgbWFwcyB0aGUgQkFScyB0byBhIG1lbW9yeSByZWdpb24uIEFuZCB0aGUga2VybmVsIHJlYWRzIGZyb20gdGhhdCBtZW1vcnkgcmVnaW9uLlxuXG5XYWl0LCBzbyByZWFkaW5nIGZyb20gdGhhdCBtZW1vcnkgcmVnaW9uIG1lYW5zIHRoYXQgaXQganVzdCByZXR1cm5zIHdoYXRldmVyIHdhcyB3cml0dGVuIHRoZXJlLCBvciAwIGlmIG5vdGhpbmcgd2FzIHdyaXR0ZW4uIERvZXMgdGhlIGRyaXZlciBldmVuIHdyaXRlIHRvIGBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdgPyBOb3BlLCB0aGUgZHJpdmVyIHdyaXRlcyB0byBgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHYC4gU28gYEhFQURfUkVHYCB3aWxsICphbHdheXMqIHJlYWQgYXMgMCwgb3Igd2hhdGV2ZXIgdGhlIGZ1enplciBpbml0aWFsaXplZCBpdCB0by5cblxuSWYgYEhFQURfUkVHYCBpcyBhbHdheXMgMCwgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgIHdpbGwgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBuZXh0X3RvX3VzZWAgd3JhcHMgYXJvdW5kIHRvIDAuIFRoaXMgd2lsbCB0YWtlIGBkZXNjX251bWAgY29tbWFuZHMuIEJ1dCBsZXQncyBsb29rIGNsb3Nlci4gYGhjbGdlX2NvbW1fY21kX3NlbmRgIGhhcyB0aGlzIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChudW0gXHUwMDNlIGhjbGdlX2NvbW1fcmluZ19zcGFjZShcdTAwMjZody1cdTAwM2VjbXEuY3NxKSkge1xuXHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gaGNsZ2VfY29tbV9yZWFkX2RldlxuXG4iLCJJbnB1dFRva2VucyI6NTMxOTIsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MjEuMDgwOTI1MDE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM1NzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9Nz1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb25maWdfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIxLVxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCByZWdfdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjIyOlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjMtXFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9UQUlMX1JFRywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTMyMz1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTMyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjMyOTpcXHRoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTMzMC1cXHRybWIoKTsgLyogTWFrZSBzdXJlIGhlYWQgaXMgcmVhZHkgYmVmb3JlIHRvdWNoIGFueSBkYXRhICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTM0OD1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNTA6XFx0dTMyIGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzUxLVxcdHJldHVybiBoZWFkID09ICh1MzIpaHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQ3Mz1pbnQgaGNsZ2VfY29tbV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00OTUtXFx0XFx0Y3NxLVxcdTAwM2VuZXh0X3RvX2NsZWFuID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ5NjpcXHRcXHRcXHRoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDk3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NTI0PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX3VuaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTI4LVxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyOTpcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUzMC1cXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgtMzctI2RlZmluZSBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUdcXHRcXHQweDI3MDEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDozODojZGVmaW5lIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR1xcdFxcdDB4MjcwMTRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTM5LSNkZWZpbmUgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHXFx0MHgyNzAxOFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYz05PXN0YXRpYyBjb25zdCB1MzIgY21kcV9yZWdfYWRkcl9saXN0W10gPSB7SENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0xfUkVHLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYy0xMi1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmM6MTM6XFx0XFx0XFx0XFx0XFx0IEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfcmVncy5jLTE0LVxcdFxcdFxcdFxcdFxcdCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9yZWdzLmM9OD1zdGF0aWMgY29uc3QgdTMyIGNtZHFfcmVnX2FkZHJfbGlzdFtdID0ge0hDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYy0xMS1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYzoxMjpcXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYy0xMy1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODoyMS4xNTUyOTAzOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczNzIxNDY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBITlMzIERyaXZlciBTUklPViBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGUgZnV6emVyIHRocm93cyByYW5kb20gTU1JTyBhdCBgaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKWAsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHdlJ2xsIGdldCBhIG1lYW5pbmdmdWwgcmVzdWx0IHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGxvZ2ljLiBUaGUgZnV6emVyIGhhcyBhIG1pbmlzY3VsZSBjaGFuY2Ugb2YgZ2V0dGluZyB0aGUgdmFsdWUgYDFgIG91dCBvZiB0aGUgZ2F0ZSB3aXRoIGBuZXh0X3RvX3VzZWAgc2V0IHRvIGAxYC4gQnV0IHRoZW4sIHdpdGhpbiB0aGUgbG9vcCwgdGhlIGNvZGUgY2FsbHMgdGhlIHNhbWUgcmVnaXN0ZXIgKmFnYWluKiB0aGlydHkgdGhvdXNhbmQgdGltZXMgdmlhIGBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShodylgLiBUaGlzIGdpdmVzIHVzIGEgc2xpZ2h0bHkgYmV0dGVyIGNoYW5jZSwgMzAwMDAvNCBiaWxsaW9uIG9yIC4wMDA3NSUsIGJ1dCBzdGlsbCBlZmZlY3RpdmVseSB6ZXJvLCBlc3BlY2lhbGx5IGFzIHRoZSBuZXh0IG9wZXJhdGlvbiByZXF1aXJlcyBhIHZhbHVlIG9mIGAyYC4gIEdpdmVuIHRoZSBzaGVlciBudW1iZXIgb2Ygc3Vic2VxdWVudCBjb21tYW5kcywgcGFzc2luZyBhbGwgdGhlIGNoZWNrcyBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlLiBUaGlzIG1lYW5zIHRoZSBkcml2ZXIgcHJvYmUsIGFuZCBjb25zZXF1ZW50bHksIHRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCB3aWxsIGZhaWwuXG5cblRoZSBjcml0aWNhbCBpc3N1ZSBpcyB0aGUgYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIGNhbGxiYWNrLCBhbmQgd2hpbGUgaXQgKmNvdWxkKiBiZSBpbnZva2VkIHZpYSBzeXNmcywgdGhpcyBwYXRoIGlzIGJsb2NrZWQgaWYgdGhlIHByb2JlIGZhaWxzLiBUaGUgZGV2aWNlIGlzbid0IHByb3Blcmx5IGJvdW5kIHRvIHRoZSBkcml2ZXIgaWYgYHByb2JlYCBmYWlscywgc28gd3JpdGluZyB0byBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3NyaW92X251bXZmc2Agd2lsbCBiZSBhIGRlYWQgZW5kLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiB3ZSB3ZXJlIHNvbWVob3cgYWJsZSB0byB0cmlnZ2VyIGBzcmlvdl9jb25maWd1cmVgLCB0aGUgY29kZSB3b3VsZCBjcmFzaCBiZWNhdXNlIGBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTClgIGlzIGNhbGxlZCBkdXJpbmcgcHJvYmUgZmFpbHVyZSBhbmQgYHNyaW92X2NvbmZpZ3VyZWAgdGhlbiBkZXJlZmVyZW5jZXMgYSBOVUxMIHBvaW50ZXIuIEhvd2V2ZXIsIHRoZSBmaXJzdCBzY2VuYXJpbyBpcyB0aGUgcmVhbGl0eTsgaXQgaXNuJ3QgcmVhY2hlZCBiZWNhdXNlIHRoZSBwcm9iZSBmYWlscywgc28gdGhlIFBDSSBjb3JlIHdvdWxkIG5vdCBsZXQgeW91IHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlLlxuXG5Fc3NlbnRpYWxseSwgKmJlY2F1c2UqIHRoZSBwcm9iZSBmYWlscywgdGhlIGNyaXRpY2FsIGBzcmlvdl9jb25maWd1cmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB1bnJlYWNoYWJsZS5cblxuTm93LCB0byBjb25maXJtIHRoaXMgY29uY2x1c2lvbiwgSSdkIGNoZWNrIGZvciBzeXprYWxsZXIgc3VwcG9ydCBmb3IgSE5TMywgYnV0IEkgbGFjayBhY2Nlc3MgdG8gdGhlIHRvb2xzLiBJJ20gb3BlcmF0aW5nIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHByYWN0aWNlcywgd2hpY2ggZGljdGF0ZSB0aGF0IHBoeXNpY2FsIG5ldHdvcmsgZHJpdmVycyB3aXRob3V0IGVtdWxhdG9ycyBhcmVuJ3QgcHJhY3RpY2FsbHkgZnV6emFibGUgZm9yIGZ1bmN0aW9uYWwgbG9naWMuIEJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMsIEkgYW0gY29uZmlkZW50IHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gY2hlY2tpbmcgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGEgdmlydHVhbCBkZXZpY2UuIFwiSE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XCIgc291bmRzIGxpa2UgYSBQQ0llIE5JQywgbm90IHZpcnRpbyBvciB2RFBBLiBObywgdGhpcyBhcHBlYXJzIHRvIGJlIGEgcGh5c2ljYWwgTklDLiBJIGFtIGNoZWNraW5nIGZvciBhbnkgbW9ja3Mgb3IgYWx0ZXJuYXRpdmUgdmlydHVhbCBkZXZpY2UgYmFja2VuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODozNC44OTI1MDc1MzVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODg4MTE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MzQuOTU4NDEwMDY4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTYyNzI0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFwiZHVtbXlcIioqXG5cblJpZ2h0LCBzbyB0aGUgd29yZCBcImR1bW15XCIganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJbW1lZGlhdGVseSwgSSdtIGFscmVhZHkgc2lmdGluZyB0aHJvdWdoIGl0cyBwb3RlbnRpYWwgbWVhbmluZ3MgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgdmFyaWFibGU/IEEgdGVzdCBjYXNlPyBQZXJoYXBzIGEgd2F5IHRvIHNpbXBsaWZ5IGFuIGFyZ3VtZW50IG9yIG1vZGVsIGJ5IGludGVudGlvbmFsbHkgaWdub3JpbmcgY29tcGxleGl0aWVzPyBPciBpcyBpdCBiZWluZyB1c2VkIGRpc3BhcmFnaW5nbHksIGFzIGluLCBhIFwiZHVtbXkgdmFyaWFibGU/XCIgVGhlIGFtYmlndWl0eSBoZXJlIHJlcXVpcmVzIGEgYml0IG1vcmUgaW5mb3JtYXRpb24uIFdoYXTigJlzIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBpbiBxdWVzdGlvbj8gSG93IGNvbXBsZXggaXMgdGhlIHN5c3RlbSBiZWluZyBkZXNjcmliZWQ/IFdoYXQgaXMgdGhpcyBcImR1bW15XCIgc3VwcG9zZWQgdG8gKmRvKj8gV2l0aG91dCBjb250ZXh0LCBcImR1bW15XCIgY291bGQgcmVwcmVzZW50IGEgYnJvYWQgc3BlY3RydW0gb2YgdGhpbmdzLiBJdCdzIGEgbG9hZGVkIHRlcm0sIGluaGVyZW50bHkgY2Fycnlpbmcgc29tZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvciBzaW1wbGlmaWNhdGlvbiwgYnV0IHRoZSBleGFjdCBuYXR1cmUgb2YgdGhhdCBhYnN0cmFjdGlvbiBpcyB3aGF0J3MgY3J1Y2lhbC4gSSdsbCBuZWVkIG1vcmUgZGV0YWlsIHRvIGV2YWx1YXRlIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGFwcHJvcHJpYXRlbmVzcy4gVGhpcyB0aG91Z2h0IG5lZWRzIHVucGFja2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MzguNTE0Njg1NjkyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIzMTMxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVtbXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODozOC41NzQ5MjQ2ODZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTgyNTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyB0aGUgXCJlbXVsXCIgQW5nbGUqKlxuXG5IbW0sIFwiZW11bFwiLi4uIFRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGluY29tcGxldGUgd2l0aG91dCBjb25zaWRlcmluZyB0aGUgXCJlbXVsXCIgYXNwZWN0LiBOb3csIFwiZW11bFwiIGNvdWxkIHJlZmVyIHRvIGEgZmV3IGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJZiB3ZSdyZSB0YWxraW5nIGFib3V0IGVtdWxhdGlvbiwgdGhlbiBwZXJoYXBzIHdlJ3JlIGxvb2tpbmcgYXQgYSBzb2Z0d2FyZSBzb2x1dGlvbiB0byB0aGUgaXNzdWUuIE9yLCBwZXJoYXBzIGl0IHBvaW50cyB0byBzb21ldGhpbmcgcmVsYXRlZCB0byBhbiBlbXVsYXRvciBpbiBhIHNwZWNpZmljIGZyYW1ld29yay4gV2UgbmVlZCB0byBkZWZpbmUgZXhhY3RseSB3aGF0IGNvbnRleHQgaXMgcmVsZXZhbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFuZCB3aGV0aGVyIGl0J3MgbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBicm9hZGVyIGlzc3VlcyB0aGF0IGFyZSBpbiBwbGF5LiBJIHNob3VsZCBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlciB3aGF0IGtpbmQgb2YgXCJlbXVsXCIgaXMgdGhlIHN1YmplY3Qgb2YgY29udGVtcGxhdGlvbiwgYW5kIGhvdyBpdCBpbmZvcm1zIGFueSBwcmV2aW91c2x5IGNvbnNpZGVyZWQgc29sdXRpb25zLiBVbHRpbWF0ZWx5LCB0aGF0J3MgdGhlIGNydWNpYWwgcG9pbnQgLSBob3cgZG9lcyBpdCBmaXQ/IERvZXMgaXQgcmVwcmVzZW50IGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoLCBhIHN1YnNldCBvZiBvdGhlciBjb25jZXJucywgb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50PyBJdOKAmXMgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIHJlZ2FyZGxlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODo0Mi4xMjA3NTQzMzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDkzMjMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6NDIuMTg3ODU3ODY1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Njg5MjgwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQncyBjbGVhciBpdCdzIGRlYWxpbmcgd2l0aCBhIHZlcnkgc3BlY2lmaWMsIGhhcmR3YXJlLWxldmVsIGFzcGVjdDogdGhlIEhOUzMgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgVkYgcmVwcmVzZW50b3JzLCBuZXRkZXZzIGNyZWF0ZWQgb24gdGhlIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgdG8gcmVwcmVzZW50IFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLCBwYXJ0aWN1bGFybHkgZm9yIHN3aXRjaGRldiBmdW5jdGlvbmFsaXR5LCBsaWtlIFRDIGZsb3dlciBvZmZsb2FkLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlLCBjb21wYXJhYmxlIHRvIHdoYXQgeW91IHNlZSB3aXRoIE1lbGxhbm94IENvbm5lY3RYIG9yIEludGVsIElDRSBOSUNzLlxuXG5UaGUgY3J1Y2lhbCBpc3N1ZSBpcyBpdHMgaW5oZXJlbnQgaGFyZHdhcmUgZGVwZW5kZW5jZS4gVGhpcyBmdW5jdGlvbmFsaXR5IHJlbGllcyBoZWF2aWx5IG9uIHRoZSBQRiBiZWluZyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29tbXVuaWNhdGluZyBmbGF3bGVzc2x5IHdpdGggaXRzIGZpcm13YXJlLiBUaGlzIGxldmVsIG9mIGludGVyYWN0aW9uLCBiZWNhdXNlIGl0J3Mgc28gbG93LWxldmVsIGFuZCBoYXJkd2FyZS1zcGVjaWZpYywgcmVuZGVycyB0aGUgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIGVudmlyb25tZW50LCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBUaGVyZSBpcyBubyB3YXkgSSBjb3VsZCBmdXp6IHRoaXMgY29kZSBpbiBRRU1VLlxuXG5UaGVyZWZvcmUsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIG1hdGNoaW5nIHRoZSBwcm9tcHQncyBjcml0ZXJpYSwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIGxhc3QgYnVsbGV0IHBvaW50IG9mIHRoZSBcIm5vdCB3b3J0aCBmdXp6aW5nXCIgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgYmVjYXVzZSBpdCByZWxpZXMgb24gdGhlIGNvbXBsZXRlIHN0YXRlIG9mIGEgcGh5c2ljYWwgZGV2aWNlIHdpdGggZmlybXdhcmUgaW50ZXJhY3Rpb24uXG5cbkkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlIHJlYXNvbnMgb3V0bGluZWQsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjE0LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODo0OS43NTY3ODkwODlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFZGIHJlcHJlc2VudG9yIHN1cHBvcnQgdG8gdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmRzIHRoYXQgcmVxdWlyZXMgY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMgKGUuZy4sIHdhaXRpbmcgZm9yIGNvbW1hbmQgcXVldWUgY29tcGxldGlvbnMgdmlhIE1NSU8pIGR1cmluZyBkZXZpY2UgcHJvYmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf7w6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 21:07:38 +0000 UTC FinishedAt: 2026-07-01 21:18: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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU0NmQ4N2NiMmQ0MGU3ZWQ2MTA1MGEyOGYxYzJmNDYxOTA4OWFmMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDIxOjE1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGVcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxuQEAgLTI0LDYgJiM0MzsyNCw2IEBAIGhjbGdldmYtb2JqcyA9IGhuczN2Zi9oY2xnZXZmX21haW4ubyBobnMzdmYvaGNsZ2V2Zl9tYngubyAgaG5zM3ZmL2hjbGdldmZfZGV2bGluXG4gb2JqLSQoQ09ORklHX0hOUzNfSENMR0UpICYjNDM7PSBoY2xnZS5vIGhjbGdlLWNvbW1vbi5vXG4gaGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXG4gXHRcdGhuczNwZi9oY2xnZV9tYngubyBobnMzcGYvaGNsZ2VfZXJyLm8gIGhuczNwZi9oY2xnZV9kZWJ1Z2ZzLm8gaG5zM3BmL2hjbGdlX3B0cC5vIGhuczNwZi9oY2xnZV9kZXZsaW5rLm8gXFxcbi1cdFx0aG5zM3BmL2hjbGdlX2ZkLm9cbiYjNDM7XHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuIFxuIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSAmIzQzOz0gaG5zM3BmL2hjbGdlX2RjYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi5kMmMxYzczNjE3YTQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmhcbkBAIC03OTYsNiAmIzQzOzc5Niw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8pKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgKnN0YXR1c19jb2RlKTtcbiBcdHZvaWQgKCpjbGVhbl92Zl9jb25maWcpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpO1xuJiM0MztcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbiYjNDM7XHR2b2lkICgqZGVzdHJveV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpO1xuIFx0aW50ICgqZ2V0X2RzY3BfcHJpbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1OCBkc2NwLFxuIFx0XHRcdCAgICAgdTggKnRjX21hcF9tb2RlLCB1OCAqcHJpb3JpdHkpO1xuIFx0dm9pZCAoKmdldF93b2wpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXG5pbmRleCA2ZWNiMzJlMjhlNzlhOC4uZjM5M2U5ZjgxZmE2OWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcbkBAIC0zMjExLDYgJiM0MzszMjExLDcgQEAgc3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gICoqL1xuIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbiB7XG4mIzQzO1x0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcbkBAIC0zMjIwLDEzICYjNDM7MzIyMSwyNCBAQCBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4gXG4gXHRpZiAobnVtX3Zmcykge1xuIFx0XHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG51bV92ZnMpO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1NSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cJiMzNDssIHJldCk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VjcmVhdGVfdmZfcmVwcyhhZV9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIG51bV92ZnMpO1xuJiM0MztcdFx0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIG51bV92ZnM7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XG4gXHRcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XG4gXG4mIzQzO1x0XHRpZiAoYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXN0cm95X3ZmX3JlcHMpXG4mIzQzO1x0XHRcdGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XG4gXHRcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFx0XHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcbmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC92eGxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aGNsZ2VfZmQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hjbGdlX21haW4uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoY2xnZV92Zl9yZXAuaFwmIzM0O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5X2luZm8gbWV0YV9kYXRhX2tleV9pbmZvW10gPSB7XG4gXHR7IFBBQ0tFVF9UWVBFX0lELCA2IH0sXG5AQCAtMjI4NSw2ICYjNDM7MjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZSlcbiB7XG5AQCAtMjI5MiwxMCAmIzQzOzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuIFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWM7XG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbiA9IFx1MDAyNmZsb3ctXHUwMDNlYWN0aW9uO1xuJiM0MztcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVx1MDAzZW5pYy5raW5mby5udW1fdHFwcztcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuIFx0aW50IHRjO1xuIFxuIFx0aWYgKCFmbG93X2FjdGlvbl9oYXNfZW50cmllcyhcdTAwMjZmbG93LVx1MDAzZWFjdGlvbikpIHtcbiYjNDM7XHRcdGlmICh2cG9ydCAhPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtWRiBkb2VzIG5vdCBzdXBwb3J0IHNlbGVjdCBUQyBhY3Rpb25cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHR0YyA9IHRjX2NsYXNzaWRfdG9faHd0YyhoYW5kbGUtXHUwMDNlbmV0ZGV2LCBjbHNfZmxvd2VyLVx1MDAzZWNsYXNzaWQpO1xuIFx0XHRpZiAodGMgXHUwMDNjIDAgfHwgdGMgXHUwMDNlIGhkZXYtXHUwMDNldGNfbWF4KSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG5AQCAtMjMxMSwxMSAmIzQzOzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0YWN0ID0gXHUwMDI2YWN0aW9uLVx1MDAzZWVudHJpZXNbMF07XG4gXHRzd2l0Y2ggKGFjdC1cdTAwM2VpZCkge1xuIFx0Y2FzZSBGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HOlxuLVx0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gaGFuZGxlLVx1MDAzZWtpbmZvLm51bV90cXBzKSB7XG4mIzQzO1x0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gbnVtX3RxcHMpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiBcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3F1ZXVlIGlkICgldSkgc2hvdWxkIGJlIGxlc3MgdGhhbiAldVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgICAgIGFjdC1cdTAwM2VyeF9xdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGhhbmRsZS1cdTAwM2VraW5mby5udW1fdHFwcyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWN0LVx1MDAzZXJ4X3F1ZXVlLCBudW1fdHFwcyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbkBAIC0yNDIzLDEyICYjNDM7MjQzMSwxMSBAQCBzdGF0aWMgaW50IGhjbGdlX2NoZWNrX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuLVx0XHRcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7c3RhdGljIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4ge1xuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24uZXh0YWNrO1xuLVx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xuLVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4gXHRzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMjQ1MSwxNCAmIzQzOzI0NTgsMTQgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpO1xuJiM0MztcdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIHZwb3J0LCBjbHNfZmxvd2VyLCBydWxlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a2ZyZWUocnVsZSk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydWxlLVx1MDAzZWxvY2F0aW9uID0gY2xzX2Zsb3dlci1cdTAwM2Vjb21tb24ucHJpbyAtIDE7XG4tXHRydWxlLVx1MDAzZXZmX2lkID0gMDtcbiYjNDM7XHRydWxlLVx1MDAzZXZmX2lkID0gdnBvcnQtXHUwMDNldnBvcnRfaWQ7XG4gXHRydWxlLVx1MDAzZWNsc19mbG93ZXIuY29va2llID0gY2xzX2Zsb3dlci1cdTAwM2Vjb29raWU7XG4gXHRydWxlLVx1MDAzZXJ1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7XG4gXG5AQCAtMjQ2OSw2ICYjNDM7MjQ3NiwyMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbih2cG9ydC1cdTAwM2ViYWNrLCB2cG9ydCwgY2xzX2Zsb3dlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVx1MDAzZWhkZXYsIHZmX3JlcC1cdTAwM2V2cG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgIGNsc19mbG93ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXG4ge1xuQEAgLTI1MjIsNiAmIzQzOzI1NDQsMTQgQEAgaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXIoXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWMsIGNsc19mbG93ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhjbGdlX3N5bmNfZmRfbGlzdChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QpXG4ge1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxuaW5kZXggMmY2NmNjOWMzYzY1YzQuLjIwMGQ4MWNlMTJjOGQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXG5AQCAtNiw2ICYjNDM7Niw4IEBAXG4gXG4gc3RydWN0IGhuYWUzX2hhbmRsZTtcbiBzdHJ1Y3QgaGNsZ2VfZGV2O1xuJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwO1xuJiM0MztzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcbiBcbiBpbnQgaGNsZ2VfaW5pdF9mZF9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldik7XG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuQEAgLTI2LDYgJiM0MzsyOCwxMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIGludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKTtcbiBib29sIGhjbGdlX2lzX2Nsc19mbG93ZXJfYWN0aXZlKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSk7XG4mIzQzO1xuJiM0MztpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuJiM0MztpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGludCBoY2xnZV9jbGVhcl9hcmZzX3J1bGVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuIHZvaWQgaGNsZ2Vfc3luY19mZF90YWJsZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uNWY4ODE4N2YxY2E4M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMTA1MzQsNiAmIzQzOzEwNTM0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xuIFx0LmdldF90c19pbmZvID0gaGNsZ2VfcHRwX2dldF90c19pbmZvLFxuIFx0LmdldF9saW5rX2RpYWdub3Npc19pbmZvID0gaGNsZ2VfZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8sXG4gXHQuY2xlYW5fdmZfY29uZmlnID0gaGNsZ2VfY2xlYW5fdnBvcnRfY29uZmlnLFxuJiM0MztcdC5jcmVhdGVfdmZfcmVwcyA9IGhjbGdlX2NyZWF0ZV92Zl9yZXBzLFxuJiM0MztcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXG4gXHQuZ2V0X2RzY3BfcHJpbyA9IGhjbGdlX2dldF9kc2NwX3ByaW8sXG4gXHQuZ2V0X3dvbCA9IGhjbGdlX2dldF93b2wsXG4gXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbmluZGV4IDc0MTk0ODE0MjJjMzEwLi40ZjExYjljMzhlNjllMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbkBAIC0xNyw2ICYjNDM7MTcsOSBAQFxuICNpbmNsdWRlIFwmIzM0O2huYWUzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoY2xnZV9jb21tX3Jzcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGNsZ2VfY29tbV90cXBfc3RhdHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoY2xnZV92Zl9yZXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGhjbGdlX3ZmX3JlcDtcbiBcbiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OIFwmIzM0OzEuMFwmIzM0O1xuICNkZWZpbmUgSENMR0VfRFJJVkVSX05BTUUgXCYjMzQ7aGNsZ2VcJiMzNDtcbkBAIC05MzUsNiAmIzQzOzkzOCw5IEBAIHN0cnVjdCBoY2xnZV9kZXYge1xuIFx0Ym9vbCBjdXJfcHJvbWlzYztcbiBcdGludCBudW1fYWxsb2NfdmZzO1x0LyogQWN0dWFsIG51bWJlciBvZiBWRnMgYWxsb2NhdGVkICovXG4gXG4mIzQzO1x0c3RydWN0IGhjbGdlX3ZmX3JlcFx0Kip2Zl9yZXBzO1xuJiM0MztcdHUxNlx0XHRcdG51bV92Zl9yZXBzO1xuJiM0MztcbiBcdHN0cnVjdCBoY2xnZV9jb21tX3RxcCAqaHRxcDtcbiBcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1MTMzNjA0MGQ2ZmIzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmNcbkBAIC0wLDAgJiM0MzsxLDE1OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8vIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC5cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGNsZ2VfbWFpbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hjbGdlX3ZmX3JlcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hjbGdlX2ZkLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBoY2xnZV92Zl9yZXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSBzbnByaW50ZihidWYsIGxlbiwgXCYjMzQ7cGYldXZmJXVcJiMzNDssIFBDSV9GVU5DKGhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXZmbiksXG4mIzQzO1x0XHQgICAgICB2Zl9yZXAtXHUwMDNldnBvcnQtXHUwMDNldnBvcnRfaWQgLSAxKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNlPSBsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IGNiX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdGNfY2xzX2Nhbl9vZmZsb2FkX2FuZF9jaGFpbjAodmZfcmVwLVx1MDAzZW5ldGRldiwgdHlwZV9kYXRhKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9DTFNGTE9XRVI6XG4mIzQzO1x0XHRzd2l0Y2ggKGNsc19mbG93ZXItXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxuJiM0MztcdFx0XHRyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcbiYjNDM7XHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbiYjNDM7XHRcdFx0cmV0dXJuIGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHZmX3JlcCwgY2xzX2Zsb3dlcik7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQoaGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBoY2xnZV92Zl9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4mIzQzO1x0XHRyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmhjbGdlX3ZmX3JlcF9ibG9ja19jYl9saXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYixcbiYjNDM7XHRcdFx0XHRcdFx0ICB2Zl9yZXAsIHZmX3JlcCwgdHJ1ZSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHMgPSB7XG4mIzQzO1x0Lm5kb19zdGFydF94bWl0XHRcdD0gaGNsZ2VfdmZfcmVwX3htaXQsXG4mIzQzO1x0Lm5kb19nZXRfcGh5c19wb3J0X25hbWVcdD0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSxcbiYjNDM7XHQubmRvX3NldHVwX3RjXHRcdFx0PSBoY2xnZV92Zl9yZXBfc2V0dXBfdGMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoY2xnZV92Zl9yZXBfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XG4mIzQzO1x0bmRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4mIzQzO1x0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3ZmcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBhZV9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXA7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0Y2hhciBuYW1lW0lGTkFNU0laXTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aGRldi1cdTAwM2V2Zl9yZXBzID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCAqKSxcbiYjNDM7XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWhkZXYtXHUwMDNldmZfcmVwcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgSUZOQU1TSVosIFwmIzM0OyVzX3JlcCVkXCYjMzQ7LFxuJiM0MztcdFx0XHQgaGRldi1cdTAwM2V2cG9ydFswXS5uaWMubmV0ZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCksIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5FVF9OQU1FX1VOS05PV04sIGV0aGVyX3NldHVwKTtcbiYjNDM7XHRcdGlmICghbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoY2xnZV92Zl9yZXBfbmV0X3NldHVwKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRcdHZmX3JlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdFx0dmZfcmVwLVx1MDAzZWhkZXYgPSBoZGV2O1xuJiM0MztcdFx0dmZfcmVwLVx1MDAzZXZwb3J0ID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFtpICYjNDM7IEhDTEdFX1ZGX1ZQT1JUX1NUQVJUX05VTV07XG4mIzQzO1x0XHR2Zl9yZXAtXHUwMDNlbmV0ZGV2ID0gbmRldjtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXZmX3JlcHNbaV0gPSB2Zl9yZXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZW51bV92Zl9yZXBzID0gbnVtX3ZmcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR3aGlsZSAoaS0tKVxuJiM0MztcdFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cdTAwM2V2Zl9yZXBzW2ldLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0a2ZyZWUoaGRldi1cdTAwM2V2Zl9yZXBzKTtcbiYjNDM7XHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBOVUxMO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBhZV9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZGV2LVx1MDAzZXZmX3JlcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhkZXYtXHUwMDNlbnVtX3ZmX3JlcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaGRldi1cdTAwM2V2Zl9yZXBzW2ldKVxuJiM0MztcdFx0XHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVx1MDAzZXZmX3JlcHNbaV0tXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGhkZXYtXHUwMDNldmZfcmVwcyk7XG4mIzQzO1x0aGRldi1cdTAwM2V2Zl9yZXBzID0gTlVMTDtcbiYjNDM7XHRoZGV2LVx1MDAzZW51bV92Zl9yZXBzID0gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oXG5AQCAtMCwwICYjNDM7MSwyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7ICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC4gKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19IQ0xHRV9WRl9SRVBfSFxuJiM0MzsjZGVmaW5lIF9fSENMR0VfVkZfUkVQX0hcbiYjNDM7XG4mIzQzO3N0cnVjdCBobmFlM19hZV9kZXY7XG4mIzQzO3N0cnVjdCBoY2xnZV9kZXY7XG4mIzQzO3N0cnVjdCBoY2xnZV92cG9ydDtcbiYjNDM7c3RydWN0IG5ldF9kZXZpY2U7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwIHtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfZGV2XHQqaGRldjtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfdnBvcnRcdCp2cG9ydDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBoY2xnZV9jcmVhdGVfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbiYjNDM7dm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTQ2ZDg3Y2IyZDQwZTdlZDYxMDUwYTI4ZjFjMmY0NjE5MDg5YWYxNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMjE6MTU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlCmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUKQEAgLTI0LDYgJiM0MzsyNCw2IEBAIGhjbGdldmYtb2JqcyA9IGhuczN2Zi9oY2xnZXZmX21haW4ubyBobnMzdmYvaGNsZ2V2Zl9tYngubyAgaG5zM3ZmL2hjbGdldmZfZGV2bGluCiBvYmotJChDT05GSUdfSE5TM19IQ0xHRSkgJiM0Mzs9IGhjbGdlLm8gaGNsZ2UtY29tbW9uLm8KIGhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcCiAJCWhuczNwZi9oY2xnZV9tYngubyBobnMzcGYvaGNsZ2VfZXJyLm8gIGhuczNwZi9oY2xnZV9kZWJ1Z2ZzLm8gaG5zM3BmL2hjbGdlX3B0cC5vIGhuczNwZi9oY2xnZV9kZXZsaW5rLm8gXAotCQlobnMzcGYvaGNsZ2VfZmQubwomIzQzOwkJaG5zM3BmL2hjbGdlX2ZkLm8gaG5zM3BmL2hjbGdlX3ZmX3JlcC5vCiAKIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSAmIzQzOz0gaG5zM3BmL2hjbGdlX2RjYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaAppbmRleCBhODc5OGVlY2Q5ZmJkMC4uZDJjMWM3MzYxN2E0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaApAQCAtNzk2LDYgJiM0Mzs3OTYsOCBAQCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHsKIAlpbnQgKCpnZXRfbGlua19kaWFnbm9zaXNfaW5mbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQkJCSAgICAgICB1MzIgKnN0YXR1c19jb2RlKTsKIAl2b2lkICgqY2xlYW5fdmZfY29uZmlnKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTsKJiM0MzsJaW50ICgqY3JlYXRlX3ZmX3JlcHMpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpOwomIzQzOwl2b2lkICgqZGVzdHJveV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpOwogCWludCAoKmdldF9kc2NwX3ByaW8pKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTggZHNjcCwKIAkJCSAgICAgdTggKnRjX21hcF9tb2RlLCB1OCAqcHJpb3JpdHkpOwogCXZvaWQgKCpnZXRfd29sKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jCmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMKQEAgLTMyMTEsNiAmIzQzOzMyMTEsNyBAQCBzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKICAqKi8KIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcykKIHsKJiM0MzsJc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSAmYW1wOyZhbXA7IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkgewpAQCAtMzIyMCwxMyAmIzQzOzMyMjEsMjQgQEAgc3RhdGljIGludCBobnMzX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKQogCiAJaWYgKG51bV92ZnMpIHsKIAkJcmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7U1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxuJiMzNDssIHJldCk7Ci0JCWVsc2UKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKGFlX2Rldi0mZ3Q7b3BzLSZndDtjcmVhdGVfdmZfcmVwcykgewomIzQzOwkJCQlyZXQgPSBhZV9kZXYtJmd0O29wcy0mZ3Q7Y3JlYXRlX3ZmX3JlcHMoYWVfZGV2LAomIzQzOwkJCQkJCQkJICBudW1fdmZzKTsKJiM0MzsJCQkJaWYgKHJldCkKJiM0MzsJCQkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXG4mIzM0OywKJiM0MzsJCQkJCQlyZXQpOwomIzQzOwkJCX0KIAkJCXJldHVybiBudW1fdmZzOwomIzQzOwkJfQogCX0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHsKIAkJaW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTsKIAomIzQzOwkJaWYgKGFlX2Rldi0mZ3Q7b3BzLSZndDtkZXN0cm95X3ZmX3JlcHMpCiYjNDM7CQkJYWVfZGV2LSZndDtvcHMtJmd0O2Rlc3Ryb3lfdmZfcmVwcyhhZV9kZXYpOwogCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKIAkJaG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jCmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC92eGxhbi5oJmd0OwogI2luY2x1ZGUgJiMzNDtoY2xnZV9mZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGNsZ2VfbWFpbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX3ZmX3JlcC5oJiMzNDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlfaW5mbyBtZXRhX2RhdGFfa2V5X2luZm9bXSA9IHsKIAl7IFBBQ0tFVF9UWVBFX0lELCA2IH0sCkBAIC0yMjg1LDYgJiM0MzsyMjg2LDcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfY2xzX2tleV9pcF90b3MoY29uc3Qgc3RydWN0IGZsb3dfcnVsZSAqZmxvdywKIH0KIAogc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LAogCQkJCSAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyLAogCQkJCSAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKQogewpAQCAtMjI5MiwxMCAmIzQzOzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7CiAJc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gJmFtcDtoZGV2LSZndDt2cG9ydFswXS5uaWM7CiAJc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24gPSAmYW1wO2Zsb3ctJmd0O2FjdGlvbjsKJiM0MzsJdTE2IG51bV90cXBzID0gdnBvcnQtJmd0O25pYy5raW5mby5udW1fdHFwczsKIAlzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDsKIAlpbnQgdGM7CiAKIAlpZiAoIWZsb3dfYWN0aW9uX2hhc19lbnRyaWVzKCZhbXA7Zmxvdy0mZ3Q7YWN0aW9uKSkgewomIzQzOwkJaWYgKHZwb3J0ICE9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0pIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtWRiBkb2VzIG5vdCBzdXBwb3J0IHNlbGVjdCBUQyBhY3Rpb24mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwogCQl0YyA9IHRjX2NsYXNzaWRfdG9faHd0YyhoYW5kbGUtJmd0O25ldGRldiwgY2xzX2Zsb3dlci0mZ3Q7Y2xhc3NpZCk7CiAJCWlmICh0YyAmbHQ7IDAgfHwgdGMgJmd0OyBoZGV2LSZndDt0Y19tYXgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLApAQCAtMjMxMSwxMSAmIzQzOzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAogCWFjdCA9ICZhbXA7YWN0aW9uLSZndDtlbnRyaWVzWzBdOwogCXN3aXRjaCAoYWN0LSZndDtpZCkgewogCWNhc2UgRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORzoKLQkJaWYgKGFjdC0mZ3Q7cnhfcXVldWUgJmd0Oz0gaGFuZGxlLSZndDtraW5mby5udW1fdHFwcykgewomIzQzOwkJaWYgKGFjdC0mZ3Q7cnhfcXVldWUgJmd0Oz0gbnVtX3RxcHMpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAogCQkJCQkgICAgICAgJiMzNDtxdWV1ZSBpZCAoJXUpIHNob3VsZCBiZSBsZXNzIHRoYW4gJXUmIzM0OywKLQkJCQkJICAgICAgIGFjdC0mZ3Q7cnhfcXVldWUsCi0JCQkJCSAgICAgICBoYW5kbGUtJmd0O2tpbmZvLm51bV90cXBzKTsKJiM0MzsJCQkJCSAgICAgICBhY3QtJmd0O3J4X3F1ZXVlLCBudW1fdHFwcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yNDIzLDEyICYjNDM7MjQzMSwxMSBAQCBzdGF0aWMgaW50IGhjbGdlX2NoZWNrX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKLQkJCSBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcikKJiM0MztzdGF0aWMgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQogewogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5leHRhY2s7Ci0Jc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpOwotCXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKIAlzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTsKIAlpbnQgcmV0OwogCkBAIC0yNDUxLDE0ICYjNDM7MjQ1OCwxNCBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpOwomIzQzOwlyZXQgPSBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihoZGV2LCB2cG9ydCwgY2xzX2Zsb3dlciwgcnVsZSk7CiAJaWYgKHJldCkgewogCQlrZnJlZShydWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlydWxlLSZndDtsb2NhdGlvbiA9IGNsc19mbG93ZXItJmd0O2NvbW1vbi5wcmlvIC0gMTsKLQlydWxlLSZndDt2Zl9pZCA9IDA7CiYjNDM7CXJ1bGUtJmd0O3ZmX2lkID0gdnBvcnQtJmd0O3Zwb3J0X2lkOwogCXJ1bGUtJmd0O2Nsc19mbG93ZXIuY29va2llID0gY2xzX2Zsb3dlci0mZ3Q7Y29va2llOwogCXJ1bGUtJmd0O3J1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7CiAKQEAgLTI0NjksNiAmIzQzOzI0NzYsMjEgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7aW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKJiM0MzsJCQkgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0ID0gaGNsZ2VfZ2V0X3Zwb3J0KGhhbmRsZSk7CiYjNDM7CiYjNDM7CXJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odnBvcnQtJmd0O2JhY2ssIHZwb3J0LCBjbHNfZmxvd2VyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCwKJiM0MzsJCQkgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfY29tbW9uKHZmX3JlcC0mZ3Q7aGRldiwgdmZfcmVwLSZndDt2cG9ydCwKJiM0MzsJCQkJCSAgIGNsc19mbG93ZXIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsCiAJCQkJCQkgICB1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKQEAgLTI1MjIsNiAmIzQzOzI1NDQsMTQgQEAgaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsCiYjNDM7CQkJICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC0mZ3Q7aGRldjsKJiM0MzsKJiM0MzsJcmV0dXJuIGhjbGdlX2RlbF9jbHNfZmxvd2VyKCZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0ubmljLCBjbHNfZmxvd2VyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBoY2xnZV9zeW5jX2ZkX2xpc3Qoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgc3RydWN0IGhsaXN0X2hlYWQgKmhsaXN0KQogewogCXN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaAppbmRleCAyZjY2Y2M5YzNjNjVjNC4uMjAwZDgxY2UxMmM4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oCkBAIC02LDYgJiM0Mzs2LDggQEAKIAogc3RydWN0IGhuYWUzX2hhbmRsZTsKIHN0cnVjdCBoY2xnZV9kZXY7CiYjNDM7c3RydWN0IGhjbGdlX3ZmX3JlcDsKJiM0MztzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDsKIAogaW50IGhjbGdlX2luaXRfZmRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpOwogaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpOwpAQCAtMjYsNiAmIzQzOzI4LDExIEBAIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCiBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLAogCQkJIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKTsKIGJvb2wgaGNsZ2VfaXNfY2xzX2Zsb3dlcl9hY3RpdmUoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKTsKJiM0MzsKJiM0MztpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLAomIzQzOwkJCSAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcik7CiYjNDM7aW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCwKJiM0MzsJCQkgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpOwogaW50IGhjbGdlX2NsZWFyX2FyZnNfcnVsZXMoc3RydWN0IGhjbGdlX2RldiAqaGRldik7CiB2b2lkIGhjbGdlX3N5bmNfZmRfdGFibGUoc3RydWN0IGhjbGdlX2RldiAqaGRldik7CiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKaW5kZXggZmM4NTg3YzgwODEzNzEuLjVmODgxODdmMWNhODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKQEAgLTEwNTM0LDYgJiM0MzsxMDUzNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHsKIAkuZ2V0X3RzX2luZm8gPSBoY2xnZV9wdHBfZ2V0X3RzX2luZm8sCiAJLmdldF9saW5rX2RpYWdub3Npc19pbmZvID0gaGNsZ2VfZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8sCiAJLmNsZWFuX3ZmX2NvbmZpZyA9IGhjbGdlX2NsZWFuX3Zwb3J0X2NvbmZpZywKJiM0MzsJLmNyZWF0ZV92Zl9yZXBzID0gaGNsZ2VfY3JlYXRlX3ZmX3JlcHMsCiYjNDM7CS5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsCiAJLmdldF9kc2NwX3ByaW8gPSBoY2xnZV9nZXRfZHNjcF9wcmlvLAogCS5nZXRfd29sID0gaGNsZ2VfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaAppbmRleCA3NDE5NDgxNDIyYzMxMC4uNGYxMWI5YzM4ZTY5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaApAQCAtMTcsNiAmIzQzOzE3LDkgQEAKICNpbmNsdWRlICYjMzQ7aG5hZTMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hjbGdlX2NvbW1fcnNzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoY2xnZV9jb21tX3RxcF9zdGF0cy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX3ZmX3JlcC5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaGNsZ2VfdmZfcmVwOwogCiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OICYjMzQ7MS4wJiMzNDsKICNkZWZpbmUgSENMR0VfRFJJVkVSX05BTUUgJiMzNDtoY2xnZSYjMzQ7CkBAIC05MzUsNiAmIzQzOzkzOCw5IEBAIHN0cnVjdCBoY2xnZV9kZXYgewogCWJvb2wgY3VyX3Byb21pc2M7CiAJaW50IG51bV9hbGxvY192ZnM7CS8qIEFjdHVhbCBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZCAqLwogCiYjNDM7CXN0cnVjdCBoY2xnZV92Zl9yZXAJKip2Zl9yZXBzOwomIzQzOwl1MTYJCQludW1fdmZfcmVwczsKJiM0MzsKIAlzdHJ1Y3QgaGNsZ2VfY29tbV90cXAgKmh0cXA7CiAJc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNTEzMzYwNDBkNmZiMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYwpAQCAtMCwwICYjNDM7MSwxNTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7Ly8gQ29weXJpZ2h0IChjKSAyMDI2IEhpc2lsaWNvbiBMaW1pdGVkLgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9mbG93X29mZmxvYWQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2hjbGdlX21haW4uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoY2xnZV92Zl9yZXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoY2xnZV9mZC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgaGNsZ2VfdmZfcmVwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoY2xnZV92Zl9yZXBfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC0mZ3Q7aGRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyYyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAmIzM0O3BmJXV2ZiV1JiMzNDssIFBDSV9GVU5DKGhkZXYtJmd0O3BkZXYtJmd0O2RldmZuKSwKJiM0MzsJCSAgICAgIHZmX3JlcC0mZ3Q7dnBvcnQtJmd0O3Zwb3J0X2lkIC0gMSk7CiYjNDM7CWlmIChyYyAmZ3Q7PSBsZW4pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2OwomIzQzOwomIzQzOwlpZiAoIXRjX2Nsc19jYW5fb2ZmbG9hZF9hbmRfY2hhaW4wKHZmX3JlcC0mZ3Q7bmV0ZGV2LCB0eXBlX2RhdGEpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19TRVRVUF9DTFNGTE9XRVI6CiYjNDM7CQlzd2l0Y2ggKGNsc19mbG93ZXItJmd0O2NvbW1hbmQpIHsKJiM0MzsJCWNhc2UgRkxPV19DTFNfUkVQTEFDRToKJiM0MzsJCQlyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTsKJiM0MzsJCWNhc2UgRkxPV19DTFNfREVTVFJPWToKJiM0MzsJCQlyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQoaGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfQkxPQ0s6CiYjNDM7CQlyZXR1cm4gZmxvd19ibG9ja19jYl9zZXR1cF9zaW1wbGUodHlwZV9kYXRhLAomIzQzOwkJCQkJCSAgJmFtcDtoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCwKJiM0MzsJCQkJCQkgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYiwKJiM0MzsJCQkJCQkgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhjbGdlX3ZmX3JlcF9uZXRkZXZfb3BzID0gewomIzQzOwkubmRvX3N0YXJ0X3htaXQJCT0gaGNsZ2VfdmZfcmVwX3htaXQsCiYjNDM7CS5uZG9fZ2V0X3BoeXNfcG9ydF9uYW1lCT0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSwKJiM0MzsJLm5kb19zZXR1cF90YwkJCT0gaGNsZ2VfdmZfcmVwX3NldHVwX3RjLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfdmZfcmVwX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO2hjbGdlX3ZmX3JlcF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoY2xnZV9jcmVhdGVfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJY2hhciBuYW1lW0lGTkFNU0laXTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKCFudW1fdmZzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWhkZXYtJmd0O3ZmX3JlcHMgPSBrY2FsbG9jKG51bV92ZnMsIHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICopLAomIzQzOwkJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFoZGV2LSZndDt2Zl9yZXBzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fdmZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICYjMzQ7JXNfcmVwJWQmIzM0OywKJiM0MzsJCQkgaGRldi0mZ3Q7dnBvcnRbMF0ubmljLm5ldGRldi0mZ3Q7bmFtZSwgaSk7CiYjNDM7CQluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwKSwgbmFtZSwKJiM0MzsJCQkJICAgIE5FVF9OQU1FX1VOS05PV04sIGV0aGVyX3NldHVwKTsKJiM0MzsJCWlmICghbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQloY2xnZV92Zl9yZXBfbmV0X3NldHVwKG5kZXYpOwomIzQzOwomIzQzOwkJdmZfcmVwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CQl2Zl9yZXAtJmd0O2hkZXYgPSBoZGV2OwomIzQzOwkJdmZfcmVwLSZndDt2cG9ydCA9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbaSAmIzQzOyBIQ0xHRV9WRl9WUE9SVF9TVEFSVF9OVU1dOwomIzQzOwkJdmZfcmVwLSZndDtuZXRkZXYgPSBuZGV2OwomIzQzOwomIzQzOwkJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRldi0mZ3Q7dmZfcmVwc1tpXSA9IHZmX3JlcDsKJiM0MzsJfQomIzQzOwomIzQzOwloZGV2LSZndDtudW1fdmZfcmVwcyA9IG51bV92ZnM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJd2hpbGUgKGktLSkKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2KGhkZXYtJmd0O3ZmX3JlcHNbaV0tJmd0O25ldGRldik7CiYjNDM7CWtmcmVlKGhkZXYtJmd0O3ZmX3JlcHMpOwomIzQzOwloZGV2LSZndDt2Zl9yZXBzID0gTlVMTDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghaGRldi0mZ3Q7dmZfcmVwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGhkZXYtJmd0O251bV92Zl9yZXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGhkZXYtJmd0O3ZmX3JlcHNbaV0pCiYjNDM7CQkJdW5yZWdpc3Rlcl9uZXRkZXYoaGRldi0mZ3Q7dmZfcmVwc1tpXS0mZ3Q7bmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShoZGV2LSZndDt2Zl9yZXBzKTsKJiM0MzsJaGRldi0mZ3Q7dmZfcmVwcyA9IE5VTEw7CiYjNDM7CWhkZXYtJmd0O251bV92Zl9yZXBzID0gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZiMjA4MGFlNjI3YmZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oCkBAIC0wLDAgJiM0MzsxLDIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fSENMR0VfVkZfUkVQX0gKJiM0MzsjZGVmaW5lIF9fSENMR0VfVkZfUkVQX0gKJiM0MzsKJiM0MztzdHJ1Y3QgaG5hZTNfYWVfZGV2OwomIzQzO3N0cnVjdCBoY2xnZV9kZXY7CiYjNDM7c3RydWN0IGhjbGdlX3Zwb3J0OwomIzQzO3N0cnVjdCBuZXRfZGV2aWNlOwomIzQzOwomIzQzO3N0cnVjdCBoY2xnZV92Zl9yZXAgewomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGV2CSpoZGV2OwomIzQzOwlzdHJ1Y3QgaGNsZ2VfdnBvcnQJKnZwb3J0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwomIzQzO307CiYjNDM7CiYjNDM7aW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpOwomIzQzO3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBITlMzIEV0aGVybmV0IERyaXZlciBWRiBSZXByZXNlbnRvciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWRkaW5nIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSByZXByZXNlbnRvcnMsIHdoaWNoIGlzIGEgY29tbW9uIGFwcHJvYWNoIGZvciBTUklPViBzdXBwb3J0LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGBobnMzX2VuZXQuY2AsIHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxpbmcgYGNyZWF0ZV92Zl9yZXBzYCBhbmQgYGRlc3Ryb3lfdmZfcmVwc2Agd2hlbiBTUklPViBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIHRvIGR5bmFtaWNhbGx5IGNyZWF0ZSBhbmQgZGVzdHJveSB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggVkYuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyB0dWNrZWQgYXdheSBpbiBgaGNsZ2VfdmZfcmVwLmNgLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBWRiByZXByZXNlbnRvciYjMzk7cyBjb3JlIGxvZ2ljOiBgaGNsZ2VfY3JlYXRlX3ZmX3JlcHNgIGFuZCBgaGNsZ2VfZGVzdHJveV92Zl9yZXBzYC4gVGhlIHJlcHJlc2VudG9yLCBvZiBjb3Vyc2UsIHJlZ2lzdGVycyBhIG5ldyBuZXRkZXYgd2l0aCBgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHNgLiBJIHNlZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgZXNzZW50aWFsIG5ldGRldiBvcGVyYXRpb25zOiBgbmRvX3N0YXJ0X3htaXRgIGZvciB0cmFuc21pdHRpbmcsIGBuZG9fZ2V0X3BoeXNfcG9ydF9uYW1lYCBmb3IgcG9ydCBpZGVudGlmaWNhdGlvbiwgYW5kIGBuZG9fc2V0dXBfdGNgIGZvciBUcmFmZmljIENvbnRyb2wgc2V0dXAuCgpUaGUgYG5kb19zZXR1cF90Y2AgaW1wbGVtZW50YXRpb24gaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgaGFuZGxlcyBgVENfU0VUVVBfQkxPQ0tgLCBhbmQgc3Vic2VxdWVudGx5LCBhIGJsb2NrIGNhbGxiYWNrIGBoY2xnZV92Zl9yZXBfc2V0dXBfdGNfYmxvY2tfY2JgLiBUaGlzIGNhbGxiYWNrIGlzIHdoZXJlIHRoZSBhZHZhbmNlZCBzdHVmZiBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBjbGFzc2lmaWNhdGlvbiBvZiBwYWNrZXRzLiBJdCBoYW5kbGVzIGBUQ19TRVRVUF9DTFNGTE9XRVJgLCBjYWxsaW5nIGBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZmAgYW5kIGBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZmAgdG8gbWFuYWdlIEZsb3cgQ2xhc3NpZmljYXRpb24gcnVsZXMgYXQgdGhlIFZGIGxldmVsLiBUaGVzZSBmbG93ZXItYmFzZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBoY2xnZV9mZC5jYC4KCk5vdywgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqaG93KiB3ZSYjMzk7ZCB0ZXN0IHRoaXMsIGFuZCBpZiB0aGlzIGNvZGUgaXMgZXZlbiByZWFjaGFibGUgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIHNjZW5hcmlvLiBTaW5jZSB0aGlzIGlzIGFuIEhOUzMgZHJpdmVyLCBhbmQgSE5TMyBhcmUgSGlzaWxpY29uJiMzOTtzIFBDSSBuZXR3b3JrIGNhcmRzLCB0aGlzIGRyaXZlciBleHBlY3RzIGEgcmVhbCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZW11bGF0ZSB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVT8gSSBkb3VidCB0aGF0IFFFTVUgaGFzIGFueSBuYXRpdmUgc3VwcG9ydCBvciBhIGRlZGljYXRlZCBITlMzIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBmb3JtIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIEhOUzMgd2l0aGluIHRoZSBrZXJuZWwuIEkga25vdyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbmV0d29yayBjYXJkcyB3aXRoaW4gUUVNVSwgYW5kIHRoZXJlJiMzOTtzIG5vdGhpbmcgb24gdGhhdCBsaXN0IGFib3V0IEhOUzMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5zMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZTo3OmNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6ODpjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjk6Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX0hOUzMpICYjNDM7PSBobmFlMy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ITlMzX0VORVQpICYjNDM7PSBobnMzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE0OmhuczMtb2JqcyA9IGhuczNfZW5ldC5vIGhuczNfZXRodG9vbC5vIGhuczNfZGVidWdmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE2OmhuczMtJChDT05GSUdfSE5TM19EQ0IpICYjNDM7PSBobnMzX2RjYm5sLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0hOUzNfSENMR0VWRikgJiM0Mzs9IGhjbGdldmYubyBoY2xnZS1jb21tb24ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyMDpoY2xnZS1jb21tb24tb2JqcyAmIzQzOz0gaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQubyBobnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5vIGhuczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjI6aGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5rLm8gaG5zM3ZmL2hjbGdldmZfcmVncy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ITlMzX0hDTEdFKSAmIzQzOz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjU6aGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyNjpcdFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjc6XHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyOTpoY2xnZS0kKENPTkZJR19ITlMzX0RDQikgJiM0Mzs9IGhuczNwZi9oY2xnZV9kY2Iub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9MTk4PXN0cnVjdCBobmFlM19xdWV1ZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjIwOTpzdHJ1Y3QgaG5zM19tYWNfc3RhdHMge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMTAtXHR1NjQgdHhfcGF1c2VfY250O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjA2PXN0cnVjdCBobmFlM19hZV9vcHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjg1LVx0dm9pZCAoKmdldF9tYWNfc3RhdHMpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6Njg2Olx0XHRcdCAgICAgIHN0cnVjdCBobnMzX21hY19zdGF0cyAqbWFjX3N0YXRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjg3LVx0dm9pZCAoKmdldF9zdHJpbmdzKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQtI2luY2x1ZGUgXCYjMzQ7aG5hZTMuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU6I2luY2x1ZGUgXCYjMzQ7aG5zM19lbmV0LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo5Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTItXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIwOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGV0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfZXRzICpldHMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIyOlx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoyNDpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjUtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjMzOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjM1Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzozNzpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzgtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ2OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ4Olx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy00OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo1MDpcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNTEtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU5OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGRjYl9hcHAgKmFwcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NjE6XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjYzOlx0aWYgKGhuczNfbmljX3Jlc2V0dGluZyhuZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02NC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzI6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTczLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo3NDpcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzY6XHRpZiAoaG5zM19uaWNfcmVzZXR0aW5nKG5kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTc3LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04NS0vKiBEQ0JYIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4NjpzdGF0aWMgdTggaG5zM19kY2JubF9nZXRkY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4ODpcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtODktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk2LS8qIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWlsICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTc6c3RhdGljIHU4IGhuczNfZGNibmxfc2V0ZGNieChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggbW9kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy05OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTk6XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEwMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwNzpzdGF0aWMgY29uc3Qgc3RydWN0IGRjYm5sX3J0bmxfb3BzIGhuczNfZGNibmxfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwODpcdC5pZWVlX2dldGV0c1x0PSBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwOTpcdC5pZWVlX3NldGV0c1x0PSBobnMzX2RjYm5sX2llZWVfc2V0ZXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMDpcdC5pZWVlX2dldHBmY1x0PSBobnMzX2RjYm5sX2llZWVfZ2V0cGZjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMTpcdC5pZWVlX3NldHBmY1x0PSBobnMzX2RjYm5sX2llZWVfc2V0cGZjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMjpcdC5pZWVlX3NldGFwcCAgICA9IGhuczNfZGNibmxfaWVlZV9zZXRhcHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTEzOlx0LmllZWVfZGVsYXBwICAgID0gaG5zM19kY2JubF9pZWVlX2RlbGFwcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTQ6XHQuZ2V0ZGNieFx0PSBobnMzX2RjYm5sX2dldGRjYngsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTE1Olx0LnNldGRjYnhcdD0gaG5zM19kY2JubF9zZXRkY2J4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTExNi19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTIyOnZvaWQgaG5zM19kY2JubF9zZXR1cChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEyOTpcdGRldi1cdTAwM2VkY2JubF9vcHMgPSBcdTAwMjZobnMzX2RjYm5sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMzAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTktI2luY2x1ZGUgXCYjMzQ7aG5hZTMuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTA6I2luY2x1ZGUgXCYjMzQ7aG5zM19kZWJ1Z2ZzLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjExOiNpbmNsdWRlIFwmIzM0O2huczNfZW5ldC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEzOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpobnMzX2RiZ2ZzX3Jvb3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjE1OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfZGVudHJ5X2luZm8gaG5zM19kYmdfZGVudHJ5W10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNi1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQzOnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfZmlsZV9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NDpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NTpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ3OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfY21kX2luZm8gaG5zM19kYmdfY21kW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00OC1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTg6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc1LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzY6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03Ny1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04Ny1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODktXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTkzLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6OTQ6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy05NS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDA6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMDEtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEwNjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNy1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTExLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTEyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTEzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMTctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTE5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVFhfQkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMjQ6XHRcdC5pbml0ID0gaG5zM19kYmdfYmRfZmlsZV9pbml0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTI1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUlhfQkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMzA6XHRcdC5pbml0ID0gaG5zM19kYmdfYmRfZmlsZV9pbml0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTMxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMzUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTM2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTM3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQ4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQ5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTU1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTYwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTYxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNjUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTY2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTY3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTcyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTczLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTc4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTc5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTg0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTg1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTkwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTkxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xOTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTk2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTk3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjAyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjAzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjA4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjA5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjE0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjE1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjIwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjIxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMjUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjI2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjI3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjMyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjMzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzctXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjM4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjM5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjQ0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjQ1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjUwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjUxLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUVVFVUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNTY6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTctXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2MS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9RVUVVRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI2MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2My1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1FVRVVFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjY4Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY5LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzMtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfRkQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNzQ6XHRcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzUtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI3OS1cdFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9GRCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4MDpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4MS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjg1LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4NjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4Ny1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjkxLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5MjpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5My1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjk3LVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0NPTU1PTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5ODpcdFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5OS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzAzLVx0XHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0ZELFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzA0Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzA1LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMDktXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzEwOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzExLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMTUtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzE2Olx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzE3LVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjEtXHRcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzIyOlx0XHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzIzLVx0fSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzozMjY6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19jYXBfaW5mbyBobnMzX2RiZ19jYXBbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTMyNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYz0zOTA9ZGltX3R1bmVfc3RhdF9zdHJbXSA9IHsgXCYjMzQ7T05fVE9QXCYjMzQ7LCBcJiMzNDtUSVJFRFwmIzM0OywgXCYjMzQ7UklHSFRcJiMzNDssIFwmIzM0O0xFRlRcJiMzNDsgfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5MjpzdGF0aWMgdm9pZCBobnMzX2dldF9jb2FsX2luZm8oc3RydWN0IGhuczNfZW5ldF90cXBfdmVjdG9yICp0cXBfdmVjdG9yLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzkzLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpLCBib29sIGlzX3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5NS1cdHVuc2lnbmVkIGludCBnbF9vZmZzZXQsIHFsX29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5NjpcdHN0cnVjdCBobnMzX2VuZXRfY29hbGVzY2UgKmNvYWw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zOTctXHR1bnNpZ25lZCBpbnQgcmVnX3ZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0Mzc6c3RhdGljIHZvaWQgaG5zM19kdW1wX2NvYWxfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGJvb2wgaXNfdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mzgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDM5LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MDpcdHN0cnVjdCBobnMzX2VuZXRfdHFwX3ZlY3RvciAqdHFwX3ZlY3RvcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MTpcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDQyLVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDUxLVx0XHR0cXBfdmVjdG9yID0gXHUwMDI2cHJpdi1cdTAwM2V0cXBfdmVjdG9yW2ldO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDUyOlx0XHRobnMzX2dldF9jb2FsX2luZm8odHFwX3ZlY3RvciwgcywgaSwgaXNfdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDUzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1NjpzdGF0aWMgaW50IGhuczNfZGJnX2NvYWxfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDU4Olx0aG5zM19kdW1wX2NvYWxfaW5mbyhzLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1OS1cdHNlcV9wdXRzKHMsIFwmIzM0O1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjA6XHRobnMzX2R1bXBfY29hbF9pbmZvKHMsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ2MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjU6c3RhdGljIHZvaWQgaG5zM19kdW1wX3J4X3F1ZXVlX2luZm8oc3RydWN0IGhuczNfZW5ldF9yaW5nICpyaW5nLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY2LVx0XHRcdFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwMDpzdGF0aWMgaW50IGhuczNfZGJnX3J4X3F1ZXVlX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTAxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwMi1cdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobmFlM19zZXFfZmlsZV90b19oYW5kbGUocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1MDM6XHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwNDpcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwNS1cdHUzMiBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUyNC1cdFx0cmluZyA9IFx1MDAyNnByaXYtXHUwMDNlcmluZ1sodTMyKShpICYjNDM7IGgtXHUwMDNla2luZm8ubnVtX3RxcHMpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyNTpcdFx0aG5zM19kdW1wX3J4X3F1ZXVlX2luZm8ocmluZywgcywgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTMxOnN0YXRpYyB2b2lkIGhuczNfZHVtcF90eF9xdWV1ZV9pbmZvKHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUzMi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1NjU6c3RhdGljIGludCBobnMzX2RiZ190eF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjctXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTY4Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1Njk6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NzAtXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01ODktXHRcdHJpbmcgPSBcdTAwMjZwcml2LVx1MDAzZXJpbmdbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1OTA6XHRcdGhuczNfZHVtcF90eF9xdWV1ZV9pbmZvKHJpbmcsIHMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTkxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5NjpzdGF0aWMgaW50IGhuczNfZGJnX3F1ZXVlX21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk4LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5OTpcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjAwLVx0dTMyIGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE4OnN0YXRpYyB2b2lkIGhuczNfZHVtcF9yeF9iZF9pbmZvKHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE5Olx0XHRcdFx0IHN0cnVjdCBobnMzX2Rlc2MgKmRlc2MsIHN0cnVjdCBzZXFfZmlsZSAqcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYyMC1cdFx0XHRcdCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0MzpzdGF0aWMgaW50IGhuczNfZGJnX3J4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQ0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0NTpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQ2LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXHUwMDNlaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ3Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDg6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDk6XHRzdHJ1Y3QgaG5zM19kZXNjICpkZXNjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjUwLVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjY2Olx0XHRobnMzX2R1bXBfcnhfYmRfaW5mbyhwcml2LCBkZXNjLCBzLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY2Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NzI6c3RhdGljIHZvaWQgaG5zM19kdW1wX3R4X2JkX2luZm8oc3RydWN0IGhuczNfZGVzYyAqZGVzYywgc3RydWN0IHNlcV9maWxlICpzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjczLVx0XHRcdFx0IGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Njg4OnN0YXRpYyBpbnQgaG5zM19kYmdfdHhfYmRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnByaXZhdGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02ODkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjkwOlx0c3RydWN0IGhuczNfZGJnX2RhdGEgKmRhdGEgPSBzLVx1MDAzZXByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTEtXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gZGF0YS1cdTAwM2VoYW5kbGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2OTI6XHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5MzpcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5NDpcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MTE6XHRcdGhuczNfZHVtcF90eF9iZF9pbmZvKGRlc2MsIHMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxNzpzdGF0aWMgdm9pZCBobnMzX2RiZ19kZXZfY2FwcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzE5Olx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gaG5zM19nZXRfYWVfZGV2KGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzIwLVx0dW5zaWduZWQgbG9uZyAqY2FwcyA9IGFlX2Rldi1cdTAwM2VjYXBzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaG5zM19kYmdfY2FwKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNjpcdFx0c3RhdGUgPSB0ZXN0X2JpdChobnMzX2RiZ19jYXBbaV0uY2FwX2JpdCwgY2Fwcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3Mjc6XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JXM6ICVzXFxuXCYjMzQ7LCBobnMzX2RiZ19jYXBbaV0ubmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyOC1cdFx0XHQgICBzdHJfeWVzX25vKHN0YXRlKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzM0OnN0YXRpYyB2b2lkIGhuczNfZGJnX2Rldl9zcGVjcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc2OTpzdGF0aWMgaW50IGhuczNfZGJnX2Rldl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzczOlx0aG5zM19kYmdfZGV2X2NhcHMoaCwgcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3NzQ6XHRobnMzX2RiZ19kZXZfc3BlY3MoaCwgcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03NzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Nzc5OnN0YXRpYyB2b2lkIGhuczNfZHVtcF9wYWdlX3Bvb2xfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03ODAtXHRcdFx0XHQgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc5MjpzdGF0aWMgaW50IGhuczNfZGJnX3BhZ2VfcG9vbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTQtXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Nzk1Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTY6XHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTctXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MTctXHRcdHJpbmcgPSBcdTAwMjZwcml2LVx1MDAzZXJpbmdbKHUzMikoaSAmIzQzOyBoLVx1MDAzZWtpbmZvLm51bV90cXBzKV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MTg6XHRcdGhuczNfZHVtcF9wYWdlX3Bvb2xfaW5mbyhyaW5nLCBzLCBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgxOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjQ6c3RhdGljIGludCBobnMzX2RiZ19iZF9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgyNjpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI3LVx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXHUwMDNlaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI4Olx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODM0LVx0aWYgKGRhdGEtXHUwMDNlY21kID09IEhOQUUzX0RCR19DTURfVFhfQkQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MzU6XHRcdHJldHVybiBobnMzX2RiZ190eF9iZF9pbmZvKHMsIHByaXZhdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODM2LVx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VjbWQgPT0gSE5BRTNfREJHX0NNRF9SWF9CRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgzNzpcdFx0cmV0dXJuIGhuczNfZGJnX3J4X2JkX2luZm8ocywgcHJpdmF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQwLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0MTpERUZJTkVfU0hPV19BVFRSSUJVVEUoaG5zM19kYmdfYmRfaW5mbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4NDM6c3RhdGljIGludCBobnMzX2RiZ19iZF9maWxlX2luaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MzIgY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0NTpcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ2LVx0c3RydWN0IGRlbnRyeSAqZW50cnlfZGlyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MDpcdGVudHJ5X2RpciA9IGhuczNfZGJnX2RlbnRyeVtobnMzX2RiZ19jbWRbY21kXS5kZW50cnldLmRlbnRyeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MTpcdG1heF9xdWV1ZV9udW0gPSBobnMzX2dldF9tYXhfYXZhaWxhYmxlX2NoYW5uZWxzKGhhbmRsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NTItXHRkYXRhID0gZGV2bV9rY2FsbG9jKFx1MDAyNmhhbmRsZS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgbWF4X3F1ZXVlX251bSwgc2l6ZW9mKCpkYXRhKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NjAtXHRcdGRhdGFbaV0uaGFuZGxlID0gaGFuZGxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODYxOlx0XHRkYXRhW2ldLmNtZCA9IGhuczNfZGJnX2NtZFtjbWRdLmNtZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg2Mi1cdFx0ZGF0YVtpXS5xaWQgPSBpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxOTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBITlMzIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgSE5TMyBkcml2ZXIuLi5yaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRpZWQgdG8gSGlzaWxpY29uIG5ldHdvcmsgaGFyZHdhcmUuIFBoeXNpY2FsIHN0dWZmLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBvZmZlciAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQ/IEV2ZW4gYSBiYXNpYyBtb2NrIHdvdWxkIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGhpbnQgb2YgYSBtb2NrIG1vZHVsZSwgYSBzdHViLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIHN0YW5kIGluIGZvciB0aGF0IGhhcmR3YXJlIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5zMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSE5TMyBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGZvciBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IGZpbmQgYW55dGhpbmcuIFRoZW4gSSBzYXcgdGhlIG1lbnRpb24gb2YgYSBwYXRjaCByZWxhdGVkIHRvIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IG5vdGluZyBpdCB3YXMgdW5kZXIgcmV2aWV3LiBUaGF0IGdvdCBtZSB0aGlua2luZyDigJMgaWYgc3l6a2FsbGVyIGlzIGZ1enppbmcgaXQsIHRoZXJlICptdXN0KiBiZSBzb21lIHdheSB0byByZWFjaCBpdC4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBhbmQgcG90ZW50aWFsIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZHJpdmVycywgZXZlbiB3aXRob3V0IGZ1bGwgaGFyZHdhcmUgZW11bGF0aW9uLiBJdCBkb2VzIHRoaXMgYnkgZW11bGF0aW5nIFBDSSBkZXZpY2VzIHRocm91Z2ggYSBrZXJuZWwgbW9kdWxlIG9yIHVzaW5nIFFFTVUmIzM5O3MgUENJIGVtdWxhdGlvbi4gRm9yIFVTQiwgaXQgdXNlcyBgdmhjaWAsIGJ1dCBmb3IgUENJLCBpdCBpcyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgLCBpbmplY3RpbmcgdGhlIFBDSSBkZXZpY2VzLiBJdCBwcm92aWRlcyBmYWtlIFBDSSBjb25maWcgc3BhY2UgYW5kIGhhbmRsZXMgbWVtb3J5LW1hcHBlZCBJL08gKE1NSU8pLgoKQnV0IHRoZW4sIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoYXQgcmFpc2VzIGEga2V5IHF1ZXN0aW9uLiBEb2VzIHRoaXMgUENJIGZ1enplciwgd2hpY2ggaXMgbm90IGEgZnVsbCBoYXJkd2FyZSBlbXVsYXRvciwgc3RpbGwgcXVhbGlmeSBhcyAmIzM0O3NvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDs/IEl0JiMzOTtzIGluamVjdGluZyBkYXRhIGludG8gTU1JTyByZWFkcywgYnV0IGl0JiMzOTtzIG5vdCBwcm92aWRpbmcgYSBmdWxseSBmdW5jdGlvbmFsIGhhcmR3YXJlIGVudmlyb25tZW50LgoKVHlwaWNhbGx5LCB3aXRoIHBoeXNpY2FsIFBDSSBkcml2ZXJzIHRoYXQgKmxhY2sqIGRlZGljYXRlZCBlbXVsYXRvcnMsIGZ1bmN0aW9uYWwgZnV6emluZyBpcyBwcm9ibGVtYXRpYy4gVGhlIGRyaXZlciB1c3VhbGx5IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbiwgb3IgZ2V0cyBzdHVjayB3aGVuIGl0IGVuY291bnRlcnMgZ2FyYmFnZSBNTUlPLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gbWVhbmluZ2Z1bGx5IGludGVyYWN0IHdpdGggdGhlIGRyaXZlci4KClRoZSBwYXRjaCBtZW50aW9ucyBWRiByZXByZXNlbnRvcnMgaW4gSE5TMywgc28gSSBtdXN0IGNvbnNpZGVyIHRoYXQuIFRoYXQgc2FpZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBITlMzIGNhbiBpbml0aWFsaXplIGluIHRoaXMgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobnMzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMxMzA9c3RhdGljIHZvaWQgaG5zM19kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ1Oi8qIGhuczNfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0Ni0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ4LSAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ5OiAqIGhuczNfcHJvYmUgaW5pdGlhbGl6ZXMgYSBQRiBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTUwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIFBGIHByaXZhdGUgc3RydWN0dXJlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTU1OnN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNjk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzEtXHQuaWRfdGFibGUgPSBobnMzX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzcyOlx0LnByb2JlICAgID0gaG5zM19wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzMtXHQucmVtb3ZlICAgPSBobnMzX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg2MAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGhuczNfcHJvYmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBidXNpbmVzcy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBgaG5zM19wcm9iZWAgaXMgYWxsIGFib3V0LiBObyBhc3N1bXB0aW9ucywganVzdCBwdXJlLCBpbml0aWFsIGN1cmlvc2l0eS4gSSYjMzk7bSB0YWtpbmcgYSBmcmVzaCBsb29rLCBmb2N1c2luZyBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHRvb2wgYnJpbmdzIHRvIHRoZSB0YWJsZSBhbmQgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZS4gSSYjMzk7bSBmb3JtaW5nIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZG8gYW55dGhpbmcgbW9yZSBjb21wbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1NTpcdHN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbjMxNTY6XHR7XG4zMTU3Olx0XHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXY7XG4zMTU4Olx0XHRpbnQgcmV0O1xuMzE1OTpcdFxuMzE2MDpcdFx0YWVfZGV2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFlX2RldiksIEdGUF9LRVJORUwpO1xuMzE2MTpcdFx0aWYgKCFhZV9kZXYpXG4zMTYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzE2MzpcdFxuMzE2NDpcdFx0YWVfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuMzE2NTpcdFx0YWVfZGV2LVx1MDAzZWZsYWcgPSBlbnQtXHUwMDNlZHJpdmVyX2RhdGE7XG4zMTY2Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWVfZGV2KTtcbjMxNjc6XHRcbjMxNjg6XHRcdHJldCA9IGhuYWUzX3JlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuMzE2OTpcdFx0aWYgKHJldClcbjMxNzA6XHRcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMzE3MTpcdFxuMzE3MjpcdFx0cmV0dXJuIHJldDtcbjMxNzM6XHR9XG4zMTc0Olx0XG4zMTc1Olx0LyoqXG4zMTc2Olx0ICogaG5zM19jbGVhbl92Zl9jb25maWdcbjMxNzc6XHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXG4zMTc4Olx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgYWxsb2NhdGVkXG4zMTc5Olx0ICpcbjMxODA6XHQgKiBDbGVhbiByZXNpZHVhbCB2ZiBjb25maWcgYWZ0ZXIgZGlzYWJsZSBzcmlvdlxuMzE4MTpcdCAqKi9cbjMxODI6XHRzdGF0aWMgdm9pZCBobnMzX2NsZWFuX3ZmX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4zMTgzOlx0e1xuMzE4NDpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzE4NTpcdFxuMzE4NjpcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY2xlYW5fdmZfY29uZmlnKVxuMzE4NzpcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNsZWFuX3ZmX2NvbmZpZyhhZV9kZXYsIG51bV92ZnMpO1xuMzE4ODpcdH1cbjMxODk6XHRcbjMxOTA6XHQvKiBobnMzX3JlbW92ZSAtIERldmljZSByZW1vdmFsIHJvdXRpbmVcbjMxOTE6XHQgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbjMxOTI6XHQgKi9cbjMxOTM6XHRzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjMxOTQ6XHR7XG4zMTk1Olx0XHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4zMTk2Olx0XG4zMTk3Olx0XHRpZiAoaG5zM19pc19waHlzX2Z1bmMocGRldikgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKVxuMzE5ODpcdFx0XHRobnMzX2Rpc2FibGVfc3Jpb3YocGRldik7XG4zMTk5Olx0XG4zMjAwOlx0XHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuMzIwMTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMzIwMjpcdH1cbjMyMDM6XHRcbjMyMDQ6XHQvKipcbjMyMDU6XHQgKiBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVcbjMyMDY6XHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXG4zMjA3Olx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgdG8gYWxsb2NhdGVcbjMyMDg6XHQgKlxuMzIwOTpcdCAqIEVuYWJsZSBvciBjaGFuZ2UgdGhlIG51bWJlciBvZiBWRnMuIENhbGxlZCB3aGVuIHRoZSB1c2VyIHVwZGF0ZXMgdGhlIG51bWJlclxuMzIxMDpcdCAqIG9mIFZGcyBpbiBzeXNmcy5cbjMyMTE6XHQgKiovXG4zMjEyOlx0c3RhdGljIGludCBobnMzX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuMzIxMzpcdHtcbjMyMTQ6XHRcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjMyMTU6XHRcdGludCByZXQ7XG4zMjE2Olx0XG4zMjE3Olx0XHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUENJX0lPVikpKSB7XG4zMjE4Olx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW4gbm90IGNvbmZpZyBTUklPVlxcblwmIzM0Oyk7XG4zMjE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzIyMDpcdFx0fVxuMzIyMTpcdFxuMzIyMjpcdFx0aWYgKG51bV92ZnMpIHtcbjMyMjM6XHRcdFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTtcbjMyMjQ6XHRcdFx0aWYgKHJldCkge1xuMzIyNTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1NSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cJiMzNDssIHJldCk7XG4zMjI2Olx0XHRcdH0gZWxzZSB7XG4zMjI3Olx0XHRcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3ZmX3JlcHMpIHtcbjMyMjg6XHRcdFx0XHRcdHJldCA9IGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3ZmX3JlcHMoYWVfZGV2LFxuMzIyOTpcdFx0XHRcdFx0XHRcdFx0XHQgIG51bV92ZnMpO1xuMzIzMDpcdFx0XHRcdFx0aWYgKHJldClcbjMyMzE6XHRcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCYjMzQ7LFxuMzIzMzpcdFx0XHRcdFx0XHRcdHJldCk7XG4zMjM0Olx0XHRcdFx0fVxuMzIzNTpcdFx0XHRcdHJldHVybiBudW1fdmZzO1xuMzIzNjpcdFx0XHR9XG4zMjM3Olx0XHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XG4zMjM4Olx0XHRcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XG4zMjM5Olx0XG4zMjQwOlx0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3lfdmZfcmVwcylcbjMyNDE6XHRcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3lfdmZfcmVwcyhhZV9kZXYpO1xuMzI0MjpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjMyNDM6XHRcdFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xuMzI0NDpcdFx0fSBlbHNlIHtcbjMyNDU6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjQ2Olx0XHRcdFx0IFwmIzM0O1VuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXG5cJiMzNDspO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFxuMzI0OTpcdFx0cmV0dXJuIDA7XG4zMjUwOlx0fVxuMzI1MTpcdFxuMzI1MjpcdHN0YXRpYyB2b2lkIGhuczNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMjUzOlx0e1xuMzI1NDpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSBITlMzIGRyaXZlciBpcyBhIFBDSSBkcml2ZXIsIGFuZCB0aGF0JiMzOTtzIGtleS4gU3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXLigJR0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGF2ZW51ZS4gV2FpdCwgdGhlIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiBhbnkgUENJIGRyaXZlciwgcmlnaHQ/IEl0IHdvcmtzIGJ5IG1hdGNoaW5nIFBDSSBJRHMuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgSE5TMyBpcyBldmVuIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBzZXR1cCBvciBpZiBpdOKAmXMgYWNjZXNzaWJsZS4KCkJ1dCBob2xkIG9uLCB0aGUgcHJvbXB0IG1lbnRpb25zIHNvbWV0aGluZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldHMgYW5kIG1hYzgwMjExX2h3c2ltLiBUaGUgSE5TMyBkcml2ZXIgKmlzKiBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZC4gRG9lcyB0aGUgUENJIGZ1enplciBjb3VudCBhcyDigJxzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZeKAnT8gVGVjaG5pY2FsbHksIGl0IHNob3VsZCwgYnV0IGRvZXMgdGhlIHByb21wdCYjMzk7cyBleGNsdXNpb24gY292ZXIgdGhpcyBjYXNlPyBUaGUgcHJvbXB0IHNheXMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkmIzM0Oy4gU28sIHRoZSBQQ0kgZnV6emVyICppcyogYSB3YXkgdG8gcG90ZW50aWFsbHkgcmVhY2ggdGhlIEhOUzMgZHJpdmVyLgoKTm93LCBpZiBpdCYjMzk7cyBhICpwaHlzaWNhbCogUENJIGRyaXZlciwgaXQgdHlwaWNhbGx5IG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGUgUENJIGZ1enplciBoYXMgdG8gZW11bGF0ZSB0aGUgY29uZmlnIHNwYWNlIGFuZCBNTUlPLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpbGUgdXNlZnVsLCBjYW4gYmUgZmFpcmx5IGJhc2ljLiBJdCBvZnRlbiBzdHJ1Z2dsZXMgd2l0aCBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyDigJMgeW91IGtub3csIHdhaXRpbmcgZm9yIHNwZWNpZmljIGJpdHMgaW4gTU1JTyByZWdpc3RlcnMsIGZpcm13YXJlIGxvYWRpbmcsIHRob3NlIGtpbmRzIG9mIHRoaW5ncy4gU28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGUgSE5TMyBkcml2ZXIgaGFzIGFueSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIERvIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIG9yIGFueSBjb21wbGV4IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcz8gVGhhdCB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxdWVzdF9maXJtd2FyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDA1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgTWlzc2luZyBGaXJtd2FyZSBSZXF1ZXN0KioKCkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBleHBsaWNpdCByZXF1ZXN0cyBmb3IgZmlybXdhcmUgaW4gdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgbWlnaHQgYmUgYWJzZW50IG9yIGlmIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgZGlmZmVyZW50bHkuIExldCYjMzk7cyBzdGFydCB3aXRoIGBoY2xnZV9tYWluLmNgLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luLCBzaW5jZSBpdCBvZnRlbiBvcmNoZXN0cmF0ZXMgdGhlIGluaXRpYWwgZGV2aWNlIHNldHVwIHdpdGhpbiB0aGlzIEhDTEdFIGRyaXZlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZmlybXdhcmUgbG9hZCBpcyBiZWluZyBpbnRlZ3JhdGVkIGluIHRoZXJlLCBpZiBpdCYjMzk7cyBleHRlcm5hbCwgb3IgbWF5YmUgaWYgaXQmIzM5O3MgYmVpbmcgcHVsbGVkIGZyb20gYSBwcmUtbG9hZGVkIGFyZWEsIHdoaWNoIGNvdWxkIGV4cGxhaW4gdGhlIGxhY2sgb2YgYW4gaW1tZWRpYXRlIHJlcXVlc3QuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgc2VlIHdoYXQgdGhleSYjMzk7cmUgdXAgdG8uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbmV4dCBzdGVwIGZvciByZXNvbHZpbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfaW5pdF9hZV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05MzE5PXN0YXRpYyBpbnQgaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5MzQwOnN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTEwNDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA0MzU6XHQuaW5pdF9hZV9kZXYgPSBoY2xnZV9pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA0MzYtXHQudW5pbml0X2FlX2RldiA9IGhjbGdlX3VuaW5pdF9hZV9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDQ1CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZvciBQb3RlbnRpYWwgUENJIEZ1enplciBCbG9ja2luZyoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGZ1bmN0aW9uIGBoY2xnZV9pbml0X2FlX2RldmAgaXMgZ29pbmcgdG8gdHJpcCBtZSB1cCB3aGVuIEkmIzM5O20gcnVubmluZyBteSBQQ0kgZnV6emVyLiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCYjMzk7cyBkb2luZyBhbnkgY29tcGxleCBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgcmVhZHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYmxvY2tpbmcgYmVoYXZpb3IuIEJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBmdXp6aW5nIOKAkyB0aGV5IHNsb3cgZXZlcnl0aGluZyBkb3duIGFuZCBjYW4gcHJldmVudCBtZSBmcm9tIGV4cGxvcmluZyBhIGJyb2FkZXIgcmFuZ2Ugb2YgY29kZSBwYXRocyBxdWlja2x5LiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0byBpZGVudGlmeSBhbnkgcmVkIGZsYWdzIHJlbGF0ZWQgdG8gTU1JTyBpbnRlcmFjdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgc2hhcnAg4oCTIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBwb3RlbnRpYWxseSB0aW1lLWNvbnN1bWluZyBvciBjb21wbGV4IHJlYWQgb3BlcmF0aW9ucyBmcm9tIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzLiBBbnl0aGluZyB0aGF0IGNvdWxkIHN0YWxsIHRoZSBmdXp6ZXIgaXMgYSBwb3RlbnRpYWwgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTM0MDpcdHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuOTM0MTpcdHtcbjkzNDI6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWVfZGV2LVx1MDAzZXBkZXY7XG45MzQzOlx0XHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2O1xuOTM0NDpcdFx0aW50IHJldDtcbjkzNDU6XHRcbjkzNDY6XHRcdGhkZXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqaGRldiksIEdGUF9LRVJORUwpO1xuOTM0NzpcdFx0aWYgKCFoZGV2KVxuOTM0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjkzNDk6XHRcbjkzNTA6XHRcdGhkZXYtXHUwMDNlcGRldiA9IHBkZXY7XG45MzUxOlx0XHRoZGV2LVx1MDAzZWFlX2RldiA9IGFlX2RldjtcbjkzNTI6XHRcdGhkZXYtXHUwMDNlcmVzZXRfdHlwZSA9IEhOQUUzX05PTkVfUkVTRVQ7XG45MzUzOlx0XHRoZGV2LVx1MDAzZXJlc2V0X2xldmVsID0gSE5BRTNfRlVOQ19SRVNFVDtcbjkzNTQ6XHRcdGFlX2Rldi1cdTAwM2Vwcml2ID0gaGRldjtcbjkzNTU6XHRcbjkzNTY6XHRcdC8qIEhXIHN1cHBydCAyIGxheWVyIHZsYW4gKi9cbjkzNTc6XHRcdGhkZXYtXHUwMDNlbXBzID0gRVRIX0ZSQU1FX0xFTiAmIzQzOyBFVEhfRkNTX0xFTiAmIzQzOyAyICogVkxBTl9ITEVOO1xuOTM1ODpcdFxuOTM1OTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZoZGV2LVx1MDAzZXZwb3J0X2xvY2spO1xuOTM2MDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGRldi1cdTAwM2VmZF9ydWxlX2xvY2spO1xuOTM2MTpcdFx0c2VtYV9pbml0KFx1MDAyNmhkZXYtXHUwMDNlcmVzZXRfc2VtLCAxKTtcbjkzNjI6XHRcbjkzNjM6XHRcdHJldCA9IGhjbGdlX3BjaV9pbml0KGhkZXYpO1xuOTM2NDpcdFx0aWYgKHJldClcbjkzNjU6XHRcdFx0Z290byBvdXQ7XG45MzY2Olx0XG45MzY3Olx0XHQvKiBGaXJtd2FyZSBjb21tYW5kIHF1ZXVlIGluaXRpYWxpemUgKi9cbjkzNjg6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3F1ZXVlX2luaXQoaGRldi1cdTAwM2VwZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbjkzNjk6XHRcdGlmIChyZXQpXG45MzcwOlx0XHRcdGdvdG8gZXJyX3BjaV91bmluaXQ7XG45MzcxOlx0XG45MzcyOlx0XHQvKiBGaXJtd2FyZSBjb21tYW5kIGluaXRpYWxpemUgKi9cbjkzNzM6XHRcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFx1MDAyNmhkZXYtXHUwMDNlaHcuaHcsIFx1MDAyNmhjbGdlX2NtcV9vcHMpO1xuOTM3NDpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuOTM3NTpcdFx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuOTM3NjpcdFx0aWYgKHJldClcbjkzNzc6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzNzg6XHRcbjkzNzk6XHRcdHJldCAgPSBoY2xnZV9jbGVhcl9od19yZXNvdXJjZShoZGV2KTtcbjkzODA6XHRcdGlmIChyZXQpXG45MzgxOlx0XHRcdGdvdG8gZXJyX2NtZF91bmluaXQ7XG45MzgyOlx0XG45MzgzOlx0XHRyZXQgPSBoY2xnZV9nZXRfY2FwKGhkZXYpO1xuOTM4NDpcdFx0aWYgKHJldClcbjkzODU6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzODY6XHRcbjkzODc6XHRcdHJldCA9IGhjbGdlX3F1ZXJ5X2Rldl9zcGVjcyhoZGV2KTtcbjkzODg6XHRcdGlmIChyZXQpIHtcbjkzODk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IGRldiBzcGVjaWZpY2F0aW9ucywgcmV0ID0gJWQuXFxuXCYjMzQ7LFxuOTM5MDpcdFx0XHRcdHJldCk7XG45MzkxOlx0XHRcdGdvdG8gZXJyX2NtZF91bmluaXQ7XG45MzkyOlx0XHR9XG45MzkzOlx0XG45Mzk0Olx0XHRyZXQgPSBoY2xnZV9jb25maWd1cmUoaGRldik7XG45Mzk1Olx0XHRpZiAocmV0KSB7XG45Mzk2Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0NvbmZpZ3VyZSBkZXYgZXJyb3IsIHJldCA9ICVkLlxcblwmIzM0OywgcmV0KTtcbjkzOTc6XHRcdFx0Z290byBlcnJfY21kX3VuaW5pdDtcbjkzOTg6XHRcdH1cbjkzOTk6XHRcbjk0MDA6XHRcdHJldCA9IGhjbGdlX2luaXRfbXNpKGhkZXYpO1xuOTQwMTpcdFx0aWYgKHJldCkge1xuOTQwMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtJbml0IE1TSS9NU0ktWCBlcnJvciwgcmV0ID0gJWQuXFxuXCYjMzQ7LCByZXQpO1xuOTQwMzpcdFx0XHRnb3RvIGVycl9jbWRfdW5pbml0O1xuOTQwNDpcdFx0fVxuOTQwNTpcdFxuOTQwNjpcdFx0cmV0ID0gaGNsZ2VfbWlzY19pcnFfaW5pdChoZGV2KTtcbjk0MDc6XHRcdGlmIChyZXQpXG45NDA4Olx0XHRcdGdvdG8gZXJyX21zaV91bmluaXQ7XG45NDA5Olx0XG45NDEwOlx0XHRyZXQgPSBoY2xnZV9hbGxvY190cXBzKGhkZXYpO1xuOTQxMTpcdFx0aWYgKHJldCkge1xuOTQxMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtBbGxvY2F0ZSBUUVBzIGVycm9yLCByZXQgPSAlZC5cXG5cJiMzNDssIHJldCk7XG45NDEzOlx0XHRcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xuOTQxNDpcdFx0fVxuOTQxNTpcdFxuOTQxNjpcdFx0cmV0ID0gaGNsZ2VfYWxsb2NfdnBvcnQoaGRldik7XG45NDE3Olx0XHRpZiAocmV0KVxuOTQxODpcdFx0XHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcbjk0MTk6XHRcbjk0MjA6XHRcdHJldCA9IGhjbGdlX21hcF90cXAoaGRldik7XG45NDIxOlx0XHRpZiAocmV0KVxuOTQyMjpcdFx0XHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcbjk0MjM6XHRcbjk0MjQ6XHRcdGlmIChoZGV2LVx1MDAzZWh3Lm1hYy5tZWRpYV90eXBlID09IEhOQUUzX01FRElBX1RZUEVfQ09QUEVSKSB7XG45NDI1Olx0XHRcdGNsZWFyX2JpdChITkFFM19ERVZfU1VQUE9SVF9GRUNfQiwgYWVfZGV2LVx1MDAzZWNhcHMpO1xuOTQyNjpcdFx0XHRpZiAoaG5hZTNfZGV2X3BoeV9pbXBfc3VwcG9ydGVkKGhkZXYpKVxuOTQyNzpcdFx0XHRcdHJldCA9IGhjbGdlX3VwZGF0ZV90cF9wb3J0X2luZm8oaGRldik7XG45NDI4Olx0XHRcdGVsc2Vcbjk0Mjk6XHRcdFx0XHRyZXQgPSBoY2xnZV9tYWNfbWRpb19jb25maWcoaGRldik7XG45NDMwOlx0XG45NDMxOlx0XHRcdGlmIChyZXQpXG45NDMyOlx0XHRcdFx0Z290byBlcnJfbXNpX2lycV91bmluaXQ7XG45NDMzOlx0XHR9XG45NDM0Olx0XG45NDM1Olx0XHRyZXQgPSBoY2xnZV9pbml0X3Vtdl9zcGFjZShoZGV2KTtcbjk0MzY6XHRcdGlmIChyZXQpXG45NDM3Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NDM4Olx0XG45NDM5Olx0XHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgSE5TMyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGhvdyB0aGUgYGhjbGdlYCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgaGNsZ2VfY29tbV9jbWRfaW5pdGAgYW5kIGBoY2xnZV9nZXRfY2FwYC4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIsIHNwZWNpZmljYWxseSwgaXMgaW50cmlndWluZy4gSXQgY2FuIGluamVjdCByYW5kb20gTU1JTyByZWFkIHZhbHVlcywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYnlwYXNzIGluaXRpYWwgY2hlY2tzLiBIb3dldmVyLCBJIGhpZ2hseSBkb3VidCBpdCBjYW4gbmF2aWdhdGUgdGhlIGNvbXBsZXggZmlybXdhcmUgY29tbWFuZCBxdWV1ZXMgcmVxdWlyZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4KCkJ1dCBob2xkIG9uISBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIGNvZGUgcGF0aHMgZGVlbWVkICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cy4gRG9lcyBzeXprYWxsZXIgZXZlbiB0YXJnZXQgUENJIGRyaXZlcnMgd2l0aCBpdHMgZnV6emVyPyBZZXMsIGl0IGhhcyB0aGUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBpdCBkb2VzLgoKVGhlIGtleSBpcyBpbiB0aGUgZGVmaW5pdGlvbiBvZiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2gmIzM0Oy4gIFRoZSBwcm9tcHQgZXhwbGljaXRseSBleGNsdWRlcyBhbnkgcGF0aCB1bnJlYWNoYWJsZSBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIFRoYXQgbWVhbnMgaWYgdGhlIGZ1enppbmcgYXBwcm9hY2ggY2FuJiMzOTt0IHJlYWNoIGEgY29kZSBibG9jayBpbiBRRU1VL0dDRSBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpTbywgaXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCBITlMzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIFFFTVUgd2l0aCB0aGUgUENJIGZ1enplcj8gIEl0JiMzOTtzIGEgZ2VuZXJpYyBQQ0kgZnV6emVyLCBub3QgYW4gSE5TMy1zcGVjaWZpYyBlbXVsYXRvci4gIFRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlLgoKQ2FuIHRoaXMgZ2VuZXJpYyBmdXp6ZXIgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgdG8gYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWA/IFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIHRocm91Z2ggc3lzZnMuIEl0IHJlcXVpcmVzIHRoYXQgdGhlIFBDSSBkZXZpY2UgYmUgcHJvcGVybHkgcHJvYmVkIGFuZCByZWdpc3RlcmVkIGZpcnN0LiBJZiB0aGUgUENJIGZ1enplciB0aHJvd3MgcmFuZG9tIE1NSU8gZGF0YSwgdGhlbiBgaGNsZ2VfaW5pdF9hZV9kZXZgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5IG9uLCBsaWtlbHkgYXQgdGhlIGBoY2xnZV9jb21tX2NtZF9pbml0YCBvciBgaGNsZ2VfZ2V0X2NhcGAgc3RhZ2UsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGV4cGVjdCBzcGVjaWZpYyByZXNwb25zZXMgZnJvbSB0aGUgZmlybXdhcmUmIzM5O3MgY29tbWFuZCBxdWV1ZS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpbiBkZXRhaWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGV4YW1pbmluZyBgaGNsZ2VfY29tbV9jbWRfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fY21kX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX2NvbmZpZ19yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNjp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTU5OD1FWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2MDA6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X29wcyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYwMS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYwOS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYxMDpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9pbml0X29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjEyOmludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MTMtXHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2Mjc6XHRoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3MoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02ODAtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo2ODE6RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY4Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ2Nj1zdGF0aWMgaW5saW5lIHUzMiBoY2xnZV9jb21tX3JlYWRfcmVnKHU4IF9faW9tZW0gKmJhc2UsIHUzMiByZWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ3ODp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzktaW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDk0PWludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0OTU6aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ni1cdFx0XHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ny1cdFx0XHR1bnNpZ25lZCBsb25nIHJlc2V0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0OTg6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X29wcyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz00MTEzPXN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy00MTMzLVx0XHQgKiBhbnkgbWFpbGJveCBoYW5kbGluZyBvciBjb21tYW5kIHRvIGZpcm13YXJlIGlzIG9ubHkgdmFsaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6NDEzNDpcdFx0ICogYWZ0ZXIgaGNsZ2VfY29tbV9jbWRfaW5pdCBpcyBjYWxsZWQuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTQxMzUtXHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTM0MD1zdGF0aWMgaW50IGhjbGdlX2luaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTkzNzItXHQvKiBGaXJtd2FyZSBjb21tYW5kIGluaXRpYWxpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTM3MzpcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFx1MDAyNmhkZXYtXHUwMDNlaHcuaHcsIFx1MDAyNmhjbGdlX2NtcV9vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5Mzc0Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05Mzc1LVx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTgwNj1zdGF0aWMgaW50IGhjbGdlX3Jlc2V0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo5ODI2Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odywgXHUwMDI2aGRldi1cdTAwM2Vmd192ZXJzaW9uLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI3LVx0XHRcdFx0ICB0cnVlLCBoZGV2LVx1MDAzZXJlc2V0X3BlbmRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yODY3PXN0YXRpYyBpbnQgaGNsZ2V2Zl9yZXNldF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjg3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyODgwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVx1MDAzZWFlX2RldiwgXHUwMDI2aGRldi1cdTAwM2Vody5odyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yODgxLVx0XHRcdFx0ICBcdTAwMjZoZGV2LVx1MDAzZWZ3X3ZlcnNpb24sIGZhbHNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yOTIwPXN0YXRpYyBpbnQgaGNsZ2V2Zl9pbml0X2hkZXYoc3RydWN0IGhjbGdldmZfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzU6XHRoY2xnZV9jb21tX2NtZF9pbml0X29wcyhcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LCBcdTAwMjZoY2xnZXZmX2NtcV9vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzY6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTI5MzctXHRcdFx0XHQgIFx1MDAyNmhkZXYtXHUwMDNlZndfdmVyc2lvbiwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjEyCgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgaGNsZ2VfY29tbV9jbWRfaW5pdGA6CgoqKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9pbml0YCoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24sIGBoY2xnZV9jb21tX2NtZF9pbml0YC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIHdpdGggJiMzNDtoY2xnZSYjMzQ7IHByZXN1bWFibHkgaW5kaWNhdGluZyBhIGNvbm5lY3Rpb24gdG8gaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBjb21tdW5pY2F0aW9uIGxheWVyLCBhbmQgJiMzNDtjb21tX2NtZCYjMzQ7IGhpbnRpbmcgYXQgY29tbXVuaWNhdGlvbiBjb21tYW5kcywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBpbml0aWFsaXppbmcgYSBjb21wb25lbnQgb2YgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgb3IgdGhlIGNvbW1hbmQgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiB0aGlzIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgb3BlcmF0aW9uIHRvIHByb3Blcmx5IGFzc2VzcyB3aGF0IGlzIGdvaW5nIG9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGVyaGFwcyBldmVuIHJlZ2lzdHJhdGlvbiBvZiBjb21tYW5kIGhhbmRsZXJzIGlmIHRoaXMgaXMgYSBmcmFtZXdvcmsuIEl0IHdvdWxkIGJlIHZhbHVhYmxlIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdCBzZXRzIHVwIGEgY29udGV4dCwgcHJlcGFyZXMgZGF0YSBidWZmZXJzLCByZWdpc3RlcnMgY29tbWFuZHMsIG9yIGNvbmZpZ3VyZXMgdW5kZXJseWluZyBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9uIHByaW9yIGluaXRpYWxpemF0aW9uIHN0ZXBzIHdpbGwgYmUgZXNzZW50aWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IGZ1dHVyZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEyOlx0aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gNjEzOlx0XHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxuIDYxNDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmVzZXRfcGVuZGluZylcbiA2MTU6XHR7XG4gNjE2Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcdTAwMjZody1cdTAwM2VjbXE7XG4gNjE3Olx0XHRpbnQgcmV0O1xuIDYxODpcdFxuIDYxOTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDYyMDpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtZHEtXHUwMDNlY3JxLmxvY2spO1xuIDYyMTpcdFxuIDYyMjpcdFx0Y21kcS1cdTAwM2Vjc3EubmV4dF90b19jbGVhbiA9IDA7XG4gNjIzOlx0XHRjbWRxLVx1MDAzZWNzcS5uZXh0X3RvX3VzZSA9IDA7XG4gNjI0Olx0XHRjbWRxLVx1MDAzZWNycS5uZXh0X3RvX2NsZWFuID0gMDtcbiA2MjU6XHRcdGNtZHEtXHUwMDNlY3JxLm5leHRfdG9fdXNlID0gMDtcbiA2MjY6XHRcbiA2Mjc6XHRcdGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhodyk7XG4gNjI4Olx0XG4gNjI5Olx0XHRzcGluX3VubG9jayhcdTAwMjZjbWRxLVx1MDAzZWNycS5sb2NrKTtcbiA2MzA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDYzMTpcdFxuIDYzMjpcdFx0Y2xlYXJfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpO1xuIDYzMzpcdFxuIDYzNDpcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgbmV3IHJlc2V0IHBlbmRpbmcsIGJlY2F1c2UgdGhlIGhpZ2hlciBsZXZlbFxuIDYzNTpcdFx0ICogcmVzZXQgbWF5IGhhcHBlbiB3aGVuIGxvd2VyIGxldmVsIHJlc2V0IGlzIGJlaW5nIHByb2Nlc3NlZC5cbiA2MzY6XHRcdCAqL1xuIDYzNzpcdFx0aWYgKHJlc2V0X3BlbmRpbmcpIHtcbiA2Mzg6XHRcdFx0cmV0ID0gLUVCVVNZO1xuIDYzOTpcdFx0XHRnb3RvIGVycl9jbWRfaW5pdDtcbiA2NDA6XHRcdH1cbiA2NDE6XHRcbiA2NDI6XHRcdC8qIGdldCB2ZXJzaW9uIGFuZCBkZXZpY2UgY2FwYWJpbGl0aWVzICovXG4gNjQzOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KGFlX2RldiwgaHcsXG4gNjQ0Olx0XHRcdFx0XHRcdFx0XHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcbiA2NDU6XHRcdGlmIChyZXQpIHtcbiA2NDY6XHRcdFx0ZGV2X2VycihcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gNjQ3Olx0XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gYW5kIGNhcGFiaWxpdGllcywgcmV0ID0gJWRcXG5cJiMzNDssXG4gNjQ4Olx0XHRcdFx0cmV0KTtcbiA2NDk6XHRcdFx0Z290byBlcnJfY21kX2luaXQ7XG4gNjUwOlx0XHR9XG4gNjUxOlx0XG4gNjUyOlx0XHRkZXZfaW5mbyhcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gNjUzOlx0XHRcdCBcJiMzNDtUaGUgZmlybXdhcmUgdmVyc2lvbiBpcyAlbHUuJWx1LiVsdS4lbHVcXG5cJiMzNDssXG4gNjU0Olx0XHRcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTNfTUFTSyxcbiA2NTU6XHRcdFx0XHRcdCBITkFFM19GV19WRVJTSU9OX0JZVEUzX1NISUZUKSxcbiA2NTY6XHRcdFx0IGhuYWUzX2dldF9maWVsZCgqZndfdmVyc2lvbiwgSE5BRTNfRldfVkVSU0lPTl9CWVRFMl9NQVNLLFxuIDY1NzpcdFx0XHRcdFx0IEhOQUUzX0ZXX1ZFUlNJT05fQllURTJfU0hJRlQpLFxuIDY1ODpcdFx0XHQgaG5hZTNfZ2V0X2ZpZWxkKCpmd192ZXJzaW9uLCBITkFFM19GV19WRVJTSU9OX0JZVEUxX01BU0ssXG4gNjU5Olx0XHRcdFx0XHQgSE5BRTNfRldfVkVSU0lPTl9CWVRFMV9TSElGVCksXG4gNjYwOlx0XHRcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTBfTUFTSyxcbiA2NjE6XHRcdFx0XHRcdCBITkFFM19GV19WRVJTSU9OX0JZVEUwX1NISUZUKSk7XG4gNjYyOlx0XG4gNjYzOlx0XHRpZiAoIWlzX3BmIFx1MDAyNlx1MDAyNiBhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuIDY2NDpcdFx0XHRyZXR1cm4gMDtcbiA2NjU6XHRcbiA2NjY6XHRcdC8qIGFzayB0aGUgZmlybXdhcmUgdG8gZW5hYmxlIHNvbWUgZmVhdHVyZXMsIGRyaXZlciBjYW4gd29yayB3aXRob3V0XG4gNjY3Olx0XHQgKiBpdC5cbiA2Njg6XHRcdCAqL1xuIDY2OTpcdFx0cmV0ID0gaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIHRydWUpO1xuIDY3MDpcdFx0aWYgKHJldClcbiA2NzE6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2YWVfZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIDY3MjpcdFx0XHRcdCBcJiMzNDtGaXJtd2FyZSBjb21wYXRpYmxlIGZlYXR1cmVzIG5vdCBlbmFibGVkKCVkKS5cXG5cJiMzNDssXG4gNjczOlx0XHRcdFx0IHJldCk7XG4gNjc0Olx0XHRyZXR1cm4gMDtcbiA2NzU6XHRcbiA2NzY6XHRlcnJfY21kX2luaXQ6XG4gNjc3Olx0XHRzZXRfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpO1xuIDY3ODpcdFxuIDY3OTpcdFx0cmV0dXJuIHJldDtcbiA2ODA6XHR9XG4gNjgxOlx0RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XG4gNjgyOlx0XG4gNjgzOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiA2ODQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XCYjMzQ7KTtcbiA2ODU6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0h1YXdlaSBUZWNoLiBDby4sIEx0ZC5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE4NQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBjYWxsOgoKKipBbmFseXppbmcgYGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlgKioKCkFscmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5YCBpcyBsaWtlbHkgYSBsb3ctbGV2ZWwgZnVuY3Rpb24sIHByb2JhYmx5IHBhcnQgb2YgdGhlIGhhcmR3YXJlIGNvbW11bmljYXRpb24gbGF5ZXIuIEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBoYXJkd2FyZS4gSXQgc2VuZHMgYSBjb21tYW5kLCBwcmVzdW1hYmx5IGEgcXVlcnksIHRvIHRoZSBlbWJlZGRlZCBmaXJtd2FyZSBvbiB0aGUgZGV2aWNlLiBUaGVuLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgbWVhbnMgaXQmIzM5O3MgYSBzeW5jaHJvbm91cyBvcGVyYXRpb247IHdlJiMzOTtyZSBibG9ja2luZyB1bnRpbCB0aGUgZmlybXdhcmUgcmVwbGllcy4KClRoaXMgcmVzcG9uc2UgaXMgZ29pbmcgdG8gYmUgdml0YWwgYmVjYXVzZSBpdCYjMzk7bGwgbGlrZWx5IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpcm13YXJlIHZlcnNpb24sIHdoaWNoIHdpbGwgYWZmZWN0IHdoYXQgY29kZSBwYXRocyBuZWVkIHRvIGJlIHRha2VuLiBJdCB3aWxsIGFsc28gcHJvdmlkZSB0aGUgaGFyZHdhcmUmIzM5O3MgY2FwYWJpbGl0aWVzLiBUaGlzICYjMzQ7Y2FwYWJpbGl0eSYjMzQ7IGluZm9ybWF0aW9uIGlzIHdoYXQgSSYjMzk7bSByZWFsbHkgY3VyaW91cyBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkYXRhIHRoYXQgY29tZXMgYmFjay4gSXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGNhcGFibGUgb2Yg4oCTIGZlYXR1cmVzLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBwb3NzaWJseSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucy4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiBvbiB3aGljaCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIG9yIGNvbW11bmljYXRpb24gc3RhY2sgYnVpbGRzLiBBbnkgZGlzY3JlcGFuY2llcyBoZXJlIGNvdWxkIGNhdXNlIG1ham9yIHByb2JsZW1zIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoaXMgcmVzcG9uc2UgY2FyZWZ1bGx5IHRvIGRldGVybWluZSBob3cgdGhlIHNvZnR3YXJlIGhhbmRsZXMgdGhlc2UgcG90ZW50aWFsIHZhcmlhdGlvbnMuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHVzaW5nIHRoZSBoYXJkd2FyZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTIxMD1pbnQgaGNsZ2VfY29tbV9hbGxvY19jbWRfcXVldWUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBpbnQgcmluZ190eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyMjg6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMjktXHRcdFx0XHRcdFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NjEyPWludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjQyLVx0LyogZ2V0IHZlcnNpb24gYW5kIGRldmljZSBjYXBhYmlsaXRpZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjQzOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShhZV9kZXYsIGh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02NDQtXHRcdFx0XHRcdFx0XHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ3OD12b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzk6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODAtXHRcdFx0XHRcdFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTIwNwoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWA6CgoqKkFuYWx5emluZyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAqKgoKQWxyaWdodCwgc28gdGhlIG5hbWUgYWxvbmUgZ2l2ZXMgbWUgYSBwcmV0dHkgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBsaWtlbHkgcmVwcmVzZW50cyBhIGNvbW1hbmQgd2l0aGluIHRoZSBgaGNsZ2VfY29tbWAgbW9kdWxlICh3aGljaCwgZ2l2ZW4gdGhlIG5hbWluZywgSSYjMzk7bSBpbmZlcnJpbmcgaXMgcmVsYXRlZCB0byBzb21lIGNvbW11bmljYXRpb24gbGF5ZXIsIHBlcmhhcHMgaGFyZHdhcmUgY29udHJvbCBsYW5ndWFnZSBvciBhIHNpbWlsYXIgZW1iZWRkZWQgc3lzdGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIHRoaXMgcGFydGljdWxhciBjb21tYW5kIGFpbXMgdG8gcmV0cmlldmUsIGJ1dCAmIzM5O3ZlcnNpb24mIzM5OyBhbmQgJiMzOTtjYXBhYmlsaXR5JiMzOTsgYXJlIGh1Z2UgY2x1ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBxdWVyeSBzb21lIGRldmljZSBvciBtb2R1bGUgZm9yIGl0cyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXRzIGZ1bmN0aW9uYWwgY2FwYWJpbGl0aWVzLiBJJiMzOTttIHRoaW5raW5nIGluIHRlcm1zIG9mIGJlaW5nIGFibGUgdG8gY2hlY2sgdGhlIGNvbXBhdGliaWxpdHkgb2YgZGlmZmVyZW50IG1vZHVsZXMuIE1heWJlIGl0JiMzOTtzIGNoZWNraW5nIHdoYXQgZmVhdHVyZXMgdGhlIGRldmljZSBzdXBwb3J0cywgbGlrZSBjZXJ0YWluIGRhdGEgdHJhbnNmZXIgc3BlZWRzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB1bml0cy4KCkkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNvbW1hbmQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSXMgaXQgYSBzeW5jaHJvbm91cyByZXF1ZXN0LXJlc3BvbnNlIHR5cGUsIG9yIG1vcmUgb2YgYW4gYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbj8gRG9lcyBpdCB1dGlsaXplIGEgcGFydGljdWxhciBjb21tdW5pY2F0aW9uIHByb3RvY29sPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIG9yIHRpbWVvdXQgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZD8gVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCBiZSBrZXksIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgY29tbWFuZCBpcyBzdHJ1Y3R1cmVkLiBTcGVjaWZpY2FsbHksIGhvdyB0aGUgY29tbWFuZCBpcyBzdHJ1Y3R1cmVkIGFzIHdlbGwgYXMgaG93IHRoZSByZXNwb25zZSBpcyBpbnRlcnByZXRlZCBhbmQgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyODpcdGludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcbiAyMjk6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gMjMwOlx0XHRcdFx0XHRcdFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHN0cnVjdCBoY2xnZV9jb21tX3F1ZXJ5X3ZlcnNpb25fY21kICpyZXNwO1xuIDIzMzpcdFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbiAyMzQ6XHRcdGludCByZXQ7XG4gMjM1Olx0XG4gMjM2Olx0XHRoY2xnZV9jb21tX2NtZF9zZXR1cF9iYXNpY19kZXNjKFx1MDAyNmRlc2MsIEhDTEdFX09QQ19RVUVSWV9GV19WRVIsIDEpO1xuIDIzNzpcdFx0cmVzcCA9IChzdHJ1Y3QgaGNsZ2VfY29tbV9xdWVyeV92ZXJzaW9uX2NtZCAqKWRlc2MuZGF0YTtcbiAyMzg6XHRcdHJlc3AtXHUwMDNlYXBpX2NhcHMgPSBoY2xnZV9jb21tX2J1aWxkX2FwaV9jYXBzKCk7XG4gMjM5Olx0XG4gMjQwOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbiAyNDE6XHRcdGlmIChyZXQpXG4gMjQyOlx0XHRcdHJldHVybiByZXQ7XG4gMjQzOlx0XG4gMjQ0Olx0XHQqZndfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlZmlybXdhcmUpO1xuIDI0NTpcdFxuIDI0NjpcdFx0YWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uID0gbGUzMl90b19jcHUocmVzcC1cdTAwM2VoYXJkd2FyZSkgXHUwMDNjXHUwMDNjXG4gMjQ3Olx0XHRcdFx0XHRcdCBITkFFM19QQ0lfUkVWSVNJT05fQklUX1NJWkU7XG4gMjQ4Olx0XHRhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gfD0gYWVfZGV2LVx1MDAzZXBkZXYtXHUwMDNlcmV2aXNpb247XG4gMjQ5Olx0XG4gMjUwOlx0XHRpZiAoYWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uID09IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyKSB7XG4gMjUxOlx0XHRcdGhjbGdlX2NvbW1fc2V0X2RlZmF1bHRfY2FwYWJpbGl0eShhZV9kZXYsIGlzX3BmKTtcbiAyNTI6XHRcdFx0cmV0dXJuIDA7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRoY2xnZV9jb21tX3BhcnNlX2NhcGFiaWxpdHkoYWVfZGV2LCBpc19wZiwgcmVzcCk7XG4gMjU2Olx0XG4gMjU3Olx0XHRyZXR1cm4gcmV0O1xuIDI1ODpcdH1cbiAyNTk6XHRcbiAyNjA6XHRzdGF0aWMgY29uc3QgdTE2IHNwZWNfb3Bjb2RlW10gPSB7IEhDTEdFX09QQ19TVEFUU182NF9CSVQsXG4gMjYxOlx0XHRcdFx0XHQgICBIQ0xHRV9PUENfU1RBVFNfMzJfQklULFxuIDI2MjpcdFx0XHRcdFx0ICAgSENMR0VfT1BDX1NUQVRTX01BQyxcbiAyNjM6XHRcdFx0XHRcdCAgIEhDTEdFX09QQ19TVEFUU19NQUNfQUxMLFxuIDI2NDpcdFx0XHRcdFx0ICAgSENMR0VfT1BDX1FVRVJZXzMyX0JJVF9SRUcsXG4gMjY1Olx0XHRcdFx0XHQgICBIQ0xHRV9PUENfUVVFUllfNjRfQklUX1JFRyxcbiAyNjY6XHRcdFx0XHRcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX01QRl9SQVNfSU5ULFxuIDI2NzpcdFx0XHRcdFx0ICAgSENMR0VfUVVFUllfQ0xFQVJfUEZfUkFTX0lOVCxcbiAyNjg6XHRcdFx0XHRcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX0FMTF9NUEZfTVNJWF9JTlQsXG4gMjY5Olx0XHRcdFx0XHQgICBIQ0xHRV9RVUVSWV9DTEVBUl9BTExfUEZfTVNJWF9JTlQsXG4gMjcwOlx0XHRcdFx0XHQgICBIQ0xHRV9RVUVSWV9BTExfRVJSX0lORk8gfTtcbiAyNzE6XHRcbiAyNzI6XHRzdGF0aWMgYm9vbCBoY2xnZV9jb21tX2lzX3NwZWNpYWxfb3Bjb2RlKHUxNiBvcGNvZGUpXG4gMjczOlx0e1xuIDI3NDpcdFx0LyogdGhlc2UgY29tbWFuZHMgaGF2ZSBzZXZlcmFsIGRlc2NyaXB0b3JzLFxuIDI3NTpcdFx0ICogYW5kIHVzZSB0aGUgZmlyc3Qgb25lIHRvIHNhdmUgb3Bjb2RlIGFuZCByZXR1cm4gdmFsdWVcbiAyNzY6XHRcdCAqL1xuIDI3NzpcdFx0dTMyIGk7XG4gMjc4Olx0XG4gMjc5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNwZWNfb3Bjb2RlKTsgaSYjNDM7JiM0MzspXG4gMjgwOlx0XHRcdGlmIChzcGVjX29wY29kZVtpXSA9PSBvcGNvZGUpXG4gMjgxOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gZmFsc2U7XG4gMjg0Olx0fVxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpyaW5nKVxuIDI4NzpcdHtcbiAyODg6XHRcdGludCBudGMgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4gMjg5Olx0XHRpbnQgbnR1ID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiAyOTA6XHRcdGludCB1c2VkID0gKG50dSAtIG50YyAmIzQzOyByaW5nLVx1MDAzZWRlc2NfbnVtKSAlIHJpbmctXHUwMDNlZGVzY19udW07XG4gMjkxOlx0XG4gMjkyOlx0XHRyZXR1cm4gcmluZy1cdTAwM2VkZXNjX251bSAtIHVzZWQgLSAxO1xuIDI5MzpcdH1cbiAyOTQ6XHRcbiAyOTU6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuIDI5NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcbiAyOTc6XHR7XG4gMjk4Olx0XHRzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzY190b191c2U7XG4gMjk5Olx0XHRpbnQgaGFuZGxlID0gMDtcbiAzMDA6XHRcbiAzMDE6XHRcdHdoaWxlIChoYW5kbGUgXHUwMDNjIG51bSkge1xuIDMwMjpcdFx0XHRkZXNjX3RvX3VzZSA9IFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EuZGVzY1tody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlXTtcbiAzMDM6XHRcdFx0KmRlc2NfdG9fdXNlID0gZGVzY1toYW5kbGVdO1xuIDMwNDpcdFx0XHQoaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSkmIzQzOyYjNDM7O1xuIDMwNTpcdFx0XHRpZiAoaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSBcdTAwM2U9IGh3LVx1MDAzZWNtcS5jc3EuZGVzY19udW0pXG4gMzA2Olx0XHRcdFx0aHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSA9IDA7XG4gMzA3Olx0XHRcdGhhbmRsZSYjNDM7JiM0Mzs7XG4gMzA4Olx0XHR9XG4gMzA5Olx0fVxuIDMxMDpcdFxuIDMxMTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9pc192YWxpZF9jc3FfY2xlYW5faGVhZChzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqcmluZyxcbiAzMTI6XHRcdFx0XHRcdFx0ICAgICAgaW50IGhlYWQpXG4gMzEzOlx0e1xuIDMxNDpcdFx0aW50IG50YyA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiAzMTU6XHRcdGludCBudHUgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuIDMxNjpcdFxuIDMxNzpcdFx0aWYgKG50dSBcdTAwM2UgbnRjKVxuIDMxODpcdFx0XHRyZXR1cm4gaGVhZCBcdTAwM2U9IG50YyBcdTAwMjZcdTAwMjYgaGVhZCBcdTAwM2M9IG50dTtcbiAzMTk6XHRcbiAzMjA6XHRcdHJldHVybiBoZWFkIFx1MDAzZT0gbnRjIHx8IGhlYWQgXHUwMDNjPSBudHU7XG4gMzIxOlx0fVxuIDMyMjpcdFxuIDMyMzpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2NsZWFuKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbiAzMjQ6XHR7XG4gMzI1Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqY3NxID0gXHUwMDI2aHctXHUwMDNlY21xLmNzcTtcbiAzMjY6XHRcdGludCBjbGVhbjtcbiAzMjc6XHRcdHUzMiBoZWFkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdGFuZGFyZCDigJMgc2VuZHMgYSBjb21tYW5kLCB3YWl0cyBmb3IgY29tcGxldGlvbi4gVGhlIFBDSSBmdXp6ZXIsIGlmIGl0JiMzOTtzIGhpdHRpbmcgdGhpcywgKmNvdWxkKiBwb3RlbnRpYWxseSB0cmlnZ2VyIGEgY29tcGxldGlvbiByYW5kb21seSB2aWEgTU1JTywgYnV0IGl0JiMzOTtzIGV4Y2VwdGlvbmFsbHkgdW5saWtlbHkgaXQgd2lsbCBjcmVhdGUgYSB2YWxpZCBmaXJtd2FyZSB2ZXJzaW9uIG9yIGhhcmR3YXJlIHZlcnNpb24gdGhhdCBnZXRzIHBhc3QgYW55IHJlYWwgY2hlY2tzLCB1bmxlc3MgdGhlIGNoZWNrcyBhcmUgbGF1Z2hhYmx5IHdlYWsuCgpBaCwgYnV0IGhhbmcgb24uLi4gYGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlgIGp1c3QgKnJlYWRzKiB0aG9zZSB2ZXJzaW9ucyBmcm9tIHRoZSBkZXNjcmlwdG9yLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSWYgYGFlX2Rldi0mZ3Q7ZGV2X3ZlcnNpb25gIGhhcHBlbnMgdG8gYmUgYEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyYCwgaXQganVzdCByZXR1cm5zIHplcm8uIE90aGVyd2lzZSwgaXQgY2FsbHMgYGhjbGdlX2NvbW1fcGFyc2VfY2FwYWJpbGl0eWAuIFNvLCB0aGUgUENJIGZ1enplciAqbWlnaHQqIGJlIGFibGUgdG8gYnlwYXNzIHRoaXMgaWYgaXQgcmFuZG9tbHkgc2V0cyBhIHZhbGlkIHZlcnNpb24sIG9yIHBlcmhhcHMgaWYgYW55IHZlcnNpb24gaXMgYWNjZXB0ZWQuIFRoaXMgY291bGQgYmUgcHJvbWlzaW5nLgoKQnV0IHRoZSBwcm9tcHQgYWxzbyBzYXlzLCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0IHR5cGljYWxseSBtZWFucyBpZiBpdCYjMzk7cyBhIGRyaXZlciBmb3IgKnNwZWNpZmljKiBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdG9yLCBpdCYjMzk7cyBjb25zaWRlcmVkIHVucmVhY2hhYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0b3IgZm9yIEhOUzM/IEkgZG9uJiMzOTt0IHRoaW5rIHRoZXJlIGlzLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgZGVhZCBlbmQuCgpXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGZ1enogSE5TMz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyBvbiBITlMzIHRvIHNlZSBpZiBhbnlvbmUgaGFzIGhhZCBzdWNjZXNzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5LCBvciBkaWZmaWN1bHQsIGl0IHdpbGwgYmUgdG8gcmVhY2ggdGhpcyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2huczMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtNQUlOVEFJTkVSUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0xMTY5Nz1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoxMTY5ODpGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmL2huczMtcG11LnJzdFxuTUFJTlRBSU5FUlM6MTE2OTk6RjpcdGRyaXZlcnMvcGVyZi9oaXNpbGljb24vaG5zM19wbXUuY1xuTUFJTlRBSU5FUlMtMTE3MDAtXG4tLVxuTUFJTlRBSU5FUlM9MTE3MzM9VzpcdGh0dHA6Ly93d3cuaGlzaWxpY29uLmNvbVxuTUFJTlRBSU5FUlM6MTE3MzQ6RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1xuTUFJTlRBSU5FUlMtMTE3MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTk0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIEhOUzMgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gcmVhY2ggdGhpcyBzcGVjaWZpYyBITlMzIGRyaXZlci4gQWgsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplci4gSXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBQQ0kgZHJpdmVycyBieSBtYXRjaGluZyB0aGUgUENJIElEIGFuZCB0aGVuIGZlZWRpbmcgcmFuZG9tIE1NSU8gYWNjZXNzZXMuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHRoZSB3aG9sZSBzdG9yeS4gUmVhbGlzdGljYWxseSwgaWYgdGhlIGRyaXZlciByZWxpZXMgb24gY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGl0IHVzdWFsbHkgZmFpbHMgZHVyaW5nIHRoZSBwcm9iaW5nIHN0YWdlLiAKCkhvbGQgb24sIHRob3VnaCwgdGhlIHBhdGNoIGFwcGxpY2F0aW9uIGNvbW1lbnQgaW5kaWNhdGVzIGBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdgLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50LiBJdCBtZWFucyBzeXprYWxsZXIgaXMgZWl0aGVyIGFjdGl2ZWx5IGZ1enppbmcgaXQsIG9yIGF0IGxlYXN0IHNvbWVvbmUgc3VibWl0dGVkIGl0IGZvciB0ZXN0aW5nLiBPa2F5LCBpZiBzeXprYWxsZXIgaXMgKnRlc3RpbmcqIGl0LCBpdCBtdXN0IGJlIHNvbWV3aGF0IHJlYWNoYWJsZSwgb3IgYXQgbGVhc3QgYmVpbmcgdGVzdGVkIGZvciBjb21waWxhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZTogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFJpZ2h0LCBidXQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgY2F2ZWF0OiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpUaGUgSE5TMyBpcyBhICpwaHlzaWNhbCogbmV0d29yayBjYXJkLCBhbmQgYXMgZmFyIGFzIEkga25vdywgdGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0IGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBvZiBgbWFjODAyMTFfaHdzaW1gIG9yIGBuZXRkZXZzaW1gIGZvciBITlMzLiBUaGUgUENJIGZ1enplciBtaWdodCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRvIGZhaWwgZGVlcCBpbnRvIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgbGlrZWx5IHdoaWxlIHdhaXRpbmcgZm9yIGZpcm13YXJlIHRvIGxvYWQsIG9yIHRyeWluZyB0byBpbml0aWFsaXplIHRoZSBjb21tYW5kIHF1ZXVlLgoKVG8gYmUgdGhvcm91Z2gsIGxldCBtZSB2ZXJpZnkgaWYgYGhjbGdlX2NvbW1fY21kX3NlbmRgIGlzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgYml0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNsZ2VfY29tbV9jbWRfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTc4PWludCBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWcoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoxMDE6XHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTEwMi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NjQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDY2LSAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NzM6aW50IGhjbGdlX2NvbW1fY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDc0LVx0XHRcdGludCBudW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjEtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo1MjI6RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfc2VuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ4Mj1pbnQgaGNsZ2VfY29tbV9hbGxvY19jbWRfcXVldWUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBpbnQgcmluZ190eXBlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDgzOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ4NC1cdFx0XHRpbnQgbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMwNC1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzozMDU6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTMxNz1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2lucHV0X3R1cGxlKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MzM4Olx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zODM9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19hbGdvX2tleShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGNvbnN0IHU4IGhmdW5jLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVx0XHRrZXlfb2Zmc2V0JiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6NDEyOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDEzLVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy03Mi1cdFx0ZGVzYy5kYXRhWzBdID0gY3B1X3RvX2xlMzIodHFwLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy03NC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtODYtXHRcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3Olx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtODgtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmM9MzQ0Mj1pbnQgaGNsZ2VfaGFuZGxlX3ZmX3F1ZXVlX2Vycl9yYXMoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmMtMzQ1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYzozNDYwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3LCBkZXNjLCAyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzIxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzIyOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTUwPWludCBoY2xnZXZmX2NtZF9zZW5kKHN0cnVjdCBoY2xnZXZmX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjUyOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA2NgoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIENvbW11bmljYXRpb24qKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gWWVhaCwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UgdXNlIHRvIGFjdHVhbGx5ICp0cmFuc21pdCogY29tbWFuZHMgdG8gdGhlIGZpcm13YXJlLCBpc24mIzM5O3QgaXQ/IE9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhpcyBjb3JyZWN0bHkgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29tbWFuZCB0cmFuc21pc3Npb24gd29ya3MuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGhjbGdlX2NvbW1fY21kLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gR290IHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHQgKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcbiA0NjY6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuIDQ2NzpcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxuIDQ2ODpcdCAqIEBudW0gOiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGJlIHNlbnRcbiA0Njk6XHQgKlxuIDQ3MDpcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxuIDQ3MTpcdCAqIHNlbmRzIHRoZSBxdWV1ZSwgY2xlYW5zIHRoZSBxdWV1ZSwgZXRjXG4gNDcyOlx0ICoqL1xuIDQ3MzpcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gNDc0Olx0XHRcdFx0aW50IG51bSlcbiA0NzU6XHR7XG4gNDc2Olx0XHRib29sIGlzX3NwZWNpYWwgPSBoY2xnZV9jb21tX2lzX3NwZWNpYWxfb3Bjb2RlKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlb3Bjb2RlKSk7XG4gNDc3Olx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqY3NxID0gXHUwMDI2aHctXHUwMDNlY21xLmNzcTtcbiA0Nzg6XHRcdGludCByZXQ7XG4gNDc5Olx0XHRpbnQgbnRjO1xuIDQ4MDpcdFxuIDQ4MTpcdFx0aWYgKGh3LVx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQpXG4gNDgyOlx0XHRcdGh3LVx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XG4gNDgzOlx0XG4gNDg0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHctXHUwMDNlY21xLmNzcS5sb2NrKTtcbiA0ODU6XHRcbiA0ODY6XHRcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcdTAwMjZody1cdTAwM2Vjb21tX3N0YXRlKSkge1xuIDQ4NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ4ODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKG51bSBcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EpKSB7XG4gNDkyOlx0XHRcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXG4gNDkzOlx0XHRcdCAqIG5lZWQgdXBkYXRlIHRoZSBTVyBIRUFEIHBvaW50ZXIgY3NxLVx1MDAzZW5leHRfdG9fY2xlYW5cbiA0OTQ6XHRcdFx0ICovXG4gNDk1Olx0XHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID1cbiA0OTY6XHRcdFx0XHRoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xuIDQ5NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDQ5OTpcdFx0fVxuIDUwMDpcdFxuIDUwMTpcdFx0LyoqXG4gNTAyOlx0XHQgKiBSZWNvcmQgdGhlIGxvY2F0aW9uIG9mIGRlc2MgaW4gdGhlIHJpbmcgZm9yIHRoaXMgdGltZVxuIDUwMzpcdFx0ICogd2hpY2ggd2lsbCBiZSB1c2UgZm9yIGhhcmR3YXJlIHRvIHdyaXRlIGJhY2tcbiA1MDQ6XHRcdCAqL1xuIDUwNTpcdFx0bnRjID0gaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcbiA1MDY6XHRcbiA1MDc6XHRcdGhjbGdlX2NvbW1fY21kX2NvcHlfZGVzYyhodywgZGVzYywgbnVtKTtcbiA1MDg6XHRcbiA1MDk6XHRcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXG4gNTEwOlx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuIDUxMTpcdFx0XHRcdCAgICAgaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XG4gNTEyOlx0XG4gNTEzOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoaHcsIGRlc2MsIG51bSwgbnRjKTtcbiA1MTQ6XHRcbiA1MTU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNTE2Olx0XG4gNTE3Olx0XHRpZiAoaHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfZ2V0KVxuIDUxODpcdFx0XHRody1cdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9nZXQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XG4gNTE5Olx0XG4gNTIwOlx0XHRyZXR1cm4gcmV0O1xuIDUyMTpcdH1cbiA1MjI6XHRFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcbiA1MjM6XHRcbiA1MjQ6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4gNTI1Olx0e1xuIDUyNjpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRywgMCk7XG4gNTI3Olx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0hfUkVHLCAwKTtcbiA1Mjg6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCAwKTtcbiA1Mjk6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xuIDUzMDpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9UQUlMX1JFRywgMCk7XG4gNTMxOlx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLCAwKTtcbiA1MzI6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfSF9SRUcsIDApO1xuIDUzMzpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9ERVBUSF9SRUcsIDApO1xuIDUzNDpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9IRUFEX1JFRywgMCk7XG4gNTM1Olx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX1RBSUxfUkVHLCAwKTtcbiA1MzY6XHR9XG4gNTM3Olx0XG4gNTM4Olx0dm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxuIDUzOTpcdFx0XHRcdCAgIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbiA1NDA6XHR7XG4gNTQxOlx0XHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcdTAwMjZody1cdTAwM2VjbXE7XG4gNTQyOlx0XG4gNTQzOlx0XHRoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWcoYWVfZGV2LCBodywgZmFsc2UpO1xuIDU0NDpcdFx0c2V0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcdTAwMjZody1cdTAwM2Vjb21tX3N0YXRlKTtcbiA1NDU6XHRcbiA1NDY6XHRcdC8qIHdhaXQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpcm13YXJlIGNvbXBsZXRlcyB0aGUgcG9zc2libGUgbGVmdFxuIDU0NzpcdFx0ICogb3ZlciBjb21tYW5kcy5cbiA1NDg6XHRcdCAqL1xuIDU0OTpcdFx0bXNsZWVwKEhDTEdFX0NPTU1fQ01EUV9DTEVBUl9XQUlUX1RJTUUpO1xuIDU1MDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNtZHEtXHUwMDNlY3NxLmxvY2spO1xuIDU1MTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtZHEtXHUwMDNlY3JxLmxvY2spO1xuIDU1MjpcdFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0X3JlZ3MoaHcpO1xuIDU1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y21kcS1cdTAwM2VjcnEubG9jayk7XG4gNTU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjbWRxLVx1MDAzZWNzcS5sb2NrKTtcbiA1NTU6XHRcbiA1NTY6XHRcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcdTAwMjZjbWRxLVx1MDAzZWNzcSk7XG4gNTU3Olx0XHRoY2xnZV9jb21tX2ZyZWVfY21kX2Rlc2MoXHUwMDI2Y21kcS1cdTAwM2VjcnEpO1xuIDU1ODpcdH1cbiA1NTk6XHRFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF91bmluaXQpO1xuIDU2MDpcdFxuIDU2MTpcdGludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4gNTYyOlx0e1xuIDU2MzpcdFx0c3RydWN0IGhjbGdlX2NvbW1fY21xICpjbWRxID0gXHUwMDI2aHctXHUwMDNlY21xO1xuIDU2NDpcdFx0aW50IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMTYKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIENvbW1hbmQgRXhlY3V0aW9uIFJlc3VsdHMqKgoKUmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGlzIHdoZXJlIHdlJiMzOTtyZSBhdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgdmVyaWZpY2F0aW9uIHN0ZXA7IHRoZSBjcnVjaWFsIHBvaW50IG9mIGRldGVybWluaW5nIGlmIHRoZSBjb21tYW5kLCB3aGF0ZXZlciBpdCB3YXMsIGFjdHVhbGx5IGRpZCB3aGF0IGl0IHdhcyBzdXBwb3NlZCB0byBkby4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciwgZW5zdXJpbmcgdGhhdCB0aGUgc3lzdGVtIG1vdmVzIGZvcndhcmQgb25seSBpZiB0aGUgcHJldmlvdXMgYWN0aW9uIGFjaGlldmVkIGl0cyBpbnRlbmRlZCBvdXRjb21lLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHZhcmlvdXMgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBjaGVjayBoYW5kbGVzIHRoZW0uIElzIGl0IGEgc2ltcGxlIHJldHVybiBjb2RlIGNoZWNrLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIHN0YXRlIHZlcmlmaWNhdGlvbj8gRG9lcyBpdCBjb25zaWRlciB0aGUgaW5mbHVlbmNlIG9mIHRoZSBjb21tYW5kIG9uIGRlcGVuZGVudCBtb2R1bGVzPyBIb3cgdGhvcm91Z2ggaXMgaXQ/IFRoZSBxdWFsaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBzdGVwIGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZzogd2hhdCBzcGVjaWZpYyBlcnJvciBjb2RlcyBhcmUgYW50aWNpcGF0ZWQsIGhvdyBhcmUgdGhleSBpbnRlcnByZXRlZCwgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQgZm9sbG93aW5nIGEgZmFpbHVyZSBkZXRlY3RlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBpdCBjb25zaWRlcnMgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlcm1pdHRlbnQgZmFpbHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBleGVjdXRpb24gcGF0aCBpcyBjb25maXJtZWQsIG9yIGRpdmVyZ2VkLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGNoZWNrIGlzIGtleSB0byBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuIDQzNjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxuIDQzNzpcdFx0XHRcdFx0ICAgICAgIGludCBudW0sIGludCBudGMpXG4gNDM4Olx0e1xuIDQzOTpcdFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcbiA0NDA6XHRcdGludCBoYW5kbGUsIHJldDtcbiA0NDE6XHRcbiA0NDI6XHRcdC8qIElmIHRoZSBjb21tYW5kIGlzIHN5bmMsIHdhaXQgZm9yIHRoZSBmaXJtd2FyZSB0byB3cml0ZSBiYWNrLFxuIDQ0MzpcdFx0ICogaWYgbXVsdGkgZGVzY3JpcHRvcnMgdG8gYmUgc2VudCwgdXNlIHRoZSBmaXJzdCBvbmUgdG8gY2hlY2tcbiA0NDQ6XHRcdCAqL1xuIDQ0NTpcdFx0aWYgKEhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlZmxhZykpKVxuIDQ0NjpcdFx0XHRoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3AoaHcsIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlb3Bjb2RlKSxcbiA0NDc6XHRcdFx0XHRcdFx0IFx1MDAyNmlzX2NvbXBsZXRlZCk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAoIWlzX2NvbXBsZXRlZClcbiA0NTA6XHRcdFx0cmV0ID0gLUVCQURFO1xuIDQ1MTpcdFx0ZWxzZVxuIDQ1MjpcdFx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWwoaHcsIGRlc2MsIG51bSwgbnRjKTtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIENsZWFuIHRoZSBjb21tYW5kIHNlbmQgcXVldWUgKi9cbiA0NTU6XHRcdGhhbmRsZSA9IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihodyk7XG4gNDU2Olx0XHRpZiAoaGFuZGxlIFx1MDAzYyAwKVxuIDQ1NzpcdFx0XHRyZXQgPSBoYW5kbGU7XG4gNDU4Olx0XHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxuIDQ1OTpcdFx0XHRkZXZfd2FybihcdTAwMjZody1cdTAwM2VjbXEuY3NxLnBkZXYtXHUwMDNlZGV2LFxuIDQ2MDpcdFx0XHRcdCBcJiMzNDtjbGVhbmVkICVkLCBuZWVkIHRvIGNsZWFuICVkXFxuXCYjMzQ7LCBoYW5kbGUsIG51bSk7XG4gNDYxOlx0XHRyZXR1cm4gcmV0O1xuIDQ2MjpcdH1cbiA0NjM6XHRcbiA0NjQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNTQKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKldhaXRpbmcgb24gdGhlIEZpcm13YXJlJiMzOTtzIFJlcGx5KioKClJpZ2h0LCBzbyBgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwYC4uLiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBoYW5naW5nLCBpc24mIzM5O3QgaXQ/IFdlJiMzOTt2ZSBzZW50IHRoZSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSDigJMgaXQgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSByZWdpc3RlciByZWFkIHRvIGEgY29tcGxleCBjb25maWd1cmF0aW9uIHNlcXVlbmNlIOKAkyBhbmQgbm93IHdlJiMzOTtyZSBlc3NlbnRpYWxseSBpbiBhIHBvbGxpbmcgbG9vcCwgb3IgcGVyaGFwcyB1c2luZyBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbSBpbnRlcm5hbGx5LCB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgdG8gYWNrbm93bGVkZ2UgYW5kIHdyaXRlIGJhY2sgdGhlIHJlc3BvbnNlLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGNvbnZlcmdlcy4gV2UgKmhhdmUqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXRzZWxmIGlzIHNvbGlkIGhlcmU7IGEgZ2xpdGNoIGF0IHRoaXMgc3RhZ2UgaXMgYSBkaXNhc3Rlci4gV2hhdCBhcmUgb3VyIHRpbWVvdXQgbWVjaGFuaXNtcz8gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZSBpZiB0aGUgZmlybXdhcmUgZ29lcyBzaWxlbnQ/IEFyZSB3ZSBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggYW55IGNvbmN1cnJlbnQgb3BlcmF0aW9ucz8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB3b3JzdC1jYXNlIHNjZW5hcmlvcyBoZXJlLCBsaWtlIGlmIHRoZSBmaXJtd2FyZSBjcmFzaGVzIGR1cmluZyBwcm9jZXNzaW5nIGFuZCBuZXZlciB3cml0ZXMgYmFjay4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbSYjMzk7cyByb2J1c3RuZXNzIGFyZSBtYXNzaXZlIGRlcGVuZGluZyBvbiB3aGF0IGNvbW1hbmQgd2FzIGlzc3VlZC4gSXQmIzM5O3MgdGhlIGFic29sdXRlIGVzc2VuY2Ugb2Ygc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV4Y2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0fTtcbiA0MDE6XHRcdHUzMiBlcnJjb2RlX2NvdW50ID0gQVJSQVlfU0laRShoY2xnZV9jb21tX2NtZF9lcnJjb2RlKTtcbiA0MDI6XHRcdHUzMiBpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXJyY29kZV9jb3VudDsgaSYjNDM7JiM0MzspXG4gNDA1Olx0XHRcdGlmIChoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmltcF9lcnJjb2RlID09IGRlc2NfcmV0KVxuIDQwNjpcdFx0XHRcdHJldHVybiBoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmNvbW1vbl9lcnJubztcbiA0MDc6XHRcbiA0MDg6XHRcdHJldHVybiAtRUlPO1xuIDQwOTpcdH1cbiA0MTA6XHRcbiA0MTE6XHRzdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4gNDEyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0sXG4gNDEzOlx0XHRcdFx0XHQgICAgICAgaW50IG50YylcbiA0MTQ6XHR7XG4gNDE1Olx0XHR1MTYgb3Bjb2RlLCBkZXNjX3JldDtcbiA0MTY6XHRcdGludCBoYW5kbGU7XG4gNDE3Olx0XG4gNDE4Olx0XHRvcGNvZGUgPSBsZTE2X3RvX2NwdShkZXNjWzBdLm9wY29kZSk7XG4gNDE5Olx0XHRmb3IgKGhhbmRsZSA9IDA7IGhhbmRsZSBcdTAwM2MgbnVtOyBoYW5kbGUmIzQzOyYjNDM7KSB7XG4gNDIwOlx0XHRcdGRlc2NbaGFuZGxlXSA9IGh3LVx1MDAzZWNtcS5jc3EuZGVzY1tudGNdO1xuIDQyMTpcdFx0XHRudGMmIzQzOyYjNDM7O1xuIDQyMjpcdFx0XHRpZiAobnRjIFx1MDAzZT0gaHctXHUwMDNlY21xLmNzcS5kZXNjX251bSlcbiA0MjM6XHRcdFx0XHRudGMgPSAwO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFx0aWYgKGxpa2VseSghaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShvcGNvZGUpKSlcbiA0MjY6XHRcdFx0ZGVzY19yZXQgPSBsZTE2X3RvX2NwdShkZXNjW251bSAtIDFdLnJldHZhbCk7XG4gNDI3Olx0XHRlbHNlXG4gNDI4Olx0XHRcdGRlc2NfcmV0ID0gbGUxNl90b19jcHUoZGVzY1swXS5yZXR2YWwpO1xuIDQyOTpcdFxuIDQzMDpcdFx0aHctXHUwMDNlY21xLmxhc3Rfc3RhdHVzID0gZGVzY19yZXQ7XG4gNDMxOlx0XG4gNDMyOlx0XHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZShkZXNjX3JldCk7XG4gNDMzOlx0fVxuIDQzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA2NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIHRoZSBIQ0xHRSBDb250ZXh0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2hvdWxkIGJlIHNlZWluZyBhIGNhbGwgdG8gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAgcmlnaHQgYWJvdXQuLi4gKmhlcmUqLiBCdXQgaXQmIzM5O3Mgbm90IHRoZXJlLiBTdHJhbmdlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIG1ha2Ugc3VyZSBpdCB3YXNuJiMzOTt0IGFjY2lkZW50YWxseSBjb21tZW50ZWQgb3V0IG9yIHJlbmFtZWQgaW4gYSByZWNlbnQgY29tbWl0LiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVybmFsIG1hY3JvIHRoYXQmIzM5O3Mgc3Vic3RpdHV0aW5nIGl0IGluLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpc24mIzM5O3QgbXkgZXJyb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTM1ND1zdGF0aWMgdTMyIGhjbGdlX2dldF9jbWRxX3R4X3RpbWVvdXQodTE2IG9wY29kZSwgdTMyIHR4X3RpbWVvdXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM2ODpzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjktXHRcdFx0XHQgICAgIGJvb2wgKmlzX2NvbXBsZXRlZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NDUtXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cdTAwM2VmbGFnKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ0NjpcdFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZW9wY29kZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ0Ny1cdFx0XHRcdFx0IFx1MDAyNmlzX2NvbXBsZXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzYxCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLCBkaXN0aWxsZWQgZG93biB0byBpdHMgY29yZSBjb25jZXB0czoKCioqQW5hbHl6aW5nIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUuIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgbmFtZTogYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGluIGEgY29tbXVuaWNhdGlvbiBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIsIGdpdmVuIHRoZSAmIzM5O2hjbGdlJiMzOTsgcHJlZml4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaXMgYmVpbmcgd2FpdGVkIG9uLCAqd2h5KiwgYW5kICpob3cqIHRoZSB3YWl0IGlzIGltcGxlbWVudGVkLiBUaGUgaW1wbGljaXQgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBnb2luZyBvbiDigJMgdGhlIHN5c3RlbSBzZW5kcyBhIHJlcXVlc3QsIGFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNydWNpYWwgcGF1c2UgdW50aWwgdGhlIGhhcmR3YXJlIHJldHVybnMgd2l0aCBhbiBhbnN3ZXIuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBmZXcga2V5IGFyZWFzIEkgZXhwZWN0IHRvIHNlZToKCiogICAqKkludGVycnVwdCBIYW5kbGluZy9Qb2xsaW5nOioqIEkgYW50aWNpcGF0ZSBlaXRoZXIgYW4gaW50ZXJydXB0LWRyaXZlbiBtZWNoYW5pc20sIHdoZXJlIGFuIGludGVycnVwdCBzaWduYWxzIHRoZSByZXNwb25zZSYjMzk7cyBhcnJpdmFsLCBvciBhIHBvbGxpbmcgc3RyYXRlZ3kgd2hlcmUgdGhlIGZ1bmN0aW9uIGNvbnRpbnVvdXNseSBjaGVja3MgYSBzdGF0dXMgcmVnaXN0ZXIgb3IgZmxhZy4gVGhlIHBlcmZvcm1hbmNlIGFuZCBlZmZpY2llbmN5IGltcGxpY2F0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LgoqICAgKipUaW1lb3V0IE1lY2hhbmlzbToqKiBBbnkgcm9idXN0IGltcGxlbWVudGF0aW9uICptdXN0KiBpbmNsdWRlIGEgdGltZW91dC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHNjZW5hcmlvcyB3aGVyZSB0aGUgcmVzcG9uc2UgaXMgZGVsYXllZCBvciBuZXZlciBhcnJpdmVzLiBBIHNpbXBsZSBsb29wIHdpdGggYSBjb3VudGVyLCBvciBhIG1vcmUgc29waGlzdGljYXRlZCB0aW1lciBpbXBsZW1lbnRhdGlvbi4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSB3YWl0IGZhaWxzLCBlaXRoZXIgZHVlIHRvIGEgdGltZW91dCBvciBwZXJoYXBzIGEgaGFyZHdhcmUgZXJyb3I/IFByb3BlciBlcnJvciBjb2RlcyBvciBmbGFncyBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoqICAgKipTeW5jaHJvbml6YXRpb24vQ29uY3VycmVuY3k6KiogSWYgdGhpcyBpcyBwYXJ0IG9mIGEgbXVsdGktdGhyZWFkZWQgc3lzdGVtLCBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIGNvbmN1cnJlbmN5IGFuZCB0aHJlYWQgc2FmZXR5LiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHdhaXRpbmcgcHJvY2Vzcz8KKiAgICoqUmVzcG9uc2UgVmFsaWRhdGlvbjoqKiBEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGhhcmR3YXJlLCBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgcmV0dXJuZWQgcmVzcG9uc2UuIElzIHRoZXJlIGEgY2hlY2tzdW0gY2hlY2s/IElzIHRoZSBkYXRhIGZvcm1hdCB2YWxpZGF0ZWQ/CiogICAqKkNvbnRleHQ6KiogSXMgdGhpcyBhIGxvdy1sZXZlbCBkcml2ZXIgZnVuY3Rpb24sIG9yIHBhcnQgb2YgYSBtb3JlIGFic3RyYWN0ZWQgY29tbXVuaWNhdGlvbnMgbGlicmFyeT8gSXRzIGRlc2lnbiB3aWxsIGdpdmUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IHRvIGJlIGFzc2Vzc2luZyB0aGUgZWxlZ2FuY2UsIGVmZmljaWVuY3ksIHJvYnVzdG5lc3MsIGFuZCB0aHJlYWQtc2FmZXR5IG9mIHRoZSB3YWl0IG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjg6XHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxuIDM2OTpcdFx0XHRcdFx0ICAgICBib29sICppc19jb21wbGV0ZWQpXG4gMzcwOlx0e1xuIDM3MTpcdFx0dTMyIGNtZHFfdHhfdGltZW91dCA9IGhjbGdlX2dldF9jbWRxX3R4X3RpbWVvdXQob3Bjb2RlLFxuIDM3MjpcdFx0XHRcdFx0XHRcdFx0aHctXHUwMDNlY21xLnR4X3RpbWVvdXQpO1xuIDM3MzpcdFx0dTMyIHRpbWVvdXQgPSAwO1xuIDM3NDpcdFxuIDM3NTpcdFx0ZG8ge1xuIDM3NjpcdFx0XHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XG4gMzc3Olx0XHRcdFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XG4gMzc4Olx0XHRcdFx0YnJlYWs7XG4gMzc5Olx0XHRcdH1cbiAzODA6XHRcdFx0dWRlbGF5KDEpO1xuIDM4MTpcdFx0XHR0aW1lb3V0JiM0MzsmIzQzOztcbiAzODI6XHRcdH0gd2hpbGUgKHRpbWVvdXQgXHUwMDNjIGNtZHFfdHhfdGltZW91dCk7XG4gMzgzOlx0fVxuIDM4NDpcdFxuIDM4NTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZSh1MTYgZGVzY19yZXQpXG4gMzg2Olx0e1xuIDM4NzpcdFx0c3RydWN0IGhjbGdlX2NvbW1fZXJyY29kZSBoY2xnZV9jb21tX2NtZF9lcnJjb2RlW10gPSB7XG4gMzg4Olx0XHRcdHsgSENMR0VfQ09NTV9DTURfRVhFQ19TVUNDRVNTLCAwIH0sXG4gMzg5Olx0XHRcdHsgSENMR0VfQ09NTV9DTURfTk9fQVVUSCwgLUVQRVJNIH0sXG4gMzkwOlx0XHRcdHsgSENMR0VfQ09NTV9DTURfTk9UX1NVUFBPUlRFRCwgLUVPUE5PVFNVUFAgfSxcbiAzOTE6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9RVUVVRV9GVUxMLCAtRVhGVUxMIH0sXG4gMzkyOlx0XHRcdHsgSENMR0VfQ09NTV9DTURfTkVYVF9FUlIsIC1FTk9TUiB9LFxuIDM5MzpcdFx0XHR7IEhDTEdFX0NPTU1fQ01EX1VORVhFX0VSUiwgLUVOT1RCTEsgfSxcbiAzOTQ6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9QQVJBX0VSUiwgLUVJTlZBTCB9LFxuIDM5NTpcdFx0XHR7IEhDTEdFX0NPTU1fQ01EX1JFU1VMVF9FUlIsIC1FUkFOR0UgfSxcbiAzOTY6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9USU1FT1VULCAtRVRJTUUgfSxcbiAzOTc6XHRcdFx0eyBIQ0xHRV9DT01NX0NNRF9ISUxJTktfRVJSLCAtRU5PTElOSyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkzMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgQ29tbWFuZCBDb21wbGV0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgaXMgYSBjaGVjayBmb3IgY29tbWFuZCBjb21wbGV0aW9uLCBzaWduYWxlZCBieSB0aGUgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCBmdW5jdGlvbi4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBhc3N1bXB0aW9uczogdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIG9yIG1vZHVsZSwgZ2l2ZW4gdGhlICYjMzQ7aGNsZ2UmIzM0OyBwcmVmaXgg4oCTIHBlcmhhcHMgSGlnaC1DYXBhY2l0eSBMaW5rIEdpZ2FiaXQgRXRoZXJuZXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuICYjMzQ7Q1NRJiMzNDsgc3VnZ2VzdHMgQ29tbWFuZCBTZXF1ZW5jZSBvciBDb21tYW5kIFF1ZXVlLCBpbXBseWluZyBhIHN0cnVjdHVyZWQgZmxvdyBvZiBpbnN0cnVjdGlvbnMgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIFRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgbm90IGp1c3QgbG9va2luZyBmb3IgKmFueSogaW5kaWNhdGlvbiBvZiB3b3JrLCB3ZSYjMzk7cmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpdmUgJiMzNDtkb25lJiMzNDsgc3RhdHVzLCBtZWFuaW5nIHRoZSBjb21tYW5kIG9yIHNlcXVlbmNlIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBhIHN0YXR1cyByZWdpc3RlciwgYSBkZWRpY2F0ZWQgZmxhZywgb3IgcGVyaGFwcyBtb25pdG9yaW5nIGZvciBhIHNwZWNpZmljIGludGVycnVwdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IFVudGlsIHRoaXMgZnVuY3Rpb24gcmVwb3J0cyAmIzM0O2RvbmUmIzM0Oywgd2UgbmVlZCB0byBzdGFsbCwgcG9sbCwgb3IgbWFuYWdlIHRoZSB3YWl0LXN0YXRlIGZvciB0aGUgY29tbWFuZCBvciBjb21tYW5kIHNlcXVlbmNlIHRvIGZpbmlzaC4gVGhpcyBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcmVseWluZyBvbiB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgdGhlIGNvbW1hbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NvbW1fY21kX2NzcV9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MzIzPXN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2NsZWFuKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MzQ4OnN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MzY4PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiBvcGNvZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzUtXHRkbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM3NjpcdFx0aWYgKGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKGh3KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzctXHRcdFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjc5CgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29tbXVuaWNhdGlvbiwgY29tbWFuZHMsIGFuZCBjb21wbGV0aW9uIG9mIGEgY29tbWFuZCBzZXF1ZW5jZSAoQ1NRKSB3aXRoaW4gdGhlIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb250cm9sIGxheWVyIG9yIHNpbWlsYXIsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbikuIFRoaXMgZnVuY3Rpb24sIG9yIHN0cnVjdHVyZSwgbGlrZWx5IHNpZ25hbHMgdGhlIGVuZCBvZiBhIGNvbW1hbmQgZmxvdy4gSSBiZXQgaXQgaGFuZGxlcyB0aGUgY29tcGxldGlvbiBwcm9jZXNzLiBXZSYjMzk7cmUgcHJvYmFibHkgaGFuZGxpbmcgY29tcGxldGlvbiB3aXRoaW4gdGhlIEhDTEdFIGxheWVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBhIHRyaWdnZXIgb3IgaW5mb3JtYXRpb24gdG8gdGhlIHVwcGVyIGxheWVycyB0byBzaWduYWwgdGhlIGNvbmNsdXNpb24gb2YgYW4gb3BlcmF0aW9uLiBJdCBpcyBwcm9iYWJseSBpbXBvcnRhbnQgdG8gbG9vayBpbnRvIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCByZWxhdGVzIHRvIGNvbXBsZXRpb24gaGFuZGxpbmcgd2hpY2ggaXMgcmVhbGx5IGltcG9ydGFudCBmb3IgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0ODpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxuIDM0OTpcdHtcbiAzNTA6XHRcdHUzMiBoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcbiAzNTE6XHRcdHJldHVybiBoZWFkID09ICh1MzIpaHctXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcbiAzNTI6XHR9XG4gMzUzOlx0XG4gMzU0Olx0c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxuIDM1NTpcdHtcbiAzNTY6XHRcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNsZ2VfY21kcV90eF90aW1lb3V0X21hcCBjbWRxX3R4X3RpbWVvdXRfbWFwW10gPSB7XG4gMzU3Olx0XHRcdHtIQ0xHRV9PUENfQ0ZHX1JTVF9UUklHR0VSLCBIQ0xHRV9DT01NX0NNRFFfQ0ZHX1JTVF9USU1FT1VUfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxOTIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2AgTU1JTyBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGlzIGBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdgIHJlZ2lzdGVyLiBUaGUgZHJpdmVyIHJlYWRzIHRoaXMgcmVnaXN0ZXIgYW5kIGNoZWNrcyBpZiBpdHMgdmFsdWUgbWF0Y2hlcyBgbmV4dF90b191c2VgLiBTaW5jZSB0aGUgUENJIGZ1enplciBwcm92aWRlcyByYW5kb20gTU1JTyB2YWx1ZXMsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIGl0JiMzOTtsbCBldmVudHVhbGx5IGhpdCB0aGUgcmlnaHQgdmFsdWUsIG9yIG1heWJlIGV2ZW4gb24gdGhlIGZpcnN0IHRyeSBpZiB3ZSYjMzk7cmUgbHVja3ksIGJ1dCBhIHRpbWVvdXQgaXMgYWxzbyBwb3NzaWJsZS4gSWYgYSB0aW1lb3V0IG9jY3VycywgdGhlIGNvbW1hbmQgaXMgY29uc2lkZXJlZCBpbmNvbXBsZXRlIGFuZCByZXR1cm5zIGFuIGAtRUJBREVgIGVycm9yLiBJZiBpdCBtYXRjaGVzLCB0aGVuIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWxgIGlzIGNhbGxlZCwgYW5kIGl0IHByb2NlZWRzIHRvIHJlYWQgdGhlIGRlc2NyaXB0b3IgZnJvbSBtZW1vcnkuCgpOb3csIHRoZSBkZXNjcmlwdG9yIGlzIGluIERNQSBtZW1vcnksIG1lYW5pbmcgdGhlIGhhcmR3YXJlIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhlIHJlc3VsdCB0aGVyZS4gQnV0IHNpbmNlIHdlJiMzOTtyZSBmdXp6aW5nIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCB0aGUgRE1BIG1lbW9yeSB3aWxsIGp1c3QgY29udGFpbiB3aGF0ZXZlciB0aGUgZHJpdmVyIHdyb3RlIGludG8gaXQuIEFuZCB0aGUgZHJpdmVyIHdyb3RlIHRoZSBjb21tYW5kIHRoZXJlLgoKTG9va2luZyBjbG9zZXIgYXQgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbGAsIGl0IHJlYWRzIGBkZXNjW251bSAtIDFdLnJldHZhbGAuIEluIHRoZSBub3JtYWwgb3BlcmF0aW5nIGNhc2UsIHRoZSBoYXJkd2FyZSBzaG91bGQgc2V0IHRoaXMsIGJ1dCBpbiB0aGlzIGNhc2UsIHRoZSBkcml2ZXIgcHJvYmFibHkgZGlkbiYjMzk7dCwgb3IgaXQganVzdCB6ZXJvZWQgaXQgb3V0LiBUaHVzLCBgcmV0dmFsYCB3aWxsIGJlIDAuIEFuZCAwIG1lYW5zIGBIQ0xHRV9DT01NX0NNRF9FWEVDX1NVQ0NFU1NgLCBtZWFuaW5nIHRoZSBjb21tYW5kIHdpbGwgKnN1Y2NlZWQqISBTbywgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBwYXNzIHRoaXMgaWYgaXQgZ3Vlc3NlcyB0aGUgYEhFQURfUkVHYCBvciBpZiBpdCYjMzk7cyB6ZXJvLgoKQnV0IHdhaXQsIGBuZXh0X3RvX3VzZWAgaW5jcmVtZW50cyB3aXRoIGVhY2ggY29tbWFuZCEgVGhlIGZ1enplciByZXR1cm5zIHJhbmRvbSB2YWx1ZXMuIFNvIGl0IGhhcyBhIDEvMl4zMiBjaGFuY2Ugb2YgbWF0Y2hpbmcgaXQgb24gKmVhY2gqIHJlYWQuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgbm93LiBJdCBtaWdodCBub3QgYmUgdG90YWxseSByYW5kb20uIEl0IG1pZ2h0IHJldHVybiB2YWx1ZXMgaXQgaGFzIHNlZW4gYmVmb3JlLCBvciBpdCBtaWdodCBqdXN0IHJldHVybiAwLiBJZiBpdCYjMzk7cyByZXR1cm5pbmcgMCwgaXQgd2lsbCBvbmx5IG1hdGNoIHdoZW4gYG5leHRfdG9fdXNlYCBpcyAwLgoKV2FpdCwgc3l6a2FsbGVyICpjYW4qIGludGVyY2VwdCBgcmVhZGxgIGFuZCBsZWFybiB3aGljaCB2YWx1ZXMgdG8gcmV0dXJuLCBzbyB0aGUgZnV6emVyIGNvdWxkIGJlIHNtYXJ0LiBIb3dldmVyLCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZXJlIGFyZSBtYW55IGNvbW1hbmRzLCBzbyBsZXQmIzM5O3Mgc2VlIGhvdyBtYW55IGNvbW1hbmRzIGFyZSBzZW50IGluIGBoY2xnZV9pbml0X2FlX2RldmAuCgpJdCBsb29rcyBsaWtlIHRoZSBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAsIGBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWdgLCBgaGNsZ2VfY2xlYXJfaHdfcmVzb3VyY2VgLCBgaGNsZ2VfZ2V0X2NhcGAsIGBoY2xnZV9xdWVyeV9kZXZfc3BlY3NgLCBgaGNsZ2VfY29uZmlndXJlYCwgYGhjbGdlX2luaXRfbXNpYCwgYGhjbGdlX21pc2NfaXJxX2luaXRgLCBgaGNsZ2VfYWxsb2NfdHFwc2AsIGBoY2xnZV9hbGxvY192cG9ydGAsIGBoY2xnZV9tYXBfdHFwYCwgYW5kIGBoY2xnZV9tYWNfaW5pdGAgcm91dGluZXMsIGFsbCBzZW5kIGNvbW1hbmRzLCBzbyBkb3plbnMgb2YgY29tbWFuZHMgYXJlIHNlbnQuCgpTbywgZm9yICplYWNoKiBjb21tYW5kLCB0aGUgTU1JTyByZWFkIG9mIGBIRUFEX1JFR2AgbmVlZHMgdG8gbWF0Y2ggYG5leHRfdG9fdXNlYC4gQW5kIGJlY2F1c2UgYG5leHRfdG9fdXNlYCBpbmNyZW1lbnRzICgxLCAyLCAzLCBldGMuKSwgdGhlIGZ1enplciB3b3VsZCBoYXZlIHRvIHJldHVybiAxLCB0aGVuIDIsIHRoZW4gMyBpbiBzZXF1ZW5jZS4gSSAqaGlnaGx5KiBkb3VidCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyB0aGF0IHNtYXJ0LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBob29rLgoKQWN0dWFsbHksIHRoZSBQQ0kgZnV6emVyIGluIHN5emthbGxlciBqdXN0IG1hcHMgdGhlIEJBUnMgdG8gYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIGtlcm5lbCByZWFkcyBmcm9tIHRoYXQgbWVtb3J5IHJlZ2lvbi4KCldhaXQsIHNvIHJlYWRpbmcgZnJvbSB0aGF0IG1lbW9yeSByZWdpb24gbWVhbnMgdGhhdCBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgd2FzIHdyaXR0ZW4gdGhlcmUsIG9yIDAgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4gRG9lcyB0aGUgZHJpdmVyIGV2ZW4gd3JpdGUgdG8gYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2A/IE5vcGUsIHRoZSBkcml2ZXIgd3JpdGVzIHRvIGBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUdgLiBTbyBgSEVBRF9SRUdgIHdpbGwgKmFsd2F5cyogcmVhZCBhcyAwLCBvciB3aGF0ZXZlciB0aGUgZnV6emVyIGluaXRpYWxpemVkIGl0IHRvLgoKSWYgYEhFQURfUkVHYCBpcyBhbHdheXMgMCwgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgIHdpbGwgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBuZXh0X3RvX3VzZWAgd3JhcHMgYXJvdW5kIHRvIDAuIFRoaXMgd2lsbCB0YWtlIGBkZXNjX251bWAgY29tbWFuZHMuIEJ1dCBsZXQmIzM5O3MgbG9vayBjbG9zZXIuIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBoYXMgdGhpcyBjaGVjazoKCmBgYGMKCWlmIChudW0gJmd0OyBoY2xnZV9jb21tX3Jpbmdfc3BhY2UoJmFtcDtody0mZ3Q7Y21xLmNzcSkpIHsKCQljc3EtJmd0O25leHRfdG9fY2xlYW4gPSBoY2xnZV9jb21tX3JlYWRfZGV2Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9Nz1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb25maWdfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMS1cdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9ERVBUSF9SRUcsIHJlZ192YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyMjpcdFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIzLVx0XHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTMyMz1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjMyOTpcdGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zMzAtXHRybWIoKTsgLyogTWFrZSBzdXJlIGhlYWQgaXMgcmVhZHkgYmVmb3JlIHRvdWNoIGFueSBkYXRhICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNDg9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0OS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM1MDpcdHUzMiBoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzUxLVx0cmV0dXJuIGhlYWQgPT0gKHUzMilody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NDczPWludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00OTUtXHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDk2Olx0XHRcdGhjbGdlX2NvbW1fcmVhZF9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ5Ny1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHctXHUwMDNlY21xLmNzcS5sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTUyND1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjgtXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0RFUFRIX1JFRywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyOTpcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MzAtXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTM3LSNkZWZpbmUgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHXHRcdDB4MjcwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6Mzg6I2RlZmluZSBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdcdFx0MHgyNzAxNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC0zOS0jZGVmaW5lIEhDTEdFX0NPTU1fTklDX0NSUV9CQVNFQUREUl9MX1JFR1x0MHgyNzAxOFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmM9OT1zdGF0aWMgY29uc3QgdTMyIGNtZHFfcmVnX2FkZHJfbGlzdFtdID0ge0hDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfcmVncy5jLTEyLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYzoxMzpcdFx0XHRcdFx0IEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmMtMTQtXHRcdFx0XHRcdCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jPTg9c3RhdGljIGNvbnN0IHUzMiBjbWRxX3JlZ19hZGRyX2xpc3RbXSA9IHtIQ0xHRV9DT01NX05JQ19DU1FfQkFTRUFERFJfTF9SRUcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jLTExLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jOjEyOlx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfcmVncy5jLTEzLVx0XHRcdFx0XHQgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpczogSE5TMyBEcml2ZXIgU1JJT1YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGUgZnV6emVyIHRocm93cyByYW5kb20gTU1JTyBhdCBgaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKWAsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB3ZSYjMzk7bGwgZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQgdG8gdHJpZ2dlciB0aGUgaW50ZW5kZWQgbG9naWMuIFRoZSBmdXp6ZXIgaGFzIGEgbWluaXNjdWxlIGNoYW5jZSBvZiBnZXR0aW5nIHRoZSB2YWx1ZSBgMWAgb3V0IG9mIHRoZSBnYXRlIHdpdGggYG5leHRfdG9fdXNlYCBzZXQgdG8gYDFgLiBCdXQgdGhlbiwgd2l0aGluIHRoZSBsb29wLCB0aGUgY29kZSBjYWxscyB0aGUgc2FtZSByZWdpc3RlciAqYWdhaW4qIHRoaXJ0eSB0aG91c2FuZCB0aW1lcyB2aWEgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKGh3KWAuIFRoaXMgZ2l2ZXMgdXMgYSBzbGlnaHRseSBiZXR0ZXIgY2hhbmNlLCAzMDAwMC80IGJpbGxpb24gb3IgLjAwMDc1JSwgYnV0IHN0aWxsIGVmZmVjdGl2ZWx5IHplcm8sIGVzcGVjaWFsbHkgYXMgdGhlIG5leHQgb3BlcmF0aW9uIHJlcXVpcmVzIGEgdmFsdWUgb2YgYDJgLiAgR2l2ZW4gdGhlIHNoZWVyIG51bWJlciBvZiBzdWJzZXF1ZW50IGNvbW1hbmRzLCBwYXNzaW5nIGFsbCB0aGUgY2hlY2tzIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBwcm9iZSwgYW5kIGNvbnNlcXVlbnRseSwgdGhlIGRldmljZSByZWdpc3RyYXRpb24sIHdpbGwgZmFpbC4KClRoZSBjcml0aWNhbCBpc3N1ZSBpcyB0aGUgYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIGNhbGxiYWNrLCBhbmQgd2hpbGUgaXQgKmNvdWxkKiBiZSBpbnZva2VkIHZpYSBzeXNmcywgdGhpcyBwYXRoIGlzIGJsb2NrZWQgaWYgdGhlIHByb2JlIGZhaWxzLiBUaGUgZGV2aWNlIGlzbiYjMzk7dCBwcm9wZXJseSBib3VuZCB0byB0aGUgZHJpdmVyIGlmIGBwcm9iZWAgZmFpbHMsIHNvIHdyaXRpbmcgdG8gYC9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9zcmlvdl9udW12ZnNgIHdpbGwgYmUgYSBkZWFkIGVuZC4gRnVydGhlcm1vcmUsIGV2ZW4gaWYgd2Ugd2VyZSBzb21laG93IGFibGUgdG8gdHJpZ2dlciBgc3Jpb3ZfY29uZmlndXJlYCwgdGhlIGNvZGUgd291bGQgY3Jhc2ggYmVjYXVzZSBgcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpYCBpcyBjYWxsZWQgZHVyaW5nIHByb2JlIGZhaWx1cmUgYW5kIGBzcmlvdl9jb25maWd1cmVgIHRoZW4gZGVyZWZlcmVuY2VzIGEgTlVMTCBwb2ludGVyLiBIb3dldmVyLCB0aGUgZmlyc3Qgc2NlbmFyaW8gaXMgdGhlIHJlYWxpdHk7IGl0IGlzbiYjMzk7dCByZWFjaGVkIGJlY2F1c2UgdGhlIHByb2JlIGZhaWxzLCBzbyB0aGUgUENJIGNvcmUgd291bGQgbm90IGxldCB5b3Ugd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGUuCgpFc3NlbnRpYWxseSwgKmJlY2F1c2UqIHRoZSBwcm9iZSBmYWlscywgdGhlIGNyaXRpY2FsIGBzcmlvdl9jb25maWd1cmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB1bnJlYWNoYWJsZS4KCk5vdywgdG8gY29uZmlybSB0aGlzIGNvbmNsdXNpb24sIEkmIzM5O2QgY2hlY2sgZm9yIHN5emthbGxlciBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBsYWNrIGFjY2VzcyB0byB0aGUgdG9vbHMuIEkmIzM5O20gb3BlcmF0aW5nIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHByYWN0aWNlcywgd2hpY2ggZGljdGF0ZSB0aGF0IHBoeXNpY2FsIG5ldHdvcmsgZHJpdmVycyB3aXRob3V0IGVtdWxhdG9ycyBhcmVuJiMzOTt0IHByYWN0aWNhbGx5IGZ1enphYmxlIGZvciBmdW5jdGlvbmFsIGxvZ2ljLiBCYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzLCBJIGFtIGNvbmZpZGVudCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGEgdmlydHVhbCBkZXZpY2UuICYjMzQ7SE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5JiMzNDsgc291bmRzIGxpa2UgYSBQQ0llIE5JQywgbm90IHZpcnRpbyBvciB2RFBBLiBObywgdGhpcyBhcHBlYXJzIHRvIGJlIGEgcGh5c2ljYWwgTklDLiBJIGFtIGNoZWNraW5nIGZvciBhbnkgbW9ja3Mgb3IgYWx0ZXJuYXRpdmUgdmlydHVhbCBkZXZpY2UgYmFja2VuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiAmIzM0O2R1bW15JiMzNDsqKgoKUmlnaHQsIHNvIHRoZSB3b3JkICYjMzQ7ZHVtbXkmIzM0OyBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEltbWVkaWF0ZWx5LCBJJiMzOTttIGFscmVhZHkgc2lmdGluZyB0aHJvdWdoIGl0cyBwb3RlbnRpYWwgbWVhbmluZ3MgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgdmFyaWFibGU/IEEgdGVzdCBjYXNlPyBQZXJoYXBzIGEgd2F5IHRvIHNpbXBsaWZ5IGFuIGFyZ3VtZW50IG9yIG1vZGVsIGJ5IGludGVudGlvbmFsbHkgaWdub3JpbmcgY29tcGxleGl0aWVzPyBPciBpcyBpdCBiZWluZyB1c2VkIGRpc3BhcmFnaW5nbHksIGFzIGluLCBhICYjMzQ7ZHVtbXkgdmFyaWFibGU/JiMzNDsgVGhlIGFtYmlndWl0eSBoZXJlIHJlcXVpcmVzIGEgYml0IG1vcmUgaW5mb3JtYXRpb24uIFdoYXTigJlzIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBpbiBxdWVzdGlvbj8gSG93IGNvbXBsZXggaXMgdGhlIHN5c3RlbSBiZWluZyBkZXNjcmliZWQ/IFdoYXQgaXMgdGhpcyAmIzM0O2R1bW15JiMzNDsgc3VwcG9zZWQgdG8gKmRvKj8gV2l0aG91dCBjb250ZXh0LCAmIzM0O2R1bW15JiMzNDsgY291bGQgcmVwcmVzZW50IGEgYnJvYWQgc3BlY3RydW0gb2YgdGhpbmdzLiBJdCYjMzk7cyBhIGxvYWRlZCB0ZXJtLCBpbmhlcmVudGx5IGNhcnJ5aW5nIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gb3Igc2ltcGxpZmljYXRpb24sIGJ1dCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoYXQgYWJzdHJhY3Rpb24gaXMgd2hhdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIG1vcmUgZGV0YWlsIHRvIGV2YWx1YXRlIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGFwcHJvcHJpYXRlbmVzcy4gVGhpcyB0aG91Z2h0IG5lZWRzIHVucGFja2luZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgdGhlICYjMzQ7ZW11bCYjMzQ7IEFuZ2xlKioKCkhtbSwgJiMzNDtlbXVsJiMzNDsuLi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGluY29tcGxldGUgd2l0aG91dCBjb25zaWRlcmluZyB0aGUgJiMzNDtlbXVsJiMzNDsgYXNwZWN0LiBOb3csICYjMzQ7ZW11bCYjMzQ7IGNvdWxkIHJlZmVyIHRvIGEgZmV3IGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJZiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbXVsYXRpb24sIHRoZW4gcGVyaGFwcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNvZnR3YXJlIHNvbHV0aW9uIHRvIHRoZSBpc3N1ZS4gT3IsIHBlcmhhcHMgaXQgcG9pbnRzIHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGFuIGVtdWxhdG9yIGluIGEgc3BlY2lmaWMgZnJhbWV3b3JrLiBXZSBuZWVkIHRvIGRlZmluZSBleGFjdGx5IHdoYXQgY29udGV4dCBpcyByZWxldmFudC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoYXQgYW5kIHdoZXRoZXIgaXQmIzM5O3MgbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBicm9hZGVyIGlzc3VlcyB0aGF0IGFyZSBpbiBwbGF5LiBJIHNob3VsZCBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlciB3aGF0IGtpbmQgb2YgJiMzNDtlbXVsJiMzNDsgaXMgdGhlIHN1YmplY3Qgb2YgY29udGVtcGxhdGlvbiwgYW5kIGhvdyBpdCBpbmZvcm1zIGFueSBwcmV2aW91c2x5IGNvbnNpZGVyZWQgc29sdXRpb25zLiBVbHRpbWF0ZWx5LCB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IC0gaG93IGRvZXMgaXQgZml0PyBEb2VzIGl0IHJlcHJlc2VudCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgYSBzdWJzZXQgb2Ygb3RoZXIgY29uY2VybnMsIG9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudD8gSXTigJlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLCByZWdhcmRsZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTYxNAoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSB2ZXJ5IHNwZWNpZmljLCBoYXJkd2FyZS1sZXZlbCBhc3BlY3Q6IHRoZSBITlMzIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFZGIHJlcHJlc2VudG9ycywgbmV0ZGV2cyBjcmVhdGVkIG9uIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpIHRvIHJlcHJlc2VudCBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSwgcGFydGljdWxhcmx5IGZvciBzd2l0Y2hkZXYgZnVuY3Rpb25hbGl0eSwgbGlrZSBUQyBmbG93ZXIgb2ZmbG9hZC4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyYWwgZmVhdHVyZSwgY29tcGFyYWJsZSB0byB3aGF0IHlvdSBzZWUgd2l0aCBNZWxsYW5veCBDb25uZWN0WCBvciBJbnRlbCBJQ0UgTklDcy4KClRoZSBjcnVjaWFsIGlzc3VlIGlzIGl0cyBpbmhlcmVudCBoYXJkd2FyZSBkZXBlbmRlbmNlLiBUaGlzIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIGhlYXZpbHkgb24gdGhlIFBGIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb21tdW5pY2F0aW5nIGZsYXdsZXNzbHkgd2l0aCBpdHMgZmlybXdhcmUuIFRoaXMgbGV2ZWwgb2YgaW50ZXJhY3Rpb24sIGJlY2F1c2UgaXQmIzM5O3Mgc28gbG93LWxldmVsIGFuZCBoYXJkd2FyZS1zcGVjaWZpYywgcmVuZGVycyB0aGUgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIGVudmlyb25tZW50LCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBUaGVyZSBpcyBubyB3YXkgSSBjb3VsZCBmdXp6IHRoaXMgY29kZSBpbiBRRU1VLgoKVGhlcmVmb3JlLCBhcHBseWluZyBteSBleHBlcnQga25vd2xlZGdlIGFuZCBtYXRjaGluZyB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgbGFzdCBidWxsZXQgcG9pbnQgb2YgdGhlICYjMzQ7bm90IHdvcnRoIGZ1enppbmcmIzM0OyBndWlkZWxpbmVzLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBiZWNhdXNlIGl0IHJlbGllcyBvbiB0aGUgY29tcGxldGUgc3RhdGUgb2YgYSBwaHlzaWNhbCBkZXZpY2Ugd2l0aCBmaXJtd2FyZSBpbnRlcmFjdGlvbi4KCkkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlIHJlYXNvbnMgb3V0bGluZWQsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBWRiByZXByZXNlbnRvciBzdXBwb3J0IHRvIHRoZSBIaXNpbGljb24gSE5TMyBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcyB0aGF0IHJlcXVpcmVzIGNvbXBsZXggZmlybXdhcmUgaW50ZXJhY3Rpb25zIChlLmcuLCB3YWl0aW5nIGZvciBjb21tYW5kIHF1ZXVlIGNvbXBsZXRpb25zIHZpYSBNTUlPKSBkdXJpbmcgZGV2aWNlIHByb2JlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFZGIHJlcHJlc2VudG9yIHN1cHBvcnQgdG8gdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmRzIHRoYXQgcmVxdWlyZXMgY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMgKGUuZy4sIHdhaXRpbmcgZm9yIGNvbW1hbmQgcXVldWUgY29tcGxldGlvbnMgdmlhIE1NSU8pIGR1cmluZyBkZXZpY2UgcHJvYmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTozOC4yMDc4NDE5MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1NDg5ODg2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6MzguMjA3ODUxMjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjczMjk1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NDZkODdjYjJkNDBlN2VkNjEwNTBhMjhmMWMyZjQ2MTkwODlhZjE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMjE6MTU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXFxuQEAgLTI0LDYgKzI0LDYgQEAgaGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5cXG4gb2JqLSQoQ09ORklHX0hOUzNfSENMR0UpICs9IGhjbGdlLm8gaGNsZ2UtY29tbW9uLm9cXG4gaGNsZ2Utb2JqcyA9IGhuczNwZi9oY2xnZV9tYWluLm8gaG5zM3BmL2hjbGdlX21kaW8ubyBobnMzcGYvaGNsZ2VfdG0ubyBobnMzcGYvaGNsZ2VfcmVncy5vIFxcXFxcXG4gXFx0XFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxcXFxuLVxcdFxcdGhuczNwZi9oY2xnZV9mZC5vXFxuK1xcdFxcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xcbiBcXG4gaGNsZ2UtJChDT05GSUdfSE5TM19EQ0IpICs9IGhuczNwZi9oY2xnZV9kY2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi5kMmMxYzczNjE3YTQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbkBAIC03OTYsNiArNzk2LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmdldF9saW5rX2RpYWdub3Npc19pbmZvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnN0YXR1c19jb2RlKTtcXG4gXFx0dm9pZCAoKmNsZWFuX3ZmX2NvbmZpZykoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XFxuK1xcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcXG4rXFx0dm9pZCAoKmRlc3Ryb3lfdmZfcmVwcykoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcXG4gXFx0aW50ICgqZ2V0X2RzY3BfcHJpbykoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1OCBkc2NwLFxcbiBcXHRcXHRcXHQgICAgIHU4ICp0Y19tYXBfbW9kZSwgdTggKnByaW9yaXR5KTtcXG4gXFx0dm9pZCAoKmdldF93b2wpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xcbmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXFxuQEAgLTMyMTEsNiArMzIxMSw3IEBAIHN0YXRpYyB2b2lkIGhuczNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAgKiovXFxuIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4ge1xcbitcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcXG5AQCAtMzIyMCwxMyArMzIyMSwyNCBAQCBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuIFxcbiBcXHRpZiAobnVtX3Zmcykge1xcbiBcXHRcXHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG51bV92ZnMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjcmVhdGVfdmZfcmVwcykge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlY3JlYXRlX3ZmX3JlcHMoYWVfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG51bV92ZnMpO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXQpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiBudW1fdmZzO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcXG4gXFx0XFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcXG4gXFxuK1xcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV92Zl9yZXBzKVxcbitcXHRcXHRcXHRhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XFxuIFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbiBcXHRcXHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcXG5pbmRleCAyZmNjYjBhODcwYjVmMC4uOGNkOWExYThlZmYxYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3Z4bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoY2xnZV9mZC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGNsZ2VfbWFpbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGNsZ2VfdmZfcmVwLmhcXFwiXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9pbmZvIG1ldGFfZGF0YV9rZXlfaW5mb1tdID0ge1xcbiBcXHR7IFBBQ0tFVF9UWVBFX0lELCA2IH0sXFxuQEAgLTIyODUsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKVxcbiB7XFxuQEAgLTIyOTIsMTAgKzIyOTQsMTcgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxcbiBcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb21tb24uZXh0YWNrO1xcbiBcXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0ubmljO1xcbiBcXHRzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbiA9IFxcdTAwMjZmbG93LVxcdTAwM2VhY3Rpb247XFxuK1xcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVxcdTAwM2VuaWMua2luZm8ubnVtX3RxcHM7XFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbiBcXHRpbnQgdGM7XFxuIFxcbiBcXHRpZiAoIWZsb3dfYWN0aW9uX2hhc19lbnRyaWVzKFxcdTAwMjZmbG93LVxcdTAwM2VhY3Rpb24pKSB7XFxuK1xcdFxcdGlmICh2cG9ydCAhPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0pIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlZGIGRvZXMgbm90IHN1cHBvcnQgc2VsZWN0IFRDIGFjdGlvblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHRjID0gdGNfY2xhc3NpZF90b19od3RjKGhhbmRsZS1cXHUwMDNlbmV0ZGV2LCBjbHNfZmxvd2VyLVxcdTAwM2VjbGFzc2lkKTtcXG4gXFx0XFx0aWYgKHRjIFxcdTAwM2MgMCB8fCB0YyBcXHUwMDNlIGhkZXYtXFx1MDAzZXRjX21heCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG5AQCAtMjMxMSwxMSArMjMyMCwxMCBAQCBzdGF0aWMgaW50IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdGFjdCA9IFxcdTAwMjZhY3Rpb24tXFx1MDAzZWVudHJpZXNbMF07XFxuIFxcdHN3aXRjaCAoYWN0LVxcdTAwM2VpZCkge1xcbiBcXHRjYXNlIEZMT1dfQUNUSU9OX1JYX1FVRVVFX01BUFBJTkc6XFxuLVxcdFxcdGlmIChhY3QtXFx1MDAzZXJ4X3F1ZXVlIFxcdTAwM2U9IGhhbmRsZS1cXHUwMDNla2luZm8ubnVtX3RxcHMpIHtcXG4rXFx0XFx0aWYgKGFjdC1cXHUwMDNlcnhfcXVldWUgXFx1MDAzZT0gbnVtX3RxcHMpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicXVldWUgaWQgKCV1KSBzaG91bGQgYmUgbGVzcyB0aGFuICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjdC1cXHUwMDNlcnhfcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBoYW5kbGUtXFx1MDAzZWtpbmZvLm51bV90cXBzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjdC1cXHUwMDNlcnhfcXVldWUsIG51bV90cXBzKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTI0MjMsMTIgKzI0MzEsMTEgQEAgc3RhdGljIGludCBoY2xnZV9jaGVja19jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbi1cXHRcXHRcXHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuK3N0YXRpYyBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfY29tbW9uKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzX2Zsb3dlci1cXHUwMDNlY29tbW9uLmV4dGFjaztcXG4tXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xcbi1cXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdnBvcnQtXFx1MDAzZWJhY2s7XFxuIFxcdHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMjQ1MSwxNCArMjQ1OCwxNCBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihoZGV2LCBjbHNfZmxvd2VyLCBydWxlKTtcXG4rXFx0cmV0ID0gaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oaGRldiwgdnBvcnQsIGNsc19mbG93ZXIsIHJ1bGUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdGtmcmVlKHJ1bGUpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydWxlLVxcdTAwM2Vsb2NhdGlvbiA9IGNsc19mbG93ZXItXFx1MDAzZWNvbW1vbi5wcmlvIC0gMTtcXG4tXFx0cnVsZS1cXHUwMDNldmZfaWQgPSAwO1xcbitcXHRydWxlLVxcdTAwM2V2Zl9pZCA9IHZwb3J0LVxcdTAwM2V2cG9ydF9pZDtcXG4gXFx0cnVsZS1cXHUwMDNlY2xzX2Zsb3dlci5jb29raWUgPSBjbHNfZmxvd2VyLVxcdTAwM2Vjb29raWU7XFxuIFxcdHJ1bGUtXFx1MDAzZXJ1bGVfdHlwZSA9IEhDTEdFX0ZEX1RDX0ZMT1dFUl9BQ1RJVkU7XFxuIFxcbkBAIC0yNDY5LDYgKzI0NzYsMjEgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG4rXFx0XFx0XFx0IHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcXG4rXFxuK1xcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odnBvcnQtXFx1MDAzZWJhY2ssIHZwb3J0LCBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxcbit7XFxuK1xcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVxcdTAwM2VoZGV2LCB2Zl9yZXAtXFx1MDAzZXZwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpoY2xnZV9maW5kX2Nsc19mbG93ZXIoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXFxuIHtcXG5AQCAtMjUyMiw2ICsyNTQ0LDE0IEBAIGludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cXHUwMDNlaGRldjtcXG4rXFxuK1xcdHJldHVybiBoY2xnZV9kZWxfY2xzX2Zsb3dlcihcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbMF0ubmljLCBjbHNfZmxvd2VyKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaGNsZ2Vfc3luY19mZF9saXN0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsIHN0cnVjdCBobGlzdF9oZWFkICpobGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqcnVsZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxcbmluZGV4IDJmNjZjYzljM2M2NWM0Li4yMDBkODFjZTEyYzhkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXFxuQEAgLTYsNiArNiw4IEBAXFxuIFxcbiBzdHJ1Y3QgaG5hZTNfaGFuZGxlO1xcbiBzdHJ1Y3QgaGNsZ2VfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfdmZfcmVwO1xcbitzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcXG4gXFxuIGludCBoY2xnZV9pbml0X2ZkX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcXG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xcbkBAIC0yNiw2ICsyOCwxMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbiBib29sIGhjbGdlX2lzX2Nsc19mbG93ZXJfYWN0aXZlKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSk7XFxuK1xcbitpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbitpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xcbiBpbnQgaGNsZ2VfY2xlYXJfYXJmc19ydWxlcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcXG4gdm9pZCBoY2xnZV9zeW5jX2ZkX3RhYmxlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xcbmluZGV4IGZjODU4N2M4MDgxMzcxLi41Zjg4MTg3ZjFjYTgzZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xcbkBAIC0xMDUzNCw2ICsxMDUzNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcXG4gXFx0LmdldF90c19pbmZvID0gaGNsZ2VfcHRwX2dldF90c19pbmZvLFxcbiBcXHQuZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8gPSBoY2xnZV9nZXRfbGlua19kaWFnbm9zaXNfaW5mbyxcXG4gXFx0LmNsZWFuX3ZmX2NvbmZpZyA9IGhjbGdlX2NsZWFuX3Zwb3J0X2NvbmZpZyxcXG4rXFx0LmNyZWF0ZV92Zl9yZXBzID0gaGNsZ2VfY3JlYXRlX3ZmX3JlcHMsXFxuK1xcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXFxuIFxcdC5nZXRfZHNjcF9wcmlvID0gaGNsZ2VfZ2V0X2RzY3BfcHJpbyxcXG4gXFx0LmdldF93b2wgPSBoY2xnZV9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuaW5kZXggNzQxOTQ4MTQyMmMzMTAuLjRmMTFiOWMzOGU2OWUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuQEAgLTE3LDYgKzE3LDkgQEBcXG4gI2luY2x1ZGUgXFxcImhuYWUzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoY2xnZV9jb21tX3Jzcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGNsZ2VfY29tbV90cXBfc3RhdHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImhjbGdlX3ZmX3JlcC5oXFxcIlxcbitcXG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcXG4gXFxuICNkZWZpbmUgSENMR0VfTU9EX1ZFUlNJT04gXFxcIjEuMFxcXCJcXG4gI2RlZmluZSBIQ0xHRV9EUklWRVJfTkFNRSBcXFwiaGNsZ2VcXFwiXFxuQEAgLTkzNSw2ICs5MzgsOSBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcXG4gXFx0Ym9vbCBjdXJfcHJvbWlzYztcXG4gXFx0aW50IG51bV9hbGxvY192ZnM7XFx0LyogQWN0dWFsIG51bWJlciBvZiBWRnMgYWxsb2NhdGVkICovXFxuIFxcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwXFx0Kip2Zl9yZXBzO1xcbitcXHR1MTZcXHRcXHRcXHRudW1fdmZfcmVwcztcXG4rXFxuIFxcdHN0cnVjdCBoY2xnZV9jb21tX3RxcCAqaHRxcDtcXG4gXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM1MTMzNjA0MGQ2ZmIzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xcbkBAIC0wLDAgKzEsMTU5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbisvLyBDb3B5cmlnaHQgKGMpIDIwMjYgSGlzaWxpY29uIExpbWl0ZWQuXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoY2xnZV9tYWluLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoY2xnZV92Zl9yZXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImhjbGdlX2ZkLmhcXFwiXFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgaGNsZ2VfdmZfcmVwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9nZXRfcGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdmZfcmVwLVxcdTAwM2VoZGV2O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHNucHJpbnRmKGJ1ZiwgbGVuLCBcXFwicGYldXZmJXVcXFwiLCBQQ0lfRlVOQyhoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXZmbiksXFxuK1xcdFxcdCAgICAgIHZmX3JlcC1cXHUwMDNldnBvcnQtXFx1MDAzZXZwb3J0X2lkIC0gMSk7XFxuK1xcdGlmIChyYyBcXHUwMDNlPSBsZW4pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2O1xcbitcXG4rXFx0aWYgKCF0Y19jbHNfY2FuX29mZmxvYWRfYW5kX2NoYWluMCh2Zl9yZXAtXFx1MDAzZW5ldGRldiwgdHlwZV9kYXRhKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfU0VUVVBfQ0xTRkxPV0VSOlxcbitcXHRcXHRzd2l0Y2ggKGNsc19mbG93ZXItXFx1MDAzZWNvbW1hbmQpIHtcXG4rXFx0XFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxcbitcXHRcXHRcXHRyZXR1cm4gaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcXG4rXFx0XFx0Y2FzZSBGTE9XX0NMU19ERVNUUk9ZOlxcbitcXHRcXHRcXHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgTElTVF9IRUFEKGhjbGdlX3ZmX3JlcF9ibG9ja19jYl9saXN0KTtcXG4rXFxuK3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcXG4rXFx0XFx0cmV0dXJuIGZsb3dfYmxvY2tfY2Jfc2V0dXBfc2ltcGxlKHR5cGVfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2aGNsZ2VfdmZfcmVwX2Jsb2NrX2NiX2xpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHMgPSB7XFxuK1xcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaGNsZ2VfdmZfcmVwX3htaXQsXFxuK1xcdC5uZG9fZ2V0X3BoeXNfcG9ydF9uYW1lXFx0PSBoY2xnZV92Zl9yZXBfZ2V0X3BoeXNfcG9ydF9uYW1lLFxcbitcXHQubmRvX3NldHVwX3RjXFx0XFx0XFx0PSBoY2xnZV92Zl9yZXBfc2V0dXBfdGMsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBoY2xnZV92Zl9yZXBfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XFxuK1xcdG5kZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG4rXFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG4rfVxcbitcXG4raW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0Y2hhciBuYW1lW0lGTkFNU0laXTtcXG4rXFx0aW50IHJldCwgaTtcXG4rXFxuK1xcdGlmICghbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRoZGV2LVxcdTAwM2V2Zl9yZXBzID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2Yoc3RydWN0IGhjbGdlX3ZmX3JlcCAqKSxcXG4rXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaGRldi1cXHUwMDNldmZfcmVwcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdHNucHJpbnRmKG5hbWUsIElGTkFNU0laLCBcXFwiJXNfcmVwJWRcXFwiLFxcbitcXHRcXHRcXHQgaGRldi1cXHUwMDNldnBvcnRbMF0ubmljLm5ldGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBoY2xnZV92Zl9yZXApLCBuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgTkVUX05BTUVfVU5LTk9XTiwgZXRoZXJfc2V0dXApO1xcbitcXHRcXHRpZiAoIW5kZXYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGhjbGdlX3ZmX3JlcF9uZXRfc2V0dXAobmRldik7XFxuK1xcbitcXHRcXHR2Zl9yZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2VoZGV2ID0gaGRldjtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2V2cG9ydCA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFtpICsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcXG4rXFx0XFx0dmZfcmVwLVxcdTAwM2VuZXRkZXYgPSBuZGV2O1xcbitcXG4rXFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aGRldi1cXHUwMDNldmZfcmVwc1tpXSA9IHZmX3JlcDtcXG4rXFx0fVxcbitcXG4rXFx0aGRldi1cXHUwMDNlbnVtX3ZmX3JlcHMgPSBudW1fdmZzO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0d2hpbGUgKGktLSlcXG4rXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cXHUwMDNldmZfcmVwc1tpXS1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0a2ZyZWUoaGRldi1cXHUwMDNldmZfcmVwcyk7XFxuK1xcdGhkZXYtXFx1MDAzZXZmX3JlcHMgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIGhjbGdlX2Rlc3Ryb3lfdmZfcmVwcyhzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWhkZXYtXFx1MDAzZXZmX3JlcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBoZGV2LVxcdTAwM2VudW1fdmZfcmVwczsgaSsrKSB7XFxuK1xcdFxcdGlmIChoZGV2LVxcdTAwM2V2Zl9yZXBzW2ldKVxcbitcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVxcdTAwM2V2Zl9yZXBzW2ldLVxcdTAwM2VuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShoZGV2LVxcdTAwM2V2Zl9yZXBzKTtcXG4rXFx0aGRldi1cXHUwMDNldmZfcmVwcyA9IE5VTEw7XFxuK1xcdGhkZXYtXFx1MDAzZW51bV92Zl9yZXBzID0gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdmZfcmVwLmhcXG5AQCAtMCwwICsxLDIxIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSGlzaWxpY29uIExpbWl0ZWQuICovXFxuK1xcbisjaWZuZGVmIF9fSENMR0VfVkZfUkVQX0hcXG4rI2RlZmluZSBfX0hDTEdFX1ZGX1JFUF9IXFxuK1xcbitzdHJ1Y3QgaG5hZTNfYWVfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfZGV2O1xcbitzdHJ1Y3QgaGNsZ2VfdnBvcnQ7XFxuK3N0cnVjdCBuZXRfZGV2aWNlO1xcbitcXG4rc3RydWN0IGhjbGdlX3ZmX3JlcCB7XFxuK1xcdHN0cnVjdCBoY2xnZV9kZXZcXHQqaGRldjtcXG4rXFx0c3RydWN0IGhjbGdlX3Zwb3J0XFx0KnZwb3J0O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdCpuZXRkZXY7XFxuK307XFxuK1xcbitpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XFxuK3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuK1xcbisjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6MzguODM2MzY5MDYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA5MjA0NTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZkODdjYjJkNDBlN2VkNjEwNTBhMjhmMWMyZjQ2MTkwODlhZjE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMToxNTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGVcbmluZGV4IDU3ODVkNGM1NzA5ZTFjLi42ZmQ4M2M5NTk0OTU4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZVxuQEAgLTI0LDYgKzI0LDYgQEAgaGNsZ2V2Zi1vYmpzID0gaG5zM3ZmL2hjbGdldmZfbWFpbi5vIGhuczN2Zi9oY2xnZXZmX21ieC5vICBobnMzdmYvaGNsZ2V2Zl9kZXZsaW5cbiBvYmotJChDT05GSUdfSE5TM19IQ0xHRSkgKz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xuIGhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcXFxuIFx0XHRobnMzcGYvaGNsZ2VfbWJ4Lm8gaG5zM3BmL2hjbGdlX2Vyci5vICBobnMzcGYvaGNsZ2VfZGVidWdmcy5vIGhuczNwZi9oY2xnZV9wdHAubyBobnMzcGYvaGNsZ2VfZGV2bGluay5vIFxcXG4tXHRcdGhuczNwZi9oY2xnZV9mZC5vXG4rXHRcdGhuczNwZi9oY2xnZV9mZC5vIGhuczNwZi9oY2xnZV92Zl9yZXAub1xuIFxuIGhjbGdlLSQoQ09ORklHX0hOUzNfRENCKSArPSBobnMzcGYvaGNsZ2VfZGNiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuaW5kZXggYTg3OThlZWNkOWZiZDAuLmQyYzFjNzM2MTdhNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxuQEAgLTc5Niw2ICs3OTYsOCBAQCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHtcbiBcdGludCAoKmdldF9saW5rX2RpYWdub3Npc19pbmZvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICAgdTMyICpzdGF0dXNfY29kZSk7XG4gXHR2b2lkICgqY2xlYW5fdmZfY29uZmlnKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbitcdGludCAoKmNyZWF0ZV92Zl9yZXBzKShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIGludCBudW1fdmZzKTtcbitcdHZvaWQgKCpkZXN0cm95X3ZmX3JlcHMpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XG4gXHRpbnQgKCpnZXRfZHNjcF9wcmlvKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHU4IGRzY3AsXG4gXHRcdFx0ICAgICB1OCAqdGNfbWFwX21vZGUsIHU4ICpwcmlvcml0eSk7XG4gXHR2b2lkICgqZ2V0X3dvbCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcbmluZGV4IDZlY2IzMmUyOGU3OWE4Li5mMzkzZTlmODFmYTY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuY1xuQEAgLTMyMTEsNiArMzIxMSw3IEBAIHN0YXRpYyB2b2lkIGhuczNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuICAqKi9cbiBzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4ge1xuK1x0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcbkBAIC0zMjIwLDEzICszMjIxLDI0IEBAIHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbiBcbiBcdGlmIChudW1fdmZzKSB7XG4gXHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXG5cIiwgcmV0KTtcbi1cdFx0ZWxzZVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKSB7XG4rXHRcdFx0XHRyZXQgPSBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNyZWF0ZV92Zl9yZXBzKGFlX2RldixcbitcdFx0XHRcdFx0XHRcdFx0ICBudW1fdmZzKTtcbitcdFx0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdFwiZmFpbGVkIHRvIGNyZWF0ZSBWRiByZXByZXNlbnRvcnM6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdFx0cmV0KTtcbitcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIG51bV92ZnM7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcbiBcdFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcbiBcbitcdFx0aWYgKGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKVxuK1x0XHRcdGFlX2Rldi1cdTAwM2VvcHMtXHUwMDNlZGVzdHJveV92Zl9yZXBzKGFlX2Rldik7XG4gXHRcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFx0XHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmNcbmluZGV4IDJmY2NiMGE4NzBiNWYwLi44Y2Q5YTFhOGVmZjFjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3Z4bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhjbGdlX2ZkLmhcIlxuICNpbmNsdWRlIFwiaGNsZ2VfbWFpbi5oXCJcbisjaW5jbHVkZSBcImhjbGdlX3ZmX3JlcC5oXCJcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9pbmZvIG1ldGFfZGF0YV9rZXlfaW5mb1tdID0ge1xuIFx0eyBQQUNLRVRfVFlQRV9JRCwgNiB9LFxuQEAgLTIyODUsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X2Nsc19rZXlfaXBfdG9zKGNvbnN0IHN0cnVjdCBmbG93X3J1bGUgKmZsb3csXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBoY2xnZV9mZF9ydWxlICpydWxlKVxuIHtcbkBAIC0yMjkyLDEwICsyMjk0LDE3IEBAIHN0YXRpYyBpbnQgaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXHUwMDNlY29tbW9uLmV4dGFjaztcbiBcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFx1MDAyNmhkZXYtXHUwMDNldnBvcnRbMF0ubmljO1xuIFx0c3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24gPSBcdTAwMjZmbG93LVx1MDAzZWFjdGlvbjtcbitcdHUxNiBudW1fdHFwcyA9IHZwb3J0LVx1MDAzZW5pYy5raW5mby5udW1fdHFwcztcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuIFx0aW50IHRjO1xuIFxuIFx0aWYgKCFmbG93X2FjdGlvbl9oYXNfZW50cmllcyhcdTAwMjZmbG93LVx1MDAzZWFjdGlvbikpIHtcbitcdFx0aWYgKHZwb3J0ICE9IFx1MDAyNmhkZXYtXHUwMDNldnBvcnRbMF0pIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlZGIGRvZXMgbm90IHN1cHBvcnQgc2VsZWN0IFRDIGFjdGlvblwiKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcbiBcdFx0dGMgPSB0Y19jbGFzc2lkX3RvX2h3dGMoaGFuZGxlLVx1MDAzZW5ldGRldiwgY2xzX2Zsb3dlci1cdTAwM2VjbGFzc2lkKTtcbiBcdFx0aWYgKHRjIFx1MDAzYyAwIHx8IHRjIFx1MDAzZSBoZGV2LVx1MDAzZXRjX21heCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuQEAgLTIzMTEsMTEgKzIzMjAsMTAgQEAgc3RhdGljIGludCBoY2xnZV9nZXRfdGNfZmxvd2VyX2FjdGlvbihzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0YWN0ID0gXHUwMDI2YWN0aW9uLVx1MDAzZWVudHJpZXNbMF07XG4gXHRzd2l0Y2ggKGFjdC1cdTAwM2VpZCkge1xuIFx0Y2FzZSBGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HOlxuLVx0XHRpZiAoYWN0LVx1MDAzZXJ4X3F1ZXVlIFx1MDAzZT0gaGFuZGxlLVx1MDAzZWtpbmZvLm51bV90cXBzKSB7XG4rXHRcdGlmIChhY3QtXHUwMDNlcnhfcXVldWUgXHUwMDNlPSBudW1fdHFwcykge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICAgXCJxdWV1ZSBpZCAoJXUpIHNob3VsZCBiZSBsZXNzIHRoYW4gJXVcIixcbi1cdFx0XHRcdFx0ICAgICAgIGFjdC1cdTAwM2VyeF9xdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGhhbmRsZS1cdTAwM2VraW5mby5udW1fdHFwcyk7XG4rXHRcdFx0XHRcdCAgICAgICBhY3QtXHUwMDNlcnhfcXVldWUsIG51bV90cXBzKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTI0MjMsMTIgKzI0MzEsMTEgQEAgc3RhdGljIGludCBoY2xnZV9jaGVja19jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbi1cdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4rc3RhdGljIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24oc3RydWN0IGhjbGdlX2RldiAqaGRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuIHtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNsc19mbG93ZXItXHUwMDNlY29tbW9uLmV4dGFjaztcbi1cdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaGFuZGxlKTtcbi1cdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cdTAwM2ViYWNrO1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTI0NTEsMTQgKzI0NTgsMTQgQEAgaW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGhjbGdlX2dldF90Y19mbG93ZXJfYWN0aW9uKGhkZXYsIGNsc19mbG93ZXIsIHJ1bGUpO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3RjX2Zsb3dlcl9hY3Rpb24oaGRldiwgdnBvcnQsIGNsc19mbG93ZXIsIHJ1bGUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRrZnJlZShydWxlKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ1bGUtXHUwMDNlbG9jYXRpb24gPSBjbHNfZmxvd2VyLVx1MDAzZWNvbW1vbi5wcmlvIC0gMTtcbi1cdHJ1bGUtXHUwMDNldmZfaWQgPSAwO1xuK1x0cnVsZS1cdTAwM2V2Zl9pZCA9IHZwb3J0LVx1MDAzZXZwb3J0X2lkO1xuIFx0cnVsZS1cdTAwM2VjbHNfZmxvd2VyLmNvb2tpZSA9IGNsc19mbG93ZXItXHUwMDNlY29va2llO1xuIFx0cnVsZS1cdTAwM2VydWxlX3R5cGUgPSBIQ0xHRV9GRF9UQ19GTE9XRVJfQUNUSVZFO1xuIFxuQEAgLTI0NjksNiArMjQ3NiwyMSBAQCBpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4raW50IGhjbGdlX2FkZF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbitcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpXG4re1xuK1x0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoYW5kbGUpO1xuK1xuK1x0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX2NvbW1vbih2cG9ydC1cdTAwM2ViYWNrLCB2cG9ydCwgY2xzX2Zsb3dlcik7XG4rfVxuK1xuK2ludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4rXHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuK3tcbitcdHJldHVybiBoY2xnZV9hZGRfY2xzX2Zsb3dlcl9jb21tb24odmZfcmVwLVx1MDAzZWhkZXYsIHZmX3JlcC1cdTAwM2V2cG9ydCxcbitcdFx0XHRcdFx0ICAgY2xzX2Zsb3dlcik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaGNsZ2VfZmRfcnVsZSAqaGNsZ2VfZmluZF9jbHNfZmxvd2VyKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBjb29raWUpXG4ge1xuQEAgLTI1MjIsNiArMjU0NCwxNCBAQCBpbnQgaGNsZ2VfZGVsX2Nsc19mbG93ZXIoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBoY2xnZV9kZWxfY2xzX2Zsb3dlcl92ZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAsXG4rXHRcdFx0ICAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvd2VyKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2Zl9yZXAtXHUwMDNlaGRldjtcbitcbitcdHJldHVybiBoY2xnZV9kZWxfY2xzX2Zsb3dlcihcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYywgY2xzX2Zsb3dlcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGhjbGdlX3N5bmNfZmRfbGlzdChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QpXG4ge1xuIFx0c3RydWN0IGhjbGdlX2ZkX3J1bGUgKnJ1bGU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZmQuaFxuaW5kZXggMmY2NmNjOWMzYzY1YzQuLjIwMGQ4MWNlMTJjOGQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2ZkLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9mZC5oXG5AQCAtNiw2ICs2LDggQEBcbiBcbiBzdHJ1Y3QgaG5hZTNfaGFuZGxlO1xuIHN0cnVjdCBoY2xnZV9kZXY7XG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcbitzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZDtcbiBcbiBpbnQgaGNsZ2VfaW5pdF9mZF9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldik7XG4gaW50IGhjbGdlX2FkZF9mZF9lbnRyeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpO1xuQEAgLTI2LDYgKzI4LDExIEBAIGludCBoY2xnZV9hZGRfY2xzX2Zsb3dlcihzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gaW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHQgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGJvb2wgaGNsZ2VfaXNfY2xzX2Zsb3dlcl9hY3RpdmUoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKTtcbitcbitpbnQgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmYoc3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwLFxuK1x0XHRcdCAgICBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3dlcik7XG4raW50IGhjbGdlX2RlbF9jbHNfZmxvd2VyX3ZmKHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCxcbitcdFx0XHQgICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIpO1xuIGludCBoY2xnZV9jbGVhcl9hcmZzX3J1bGVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuIHZvaWQgaGNsZ2Vfc3luY19mZF90YWJsZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KTtcbiB2b2lkIGhjbGdlX3Jmc19maWx0ZXJfZXhwaXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uNWY4ODE4N2YxY2E4M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMTA1MzQsNiArMTA1MzQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XG4gXHQuZ2V0X3RzX2luZm8gPSBoY2xnZV9wdHBfZ2V0X3RzX2luZm8sXG4gXHQuZ2V0X2xpbmtfZGlhZ25vc2lzX2luZm8gPSBoY2xnZV9nZXRfbGlua19kaWFnbm9zaXNfaW5mbyxcbiBcdC5jbGVhbl92Zl9jb25maWcgPSBoY2xnZV9jbGVhbl92cG9ydF9jb25maWcsXG4rXHQuY3JlYXRlX3ZmX3JlcHMgPSBoY2xnZV9jcmVhdGVfdmZfcmVwcyxcbitcdC5kZXN0cm95X3ZmX3JlcHMgPSBoY2xnZV9kZXN0cm95X3ZmX3JlcHMsXG4gXHQuZ2V0X2RzY3BfcHJpbyA9IGhjbGdlX2dldF9kc2NwX3ByaW8sXG4gXHQuZ2V0X3dvbCA9IGhjbGdlX2dldF93b2wsXG4gXHQuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbmluZGV4IDc0MTk0ODE0MjJjMzEwLi40ZjExYjljMzhlNjllMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcbkBAIC0xNyw2ICsxNyw5IEBAXG4gI2luY2x1ZGUgXCJobmFlMy5oXCJcbiAjaW5jbHVkZSBcImhjbGdlX2NvbW1fcnNzLmhcIlxuICNpbmNsdWRlIFwiaGNsZ2VfY29tbV90cXBfc3RhdHMuaFwiXG4rI2luY2x1ZGUgXCJoY2xnZV92Zl9yZXAuaFwiXG4rXG4rc3RydWN0IGhjbGdlX3ZmX3JlcDtcbiBcbiAjZGVmaW5lIEhDTEdFX01PRF9WRVJTSU9OIFwiMS4wXCJcbiAjZGVmaW5lIEhDTEdFX0RSSVZFUl9OQU1FIFwiaGNsZ2VcIlxuQEAgLTkzNSw2ICs5MzgsOSBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcbiBcdGJvb2wgY3VyX3Byb21pc2M7XG4gXHRpbnQgbnVtX2FsbG9jX3ZmcztcdC8qIEFjdHVhbCBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZCAqL1xuIFxuK1x0c3RydWN0IGhjbGdlX3ZmX3JlcFx0Kip2Zl9yZXBzO1xuK1x0dTE2XHRcdFx0bnVtX3ZmX3JlcHM7XG4rXG4gXHRzdHJ1Y3QgaGNsZ2VfY29tbV90cXAgKmh0cXA7XG4gXHRzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNTEzMzYwNDBkNmZiM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5jXG5AQCAtMCwwICsxLDE1OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8vIENvcHlyaWdodCAoYykgMjAyNiBIaXNpbGljb24gTGltaXRlZC5cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2Zsb3dfb2ZmbG9hZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoY2xnZV9tYWluLmhcIlxuKyNpbmNsdWRlIFwiaGNsZ2VfdmZfcmVwLmhcIlxuKyNpbmNsdWRlIFwiaGNsZ2VfZmQuaFwiXG4rXG4rc3RhdGljIG5ldGRldl90eF90IGhjbGdlX3ZmX3JlcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK31cbitcbitzdGF0aWMgaW50IGhjbGdlX3ZmX3JlcF9nZXRfcGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZmX3JlcC1cdTAwM2VoZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSBzbnByaW50ZihidWYsIGxlbiwgXCJwZiV1dmYldVwiLCBQQ0lfRlVOQyhoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Zm4pLFxuK1x0XHQgICAgICB2Zl9yZXAtXHUwMDNldnBvcnQtXHUwMDNldnBvcnRfaWQgLSAxKTtcbitcdGlmIChyYyBcdTAwM2U9IGxlbilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXG4re1xuK1x0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93ZXIgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgaGNsZ2VfdmZfcmVwICp2Zl9yZXAgPSBjYl9wcml2O1xuK1xuK1x0aWYgKCF0Y19jbHNfY2FuX29mZmxvYWRfYW5kX2NoYWluMCh2Zl9yZXAtXHUwMDNlbmV0ZGV2LCB0eXBlX2RhdGEpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfQ0xTRkxPV0VSOlxuK1x0XHRzd2l0Y2ggKGNsc19mbG93ZXItXHUwMDNlY29tbWFuZCkge1xuK1x0XHRjYXNlIEZMT1dfQ0xTX1JFUExBQ0U6XG4rXHRcdFx0cmV0dXJuIGhjbGdlX2FkZF9jbHNfZmxvd2VyX3ZmKHZmX3JlcCwgY2xzX2Zsb3dlcik7XG4rXHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbitcdFx0XHRyZXR1cm4gaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmYodmZfcmVwLCBjbHNfZmxvd2VyKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIExJU1RfSEVBRChoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCk7XG4rXG4rc3RhdGljIGludCBoY2xnZV92Zl9yZXBfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV92Zl9yZXAgKnZmX3JlcCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4rXHRcdHJldHVybiBmbG93X2Jsb2NrX2NiX3NldHVwX3NpbXBsZSh0eXBlX2RhdGEsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZoY2xnZV92Zl9yZXBfYmxvY2tfY2JfbGlzdCxcbitcdFx0XHRcdFx0XHQgIGhjbGdlX3ZmX3JlcF9zZXR1cF90Y19ibG9ja19jYixcbitcdFx0XHRcdFx0XHQgIHZmX3JlcCwgdmZfcmVwLCB0cnVlKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoY2xnZV92Zl9yZXBfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGhjbGdlX3ZmX3JlcF94bWl0LFxuK1x0Lm5kb19nZXRfcGh5c19wb3J0X25hbWVcdD0gaGNsZ2VfdmZfcmVwX2dldF9waHlzX3BvcnRfbmFtZSxcbitcdC5uZG9fc2V0dXBfdGNcdFx0XHQ9IGhjbGdlX3ZmX3JlcF9zZXR1cF90Yyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGhjbGdlX3ZmX3JlcF9uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGNsZ2VfdmZfcmVwX25ldGRldl9vcHM7XG4rXHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbitcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbit9XG4rXG4raW50IGhjbGdlX2NyZWF0ZV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiwgaW50IG51bV92ZnMpXG4re1xuK1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGFlX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGhjbGdlX3ZmX3JlcCAqdmZfcmVwO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRjaGFyIG5hbWVbSUZOQU1TSVpdO1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghbnVtX3ZmcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBrY2FsbG9jKG51bV92ZnMsIHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwICopLFxuK1x0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWhkZXYtXHUwMDNldmZfcmVwcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpKyspIHtcbitcdFx0c25wcmludGYobmFtZSwgSUZOQU1TSVosIFwiJXNfcmVwJWRcIixcbitcdFx0XHQgaGRldi1cdTAwM2V2cG9ydFswXS5uaWMubmV0ZGV2LVx1MDAzZW5hbWUsIGkpO1xuK1x0XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGNsZ2VfdmZfcmVwKSwgbmFtZSxcbitcdFx0XHRcdCAgICBORVRfTkFNRV9VTktOT1dOLCBldGhlcl9zZXR1cCk7XG4rXHRcdGlmICghbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnI7XG4rXHRcdH1cbitcbitcdFx0aGNsZ2VfdmZfcmVwX25ldF9zZXR1cChuZGV2KTtcbitcbitcdFx0dmZfcmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRcdHZmX3JlcC1cdTAwM2VoZGV2ID0gaGRldjtcbitcdFx0dmZfcmVwLVx1MDAzZXZwb3J0ID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFtpICsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcbitcdFx0dmZfcmVwLVx1MDAzZW5ldGRldiA9IG5kZXY7XG4rXG4rXHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGhkZXYtXHUwMDNldmZfcmVwc1tpXSA9IHZmX3JlcDtcbitcdH1cbitcbitcdGhkZXYtXHUwMDNlbnVtX3ZmX3JlcHMgPSBudW1fdmZzO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0d2hpbGUgKGktLSlcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXYoaGRldi1cdTAwM2V2Zl9yZXBzW2ldLVx1MDAzZW5ldGRldik7XG4rXHRrZnJlZShoZGV2LVx1MDAzZXZmX3JlcHMpO1xuK1x0aGRldi1cdTAwM2V2Zl9yZXBzID0gTlVMTDtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgaGNsZ2VfZGVzdHJveV92Zl9yZXBzKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldilcbit7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gYWVfZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgaTtcbitcbitcdGlmICghaGRldi1cdTAwM2V2Zl9yZXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBoZGV2LVx1MDAzZW51bV92Zl9yZXBzOyBpKyspIHtcbitcdFx0aWYgKGhkZXYtXHUwMDNldmZfcmVwc1tpXSlcbitcdFx0XHR1bnJlZ2lzdGVyX25ldGRldihoZGV2LVx1MDAzZXZmX3JlcHNbaV0tXHUwMDNlbmV0ZGV2KTtcbitcdH1cbitcbitcdGtmcmVlKGhkZXYtXHUwMDNldmZfcmVwcyk7XG4rXHRoZGV2LVx1MDAzZXZmX3JlcHMgPSBOVUxMO1xuK1x0aGRldi1cdTAwM2VudW1fdmZfcmVwcyA9IDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV92Zl9yZXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYjIwODBhZTYyN2JmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3ZmX3JlcC5oXG5AQCAtMCwwICsxLDIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEhpc2lsaWNvbiBMaW1pdGVkLiAqL1xuK1xuKyNpZm5kZWYgX19IQ0xHRV9WRl9SRVBfSFxuKyNkZWZpbmUgX19IQ0xHRV9WRl9SRVBfSFxuK1xuK3N0cnVjdCBobmFlM19hZV9kZXY7XG4rc3RydWN0IGhjbGdlX2RldjtcbitzdHJ1Y3QgaGNsZ2VfdnBvcnQ7XG4rc3RydWN0IG5ldF9kZXZpY2U7XG4rXG4rc3RydWN0IGhjbGdlX3ZmX3JlcCB7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2XHQqaGRldjtcbitcdHN0cnVjdCBoY2xnZV92cG9ydFx0KnZwb3J0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG4rfTtcbitcbitpbnQgaGNsZ2VfY3JlYXRlX3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBpbnQgbnVtX3Zmcyk7XG4rdm9pZCBoY2xnZV9kZXN0cm95X3ZmX3JlcHMoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjM4LjgzNjM3MjkyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDYxNTc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBITlMzIEV0aGVybmV0IERyaXZlciBWRiBSZXByZXNlbnRvciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBIaXNpbGljb24gSE5TMyBldGhlcm5ldCBkcml2ZXIuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYWRkaW5nIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSByZXByZXNlbnRvcnMsIHdoaWNoIGlzIGEgY29tbW9uIGFwcHJvYWNoIGZvciBTUklPViBzdXBwb3J0LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGBobnMzX2VuZXQuY2AsIHdoZXJlIHRoZXkncmUgY2FsbGluZyBgY3JlYXRlX3ZmX3JlcHNgIGFuZCBgZGVzdHJveV92Zl9yZXBzYCB3aGVuIFNSSU9WIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdG8gZHluYW1pY2FsbHkgY3JlYXRlIGFuZCBkZXN0cm95IHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBWRi5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgdHVja2VkIGF3YXkgaW4gYGhjbGdlX3ZmX3JlcC5jYCwgd2hpY2ggaW1wbGVtZW50cyB0aGUgVkYgcmVwcmVzZW50b3IncyBjb3JlIGxvZ2ljOiBgaGNsZ2VfY3JlYXRlX3ZmX3JlcHNgIGFuZCBgaGNsZ2VfZGVzdHJveV92Zl9yZXBzYC4gVGhlIHJlcHJlc2VudG9yLCBvZiBjb3Vyc2UsIHJlZ2lzdGVycyBhIG5ldyBuZXRkZXYgd2l0aCBgaGNsZ2VfdmZfcmVwX25ldGRldl9vcHNgLiBJIHNlZSB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSBlc3NlbnRpYWwgbmV0ZGV2IG9wZXJhdGlvbnM6IGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRyYW5zbWl0dGluZywgYG5kb19nZXRfcGh5c19wb3J0X25hbWVgIGZvciBwb3J0IGlkZW50aWZpY2F0aW9uLCBhbmQgYG5kb19zZXR1cF90Y2AgZm9yIFRyYWZmaWMgQ29udHJvbCBzZXR1cC5cblxuVGhlIGBuZG9fc2V0dXBfdGNgIGltcGxlbWVudGF0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgYFRDX1NFVFVQX0JMT0NLYCwgYW5kIHN1YnNlcXVlbnRseSwgYSBibG9jayBjYWxsYmFjayBgaGNsZ2VfdmZfcmVwX3NldHVwX3RjX2Jsb2NrX2NiYC4gVGhpcyBjYWxsYmFjayBpcyB3aGVyZSB0aGUgYWR2YW5jZWQgc3R1ZmYgaGFwcGVucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgY2xhc3NpZmljYXRpb24gb2YgcGFja2V0cy4gSXQgaGFuZGxlcyBgVENfU0VUVVBfQ0xTRkxPV0VSYCwgY2FsbGluZyBgaGNsZ2VfYWRkX2Nsc19mbG93ZXJfdmZgIGFuZCBgaGNsZ2VfZGVsX2Nsc19mbG93ZXJfdmZgIHRvIG1hbmFnZSBGbG93IENsYXNzaWZpY2F0aW9uIHJ1bGVzIGF0IHRoZSBWRiBsZXZlbC4gVGhlc2UgZmxvd2VyLWJhc2VkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBgaGNsZ2VfZmQuY2AuXG5cbk5vdywgSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0ICpob3cqIHdlJ2QgdGVzdCB0aGlzLCBhbmQgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzY2VuYXJpby4gU2luY2UgdGhpcyBpcyBhbiBITlMzIGRyaXZlciwgYW5kIEhOUzMgYXJlIEhpc2lsaWNvbidzIFBDSSBuZXR3b3JrIGNhcmRzLCB0aGlzIGRyaXZlciBleHBlY3RzIGEgcmVhbCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZW11bGF0ZSB0aGlzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUUVNVT8gSSBkb3VidCB0aGF0IFFFTVUgaGFzIGFueSBuYXRpdmUgc3VwcG9ydCBvciBhIGRlZGljYXRlZCBITlMzIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgSE5TMyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBrbm93IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBuZXR3b3JrIGNhcmRzIHdpdGhpbiBRRU1VLCBhbmQgdGhlcmUncyBub3RoaW5nIG9uIHRoYXQgbGlzdCBhYm91dCBITlMzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTU6NDYuNjQyNTM2NzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODEzODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6NzpjY2ZsYWdzLXkgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjg6Y2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZTo5OmNjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfSE5TMykgKz0gaG5hZTMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ITlMzX0VORVQpICs9IGhuczMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjE0OmhuczMtb2JqcyA9IGhuczNfZW5ldC5vIGhuczNfZXRodG9vbC5vIGhuczNfZGVidWdmcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MTY6aG5zMy0kKENPTkZJR19ITlMzX0RDQikgKz0gaG5zM19kY2JubC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU9MTg9b2JqLSQoQ09ORklHX0hOUzNfSENMR0VWRikgKz0gaGNsZ2V2Zi5vIGhjbGdlLWNvbW1vbi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjA6aGNsZ2UtY29tbW9uLW9ianMgKz0gaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQubyBobnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5vIGhuczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZToyMjpoY2xnZXZmLW9ianMgPSBobnMzdmYvaGNsZ2V2Zl9tYWluLm8gaG5zM3ZmL2hjbGdldmZfbWJ4Lm8gIGhuczN2Zi9oY2xnZXZmX2RldmxpbmsubyBobnMzdmYvaGNsZ2V2Zl9yZWdzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZS0yMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSE5TM19IQ0xHRSkgKz0gaGNsZ2UubyBoY2xnZS1jb21tb24ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL01ha2VmaWxlOjI1OmhjbGdlLW9ianMgPSBobnMzcGYvaGNsZ2VfbWFpbi5vIGhuczNwZi9oY2xnZV9tZGlvLm8gaG5zM3BmL2hjbGdlX3RtLm8gaG5zM3BmL2hjbGdlX3JlZ3MubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6MjY6XFx0XFx0aG5zM3BmL2hjbGdlX21ieC5vIGhuczNwZi9oY2xnZV9lcnIubyAgaG5zM3BmL2hjbGdlX2RlYnVnZnMubyBobnMzcGYvaGNsZ2VfcHRwLm8gaG5zM3BmL2hjbGdlX2RldmxpbmsubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjc6XFx0XFx0aG5zM3BmL2hjbGdlX2ZkLm8gaG5zM3BmL2hjbGdlX3ZmX3JlcC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGUtMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvTWFrZWZpbGU6Mjk6aGNsZ2UtJChDT05GSUdfSE5TM19EQ0IpICs9IGhuczNwZi9oY2xnZV9kY2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaD0xOTg9c3RydWN0IGhuYWUzX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtMjA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6MjA5OnN0cnVjdCBobnMzX21hY19zdGF0cyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC0yMTAtXFx0dTY0IHR4X3BhdXNlX2NudDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjA2PXN0cnVjdCBobmFlM19hZV9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02ODUtXFx0dm9pZCAoKmdldF9tYWNfc3RhdHMpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjY4NjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaG5zM19tYWNfc3RhdHMgKm1hY19zdGF0cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02ODctXFx0dm9pZCAoKmdldF9zdHJpbmdzKShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNC0jaW5jbHVkZSBcXFwiaG5hZTMuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NTojaW5jbHVkZSBcXFwiaG5zM19lbmV0LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjk6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExOlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEyLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjIwOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGV0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfZXRzICpldHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTIxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MjI6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjI0OlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTI1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjMzOnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTM0LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MzU6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjM3OlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTM4LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjQ2OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTQ3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NDg6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjUwOlxcdGlmIChobnMzX25pY19yZXNldHRpbmcobmRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTUxLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjU5OnN0YXRpYyBpbnQgaG5zM19kY2JubF9pZWVlX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGRjYl9hcHAgKmFwcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNjAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo2MTpcXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5zM19nZXRfaGFuZGxlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy02Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NjM6XFx0aWYgKGhuczNfbmljX3Jlc2V0dGluZyhuZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtNjQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6NzI6c3RhdGljIGludCBobnMzX2RjYm5sX2llZWVfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjc0OlxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo3NjpcXHRpZiAoaG5zM19uaWNfcmVzZXR0aW5nKG5kZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy03Ny1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg1LS8qIERDQlggY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzo4NjpzdGF0aWMgdTggaG5zM19kY2JubF9nZXRkY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy04Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjg4OlxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBobnMzX2dldF9oYW5kbGUobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTg5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk2LS8qIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWlsICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjk3OnN0YXRpYyB1OCBobnMzX2RjYm5sX3NldGRjYngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG1vZGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTk4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6OTk6XFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuczNfZ2V0X2hhbmRsZShuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmMtMTAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTA3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgaG5zM19kY2JubF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwODpcXHQuaWVlZV9nZXRldHNcXHQ9IGhuczNfZGNibmxfaWVlZV9nZXRldHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEwOTpcXHQuaWVlZV9zZXRldHNcXHQ9IGhuczNfZGNibmxfaWVlZV9zZXRldHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMDpcXHQuaWVlZV9nZXRwZmNcXHQ9IGhuczNfZGNibmxfaWVlZV9nZXRwZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMTpcXHQuaWVlZV9zZXRwZmNcXHQ9IGhuczNfZGNibmxfaWVlZV9zZXRwZmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExMjpcXHQuaWVlZV9zZXRhcHAgICAgPSBobnMzX2RjYm5sX2llZWVfc2V0YXBwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYzoxMTM6XFx0LmllZWVfZGVsYXBwICAgID0gaG5zM19kY2JubF9pZWVlX2RlbGFwcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTE0OlxcdC5nZXRkY2J4XFx0PSBobnMzX2RjYm5sX2dldGRjYngsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjExNTpcXHQuc2V0ZGNieFxcdD0gaG5zM19kY2JubF9zZXRkY2J4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jOjEyMjp2b2lkIGhuczNfZGNibmxfc2V0dXAoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kY2JubC5jLTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RjYm5sLmM6MTI5OlxcdGRldi1cXHUwMDNlZGNibmxfb3BzID0gXFx1MDAyNmhuczNfZGNibmxfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGNibmwuYy0xMzAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOS0jaW5jbHVkZSBcXFwiaG5hZTMuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDojaW5jbHVkZSBcXFwiaG5zM19kZWJ1Z2ZzLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE6I2luY2x1ZGUgXFxcImhuczNfZW5ldC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEzOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpobnMzX2RiZ2ZzX3Jvb3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19kZW50cnlfaW5mbyBobnMzX2RiZ19kZW50cnlbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNi1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0MzpzdGF0aWMgaW50IGhuczNfZGJnX2JkX2ZpbGVfaW5pdChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUzMiBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0OnN0YXRpYyBpbnQgaG5zM19kYmdfY29tbW9uX2luaXRfdDEoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MzIgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NTpzdGF0aWMgaW50IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDc6c3RhdGljIHN0cnVjdCBobnMzX2RiZ19jbWRfaW5mbyBobnMzX2RiZ19jbWRbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00OC1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTg6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc1LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzY6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03Ny1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04Ny1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODktXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTkzLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6OTQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy05NS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtOTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMDA6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMDEtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1RNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjEwNjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTEwNy1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTExLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfVE0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTEyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTEzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMTctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTE4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTE5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9UWF9CRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMjQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19iZF9maWxlX2luaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTI1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMjktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SWF9CRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoxMzA6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19iZF9maWxlX2luaXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTMxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xMzUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9NQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTM2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTM3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9NQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNDctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTQ4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTQ5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTU0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTU1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTYwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTYxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNjUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTY2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTY3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTcyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTczLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xNzctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTc4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTc5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTg0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTg1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xODktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTkwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTkxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0xOTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MTk2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMTk3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjAyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjAzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMDctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjA4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjA5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjE0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjE1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMTktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjIwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjIxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMjUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjI2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjI3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjMyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjMzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yMzctXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjM4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjM5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjQ0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjQ1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNDktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9SRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjUwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjUxLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9RVUVVRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNTY6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNTctXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2MS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX1FVRVVFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI2MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI2My1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfUVVFVUUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MjY4OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjY5LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzMtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9GRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzoyNzQ6XFx0XFx0LmluaXQgPSBobnMzX2RiZ19jb21tb25faW5pdF90MixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0yNzUtXFx0fSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI3OS1cXHRcXHQuZGVudHJ5ID0gSE5TM19EQkdfREVOVFJZX0ZELFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4MDpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4MS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjg1LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI4NjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI4Ny1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjkxLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5MjpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5My1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMjk3LVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfQ09NTU9OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjI5ODpcXHRcXHQuaW5pdCA9IGhuczNfZGJnX2NvbW1vbl9pbml0X3QyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTI5OS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzAzLVxcdFxcdC5kZW50cnkgPSBITlMzX0RCR19ERU5UUllfRkQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzA0OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzA1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMDktXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzEwOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzExLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMTUtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzE2OlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzE3LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjEtXFx0XFx0LmRlbnRyeSA9IEhOUzNfREJHX0RFTlRSWV9DT01NT04sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzIyOlxcdFxcdC5pbml0ID0gaG5zM19kYmdfY29tbW9uX2luaXRfdDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzIzLVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6MzI2OnN0YXRpYyBzdHJ1Y3QgaG5zM19kYmdfY2FwX2luZm8gaG5zM19kYmdfY2FwW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzI3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jPTM5MD1kaW1fdHVuZV9zdGF0X3N0cltdID0geyBcXFwiT05fVE9QXFxcIiwgXFxcIlRJUkVEXFxcIiwgXFxcIlJJR0hUXFxcIiwgXFxcIkxFRlRcXFwiIH07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjM5MjpzdGF0aWMgdm9pZCBobnMzX2dldF9jb2FsX2luZm8oc3RydWN0IGhuczNfZW5ldF90cXBfdmVjdG9yICp0cXBfdmVjdG9yLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5My1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSwgYm9vbCBpc190eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTM5NS1cXHR1bnNpZ25lZCBpbnQgZ2xfb2Zmc2V0LCBxbF9vZmZzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Mzk2OlxcdHN0cnVjdCBobnMzX2VuZXRfY29hbGVzY2UgKmNvYWw7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtMzk3LVxcdHVuc2lnbmVkIGludCByZWdfdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQzNzpzdGF0aWMgdm9pZCBobnMzX2R1bXBfY29hbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgYm9vbCBpc190eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQzOS1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ0MDpcXHRzdHJ1Y3QgaG5zM19lbmV0X3RxcF92ZWN0b3IgKnRxcF92ZWN0b3I7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDQxOlxcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NDItXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTEtXFx0XFx0dHFwX3ZlY3RvciA9IFxcdTAwMjZwcml2LVxcdTAwM2V0cXBfdmVjdG9yW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1MjpcXHRcXHRobnMzX2dldF9jb2FsX2luZm8odHFwX3ZlY3RvciwgcywgaSwgaXNfdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NDU2OnN0YXRpYyBpbnQgaG5zM19kYmdfY29hbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy00NTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ1ODpcXHRobnMzX2R1bXBfY29hbF9pbmZvKHMsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ1OS1cXHRzZXFfcHV0cyhzLCBcXFwiXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo0NjA6XFx0aG5zM19kdW1wX2NvYWxfaW5mbyhzLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDYxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjQ2NTpzdGF0aWMgdm9pZCBobnMzX2R1bXBfcnhfcXVldWVfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNDY2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTQ5OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1MDA6c3RhdGljIGludCBobnMzX2RiZ19yeF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MDEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTUwMi1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUwMzpcXHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTA0OlxcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MDUtXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjQtXFx0XFx0cmluZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VyaW5nWyh1MzIpKGkgKyBoLVxcdTAwM2VraW5mby5udW1fdHFwcyldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUyNTpcXHRcXHRobnMzX2R1bXBfcnhfcXVldWVfaW5mbyhyaW5nLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01MjYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjUzMTpzdGF0aWMgdm9pZCBobnMzX2R1bXBfdHhfcXVldWVfaW5mbyhzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTMyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1NjU6c3RhdGljIGludCBobnMzX2RiZ190eF9xdWV1ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTU2Ny1cXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoID0gaG5hZTNfc2VxX2ZpbGVfdG9faGFuZGxlKHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU2ODpcXHRzdHJ1Y3QgaG5zM19uaWNfcHJpdiAqcHJpdiA9IGgtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NTY5OlxcdHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01NzAtXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01ODktXFx0XFx0cmluZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VyaW5nW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5MDpcXHRcXHRobnMzX2R1bXBfdHhfcXVldWVfaW5mbyhyaW5nLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjU5NjpzdGF0aWMgaW50IGhuczNfZGJnX3F1ZXVlX21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNTk3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy01OTgtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo1OTk6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYwMC1cXHR1MzIgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTYxNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2MTg6c3RhdGljIHZvaWQgaG5zM19kdW1wX3J4X2JkX2luZm8oc3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjE5OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaG5zM19kZXNjICpkZXNjLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjIwLVxcdFxcdFxcdFxcdCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0MzpzdGF0aWMgaW50IGhuczNfZGJnX3J4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY0NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ1OlxcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NDYtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXFx1MDAzZWhhbmRsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2NDc6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY0ODpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjQ5OlxcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjUwLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY2NjpcXHRcXHRobnMzX2R1bXBfcnhfYmRfaW5mbyhwcml2LCBkZXNjLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02NjctXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY3MjpzdGF0aWMgdm9pZCBobnMzX2R1bXBfdHhfYmRfaW5mbyhzdHJ1Y3QgaG5zM19kZXNjICpkZXNjLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjczLVxcdFxcdFxcdFxcdCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY4ODpzdGF0aWMgaW50IGhuczNfZGJnX3R4X2JkX2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwcml2YXRlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTY4OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NjkwOlxcdHN0cnVjdCBobnMzX2RiZ19kYXRhICpkYXRhID0gcy1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy02OTEtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGRhdGEtXFx1MDAzZWhhbmRsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo2OTI6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjY5MzpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6Njk0OlxcdHN0cnVjdCBobnMzX2Rlc2MgKmRlc2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNjk1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxMTpcXHRcXHRobnMzX2R1bXBfdHhfYmRfaW5mbyhkZXNjLCBzLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcxNzpzdGF0aWMgdm9pZCBobnMzX2RiZ19kZXZfY2FwcyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzE4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MTk6XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gaG5zM19nZXRfYWVfZGV2KGgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTcyMC1cXHR1bnNpZ25lZCBsb25nICpjYXBzID0gYWVfZGV2LVxcdTAwM2VjYXBzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjcyNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShobnMzX2RiZ19jYXApOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MjY6XFx0XFx0c3RhdGUgPSB0ZXN0X2JpdChobnMzX2RiZ19jYXBbaV0uY2FwX2JpdCwgY2Fwcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6NzI3OlxcdFxcdHNlcV9wcmludGYocywgXFxcIiVzOiAlc1xcXFxuXFxcIiwgaG5zM19kYmdfY2FwW2ldLm5hbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzI4LVxcdFxcdFxcdCAgIHN0cl95ZXNfbm8oc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTczMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3MzQ6c3RhdGljIHZvaWQgaG5zM19kYmdfZGV2X3NwZWNzKHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHN0cnVjdCBzZXFfZmlsZSAqcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03MzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc2OTpzdGF0aWMgaW50IGhuczNfZGJnX2Rldl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03NzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc3MzpcXHRobnMzX2RiZ19kZXZfY2FwcyhoLCBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3NzQ6XFx0aG5zM19kYmdfZGV2X3NwZWNzKGgsIHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3Nzk6c3RhdGljIHZvaWQgaG5zM19kdW1wX3BhZ2VfcG9vbF9pbmZvKHN0cnVjdCBobnMzX2VuZXRfcmluZyAqcmluZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03ODAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTc5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTI6c3RhdGljIGludCBobnMzX2RiZ19wYWdlX3Bvb2xfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzkzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy03OTQtXFx0c3RydWN0IGhuYWUzX2hhbmRsZSAqaCA9IGhuYWUzX3NlcV9maWxlX3RvX2hhbmRsZShzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo3OTU6XFx0c3RydWN0IGhuczNfbmljX3ByaXYgKnByaXYgPSBoLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjc5NjpcXHRzdHJ1Y3QgaG5zM19lbmV0X3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtNzk3LVxcdHUzMiBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODE3LVxcdFxcdHJpbmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcmluZ1sodTMyKShpICsgaC1cXHUwMDNla2luZm8ubnVtX3RxcHMpXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYzo4MTg6XFx0XFx0aG5zM19kdW1wX3BhZ2VfcG9vbF9pbmZvKHJpbmcsIHMsIGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgxOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI0OnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcHJpdmF0ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgyNjpcXHRzdHJ1Y3QgaG5zM19kYmdfZGF0YSAqZGF0YSA9IHMtXFx1MDAzZXByaXZhdGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODI3LVxcdHN0cnVjdCBobmFlM19oYW5kbGUgKmggPSBkYXRhLVxcdTAwM2VoYW5kbGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODI4OlxcdHN0cnVjdCBobnMzX25pY19wcml2ICpwcml2ID0gaC1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzQtXFx0aWYgKGRhdGEtXFx1MDAzZWNtZCA9PSBITkFFM19EQkdfQ01EX1RYX0JEKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjgzNTpcXHRcXHRyZXR1cm4gaG5zM19kYmdfdHhfYmRfaW5mbyhzLCBwcml2YXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04MzYtXFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlY21kID09IEhOQUUzX0RCR19DTURfUlhfQkQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODM3OlxcdFxcdHJldHVybiBobnMzX2RiZ19yeF9iZF9pbmZvKHMsIHByaXZhdGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTgzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jLTg0MC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODQxOkRFRklORV9TSE9XX0FUVFJJQlVURShobnMzX2RiZ19iZF9pbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODQzOnN0YXRpYyBpbnQgaG5zM19kYmdfYmRfZmlsZV9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTMyIGNtZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg0NTpcXHRzdHJ1Y3QgaG5zM19kYmdfZGF0YSAqZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NDYtXFx0c3RydWN0IGRlbnRyeSAqZW50cnlfZGlyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg1MDpcXHRlbnRyeV9kaXIgPSBobnMzX2RiZ19kZW50cnlbaG5zM19kYmdfY21kW2NtZF0uZGVudHJ5XS5kZW50cnk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmM6ODUxOlxcdG1heF9xdWV1ZV9udW0gPSBobnMzX2dldF9tYXhfYXZhaWxhYmxlX2NoYW5uZWxzKGhhbmRsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODUyLVxcdGRhdGEgPSBkZXZtX2tjYWxsb2MoXFx1MDAyNmhhbmRsZS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBtYXhfcXVldWVfbnVtLCBzaXplb2YoKmRhdGEpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19kZWJ1Z2ZzLmMtODYwLVxcdFxcdGRhdGFbaV0uaGFuZGxlID0gaGFuZGxlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZGVidWdmcy5jOjg2MTpcXHRcXHRkYXRhW2ldLmNtZCA9IGhuczNfZGJnX2NtZFtjbWRdLmNtZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2RlYnVnZnMuYy04NjItXFx0XFx0ZGF0YVtpXS5xaWQgPSBpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo0Ny4wMDA2ODIzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ4NTA4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEhOUzMgRHJpdmVyKipcblxuT2theSwgc28gdGhlIEhOUzMgZHJpdmVyLi4ucmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gSGlzaWxpY29uIG5ldHdvcmsgaGFyZHdhcmUuIFBoeXNpY2FsIHN0dWZmLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGtlcm5lbCBvZmZlciAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQ/IEV2ZW4gYSBiYXNpYyBtb2NrIHdvdWxkIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgaGludCBvZiBhIG1vY2sgbW9kdWxlLCBhIHN0dWIsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgc3RhbmQgaW4gZm9yIHRoYXQgaGFyZHdhcmUgaW50ZXJmYWNlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo1MC41NDkxOTUyNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NTEyMjcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3RpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNTo1MS4xNjU3MjY1NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDQwMjg1ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBITlMzIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGZvciBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBITlMzLCBidXQgSSBkaWRuJ3QgaW1tZWRpYXRlbHkgZmluZCBhbnl0aGluZy4gVGhlbiBJIHNhdyB0aGUgbWVudGlvbiBvZiBhIHBhdGNoIHJlbGF0ZWQgdG8gc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgbm90aW5nIGl0IHdhcyB1bmRlciByZXZpZXcuIFRoYXQgZ290IG1lIHRoaW5raW5nIOKAkyBpZiBzeXprYWxsZXIgaXMgZnV6emluZyBpdCwgdGhlcmUgKm11c3QqIGJlIHNvbWUgd2F5IHRvIHJlYWNoIGl0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHdlbnQgdG8gdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGFuZCBwb3RlbnRpYWwgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgc3l6a2FsbGVyIGNhbiBmdXp6IFBDSSBkcml2ZXJzLCBldmVuIHdpdGhvdXQgZnVsbCBoYXJkd2FyZSBlbXVsYXRpb24uIEl0IGRvZXMgdGhpcyBieSBlbXVsYXRpbmcgUENJIGRldmljZXMgdGhyb3VnaCBhIGtlcm5lbCBtb2R1bGUgb3IgdXNpbmcgUUVNVSdzIFBDSSBlbXVsYXRpb24uIEZvciBVU0IsIGl0IHVzZXMgYHZoY2lgLCBidXQgZm9yIFBDSSwgaXQgaXMgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCwgaW5qZWN0aW5nIHRoZSBQQ0kgZGV2aWNlcy4gSXQgcHJvdmlkZXMgZmFrZSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBoYW5kbGVzIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKS5cblxuQnV0IHRoZW4sIEkgcmUtcmVhZCB0aGUgcHJvbXB0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIFRoYXQgcmFpc2VzIGEga2V5IHF1ZXN0aW9uLiBEb2VzIHRoaXMgUENJIGZ1enplciwgd2hpY2ggaXMgbm90IGEgZnVsbCBoYXJkd2FyZSBlbXVsYXRvciwgc3RpbGwgcXVhbGlmeSBhcyBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCI/IEl0J3MgaW5qZWN0aW5nIGRhdGEgaW50byBNTUlPIHJlYWRzLCBidXQgaXQncyBub3QgcHJvdmlkaW5nIGEgZnVsbHkgZnVuY3Rpb25hbCBoYXJkd2FyZSBlbnZpcm9ubWVudC5cblxuVHlwaWNhbGx5LCB3aXRoIHBoeXNpY2FsIFBDSSBkcml2ZXJzIHRoYXQgKmxhY2sqIGRlZGljYXRlZCBlbXVsYXRvcnMsIGZ1bmN0aW9uYWwgZnV6emluZyBpcyBwcm9ibGVtYXRpYy4gVGhlIGRyaXZlciB1c3VhbGx5IGZhaWxzIGR1cmluZyBpbml0aWFsaXphdGlvbiwgb3IgZ2V0cyBzdHVjayB3aGVuIGl0IGVuY291bnRlcnMgZ2FyYmFnZSBNTUlPLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgYmVjYXVzZSB0aGVyZSdzIG5vIHdheSB0byBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgVkYgcmVwcmVzZW50b3JzIGluIEhOUzMsIHNvIEkgbXVzdCBjb25zaWRlciB0aGF0LiBUaGF0IHNhaWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgSE5TMyBjYW4gaW5pdGlhbGl6ZSBpbiB0aGlzIGVudmlyb25tZW50IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjU4LjYwNjAxNjk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODU1NjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTMwPXN0YXRpYyB2b2lkIGhuczNfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE0NTovKiBobnMzX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ2LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0OC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDk6ICogaG5zM19wcm9iZSBpbml0aWFsaXplcyBhIFBGIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTUwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIFBGIHByaXZhdGUgc3RydWN0dXJlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTU1OnN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNjk9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM3MS1cXHQuaWRfdGFibGUgPSBobnMzX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM3MjpcXHQucHJvYmUgICAgPSBobnMzX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNzMtXFx0LnJlbW92ZSAgID0gaG5zM19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE1OjU4LjcxNDU4MDcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MTExMDQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGhuczNfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGhuczNfcHJvYmVgIGlzIGFsbCBhYm91dC4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgcHVyZSwgaW5pdGlhbCBjdXJpb3NpdHkuIEknbSB0YWtpbmcgYSBmcmVzaCBsb29rLCBmb2N1c2luZyBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIExldCdzIHNlZSB3aGF0IHRoaXMgdG9vbCBicmluZ3MgdG8gdGhlIHRhYmxlIGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIEknbSBmb3JtaW5nIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZG8gYW55dGhpbmcgbW9yZSBjb21wbGV4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg2MCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjA4LjA1NTY5NTQ2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTU6XFx0c3RhdGljIGludCBobnMzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjMxNTY6XFx0e1xcbjMxNTc6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2O1xcbjMxNTg6XFx0XFx0aW50IHJldDtcXG4zMTU5OlxcdFxcbjMxNjA6XFx0XFx0YWVfZGV2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqYWVfZGV2KSwgR0ZQX0tFUk5FTCk7XFxuMzE2MTpcXHRcXHRpZiAoIWFlX2RldilcXG4zMTYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRhZV9kZXYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjMxNjU6XFx0XFx0YWVfZGV2LVxcdTAwM2VmbGFnID0gZW50LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4zMTY2OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZV9kZXYpO1xcbjMxNjc6XFx0XFxuMzE2ODpcXHRcXHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG4zMTY5OlxcdFxcdGlmIChyZXQpXFxuMzE3MDpcXHRcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuMzE3MTpcXHRcXG4zMTcyOlxcdFxcdHJldHVybiByZXQ7XFxuMzE3MzpcXHR9XFxuMzE3NDpcXHRcXG4zMTc1OlxcdC8qKlxcbjMxNzY6XFx0ICogaG5zM19jbGVhbl92Zl9jb25maWdcXG4zMTc3OlxcdCAqIEBwZGV2OiBwb2ludGVyIHRvIGEgcGNpX2RldiBzdHJ1Y3R1cmVcXG4zMTc4OlxcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZFxcbjMxNzk6XFx0ICpcXG4zMTgwOlxcdCAqIENsZWFuIHJlc2lkdWFsIHZmIGNvbmZpZyBhZnRlciBkaXNhYmxlIHNyaW92XFxuMzE4MTpcXHQgKiovXFxuMzE4MjpcXHRzdGF0aWMgdm9pZCBobnMzX2NsZWFuX3ZmX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuMzE4MzpcXHR7XFxuMzE4NDpcXHRcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMzE4NTpcXHRcXG4zMTg2OlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlY2xlYW5fdmZfY29uZmlnKVxcbjMxODc6XFx0XFx0XFx0YWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNsZWFuX3ZmX2NvbmZpZyhhZV9kZXYsIG51bV92ZnMpO1xcbjMxODg6XFx0fVxcbjMxODk6XFx0XFxuMzE5MDpcXHQvKiBobnMzX3JlbW92ZSAtIERldmljZSByZW1vdmFsIHJvdXRpbmVcXG4zMTkxOlxcdCAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbjMxOTI6XFx0ICovXFxuMzE5MzpcXHRzdGF0aWMgdm9pZCBobnMzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4zMTk0OlxcdHtcXG4zMTk1OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4zMTk2OlxcdFxcbjMxOTc6XFx0XFx0aWYgKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKVxcbjMxOTg6XFx0XFx0XFx0aG5zM19kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjMxOTk6XFx0XFxuMzIwMDpcXHRcXHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xcbjMyMDE6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMyMDI6XFx0fVxcbjMyMDM6XFx0XFxuMzIwNDpcXHQvKipcXG4zMjA1OlxcdCAqIGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZVxcbjMyMDY6XFx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxcbjMyMDc6XFx0ICogQG51bV92ZnM6IG51bWJlciBvZiBWRnMgdG8gYWxsb2NhdGVcXG4zMjA4OlxcdCAqXFxuMzIwOTpcXHQgKiBFbmFibGUgb3IgY2hhbmdlIHRoZSBudW1iZXIgb2YgVkZzLiBDYWxsZWQgd2hlbiB0aGUgdXNlciB1cGRhdGVzIHRoZSBudW1iZXJcXG4zMjEwOlxcdCAqIG9mIFZGcyBpbiBzeXNmcy5cXG4zMjExOlxcdCAqKi9cXG4zMjEyOlxcdHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4zMjEzOlxcdHtcXG4zMjE0OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4zMjE1OlxcdFxcdGludCByZXQ7XFxuMzIxNjpcXHRcXG4zMjE3OlxcdFxcdGlmICghKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkge1xcbjMyMTg6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbiBub3QgY29uZmlnIFNSSU9WXFxcXG5cXFwiKTtcXG4zMjE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMyMjA6XFx0XFx0fVxcbjMyMjE6XFx0XFxuMzIyMjpcXHRcXHRpZiAobnVtX3Zmcykge1xcbjMyMjM6XFx0XFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTtcXG4zMjI0OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4zMjI1OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlNSSU9WIGVuYWJsZSBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuMzIyNjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMyMjc6XFx0XFx0XFx0XFx0aWYgKGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjcmVhdGVfdmZfcmVwcykge1xcbjMyMjg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV92Zl9yZXBzKGFlX2RldixcXG4zMjI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX3Zmcyk7XFxuMzIzMDpcXHRcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjMyMzE6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMjMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJmYWlsZWQgdG8gY3JlYXRlIFZGIHJlcHJlc2VudG9yczogJWRcXFxcblxcXCIsXFxuMzIzMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXQpO1xcbjMyMzQ6XFx0XFx0XFx0XFx0fVxcbjMyMzU6XFx0XFx0XFx0XFx0cmV0dXJuIG51bV92ZnM7XFxuMzIzNjpcXHRcXHRcXHR9XFxuMzIzNzpcXHRcXHR9IGVsc2UgaWYgKCFwY2lfdmZzX2Fzc2lnbmVkKHBkZXYpKSB7XFxuMzIzODpcXHRcXHRcXHRpbnQgbnVtX3Zmc19wcmUgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbjMyMzk6XFx0XFxuMzI0MDpcXHRcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlc3Ryb3lfdmZfcmVwcylcXG4zMjQxOlxcdFxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXN0cm95X3ZmX3JlcHMoYWVfZGV2KTtcXG4zMjQyOlxcdFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjMyNDM6XFx0XFx0XFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xcbjMyNDQ6XFx0XFx0fSBlbHNlIHtcXG4zMjQ1OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzI0NjpcXHRcXHRcXHRcXHQgXFxcIlVuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXFxcblxcXCIpO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFxuMzI0OTpcXHRcXHRyZXR1cm4gMDtcXG4zMjUwOlxcdH1cXG4zMjUxOlxcdFxcbjMyNTI6XFx0c3RhdGljIHZvaWQgaG5zM19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4zMjUzOlxcdHtcXG4zMjU0OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MDguMDU2MTEwMTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTUwMDg1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBITlMzIERyaXZlcidzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIEhOUzMgZHJpdmVyIGlzIGEgUENJIGRyaXZlciwgYW5kIHRoYXQncyBrZXkuIFN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVy4oCUdGhhdCdzIGEgcG90ZW50aWFsIGF2ZW51ZS4gV2FpdCwgdGhlIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiBhbnkgUENJIGRyaXZlciwgcmlnaHQ/IEl0IHdvcmtzIGJ5IG1hdGNoaW5nIFBDSSBJRHMuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgSE5TMyBpcyBldmVuIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBzZXR1cCBvciBpZiBpdOKAmXMgYWNjZXNzaWJsZS5cblxuQnV0IGhvbGQgb24sIHRoZSBwcm9tcHQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cyBhbmQgbWFjODAyMTFfaHdzaW0uIFRoZSBITlMzIGRyaXZlciAqaXMqIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLiBEb2VzIHRoZSBQQ0kgZnV6emVyIGNvdW50IGFzIOKAnHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJl4oCdPyBUZWNobmljYWxseSwgaXQgc2hvdWxkLCBidXQgZG9lcyB0aGUgcHJvbXB0J3MgZXhjbHVzaW9uIGNvdmVyIHRoaXMgY2FzZT8gVGhlIHByb21wdCBzYXlzIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pXCIuIFNvLCB0aGUgUENJIGZ1enplciAqaXMqIGEgd2F5IHRvIHBvdGVudGlhbGx5IHJlYWNoIHRoZSBITlMzIGRyaXZlci5cblxuTm93LCBpZiBpdCdzIGEgKnBoeXNpY2FsKiBQQ0kgZHJpdmVyLCBpdCB0eXBpY2FsbHkgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHRoZSBQQ0kgZnV6emVyIGhhcyB0byBlbXVsYXRlIHRoZSBjb25maWcgc3BhY2UgYW5kIE1NSU8uIFN5emthbGxlcidzIFBDSSBmdXp6ZXIsIHdoaWxlIHVzZWZ1bCwgY2FuIGJlIGZhaXJseSBiYXNpYy4gSXQgb2Z0ZW4gc3RydWdnbGVzIHdpdGggY29tcGxleCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMg4oCTIHlvdSBrbm93LCB3YWl0aW5nIGZvciBzcGVjaWZpYyBiaXRzIGluIE1NSU8gcmVnaXN0ZXJzLCBmaXJtd2FyZSBsb2FkaW5nLCB0aG9zZSBraW5kcyBvZiB0aGluZ3MuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIEhOUzMgZHJpdmVyIGhhcyBhbnkgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLiBEbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBvciBhbnkgY29tcGxleCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXM/IFRoYXQgd2lsbCBiZSB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjE1LjExMTEyMjYzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMDcyNjEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3RfZmlybXdhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjoxNS4yMDkzMzk3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODM3NTg1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IE1pc3NpbmcgRmlybXdhcmUgUmVxdWVzdCoqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIG5vdCBzZWVpbmcgYW55IGV4cGxpY2l0IHJlcXVlc3RzIGZvciBmaXJtd2FyZSBpbiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0IG1pZ2h0IGJlIGFic2VudCBvciBpZiBpdCdzIGJlaW5nIGhhbmRsZWQgZGlmZmVyZW50bHkuIExldCdzIHN0YXJ0IHdpdGggYGhjbGdlX21haW4uY2AuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgc2luY2UgaXQgb2Z0ZW4gb3JjaGVzdHJhdGVzIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCB3aXRoaW4gdGhpcyBIQ0xHRSBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGZpcm13YXJlIGxvYWQgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbiB0aGVyZSwgaWYgaXQncyBleHRlcm5hbCwgb3IgbWF5YmUgaWYgaXQncyBiZWluZyBwdWxsZWQgZnJvbSBhIHByZS1sb2FkZWQgYXJlYSwgd2hpY2ggY291bGQgZXhwbGFpbiB0aGUgbGFjayBvZiBhbiBpbW1lZGlhdGUgcmVxdWVzdC4gSSdsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIHNlZSB3aGF0IHRoZXkncmUgdXAgdG8uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbmV4dCBzdGVwIGZvciByZXNvbHZpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjoyNS4yOTMxMDEzNzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDUyMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2luaXRfYWVfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTkzMTk9c3RhdGljIGludCBoY2xnZV9zZXRfYXV0b25lZ19zcGVlZF9kdXAoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtOTMzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjkzNDA6c3RhdGljIGludCBoY2xnZV9pbml0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MTA0MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA0MzU6XFx0LmluaXRfYWVfZGV2ID0gaGNsZ2VfaW5pdF9hZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xMDQzNi1cXHQudW5pbml0X2FlX2RldiA9IGhjbGdlX3VuaW5pdF9hZV9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjI1LjM4OTU3NDI0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ1NTc1Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZvciBQb3RlbnRpYWwgUENJIEZ1enplciBCbG9ja2luZyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgZnVuY3Rpb24gYGhjbGdlX2luaXRfYWVfZGV2YCBpcyBnb2luZyB0byB0cmlwIG1lIHVwIHdoZW4gSSdtIHJ1bm5pbmcgbXkgUENJIGZ1enplci4gTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgaXQncyBkb2luZyBhbnkgY29tcGxleCBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgcmVhZHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYmxvY2tpbmcgYmVoYXZpb3IuIEJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBmdXp6aW5nIOKAkyB0aGV5IHNsb3cgZXZlcnl0aGluZyBkb3duIGFuZCBjYW4gcHJldmVudCBtZSBmcm9tIGV4cGxvcmluZyBhIGJyb2FkZXIgcmFuZ2Ugb2YgY29kZSBwYXRocyBxdWlja2x5LiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGFueSByZWQgZmxhZ3MgcmVsYXRlZCB0byBNTUlPIGludGVyYWN0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBzaGFycCDigJMgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgcG90ZW50aWFsbHkgdGltZS1jb25zdW1pbmcgb3IgY29tcGxleCByZWFkIG9wZXJhdGlvbnMgZnJvbSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycy4gQW55dGhpbmcgdGhhdCBjb3VsZCBzdGFsbCB0aGUgZnV6emVyIGlzIGEgcG90ZW50aWFsIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDQ1LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MzAuMDM1MTU1ODQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5MzQwOlxcdHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbjkzNDE6XFx0e1xcbjkzNDI6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZV9kZXYtXFx1MDAzZXBkZXY7XFxuOTM0MzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2O1xcbjkzNDQ6XFx0XFx0aW50IHJldDtcXG45MzQ1OlxcdFxcbjkzNDY6XFx0XFx0aGRldiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmhkZXYpLCBHRlBfS0VSTkVMKTtcXG45MzQ3OlxcdFxcdGlmICghaGRldilcXG45MzQ4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjkzNDk6XFx0XFxuOTM1MDpcXHRcXHRoZGV2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG45MzUxOlxcdFxcdGhkZXYtXFx1MDAzZWFlX2RldiA9IGFlX2RldjtcXG45MzUyOlxcdFxcdGhkZXYtXFx1MDAzZXJlc2V0X3R5cGUgPSBITkFFM19OT05FX1JFU0VUO1xcbjkzNTM6XFx0XFx0aGRldi1cXHUwMDNlcmVzZXRfbGV2ZWwgPSBITkFFM19GVU5DX1JFU0VUO1xcbjkzNTQ6XFx0XFx0YWVfZGV2LVxcdTAwM2Vwcml2ID0gaGRldjtcXG45MzU1OlxcdFxcbjkzNTY6XFx0XFx0LyogSFcgc3VwcHJ0IDIgbGF5ZXIgdmxhbiAqL1xcbjkzNTc6XFx0XFx0aGRldi1cXHUwMDNlbXBzID0gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOICsgMiAqIFZMQU5fSExFTjtcXG45MzU4OlxcdFxcbjkzNTk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRfbG9jayk7XFxuOTM2MDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlZmRfcnVsZV9sb2NrKTtcXG45MzYxOlxcdFxcdHNlbWFfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlcmVzZXRfc2VtLCAxKTtcXG45MzYyOlxcdFxcbjkzNjM6XFx0XFx0cmV0ID0gaGNsZ2VfcGNpX2luaXQoaGRldik7XFxuOTM2NDpcXHRcXHRpZiAocmV0KVxcbjkzNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuOTM2NjpcXHRcXG45MzY3OlxcdFxcdC8qIEZpcm13YXJlIGNvbW1hbmQgcXVldWUgaW5pdGlhbGl6ZSAqL1xcbjkzNjg6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfcXVldWVfaW5pdChoZGV2LVxcdTAwM2VwZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcpO1xcbjkzNjk6XFx0XFx0aWYgKHJldClcXG45MzcwOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV91bmluaXQ7XFxuOTM3MTpcXHRcXG45MzcyOlxcdFxcdC8qIEZpcm13YXJlIGNvbW1hbmQgaW5pdGlhbGl6ZSAqL1xcbjkzNzM6XFx0XFx0aGNsZ2VfY29tbV9jbWRfaW5pdF9vcHMoXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGNsZ2VfY21xX29wcyk7XFxuOTM3NDpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXFx1MDAzZWFlX2RldiwgXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbixcXG45Mzc1OlxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgaGRldi1cXHUwMDNlcmVzZXRfcGVuZGluZyk7XFxuOTM3NjpcXHRcXHRpZiAocmV0KVxcbjkzNzc6XFx0XFx0XFx0Z290byBlcnJfY21kX3VuaW5pdDtcXG45Mzc4OlxcdFxcbjkzNzk6XFx0XFx0cmV0ICA9IGhjbGdlX2NsZWFyX2h3X3Jlc291cmNlKGhkZXYpO1xcbjkzODA6XFx0XFx0aWYgKHJldClcXG45MzgxOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM4MjpcXHRcXG45MzgzOlxcdFxcdHJldCA9IGhjbGdlX2dldF9jYXAoaGRldik7XFxuOTM4NDpcXHRcXHRpZiAocmV0KVxcbjkzODU6XFx0XFx0XFx0Z290byBlcnJfY21kX3VuaW5pdDtcXG45Mzg2OlxcdFxcbjkzODc6XFx0XFx0cmV0ID0gaGNsZ2VfcXVlcnlfZGV2X3NwZWNzKGhkZXYpO1xcbjkzODg6XFx0XFx0aWYgKHJldCkge1xcbjkzODk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHF1ZXJ5IGRldiBzcGVjaWZpY2F0aW9ucywgcmV0ID0gJWQuXFxcXG5cXFwiLFxcbjkzOTA6XFx0XFx0XFx0XFx0cmV0KTtcXG45MzkxOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM5MjpcXHRcXHR9XFxuOTM5MzpcXHRcXG45Mzk0OlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ3VyZShoZGV2KTtcXG45Mzk1OlxcdFxcdGlmIChyZXQpIHtcXG45Mzk2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNvbmZpZ3VyZSBkZXYgZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45Mzk3OlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTM5ODpcXHRcXHR9XFxuOTM5OTpcXHRcXG45NDAwOlxcdFxcdHJldCA9IGhjbGdlX2luaXRfbXNpKGhkZXYpO1xcbjk0MDE6XFx0XFx0aWYgKHJldCkge1xcbjk0MDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiSW5pdCBNU0kvTVNJLVggZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45NDAzOlxcdFxcdFxcdGdvdG8gZXJyX2NtZF91bmluaXQ7XFxuOTQwNDpcXHRcXHR9XFxuOTQwNTpcXHRcXG45NDA2OlxcdFxcdHJldCA9IGhjbGdlX21pc2NfaXJxX2luaXQoaGRldik7XFxuOTQwNzpcXHRcXHRpZiAocmV0KVxcbjk0MDg6XFx0XFx0XFx0Z290byBlcnJfbXNpX3VuaW5pdDtcXG45NDA5OlxcdFxcbjk0MTA6XFx0XFx0cmV0ID0gaGNsZ2VfYWxsb2NfdHFwcyhoZGV2KTtcXG45NDExOlxcdFxcdGlmIChyZXQpIHtcXG45NDEyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFsbG9jYXRlIFRRUHMgZXJyb3IsIHJldCA9ICVkLlxcXFxuXFxcIiwgcmV0KTtcXG45NDEzOlxcdFxcdFxcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xcbjk0MTQ6XFx0XFx0fVxcbjk0MTU6XFx0XFxuOTQxNjpcXHRcXHRyZXQgPSBoY2xnZV9hbGxvY192cG9ydChoZGV2KTtcXG45NDE3OlxcdFxcdGlmIChyZXQpXFxuOTQxODpcXHRcXHRcXHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcXG45NDE5OlxcdFxcbjk0MjA6XFx0XFx0cmV0ID0gaGNsZ2VfbWFwX3RxcChoZGV2KTtcXG45NDIxOlxcdFxcdGlmIChyZXQpXFxuOTQyMjpcXHRcXHRcXHRnb3RvIGVycl9tc2lfaXJxX3VuaW5pdDtcXG45NDIzOlxcdFxcbjk0MjQ6XFx0XFx0aWYgKGhkZXYtXFx1MDAzZWh3Lm1hYy5tZWRpYV90eXBlID09IEhOQUUzX01FRElBX1RZUEVfQ09QUEVSKSB7XFxuOTQyNTpcXHRcXHRcXHRjbGVhcl9iaXQoSE5BRTNfREVWX1NVUFBPUlRfRkVDX0IsIGFlX2Rldi1cXHUwMDNlY2Fwcyk7XFxuOTQyNjpcXHRcXHRcXHRpZiAoaG5hZTNfZGV2X3BoeV9pbXBfc3VwcG9ydGVkKGhkZXYpKVxcbjk0Mjc6XFx0XFx0XFx0XFx0cmV0ID0gaGNsZ2VfdXBkYXRlX3RwX3BvcnRfaW5mbyhoZGV2KTtcXG45NDI4OlxcdFxcdFxcdGVsc2VcXG45NDI5OlxcdFxcdFxcdFxcdHJldCA9IGhjbGdlX21hY19tZGlvX2NvbmZpZyhoZGV2KTtcXG45NDMwOlxcdFxcbjk0MzE6XFx0XFx0XFx0aWYgKHJldClcXG45NDMyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX21zaV9pcnFfdW5pbml0O1xcbjk0MzM6XFx0XFx0fVxcbjk0MzQ6XFx0XFxuOTQzNTpcXHRcXHRyZXQgPSBoY2xnZV9pbml0X3Vtdl9zcGFjZShoZGV2KTtcXG45NDM2OlxcdFxcdGlmIChyZXQpXFxuOTQzNzpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk0Mzg6XFx0XFxuOTQzOTpcXHRcXHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6MzAuMDM1NzYwMTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTUxNjA0OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIEhOUzMgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgaG93IHRoZSBgaGNsZ2VgIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBoY2xnZV9jb21tX2NtZF9pbml0YCBhbmQgYGhjbGdlX2dldF9jYXBgLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyLCBzcGVjaWZpY2FsbHksIGlzIGludHJpZ3VpbmcuIEl0IGNhbiBpbmplY3QgcmFuZG9tIE1NSU8gcmVhZCB2YWx1ZXMsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGJ5cGFzcyBpbml0aWFsIGNoZWNrcy4gSG93ZXZlciwgSSBoaWdobHkgZG91YnQgaXQgY2FuIG5hdmlnYXRlIHRoZSBjb21wbGV4IGZpcm13YXJlIGNvbW1hbmQgcXVldWVzIHJlcXVpcmVkIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24uXG5cbkJ1dCBob2xkIG9uISBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIGNvZGUgcGF0aHMgZGVlbWVkIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0cy4gRG9lcyBzeXprYWxsZXIgZXZlbiB0YXJnZXQgUENJIGRyaXZlcnMgd2l0aCBpdHMgZnV6emVyPyBZZXMsIGl0IGhhcyB0aGUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBzdWdnZXN0cyBpdCBkb2VzLlxuXG5UaGUga2V5IGlzIGluIHRoZSBkZWZpbml0aW9uIG9mIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiLiAgVGhlIHByb21wdCBleHBsaWNpdGx5IGV4Y2x1ZGVzIGFueSBwYXRoIHVucmVhY2hhYmxlIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBtZWFucyBpZiB0aGUgZnV6emluZyBhcHByb2FjaCBjYW4ndCByZWFjaCBhIGNvZGUgYmxvY2sgaW4gUUVNVS9HQ0UgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5TbywgaXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCBITlMzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIFFFTVUgd2l0aCB0aGUgUENJIGZ1enplcj8gIEl0J3MgYSBnZW5lcmljIFBDSSBmdXp6ZXIsIG5vdCBhbiBITlMzLXNwZWNpZmljIGVtdWxhdG9yLiAgVGhpcyBtYWtlcyBhIGRpZmZlcmVuY2UuXG5cbkNhbiB0aGlzIGdlbmVyaWMgZnV6emVyIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIHRvIGBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVgPyBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSB0aHJvdWdoIHN5c2ZzLiBJdCByZXF1aXJlcyB0aGF0IHRoZSBQQ0kgZGV2aWNlIGJlIHByb3Blcmx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBmaXJzdC4gSWYgdGhlIFBDSSBmdXp6ZXIgdGhyb3dzIHJhbmRvbSBNTUlPIGRhdGEsIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBpcyBsaWtlbHkgdG8gZmFpbCBlYXJseSBvbiwgbGlrZWx5IGF0IHRoZSBgaGNsZ2VfY29tbV9jbWRfaW5pdGAgb3IgYGhjbGdlX2dldF9jYXBgIHN0YWdlLCBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBleHBlY3Qgc3BlY2lmaWMgcmVzcG9uc2VzIGZyb20gdGhlIGZpcm13YXJlJ3MgY29tbWFuZCBxdWV1ZS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpbiBkZXRhaWwuIExldCdzIHN0YXJ0IHdpdGggZXhhbWluaW5nIGBoY2xnZV9jb21tX2NtZF9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5ODAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjo0NS41ODczNjkxMDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjM4NDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2xnZV9jb21tX2NtZF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTc9c3RhdGljIHZvaWQgaGNsZ2VfY29tbV9jbWRfY29uZmlnX3JlZ3Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM2OnZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NTk4PUVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3F1ZXVlX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjAwOnZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9vcHMoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjAxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGhjbGdlX2NvbW1fY21xX29wcyAqb3BzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02MDktfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjEwOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYxMjppbnQgaGNsZ2VfY29tbV9jbWRfaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYxMy1cXHRcXHRcXHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTYyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjYyNzpcXHRoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3MoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy02ODAtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjgxOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNjgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaD00NjY9c3RhdGljIGlubGluZSB1MzIgaGNsZ2VfY29tbV9yZWFkX3JlZyh1OCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzg6dm9pZCBoY2xnZV9jb21tX2NtZF9pbml0X3JlZ3Moc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ3OS1pbnQgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oPTQ5ND1pbnQgaGNsZ2VfY29tbV9jbWRfcXVldWVfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ5NTppbnQgaGNsZ2VfY29tbV9jbWRfaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsIHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5Ni1cXHRcXHRcXHR1MzIgKmZ3X3ZlcnNpb24sIGJvb2wgaXNfcGYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00OTctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXNldF9wZW5kaW5nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ5ODp2b2lkIGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTQ5OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgKm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTQxMTM9c3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtNDEzMy1cXHRcXHQgKiBhbnkgbWFpbGJveCBoYW5kbGluZyBvciBjb21tYW5kIHRvIGZpcm13YXJlIGlzIG9ubHkgdmFsaWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjQxMzQ6XFx0XFx0ICogYWZ0ZXIgaGNsZ2VfY29tbV9jbWRfaW5pdCBpcyBjYWxsZWQuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy00MTM1LVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05MzQwPXN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05MzcyLVxcdC8qIEZpcm13YXJlIGNvbW1hbmQgaW5pdGlhbGl6ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTM3MzpcXHRoY2xnZV9jb21tX2NtZF9pbml0X29wcyhcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIFxcdTAwMjZoY2xnZV9jbXFfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjkzNzQ6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVxcdTAwM2VhZV9kZXYsIFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odywgXFx1MDAyNmhkZXYtXFx1MDAzZWZ3X3ZlcnNpb24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05Mzc1LVxcdFxcdFxcdFxcdCAgdHJ1ZSwgaGRldi1cXHUwMDNlcmVzZXRfcGVuZGluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTk4MDY9c3RhdGljIGludCBoY2xnZV9yZXNldF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05ODI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTgyNjpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9pbml0KGhkZXYtXFx1MDAzZWFlX2RldiwgXFx1MDAyNmhkZXYtXFx1MDAzZWh3Lmh3LCBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk4MjctXFx0XFx0XFx0XFx0ICB0cnVlLCBoZGV2LVxcdTAwM2VyZXNldF9wZW5kaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yODY3PXN0YXRpYyBpbnQgaGNsZ2V2Zl9yZXNldF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yODc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyODgwOlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2luaXQoaGRldi1cXHUwMDNlYWVfZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTI4ODEtXFx0XFx0XFx0XFx0ICBcXHUwMDI2aGRldi1cXHUwMDNlZndfdmVyc2lvbiwgZmFsc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9MjkyMD1zdGF0aWMgaW50IGhjbGdldmZfaW5pdF9oZGV2KHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0yOTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzoyOTM1OlxcdGhjbGdlX2NvbW1fY21kX2luaXRfb3BzKFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odywgXFx1MDAyNmhjbGdldmZfY21xX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjI5MzY6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfaW5pdChoZGV2LVxcdTAwM2VhZV9kZXYsIFxcdTAwMjZoZGV2LVxcdTAwM2Vody5odyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjkzNy1cXHRcXHRcXHRcXHQgIFxcdTAwMjZoZGV2LVxcdTAwM2Vmd192ZXJzaW9uLCBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6NDUuNzk5NzY3NzYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTM0Nzk1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYGhjbGdlX2NvbW1fY21kX2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBoY2xnZV9jb21tX2NtZF9pbml0YCoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiwgYGhjbGdlX2NvbW1fY21kX2luaXRgLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCBcImhjbGdlXCIgcHJlc3VtYWJseSBpbmRpY2F0aW5nIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGNvbW11bmljYXRpb24gbGF5ZXIsIGFuZCBcImNvbW1fY21kXCIgaGludGluZyBhdCBjb21tdW5pY2F0aW9uIGNvbW1hbmRzLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gaW5pdGlhbGl6aW5nIGEgY29tcG9uZW50IG9mIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIG9yIHRoZSBjb21tYW5kIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gdGhpcyBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgb3BlcmF0aW9uIHRvIHByb3Blcmx5IGFzc2VzcyB3aGF0IGlzIGdvaW5nIG9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwZXJoYXBzIGV2ZW4gcmVnaXN0cmF0aW9uIG9mIGNvbW1hbmQgaGFuZGxlcnMgaWYgdGhpcyBpcyBhIGZyYW1ld29yay4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IHNldHMgdXAgYSBjb250ZXh0LCBwcmVwYXJlcyBkYXRhIGJ1ZmZlcnMsIHJlZ2lzdGVycyBjb21tYW5kcywgb3IgY29uZmlndXJlcyB1bmRlcmx5aW5nIGhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIFVuZGVyc3RhbmRpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb24gcHJpb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgZnV0dXJlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYxMiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjUwLjk1MzI1MTMyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEyOlxcdGludCBoY2xnZV9jb21tX2NtZF9pbml0KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldiwgc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbiA2MTM6XFx0XFx0XFx0XFx0dTMyICpmd192ZXJzaW9uLCBib29sIGlzX3BmLFxcbiA2MTQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXNldF9wZW5kaW5nKVxcbiA2MTU6XFx0e1xcbiA2MTY6XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1fY21xICpjbWRxID0gXFx1MDAyNmh3LVxcdTAwM2VjbXE7XFxuIDYxNzpcXHRcXHRpbnQgcmV0O1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZHEtXFx1MDAzZWNzcS5sb2NrKTtcXG4gNjIwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxLmxvY2spO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRjbWRxLVxcdTAwM2Vjc3EubmV4dF90b19jbGVhbiA9IDA7XFxuIDYyMzpcXHRcXHRjbWRxLVxcdTAwM2Vjc3EubmV4dF90b191c2UgPSAwO1xcbiA2MjQ6XFx0XFx0Y21kcS1cXHUwMDNlY3JxLm5leHRfdG9fY2xlYW4gPSAwO1xcbiA2MjU6XFx0XFx0Y21kcS1cXHUwMDNlY3JxLm5leHRfdG9fdXNlID0gMDtcXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0aGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKGh3KTtcXG4gNjI4OlxcdFxcbiA2Mjk6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNtZHEtXFx1MDAzZWNycS5sb2NrKTtcXG4gNjMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjbWRxLVxcdTAwM2Vjc3EubG9jayk7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGNsZWFyX2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHQvKiBDaGVjayBpZiB0aGVyZSBpcyBuZXcgcmVzZXQgcGVuZGluZywgYmVjYXVzZSB0aGUgaGlnaGVyIGxldmVsXFxuIDYzNTpcXHRcXHQgKiByZXNldCBtYXkgaGFwcGVuIHdoZW4gbG93ZXIgbGV2ZWwgcmVzZXQgaXMgYmVpbmcgcHJvY2Vzc2VkLlxcbiA2MzY6XFx0XFx0ICovXFxuIDYzNzpcXHRcXHRpZiAocmVzZXRfcGVuZGluZykge1xcbiA2Mzg6XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbiA2Mzk6XFx0XFx0XFx0Z290byBlcnJfY21kX2luaXQ7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdC8qIGdldCB2ZXJzaW9uIGFuZCBkZXZpY2UgY2FwYWJpbGl0aWVzICovXFxuIDY0MzpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KGFlX2RldiwgaHcsXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcXG4gNjQ1OlxcdFxcdGlmIChyZXQpIHtcXG4gNjQ2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiA2NDc6XFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIGFuZCBjYXBhYmlsaXRpZXMsIHJldCA9ICVkXFxcXG5cXFwiLFxcbiA2NDg6XFx0XFx0XFx0XFx0cmV0KTtcXG4gNjQ5OlxcdFxcdFxcdGdvdG8gZXJyX2NtZF9pbml0O1xcbiA2NTA6XFx0XFx0fVxcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuIDY1MzpcXHRcXHRcXHQgXFxcIlRoZSBmaXJtd2FyZSB2ZXJzaW9uIGlzICVsdS4lbHUuJWx1LiVsdVxcXFxuXFxcIixcXG4gNjU0OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTNfTUFTSyxcXG4gNjU1OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUzX1NISUZUKSxcXG4gNjU2OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTJfTUFTSyxcXG4gNjU3OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUyX1NISUZUKSxcXG4gNjU4OlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTFfTUFTSyxcXG4gNjU5OlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUxX1NISUZUKSxcXG4gNjYwOlxcdFxcdFxcdCBobmFlM19nZXRfZmllbGQoKmZ3X3ZlcnNpb24sIEhOQUUzX0ZXX1ZFUlNJT05fQllURTBfTUFTSyxcXG4gNjYxOlxcdFxcdFxcdFxcdFxcdCBITkFFM19GV19WRVJTSU9OX0JZVEUwX1NISUZUKSk7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdGlmICghaXNfcGYgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VkZXZfdmVyc2lvbiBcXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXG4gNjY2OlxcdFxcdC8qIGFzayB0aGUgZmlybXdhcmUgdG8gZW5hYmxlIHNvbWUgZmVhdHVyZXMsIGRyaXZlciBjYW4gd29yayB3aXRob3V0XFxuIDY2NzpcXHRcXHQgKiBpdC5cXG4gNjY4OlxcdFxcdCAqL1xcbiA2Njk6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIHRydWUpO1xcbiA2NzA6XFx0XFx0aWYgKHJldClcXG4gNjcxOlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZhZV9kZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4gNjcyOlxcdFxcdFxcdFxcdCBcXFwiRmlybXdhcmUgY29tcGF0aWJsZSBmZWF0dXJlcyBub3QgZW5hYmxlZCglZCkuXFxcXG5cXFwiLFxcbiA2NzM6XFx0XFx0XFx0XFx0IHJldCk7XFxuIDY3NDpcXHRcXHRyZXR1cm4gMDtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0ZXJyX2NtZF9pbml0OlxcbiA2Nzc6XFx0XFx0c2V0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2ODA6XFx0fVxcbiA2ODE6XFx0RVhQT1JUX1NZTUJPTF9HUEwoaGNsZ2VfY29tbV9jbWRfaW5pdCk7XFxuIDY4MjpcXHRcXG4gNjgzOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gNjg0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiSE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XFxcIik7XFxuIDY4NTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJIdWF3ZWkgVGVjaC4gQ28uLCBMdGQuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjUwLjk1MzQzNzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5Mjg4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAqKlxuXG5BbHJpZ2h0LCBzbyBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAgaXMgbGlrZWx5IGEgbG93LWxldmVsIGZ1bmN0aW9uLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGxheWVyLiBJdCBzb3VuZHMgbGlrZSBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhpcyBoYXJkd2FyZS4gSXQgc2VuZHMgYSBjb21tYW5kLCBwcmVzdW1hYmx5IGEgcXVlcnksIHRvIHRoZSBlbWJlZGRlZCBmaXJtd2FyZSBvbiB0aGUgZGV2aWNlLiBUaGVuLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgbWVhbnMgaXQncyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbjsgd2UncmUgYmxvY2tpbmcgdW50aWwgdGhlIGZpcm13YXJlIHJlcGxpZXMuXG5cblRoaXMgcmVzcG9uc2UgaXMgZ29pbmcgdG8gYmUgdml0YWwgYmVjYXVzZSBpdCdsbCBsaWtlbHkgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlybXdhcmUgdmVyc2lvbiwgd2hpY2ggd2lsbCBhZmZlY3Qgd2hhdCBjb2RlIHBhdGhzIG5lZWQgdG8gYmUgdGFrZW4uIEl0IHdpbGwgYWxzbyBwcm92aWRlIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcy4gVGhpcyBcImNhcGFiaWxpdHlcIiBpbmZvcm1hdGlvbiBpcyB3aGF0IEknbSByZWFsbHkgY3VyaW91cyBhYm91dC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGRhdGEgdGhhdCBjb21lcyBiYWNrLiBJdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogY2FwYWJsZSBvZiDigJMgZmVhdHVyZXMsIHN1cHBvcnRlZCBwcm90b2NvbHMsIHBvc3NpYmx5IGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgb3IgY29tbXVuaWNhdGlvbiBzdGFjayBidWlsZHMuIEFueSBkaXNjcmVwYW5jaWVzIGhlcmUgY291bGQgY2F1c2UgbWFqb3IgcHJvYmxlbXMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGlzIHJlc3BvbnNlIGNhcmVmdWxseSB0byBkZXRlcm1pbmUgaG93IHRoZSBzb2Z0d2FyZSBoYW5kbGVzIHRoZXNlIHBvdGVudGlhbCB2YXJpYXRpb25zLiBJdCdzIHRoZSBmaXJzdCBzdGVwIHRvIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHVzaW5nIHRoZSBoYXJkd2FyZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxODUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjU0Ljg0NzM3MzA0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwNTQxMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MjEwPWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjIyODppbnQgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMjktXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz02MTI9aW50IGhjbGdlX2NvbW1fY21kX2luaXQoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY0Mi1cXHQvKiBnZXQgdmVyc2lvbiBhbmQgZGV2aWNlIGNhcGFiaWxpdGllcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NjQzOlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoYWVfZGV2LCBodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTY0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZ3X3ZlcnNpb24sIGlzX3BmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDc4PXZvaWQgaGNsZ2VfY29tbV9jbWRfaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDo0Nzk6aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgtNDgwLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTY6NTUuMjA3OTIwNjQ3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODc5MzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWA6XG5cbioqQW5hbHl6aW5nIGBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIGFsb25lIGdpdmVzIG1lIGEgcHJldHR5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBjb21tYW5kIHdpdGhpbiB0aGUgYGhjbGdlX2NvbW1gIG1vZHVsZSAod2hpY2gsIGdpdmVuIHRoZSBuYW1pbmcsIEknbSBpbmZlcnJpbmcgaXMgcmVsYXRlZCB0byBzb21lIGNvbW11bmljYXRpb24gbGF5ZXIsIHBlcmhhcHMgaGFyZHdhcmUgY29udHJvbCBsYW5ndWFnZSBvciBhIHNpbWlsYXIgZW1iZWRkZWQgc3lzdGVtKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGluZm9ybWF0aW9uIHRoaXMgcGFydGljdWxhciBjb21tYW5kIGFpbXMgdG8gcmV0cmlldmUsIGJ1dCAndmVyc2lvbicgYW5kICdjYXBhYmlsaXR5JyBhcmUgaHVnZSBjbHVlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcXVlcnkgc29tZSBkZXZpY2Ugb3IgbW9kdWxlIGZvciBpdHMgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0cyBmdW5jdGlvbmFsIGNhcGFiaWxpdGllcy4gSSdtIHRoaW5raW5nIGluIHRlcm1zIG9mIGJlaW5nIGFibGUgdG8gY2hlY2sgdGhlIGNvbXBhdGliaWxpdHkgb2YgZGlmZmVyZW50IG1vZHVsZXMuIE1heWJlIGl0J3MgY2hlY2tpbmcgd2hhdCBmZWF0dXJlcyB0aGUgZGV2aWNlIHN1cHBvcnRzLCBsaWtlIGNlcnRhaW4gZGF0YSB0cmFuc2ZlciBzcGVlZHMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVuaXRzLlxuXG5JIHdpbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBjb21tYW5kIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIElzIGl0IGEgc3luY2hyb25vdXMgcmVxdWVzdC1yZXNwb25zZSB0eXBlLCBvciBtb3JlIG9mIGFuIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24/IERvZXMgaXQgdXRpbGl6ZSBhIHBhcnRpY3VsYXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBvciB0aW1lb3V0IG1lY2hhbmlzbXMgaW1wbGVtZW50ZWQ/IFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBob3cgdGhlIGNvbW1hbmQgaXMgc3RydWN0dXJlZCBhcyB3ZWxsIGFzIGhvdyB0aGUgcmVzcG9uc2UgaXMgaW50ZXJwcmV0ZWQgYW5kIHRoZW4gcHJvY2Vzc2VkIGJ5IHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIwNywiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE2OjU5LjE5NTg1NjU3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI4OlxcdGludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4gMjI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHUzMiAqZndfdmVyc2lvbiwgYm9vbCBpc19wZilcXG4gMjMxOlxcdHtcXG4gMjMyOlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX3F1ZXJ5X3ZlcnNpb25fY21kICpyZXNwO1xcbiAyMzM6XFx0XFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4gMjM0OlxcdFxcdGludCByZXQ7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdGhjbGdlX2NvbW1fY21kX3NldHVwX2Jhc2ljX2Rlc2MoXFx1MDAyNmRlc2MsIEhDTEdFX09QQ19RVUVSWV9GV19WRVIsIDEpO1xcbiAyMzc6XFx0XFx0cmVzcCA9IChzdHJ1Y3QgaGNsZ2VfY29tbV9xdWVyeV92ZXJzaW9uX2NtZCAqKWRlc2MuZGF0YTtcXG4gMjM4OlxcdFxcdHJlc3AtXFx1MDAzZWFwaV9jYXBzID0gaGNsZ2VfY29tbV9idWlsZF9hcGlfY2FwcygpO1xcbiAyMzk6XFx0XFxuIDI0MDpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuIDI0MTpcXHRcXHRpZiAocmV0KVxcbiAyNDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0KmZ3X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VmaXJtd2FyZSk7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGFlX2Rldi1cXHUwMDNlZGV2X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VoYXJkd2FyZSkgXFx1MDAzY1xcdTAwM2NcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBITkFFM19QQ0lfUkVWSVNJT05fQklUX1NJWkU7XFxuIDI0ODpcXHRcXHRhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIHw9IGFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlcmV2aXNpb247XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uID09IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YyKSB7XFxuIDI1MTpcXHRcXHRcXHRoY2xnZV9jb21tX3NldF9kZWZhdWx0X2NhcGFiaWxpdHkoYWVfZGV2LCBpc19wZik7XFxuIDI1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjUzOlxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aGNsZ2VfY29tbV9wYXJzZV9jYXBhYmlsaXR5KGFlX2RldiwgaXNfcGYsIHJlc3ApO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNTg6XFx0fVxcbiAyNTk6XFx0XFxuIDI2MDpcXHRzdGF0aWMgY29uc3QgdTE2IHNwZWNfb3Bjb2RlW10gPSB7IEhDTEdFX09QQ19TVEFUU182NF9CSVQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9PUENfU1RBVFNfMzJfQklULFxcbiAyNjI6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfT1BDX1NUQVRTX01BQyxcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX09QQ19TVEFUU19NQUNfQUxMLFxcbiAyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfT1BDX1FVRVJZXzMyX0JJVF9SRUcsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9PUENfUVVFUllfNjRfQklUX1JFRyxcXG4gMjY2OlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX01QRl9SQVNfSU5ULFxcbiAyNjc6XFx0XFx0XFx0XFx0XFx0ICAgSENMR0VfUVVFUllfQ0xFQVJfUEZfUkFTX0lOVCxcXG4gMjY4OlxcdFxcdFxcdFxcdFxcdCAgIEhDTEdFX1FVRVJZX0NMRUFSX0FMTF9NUEZfTVNJWF9JTlQsXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9RVUVSWV9DTEVBUl9BTExfUEZfTVNJWF9JTlQsXFxuIDI3MDpcXHRcXHRcXHRcXHRcXHQgICBIQ0xHRV9RVUVSWV9BTExfRVJSX0lORk8gfTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIGJvb2wgaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZSh1MTYgb3Bjb2RlKVxcbiAyNzM6XFx0e1xcbiAyNzQ6XFx0XFx0LyogdGhlc2UgY29tbWFuZHMgaGF2ZSBzZXZlcmFsIGRlc2NyaXB0b3JzLFxcbiAyNzU6XFx0XFx0ICogYW5kIHVzZSB0aGUgZmlyc3Qgb25lIHRvIHNhdmUgb3Bjb2RlIGFuZCByZXR1cm4gdmFsdWVcXG4gMjc2OlxcdFxcdCAqL1xcbiAyNzc6XFx0XFx0dTMyIGk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNwZWNfb3Bjb2RlKTsgaSsrKVxcbiAyODA6XFx0XFx0XFx0aWYgKHNwZWNfb3Bjb2RlW2ldID09IG9wY29kZSlcXG4gMjgxOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI4NDpcXHR9XFxuIDI4NTpcXHRcXG4gMjg2OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpyaW5nKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0aW50IG50YyA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuIDI4OTpcXHRcXHRpbnQgbnR1ID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuIDI5MDpcXHRcXHRpbnQgdXNlZCA9IChudHUgLSBudGMgKyByaW5nLVxcdTAwM2VkZXNjX251bSkgJSByaW5nLVxcdTAwM2VkZXNjX251bTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0cmV0dXJuIHJpbmctXFx1MDAzZWRlc2NfbnVtIC0gdXNlZCAtIDE7XFxuIDI5MzpcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdHN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX2NvcHlfZGVzYyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0c3RydWN0IGhjbGdlX2Rlc2MgKmRlc2NfdG9fdXNlO1xcbiAyOTk6XFx0XFx0aW50IGhhbmRsZSA9IDA7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdHdoaWxlIChoYW5kbGUgXFx1MDAzYyBudW0pIHtcXG4gMzAyOlxcdFxcdFxcdGRlc2NfdG9fdXNlID0gXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLmRlc2NbaHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2VdO1xcbiAzMDM6XFx0XFx0XFx0KmRlc2NfdG9fdXNlID0gZGVzY1toYW5kbGVdO1xcbiAzMDQ6XFx0XFx0XFx0KGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlKSsrO1xcbiAzMDU6XFx0XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlIFxcdTAwM2U9IGh3LVxcdTAwM2VjbXEuY3NxLmRlc2NfbnVtKVxcbiAzMDY6XFx0XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2UgPSAwO1xcbiAzMDc6XFx0XFx0XFx0aGFuZGxlKys7XFxuIDMwODpcXHRcXHR9XFxuIDMwOTpcXHR9XFxuIDMxMDpcXHRcXG4gMzExOlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9pc192YWxpZF9jc3FfY2xlYW5faGVhZChzdHJ1Y3QgaGNsZ2VfY29tbV9jbXFfcmluZyAqcmluZyxcXG4gMzEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBoZWFkKVxcbiAzMTM6XFx0e1xcbiAzMTQ6XFx0XFx0aW50IG50YyA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuIDMxNTpcXHRcXHRpbnQgbnR1ID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdGlmIChudHUgXFx1MDAzZSBudGMpXFxuIDMxODpcXHRcXHRcXHRyZXR1cm4gaGVhZCBcXHUwMDNlPSBudGMgXFx1MDAyNlxcdTAwMjYgaGVhZCBcXHUwMDNjPSBudHU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdHJldHVybiBoZWFkIFxcdTAwM2U9IG50YyB8fCBoZWFkIFxcdTAwM2M9IG50dTtcXG4gMzIxOlxcdH1cXG4gMzIyOlxcdFxcbiAzMjM6XFx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IGhjbGdlX2NvbW1fY21xX3JpbmcgKmNzcSA9IFxcdTAwMjZody1cXHUwMDNlY21xLmNzcTtcXG4gMzI2OlxcdFxcdGludCBjbGVhbjtcXG4gMzI3OlxcdFxcdHUzMiBoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNjo1OS4xOTYwNjcyMTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NTEyMDYxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQXR0YWNrIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0YW5kYXJkIOKAkyBzZW5kcyBhIGNvbW1hbmQsIHdhaXRzIGZvciBjb21wbGV0aW9uLiBUaGUgUENJIGZ1enplciwgaWYgaXQncyBoaXR0aW5nIHRoaXMsICpjb3VsZCogcG90ZW50aWFsbHkgdHJpZ2dlciBhIGNvbXBsZXRpb24gcmFuZG9tbHkgdmlhIE1NSU8sIGJ1dCBpdCdzIGV4Y2VwdGlvbmFsbHkgdW5saWtlbHkgaXQgd2lsbCBjcmVhdGUgYSB2YWxpZCBmaXJtd2FyZSB2ZXJzaW9uIG9yIGhhcmR3YXJlIHZlcnNpb24gdGhhdCBnZXRzIHBhc3QgYW55IHJlYWwgY2hlY2tzLCB1bmxlc3MgdGhlIGNoZWNrcyBhcmUgbGF1Z2hhYmx5IHdlYWsuXG5cbkFoLCBidXQgaGFuZyBvbi4uLiBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAganVzdCAqcmVhZHMqIHRob3NlIHZlcnNpb25zIGZyb20gdGhlIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJZiBgYWVfZGV2LVx1MDAzZWRldl92ZXJzaW9uYCBoYXBwZW5zIHRvIGJlIGBITkFFM19ERVZJQ0VfVkVSU0lPTl9WMmAsIGl0IGp1c3QgcmV0dXJucyB6ZXJvLiBPdGhlcndpc2UsIGl0IGNhbGxzIGBoY2xnZV9jb21tX3BhcnNlX2NhcGFiaWxpdHlgLiBTbywgdGhlIFBDSSBmdXp6ZXIgKm1pZ2h0KiBiZSBhYmxlIHRvIGJ5cGFzcyB0aGlzIGlmIGl0IHJhbmRvbWx5IHNldHMgYSB2YWxpZCB2ZXJzaW9uLCBvciBwZXJoYXBzIGlmIGFueSB2ZXJzaW9uIGlzIGFjY2VwdGVkLiBUaGlzIGNvdWxkIGJlIHByb21pc2luZy5cblxuQnV0IHRoZSBwcm9tcHQgYWxzbyBzYXlzLCBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGF0IHR5cGljYWxseSBtZWFucyBpZiBpdCdzIGEgZHJpdmVyIGZvciAqc3BlY2lmaWMqIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciwgaXQncyBjb25zaWRlcmVkIHVucmVhY2hhYmxlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0b3IgZm9yIEhOUzM/IEkgZG9uJ3QgdGhpbmsgdGhlcmUgaXMsIHdoaWNoIHdvdWxkIHN1Z2dlc3QgYSBkZWFkIGVuZC5cblxuV2FpdCwgZG9lcyBzeXprYWxsZXIgZXZlbiBmdXp6IEhOUzM/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBzeXpib3QgcmVwb3J0cyBvbiBITlMzIHRvIHNlZSBpZiBhbnlvbmUgaGFzIGhhZCBzdWNjZXNzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5LCBvciBkaWZmaWN1bHQsIGl0IHdpbGwgYmUgdG8gcmVhY2ggdGhpcyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6MDkuOTQ3MjgwNjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3Mjg5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG5zM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJNQUlOVEFJTkVSU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz0xMTY5Nz1TOlxcdFN1cHBvcnRlZFxcbk1BSU5UQUlORVJTOjExNjk4OkY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmL2huczMtcG11LnJzdFxcbk1BSU5UQUlORVJTOjExNjk5OkY6XFx0ZHJpdmVycy9wZXJmL2hpc2lsaWNvbi9obnMzX3BtdS5jXFxuTUFJTlRBSU5FUlMtMTE3MDAtXFxuLS1cXG5NQUlOVEFJTkVSUz0xMTczMz1XOlxcdGh0dHA6Ly93d3cuaGlzaWxpY29uLmNvbVxcbk1BSU5UQUlORVJTOjExNzM0OkY6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXFxuTUFJTlRBSU5FUlMtMTE3MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjEwLjA5MjAyNDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjU2NzY4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgSE5TMyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byByZWFjaCB0aGlzIHNwZWNpZmljIEhOUzMgZHJpdmVyLiBBaCwgeWVzLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLiBJdCdzIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggUENJIGRyaXZlcnMgYnkgbWF0Y2hpbmcgdGhlIFBDSSBJRCBhbmQgdGhlbiBmZWVkaW5nIHJhbmRvbSBNTUlPIGFjY2Vzc2VzLiBIb3dldmVyLCB0aGF0J3Mgbm90IHRoZSB3aG9sZSBzdG9yeS4gUmVhbGlzdGljYWxseSwgaWYgdGhlIGRyaXZlciByZWxpZXMgb24gY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMsIGl0IHVzdWFsbHkgZmFpbHMgZHVyaW5nIHRoZSBwcm9iaW5nIHN0YWdlLiBcblxuSG9sZCBvbiwgdGhvdWdoLCB0aGUgcGF0Y2ggYXBwbGljYXRpb24gY29tbWVudCBpbmRpY2F0ZXMgYHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld2AuIFRoYXQncyBzaWduaWZpY2FudC4gSXQgbWVhbnMgc3l6a2FsbGVyIGlzIGVpdGhlciBhY3RpdmVseSBmdXp6aW5nIGl0LCBvciBhdCBsZWFzdCBzb21lb25lIHN1Ym1pdHRlZCBpdCBmb3IgdGVzdGluZy4gT2theSwgaWYgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiBpdCwgaXQgbXVzdCBiZSBzb21ld2hhdCByZWFjaGFibGUsIG9yIGF0IGxlYXN0IGJlaW5nIHRlc3RlZCBmb3IgY29tcGlsYXRpb24uXG5cbk5vdywgbGV0J3Mgc2VlLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgUmlnaHQsIGJ1dCB0aGVuIHRoZXJlJ3MgdGhlIGNhdmVhdDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cblRoZSBITlMzIGlzIGEgKnBoeXNpY2FsKiBuZXR3b3JrIGNhcmQsIGFuZCBhcyBmYXIgYXMgSSBrbm93LCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdCBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZXJlJ3Mgbm8gZXF1aXZhbGVudCBvZiBgbWFjODAyMTFfaHdzaW1gIG9yIGBuZXRkZXZzaW1gIGZvciBITlMzLiBUaGUgUENJIGZ1enplciBtaWdodCB0cmlnZ2VyIHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IGl0J3MgYWxtb3N0IGNlcnRhaW4gdG8gZmFpbCBkZWVwIGludG8gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBsaWtlbHkgd2hpbGUgd2FpdGluZyBmb3IgZmlybXdhcmUgdG8gbG9hZCwgb3IgdHJ5aW5nIHRvIGluaXRpYWxpemUgdGhlIGNvbW1hbmQgcXVldWUuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQgbWUgdmVyaWZ5IGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBpcyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIGJpdC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOTQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6MTcuMjE3NzA0Nzk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1NDkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNsZ2VfY29tbV9jbWRfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzQtXFx0XFx0XFx0aW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDgyPWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDgzOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODQtXFx0XFx0XFx0aW50IG51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1OlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMwNTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVxcdFxcdGtleV9vZmZzZXQrKztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy00MTMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTcyLVxcdFxcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy04Ni1cXHRcXHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3OlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYz0zNDQyPWludCBoY2xnZV9oYW5kbGVfdmZfcXVldWVfZXJyX3JhcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jOjM0NjA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIGRlc2MsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjI6XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9NTA9aW50IGhjbGdldmZfY21kX3NlbmQoc3RydWN0IGhjbGdldmZfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcXHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aHctXFx1MDAzZWh3LCBkZXNjLCBudW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy01My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjE3LjMxODI2MTk1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1Nzc2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBDb21tdW5pY2F0aW9uKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuLi4gdGhhdCdzIHJpbmdpbmcgYSBiZWxsLiBZZWFoLCB0aGF0J3MgdGhlIGZ1bmN0aW9uIHdlIHVzZSB0byBhY3R1YWxseSAqdHJhbnNtaXQqIGNvbW1hbmRzIHRvIHRoZSBmaXJtd2FyZSwgaXNuJ3QgaXQ/IE9rYXksIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoaXMgY29ycmVjdGx5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gVGltZSB0byBnbyByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvbW1hbmQgdHJhbnNtaXNzaW9uIHdvcmtzLiBMZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGhjbGdlX2NvbW1fY21kLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGF0IGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmdW5jdGlvbi4gR290IHRvIG1ha2Ugc3VyZSBJ4oCZbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA2NiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjIwLjk2NDA0NDg4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxcbiA0NjY6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG4gNDY3OlxcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxcbiA0Njg6XFx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxcbiA0Njk6XFx0ICpcXG4gNDcwOlxcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxcbiA0NzE6XFx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcXG4gNDcyOlxcdCAqKi9cXG4gNDczOlxcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuIDQ3NDpcXHRcXHRcXHRcXHRpbnQgbnVtKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0Ym9vbCBpc19zcGVjaWFsID0gaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpKTtcXG4gNDc3OlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3E7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFx0aW50IG50YztcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9zZW5kKVxcbiA0ODI6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpKSB7XFxuIDQ4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobnVtIFxcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcSkpIHtcXG4gNDkyOlxcdFxcdFxcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXFxuIDQ5MzpcXHRcXHRcXHQgKiBuZWVkIHVwZGF0ZSB0aGUgU1cgSEVBRCBwb2ludGVyIGNzcS1cXHUwMDNlbmV4dF90b19jbGVhblxcbiA0OTQ6XFx0XFx0XFx0ICovXFxuIDQ5NTpcXHRcXHRcXHRjc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPVxcbiA0OTY6XFx0XFx0XFx0XFx0aGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG4gNDk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdC8qKlxcbiA1MDI6XFx0XFx0ICogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiBkZXNjIGluIHRoZSByaW5nIGZvciB0aGlzIHRpbWVcXG4gNTAzOlxcdFxcdCAqIHdoaWNoIHdpbGwgYmUgdXNlIGZvciBoYXJkd2FyZSB0byB3cml0ZSBiYWNrXFxuIDUwNDpcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdG50YyA9IGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2MoaHcsIGRlc2MsIG51bSk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXFxuIDUxMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICBody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xcbiA1MTQ6XFx0XFxuIDUxNTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGlmIChody1cXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfZ2V0KVxcbiA1MTg6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX2dldChodywgZGVzYywgbnVtLCBpc19zcGVjaWFsKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTIxOlxcdH1cXG4gNTIyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3NlbmQpO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF91bmluaXRfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDUyNTpcXHR7XFxuIDUyNjpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0xfUkVHLCAwKTtcXG4gNTI3OlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfQkFTRUFERFJfSF9SRUcsIDApO1xcbiA1Mjg6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9ERVBUSF9SRUcsIDApO1xcbiA1Mjk6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRywgMCk7XFxuIDUzMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcXG4gNTMxOlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsIDApO1xcbiA1MzI6XFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NSUV9CQVNFQUREUl9IX1JFRywgMCk7XFxuIDUzMzpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0RFUFRIX1JFRywgMCk7XFxuIDUzNDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1JRX0hFQURfUkVHLCAwKTtcXG4gNTM1OlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DUlFfVEFJTF9SRUcsIDApO1xcbiA1MzY6XFx0fVxcbiA1Mzc6XFx0XFxuIDUzODpcXHR2b2lkIGhjbGdlX2NvbW1fY21kX3VuaW5pdChzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXFxuIDUzOTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDU0MDpcXHR7XFxuIDU0MTpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcXHUwMDI2aHctXFx1MDAzZWNtcTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0aGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKGFlX2RldiwgaHcsIGZhbHNlKTtcXG4gNTQ0OlxcdFxcdHNldF9iaXQoSENMR0VfQ09NTV9TVEFURV9DTURfRElTQUJMRSwgXFx1MDAyNmh3LVxcdTAwM2Vjb21tX3N0YXRlKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0Lyogd2FpdCB0byBlbnN1cmUgdGhhdCB0aGUgZmlybXdhcmUgY29tcGxldGVzIHRoZSBwb3NzaWJsZSBsZWZ0XFxuIDU0NzpcXHRcXHQgKiBvdmVyIGNvbW1hbmRzLlxcbiA1NDg6XFx0XFx0ICovXFxuIDU0OTpcXHRcXHRtc2xlZXAoSENMR0VfQ09NTV9DTURRX0NMRUFSX1dBSVRfVElNRSk7XFxuIDU1MDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNtZHEtXFx1MDAzZWNzcS5sb2NrKTtcXG4gNTUxOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxLmxvY2spO1xcbiA1NTI6XFx0XFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0X3JlZ3MoaHcpO1xcbiA1NTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNtZHEtXFx1MDAzZWNycS5sb2NrKTtcXG4gNTU0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjbWRxLVxcdTAwM2Vjc3EubG9jayk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcXHUwMDI2Y21kcS1cXHUwMDNlY3NxKTtcXG4gNTU3OlxcdFxcdGhjbGdlX2NvbW1fZnJlZV9jbWRfZGVzYyhcXHUwMDI2Y21kcS1cXHUwMDNlY3JxKTtcXG4gNTU4OlxcdH1cXG4gNTU5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3VuaW5pdCk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdGludCBoY2xnZV9jb21tX2NtZF9xdWV1ZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuIDU2MjpcXHR7XFxuIDU2MzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9jbXEgKmNtZHEgPSBcXHUwMDI2aHctXFx1MDAzZWNtcTtcXG4gNTY0OlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjIwLjk2NDI2NjM0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI2MDY0NzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBDb21tYW5kIEV4ZWN1dGlvbiBSZXN1bHRzKipcblxuUmlnaHQsIHNvIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGlzIHdoZXJlIHdlJ3JlIGF0LiBJJ20gZm9jdXNpbmcgb24gdGhlIHZlcmlmaWNhdGlvbiBzdGVwOyB0aGUgY3J1Y2lhbCBwb2ludCBvZiBkZXRlcm1pbmluZyBpZiB0aGUgY29tbWFuZCwgd2hhdGV2ZXIgaXQgd2FzLCBhY3R1YWxseSBkaWQgd2hhdCBpdCB3YXMgc3VwcG9zZWQgdG8gZG8uIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGdhdGVrZWVwZXIsIGVuc3VyaW5nIHRoYXQgdGhlIHN5c3RlbSBtb3ZlcyBmb3J3YXJkIG9ubHkgaWYgdGhlIHByZXZpb3VzIGFjdGlvbiBhY2hpZXZlZCBpdHMgaW50ZW5kZWQgb3V0Y29tZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgLSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHZhcmlvdXMgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhpcyBjaGVjayBoYW5kbGVzIHRoZW0uIElzIGl0IGEgc2ltcGxlIHJldHVybiBjb2RlIGNoZWNrLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIHN0YXRlIHZlcmlmaWNhdGlvbj8gRG9lcyBpdCBjb25zaWRlciB0aGUgaW5mbHVlbmNlIG9mIHRoZSBjb21tYW5kIG9uIGRlcGVuZGVudCBtb2R1bGVzPyBIb3cgdGhvcm91Z2ggaXMgaXQ/IFRoZSBxdWFsaXR5IG9mIHRoaXMgdmFsaWRhdGlvbiBzdGVwIGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZzogd2hhdCBzcGVjaWZpYyBlcnJvciBjb2RlcyBhcmUgYW50aWNpcGF0ZWQsIGhvdyBhcmUgdGhleSBpbnRlcnByZXRlZCwgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQgZm9sbG93aW5nIGEgZmFpbHVyZSBkZXRlY3RlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBpdCBjb25zaWRlcnMgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlcm1pdHRlbnQgZmFpbHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBleGVjdXRpb24gcGF0aCBpcyBjb25maXJtZWQsIG9yIGRpdmVyZ2VkLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGNoZWNrIGlzIGtleSB0byBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzE2LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozNS4yMjQ5MjE4MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNDQwOlxcdFxcdGludCBoYW5kbGUsIHJldDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogSWYgdGhlIGNvbW1hbmQgaXMgc3luYywgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIHdyaXRlIGJhY2ssXFxuIDQ0MzpcXHRcXHQgKiBpZiBtdWx0aSBkZXNjcmlwdG9ycyB0byBiZSBzZW50LCB1c2UgdGhlIGZpcnN0IG9uZSB0byBjaGVja1xcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cXHUwMDNlZmxhZykpKVxcbiA0NDY6XFx0XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbiA0NDc6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpc19jb21wbGV0ZWQpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAoIWlzX2NvbXBsZXRlZClcXG4gNDUwOlxcdFxcdFxcdHJldCA9IC1FQkFERTtcXG4gNDUxOlxcdFxcdGVsc2VcXG4gNDUyOlxcdFxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChodywgZGVzYywgbnVtLCBudGMpO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXFxuIDQ1NTpcXHRcXHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xcbiA0NTY6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRyZXQgPSBoYW5kbGU7XFxuIDQ1ODpcXHRcXHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxcbiA0NTk6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLnBkZXYtXFx1MDAzZWRldixcXG4gNDYwOlxcdFxcdFxcdFxcdCBcXFwiY2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcXFxuXFxcIiwgaGFuZGxlLCBudW0pO1xcbiA0NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjM1LjIyNTE0MDQ5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyMTk1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKldhaXRpbmcgb24gdGhlIEZpcm13YXJlJ3MgUmVwbHkqKlxuXG5SaWdodCwgc28gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuLi4gdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHdlJ3JlIGhhbmdpbmcsIGlzbid0IGl0PyBXZSd2ZSBzZW50IHRoZSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSDigJMgaXQgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSByZWdpc3RlciByZWFkIHRvIGEgY29tcGxleCBjb25maWd1cmF0aW9uIHNlcXVlbmNlIOKAkyBhbmQgbm93IHdlJ3JlIGVzc2VudGlhbGx5IGluIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIHVzaW5nIGFuIGludGVycnVwdC1kcml2ZW4gbWVjaGFuaXNtIGludGVybmFsbHksIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSB0byBhY2tub3dsZWRnZSBhbmQgd3JpdGUgYmFjayB0aGUgcmVzcG9uc2UuIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgZXZlcnl0aGluZyBjb252ZXJnZXMuIFdlICpoYXZlKiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGl0c2VsZiBpcyBzb2xpZCBoZXJlOyBhIGdsaXRjaCBhdCB0aGlzIHN0YWdlIGlzIGEgZGlzYXN0ZXIuIFdoYXQgYXJlIG91ciB0aW1lb3V0IG1lY2hhbmlzbXM/IFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgaW4gcGxhY2UgaWYgdGhlIGZpcm13YXJlIGdvZXMgc2lsZW50PyBBcmUgd2UgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGFueSBjb25jdXJyZW50IG9wZXJhdGlvbnM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgd29yc3QtY2FzZSBzY2VuYXJpb3MgaGVyZSwgbGlrZSBpZiB0aGUgZmlybXdhcmUgY3Jhc2hlcyBkdXJpbmcgcHJvY2Vzc2luZyBhbmQgbmV2ZXIgd3JpdGVzIGJhY2suIFRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0ncyByb2J1c3RuZXNzIGFyZSBtYXNzaXZlIGRlcGVuZGluZyBvbiB3aGF0IGNvbW1hbmQgd2FzIGlzc3VlZC4gSXQncyB0aGUgYWJzb2x1dGUgZXNzZW5jZSBvZiBzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uLCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciB0aGlzIHBhcnRpY3VsYXIgZXhjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTU0LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozOS4yMTczNDA2NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdH07XFxuIDQwMTpcXHRcXHR1MzIgZXJyY29kZV9jb3VudCA9IEFSUkFZX1NJWkUoaGNsZ2VfY29tbV9jbWRfZXJyY29kZSk7XFxuIDQwMjpcXHRcXHR1MzIgaTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVycmNvZGVfY291bnQ7IGkrKylcXG4gNDA1OlxcdFxcdFxcdGlmIChoY2xnZV9jb21tX2NtZF9lcnJjb2RlW2ldLmltcF9lcnJjb2RlID09IGRlc2NfcmV0KVxcbiA0MDY6XFx0XFx0XFx0XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX2VycmNvZGVbaV0uY29tbW9uX2Vycm5vO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRyZXR1cm4gLUVJTztcXG4gNDA5OlxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWwoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtLFxcbiA0MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBudGMpXFxuIDQxNDpcXHR7XFxuIDQxNTpcXHRcXHR1MTYgb3Bjb2RlLCBkZXNjX3JldDtcXG4gNDE2OlxcdFxcdGludCBoYW5kbGU7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdG9wY29kZSA9IGxlMTZfdG9fY3B1KGRlc2NbMF0ub3Bjb2RlKTtcXG4gNDE5OlxcdFxcdGZvciAoaGFuZGxlID0gMDsgaGFuZGxlIFxcdTAwM2MgbnVtOyBoYW5kbGUrKykge1xcbiA0MjA6XFx0XFx0XFx0ZGVzY1toYW5kbGVdID0gaHctXFx1MDAzZWNtcS5jc3EuZGVzY1tudGNdO1xcbiA0MjE6XFx0XFx0XFx0bnRjKys7XFxuIDQyMjpcXHRcXHRcXHRpZiAobnRjIFxcdTAwM2U9IGh3LVxcdTAwM2VjbXEuY3NxLmRlc2NfbnVtKVxcbiA0MjM6XFx0XFx0XFx0XFx0bnRjID0gMDtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcdGlmIChsaWtlbHkoIWhjbGdlX2NvbW1faXNfc3BlY2lhbF9vcGNvZGUob3Bjb2RlKSkpXFxuIDQyNjpcXHRcXHRcXHRkZXNjX3JldCA9IGxlMTZfdG9fY3B1KGRlc2NbbnVtIC0gMV0ucmV0dmFsKTtcXG4gNDI3OlxcdFxcdGVsc2VcXG4gNDI4OlxcdFxcdFxcdGRlc2NfcmV0ID0gbGUxNl90b19jcHUoZGVzY1swXS5yZXR2YWwpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRody1cXHUwMDNlY21xLmxhc3Rfc3RhdHVzID0gZGVzY19yZXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9jb252ZXJ0X2Vycl9jb2RlKGRlc2NfcmV0KTtcXG4gNDMzOlxcdH1cXG4gNDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzozOS4yMTc0NjMxODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjkwMTM3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWlzc2luZyBGdW5jdGlvbiBDYWxsIGluIHRoZSBIQ0xHRSBDb250ZXh0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIGJlIHNlZWluZyBhIGNhbGwgdG8gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAgcmlnaHQgYWJvdXQuLi4gKmhlcmUqLiBCdXQgaXQncyBub3QgdGhlcmUuIFN0cmFuZ2UuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBtYWtlIHN1cmUgaXQgd2Fzbid0IGFjY2lkZW50YWxseSBjb21tZW50ZWQgb3V0IG9yIHJlbmFtZWQgaW4gYSByZWNlbnQgY29tbWl0LiBQZXJoYXBzIHRoZXJlJ3MgYW4gaW50ZXJuYWwgbWFjcm8gdGhhdCdzIHN1YnN0aXR1dGluZyBpdCBpbiwgYnV0IHRoYXQgc2VlbXMgdW5saWtlbHksIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpc24ndCBteSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwNjcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE3OjUxLjM4NjQ4MDA1NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODI0ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNTQ9c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNjg6c3RhdGljIHZvaWQgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgdTE2IG9wY29kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM2OS1cXHRcXHRcXHRcXHQgICAgIGJvb2wgKmlzX2NvbXBsZXRlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NDM1PXN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDQ1LVxcdGlmIChIQ0xHRV9DT01NX1NFTkRfU1lOQyhsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VmbGFnKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NDY6XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDQ3LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aXNfY29tcGxldGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6NTEuNTM4MzE5MDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NTI5MjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLCBkaXN0aWxsZWQgZG93biB0byBpdHMgY29yZSBjb25jZXB0czpcblxuKipBbmFseXppbmcgYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBjb2RlLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG5hbWU6IGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGluIGEgY29tbXVuaWNhdGlvbiBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIsIGdpdmVuIHRoZSAnaGNsZ2UnIHByZWZpeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoYXQqIGlzIGJlaW5nIHdhaXRlZCBvbiwgKndoeSosIGFuZCAqaG93KiB0aGUgd2FpdCBpcyBpbXBsZW1lbnRlZC4gVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSdzIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBnb2luZyBvbiDigJMgdGhlIHN5c3RlbSBzZW5kcyBhIHJlcXVlc3QsIGFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNydWNpYWwgcGF1c2UgdW50aWwgdGhlIGhhcmR3YXJlIHJldHVybnMgd2l0aCBhbiBhbnN3ZXIuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmV3IGtleSBhcmVhcyBJIGV4cGVjdCB0byBzZWU6XG5cbiogICAqKkludGVycnVwdCBIYW5kbGluZy9Qb2xsaW5nOioqIEkgYW50aWNpcGF0ZSBlaXRoZXIgYW4gaW50ZXJydXB0LWRyaXZlbiBtZWNoYW5pc20sIHdoZXJlIGFuIGludGVycnVwdCBzaWduYWxzIHRoZSByZXNwb25zZSdzIGFycml2YWwsIG9yIGEgcG9sbGluZyBzdHJhdGVneSB3aGVyZSB0aGUgZnVuY3Rpb24gY29udGludW91c2x5IGNoZWNrcyBhIHN0YXR1cyByZWdpc3RlciBvciBmbGFnLiBUaGUgcGVyZm9ybWFuY2UgYW5kIGVmZmljaWVuY3kgaW1wbGljYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuXG4qICAgKipUaW1lb3V0IE1lY2hhbmlzbToqKiBBbnkgcm9idXN0IGltcGxlbWVudGF0aW9uICptdXN0KiBpbmNsdWRlIGEgdGltZW91dC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NlbmFyaW9zIHdoZXJlIHRoZSByZXNwb25zZSBpcyBkZWxheWVkIG9yIG5ldmVyIGFycml2ZXMuIEEgc2ltcGxlIGxvb3Agd2l0aCBhIGNvdW50ZXIsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRpbWVyIGltcGxlbWVudGF0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSB3YWl0IGZhaWxzLCBlaXRoZXIgZHVlIHRvIGEgdGltZW91dCBvciBwZXJoYXBzIGEgaGFyZHdhcmUgZXJyb3I/IFByb3BlciBlcnJvciBjb2RlcyBvciBmbGFncyBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LlxuKiAgICoqU3luY2hyb25pemF0aW9uL0NvbmN1cnJlbmN5OioqIElmIHRoaXMgaXMgcGFydCBvZiBhIG11bHRpLXRocmVhZGVkIHN5c3RlbSwgSSdsbCBiZSBzY3J1dGluaXppbmcgaG93IHRoZSBmdW5jdGlvbiBtYW5hZ2VzIGNvbmN1cnJlbmN5IGFuZCB0aHJlYWQgc2FmZXR5LiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHdhaXRpbmcgcHJvY2Vzcz9cbiogICAqKlJlc3BvbnNlIFZhbGlkYXRpb246KiogRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBoYXJkd2FyZSwgSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnVuY3Rpb24gcGVyZm9ybXMgYW55IHZhbGlkYXRpb24gb24gdGhlIHJldHVybmVkIHJlc3BvbnNlLiBJcyB0aGVyZSBhIGNoZWNrc3VtIGNoZWNrPyBJcyB0aGUgZGF0YSBmb3JtYXQgdmFsaWRhdGVkP1xuKiAgICoqQ29udGV4dDoqKiBJcyB0aGlzIGEgbG93LWxldmVsIGRyaXZlciBmdW5jdGlvbiwgb3IgcGFydCBvZiBhIG1vcmUgYWJzdHJhY3RlZCBjb21tdW5pY2F0aW9ucyBsaWJyYXJ5PyBJdHMgZGVzaWduIHdpbGwgZ2l2ZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgZGVwZW5kZW5jaWVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IHRvIGJlIGFzc2Vzc2luZyB0aGUgZWxlZ2FuY2UsIGVmZmljaWVuY3ksIHJvYnVzdG5lc3MsIGFuZCB0aHJlYWQtc2FmZXR5IG9mIHRoZSB3YWl0IG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzYxLCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTc6NTcuMzMzNjE1OTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2ODpcXHRzdGF0aWMgdm9pZCBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3Aoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgb3Bjb2RlLFxcbiAzNjk6XFx0XFx0XFx0XFx0XFx0ICAgICBib29sICppc19jb21wbGV0ZWQpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHR1MzIgY21kcV90eF90aW1lb3V0ID0gaGNsZ2VfZ2V0X2NtZHFfdHhfdGltZW91dChvcGNvZGUsXFxuIDM3MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRody1cXHUwMDNlY21xLnR4X3RpbWVvdXQpO1xcbiAzNzM6XFx0XFx0dTMyIHRpbWVvdXQgPSAwO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRkbyB7XFxuIDM3NjpcXHRcXHRcXHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XFxuIDM3NzpcXHRcXHRcXHRcXHQqaXNfY29tcGxldGVkID0gdHJ1ZTtcXG4gMzc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzk6XFx0XFx0XFx0fVxcbiAzODA6XFx0XFx0XFx0dWRlbGF5KDEpO1xcbiAzODE6XFx0XFx0XFx0dGltZW91dCsrO1xcbiAzODI6XFx0XFx0fSB3aGlsZSAodGltZW91dCBcXHUwMDNjIGNtZHFfdHhfdGltZW91dCk7XFxuIDM4MzpcXHR9XFxuIDM4NDpcXHRcXG4gMzg1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY29udmVydF9lcnJfY29kZSh1MTYgZGVzY19yZXQpXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRzdHJ1Y3QgaGNsZ2VfY29tbV9lcnJjb2RlIGhjbGdlX2NvbW1fY21kX2VycmNvZGVbXSA9IHtcXG4gMzg4OlxcdFxcdFxcdHsgSENMR0VfQ09NTV9DTURfRVhFQ19TVUNDRVNTLCAwIH0sXFxuIDM4OTpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX05PX0FVVEgsIC1FUEVSTSB9LFxcbiAzOTA6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9OT1RfU1VQUE9SVEVELCAtRU9QTk9UU1VQUCB9LFxcbiAzOTE6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9RVUVVRV9GVUxMLCAtRVhGVUxMIH0sXFxuIDM5MjpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX05FWFRfRVJSLCAtRU5PU1IgfSxcXG4gMzkzOlxcdFxcdFxcdHsgSENMR0VfQ09NTV9DTURfVU5FWEVfRVJSLCAtRU5PVEJMSyB9LFxcbiAzOTQ6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9QQVJBX0VSUiwgLUVJTlZBTCB9LFxcbiAzOTU6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9SRVNVTFRfRVJSLCAtRVJBTkdFIH0sXFxuIDM5NjpcXHRcXHRcXHR7IEhDTEdFX0NPTU1fQ01EX1RJTUVPVVQsIC1FVElNRSB9LFxcbiAzOTc6XFx0XFx0XFx0eyBIQ0xHRV9DT01NX0NNRF9ISUxJTktfRVJSLCAtRU5PTElOSyB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxNzo1Ny4zMzM3ODIxNDdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDgwOTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBDb21tYW5kIENvbXBsZXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgaXMgYSBjaGVjayBmb3IgY29tbWFuZCBjb21wbGV0aW9uLCBzaWduYWxlZCBieSB0aGUgYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCBmdW5jdGlvbi4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBhc3N1bXB0aW9uczogdGhpcyBsaWtlbHkgcmVmZXJzIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIG9yIG1vZHVsZSwgZ2l2ZW4gdGhlIFwiaGNsZ2VcIiBwcmVmaXgg4oCTIHBlcmhhcHMgSGlnaC1DYXBhY2l0eSBMaW5rIEdpZ2FiaXQgRXRoZXJuZXQgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFwiQ1NRXCIgc3VnZ2VzdHMgQ29tbWFuZCBTZXF1ZW5jZSBvciBDb21tYW5kIFF1ZXVlLCBpbXBseWluZyBhIHN0cnVjdHVyZWQgZmxvdyBvZiBpbnN0cnVjdGlvbnMgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuIFRoZSBmdW5jdGlvbidzIHJvbGUgaXMgY3JpdGljYWwuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgZm9yICphbnkqIGluZGljYXRpb24gb2Ygd29yaywgd2UncmUgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpdmUgXCJkb25lXCIgc3RhdHVzLCBtZWFuaW5nIHRoZSBjb21tYW5kIG9yIHNlcXVlbmNlIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBhIHN0YXR1cyByZWdpc3RlciwgYSBkZWRpY2F0ZWQgZmxhZywgb3IgcGVyaGFwcyBtb25pdG9yaW5nIGZvciBhIHNwZWNpZmljIGludGVycnVwdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IFVudGlsIHRoaXMgZnVuY3Rpb24gcmVwb3J0cyBcImRvbmVcIiwgd2UgbmVlZCB0byBzdGFsbCwgcG9sbCwgb3IgbWFuYWdlIHRoZSB3YWl0LXN0YXRlIGZvciB0aGUgY29tbWFuZCBvciBjb21tYW5kIHNlcXVlbmNlIHRvIGZpbmlzaC4gVGhpcyBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcmVseWluZyBvbiB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgdGhlIGNvbW1hbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTMzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODowMS4zNTg1OTUzNzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTcyMTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2xnZV9jb21tX2NtZF9jc3FfZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zMjM9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNDg6c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0zNjg9c3RhdGljIHZvaWQgaGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgdTE2IG9wY29kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzc1LVxcdGRvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjM3NjpcXHRcXHRpZiAoaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoaHcpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0zNzctXFx0XFx0XFx0KmlzX2NvbXBsZXRlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjE4OjAxLjU1MDMyMzMzN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2NDUzMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gYGhjbGdlX2NvbW1fY21kX2NzcV9kb25lYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21tdW5pY2F0aW9uLCBjb21tYW5kcywgYW5kIGNvbXBsZXRpb24gb2YgYSBjb21tYW5kIHNlcXVlbmNlIChDU1EpIHdpdGhpbiB0aGUgSENMR0UgKGxpa2VseSBhIGhhcmR3YXJlIGNvbnRyb2wgbGF5ZXIgb3Igc2ltaWxhciwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uKS4gVGhpcyBmdW5jdGlvbiwgb3Igc3RydWN0dXJlLCBsaWtlbHkgc2lnbmFscyB0aGUgZW5kIG9mIGEgY29tbWFuZCBmbG93LiBJIGJldCBpdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIHByb2Nlc3MuIFdlJ3JlIHByb2JhYmx5IGhhbmRsaW5nIGNvbXBsZXRpb24gd2l0aGluIHRoZSBIQ0xHRSBsYXllci4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYSB0cmlnZ2VyIG9yIGluZm9ybWF0aW9uIHRvIHRoZSB1cHBlciBsYXllcnMgdG8gc2lnbmFsIHRoZSBjb25jbHVzaW9uIG9mIGFuIG9wZXJhdGlvbi4gSXQgaXMgcHJvYmFibHkgaW1wb3J0YW50IHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgcmVsYXRlcyB0byBjb21wbGV0aW9uIGhhbmRsaW5nIHdoaWNoIGlzIHJlYWxseSBpbXBvcnRhbnQgZm9yIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NzksIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODowNS4yOTY3Nzk2NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ4OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3KVxcbiAzNDk6XFx0e1xcbiAzNTA6XFx0XFx0dTMyIGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbiAzNTE6XFx0XFx0cmV0dXJuIGhlYWQgPT0gKHUzMilody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZTtcXG4gMzUyOlxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0c3RhdGljIHUzMiBoY2xnZV9nZXRfY21kcV90eF90aW1lb3V0KHUxNiBvcGNvZGUsIHUzMiB0eF90aW1lb3V0KVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9jbWRxX3R4X3RpbWVvdXRfbWFwIGNtZHFfdHhfdGltZW91dF9tYXBbXSA9IHtcXG4gMzU3OlxcdFxcdFxcdHtIQ0xHRV9PUENfQ0ZHX1JTVF9UUklHR0VSLCBIQ0xHRV9DT01NX0NNRFFfQ0ZHX1JTVF9USU1FT1VUfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MDUuMjk2ODgzODAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Nzg0MDM1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR2AgTU1JTyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhpcyBgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHYCByZWdpc3Rlci4gVGhlIGRyaXZlciByZWFkcyB0aGlzIHJlZ2lzdGVyIGFuZCBjaGVja3MgaWYgaXRzIHZhbHVlIG1hdGNoZXMgYG5leHRfdG9fdXNlYC4gU2luY2UgdGhlIFBDSSBmdXp6ZXIgcHJvdmlkZXMgcmFuZG9tIE1NSU8gdmFsdWVzLCB0aGVyZSdzIGEgY2hhbmNlIGl0J2xsIGV2ZW50dWFsbHkgaGl0IHRoZSByaWdodCB2YWx1ZSwgb3IgbWF5YmUgZXZlbiBvbiB0aGUgZmlyc3QgdHJ5IGlmIHdlJ3JlIGx1Y2t5LCBidXQgYSB0aW1lb3V0IGlzIGFsc28gcG9zc2libGUuIElmIGEgdGltZW91dCBvY2N1cnMsIHRoZSBjb21tYW5kIGlzIGNvbnNpZGVyZWQgaW5jb21wbGV0ZSBhbmQgcmV0dXJucyBhbiBgLUVCQURFYCBlcnJvci4gSWYgaXQgbWF0Y2hlcywgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmV0dmFsYCBpcyBjYWxsZWQsIGFuZCBpdCBwcm9jZWVkcyB0byByZWFkIHRoZSBkZXNjcmlwdG9yIGZyb20gbWVtb3J5LlxuXG5Ob3csIHRoZSBkZXNjcmlwdG9yIGlzIGluIERNQSBtZW1vcnksIG1lYW5pbmcgdGhlIGhhcmR3YXJlIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhlIHJlc3VsdCB0aGVyZS4gQnV0IHNpbmNlIHdlJ3JlIGZ1enppbmcgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIHRoZSBETUEgbWVtb3J5IHdpbGwganVzdCBjb250YWluIHdoYXRldmVyIHRoZSBkcml2ZXIgd3JvdGUgaW50byBpdC4gQW5kIHRoZSBkcml2ZXIgd3JvdGUgdGhlIGNvbW1hbmQgdGhlcmUuXG5cbkxvb2tpbmcgY2xvc2VyIGF0IGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXR2YWxgLCBpdCByZWFkcyBgZGVzY1tudW0gLSAxXS5yZXR2YWxgLiBJbiB0aGUgbm9ybWFsIG9wZXJhdGluZyBjYXNlLCB0aGUgaGFyZHdhcmUgc2hvdWxkIHNldCB0aGlzLCBidXQgaW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIHByb2JhYmx5IGRpZG4ndCwgb3IgaXQganVzdCB6ZXJvZWQgaXQgb3V0LiBUaHVzLCBgcmV0dmFsYCB3aWxsIGJlIDAuIEFuZCAwIG1lYW5zIGBIQ0xHRV9DT01NX0NNRF9FWEVDX1NVQ0NFU1NgLCBtZWFuaW5nIHRoZSBjb21tYW5kIHdpbGwgKnN1Y2NlZWQqISBTbywgdGhlIGZ1enplciBjb3VsZCBwb3RlbnRpYWxseSBwYXNzIHRoaXMgaWYgaXQgZ3Vlc3NlcyB0aGUgYEhFQURfUkVHYCBvciBpZiBpdCdzIHplcm8uXG5cbkJ1dCB3YWl0LCBgbmV4dF90b191c2VgIGluY3JlbWVudHMgd2l0aCBlYWNoIGNvbW1hbmQhIFRoZSBmdXp6ZXIgcmV0dXJucyByYW5kb20gdmFsdWVzLiBTbyBpdCBoYXMgYSAxLzJeMzIgY2hhbmNlIG9mIG1hdGNoaW5nIGl0IG9uICplYWNoKiByZWFkLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIG5vdy4gSXQgbWlnaHQgbm90IGJlIHRvdGFsbHkgcmFuZG9tLiBJdCBtaWdodCByZXR1cm4gdmFsdWVzIGl0IGhhcyBzZWVuIGJlZm9yZSwgb3IgaXQgbWlnaHQganVzdCByZXR1cm4gMC4gSWYgaXQncyByZXR1cm5pbmcgMCwgaXQgd2lsbCBvbmx5IG1hdGNoIHdoZW4gYG5leHRfdG9fdXNlYCBpcyAwLlxuXG5XYWl0LCBzeXprYWxsZXIgKmNhbiogaW50ZXJjZXB0IGByZWFkbGAgYW5kIGxlYXJuIHdoaWNoIHZhbHVlcyB0byByZXR1cm4sIHNvIHRoZSBmdXp6ZXIgY291bGQgYmUgc21hcnQuIEhvd2V2ZXIsIGR1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMsIHNvIGxldCdzIHNlZSBob3cgbWFueSBjb21tYW5kcyBhcmUgc2VudCBpbiBgaGNsZ2VfaW5pdF9hZV9kZXZgLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgaGNsZ2VfY29tbV9jbWRfcXVlcnlfdmVyc2lvbl9hbmRfY2FwYWJpbGl0eWAsIGBoY2xnZV9jb21tX2Zpcm13YXJlX2NvbXBhdF9jb25maWdgLCBgaGNsZ2VfY2xlYXJfaHdfcmVzb3VyY2VgLCBgaGNsZ2VfZ2V0X2NhcGAsIGBoY2xnZV9xdWVyeV9kZXZfc3BlY3NgLCBgaGNsZ2VfY29uZmlndXJlYCwgYGhjbGdlX2luaXRfbXNpYCwgYGhjbGdlX21pc2NfaXJxX2luaXRgLCBgaGNsZ2VfYWxsb2NfdHFwc2AsIGBoY2xnZV9hbGxvY192cG9ydGAsIGBoY2xnZV9tYXBfdHFwYCwgYW5kIGBoY2xnZV9tYWNfaW5pdGAgcm91dGluZXMsIGFsbCBzZW5kIGNvbW1hbmRzLCBzbyBkb3plbnMgb2YgY29tbWFuZHMgYXJlIHNlbnQuXG5cblNvLCBmb3IgKmVhY2gqIGNvbW1hbmQsIHRoZSBNTUlPIHJlYWQgb2YgYEhFQURfUkVHYCBuZWVkcyB0byBtYXRjaCBgbmV4dF90b191c2VgLiBBbmQgYmVjYXVzZSBgbmV4dF90b191c2VgIGluY3JlbWVudHMgKDEsIDIsIDMsIGV0Yy4pLCB0aGUgZnV6emVyIHdvdWxkIGhhdmUgdG8gcmV0dXJuIDEsIHRoZW4gMiwgdGhlbiAzIGluIHNlcXVlbmNlLiBJICpoaWdobHkqIGRvdWJ0IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgdGhhdCBzbWFydCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBob29rLlxuXG5BY3R1YWxseSwgdGhlIFBDSSBmdXp6ZXIgaW4gc3l6a2FsbGVyIGp1c3QgbWFwcyB0aGUgQkFScyB0byBhIG1lbW9yeSByZWdpb24uIEFuZCB0aGUga2VybmVsIHJlYWRzIGZyb20gdGhhdCBtZW1vcnkgcmVnaW9uLlxuXG5XYWl0LCBzbyByZWFkaW5nIGZyb20gdGhhdCBtZW1vcnkgcmVnaW9uIG1lYW5zIHRoYXQgaXQganVzdCByZXR1cm5zIHdoYXRldmVyIHdhcyB3cml0dGVuIHRoZXJlLCBvciAwIGlmIG5vdGhpbmcgd2FzIHdyaXR0ZW4uIERvZXMgdGhlIGRyaXZlciBldmVuIHdyaXRlIHRvIGBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdgPyBOb3BlLCB0aGUgZHJpdmVyIHdyaXRlcyB0byBgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHYC4gU28gYEhFQURfUkVHYCB3aWxsICphbHdheXMqIHJlYWQgYXMgMCwgb3Igd2hhdGV2ZXIgdGhlIGZ1enplciBpbml0aWFsaXplZCBpdCB0by5cblxuSWYgYEhFQURfUkVHYCBpcyBhbHdheXMgMCwgdGhlbiBgaGNsZ2VfY29tbV9jbWRfY3NxX2RvbmVgIHdpbGwgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBuZXh0X3RvX3VzZWAgd3JhcHMgYXJvdW5kIHRvIDAuIFRoaXMgd2lsbCB0YWtlIGBkZXNjX251bWAgY29tbWFuZHMuIEJ1dCBsZXQncyBsb29rIGNsb3Nlci4gYGhjbGdlX2NvbW1fY21kX3NlbmRgIGhhcyB0aGlzIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChudW0gXHUwMDNlIGhjbGdlX2NvbW1fcmluZ19zcGFjZShcdTAwMjZody1cdTAwM2VjbXEuY3NxKSkge1xuXHRcdGNzcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gaGNsZ2VfY29tbV9yZWFkX2RldlxuXG4iLCJJbnB1dFRva2VucyI6NTMxOTIsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MjEuMDgwOTI1MDE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM1NzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9Nz1zdGF0aWMgdm9pZCBoY2xnZV9jb21tX2NtZF9jb25maWdfcmVncyhzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIxLVxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCByZWdfdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjIyOlxcdFxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjMtXFx0XFx0aGNsZ2VfY29tbV93cml0ZV9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9UQUlMX1JFRywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTMyMz1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9jbGVhbihzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTMyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjMyOTpcXHRoZWFkID0gaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTMzMC1cXHRybWIoKTsgLyogTWFrZSBzdXJlIGhlYWQgaXMgcmVhZHkgYmVmb3JlIHRvdWNoIGFueSBkYXRhICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTM0OD1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NzcV9kb25lKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTM0OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzozNTA6XFx0dTMyIGhlYWQgPSBoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMzUxLVxcdHJldHVybiBoZWFkID09ICh1MzIpaHctXFx1MDAzZWNtcS5jc3EubmV4dF90b191c2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQ3Mz1pbnQgaGNsZ2VfY29tbV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00OTUtXFx0XFx0Y3NxLVxcdTAwM2VuZXh0X3RvX2NsZWFuID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ5NjpcXHRcXHRcXHRoY2xnZV9jb21tX3JlYWRfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfSEVBRF9SRUcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDk3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9NTI0PXN0YXRpYyB2b2lkIGhjbGdlX2NvbW1fY21kX3VuaW5pdF9yZWdzKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTI4LVxcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfREVQVEhfUkVHLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyOTpcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUzMC1cXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgtMzctI2RlZmluZSBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUdcXHRcXHQweDI3MDEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaDozODojZGVmaW5lIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFR1xcdFxcdDB4MjcwMTRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oLTM5LSNkZWZpbmUgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHXFx0MHgyNzAxOFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYz05PXN0YXRpYyBjb25zdCB1MzIgY21kcV9yZWdfYWRkcl9saXN0W10gPSB7SENMR0VfQ09NTV9OSUNfQ1NRX0JBU0VBRERSX0xfUkVHLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3JlZ3MuYy0xMi1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9yZWdzLmM6MTM6XFx0XFx0XFx0XFx0XFx0IEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfcmVncy5jLTE0LVxcdFxcdFxcdFxcdFxcdCBIQ0xHRV9DT01NX05JQ19DUlFfQkFTRUFERFJfTF9SRUcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9yZWdzLmM9OD1zdGF0aWMgY29uc3QgdTMyIGNtZHFfcmVnX2FkZHJfbGlzdFtdID0ge0hDTEdFX0NPTU1fTklDX0NTUV9CQVNFQUREUl9MX1JFRyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYy0xMS1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYzoxMjpcXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX3JlZ3MuYy0xMy1cXHRcXHRcXHRcXHRcXHQgSENMR0VfQ09NTV9OSUNfQ1JRX0JBU0VBRERSX0xfUkVHLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODoyMS4xNTUyOTAzOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczNzIxNDY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBITlMzIERyaXZlciBTUklPViBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGUgZnV6emVyIHRocm93cyByYW5kb20gTU1JTyBhdCBgaGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKWAsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHdlJ2xsIGdldCBhIG1lYW5pbmdmdWwgcmVzdWx0IHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGxvZ2ljLiBUaGUgZnV6emVyIGhhcyBhIG1pbmlzY3VsZSBjaGFuY2Ugb2YgZ2V0dGluZyB0aGUgdmFsdWUgYDFgIG91dCBvZiB0aGUgZ2F0ZSB3aXRoIGBuZXh0X3RvX3VzZWAgc2V0IHRvIGAxYC4gQnV0IHRoZW4sIHdpdGhpbiB0aGUgbG9vcCwgdGhlIGNvZGUgY2FsbHMgdGhlIHNhbWUgcmVnaXN0ZXIgKmFnYWluKiB0aGlydHkgdGhvdXNhbmQgdGltZXMgdmlhIGBoY2xnZV9jb21tX2NtZF9jc3FfZG9uZShodylgLiBUaGlzIGdpdmVzIHVzIGEgc2xpZ2h0bHkgYmV0dGVyIGNoYW5jZSwgMzAwMDAvNCBiaWxsaW9uIG9yIC4wMDA3NSUsIGJ1dCBzdGlsbCBlZmZlY3RpdmVseSB6ZXJvLCBlc3BlY2lhbGx5IGFzIHRoZSBuZXh0IG9wZXJhdGlvbiByZXF1aXJlcyBhIHZhbHVlIG9mIGAyYC4gIEdpdmVuIHRoZSBzaGVlciBudW1iZXIgb2Ygc3Vic2VxdWVudCBjb21tYW5kcywgcGFzc2luZyBhbGwgdGhlIGNoZWNrcyBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlLiBUaGlzIG1lYW5zIHRoZSBkcml2ZXIgcHJvYmUsIGFuZCBjb25zZXF1ZW50bHksIHRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCB3aWxsIGZhaWwuXG5cblRoZSBjcml0aWNhbCBpc3N1ZSBpcyB0aGUgYGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIGNhbGxiYWNrLCBhbmQgd2hpbGUgaXQgKmNvdWxkKiBiZSBpbnZva2VkIHZpYSBzeXNmcywgdGhpcyBwYXRoIGlzIGJsb2NrZWQgaWYgdGhlIHByb2JlIGZhaWxzLiBUaGUgZGV2aWNlIGlzbid0IHByb3Blcmx5IGJvdW5kIHRvIHRoZSBkcml2ZXIgaWYgYHByb2JlYCBmYWlscywgc28gd3JpdGluZyB0byBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3NyaW92X251bXZmc2Agd2lsbCBiZSBhIGRlYWQgZW5kLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiB3ZSB3ZXJlIHNvbWVob3cgYWJsZSB0byB0cmlnZ2VyIGBzcmlvdl9jb25maWd1cmVgLCB0aGUgY29kZSB3b3VsZCBjcmFzaCBiZWNhdXNlIGBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTClgIGlzIGNhbGxlZCBkdXJpbmcgcHJvYmUgZmFpbHVyZSBhbmQgYHNyaW92X2NvbmZpZ3VyZWAgdGhlbiBkZXJlZmVyZW5jZXMgYSBOVUxMIHBvaW50ZXIuIEhvd2V2ZXIsIHRoZSBmaXJzdCBzY2VuYXJpbyBpcyB0aGUgcmVhbGl0eTsgaXQgaXNuJ3QgcmVhY2hlZCBiZWNhdXNlIHRoZSBwcm9iZSBmYWlscywgc28gdGhlIFBDSSBjb3JlIHdvdWxkIG5vdCBsZXQgeW91IHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlLlxuXG5Fc3NlbnRpYWxseSwgKmJlY2F1c2UqIHRoZSBwcm9iZSBmYWlscywgdGhlIGNyaXRpY2FsIGBzcmlvdl9jb25maWd1cmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB1bnJlYWNoYWJsZS5cblxuTm93LCB0byBjb25maXJtIHRoaXMgY29uY2x1c2lvbiwgSSdkIGNoZWNrIGZvciBzeXprYWxsZXIgc3VwcG9ydCBmb3IgSE5TMywgYnV0IEkgbGFjayBhY2Nlc3MgdG8gdGhlIHRvb2xzLiBJJ20gb3BlcmF0aW5nIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHByYWN0aWNlcywgd2hpY2ggZGljdGF0ZSB0aGF0IHBoeXNpY2FsIG5ldHdvcmsgZHJpdmVycyB3aXRob3V0IGVtdWxhdG9ycyBhcmVuJ3QgcHJhY3RpY2FsbHkgZnV6emFibGUgZm9yIGZ1bmN0aW9uYWwgbG9naWMuIEJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMsIEkgYW0gY29uZmlkZW50IHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gY2hlY2tpbmcgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGEgdmlydHVhbCBkZXZpY2UuIFwiSE5TMzogSGlzaWxpY29uIEV0aGVybmV0IFBGL1ZGIENvbW1vbiBMaWJyYXJ5XCIgc291bmRzIGxpa2UgYSBQQ0llIE5JQywgbm90IHZpcnRpbyBvciB2RFBBLiBObywgdGhpcyBhcHBlYXJzIHRvIGJlIGEgcGh5c2ljYWwgTklDLiBJIGFtIGNoZWNraW5nIGZvciBhbnkgbW9ja3Mgb3IgYWx0ZXJuYXRpdmUgdmlydHVhbCBkZXZpY2UgYmFja2VuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODozNC44OTI1MDc1MzVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODg4MTE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MzQuOTU4NDEwMDY4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTYyNzI0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFwiZHVtbXlcIioqXG5cblJpZ2h0LCBzbyB0aGUgd29yZCBcImR1bW15XCIganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJbW1lZGlhdGVseSwgSSdtIGFscmVhZHkgc2lmdGluZyB0aHJvdWdoIGl0cyBwb3RlbnRpYWwgbWVhbmluZ3MgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgdmFyaWFibGU/IEEgdGVzdCBjYXNlPyBQZXJoYXBzIGEgd2F5IHRvIHNpbXBsaWZ5IGFuIGFyZ3VtZW50IG9yIG1vZGVsIGJ5IGludGVudGlvbmFsbHkgaWdub3JpbmcgY29tcGxleGl0aWVzPyBPciBpcyBpdCBiZWluZyB1c2VkIGRpc3BhcmFnaW5nbHksIGFzIGluLCBhIFwiZHVtbXkgdmFyaWFibGU/XCIgVGhlIGFtYmlndWl0eSBoZXJlIHJlcXVpcmVzIGEgYml0IG1vcmUgaW5mb3JtYXRpb24uIFdoYXTigJlzIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBpbiBxdWVzdGlvbj8gSG93IGNvbXBsZXggaXMgdGhlIHN5c3RlbSBiZWluZyBkZXNjcmliZWQ/IFdoYXQgaXMgdGhpcyBcImR1bW15XCIgc3VwcG9zZWQgdG8gKmRvKj8gV2l0aG91dCBjb250ZXh0LCBcImR1bW15XCIgY291bGQgcmVwcmVzZW50IGEgYnJvYWQgc3BlY3RydW0gb2YgdGhpbmdzLiBJdCdzIGEgbG9hZGVkIHRlcm0sIGluaGVyZW50bHkgY2Fycnlpbmcgc29tZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvciBzaW1wbGlmaWNhdGlvbiwgYnV0IHRoZSBleGFjdCBuYXR1cmUgb2YgdGhhdCBhYnN0cmFjdGlvbiBpcyB3aGF0J3MgY3J1Y2lhbC4gSSdsbCBuZWVkIG1vcmUgZGV0YWlsIHRvIGV2YWx1YXRlIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGFwcHJvcHJpYXRlbmVzcy4gVGhpcyB0aG91Z2h0IG5lZWRzIHVucGFja2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6MzguNTE0Njg1NjkyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIzMTMxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVtbXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODozOC41NzQ5MjQ2ODZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTgyNTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyB0aGUgXCJlbXVsXCIgQW5nbGUqKlxuXG5IbW0sIFwiZW11bFwiLi4uIFRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGluY29tcGxldGUgd2l0aG91dCBjb25zaWRlcmluZyB0aGUgXCJlbXVsXCIgYXNwZWN0LiBOb3csIFwiZW11bFwiIGNvdWxkIHJlZmVyIHRvIGEgZmV3IGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJZiB3ZSdyZSB0YWxraW5nIGFib3V0IGVtdWxhdGlvbiwgdGhlbiBwZXJoYXBzIHdlJ3JlIGxvb2tpbmcgYXQgYSBzb2Z0d2FyZSBzb2x1dGlvbiB0byB0aGUgaXNzdWUuIE9yLCBwZXJoYXBzIGl0IHBvaW50cyB0byBzb21ldGhpbmcgcmVsYXRlZCB0byBhbiBlbXVsYXRvciBpbiBhIHNwZWNpZmljIGZyYW1ld29yay4gV2UgbmVlZCB0byBkZWZpbmUgZXhhY3RseSB3aGF0IGNvbnRleHQgaXMgcmVsZXZhbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFuZCB3aGV0aGVyIGl0J3MgbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBicm9hZGVyIGlzc3VlcyB0aGF0IGFyZSBpbiBwbGF5LiBJIHNob3VsZCBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlciB3aGF0IGtpbmQgb2YgXCJlbXVsXCIgaXMgdGhlIHN1YmplY3Qgb2YgY29udGVtcGxhdGlvbiwgYW5kIGhvdyBpdCBpbmZvcm1zIGFueSBwcmV2aW91c2x5IGNvbnNpZGVyZWQgc29sdXRpb25zLiBVbHRpbWF0ZWx5LCB0aGF0J3MgdGhlIGNydWNpYWwgcG9pbnQgLSBob3cgZG9lcyBpdCBmaXQ/IERvZXMgaXQgcmVwcmVzZW50IGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoLCBhIHN1YnNldCBvZiBvdGhlciBjb25jZXJucywgb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50PyBJdOKAmXMgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIHJlZ2FyZGxlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODo0Mi4xMjA3NTQzMzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDkzMjMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MTg6NDIuMTg3ODU3ODY1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Njg5MjgwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaXQncyBjbGVhciBpdCdzIGRlYWxpbmcgd2l0aCBhIHZlcnkgc3BlY2lmaWMsIGhhcmR3YXJlLWxldmVsIGFzcGVjdDogdGhlIEhOUzMgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgVkYgcmVwcmVzZW50b3JzLCBuZXRkZXZzIGNyZWF0ZWQgb24gdGhlIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgdG8gcmVwcmVzZW50IFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLCBwYXJ0aWN1bGFybHkgZm9yIHN3aXRjaGRldiBmdW5jdGlvbmFsaXR5LCBsaWtlIFRDIGZsb3dlciBvZmZsb2FkLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlLCBjb21wYXJhYmxlIHRvIHdoYXQgeW91IHNlZSB3aXRoIE1lbGxhbm94IENvbm5lY3RYIG9yIEludGVsIElDRSBOSUNzLlxuXG5UaGUgY3J1Y2lhbCBpc3N1ZSBpcyBpdHMgaW5oZXJlbnQgaGFyZHdhcmUgZGVwZW5kZW5jZS4gVGhpcyBmdW5jdGlvbmFsaXR5IHJlbGllcyBoZWF2aWx5IG9uIHRoZSBQRiBiZWluZyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29tbXVuaWNhdGluZyBmbGF3bGVzc2x5IHdpdGggaXRzIGZpcm13YXJlLiBUaGlzIGxldmVsIG9mIGludGVyYWN0aW9uLCBiZWNhdXNlIGl0J3Mgc28gbG93LWxldmVsIGFuZCBoYXJkd2FyZS1zcGVjaWZpYywgcmVuZGVycyB0aGUgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBnZW5lcmljIFZNIGVudmlyb25tZW50LCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBUaGVyZSBpcyBubyB3YXkgSSBjb3VsZCBmdXp6IHRoaXMgY29kZSBpbiBRRU1VLlxuXG5UaGVyZWZvcmUsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIG1hdGNoaW5nIHRoZSBwcm9tcHQncyBjcml0ZXJpYSwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIGxhc3QgYnVsbGV0IHBvaW50IG9mIHRoZSBcIm5vdCB3b3J0aCBmdXp6aW5nXCIgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgYmVjYXVzZSBpdCByZWxpZXMgb24gdGhlIGNvbXBsZXRlIHN0YXRlIG9mIGEgcGh5c2ljYWwgZGV2aWNlIHdpdGggZmlybXdhcmUgaW50ZXJhY3Rpb24uXG5cbkkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlIHJlYXNvbnMgb3V0bGluZWQsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjE0LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMToxODo0OS43NTY3ODkwODlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFZGIHJlcHJlc2VudG9yIHN1cHBvcnQgdG8gdGhlIEhpc2lsaWNvbiBITlMzIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmRzIHRoYXQgcmVxdWlyZXMgY29tcGxleCBmaXJtd2FyZSBpbnRlcmFjdGlvbnMgKGUuZy4sIHdhaXRpbmcgZm9yIGNvbW1hbmQgcXVldWUgY29tcGxldGlvbnMgdmlhIE1NSU8pIGR1cmluZyBkZXZpY2UgcHJvYmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgVkYgcmVwcmVzZW50b3Igc3VwcG9ydCB0byB0aGUgSGlzaWxpY29uIEhOUzMgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIG5ldHdvcmsgY2FyZHMgdGhhdCByZXF1aXJlcyBjb21wbGV4IGZpcm13YXJlIGludGVyYWN0aW9ucyAoZS5nLiwgd2FpdGluZyBmb3IgY29tbWFuZCBxdWV1ZSBjb21wbGV0aW9ucyB2aWEgTU1JTykgZHVyaW5nIGRldmljZSBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf7w6[1] Phase: Running StartedAt: 2026-07-01 21:19:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf7w6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 21:19:16 +0000 UTC FinishedAt: 2026-07-01 21:19:23 +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,}