Name: series-workflow85cnq Phase: Failed StartedAt: 2026-08-04 12:01:05 +0000 UTC FinishedAt: 2026-08-04 12:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85cnq[0] Phase: Succeeded StartedAt: 2026-08-04 12:01:05 +0000 UTC FinishedAt: 2026-08-04 12:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85cnq[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 12:01:05 +0000 UTC FinishedAt: 2026-08-04 12:23:06 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGNvZGUgKGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYykuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0gQ1BVIGZlYXR1cmUgYW5kIHRoZSBTRUFNQ0FMTCBpbnN0cnVjdGlvbiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbmluZGV4IDQxMTUwZDU0NjU4OWMuLmE4NmJlOWU1ZWM3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuQEAgLTEsMTAgJiM0MzsxLDE1IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbi0vKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2lmbmRlZiBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2RlZmluZSBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFREWCBtb2R1bGUgXCYjMzQ7R2xvYmFsIFNjb3BlIE1ldGFkYXRhXCYjMzQ7IGFzIGRvY3VtZW50ZWQgaW4gdGhlIEludGVsIFREWFxuJiM0MzsgKiBNb2R1bGUgQUJJIHNwZWMuIEVhY2ggc3ViLXN0cnVjdHVyZSBiZWxvdyBjb3JyZXNwb25kcyB0byBvbmUgVERYXG4mIzQzOyAqIG1ldGFkYXRhIFwmIzM0O0NsYXNzXCYjMzQ7OyBpdHMgbWVtYmVycyBhcmUgcG9wdWxhdGVkIHZpYSBUREguU1lTLlJEIFNFQU1DQUxMcy5cbiYjNDM7ICovXG4mIzQzO1xuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiB7XG4gXHR1MTYgbWlub3JfdmVyc2lvbjtcbiBcdHUxNiBtYWpvcl92ZXJzaW9uO1xuQEAgLTUyLDQgJiM0Mzs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xuIFx0c3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7XG4gfTtcbiBcbi0jZW5kaWZcbiYjNDM7I2VuZGlmIC8qIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uNTkwOTljYzE1ZjdhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzQ3LDcgJiM0MzszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2luY2x1ZGUgXCYjMzQ7dGR4X2dsb2JhbF9tZXRhZGF0YS5jXCYjMzQ7XG4mIzQzOy8qXG4mIzQzOyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0XG4mIzQzOyAqIGhvbGRzIGl0cyB2YWx1ZS4gVXNlIFREX1NZU0lORk9fTUFQKCkgdG8gcG9wdWxhdGUgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHtcbiYjNDM7XHR1NjQgZmllbGRfaWQ7XG4mIzQzO1x0dTE2IG9mZnNldDtcbiYjNDM7XHR1OCAgc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzaXplIGVuY29kZWQgaW4gdGhlIGZpZWxkIElEIGFuZCB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gQ1xuJiM0MzsgKiBtZW1iZXIgbXVzdCBhZ3JlZTsgQlVJTERfQlVHX09OX1pFUk8oKSBlbmZvcmNlcyB0aGlzIGF0IGNvbXBpbGUgdGltZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCBfc3RydWN0LCBfbWVtYmVyKVx0XHRcdFx0XFxcbiYjNDM7XHR7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5vZmZzZXQgICA9IG9mZnNldG9mKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSxcdFx0XHRcXFxuJiM0MztcdFx0LnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAmIzQzO1x0XHRcXFxuJiM0MztcdFx0XHQgICAgQlVJTERfQlVHX09OX1pFUk8oXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0c2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAhPVx0XFxcbiYjNDM7XHRcdFx0XHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFx0XFxcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIGEgdGFibGUgb2YgVERYIGdsb2JhbCBtZXRhZGF0YSBmaWVsZHMsIHJlYWQgZWFjaCB2aWEgVERILlNZUy5SRCxcbiYjNDM7ICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgbWF0Y2hpbmcgQyBtZW1iZXIgb2YgKkBiYXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV90YWJsZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgIGludCBucl9maWVsZHMsIHZvaWQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHU2NCB2YWw7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2ZpZWxkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmID0gXHUwMDI2ZmllbGRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXHUwMDNlZmllbGRfaWQsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoZi1cdTAwM2VzaXplKSB7XG4mIzQzO1x0XHRjYXNlIDE6ICoodTggICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbiYjNDM7XHRcdGNhc2UgMjogKih1MTYgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkgPSB2YWw7IGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA0OiAqKHUzMiAqKShiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0KSA9IHZhbDsgYnJlYWs7XG4mIzQzO1x0XHRjYXNlIDg6ICoodTY0ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3ZlcnNpb24sIF9tZW1iZXIpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdmVyc2lvbl9maWVsZHNbXSA9IHtcbiYjNDM7XHRNQVBfVkVSU0lPTihNSU5PUl9WRVJTSU9OLFx0bWlub3JfdmVyc2lvbiksXG4mIzQzO1x0TUFQX1ZFUlNJT04oTUFKT1JfVkVSU0lPTixcdG1ham9yX3ZlcnNpb24pLFxuJiM0MztcdE1BUF9WRVJTSU9OKFVQREFURV9WRVJTSU9OLFx0dXBkYXRlX3ZlcnNpb24pLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodmVyc2lvbl9maWVsZHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodmVyc2lvbl9maWVsZHMpLFxuJiM0MztcdFx0XHRcdCAgICAgICBzeXNpbmZvX3ZlcnNpb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BUF9GRUFUVVJFUyhfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX2ZlYXR1cmVzLCBfbWVtYmVyKVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGZlYXR1cmVzX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuJiM0MztcdE1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLFx0dGR4X2ZlYXR1cmVzMCksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoZmVhdHVyZXNfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN5c2luZm9fZmVhdHVyZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BUF9URE1SKF9maWVsZF9pZCwgX21lbWJlcilcdFxcXG4mIzQzO1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZG1yX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuJiM0MztcdE1BUF9URE1SKE1BWF9URE1SUyxcdFx0bWF4X3RkbXJzKSxcbiYjNDM7XHRNQVBfVERNUihNQVhfUkVTRVJWRURfUEVSX1RETVIsXHRtYXhfcmVzZXJ2ZWRfcGVyX3RkbXIpLFxuJiM0MztcdE1BUF9URE1SKFBBTVRfNEtfRU5UUllfU0laRSxcdHBhbXRfNGtfZW50cnlfc2l6ZSksXG4mIzQzO1x0TUFQX1RETVIoUEFNVF8yTV9FTlRSWV9TSVpFLFx0cGFtdF8ybV9lbnRyeV9zaXplKSxcbiYjNDM7XHRNQVBfVERNUihQQU1UXzFHX0VOVFJZX1NJWkUsXHRwYW10XzFnX2VudHJ5X3NpemUpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKHRkbXJfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3lzaW5mb190ZG1yKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVERfQ1RSTChfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2N0cmwsIF9tZW1iZXIpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY3RybF9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbiYjNDM7XHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFx0dGRyX2Jhc2Vfc2l6ZSksXG4mIzQzO1x0TUFQX1REX0NUUkwoVERDU19CQVNFX1NJWkUsXHR0ZGNzX2Jhc2Vfc2l6ZSksXG4mIzQzO1x0TUFQX1REX0NUUkwoVERWUFNfQkFTRV9TSVpFLFx0dGR2cHNfYmFzZV9zaXplKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jdHJsX2ZpZWxkcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRSh0ZF9jdHJsX2ZpZWxkcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFQX0hBTkRPRkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbiYjNDM7XHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XG4mIzQzO1x0TUFQX0hBTkRPRkYoTU9EVUxFX0hWLFx0bW9kdWxlX2h2KSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKGhhbmRvZmZfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3lzaW5mb19oYW5kb2ZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVERfQ09ORihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcJiMzNDtURCBDb25maWd1cmF0aW9uXCYjMzQ7IGNsYXNzLiAgbnVtX2NwdWlkX2NvbmZpZ1xuJiM0MzsgKiBtdXN0IGJlIHByZXNlbnQgaGVyZSAoYW5kIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIENQVUlEIGFycmF5c1xuJiM0MzsgKiBiZWxvdykgYmVjYXVzZSBpdCBzaXplcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4mIzQzO1x0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsXHRhdHRyaWJ1dGVzX2ZpeGVkMCksXG4mIzQzO1x0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDEsXHRhdHRyaWJ1dGVzX2ZpeGVkMSksXG4mIzQzO1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsXHR4ZmFtX2ZpeGVkMCksXG4mIzQzO1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsXHR4ZmFtX2ZpeGVkMSksXG4mIzQzO1x0TUFQX1REX0NPTkYoTlVNX0NQVUlEX0NPTkZJRyxcdG51bV9jcHVpZF9jb25maWcpLFxuJiM0MztcdE1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsXHRtYXhfdmNwdXNfcGVyX3RkKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCBpLCBqO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jb25mX2ZpZWxkcyxcbiYjNDM7XHRcdFx0XHQgICAgICBBUlJBWV9TSVpFKHRkX2NvbmZfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICB0ZF9jb25mKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cyBhcmUgc2l6ZWQgYXQgcnVudGltZSBieVxuJiM0MztcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJiMzOTt0IGJlIGV4cHJlc3NlZCBpbiBhIHN0YXRpY1xuJiM0MztcdCAqIFREX1NZU0lORk9fTUFQIHRhYmxlLiAgVGhlaXIgZmllbGQgSURzIGFyZSBjb250aWd1b3VzIGZyb21cbiYjNDM7XHQgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSB8fFxuJiM0MztcdCAgICB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICYjNDM7IGksXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyAmIzQzOyBpICogMiAmIzQzOyBqO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7TW9kdWxlIHZlcnNpb246IFwmIzM0OyBURFhfVkVSU0lPTl9GTVQgXCYjMzQ7XFxuXCYjMzQ7LFxuJiM0MztcdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1ham9yX3ZlcnNpb24sXG4mIzQzO1x0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWlub3JfdmVyc2lvbixcbiYjNDM7XHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi51cGRhdGVfdmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFx1MDAyNnN5c2luZm8tXHUwMDNlZmVhdHVyZXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNTgsNiAmIzQzOzU4LDcyIEBAXG4gICovXG4gI2RlZmluZSBURFhfVkVSU0lPTl9TSElGVFx0XHQxNlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHbG9iYWwgU2NvcGUgTWV0YWRhdGEgZmllbGQgSURzLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgXCYjMzQ7R2xvYmFsLVNjb3BlIChURFggTW9kdWxlKSBNZXRhZGF0YVwmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQklcbiYjNDM7ICogc3BlYy5cbiYjNDM7ICpcbiYjNDM7ICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhIFwmIzM0O0NsYXNzXCYjMzQ7XG4mIzQzOyAqICh3aGljaCBMaW51eCBtaXJyb3JzIGluICYjMzk7c3RydWN0IHRkeF9zeXNfaW5mbyYjMzk7IHN1Yi1zdHJ1Y3R1cmVzKSxcbiYjNDM7ICogdGhlIGVsZW1lbnQgc2l6ZSwgYW5kIGEgcGVyLWNsYXNzIGZpZWxkIGluZGV4LiBFYWNoIElEIGJlbG93XG4mIzQzOyAqIGlzIHBhaXJlZCB3aXRoIHRoZSBDIG1lbWJlciB0aGF0IGhvbGRzIGl0cyB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggTW9kdWxlIFZlcnNpb25cJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NSU5PUl9WRVJTSU9OXHRcdDB4MDgwMDAwMDEwMDAwMDAwM1VMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BSk9SX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVVBEQVRFX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA1VUxMXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggRmVhdHVyZXNcJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwXHRcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxuJiM0MztcbiYjNDM7LyogQ2xhc3MgXCYjMzQ7VERNUiBJbmZvXCYjMzQ7ICovXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUFYX1RETVJTXHRcdFx0MHg5MTAwMDAwMTAwMDAwMDA4VUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUFYX1JFU0VSVkVEX1BFUl9URE1SXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzRLX0VOVFJZX1NJWkVcdFx0MHg5MTAwMDAwMTAwMDAwMDEwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfUEFNVF8yTV9FTlRSWV9TSVpFXHRcdDB4OTEwMDAwMDEwMDAwMDAxMVVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMUdfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTJVTExcbiYjNDM7XG4mIzQzOy8qIENsYXNzIFwmIzM0O1REIENvbnRyb2wgU3RydWN0dXJlc1wmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REUl9CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVERDU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVERWUFNfQkFTRV9TSVpFXHRcdDB4OTgwMDAwMDEwMDAwMDIwMFVMTFxuJiM0MztcbiYjNDM7LyogQ2xhc3MgXCYjMzQ7VEQgQ29uZmlndXJhdGlvblwmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwXHRcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxXHRcdDB4MTkwMDAwMDMwMDAwMDAwMVVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1hGQU1fRklYRUQwXHRcdFx0MHgxOTAwMDAwMzAwMDAwMDAyVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDFcdFx0XHQweDE5MDAwMDAzMDAwMDAwMDNVTExcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9OVU1fQ1BVSURfQ09ORklHXHRcdDB4OTkwMDAwMDEwMDAwMDAwNFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9WQ1BVU19QRVJfVERcdFx0MHg5OTAwMDAwMTAwMDAwMDA4VUxMXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggTW9kdWxlIEhhbmRvZmZcJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NT0RVTEVfSFZcdFx0XHQweDg5MDAwMDAxMDAwMDAwMDBVTExcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJhc2UgSURzIGZvciB0aGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cy4gIFRoZSBmaWVsZCBJRCBvZiBsZWFmXG4mIzQzOyAqIGluZGV4IEBpIGlzIEJBU0UgJiM0MzsgaTsgZm9yIHRoZSB2YWx1ZXMgYXJyYXksIHN1Yi1lbnRyeSBAaiBvZiBpbmRleFxuJiM0MzsgKiBAaSBpcyBCQVNFICYjNDM7IGkqMiAmIzQzOyBqLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTXHRcdDB4OTkwMDAwMDMwMDAwMDQwMFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19WQUxVRVNcdFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBcJiMzNDtNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcilcbiYjNDM7ICogRGVmaW5pdGlvblwmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQkkgc3BlYy5cbiYjNDM7ICpcbiYjNDM7ICogIC0gQml0IDMzOjMyOiBFTEVNRU5UX1NJWkVfQ09ERSAtLSBsb2cyIG9mIGEgc2luZ2xlIG1ldGFkYXRhXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCYjMzk7cyBzaXplIGluIGJ5dGVzXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0VMRV9TSVpFX0NPREUoZmllbGRfaWQpXHRcXFxuJiM0MztcdCgoKGZpZWxkX2lkKSBcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXHUwMDNlXHUwMDNlIDMyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRShmaWVsZF9pZClcdFx0XFxcbiYjNDM7XHQoMSBcdTAwM2NcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXG4mIzQzO1xuIC8qIFREWCBwYWdlIHR5cGVzICovXG4gI2RlZmluZVx0UFRfTkRBXHRcdDB4MFxuICNkZWZpbmVcdFBUX1JTVkRcdFx0MHgxXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMTMzICYjNDM7MCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4tICpcbi0gKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuLSAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbi0gKiBJbmNsdWRlIHRoaXMgZmlsZSB0byBvdGhlciBDIGZpbGUgaW5zdGVhZC5cbi0gKi9cbi1cbi1zdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gKnN5c2luZm9fdmVyc2lvbilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3ZlcnNpb24tXHUwMDNlbWlub3JfdmVyc2lvbiA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdmVyc2lvbi1cdTAwM2VtYWpvcl92ZXJzaW9uID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb192ZXJzaW9uLVx1MDAzZXVwZGF0ZV92ZXJzaW9uID0gdmFsO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0dTY0IHZhbDtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fZmVhdHVyZXMtXHUwMDNldGR4X2ZlYXR1cmVzMCA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlbWF4X3RkbXJzID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZW1heF9yZXNlcnZlZF9wZXJfdGRtciA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2N0cmwtXHUwMDNldGRyX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZGNzX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZHZwc19iYXNlX3NpemUgPSB2YWw7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICpzeXNpbmZvX3RkX2NvbmYpXG4te1xuLVx0aW50IHJldCA9IDA7XG4tXHR1NjQgdmFsO1xuLVx0aW50IGksIGo7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDIsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY29uZi1cdTAwM2VtYXhfdmNwdXNfcGVyX3RkID0gdmFsO1xuLVx0aWYgKHN5c2luZm9fdGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHN5c2luZm9fdGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspXG4tXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDQwMCAmIzQzOyBpLCBcdTAwMjZ2YWwpKSlcbi1cdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcbi1cdGlmIChzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcdTAwM2UgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzaW5mb190ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KVxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA1MDAgJiM0MzsgaSAqIDIgJiM0MzsgaiwgXHUwMDI2dmFsKSkpXG4tXHRcdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuLXtcbi1cdGludCByZXQ7XG4tXHR1NjQgdmFsO1xuLVxuLVx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg4OTAwMDAwMTAwMDAwMDAwLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN5c2luZm9faGFuZG9mZi1cdTAwM2Vtb2R1bGVfaHYgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcdTAwMjZzeXNpbmZvLVx1MDAzZXZlcnNpb24pO1xuLVxuLVx0cHJfaW5mbyhcJiMzNDtNb2R1bGUgdmVyc2lvbjogXCYjMzQ7IFREWF9WRVJTSU9OX0ZNVCBcJiMzNDtcXG5cJiMzNDssXG4tXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi5tYWpvcl92ZXJzaW9uLFxuLVx0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWlub3JfdmVyc2lvbixcbi1cdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTtcbi1cbi1cdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFx1MDAyNnN5c2luZm8tXHUwMDNlZmVhdHVyZXMpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRtcihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2NvbmYpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGNvZGUgKGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYykuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0gQ1BVIGZlYXR1cmUgYW5kIHRoZSBTRUFNQ0FMTCBpbnN0cnVjdGlvbiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAppbmRleCA0MTE1MGQ1NDY1ODljLi5hODZiZTllNWVjNzcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCkBAIC0xLDEwICYjNDM7MSwxNSBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi8KLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKJiM0MzsjaWZuZGVmIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSAomIzQzOyNkZWZpbmUgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9ICiAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBURFggbW9kdWxlICYjMzQ7R2xvYmFsIFNjb3BlIE1ldGFkYXRhJiMzNDsgYXMgZG9jdW1lbnRlZCBpbiB0aGUgSW50ZWwgVERYCiYjNDM7ICogTW9kdWxlIEFCSSBzcGVjLiBFYWNoIHN1Yi1zdHJ1Y3R1cmUgYmVsb3cgY29ycmVzcG9uZHMgdG8gb25lIFREWAomIzQzOyAqIG1ldGFkYXRhICYjMzQ7Q2xhc3MmIzM0OzsgaXRzIG1lbWJlcnMgYXJlIHBvcHVsYXRlZCB2aWEgVERILlNZUy5SRCBTRUFNQ0FMTHMuCiYjNDM7ICovCiYjNDM7CiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gewogCXUxNiBtaW5vcl92ZXJzaW9uOwogCXUxNiBtYWpvcl92ZXJzaW9uOwpAQCAtNTIsNCAmIzQzOzU3LDQgQEAgc3RydWN0IHRkeF9zeXNfaW5mbyB7CiAJc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7CiB9OwogCi0jZW5kaWYKJiM0MzsjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKaW5kZXggNDJkZjhlYTQ2NGM0Ny4uNTkwOTljYzE1ZjdhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzQ3LDcgJiM0MzszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpCiAJcmV0dXJuIDA7CiB9CiAKLSNpbmNsdWRlICYjMzQ7dGR4X2dsb2JhbF9tZXRhZGF0YS5jJiMzNDsKJiM0MzsvKgomIzQzOyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0CiYjNDM7ICogaG9sZHMgaXRzIHZhbHVlLiBVc2UgVERfU1lTSU5GT19NQVAoKSB0byBwb3B1bGF0ZSBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHsKJiM0MzsJdTY0IGZpZWxkX2lkOwomIzQzOwl1MTYgb2Zmc2V0OwomIzQzOwl1OCAgc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNpemUgZW5jb2RlZCBpbiB0aGUgZmllbGQgSUQgYW5kIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBDCiYjNDM7ICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIF9zdHJ1Y3QsIF9tZW1iZXIpCQkJCVwKJiM0MzsJewkJCQkJCQkJCVwKJiM0MzsJCS5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLAkJCQlcCiYjNDM7CQkub2Zmc2V0ICAgPSBvZmZzZXRvZihzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlciksCQkJXAomIzQzOwkJLnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAmIzQzOwkJXAomIzQzOwkJCSAgICBCVUlMRF9CVUdfT05fWkVSTygJCQkJCVwKJiM0MzsJCQkJc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAhPQlcCiYjNDM7CQkJCU1EX0ZJRUxEX0lEX0VMRV9TSVpFKE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkKSksCVwKJiM0MzsJfQomIzQzOwomIzQzOy8qCiYjNDM7ICogV2FsayBhIHRhYmxlIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGRzLCByZWFkIGVhY2ggdmlhIFRESC5TWVMuUkQsCiYjNDM7ICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgbWF0Y2hpbmcgQyBtZW1iZXIgb2YgKkBiYXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcywKJiM0MzsJCQkJICAgaW50IG5yX2ZpZWxkcywgdm9pZCAqYmFzZSkKJiM0Mzt7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9maWVsZHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZiA9ICZhbXA7ZmllbGRzW2ldOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZi0mZ3Q7ZmllbGRfaWQsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoZi0mZ3Q7c2l6ZSkgewomIzQzOwkJY2FzZSAxOiAqKHU4ICAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSAyOiAqKHUxNiAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSA0OiAqKHUzMiAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSA4OiAqKHU2NCAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdmVyc2lvbiwgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdmVyc2lvbl9maWVsZHNbXSA9IHsKJiM0MzsJTUFQX1ZFUlNJT04oTUlOT1JfVkVSU0lPTiwJbWlub3JfdmVyc2lvbiksCiYjNDM7CU1BUF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sCW1ham9yX3ZlcnNpb24pLAomIzQzOwlNQVBfVkVSU0lPTihVUERBVEVfVkVSU0lPTiwJdXBkYXRlX3ZlcnNpb24pLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodmVyc2lvbl9maWVsZHMsCiYjNDM7CQkJCSAgICAgICBBUlJBWV9TSVpFKHZlcnNpb25fZmllbGRzKSwKJiM0MzsJCQkJICAgICAgIHN5c2luZm9fdmVyc2lvbik7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgTUFQX0ZFQVRVUkVTKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19mZWF0dXJlcywgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7CiYjNDM7CU1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLAl0ZHhfZmVhdHVyZXMwKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShmZWF0dXJlc19maWVsZHMsCiYjNDM7CQkJCSAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHsKJiM0MzsJTUFQX1RETVIoTUFYX1RETVJTLAkJbWF4X3RkbXJzKSwKJiM0MzsJTUFQX1RETVIoTUFYX1JFU0VSVkVEX1BFUl9URE1SLAltYXhfcmVzZXJ2ZWRfcGVyX3RkbXIpLAomIzQzOwlNQVBfVERNUihQQU1UXzRLX0VOVFJZX1NJWkUsCXBhbXRfNGtfZW50cnlfc2l6ZSksCiYjNDM7CU1BUF9URE1SKFBBTVRfMk1fRU5UUllfU0laRSwJcGFtdF8ybV9lbnRyeV9zaXplKSwKJiM0MzsJTUFQX1RETVIoUEFNVF8xR19FTlRSWV9TSVpFLAlwYW10XzFnX2VudHJ5X3NpemUpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLAomIzQzOwkJCQkgICAgICAgQVJSQVlfU0laRSh0ZG1yX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX3RkbXIpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIE1BUF9URF9DVFJMKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb190ZF9jdHJsLCBfbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0gewomIzQzOwlNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLAl0ZHJfYmFzZV9zaXplKSwKJiM0MzsJTUFQX1REX0NUUkwoVERDU19CQVNFX1NJWkUsCXRkY3NfYmFzZV9zaXplKSwKJiM0MzsJTUFQX1REX0NUUkwoVERWUFNfQkFTRV9TSVpFLAl0ZHZwc19iYXNlX3NpemUpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2N0cmxfZmllbGRzLAomIzQzOwkJCQkgICAgICAgQVJSQVlfU0laRSh0ZF9jdHJsX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX3RkX2N0cmwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIE1BUF9IQU5ET0ZGKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCBoYW5kb2ZmX2ZpZWxkc1tdID0gewomIzQzOwlNQVBfSEFORE9GRihNT0RVTEVfSFYsCW1vZHVsZV9odiksCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9faGFuZG9mZihzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgKnN5c2luZm9faGFuZG9mZikKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShoYW5kb2ZmX2ZpZWxkcywKJiM0MzsJCQkJICAgICAgIEFSUkFZX1NJWkUoaGFuZG9mZl9maWVsZHMpLAomIzQzOwkJCQkgICAgICAgc3lzaW5mb19oYW5kb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVERfQ09ORihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRfY29uZiwgX21lbWJlcikKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNjYWxhciBmaWVsZHMgb2YgdGhlICYjMzQ7VEQgQ29uZmlndXJhdGlvbiYjMzQ7IGNsYXNzLiAgbnVtX2NwdWlkX2NvbmZpZwomIzQzOyAqIG11c3QgYmUgcHJlc2VudCBoZXJlIChhbmQgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgQ1BVSUQgYXJyYXlzCiYjNDM7ICogYmVsb3cpIGJlY2F1c2UgaXQgc2l6ZXMgdGhlbS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY29uZl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHsKJiM0MzsJTUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsCWF0dHJpYnV0ZXNfZml4ZWQwKSwKJiM0MzsJTUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDEsCWF0dHJpYnV0ZXNfZml4ZWQxKSwKJiM0MzsJTUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsCXhmYW1fZml4ZWQwKSwKJiM0MzsJTUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsCXhmYW1fZml4ZWQxKSwKJiM0MzsJTUFQX1REX0NPTkYoTlVNX0NQVUlEX0NPTkZJRywJbnVtX2NwdWlkX2NvbmZpZyksCiYjNDM7CU1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsCW1heF92Y3B1c19wZXJfdGQpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZikKJiM0Mzt7CiYjNDM7CWludCByZXQsIGksIGo7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2NvbmZfZmllbGRzLAomIzQzOwkJCQkgICAgICBBUlJBWV9TSVpFKHRkX2NvbmZfZmllbGRzKSwKJiM0MzsJCQkJICAgICAgdGRfY29uZik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cyBhcmUgc2l6ZWQgYXQgcnVudGltZSBieQomIzQzOwkgKiBudW1fY3B1aWRfY29uZmlnLCBzbyB0aGV5IGNhbiYjMzk7dCBiZSBleHByZXNzZWQgaW4gYSBzdGF0aWMKJiM0MzsJICogVERfU1lTSU5GT19NQVAgdGFibGUuICBUaGVpciBmaWVsZCBJRHMgYXJlIGNvbnRpZ3VvdXMgZnJvbQomIzQzOwkgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRkX2NvbmYtJmd0O251bV9jcHVpZF9jb25maWcgJmd0OyBBUlJBWV9TSVpFKHRkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ19sZWF2ZXMpIHx8CiYjNDM7CSAgICB0ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnICZndDsgQVJSQVlfU0laRSh0ZF9jb25mLSZndDtjcHVpZF9jb25maWdfdmFsdWVzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMgJiM0MzsgaSwKJiM0MzsJCQkJCSAgICAgICZhbXA7dGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX2xlYXZlc1tpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgMjsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyAmIzQzOyBpICogMiAmIzQzOyBqOwomIzQzOwomIzQzOwkJCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3RkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbigmYW1wO3N5c2luZm8tJmd0O3ZlcnNpb24pOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7TW9kdWxlIHZlcnNpb246ICYjMzQ7IFREWF9WRVJTSU9OX0ZNVCAmIzM0O1xuJiMzNDssCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1ham9yX3ZlcnNpb24sCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoJmFtcDtzeXNpbmZvLSZndDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoJmFtcDtzeXNpbmZvLSZndDt0ZG1yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90ZHhfc3lzX2luZm9fdGRfY29uZigmYW1wO3N5c2luZm8tJmd0O3RkX2NvbmYpOwomIzQzO30KIAogc3RhdGljIF9faW5pdCBpbnQgY2hlY2tfZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAppbmRleCBiZGZkMGUxZTMzN2FjLi5jNjEyYjFjZjdjMTQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCkBAIC01OCw2ICYjNDM7NTgsNzIgQEAKICAqLwogI2RlZmluZSBURFhfVkVSU0lPTl9TSElGVAkJMTYKIAomIzQzOy8qCiYjNDM7ICogR2xvYmFsIFNjb3BlIE1ldGFkYXRhIGZpZWxkIElEcy4KJiM0MzsgKgomIzQzOyAqIFNlZSAmIzM0O0dsb2JhbC1TY29wZSAoVERYIE1vZHVsZSkgTWV0YWRhdGEmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQkkKJiM0MzsgKiBzcGVjLgomIzQzOyAqCiYjNDM7ICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhICYjMzQ7Q2xhc3MmIzM0OwomIzQzOyAqICh3aGljaCBMaW51eCBtaXJyb3JzIGluICYjMzk7c3RydWN0IHRkeF9zeXNfaW5mbyYjMzk7IHN1Yi1zdHJ1Y3R1cmVzKSwKJiM0MzsgKiB0aGUgZWxlbWVudCBzaXplLCBhbmQgYSBwZXItY2xhc3MgZmllbGQgaW5kZXguIEVhY2ggSUQgYmVsb3cKJiM0MzsgKiBpcyBwYWlyZWQgd2l0aCB0aGUgQyBtZW1iZXIgdGhhdCBob2xkcyBpdHMgdmFsdWUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyogQ2xhc3MgJiMzNDtURFggTW9kdWxlIFZlcnNpb24mIzM0OyAqLwomIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUlOT1JfVkVSU0lPTgkJMHgwODAwMDAwMTAwMDAwMDAzVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQUpPUl9WRVJTSU9OCQkweDA4MDAwMDAxMDAwMDAwMDRVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1VQREFURV9WRVJTSU9OCQkweDA4MDAwMDAxMDAwMDAwMDVVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REWCBGZWF0dXJlcyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwCQkweDBBMDAwMDAzMDAwMDAwMDhVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1RETVIgSW5mbyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVERNUlMJCQkweDkxMDAwMDAxMDAwMDAwMDhVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9SRVNFUlZFRF9QRVJfVERNUgkweDkxMDAwMDAxMDAwMDAwMDlVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfNEtfRU5UUllfU0laRQkJMHg5MTAwMDAwMTAwMDAwMDEwVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzJNX0VOVFJZX1NJWkUJCTB4OTEwMDAwMDEwMDAwMDAxMVVMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfUEFNVF8xR19FTlRSWV9TSVpFCQkweDkxMDAwMDAxMDAwMDAwMTJVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REIENvbnRyb2wgU3RydWN0dXJlcyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFJfQkFTRV9TSVpFCQkweDk4MDAwMDAxMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REQ1NfQkFTRV9TSVpFCQkweDk4MDAwMDAxMDAwMDAxMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REVlBTX0JBU0VfU0laRQkJMHg5ODAwMDAwMTAwMDAwMjAwVUxMCiYjNDM7CiYjNDM7LyogQ2xhc3MgJiMzNDtURCBDb25maWd1cmF0aW9uJiMzNDsgKi8KJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwCQkweDE5MDAwMDAzMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxCQkweDE5MDAwMDAzMDAwMDAwMDFVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1hGQU1fRklYRUQwCQkJMHgxOTAwMDAwMzAwMDAwMDAyVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMQkJCTB4MTkwMDAwMDMwMDAwMDAwM1VMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfTlVNX0NQVUlEX0NPTkZJRwkJMHg5OTAwMDAwMTAwMDAwMDA0VUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1RECQkweDk5MDAwMDAxMDAwMDAwMDhVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REWCBNb2R1bGUgSGFuZG9mZiYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NT0RVTEVfSFYJCQkweDg5MDAwMDAxMDAwMDAwMDBVTEwKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJhc2UgSURzIGZvciB0aGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cy4gIFRoZSBmaWVsZCBJRCBvZiBsZWFmCiYjNDM7ICogaW5kZXggQGkgaXMgQkFTRSAmIzQzOyBpOyBmb3IgdGhlIHZhbHVlcyBhcnJheSwgc3ViLWVudHJ5IEBqIG9mIGluZGV4CiYjNDM7ICogQGkgaXMgQkFTRSAmIzQzOyBpKjIgJiM0Mzsgai4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMJCTB4OTkwMDAwMDMwMDAwMDQwMFVMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUwkJMHg5OTAwMDAwMzAwMDAwNTAwVUxMCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuCiYjNDM7ICoKJiM0MzsgKiBTZWUgJiMzNDtNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcikKJiM0MzsgKiBEZWZpbml0aW9uJiMzNDsgaW4gdGhlIEludGVsIFREWCBNb2R1bGUgQUJJIHNwZWMuCiYjNDM7ICoKJiM0MzsgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGEKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQmIzM5O3Mgc2l6ZSBpbiBieXRlcwomIzQzOyAqLwomIzQzOyNkZWZpbmUgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkJXAomIzQzOwkoKChmaWVsZF9pZCkgJmFtcDsgR0VOTUFTS19VTEwoMzMsIDMyKSkgJmd0OyZndDsgMzIpCiYjNDM7CiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRShmaWVsZF9pZCkJCVwKJiM0MzsJKDEgJmx0OyZsdDsgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpCiYjNDM7CiAvKiBURFggcGFnZSB0eXBlcyAqLwogI2RlZmluZQlQVF9OREEJCTB4MAogI2RlZmluZQlQVF9SU1ZECQkweDEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDljMzAwZjIzZDQzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwxMzMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS4KLSAqCi0gKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvbgotICogb2YgU0VBTUNBTEwgd3JhcHBlciBwcmltaXRpdmUgd2hpY2ggcmVhZHMgZ2xvYmFsIG1ldGFkYXRhLgotICogSW5jbHVkZSB0aGlzIGZpbGUgdG8gb3RoZXIgQyBmaWxlIGluc3RlYWQuCi0gKi8KLQotc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pCi17Ci0JaW50IHJldCA9IDA7Ci0JdTY0IHZhbDsKLQotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdmVyc2lvbi0mZ3Q7bWlub3JfdmVyc2lvbiA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA0LCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3ZlcnNpb24tJmd0O21ham9yX3ZlcnNpb24gPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb192ZXJzaW9uLSZndDt1cGRhdGVfdmVyc2lvbiA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcykKLXsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgdmFsOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb19mZWF0dXJlcy0mZ3Q7dGR4X2ZlYXR1cmVzMCA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcikKLXsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgdmFsOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAwOCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDttYXhfdGRtcnMgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAwOSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDttYXhfcmVzZXJ2ZWRfcGVyX3RkbXIgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMiwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzFnX2VudHJ5X3NpemUgPSB2YWw7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsICpzeXNpbmZvX3RkX2N0cmwpCi17Ci0JaW50IHJldCA9IDA7Ci0JdTY0IHZhbDsKLQotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY3RybC0mZ3Q7dGRyX2Jhc2Vfc2l6ZSA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5ODAwMDAwMTAwMDAwMTAwLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2N0cmwtJmd0O3RkY3NfYmFzZV9zaXplID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAyMDAsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY3RybC0mZ3Q7dGR2cHNfYmFzZV9zaXplID0gdmFsOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqc3lzaW5mb190ZF9jb25mKQotewotCWludCByZXQgPSAwOwotCXU2NCB2YWw7Ci0JaW50IGksIGo7Ci0KLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgxOTAwMDAwMzAwMDAwMDAwLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O2F0dHJpYnV0ZXNfZml4ZWQwID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY29uZi0mZ3Q7YXR0cmlidXRlc19maXhlZDEgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMiwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZF9jb25mLSZndDt4ZmFtX2ZpeGVkMCA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgxOTAwMDAwMzAwMDAwMDAzLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O3hmYW1fZml4ZWQxID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZyA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5OTAwMDAwMTAwMDAwMDA4LCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O21heF92Y3B1c19wZXJfdGQgPSB2YWw7Ci0JaWYgKHN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZyAmZ3Q7IEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLSZndDtjcHVpZF9jb25maWdfbGVhdmVzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspCi0JCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgJiM0MzsgaSwgJmFtcDt2YWwpKSkKLQkJCXN5c2luZm9fdGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDsKLQlpZiAoc3lzaW5mb190ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnICZndDsgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ192YWx1ZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmb3IgKGkgPSAwOyBpICZsdDsgc3lzaW5mb190ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnOyBpJiM0MzsmIzQzOykKLQkJZm9yIChqID0gMDsgaiAmbHQ7IDI7IGomIzQzOyYjNDM7KQotCQkJaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDUwMCAmIzQzOyBpICogMiAmIzQzOyBqLCAmYW1wO3ZhbCkpKQotCQkJCXN5c2luZm9fdGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKQotewotCWludCByZXQ7Ci0JdTY0IHZhbDsKLQotCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4ODkwMDAwMDEwMDAwMDAwMCwgJmFtcDt2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzeXNpbmZvX2hhbmRvZmYtJmd0O21vZHVsZV9odiA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQotewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbigmYW1wO3N5c2luZm8tJmd0O3ZlcnNpb24pOwotCi0JcHJfaW5mbygmIzM0O01vZHVsZSB2ZXJzaW9uOiAmIzM0OyBURFhfVkVSU0lPTl9GTVQgJiMzNDtcbiYjMzQ7LAotCQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1ham9yX3ZlcnNpb24sCi0JCXN5c2luZm8tJmd0O3ZlcnNpb24ubWlub3JfdmVyc2lvbiwKLQkJc3lzaW5mby0mZ3Q7dmVyc2lvbi51cGRhdGVfdmVyc2lvbik7Ci0KLQlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcygmYW1wO3N5c2luZm8tJmd0O2ZlYXR1cmVzKTsKLQlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZG1yKCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7Ci0JcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwotCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKLQotCXJldHVybiByZXQ7Ci19CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggTWV0YWRhdGEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBsb2dpYy4gSXQgc2VlbXMgdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIGF1dG8tZ2VuZXJhdGVkIGB0ZHhfZ2xvYmFsX21ldGFkYXRhLmNgIGluIGZhdm9yIG9mIGEgdGFibGUtZHJpdmVuIGFwcHJvYWNoIHVzaW5nIGBURF9TWVNJTkZPX01BUGAgYW5kIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7aXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBURFgsIGFmdGVyIGFsbCwgaGluZ2VzIG9uIHNwZWNpZmljIEludGVsIFREWCBoYXJkd2FyZS4gQW5kIEkgbmVlZCB0byBjbGFyaWZ5LCBhcmUgd2UgdGFsa2luZyBURFggZ3Vlc3Qgb3IgaG9zdCBoZXJlPwoKV2FpdCwgdGhlIHBhdGgsIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLCB0aGF0JiMzOTtzIHRoZSBURFggaG9zdCBzdXBwb3J0IGNvZGUsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgS1ZNL1REWCBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIE9rYXksIHNvIG5vdyB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHRoaXMgYmUgZnV6emVkIG9yIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PyBJJiMzOTttIGJldHRpbmcgbm8sIGJlY2F1c2UgVERYIGhvc3Qgc3VwcG9ydCBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHRoYXQgVERYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQuIFRoYXQmIzM5O3MgYSBodWdlIGh1cmRsZS4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhpcyBpcyBwb3NzaWJsZSB3aXRob3V0IGhhcmR3YXJlLiBJIGtub3cgdGhhdCBURFggaG9zdCBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNoZWNrcyBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQgZWFybHkgb24gYW5kIGJhaWxzIG91dCBpZiBpdCYjMzk7cyBub3QgZGV0ZWN0ZWQuIEkgbmVlZCB0byBkaWcgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYCB0byBjb25maXJtIHRoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhpcyBjaGVjayBpcywgYW5kIHdoYXQgaGFwcGVucyBpZiBpdCYjMzk7cyBieXBhc3NlZCBzb21laG93LCBkZWxpYmVyYXRlbHkgb3IgYWNjaWRlbnRhbGx5LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZSBldmVuIHdpdGhvdXQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlLCBvciBhbnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBoYXJkd2FyZSBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE3MTg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3RkeF9lcnJhdHVtKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3NDItXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0Mzp2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0ZHhfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfaW5pdGAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIHN1YnN5c3RlbS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSXMgdGhpcyBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIHBhdHRlcm4gb3Igc29tZXRoaW5nIGN1c3RvbS1idWlsdD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSB0YXNrcyBgdGR4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciwgdGhlIHJlc291cmNlcyBpdCBtYW5hZ2VzLCBhbmQgYW55IGV4dGVybmFsIGludGVyYWN0aW9ucyBpdCB0cmlnZ2Vycy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZyB0b28uIEtub3dpbmcgd2hlcmUgdGhlIGluaXRpYWxpemF0aW9uIGlzIG9jY3VycmluZyB3aWxsIGhlbHAgbWUuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgdGhpcyBmdW5jdGlvbiBjYWxscyBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDM6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTc0NDpcdHtcbjE3NDU6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNzQ2Olx0XHRpbnQgZXJyO1xuMTc0NzpcdFxuMTc0ODpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTc0OTpcdFx0aWYgKGVycilcbjE3NTA6XHRcdFx0cmV0dXJuO1xuMTc1MTpcdFxuMTc1MjpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNzUzOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNzU0Olx0XG4xNzU1Olx0XHQvKlxuMTc1NjpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE3NTc6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNzU4Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE3NTk6XHRcdCAqIGF0IGFsbC5cbjE3NjA6XHRcdCAqL1xuMTc2MTpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE3NjI6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE3NjM6XHRcdFx0cmV0dXJuO1xuMTc2NDpcdFx0fVxuMTc2NTpcdFxuMTc2NjpcdFx0LypcbjE3Njc6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNzY4Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE3Njk6XHRcdCAqL1xuMTc3MDpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNzcxOlx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNzcyOlx0XHRcdHJldHVybjtcbjE3NzM6XHRcdH1cbjE3NzQ6XHRcbjE3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE3NzY6XHRcdGlmIChlcnIpIHtcbjE3Nzc6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNzc4Olx0XHRcdFx0XHRlcnIpO1xuMTc3OTpcdFx0XHRyZXR1cm47XG4xNzgwOlx0XHR9XG4xNzgxOlx0XG4xNzgyOlx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTc4MzpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTc4NDpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE3ODU6XHQjZW5kaWZcbjE3ODY6XHRcbjE3ODc6XHRcdC8qXG4xNzg4Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTc4OTpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNzkwOlx0XHQgKi9cbjE3OTE6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNzkyOlx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBURFggSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYHRkeF9pbml0YC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBzZXR1cCwgYW5kIGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZWFybHksIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBlc3RhYmxpc2hlcyB0aGUgc2VjdXJlIGVudmlyb25tZW50IGZvdW5kYXRpb24uIEJ1dCBub3cgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgYHRkeF9pbml0YCBkZXBlbmRzIG9uIGNvbWluZyBmcm9tPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBnZXRfdGR4X3N5c19pbmZvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGVhcmx5IGFzIHdlbGwsIG9yIGlzIGl0IGdldHRpbmcgaW5mb3JtYXRpb24gbGF0ZXIgb24/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGhvdyB0aGUgcmVsZXZhbnQgc3lzdGVtIGluZm9ybWF0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGFuZCB1c2VkIGluIHRoZSBURFggbGlmZWN5Y2xlLiBUaGlzIHRyYWNlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2VjdXJpdHkgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdGR4X3N5c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00MDY9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQxMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0MTI6c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDEzLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCBmZWF0dXJlc19maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI1LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQyNjpzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI3LXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZG1yX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDMtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDQ0OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDUte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2N0cmxfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ1OS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0NjA6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ2MS17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQ3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgaGFuZG9mZl9maWVsZHNbXSA9IHtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDczLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQ3NDpzdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9faGFuZG9mZihzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgKnN5c2luZm9faGFuZG9mZilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NzUte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5Ny1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0OTg6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00OTkte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MzYtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTM3OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mzgte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NDAtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTQxOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTQyLVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTAtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTUxOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhcdTAwMjZzeXNpbmZvLVx1MDAzZWZlYXR1cmVzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTItXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU1Olx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yKFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTU2LVx0aWYgKHJldClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTU4LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjU1OTpcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2MC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo1NjM6XHRyZXR1cm4gZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTY0LX1cbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTM1OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzYzOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mbyhcdTAwMjZ0ZHhfc3lzaW5mbyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2NC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE0ODU9aW50IHRkeF9tb2R1bGVfc2h1dGRvd24odm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ5MS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDkyOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKFx1MDAyNmhhbmRvZmYpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0OTMtXHQvKlxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTIzPWludCB0ZHhfbW9kdWxlX3J1bl91cGRhdGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTUzMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNTMyOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnRkeF9zeXNpbmZvLnZlcnNpb24pO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1MzMtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIFREWCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSBzZWUgYGluaXRfdGR4X21vZHVsZWAgaXMgY2FsbGluZyBgZ2V0X3RkeF9zeXNfaW5mb2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGluaXRpYWxpemluZyB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBtb2R1bGUgdXN1YWxseSBpbnZvbHZlcyBnYXRoZXJpbmcgc29tZSBzeXN0ZW0tbGV2ZWwgaW5mb3JtYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGVyZSBleGFjdGx5IGlzIGBpbml0X3RkeF9tb2R1bGVgIGJlaW5nIGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYXJvdW5kIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIGNyaXRpY2FsLiBJcyBpdCBiZWluZyB0cmlnZ2VyZWQgYXQgYm9vdCwgb24tZGVtYW5kIGJ5IGFub3RoZXIgc2VydmljZSwgb3IgaW4gcmVzcG9uc2UgdG8gc29tZSBleHRlcm5hbCBldmVudD8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGdpdmVzIGEgaHVnZSBhbW91bnQgb2YgaW5zaWdodCBpbnRvIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJiMzOTtzIGludGVncmF0aW9uIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gQ29udGV4dCBpcyBrZXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF90ZHhfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzQwPXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzNTgtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM1OTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzYwLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ0MD1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NjktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3MDpcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NzEtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcG9pbnQgb2YgZW50cnkgaXMgYHRkeF9lbmFibGVgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvLCB3ZWxsLCBlbmFibGluZyBURFguIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaG93IGRvZXMgaXQgZG8gdGhhdD8gQWhhLCB0aGUgdGV4dCBwb2ludHMgb3V0IGB0ZHhfZW5hYmxlYCBjYWxscyBgaW5pdF90ZHhfbW9kdWxlYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB0aGVuLCB0aGUgcGxhY2Ugd2hlcmUgYWxsIHRoZSBuZWNlc3Nhcnkgc2V0dXAgcHJvYmFibHkgaGFwcGVucy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgdGhlICp3aGVuKi4gU28sIG15IG5leHQgcXVlc3Rpb24gaXMgcGFyYW1vdW50OiB3aGVyZSB0aGUgaGVjayBpcyBgdGR4X2VuYWJsZWAgYWN0dWFsbHkgKmNhbGxlZCo/IEZpbmRpbmcgdGhlIGNhbGwgc2l0ZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIFREWCBlbmFibGVtZW50IGZsb3csIHRoZSBwcmVjb25kaXRpb25zIGZvciBpdCwgYW5kIHdoYXQgdHJpZ2dlcnMgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2VuYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTM1OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQzOS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDQwOnN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQxLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ4Mi19XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ4MzpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBpcyBkZWNsYXJlZCBhcyBhIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCB0aGF0JiMzOTtzIGluaXRpYWxpemVkIHByZXR0eSBlYXJseSBkdXJpbmcgdGhlIHN5c3RlbSBib290IHByb2Nlc3MsIGxpa2VseSBiZWZvcmUgbW9zdCBkcml2ZXJzIGFyZSB1cCBhbmQgcnVubmluZy4gSXQgbWVhbnMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgdG8gYmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfZW5hYmxlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHNldHRpbmcgdXAgdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4xNDQxOlx0e1xuMTQ0MjpcdFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcbjE0NDM6XHRcdGludCByZXQ7XG4xNDQ0Olx0XG4xNDQ1Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4xNDQ2Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4xNDQ3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTQ0ODpcdFx0fVxuMTQ0OTpcdFxuMTQ1MDpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1hTQVZFKSkge1xuMTQ1MTpcdFx0XHRwcl9lcnIoXCYjMzQ7WFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4xNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ1MzpcdFx0fVxuMTQ1NDpcdFxuMTQ1NTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcbjE0NTY6XHRcdFx0cHJfZXJyKFwmIzM0O01PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjE0NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU4Olx0XHR9XG4xNDU5Olx0XG4xNDYwOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xuMTQ2MTpcdFx0XHRwcl9lcnIoXCYjMzQ7U2VsZi1zbm9vcCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjE0NjI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYzOlx0XHR9XG4xNDY0Olx0XG4xNDY1Olx0XHRzdGF0ZSA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O3ZpcnQvdGR4Om9ubGluZVwmIzM0OyxcbjE0NjY6XHRcdFx0XHRcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XG4xNDY3Olx0XHRpZiAoc3RhdGUgXHUwMDNjIDApXG4xNDY4Olx0XHRcdHJldHVybiBzdGF0ZTtcbjE0Njk6XHRcbjE0NzA6XHRcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuMTQ3MTpcdFx0aWYgKHJldCkge1xuMTQ3MjpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbjE0NzM6XHRcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlKTtcbjE0NzQ6XHRcdFx0cmV0dXJuIHJldDtcbjE0NzU6XHRcdH1cbjE0NzY6XHRcbjE0Nzc6XHRcdHJlZ2lzdGVyX3N5c2NvcmUoXHUwMDI2dGR4X3N5c2NvcmUpO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0dGR4X21vZHVsZV9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4xNDgwOlx0XHRwcl9pbmZvKFwmIzM0O1REWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTQ4MTpcdFx0cmV0dXJuIDA7XG4xNDgyOlx0fVxuMTQ4MzpcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbjE0ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBURFggSG9zdCBQbGF0Zm9ybSBTdXBwb3J0IGluIEtlcm5lbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGR4X2VuYWJsZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiB0aGUgaG9zdCBwbGF0Zm9ybSBzdXBwb3J0cyBURFggdGhyb3VnaCBgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSlgLiBNYWtlcyBzZW5zZS4gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBURFgsIHdoaWNoIEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoaXMgZW52aXJvbm1lbnQsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVOT0RFVmAuIEkgc3RhcnQgd29uZGVyaW5nLCBjYW4gUUVNVSBlbXVsYXRlIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGJpdD8gVXN1YWxseSwgdGhhdCBraW5kIG9mIFREWCBob3N0IHN1cHBvcnQgZGVtYW5kcyBhY3R1YWwgVERYIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9uIHRoYXQmIzM5O3MgZmFyIGZyb20gdGhlIG5vcm0uIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBTeXprYWxsZXIsIHNvIHRoaXMgaXMgdW5saWtlbHkgdG8gYmUgcnVubmluZyBvbiBURFggaGFyZHdhcmUhIFRoYXQgY2xpY2tzLgoKU28sIGlmIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmZWF0dXJlIGlzbiYjMzk7dCBwcmVzZW50LCBgdGR4X2VuYWJsZWAgYmFpbHMgb3V0IGVhcmx5LiBNZWFuaW5nLCBgaW5pdF90ZHhfbW9kdWxlYCwgd2hpY2ggc3Vic2VxdWVudGx5IGNhbGxzIGBnZXRfdGR4X3N5c19pbmZvYCwgaXMgbmV2ZXIgZXZlbiByZWFjaGVkLiBUaGF0IGV4cGxhaW5zIHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgaXMgYWN0dWFsbHkgc2V0LiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0xOTAtI2RlZmluZSBYODZfRkVBVFVSRV9DRFBfTDNcdFx0KCA3KjMyJiM0MzsgNikgLyogXCYjMzQ7Y2RwX2wzXCYjMzQ7IENvZGUgYW5kIERhdGEgUHJpb3JpdGl6YXRpb24gTDMgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MTkxOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1cdCggNyozMiYjNDM7IDcpIC8qIFwmIzM0O3RkeF9ob3N0X3BsYXRmb3JtXCYjMzQ7IFBsYXRmb3JtIHN1cHBvcnRzIGJlaW5nIGEgVERYIGhvc3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMTkyLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSFdfUFNUQVRFXHRcdCggNyozMiYjNDM7IDgpIC8qIFwmIzM0O2h3X3BzdGF0ZVwmIzM0OyBBTUQgSFctUFN0YXRlICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDM2PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3Olx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LVx0XHRwcl9lcnIoXCYjMzQ7VERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDQwPXN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ0NC1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDQ1Olx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NDYtXHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODI9c3RhdGljIGJvb2wgcGFkZHJfaXNfdGR4X3ByaXZhdGUodW5zaWduZWQgbG9uZyBwaHlzKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTg4LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODk6XHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3OTQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc5NTpcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDAxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYHRkeF9pbml0YCYjMzk7cyBDUFUgRmVhdHVyZSBTZXR1cCoqCgpSaWdodCwgdGhhdCYjMzk7cyBpdCEgYHRkeF9pbml0YCBpcyBjYWxsaW5nIGBzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtgLiBHb29kLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGluaXRpYWwgc3RlcC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGB0ZHhfaW5pdGAmIzM5O3Mgb3ZlcmFsbCBwdXJwb3NlLCBhbmQgdGhpcyBmdW5jdGlvbiBjYWxsIGNvbmZpcm1zIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVpcmVkIGZvciB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0JiMzOTtzIHB1c2hpbmcgdGhhdCBjcnVjaWFsIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBhbmQgc2VlIHdoZXJlIHdlIGFyZS4gTGV0JiMzOTtzIGRlbHZlIGJhY2sgaW50byBgdGR4X2luaXRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBzeXN0ZW0gdG8gYWNjb21tb2RhdGUgVERYLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpdCBkb2VzLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBzZXRzIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGl0IGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDM6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTc0NDpcdHtcbjE3NDU6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNzQ2Olx0XHRpbnQgZXJyO1xuMTc0NzpcdFxuMTc0ODpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTc0OTpcdFx0aWYgKGVycilcbjE3NTA6XHRcdFx0cmV0dXJuO1xuMTc1MTpcdFxuMTc1MjpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNzUzOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNzU0Olx0XG4xNzU1Olx0XHQvKlxuMTc1NjpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE3NTc6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNzU4Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE3NTk6XHRcdCAqIGF0IGFsbC5cbjE3NjA6XHRcdCAqL1xuMTc2MTpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE3NjI6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE3NjM6XHRcdFx0cmV0dXJuO1xuMTc2NDpcdFx0fVxuMTc2NTpcdFxuMTc2NjpcdFx0LypcbjE3Njc6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNzY4Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE3Njk6XHRcdCAqL1xuMTc3MDpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNzcxOlx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNzcyOlx0XHRcdHJldHVybjtcbjE3NzM6XHRcdH1cbjE3NzQ6XHRcbjE3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE3NzY6XHRcdGlmIChlcnIpIHtcbjE3Nzc6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNzc4Olx0XHRcdFx0XHRlcnIpO1xuMTc3OTpcdFx0XHRyZXR1cm47XG4xNzgwOlx0XHR9XG4xNzgxOlx0XG4xNzgyOlx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTc4MzpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTc4NDpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE3ODU6XHQjZW5kaWZcbjE3ODY6XHRcbjE3ODc6XHRcdC8qXG4xNzg4Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTc4OTpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNzkwOlx0XHQgKi9cbjE3OTE6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNzkyOlx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbjE3OTM6XHRcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcbjE3OTQ6XHRcbjE3OTU6XHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuMTc5NjpcdFxuMTc5NzpcdFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcbjE3OTg6XHR9XG4xNzk5Olx0XG4xODAwOlx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXG4xODAxOlx0e1xuMTgwMjpcdFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERYIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgdGR4X2luaXRgIHdvcmtzIGhlcmUuIEl0IHNlZW1zIHRoYXQgaXRzIGtleSByb2xlLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCBpcyB0byBzZXQgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBUaGUgY29uZGl0aW9uIGZvciB0aGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBuZWVkcyB0byBiZSBzdWNjZXNzZnVsLCBhbmQgY3J1Y2lhbGx5LCBpdCBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSwgYG5yX3RkeF9rZXlpZHNgLCB0aGF0JiMzOTtzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBzZWVtcyB0aGF0IHRoZSBwcmVzZW5jZSBvZiAqYXQgbGVhc3QqIHR3byBURFgga2V5IElEcyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgZW5hYmxpbmcgdGhlIFREWCBob3N0IHBsYXRmb3JtIGZlYXR1cmVzLiBUaGUgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCB0aGVuLCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGRldGVybWluZXMgc3VjY2VzcyBhbmQgaG93IGl0IGNhbGN1bGF0ZXMgdGhpcyBgbnJfdGR4X2tleWlkc2AgdmFsdWUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGllcywgYW5kIHdoZXJlIEkgY2FuIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0mIzM5O3MgVERYIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE2MzI9Y29uc3QgY2hhciAqdGR4X2R1bXBfbWNlX2luZm8oc3RydWN0IG1jZSAqbSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTY0Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjQzOnN0YXRpYyBfX2luaXQgaW50IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcodTMyICp0ZHhfa2V5aWRfc3RhcnQsXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTY0NC1cdFx0XHRcdFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTc0Mz12b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNzQ3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE3NDg6XHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFx1MDAyNnRkeF9rZXlpZF9zdGFydCwgXHUwMDI2bnJfdGR4X2tleWlkcyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0OS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gVGhlIGZpcnN0IHRob3VnaHQgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGFib3V0IHRvIGFzc2VzcyBhIHNwZWNpZmljIGFwcHJvYWNoIG9yIGRlc2lnbiByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgYnJlYWtpbmcgZG93biBhbmQgb3JnYW5pemluZyBkYXRhLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHdlIGFzc2lnbiBhbmQgdXNlIHJlY29yZCBrZXlzIHdpdGhpbiBhIHBhcnRpdGlvbmVkIHN0cnVjdHVyZS4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBlaXRoZXIgYW4gZXhpc3Rpbmcgc3lzdGVtIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgb3Igc29tZXRoaW5nIG5ldyB0aGF0JiMzOTtzIHByZXNlbnRlZCBpdHNlbGYgYXMgYSBwb3RlbnRpYWwgc29sdXRpb24gb3IgYSBwb2ludCBvZiBpbnRlcmVzdC4gVGhlIG5hbWluZyBjb252ZW50aW9uICYjMzQ7cmVjb3JkX2tleWlkJiMzNDsgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgbWVudGFsIGRhdGFiYXNlIG9mIHBvc3NpYmxlIGFwcGxpY2F0aW9uczogZGF0YSB3YXJlaG91c2luZywgZGlzdHJpYnV0ZWQgZGF0YWJhc2VzLCBldmVudCBzdHJlYW1pbmcgc3lzdGVtcywgcG9zc2libHkgZXZlbiBzb21ldGhpbmcgbW9yZSBuaWNoZSBsaWtlIGEgc3BlY2lhbGl6ZWQga2V5LXZhbHVlIHN0b3JlLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBpbml0aWFsIHF1ZXN0aW9uczogSXMgdGhpcyBhIHNoYXJkaW5nIHN0cmF0ZWd5PyBJcyBpdCBiYXNlZCBvbiBoYXNoaW5nLCByYW5nZSBwYXJ0aXRpb25pbmcsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQmIzM5O3MgdGhlIGFudGljaXBhdGVkIGRhdGEgdm9sdW1lIGFuZCB3cml0ZS9yZWFkIHBhdHRlcm5zIHRoYXQgdGhpcyBwYXJ0aXRpb25pbmcgc2NoZW1lIGlzIGRlc2lnbmVkIHRvIGhhbmRsZT8gVGhlIHRlcm0gJiMzNDtwYXJ0aXRpb25pbmcmIzM0OyBpdHNlbGYgaW1wbGllcyBhIGRlc2lyZSBmb3Igc2NhbGFiaWxpdHksIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIHBvdGVudGlhbCBwYXJhbGxlbCBwcm9jZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW1wbGVtZW50YXRpb24gYWNoaWV2ZXMgdGhvc2UgZ29hbHMgKG9yIGF0dGVtcHRzIHRvKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NDM6XHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxuMTY0NDpcdFx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuMTY0NTpcdHtcbjE2NDY6XHRcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcbjE2NDc6XHRcdGludCByZXQ7XG4xNjQ4Olx0XG4xNjQ5Olx0XHQvKlxuMTY1MDpcdFx0ICogSUEzMl9NS1RNRV9LRVlJRF9QQVJUSU9OSU5HOlxuMTY1MTpcdFx0ICogICBCaXQgWzMxOjBdOlx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cbjE2NTI6XHRcdCAqICAgQml0IFs2MzozMl06XHROdW1iZXIgb2YgVERYIHByaXZhdGUgS2V5SURzLlxuMTY1MzpcdFx0ICovXG4xNjU0Olx0XHRyZXQgPSByZG1zcl9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgXHUwMDI2X25yX21rdG1lX2tleWlkcyxcbjE2NTU6XHRcdFx0XHRcdTAwMjZfbnJfdGR4X2tleWlkcyk7XG4xNjU2Olx0XHRpZiAocmV0IHx8ICFfbnJfdGR4X2tleWlkcylcbjE2NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjU4Olx0XG4xNjU5Olx0XHQvKiBURFggS2V5SURzIHN0YXJ0IGFmdGVyIHRoZSBsYXN0IE1LVE1FIEtleUlELiAqL1xuMTY2MDpcdFx0X3RkeF9rZXlpZF9zdGFydCA9IF9ucl9ta3RtZV9rZXlpZHMgJiM0MzsgMTtcbjE2NjE6XHRcbjE2NjI6XHRcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xuMTY2MzpcdFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcbjE2NjQ6XHRcbjE2NjU6XHRcdHJldHVybiAwO1xuMTY2NjpcdH1cbjE2Njc6XHRcbjE2Njg6XHRzdGF0aWMgYm9vbCBpc190ZHhfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4xNjY5Olx0e1xuMTY3MDpcdFx0c3RydWN0IHRkeF9tZW1ibG9jayAqdG1iO1xuMTY3MTpcdFxuMTY3MjpcdFx0LypcbjE2NzM6XHRcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cdTAwM2MtXHUwMDNlZW5kX3BmbiByYW5nZSBkb2VzIG5vdFxuMTY3NDpcdFx0ICogY3Jvc3MgbXVsdGlwbGUgQHRkeF9tZW1saXN0IGVudHJpZXMuICBBIHNpbmdsZSBtZW1vcnkgb25saW5lXG4xNjc1Olx0XHQgKiBldmVudCBhY3Jvc3MgbXVsdGlwbGUgbWVtYmxvY2tzIChmcm9tIHdoaWNoIEB0ZHhfbWVtbGlzdFxuMTY3NjpcdFx0ICogZW50cmllcyBhcmUgZGVyaXZlZCBhdCB0aGUgdGltZSBvZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24pIGlzXG4xNjc3Olx0XHQgKiBub3QgcG9zc2libGUuICBUaGlzIGlzIGJlY2F1c2UgbWVtb3J5IG9mZmxpbmUvb25saW5lIGlzIGRvbmVcbjE2Nzg6XHRcdCAqIG9uIGdyYW51bGFyaXR5IG9mICYjMzk7c3RydWN0IG1lbW9yeV9ibG9jayYjMzk7LCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxuMTY3OTpcdFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cbjE2ODA6XHRcdCAqL1xuMTY4MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFx1MDAyNnRkeF9tZW1saXN0LCBsaXN0KSB7XG4xNjgyOlx0XHRcdGlmIChzdGFydF9wZm4gXHUwMDNlPSB0bWItXHUwMDNlc3RhcnRfcGZuIFx1MDAyNlx1MDAyNiBlbmRfcGZuIFx1MDAzYz0gdG1iLVx1MDAzZWVuZF9wZm4pXG4xNjgzOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4xNjg0Olx0XHR9XG4xNjg1Olx0XHRyZXR1cm4gZmFsc2U7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdHN0YXRpYyBpbnQgdGR4X21lbW9yeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbjE2ODk6XHRcdFx0XHQgICAgICAgdm9pZCAqdilcbjE2OTA6XHR7XG4xNjkxOlx0XHRzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqbW4gPSB2O1xuMTY5MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTExNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1LVE1FIEtleSBJRCBQYXJ0aXRpb25pbmcgaW4gYSBURFggQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mgc3RhcnRpbmcgYnkgcmVhZGluZyB0aGUgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AgTVNSLiBOb3csIGlmIHRoYXQgTVNSIGlzbiYjMzk7dCBwcmVzZW50IG9yIGlmIHRoZSBudW1iZXIgb2YgVERYIGtleSBJRHMgY29tZXMgYmFjayBhcyB6ZXJvLCBpdCYjMzk7cyB0aHJvd2luZyBhbiBgLUVJTlZBTGAgZXJyb3IuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIG5leHQgcXVlc3Rpb24gaXM6IGNhbiBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoYXQgTVNSPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRpZWQgdG8gc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBjZXJ0YWluIGZlYXR1cmUgZmxhZ3MuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCkV2ZW4gaWYgUUVNVSAqZG9lcyogZW11bGF0ZSBpdCwgaXQmIzM5O3Mgbm90IHRoZSBlbmQgb2YgdGhlIGxpbmUuIFRoZSBgdGR4X2VuYWJsZWAgY2FsbCB0cmlnZ2VycyBgaW5pdF90ZHhfbW9kdWxlYCwgYW5kICp0aGF0KiBjYWxscyBgZ2V0X3RkeF9zeXNfaW5mb2AuIFRoZW4sIGBnZXRfdGR4X3N5c19pbmZvYCBjYWxscyBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBwYXJ0LiBTcGVjaWZpY2FsbHksIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgaXMgZXhlY3V0aW5nIGEgYFRESC5TWVMuUkRgIFNFQU1DQUxMLiBTbywgKnRoYXQqIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgVERYIHN5c3RlbSBtZXRhZGF0YSByZWFkLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgYW5kIHNlZSB3aGF0IGl0IGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX3N5c19tZXRhZGF0YV9maWVsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9Mjk4PXN0YXRpYyBfX2luaXQgaW50IGJ1aWxkX3RkeF9tZW1saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zMjktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MzMwOnN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzMxLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9Mzc4PXN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcyxcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzg2LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjM4NzpcdFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZi1cdTAwM2VmaWVsZF9pZCwgXHUwMDI2dmFsKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zODgtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQ5OD1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICp0ZF9jb25mKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KSB7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTE5Olx0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICYjNDM7IGksXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTIwLVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjYtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTI3Olx0XHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjgtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBpbnB1dHM6IHdoYXQgZG9lcyBpdCBleHBlY3QgdG8gcmVjZWl2ZT8gSXMgaXQgYSBrZXksIGEgcGF0aCwgc29tZSBzb3J0IG9mIGlkZW50aWZpZXI/IEFuZCBqdXN0IGFzIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIGl0cyBvdXRwdXQ/IERvZXMgaXQgcmV0dXJuIHRoZSBtZXRhZGF0YSBkaXJlY3RseSwgb3Igc29tZSBzb3J0IG9mIGhhbmRsZSBvciBvYmplY3QgdGhhdCBJIHRoZW4gbmVlZCB0byBpbnRlcmFjdCB3aXRoPyBJcyBpdCByYXcgZGF0YSBvciBpcyBpdCBhbHJlYWR5IHBhcnNlZCB0byBKU09OIG9yIHNvbWUgb3RoZXIgZm9ybWF0PyBLbm93aW5nIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGlzICpjcml0aWNhbCogZm9yIHRoaXMgZXhwbG9yYXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0JiMzOTtzIHRoZSBzdG9yYWdlIG1lY2hhbmlzbSBmb3IgdGhpcyBzeXN0ZW0gbWV0YWRhdGE/IElzIGl0IGEga2V5LXZhbHVlIHN0b3JlLCBhIGRhdGFiYXNlLCBhIGZpbGUgc3lzdGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIG1vZGVsIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSBteSBpbnRlcnByZXRhdGlvbi4gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBvciBwcmUtY29uZGl0aW9ucyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBtZXRhZGF0YT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBncmFjZWZ1bGx5PyBEb2VzIGl0IG9mZmVyIGFueSB0eXBlIG9mIGNhY2hpbmcgdG8gc3BlZWQgdXAgdGhlIG1ldGFkYXRhIHJldHJpZXZhbCwgYW5kIGlmIHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIGRhdGEgY29uc2lzdGVuY3k/CgpJIHdpbGwgcGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIG1ldGFkYXRhIGZpZWxkIGRvZXNuJiMzOTt0IGV4aXN0PyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiwgcmV0dXJuIGEgbnVsbCB2YWx1ZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byB3cml0aW5nIHJvYnVzdCBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQuIEFuZCBldmVuIG1vcmUgaW1wb3J0YW50bHksIEkmIzM5O2xsIGFzc2VzcyB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBpZiBhbnkuIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFjY2VzcyB0byBzZW5zaXRpdmUgaW5mb3JtYXRpb24/IEFyZSB0aGVyZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaW5qZWN0aW9uIG9yIHVuYXV0aG9yaXplZCBhY2Nlc3M/IEZpbmFsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGNvbmN1cnJlbmN5IGlmIHRoZSBlbnZpcm9ubWVudCBpcyBtdWx0aXRocmVhZGVkLiBXaWxsIHRoZXJlIGJlIGFueSByYWNlIGNvbmRpdGlvbnMsIG9yIGlzIHRoaXMgdGhyZWFkLXNhZmU/IE9rLCBsZXQmIzM5O3MgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuIDMzMTpcdHtcbiAzMzI6XHRcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuIDMzMzpcdFx0aW50IHJldDtcbiAzMzQ6XHRcbiAzMzU6XHRcdC8qXG4gMzM2Olx0XHQgKiBUREguU1lTLlJEIC0tIHJlYWRzIG9uZSBnbG9iYWwgbWV0YWRhdGEgZmllbGRcbiAzMzc6XHRcdCAqICAtIFJEWCAoaW4pOiB0aGUgZmllbGQgdG8gcmVhZFxuIDMzODpcdFx0ICogIC0gUjggKG91dCk6IHRoZSBmaWVsZCBkYXRhXG4gMzM5Olx0XHQgKi9cbiAzNDA6XHRcdGFyZ3MucmR4ID0gZmllbGRfaWQ7XG4gMzQxOlx0XHRyZXQgPSBzZWFtY2FsbF9wcmVycl9yZXQoVERIX1NZU19SRCwgXHUwMDI2YXJncyk7XG4gMzQyOlx0XHRpZiAocmV0KVxuIDM0MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM0NDpcdFxuIDM0NTpcdFx0KmRhdGEgPSBhcmdzLnI4O1xuIDM0NjpcdFxuIDM0NzpcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0fVxuIDM0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcG9zc2liaWxpdHkgb2YgUmVhY2hpbmcgYHNlYW1jYWxsX3ByZXJyX3JldGAqKgoKT2theSwgc28gYHNlYW1jYWxsX3ByZXJyX3JldGAgaW52b2x2ZXMgYSBgU0VBTUNBTExgIGluc3RydWN0aW9uLCB3aGljaCBpcyBwcmV0dHkgbmljaGUuIEl0JiMzOTtzIGEgVk1YIGluc3RydWN0aW9uLCBtZWFuaW5nIGl0IG5lZWRzIFZNWCByb290IG9wZXJhdGlvbiwgYW5kIGNyaXRpY2FsbHksIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQg4oCTIG5hbWVseSwgYW4gSW50ZWwgVERYIG1vZHVsZSBsb2FkZWQgd2l0aGluIHRoZSBTRUFNIHJhbmdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSB0cmlnZ2VyZWQgaW4gUUVNVT8gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgbm8uIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgVERYIG1vZHVsZSBvciBgU0VBTUNBTExgLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGVudmlyb25tZW50IEkgd29yayBpbiwgc3l6a2FsbGVyLCBpc24mIzM5O3Qgc2V0IHVwIHRvIHJ1biB3aXRoIFREWCBlbXVsYXRpb24sIGF0IGxlYXN0IG5vdCB0aGF0IEkmIzM5O20gYXdhcmUgb2YuCgpUaGF0IG1ha2VzIG1lIHdvbmRlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJ1biogb24gcmVhbCBURFggaGFyZHdhcmUgYW55d2hlcmU/IFRoZSBjb250ZXh0IG1lbnRpb25zIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBoaXRzIGhvbWUuIFREWCBob3N0IGNvZGUgZGVtYW5kcyAqYWN0dWFsKiBwaHlzaWNhbCBURFggaGFyZHdhcmUsIHdpdGggdGhlIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgdGhpcyBlZmZlY3RpdmVseSBtZWFucyB0aGlzIGNvZGUgaXMgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHR5cGljYWwgUUVNVS9HQ0UgZGV2ZWxvcG1lbnQgc2V0dXAuCgpOb3csIGEga2VybmVsIGJ1ZyBpcyBhIGtlcm5lbCBidWcsIGFuZCBJIGNhbiYjMzk7dCBqdXN0IHRocm93IHVwIG15IGhhbmRzLiBJcyB0aGVyZSAqYW55KiB0cmljayB0byB0cnkgYW5kICYjMzQ7ZmFrZSYjMzQ7IGBzZWFtY2FsbGAgc28gSSBjYW4gdGVzdCBhcm91bmQgaXQ/IE9rYXksIHRpbWUgdG8gZ28gYmFjayB0byBiYXNpY3MsIGFuZCBjaGVjayBgc2VhbWNhbGxfcHJlcnJfcmV0YCBpdHNlbGYgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlYW1jYWxsX3ByZXJyX3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaD04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzY19yZXRyeV9wcmVycihzY19mdW5jX3QgZnVuYyxcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDUtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaDoxMDY6I2RlZmluZSBzZWFtY2FsbF9wcmVycl9yZXQoX19mbiwgX19hcmdzKVx0XHRcdFx0XHRcXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA3LVx0c2NfcmV0cnlfcHJlcnIoX19zZWFtY2FsbF9yZXQsIHNlYW1jYWxsX2Vycl9yZXQsIChfX2ZuKSwgKF9fYXJncykpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTMzMD1zdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zNDAtXHRhcmdzLnJkeCA9IGZpZWxkX2lkO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjM0MTpcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1JELCBcdTAwMjZhcmdzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zNDItXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzA5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzIzLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMjQ6XHRcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1RETVJfSU5JVCwgXHUwMDI2YXJncyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMyNS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYF9fc2VhbWNhbGxfcmV0YCoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHJldHVybiB2YWx1ZSwgc3BlY2lmaWNhbGx5IGBfX3NlYW1jYWxsX3JldGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aHkqIHdlJiMzOTtyZSBleGFtaW5pbmcgdGhpcy4gSXMgaXQgYSBzdXNwZWN0ZWQgaXNzdWU/IEFyZSB3ZSB0cmFjaW5nIGEgYnVnPyBPciBhcmUgd2Ugc2ltcGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGNvbnRyb2wgZmxvdyBtb3JlIGRlZXBseSBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGU/IEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZXMsIGBfX3NlYW1jYWxsX3JldGAgaXMgbGlrZWx5IGEgc2VhbSBjYWxsIHJldHVybiB2YWx1ZSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IHdoYXQgY29udGV4dCBhcmUgd2UgaW4/IFdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIHZhbHVlLCBhcyBpdCBjb3VsZCBwb2ludCB0b3dhcmQgYSBudW1iZXIgb2YgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NlYW1jYWxsX3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUz0yMz1TWU1fRlVOQ19FTkQoX19zZWFtY2FsbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yNS0vKlxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6MjY6ICogX19zZWFtY2FsbF9yZXQoKSAtIEhvc3Qtc2lkZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIFNFQU0gc29mdHdhcmVcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTI3LSAqICh0aGUgUC1TRUFNTERSIG9yIHRoZSBURFggbW9kdWxlKSwgd2l0aCBzYXZpbmcgb3V0cHV0IHJlZ2lzdGVycyB0b1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTI5LSAqXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzozMDogKiBfX3NlYW1jYWxsX3JldCgpIGZ1bmN0aW9uIEFCSTpcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTMxLSAqXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtMzktICovXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzo0MDpTWU1fRlVOQ19TVEFSVChfX3NlYW1jYWxsX3JldClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTQxLVx0VERYX01PRFVMRV9DQUxMIGhvc3Q9MSByZXQ9MVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6NDI6U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGxfcmV0KVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtNDMtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9MjA9dTY0IF9fc2VhbWNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjIxOnU2NCBfX3NlYW1jYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMjItdTY0IF9fc2VhbWNhbGxfc2F2ZWRfcmV0KHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9NDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgc2NfcmV0cnkoc2NfZnVuY190IGZ1bmMsIHU2NCBmbixcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC02MC0jZGVmaW5lIHNlYW1jYWxsKF9mbiwgX2FyZ3MpXHRcdHNjX3JldHJ5KF9fc2VhbWNhbGwsIChfZm4pLCAoX2FyZ3MpKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6NjE6I2RlZmluZSBzZWFtY2FsbF9yZXQoX2ZuLCBfYXJncylcdHNjX3JldHJ5KF9fc2VhbWNhbGxfcmV0LCAoX2ZuKSwgKF9hcmdzKSlcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oLTYyLSNkZWZpbmUgc2VhbWNhbGxfc2F2ZWRfcmV0KF9mbiwgX2FyZ3MpXHRzY19yZXRyeShfX3NlYW1jYWxsX3NhdmVkX3JldCwgKF9mbiksIChfYXJncykpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc2NfcmV0cnlfcHJlcnIoc2NfZnVuY190IGZ1bmMsXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA2LSNkZWZpbmUgc2VhbWNhbGxfcHJlcnJfcmV0KF9fZm4sIF9fYXJncylcdFx0XHRcdFx0XFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjEwNzpcdHNjX3JldHJ5X3ByZXJyKF9fc2VhbWNhbGxfcmV0LCBzZWFtY2FsbF9lcnJfcmV0LCAoX19mbiksIChfX2FyZ3MpKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA4LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTgyPXN0YXRpYyBib29sIHBhZGRyX2lzX3RkeF9wcml2YXRlKHVuc2lnbmVkIGxvbmcgcGh5cylcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5Mi1cdC8qIEdldCBwYWdlIHR5cGUgZnJvbSB0aGUgVERYIG1vZHVsZSAqL1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1OTM6XHRzcmV0ID0gX19zZWFtY2FsbF9kaXJ0eV9jYWNoZShfX3NlYW1jYWxsX3JldCwgVERIX1BIWU1FTV9QQUdFX1JETUQsIFx1MDAyNmFyZ3MpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2Ugb2YgYF9fc2VhbWNhbGxfcmV0YCB3aGljaCByZWxpZXMgb24gYFREWF9NT0RVTEVfQ0FMTGAsIHVzaW5nIHRoZSBgc2VhbWNhbGxgIGluc3RydWN0aW9uLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgVERYLXNwZWNpZmljLCBhbmQgYHNlYW1jYWxsYCAqbmVlZHMqIFREWCBoYXJkd2FyZS4gUUVNVSwgaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFREWCBob3N0IHBsYXRmb3JtIG9yIFNFQU0gY2FsbHMsIHNvIGV4ZWN1dGluZyB0aGF0IGNvZGUgcGF0aCBkaXJlY3RseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50IGlzIGEgbm9uLXN0YXJ0ZXIuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBiZSBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0byB0cmljayB0aGluZ3M/IEkgZHVnIGRlZXBlci4gVGhlIGZ1bmN0aW9uIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCB3aWxsIHJlYWQgZnJvbSBgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HYC4gSWYgdGhhdCByZWFkIGZhaWxzLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IHRoZSBgLUVJTlZBTGAgYW5kIHRoZXJlZm9yZSwgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgc2V0LCBzbyB3ZSBjYW4mIzM5O3QgZ2V0IHRoZXJlLiBFdmVuIGlmIHdlICpzb21laG93KiBtYW5hZ2VkIHRvIGJ5cGFzcyB0aGF0IGNoZWNrIChleHRyZW1lbHkgdW5saWtlbHkpLCB0aGUgYHNlYW1jYWxsYCBpbnN0cnVjdGlvbiBpdHNlbGYgaXMgZ29pbmcgdG8gZ2VuZXJhdGUgYSAjVUQgb3IgZmFpbCBiZWNhdXNlIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgVERYIGhvc3QgZW11bGF0aW9uIG5lY2Vzc2FyeS4gV2UgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBvdGhlciB1c2VzIG9mIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAgYW5kIGNvbmZpcm0gdGhhdCBpdCBpcyBvbmx5IHVzZWQgaW4gVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZS4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUsIHRoZSByZWZhY3RvcmluZyBvZiBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AsIGlzIHBhcnQgb2YgdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdoaWNoIGlzIGB0ZHhfaW5pdGAsIGB0ZHhfZW5hYmxlYCBhbmQgYGluaXRfdGR4X21vZHVsZWAuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgcmVhbCBURFggaGFyZHdhcmUgYW5kIGEgQklPUyB0aGF0IHN1cHBvcnRzIGl0LCB2aWEgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgQ1BVIGZlYXR1cmUgYW5kIHRoZSBgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HYCBjaGVjay4gVGhlIHVzZSBvZiBgU0VBTUNBTExgIGNvbmZpcm1zIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGxvYWRlZCBJbnRlbCBURFggbW9kdWxlIGluIHRoZSBTRUFNIHJhbmdlLgoKVGhlcmVmb3JlLCBzaW5jZSB3ZSYjMzk7cmUgYW5hbHl6aW5nIHRoaXMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBsaWtlbHkgUUVNVSBvciBhIHNpbWlsYXJseSBjb25zdHJhaW5lZCBlbnZpcm9ubWVudCwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZXhlY3V0ZSB0aGlzIGNvZGUuIEl0JiMzOTtzIG5vdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGZ1enppbmcgZW52aXJvbm1lbnQuCgpJIHdpbGwgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MTQuMDEyNzM2NTY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTE4NDA4NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMToxNC4wMTI3NDQwNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODkzMDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1MDM5MjUyMzY4ZmVjNTQ3OThiZDI3M2IyOGY4ZDExMWMzZWUzMzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5pbmRleCA0MTE1MGQ1NDY1ODljLi5hODZiZTllNWVjNzcwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbkBAIC0xLDEwICsxLDE1IEBAXFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKyNpZm5kZWYgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKyNkZWZpbmUgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKy8qXFxuKyAqIFREWCBtb2R1bGUgXFxcIkdsb2JhbCBTY29wZSBNZXRhZGF0YVxcXCIgYXMgZG9jdW1lbnRlZCBpbiB0aGUgSW50ZWwgVERYXFxuKyAqIE1vZHVsZSBBQkkgc3BlYy4gRWFjaCBzdWItc3RydWN0dXJlIGJlbG93IGNvcnJlc3BvbmRzIHRvIG9uZSBURFhcXG4rICogbWV0YWRhdGEgXFxcIkNsYXNzXFxcIjsgaXRzIG1lbWJlcnMgYXJlIHBvcHVsYXRlZCB2aWEgVERILlNZUy5SRCBTRUFNQ0FMTHMuXFxuKyAqL1xcbitcXG4gc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uIHtcXG4gXFx0dTE2IG1pbm9yX3ZlcnNpb247XFxuIFxcdHUxNiBtYWpvcl92ZXJzaW9uO1xcbkBAIC01Miw0ICs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xcbiBcXHRzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgdGRfY29uZjtcXG4gfTtcXG4gXFxuLSNlbmRpZlxcbisjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDQyZGY4ZWE0NjRjNDcuLjU5MDk5Y2MxNWY3YWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuQEAgLTM0Nyw3ICszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaW5jbHVkZSBcXFwidGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxcIlxcbisvKlxcbisgKiBNYXBwaW5nIGJldHdlZW4gYSBURFggZ2xvYmFsIG1ldGFkYXRhIGZpZWxkIGFuZCB0aGUgQyBtZW1iZXIgdGhhdFxcbisgKiBob2xkcyBpdHMgdmFsdWUuIFVzZSBURF9TWVNJTkZPX01BUCgpIHRvIHBvcHVsYXRlIGVudHJpZXMuXFxuKyAqL1xcbitzdHJ1Y3QgdGR4X3N5c19maWVsZCB7XFxuK1xcdHU2NCBmaWVsZF9pZDtcXG4rXFx0dTE2IG9mZnNldDtcXG4rXFx0dTggIHNpemU7XFxuK307XFxuK1xcbisvKlxcbisgKiBUaGUgc2l6ZSBlbmNvZGVkIGluIHRoZSBmaWVsZCBJRCBhbmQgdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIENcXG4rICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuXFxuKyAqL1xcbisjZGVmaW5lIFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgX3N0cnVjdCwgX21lbWJlcilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0Lm9mZnNldCAgID0gb2Zmc2V0b2Yoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpLFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSArXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgQlVJTERfQlVHX09OX1pFUk8oXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRzaXplb2ZfZmllbGQoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpICE9XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFxcdFxcXFxcXG4rXFx0fVxcbitcXG4rLypcXG4rICogV2FsayBhIHRhYmxlIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGRzLCByZWFkIGVhY2ggdmlhIFRESC5TWVMuUkQsXFxuKyAqIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIG1hdGNoaW5nIEMgbWVtYmVyIG9mICpAYmFzZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG5yX2ZpZWxkcywgdm9pZCAqYmFzZSlcXG4re1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXHR1NjQgdmFsO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2ZpZWxkczsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmID0gXFx1MDAyNmZpZWxkc1tpXTtcXG4rXFxuK1xcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXFx1MDAzZWZpZWxkX2lkLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoZi1cXHUwMDNlc2l6ZSkge1xcbitcXHRcXHRjYXNlIDE6ICoodTggICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcXG4rXFx0XFx0Y2FzZSAyOiAqKHUxNiAqKShiYXNlICsgZi1cXHUwMDNlb2Zmc2V0KSA9IHZhbDsgYnJlYWs7XFxuK1xcdFxcdGNhc2UgNDogKih1MzIgKikoYmFzZSArIGYtXFx1MDAzZW9mZnNldCkgPSB2YWw7IGJyZWFrO1xcbitcXHRcXHRjYXNlIDg6ICoodTY0ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb192ZXJzaW9uLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XFxuK1xcdE1BUF9WRVJTSU9OKE1JTk9SX1ZFUlNJT04sXFx0bWlub3JfdmVyc2lvbiksXFxuK1xcdE1BUF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sXFx0bWFqb3JfdmVyc2lvbiksXFxuK1xcdE1BUF9WRVJTSU9OKFVQREFURV9WRVJTSU9OLFxcdHVwZGF0ZV92ZXJzaW9uKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh2ZXJzaW9uX2ZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodmVyc2lvbl9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3lzaW5mb192ZXJzaW9uKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfRkVBVFVSRVMoX2ZpZWxkX2lkLCBfbWVtYmVyKVxcdFxcXFxcXG4rXFx0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMsIF9tZW1iZXIpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuK1xcdE1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLFxcdHRkeF9mZWF0dXJlczApLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShmZWF0dXJlc19maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb190ZG1yLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkbXJfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuK1xcdE1BUF9URE1SKE1BWF9URE1SUyxcXHRcXHRtYXhfdGRtcnMpLFxcbitcXHRNQVBfVERNUihNQVhfUkVTRVJWRURfUEVSX1RETVIsXFx0bWF4X3Jlc2VydmVkX3Blcl90ZG1yKSxcXG4rXFx0TUFQX1RETVIoUEFNVF80S19FTlRSWV9TSVpFLFxcdHBhbXRfNGtfZW50cnlfc2l6ZSksXFxuK1xcdE1BUF9URE1SKFBBTVRfMk1fRU5UUllfU0laRSxcXHRwYW10XzJtX2VudHJ5X3NpemUpLFxcbitcXHRNQVBfVERNUihQQU1UXzFHX0VOVFJZX1NJWkUsXFx0cGFtdF8xZ19lbnRyeV9zaXplKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4re1xcbitcXHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodGRtcl9maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHRkbXJfZmllbGRzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN5c2luZm9fdGRtcik7XFxuK31cXG4rXFxuKyNkZWZpbmUgTUFQX1REX0NUUkwoX2ZpZWxkX2lkLCBfbWVtYmVyKVxcdFxcXFxcXG4rXFx0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRfY3RybCwgX21lbWJlcilcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbitcXHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFxcdHRkcl9iYXNlX3NpemUpLFxcbitcXHRNQVBfVERfQ1RSTChURENTX0JBU0VfU0laRSxcXHR0ZGNzX2Jhc2Vfc2l6ZSksXFxuK1xcdE1BUF9URF9DVFJMKFREVlBTX0JBU0VfU0laRSxcXHR0ZHZwc19iYXNlX3NpemUpLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jdHJsX2ZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodGRfY3RybF9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3lzaW5mb190ZF9jdHJsKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfSEFORE9GRihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XFxuK1xcdE1BUF9IQU5ET0ZGKE1PRFVMRV9IVixcXHRtb2R1bGVfaHYpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQVJSQVlfU0laRShoYW5kb2ZmX2ZpZWxkcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzeXNpbmZvX2hhbmRvZmYpO1xcbit9XFxuK1xcbisjZGVmaW5lIE1BUF9URF9DT05GKF9maWVsZF9pZCwgX21lbWJlcilcXHRcXFxcXFxuK1xcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXFxuK1xcbisvKlxcbisgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcXFwiVEQgQ29uZmlndXJhdGlvblxcXCIgY2xhc3MuICBudW1fY3B1aWRfY29uZmlnXFxuKyAqIG11c3QgYmUgcHJlc2VudCBoZXJlIChhbmQgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgQ1BVSUQgYXJyYXlzXFxuKyAqIGJlbG93KSBiZWNhdXNlIGl0IHNpemVzIHRoZW0uXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY29uZl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcXG4rXFx0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsXFx0YXR0cmlidXRlc19maXhlZDApLFxcbitcXHRNQVBfVERfQ09ORihBVFRSSUJVVEVTX0ZJWEVEMSxcXHRhdHRyaWJ1dGVzX2ZpeGVkMSksXFxuK1xcdE1BUF9URF9DT05GKFhGQU1fRklYRUQwLFxcdHhmYW1fZml4ZWQwKSxcXG4rXFx0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsXFx0eGZhbV9maXhlZDEpLFxcbitcXHRNQVBfVERfQ09ORihOVU1fQ1BVSURfQ09ORklHLFxcdG51bV9jcHVpZF9jb25maWcpLFxcbitcXHRNQVBfVERfQ09ORihNQVhfVkNQVVNfUEVSX1RELFxcdG1heF92Y3B1c19wZXJfdGQpLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZilcXG4re1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodGRfY29uZl9maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFSUkFZX1NJWkUodGRfY29uZl9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICB0ZF9jb25mKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzIGFyZSBzaXplZCBhdCBydW50aW1lIGJ5XFxuK1xcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJ3QgYmUgZXhwcmVzc2VkIGluIGEgc3RhdGljXFxuK1xcdCAqIFREX1NZU0lORk9fTUFQIHRhYmxlLiAgVGhlaXIgZmllbGQgSURzIGFyZSBjb250aWd1b3VzIGZyb21cXG4rXFx0ICogdGhlIGJhc2VzIGFubm91bmNlZCBieSB0aGUgc3BlYy5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZF9jb25mLVxcdTAwM2VudW1fY3B1aWRfY29uZmlnIFxcdTAwM2UgQVJSQVlfU0laRSh0ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSB8fFxcbitcXHQgICAgdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKykge1xcbitcXHRcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICsgaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIDI7IGorKykge1xcbitcXHRcXHRcXHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyArIGkgKiAyICsgajtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcXHUwMDI2c3lzaW5mby1cXHUwMDNldmVyc2lvbik7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJNb2R1bGUgdmVyc2lvbjogXFxcIiBURFhfVkVSU0lPTl9GTVQgXFxcIlxcXFxuXFxcIixcXG4rXFx0XFx0c3lzaW5mby1cXHUwMDNldmVyc2lvbi5tYWpvcl92ZXJzaW9uLFxcbitcXHRcXHRzeXNpbmZvLVxcdTAwM2V2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sXFxuK1xcdFxcdHN5c2luZm8tXFx1MDAzZXZlcnNpb24udXBkYXRlX3ZlcnNpb24pO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoXFx1MDAyNnN5c2luZm8tXFx1MDAzZWZlYXR1cmVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRtcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2N0cmwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuK31cXG4gXFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNTgsNiArNTgsNzIgQEBcXG4gICovXFxuICNkZWZpbmUgVERYX1ZFUlNJT05fU0hJRlRcXHRcXHQxNlxcbiBcXG4rLypcXG4rICogR2xvYmFsIFNjb3BlIE1ldGFkYXRhIGZpZWxkIElEcy5cXG4rICpcXG4rICogU2VlIFxcXCJHbG9iYWwtU2NvcGUgKFREWCBNb2R1bGUpIE1ldGFkYXRhXFxcIiBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQklcXG4rICogc3BlYy5cXG4rICpcXG4rICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhIFxcXCJDbGFzc1xcXCJcXG4rICogKHdoaWNoIExpbnV4IG1pcnJvcnMgaW4gJ3N0cnVjdCB0ZHhfc3lzX2luZm8nIHN1Yi1zdHJ1Y3R1cmVzKSxcXG4rICogdGhlIGVsZW1lbnQgc2l6ZSwgYW5kIGEgcGVyLWNsYXNzIGZpZWxkIGluZGV4LiBFYWNoIElEIGJlbG93XFxuKyAqIGlzIHBhaXJlZCB3aXRoIHRoZSBDIG1lbWJlciB0aGF0IGhvbGRzIGl0cyB2YWx1ZS5cXG4rICovXFxuK1xcbisvKiBDbGFzcyBcXFwiVERYIE1vZHVsZSBWZXJzaW9uXFxcIiAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01JTk9SX1ZFUlNJT05cXHRcXHQweDA4MDAwMDAxMDAwMDAwMDNVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQUpPUl9WRVJTSU9OXFx0XFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfVVBEQVRFX1ZFUlNJT05cXHRcXHQweDA4MDAwMDAxMDAwMDAwMDVVTExcXG4rXFxuKy8qIENsYXNzIFxcXCJURFggRmVhdHVyZXNcXFwiICovXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERYX0ZFQVRVUkVTMFxcdFxcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxcbitcXG4rLyogQ2xhc3MgXFxcIlRETVIgSW5mb1xcXCIgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVERNUlNcXHRcXHRcXHQweDkxMDAwMDAxMDAwMDAwMDhVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfUkVTRVJWRURfUEVSX1RETVJcXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzRLX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTBVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzJNX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTFVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzFHX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTJVTExcXG4rXFxuKy8qIENsYXNzIFxcXCJURCBDb250cm9sIFN0cnVjdHVyZXNcXFwiICovXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERSX0JBU0VfU0laRVxcdFxcdDB4OTgwMDAwMDEwMDAwMDAwMFVMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1REQ1NfQkFTRV9TSVpFXFx0XFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERWUFNfQkFTRV9TSVpFXFx0XFx0MHg5ODAwMDAwMTAwMDAwMjAwVUxMXFxuK1xcbisvKiBDbGFzcyBcXFwiVEQgQ29uZmlndXJhdGlvblxcXCIgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9BVFRSSUJVVEVTX0ZJWEVEMFxcdFxcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxXFx0XFx0MHgxOTAwMDAwMzAwMDAwMDAxVUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDBcXHRcXHRcXHQweDE5MDAwMDAzMDAwMDAwMDJVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMVxcdFxcdFxcdDB4MTkwMDAwMDMwMDAwMDAwM1VMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX05VTV9DUFVJRF9DT05GSUdcXHRcXHQweDk5MDAwMDAxMDAwMDAwMDRVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1REXFx0XFx0MHg5OTAwMDAwMTAwMDAwMDA4VUxMXFxuK1xcbisvKiBDbGFzcyBcXFwiVERYIE1vZHVsZSBIYW5kb2ZmXFxcIiAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01PRFVMRV9IVlxcdFxcdFxcdDB4ODkwMDAwMDEwMDAwMDAwMFVMTFxcbitcXG4rLypcXG4rICogQmFzZSBJRHMgZm9yIHRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzLiAgVGhlIGZpZWxkIElEIG9mIGxlYWZcXG4rICogaW5kZXggQGkgaXMgQkFTRSArIGk7IGZvciB0aGUgdmFsdWVzIGFycmF5LCBzdWItZW50cnkgQGogb2YgaW5kZXhcXG4rICogQGkgaXMgQkFTRSArIGkqMiArIGouXFxuKyAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVNcXHRcXHQweDk5MDAwMDAzMDAwMDA0MDBVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfVkFMVUVTXFx0XFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXFxuK1xcbisvKlxcbisgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXFxuKyAqXFxuKyAqIFNlZSBcXFwiTURfRklFTERfSUQgKE1ldGFkYXRhIEZpZWxkIElkZW50aWZpZXIgLyBTZXF1ZW5jZSBIZWFkZXIpXFxuKyAqIERlZmluaXRpb25cXFwiIGluIHRoZSBJbnRlbCBURFggTW9kdWxlIEFCSSBzcGVjLlxcbisgKlxcbisgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGFcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50J3Mgc2l6ZSBpbiBieXRlc1xcbisgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRV9DT0RFKGZpZWxkX2lkKVxcdFxcXFxcXG4rXFx0KCgoZmllbGRfaWQpIFxcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXFx1MDAzZVxcdTAwM2UgMzIpXFxuK1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0VMRV9TSVpFKGZpZWxkX2lkKVxcdFxcdFxcXFxcXG4rXFx0KDEgXFx1MDAzY1xcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXFxuK1xcbiAvKiBURFggcGFnZSB0eXBlcyAqL1xcbiAjZGVmaW5lXFx0UFRfTkRBXFx0XFx0MHgwXFxuICNkZWZpbmVcXHRQVF9SU1ZEXFx0XFx0MHgxXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMTMzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLypcXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4tICpcXG4tICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxcbi0gKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXFxuLSAqIEluY2x1ZGUgdGhpcyBmaWxlIHRvIG90aGVyIEMgZmlsZSBpbnN0ZWFkLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb192ZXJzaW9uLVxcdTAwM2VtaW5vcl92ZXJzaW9uID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3ZlcnNpb24tXFx1MDAzZW1ham9yX3ZlcnNpb24gPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdmVyc2lvbi1cXHUwMDNldXBkYXRlX3ZlcnNpb24gPSB2YWw7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXFxuLXtcXG4tXFx0aW50IHJldCA9IDA7XFxuLVxcdHU2NCB2YWw7XFxuLVxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX2ZlYXR1cmVzLVxcdTAwM2V0ZHhfZmVhdHVyZXMwID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VtYXhfdGRtcnMgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlbWF4X3Jlc2VydmVkX3Blcl90ZG1yID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSA9IHZhbDtcXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZF9jdHJsLVxcdTAwM2V0ZHJfYmFzZV9zaXplID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2N0cmwtXFx1MDAzZXRkY3NfYmFzZV9zaXplID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2N0cmwtXFx1MDAzZXRkdnBzX2Jhc2Vfc2l6ZSA9IHZhbDtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnN5c2luZm9fdGRfY29uZilcXG4te1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFx0dTY0IHZhbDtcXG4tXFx0aW50IGksIGo7XFxuLVxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZWF0dHJpYnV0ZXNfZml4ZWQwID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMSwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZWF0dHJpYnV0ZXNfZml4ZWQxID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMiwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZXhmYW1fZml4ZWQwID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMywgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZXhmYW1fZml4ZWQxID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwNCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWcgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5OTAwMDAwMTAwMDAwMDA4LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbWF4X3ZjcHVzX3Blcl90ZCA9IHZhbDtcXG4tXFx0aWYgKHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcXG4tXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgKyBpLCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdFxcdHN5c2luZm9fdGRfY29uZi1cXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcXG4tXFx0aWYgKHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIDI7IGorKylcXG4tXFx0XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA1MDAgKyBpICogMiArIGosIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0XFx0XFx0c3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTY0IHZhbDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4ODkwMDAwMDEwMDAwMDAwMCwgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzeXNpbmZvX2hhbmRvZmYtXFx1MDAzZW1vZHVsZV9odiA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4te1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oXFx1MDAyNnN5c2luZm8tXFx1MDAzZXZlcnNpb24pO1xcbi1cXG4tXFx0cHJfaW5mbyhcXFwiTW9kdWxlIHZlcnNpb246IFxcXCIgVERYX1ZFUlNJT05fRk1UIFxcXCJcXFxcblxcXCIsXFxuLVxcdFxcdHN5c2luZm8tXFx1MDAzZXZlcnNpb24ubWFqb3JfdmVyc2lvbixcXG4tXFx0XFx0c3lzaW5mby1cXHUwMDNldmVyc2lvbi5taW5vcl92ZXJzaW9uLFxcbi1cXHRcXHRzeXNpbmZvLVxcdTAwM2V2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTtcXG4tXFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcyk7XFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkbXIpO1xcbi1cXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4tXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjE0LjU2Mjc4MDcxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5OTY4MzU1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuaW5kZXggNDExNTBkNTQ2NTg5Yy4uYTg2YmU5ZTVlYzc3MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMSwxMCArMSwxNSBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVERYIGdsb2JhbCBtZXRhZGF0YSBzdHJ1Y3R1cmVzLiAqL1xuLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4rI2lmbmRlZiBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbisjZGVmaW5lIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbisvKlxuKyAqIFREWCBtb2R1bGUgXCJHbG9iYWwgU2NvcGUgTWV0YWRhdGFcIiBhcyBkb2N1bWVudGVkIGluIHRoZSBJbnRlbCBURFhcbisgKiBNb2R1bGUgQUJJIHNwZWMuIEVhY2ggc3ViLXN0cnVjdHVyZSBiZWxvdyBjb3JyZXNwb25kcyB0byBvbmUgVERYXG4rICogbWV0YWRhdGEgXCJDbGFzc1wiOyBpdHMgbWVtYmVycyBhcmUgcG9wdWxhdGVkIHZpYSBUREguU1lTLlJEIFNFQU1DQUxMcy5cbisgKi9cbitcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24ge1xuIFx0dTE2IG1pbm9yX3ZlcnNpb247XG4gXHR1MTYgbWFqb3JfdmVyc2lvbjtcbkBAIC01Miw0ICs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xuIFx0c3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7XG4gfTtcbiBcbi0jZW5kaWZcbisjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5pbmRleCA0MmRmOGVhNDY0YzQ3Li41OTA5OWNjMTVmN2FhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zNDcsNyArMzQ3LDIyMSBAQCBzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpbmNsdWRlIFwidGR4X2dsb2JhbF9tZXRhZGF0YS5jXCJcbisvKlxuKyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0XG4rICogaG9sZHMgaXRzIHZhbHVlLiBVc2UgVERfU1lTSU5GT19NQVAoKSB0byBwb3B1bGF0ZSBlbnRyaWVzLlxuKyAqL1xuK3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHtcbitcdHU2NCBmaWVsZF9pZDtcbitcdHUxNiBvZmZzZXQ7XG4rXHR1OCAgc2l6ZTtcbit9O1xuK1xuKy8qXG4rICogVGhlIHNpemUgZW5jb2RlZCBpbiB0aGUgZmllbGQgSUQgYW5kIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBDXG4rICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuXG4rICovXG4rI2RlZmluZSBURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIF9zdHJ1Y3QsIF9tZW1iZXIpXHRcdFx0XHRcXFxuK1x0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFx0XHRcdFx0XFxcbitcdFx0Lm9mZnNldCAgID0gb2Zmc2V0b2Yoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpLFx0XHRcdFxcXG4rXHRcdC5zaXplICAgICA9IHNpemVvZl9maWVsZChzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlcikgK1x0XHRcXFxuK1x0XHRcdCAgICBCVUlMRF9CVUdfT05fWkVSTyhcdFx0XHRcdFx0XFxcbitcdFx0XHRcdHNpemVvZl9maWVsZChzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlcikgIT1cdFxcXG4rXHRcdFx0XHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFx0XFxcbitcdH1cbitcbisvKlxuKyAqIFdhbGsgYSB0YWJsZSBvZiBURFggZ2xvYmFsIG1ldGFkYXRhIGZpZWxkcywgcmVhZCBlYWNoIHZpYSBUREguU1lTLlJELFxuKyAqIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIG1hdGNoaW5nIEMgbWVtYmVyIG9mICpAYmFzZS5cbisgKi9cbitzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmaWVsZHMsXG4rXHRcdFx0XHQgICBpbnQgbnJfZmllbGRzLCB2b2lkICpiYXNlKVxuK3tcbitcdGludCBpLCByZXQ7XG4rXHR1NjQgdmFsO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmllbGRzOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmYgPSBcdTAwMjZmaWVsZHNbaV07XG4rXG4rXHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXHUwMDNlZmllbGRfaWQsIFx1MDAyNnZhbCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3dpdGNoIChmLVx1MDAzZXNpemUpIHtcbitcdFx0Y2FzZSAxOiAqKHU4ICAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSAyOiAqKHUxNiAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSA0OiAqKHUzMiAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSA4OiAqKHU2NCAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1ZFUlNJT04oX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3ZlcnNpb24sIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XG4rXHRNQVBfVkVSU0lPTihNSU5PUl9WRVJTSU9OLFx0bWlub3JfdmVyc2lvbiksXG4rXHRNQVBfVkVSU0lPTihNQUpPUl9WRVJTSU9OLFx0bWFqb3JfdmVyc2lvbiksXG4rXHRNQVBfVkVSU0lPTihVUERBVEVfVkVSU0lPTixcdHVwZGF0ZV92ZXJzaW9uKSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxuK3tcbitcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh2ZXJzaW9uX2ZpZWxkcyxcbitcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKHZlcnNpb25fZmllbGRzKSxcbitcdFx0XHRcdCAgICAgICBzeXNpbmZvX3ZlcnNpb24pO1xuK31cbitcbisjZGVmaW5lIE1BUF9GRUFUVVJFUyhfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuK1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGZlYXR1cmVzX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuK1x0TUFQX0ZFQVRVUkVTKFREWF9GRUFUVVJFUzAsXHR0ZHhfZmVhdHVyZXMwKSxcbit9O1xuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcylcbit7XG4rXHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoZmVhdHVyZXNfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUoZmVhdHVyZXNfZmllbGRzKSxcbitcdFx0XHRcdCAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTtcbit9XG4rXG4rI2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuK1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcilcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbitcdE1BUF9URE1SKE1BWF9URE1SUyxcdFx0bWF4X3RkbXJzKSxcbitcdE1BUF9URE1SKE1BWF9SRVNFUlZFRF9QRVJfVERNUixcdG1heF9yZXNlcnZlZF9wZXJfdGRtciksXG4rXHRNQVBfVERNUihQQU1UXzRLX0VOVFJZX1NJWkUsXHRwYW10XzRrX2VudHJ5X3NpemUpLFxuK1x0TUFQX1RETVIoUEFNVF8yTV9FTlRSWV9TSVpFLFx0cGFtdF8ybV9lbnRyeV9zaXplKSxcbitcdE1BUF9URE1SKFBBTVRfMUdfRU5UUllfU0laRSxcdHBhbXRfMWdfZW50cnlfc2l6ZSksXG4rfTtcbitcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodGRtcl9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRtcik7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1REX0NUUkwoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2N0cmwsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2N0cmxfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4rXHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFx0dGRyX2Jhc2Vfc2l6ZSksXG4rXHRNQVBfVERfQ1RSTChURENTX0JBU0VfU0laRSxcdHRkY3NfYmFzZV9zaXplKSxcbitcdE1BUF9URF9DVFJMKFREVlBTX0JBU0VfU0laRSxcdHRkdnBzX2Jhc2Vfc2l6ZSksXG4rfTtcbitcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsICpzeXNpbmZvX3RkX2N0cmwpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2N0cmxfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodGRfY3RybF9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRfY3RybCk7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX0hBTkRPRkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX2hhbmRvZmYsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XG4rXHRNQVBfSEFORE9GRihNT0RVTEVfSFYsXHRtb2R1bGVfaHYpLFxuK307XG4rXG4rc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUoaGFuZG9mZl9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9faGFuZG9mZik7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1REX0NPTkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXG4rXG4rLypcbisgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcIlREIENvbmZpZ3VyYXRpb25cIiBjbGFzcy4gIG51bV9jcHVpZF9jb25maWdcbisgKiBtdXN0IGJlIHByZXNlbnQgaGVyZSAoYW5kIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIENQVUlEIGFycmF5c1xuKyAqIGJlbG93KSBiZWNhdXNlIGl0IHNpemVzIHRoZW0uXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4rXHRNQVBfVERfQ09ORihBVFRSSUJVVEVTX0ZJWEVEMCxcdGF0dHJpYnV0ZXNfZml4ZWQwKSxcbitcdE1BUF9URF9DT05GKEFUVFJJQlVURVNfRklYRUQxLFx0YXR0cmlidXRlc19maXhlZDEpLFxuK1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsXHR4ZmFtX2ZpeGVkMCksXG4rXHRNQVBfVERfQ09ORihYRkFNX0ZJWEVEMSxcdHhmYW1fZml4ZWQxKSxcbitcdE1BUF9URF9DT05GKE5VTV9DUFVJRF9DT05GSUcsXHRudW1fY3B1aWRfY29uZmlnKSxcbitcdE1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsXHRtYXhfdmNwdXNfcGVyX3RkKSxcbit9O1xuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXG4re1xuK1x0aW50IHJldCwgaSwgajtcbitcbitcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2NvbmZfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgQVJSQVlfU0laRSh0ZF9jb25mX2ZpZWxkcyksXG4rXHRcdFx0XHQgICAgICB0ZF9jb25mKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGNvbmZpZ3VyYWJsZS1DUFVJRCBhcnJheXMgYXJlIHNpemVkIGF0IHJ1bnRpbWUgYnlcbitcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJ3QgYmUgZXhwcmVzc2VkIGluIGEgc3RhdGljXG4rXHQgKiBURF9TWVNJTkZPX01BUCB0YWJsZS4gIFRoZWlyIGZpZWxkIElEcyBhcmUgY29udGlndW91cyBmcm9tXG4rXHQgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLlxuK1x0ICovXG4rXHRpZiAodGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHRkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlcykgfHxcbitcdCAgICB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKykge1xuK1x0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICsgaSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqKyspIHtcbitcdFx0XHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyArIGkgKiAyICsgajtcbitcbitcdFx0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChmaWQsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG4rXG4rXHRwcl9pbmZvKFwiTW9kdWxlIHZlcnNpb246IFwiIFREWF9WRVJTSU9OX0ZNVCBcIlxcblwiLFxuK1x0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWFqb3JfdmVyc2lvbixcbitcdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sXG4rXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi51cGRhdGVfdmVyc2lvbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhcdTAwMjZzeXNpbmZvLVx1MDAzZWZlYXR1cmVzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4rfVxuIFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNTgsNiArNTgsNzIgQEBcbiAgKi9cbiAjZGVmaW5lIFREWF9WRVJTSU9OX1NISUZUXHRcdDE2XG4gXG4rLypcbisgKiBHbG9iYWwgU2NvcGUgTWV0YWRhdGEgZmllbGQgSURzLlxuKyAqXG4rICogU2VlIFwiR2xvYmFsLVNjb3BlIChURFggTW9kdWxlKSBNZXRhZGF0YVwiIGluIHRoZSBJbnRlbCBURFggTW9kdWxlIEFCSVxuKyAqIHNwZWMuXG4rICpcbisgKiBBIGZpZWxkIElEIGlzIGEgNjQtYml0IHZhbHVlIHRoYXQgZW5jb2RlcyB0aGUgbWV0YWRhdGEgXCJDbGFzc1wiXG4rICogKHdoaWNoIExpbnV4IG1pcnJvcnMgaW4gJ3N0cnVjdCB0ZHhfc3lzX2luZm8nIHN1Yi1zdHJ1Y3R1cmVzKSxcbisgKiB0aGUgZWxlbWVudCBzaXplLCBhbmQgYSBwZXItY2xhc3MgZmllbGQgaW5kZXguIEVhY2ggSUQgYmVsb3dcbisgKiBpcyBwYWlyZWQgd2l0aCB0aGUgQyBtZW1iZXIgdGhhdCBob2xkcyBpdHMgdmFsdWUuXG4rICovXG4rXG4rLyogQ2xhc3MgXCJURFggTW9kdWxlIFZlcnNpb25cIiAqL1xuKyNkZWZpbmUgTURfRklFTERfSURfTUlOT1JfVkVSU0lPTlx0XHQweDA4MDAwMDAxMDAwMDAwMDNVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01BSk9SX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9VUERBVEVfVkVSU0lPTlx0XHQweDA4MDAwMDAxMDAwMDAwMDVVTExcbitcbisvKiBDbGFzcyBcIlREWCBGZWF0dXJlc1wiICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwXHRcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxuK1xuKy8qIENsYXNzIFwiVERNUiBJbmZvXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9URE1SU1x0XHRcdDB4OTEwMDAwMDEwMDAwMDAwOFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfTUFYX1JFU0VSVkVEX1BFUl9URE1SXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfNEtfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTBVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMk1fRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTFVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMUdfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTJVTExcbitcbisvKiBDbGFzcyBcIlREIENvbnRyb2wgU3RydWN0dXJlc1wiICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFJfQkFTRV9TSVpFXHRcdDB4OTgwMDAwMDEwMDAwMDAwMFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfVERDU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFZQU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMjAwVUxMXG4rXG4rLyogQ2xhc3MgXCJURCBDb25maWd1cmF0aW9uXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwXHRcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfQVRUUklCVVRFU19GSVhFRDFcdFx0MHgxOTAwMDAwMzAwMDAwMDAxVUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMFx0XHRcdDB4MTkwMDAwMDMwMDAwMDAwMlVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDFcdFx0XHQweDE5MDAwMDAzMDAwMDAwMDNVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX05VTV9DUFVJRF9DT05GSUdcdFx0MHg5OTAwMDAwMTAwMDAwMDA0VUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1REXHRcdDB4OTkwMDAwMDEwMDAwMDAwOFVMTFxuK1xuKy8qIENsYXNzIFwiVERYIE1vZHVsZSBIYW5kb2ZmXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01PRFVMRV9IVlx0XHRcdDB4ODkwMDAwMDEwMDAwMDAwMFVMTFxuK1xuKy8qXG4rICogQmFzZSBJRHMgZm9yIHRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzLiAgVGhlIGZpZWxkIElEIG9mIGxlYWZcbisgKiBpbmRleCBAaSBpcyBCQVNFICsgaTsgZm9yIHRoZSB2YWx1ZXMgYXJyYXksIHN1Yi1lbnRyeSBAaiBvZiBpbmRleFxuKyAqIEBpIGlzIEJBU0UgKyBpKjIgKyBqLlxuKyAqL1xuKyNkZWZpbmUgTURfRklFTERfSURfQ1BVSURfQ09ORklHX0xFQVZFU1x0XHQweDk5MDAwMDAzMDAwMDA0MDBVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19WQUxVRVNcdFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXG4rXG4rLypcbisgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXG4rICpcbisgKiBTZWUgXCJNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcilcbisgKiBEZWZpbml0aW9uXCIgaW4gdGhlIEludGVsIFREWCBNb2R1bGUgQUJJIHNwZWMuXG4rICpcbisgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGFcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQncyBzaXplIGluIGJ5dGVzXG4rICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRV9DT0RFKGZpZWxkX2lkKVx0XFxcbitcdCgoKGZpZWxkX2lkKSBcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXHUwMDNlXHUwMDNlIDMyKVxuK1xuKyNkZWZpbmUgTURfRklFTERfSURfRUxFX1NJWkUoZmllbGRfaWQpXHRcdFxcXG4rXHQoMSBcdTAwM2NcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXG4rXG4gLyogVERYIHBhZ2UgdHlwZXMgKi9cbiAjZGVmaW5lXHRQVF9OREFcdFx0MHgwXG4gI2RlZmluZVx0UFRfUlNWRFx0XHQweDFcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBlNDljMzAwZjIzZDQzLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwxMzMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuLSAqXG4tICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuLSAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbi0gKiBJbmNsdWRlIHRoaXMgZmlsZSB0byBvdGhlciBDIGZpbGUgaW5zdGVhZC5cbi0gKi9cbi1cbi1zdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gKnN5c2luZm9fdmVyc2lvbilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3ZlcnNpb24tXHUwMDNlbWlub3JfdmVyc2lvbiA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdmVyc2lvbi1cdTAwM2VtYWpvcl92ZXJzaW9uID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb192ZXJzaW9uLVx1MDAzZXVwZGF0ZV92ZXJzaW9uID0gdmFsO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0dTY0IHZhbDtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fZmVhdHVyZXMtXHUwMDNldGR4X2ZlYXR1cmVzMCA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlbWF4X3RkbXJzID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZW1heF9yZXNlcnZlZF9wZXJfdGRtciA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2N0cmwtXHUwMDNldGRyX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZGNzX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZHZwc19iYXNlX3NpemUgPSB2YWw7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICpzeXNpbmZvX3RkX2NvbmYpXG4te1xuLVx0aW50IHJldCA9IDA7XG4tXHR1NjQgdmFsO1xuLVx0aW50IGksIGo7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDIsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY29uZi1cdTAwM2VtYXhfdmNwdXNfcGVyX3RkID0gdmFsO1xuLVx0aWYgKHN5c2luZm9fdGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHN5c2luZm9fdGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZzsgaSsrKVxuLVx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgKyBpLCBcdTAwMjZ2YWwpKSlcbi1cdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcbi1cdGlmIChzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcdTAwM2UgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzaW5mb190ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgMjsgaisrKVxuLVx0XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDUwMCArIGkgKiAyICsgaiwgXHUwMDI2dmFsKSkpXG4tXHRcdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuLXtcbi1cdGludCByZXQ7XG4tXHR1NjQgdmFsO1xuLVxuLVx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg4OTAwMDAwMTAwMDAwMDAwLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN5c2luZm9faGFuZG9mZi1cdTAwM2Vtb2R1bGVfaHYgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcdTAwMjZzeXNpbmZvLVx1MDAzZXZlcnNpb24pO1xuLVxuLVx0cHJfaW5mbyhcIk1vZHVsZSB2ZXJzaW9uOiBcIiBURFhfVkVSU0lPTl9GTVQgXCJcXG5cIixcbi1cdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1ham9yX3ZlcnNpb24sXG4tXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi5taW5vcl92ZXJzaW9uLFxuLVx0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24udXBkYXRlX3ZlcnNpb24pO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoXHUwMDI2c3lzaW5mby1cdTAwM2VmZWF0dXJlcyk7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZG1yKFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjE0LjU2Mjc4MjcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjI0NTA5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggTWV0YWRhdGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgbG9naWMuIEl0IHNlZW1zIHRoZXkncmUgZGl0Y2hpbmcgdGhlIGF1dG8tZ2VuZXJhdGVkIGB0ZHhfZ2xvYmFsX21ldGFkYXRhLmNgIGluIGZhdm9yIG9mIGEgdGFibGUtZHJpdmVuIGFwcHJvYWNoIHVzaW5nIGBURF9TWVNJTkZPX01BUGAgYW5kIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cIiBURFgsIGFmdGVyIGFsbCwgaGluZ2VzIG9uIHNwZWNpZmljIEludGVsIFREWCBoYXJkd2FyZS4gQW5kIEkgbmVlZCB0byBjbGFyaWZ5LCBhcmUgd2UgdGFsa2luZyBURFggZ3Vlc3Qgb3IgaG9zdCBoZXJlP1xuXG5XYWl0LCB0aGUgcGF0aCwgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AsIHRoYXQncyB0aGUgVERYIGhvc3Qgc3VwcG9ydCBjb2RlLCByaWdodD8gSXQncyB0aGUgS1ZNL1REWCBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIE9rYXksIHNvIG5vdyB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHRoaXMgYmUgZnV6emVkIG9yIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PyBJJ20gYmV0dGluZyBubywgYmVjYXVzZSBURFggaG9zdCBzdXBwb3J0IGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgdGhhdCBURFggaGFyZHdhcmUgdG8gYmUgcHJlc2VudC4gVGhhdCdzIGEgaHVnZSBodXJkbGUuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBpZiB0aGlzIGlzIHBvc3NpYmxlIHdpdGhvdXQgaGFyZHdhcmUuIEkga25vdyB0aGF0IFREWCBob3N0IGluaXRpYWxpemF0aW9uIHVzdWFsbHkgY2hlY2tzIGZvciB0aGUgaGFyZHdhcmUgc3VwcG9ydCBlYXJseSBvbiBhbmQgYmFpbHMgb3V0IGlmIGl0J3Mgbm90IGRldGVjdGVkLiBJIG5lZWQgdG8gZGlnIGludG8gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgdG8gY29uZmlybSB0aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhpcyBjaGVjayBpcywgYW5kIHdoYXQgaGFwcGVucyBpZiBpdCdzIGJ5cGFzc2VkIHNvbWVob3csIGRlbGliZXJhdGVseSBvciBhY2NpZGVudGFsbHkuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBleGVjdXRpb24gdG8gY29udGludWUgZXZlbiB3aXRob3V0IHRoZSBleHBlY3RlZCBoYXJkd2FyZSwgb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgaGFyZHdhcmUgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjEuODI1MjM2NDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY5MzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE3MTg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3RkeF9lcnJhdHVtKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0Mzp2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNzQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjEuOTMyOTM0NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzOTg2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0ZHhfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2luaXRgIGlzIGFjdHVhbGx5ICpkb2luZyouIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIHN1YnN5c3RlbS4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGEgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gcGF0dGVybiBvciBzb21ldGhpbmcgY3VzdG9tLWJ1aWx0PyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHRhc2tzIGB0ZHhfaW5pdGAgaXMgcmVzcG9uc2libGUgZm9yLCB0aGUgcmVzb3VyY2VzIGl0IG1hbmFnZXMsIGFuZCBhbnkgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGl0IHRyaWdnZXJzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBmb3IgZXJyb3IgaGFuZGxpbmcgdG9vLiBLbm93aW5nIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBvY2N1cnJpbmcgd2lsbCBoZWxwIG1lLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgZnVuY3Rpb24gY2FsbHMgYXMgd2VsbC4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjcuMDY2OTI0MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDM6XFx0dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4xNzQ0OlxcdHtcXG4xNzQ1OlxcdFxcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XFxuMTc0NjpcXHRcXHRpbnQgZXJyO1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG4xNzQ5OlxcdFxcdGlmIChlcnIpXFxuMTc1MDpcXHRcXHRcXHRyZXR1cm47XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdHByX2luZm8oXFxcIkJJT1MgZW5hYmxlZDogcHJpdmF0ZSBLZXlJRCByYW5nZSBbJXUsICV1KVxcXFxuXFxcIixcXG4xNzUzOlxcdFxcdFxcdFxcdHRkeF9rZXlpZF9zdGFydCwgdGR4X2tleWlkX3N0YXJ0ICsgbnJfdGR4X2tleWlkcyk7XFxuMTc1NDpcXHRcXG4xNzU1OlxcdFxcdC8qXFxuMTc1NjpcXHRcXHQgKiBUaGUgVERYIG1vZHVsZSBpdHNlbGYgcmVxdWlyZXMgb25lICdnbG9iYWwgS2V5SUQnIHRvIHByb3RlY3RcXG4xNzU3OlxcdFxcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJ3Mgb25seSBvbmUgVERYIEtleUlELCB0aGVyZSB3b24ndCBiZVxcbjE3NTg6XFx0XFx0ICogYW55IGxlZnQgZm9yIFREWCBndWVzdHMgdGh1cyB0aGVyZSdzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcXG4xNzU5OlxcdFxcdCAqIGF0IGFsbC5cXG4xNzYwOlxcdFxcdCAqL1xcbjE3NjE6XFx0XFx0aWYgKG5yX3RkeF9rZXlpZHMgXFx1MDAzYyAyKSB7XFxuMTc2MjpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4xNzYzOlxcdFxcdFxcdHJldHVybjtcXG4xNzY0OlxcdFxcdH1cXG4xNzY1OlxcdFxcbjE3NjY6XFx0XFx0LypcXG4xNzY3OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXFxuMTc2ODpcXHRcXHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG4xNzY5OlxcdFxcdCAqL1xcbjE3NzA6XFx0XFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XFxuMTc3MTpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogSGliZXJuYXRpb24gc3VwcG9ydCBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4xNzcyOlxcdFxcdFxcdHJldHVybjtcXG4xNzczOlxcdFxcdH1cXG4xNzc0OlxcdFxcbjE3NzU6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKFxcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcXG4xNzc2OlxcdFxcdGlmIChlcnIpIHtcXG4xNzc3OlxcdFxcdFxcdHByX2VycihcXFwiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoKSBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4xNzc4OlxcdFxcdFxcdFxcdFxcdGVycik7XFxuMTc3OTpcXHRcXHRcXHRyZXR1cm47XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdCNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxcbjE3ODM6XFx0XFx0cHJfaW5mbyhcXFwiRGlzYWJsZSBBQ1BJIFMzLiBUdXJuIG9mZiBURFggaW4gdGhlIEJJT1MgdG8gdXNlIEFDUEkgUzMuXFxcXG5cXFwiKTtcXG4xNzg0OlxcdFxcdGFjcGlfc3VzcGVuZF9sb3dsZXZlbCA9IE5VTEw7XFxuMTc4NTpcXHQjZW5kaWZcXG4xNzg2OlxcdFxcbjE3ODc6XFx0XFx0LypcXG4xNzg4OlxcdFxcdCAqIEp1c3QgdXNlIHRoZSBmaXJzdCBURFggS2V5SUQgYXMgdGhlICdnbG9iYWwgS2V5SUQnIGFuZFxcbjE3ODk6XFx0XFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXFxuMTc5MDpcXHRcXHQgKi9cXG4xNzkxOlxcdFxcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XFxuMTc5MjpcXHRcXHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgKyAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMToyNy4wNjcwODUzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTU4MTUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBURFggSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgdGR4X2luaXRgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgc2V0dXAsIGFuZCBpdCdzIGJlaW5nIGludm9rZWQgZWFybHksIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBlc3RhYmxpc2hlcyB0aGUgc2VjdXJlIGVudmlyb25tZW50IGZvdW5kYXRpb24uIEJ1dCBub3cgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgYHRkeF9pbml0YCBkZXBlbmRzIG9uIGNvbWluZyBmcm9tPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBnZXRfdGR4X3N5c19pbmZvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGVhcmx5IGFzIHdlbGwsIG9yIGlzIGl0IGdldHRpbmcgaW5mb3JtYXRpb24gbGF0ZXIgb24/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGhvdyB0aGUgcmVsZXZhbnQgc3lzdGVtIGluZm9ybWF0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGFuZCB1c2VkIGluIHRoZSBURFggbGlmZWN5Y2xlLiBUaGlzIHRyYWNlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2VjdXJpdHkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjMzLjg2MjkwMzEyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA0NTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdGR4X3N5c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB2ZXJzaW9uX2ZpZWxkc1tdID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQxMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDEyOnN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00MTMte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI1LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0MjY6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00Mjcte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDMtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQ0NDpzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ0NS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ1OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDYwOnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDYxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00NzA9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDczLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0NzQ6c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ3NS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jb25mX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDk4OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5OS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTM2LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo1Mzc6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mzgte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0MC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTQxOlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcXHUwMDI2c3lzaW5mby1cXHUwMDNldmVyc2lvbik7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0Mi1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTAtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjU1MTpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1Mi1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU1OlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRtcik7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1Ni1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1OC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU5OlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY3RybCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTYzOlxcdHJldHVybiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2NvbmYpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NjQtfVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEzNTk9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM2MzpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvKFxcdTAwMjZ0ZHhfc3lzaW5mbyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzNjQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDg1PWludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ5MS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ5MjpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoXFx1MDAyNmhhbmRvZmYpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDkzLVxcdC8qXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTUyMz1pbnQgdGR4X21vZHVsZV9ydW5fdXBkYXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTUzMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTUzMjpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oXFx1MDAyNnRkeF9zeXNpbmZvLnZlcnNpb24pO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTMzLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjMzLjkzNjk1MzcwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTk0NDI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFREWCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgaW5pdF90ZHhfbW9kdWxlYCBpcyBjYWxsaW5nIGBnZXRfdGR4X3N5c19pbmZvYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBpbml0aWFsaXppbmcgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgbW9kdWxlIHVzdWFsbHkgaW52b2x2ZXMgZ2F0aGVyaW5nIHNvbWUgc3lzdGVtLWxldmVsIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hlcmUgZXhhY3RseSBpcyBgaW5pdF90ZHhfbW9kdWxlYCBiZWluZyBpbnZva2VkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBjcml0aWNhbC4gSXMgaXQgYmVpbmcgdHJpZ2dlcmVkIGF0IGJvb3QsIG9uLWRlbWFuZCBieSBhbm90aGVyIHNlcnZpY2UsIG9yIGluIHJlc3BvbnNlIHRvIHNvbWUgZXh0ZXJuYWwgZXZlbnQ/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBhIGh1Z2UgYW1vdW50IG9mIGluc2lnaHQgaW50byBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjYWxsIHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSdzIGludGVncmF0aW9uIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gQ29udGV4dCBpcyBrZXkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTozOS4zOTYzOTkwNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY3MjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3RkeF9tb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzQwPXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM1OC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM1OTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2MC17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ0MD1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ2OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3MDpcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ3MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjM5LjUzMTA3OTA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTkzNzE4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBwb2ludCBvZiBlbnRyeSBpcyBgdGR4X2VuYWJsZWAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8sIHdlbGwsIGVuYWJsaW5nIFREWC4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBob3cgZG9lcyBpdCBkbyB0aGF0PyBBaGEsIHRoZSB0ZXh0IHBvaW50cyBvdXQgYHRkeF9lbmFibGVgIGNhbGxzIGBpbml0X3RkeF9tb2R1bGVgLiBUaGF0J3MgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdGhlbiwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgbmVjZXNzYXJ5IHNldHVwIHByb2JhYmx5IGhhcHBlbnMuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqd2hlbiouIFNvLCBteSBuZXh0IHF1ZXN0aW9uIGlzIHBhcmFtb3VudDogd2hlcmUgdGhlIGhlY2sgaXMgYHRkeF9lbmFibGVgIGFjdHVhbGx5ICpjYWxsZWQqPyBGaW5kaW5nIHRoZSBjYWxsIHNpdGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBURFggZW5hYmxlbWVudCBmbG93LCB0aGUgcHJlY29uZGl0aW9ucyBmb3IgaXQsIGFuZCB3aGF0IHRyaWdnZXJzIGl0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTo0NC4yNTA0NTQ5NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEyMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9lbmFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzU5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MzktXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0NDA6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDgyLX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ4MzpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjQ0LjMyOTA3NTg2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE1MTQ3NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHRkeF9lbmFibGVgIGlzIGRlY2xhcmVkIGFzIGEgYHN1YnN5c19pbml0Y2FsbGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50IHRoYXQncyBpbml0aWFsaXplZCBwcmV0dHkgZWFybHkgZHVyaW5nIHRoZSBzeXN0ZW0gYm9vdCBwcm9jZXNzLCBsaWtlbHkgYmVmb3JlIG1vc3QgZHJpdmVycyBhcmUgdXAgYW5kIHJ1bm5pbmcuIEl0IG1lYW5zIGl0J3MgY3J1Y2lhbCBmb3IgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgdG8gYmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfZW5hYmxlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHNldHRpbmcgdXAgdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDgsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTo0OS4yNDQyMjgxMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDQwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDQwOlxcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcXG4xNDQxOlxcdHtcXG4xNDQyOlxcdFxcdGVudW0gY3B1aHBfc3RhdGUgc3RhdGU7XFxuMTQ0MzpcXHRcXHRpbnQgcmV0O1xcbjE0NDQ6XFx0XFxuMTQ0NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMTQ0NjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4xNDQ3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0NDg6XFx0XFx0fVxcbjE0NDk6XFx0XFxuMTQ1MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XFxuMTQ1MTpcXHRcXHRcXHRwcl9lcnIoXFxcIlhTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjE0NTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ1MzpcXHRcXHR9XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NT1ZESVI2NEIpKSB7XFxuMTQ1NjpcXHRcXHRcXHRwcl9lcnIoXFxcIk1PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxcXG5cXFwiKTtcXG4xNDU3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NTg6XFx0XFx0fVxcbjE0NTk6XFx0XFxuMTQ2MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xcbjE0NjE6XFx0XFx0XFx0cHJfZXJyKFxcXCJTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjE0NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MzpcXHRcXHR9XFxuMTQ2NDpcXHRcXG4xNDY1OlxcdFxcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcInZpcnQvdGR4Om9ubGluZVxcXCIsXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHQgIHRkeF9vbmxpbmVfY3B1LCB0ZHhfb2ZmbGluZV9jcHUpO1xcbjE0Njc6XFx0XFx0aWYgKHN0YXRlIFxcdTAwM2MgMClcXG4xNDY4OlxcdFxcdFxcdHJldHVybiBzdGF0ZTtcXG4xNDY5OlxcdFxcbjE0NzA6XFx0XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuMTQ3MTpcXHRcXHRpZiAocmV0KSB7XFxuMTQ3MjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuMTQ3MzpcXHRcXHRcXHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xcbjE0NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc1OlxcdFxcdH1cXG4xNDc2OlxcdFxcbjE0Nzc6XFx0XFx0cmVnaXN0ZXJfc3lzY29yZShcXHUwMDI2dGR4X3N5c2NvcmUpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4xNDgwOlxcdFxcdHByX2luZm8oXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjE0ODE6XFx0XFx0cmV0dXJuIDA7XFxuMTQ4MjpcXHR9XFxuMTQ4MzpcXHRzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuMTQ4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NDkuMjQ0NDE0MzY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MTg2MjM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBURFggSG9zdCBQbGF0Zm9ybSBTdXBwb3J0IGluIEtlcm5lbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRkeF9lbmFibGVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgY2hlY2sgaWYgdGhlIGhvc3QgcGxhdGZvcm0gc3VwcG9ydHMgVERYIHRocm91Z2ggYGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pYC4gTWFrZXMgc2Vuc2UuIElmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBURFgsIHdoaWNoIEknZCBleHBlY3QgZ2l2ZW4gdGhpcyBlbnZpcm9ubWVudCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRU5PREVWYC4gSSBzdGFydCB3b25kZXJpbmcsIGNhbiBRRU1VIGVtdWxhdGUgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0PyBVc3VhbGx5LCB0aGF0IGtpbmQgb2YgVERYIGhvc3Qgc3VwcG9ydCBkZW1hbmRzIGFjdHVhbCBURFggaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgdmVyeSBzcGVjaWZpYyBRRU1VIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGZhciBmcm9tIHRoZSBub3JtLiBXYWl0IGEgbWludXRlLi4uIHRoaXMgaXMgU3l6a2FsbGVyLCBzbyB0aGlzIGlzIHVubGlrZWx5IHRvIGJlIHJ1bm5pbmcgb24gVERYIGhhcmR3YXJlISBUaGF0IGNsaWNrcy5cblxuU28sIGlmIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmZWF0dXJlIGlzbid0IHByZXNlbnQsIGB0ZHhfZW5hYmxlYCBiYWlscyBvdXQgZWFybHkuIE1lYW5pbmcsIGBpbml0X3RkeF9tb2R1bGVgLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGdldF90ZHhfc3lzX2luZm9gLCBpcyBuZXZlciBldmVuIHJlYWNoZWQuIFRoYXQgZXhwbGFpbnMgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzIGFjdHVhbGx5IHNldC4gVGltZSB0byBnbyBodW50aW5nIGluIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NTUuMTYzMDQwNTExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwNTAzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMTkwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0RQX0wzXFx0XFx0KCA3KjMyKyA2KSAvKiBcXFwiY2RwX2wzXFxcIiBDb2RlIGFuZCBEYXRhIFByaW9yaXRpemF0aW9uIEwzICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoxOTE6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVxcdCggNyozMisgNykgLyogXFxcInRkeF9ob3N0X3BsYXRmb3JtXFxcIiBQbGF0Zm9ybSBzdXBwb3J0cyBiZWluZyBhIFREWCBob3N0ICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0xOTItI2RlZmluZSBYODZfRkVBVFVSRV9IV19QU1RBVEVcXHRcXHQoIDcqMzIrIDgpIC8qIFxcXCJod19wc3RhdGVcXFwiIEFNRCBIVy1QU3RhdGUgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQzNj1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ2NzpcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LVxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE0NDA9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NDQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0NDU6XFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQ2LVxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODI9c3RhdGljIGJvb2wgcGFkZHJfaXNfdGR4X3ByaXZhdGUodW5zaWduZWQgbG9uZyBwaHlzKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODgtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODk6XFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTkwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc5NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc5NTpcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NTUuMzE1MDk1OTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDE3NzMwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHRkeF9pbml0YCdzIENQVSBGZWF0dXJlIFNldHVwKipcblxuUmlnaHQsIHRoYXQncyBpdCEgYHRkeF9pbml0YCBpcyBjYWxsaW5nIGBzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtgLiBHb29kLCB0aGF0J3MgdGhlIG9idmlvdXMgaW5pdGlhbCBzdGVwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYHRkeF9pbml0YCdzIG92ZXJhbGwgcHVycG9zZSwgYW5kIHRoaXMgZnVuY3Rpb24gY2FsbCBjb25maXJtcyB0aGF0IGl0IGlzIHNldHRpbmcgdXAgdGhlIENQVSBmZWF0dXJlcyByZXF1aXJlZCBmb3IgdGhlIFREWCBob3N0IHBsYXRmb3JtLiBJdCdzIHB1c2hpbmcgdGhhdCBjcnVjaWFsIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlIGFuZCBzZWUgd2hlcmUgd2UgYXJlLiBMZXQncyBkZWx2ZSBiYWNrIGludG8gYHRkeF9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBzeXN0ZW0gdG8gYWNjb21tb2RhdGUgVERYLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpdCBkb2VzLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBzZXRzIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGl0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDEsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowMy4xNTY4NzE5MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQzLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzQzOlxcdHZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuMTc0NDpcXHR7XFxuMTc0NTpcXHRcXHR1MzIgdGR4X2tleWlkX3N0YXJ0LCBucl90ZHhfa2V5aWRzO1xcbjE3NDY6XFx0XFx0aW50IGVycjtcXG4xNzQ3OlxcdFxcbjE3NDg6XFx0XFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcXHUwMDI2bnJfdGR4X2tleWlkcyk7XFxuMTc0OTpcXHRcXHRpZiAoZXJyKVxcbjE3NTA6XFx0XFx0XFx0cmV0dXJuO1xcbjE3NTE6XFx0XFxuMTc1MjpcXHRcXHRwcl9pbmZvKFxcXCJCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXFxcblxcXCIsXFxuMTc1MzpcXHRcXHRcXHRcXHR0ZHhfa2V5aWRfc3RhcnQsIHRkeF9rZXlpZF9zdGFydCArIG5yX3RkeF9rZXlpZHMpO1xcbjE3NTQ6XFx0XFxuMTc1NTpcXHRcXHQvKlxcbjE3NTY6XFx0XFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAnZ2xvYmFsIEtleUlEJyB0byBwcm90ZWN0XFxuMTc1NzpcXHRcXHQgKiBpdHMgbWV0YWRhdGEuICBJZiB0aGVyZSdzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJ3QgYmVcXG4xNzU4OlxcdFxcdCAqIGFueSBsZWZ0IGZvciBURFggZ3Vlc3RzIHRodXMgdGhlcmUncyBubyBwb2ludCB0byBlbmFibGUgVERYXFxuMTc1OTpcXHRcXHQgKiBhdCBhbGwuXFxuMTc2MDpcXHRcXHQgKi9cXG4xNzYxOlxcdFxcdGlmIChucl90ZHhfa2V5aWRzIFxcdTAwM2MgMikge1xcbjE3NjI6XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0aWFsaXphdGlvbiBmYWlsZWQ6IHRvbyBmZXcgcHJpdmF0ZSBLZXlJRHMgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuMTc2MzpcXHRcXHRcXHRyZXR1cm47XFxuMTc2NDpcXHRcXHR9XFxuMTc2NTpcXHRcXG4xNzY2OlxcdFxcdC8qXFxuMTc2NzpcXHRcXHQgKiBBdCB0aGlzIHBvaW50LCBoaWJlcm5hdGlvbl9hdmFpbGFibGUoKSBpbmRpY2F0ZXMgd2hldGhlciBvclxcbjE3Njg6XFx0XFx0ICogbm90IGhpYmVybmF0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcGVybWFuZW50bHkgZGlzYWJsZWQuXFxuMTc2OTpcXHRcXHQgKi9cXG4xNzcwOlxcdFxcdGlmIChoaWJlcm5hdGlvbl9hdmFpbGFibGUoKSkge1xcbjE3NzE6XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcXFxuXFxcIik7XFxuMTc3MjpcXHRcXHRcXHRyZXR1cm47XFxuMTc3MzpcXHRcXHR9XFxuMTc3NDpcXHRcXG4xNzc1OlxcdFxcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcXHUwMDI2dGR4X21lbW9yeV9uYik7XFxuMTc3NjpcXHRcXHRpZiAoZXJyKSB7XFxuMTc3NzpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXFxcblxcXCIsXFxuMTc3ODpcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbjE3Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODA6XFx0XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHQjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1VTUEVORClcXG4xNzgzOlxcdFxcdHByX2luZm8oXFxcIkRpc2FibGUgQUNQSSBTMy4gVHVybiBvZmYgVERYIGluIHRoZSBCSU9TIHRvIHVzZSBBQ1BJIFMzLlxcXFxuXFxcIik7XFxuMTc4NDpcXHRcXHRhY3BpX3N1c3BlbmRfbG93bGV2ZWwgPSBOVUxMO1xcbjE3ODU6XFx0I2VuZGlmXFxuMTc4NjpcXHRcXG4xNzg3OlxcdFxcdC8qXFxuMTc4ODpcXHRcXHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAnZ2xvYmFsIEtleUlEJyBhbmRcXG4xNzg5OlxcdFxcdCAqIGxlYXZlIHRoZSByZXN0IGZvciBURFggZ3Vlc3RzLlxcbjE3OTA6XFx0XFx0ICovXFxuMTc5MTpcXHRcXHR0ZHhfZ2xvYmFsX2tleWlkID0gdGR4X2tleWlkX3N0YXJ0O1xcbjE3OTI6XFx0XFx0dGR4X2d1ZXN0X2tleWlkX3N0YXJ0ID0gdGR4X2tleWlkX3N0YXJ0ICsgMTtcXG4xNzkzOlxcdFxcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSk7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdGNoZWNrX3RkeF9lcnJhdHVtKCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG4xODAwOlxcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9nZXRfc3lzaW5mbyh2b2lkKVxcbjE4MDE6XFx0e1xcbjE4MDI6XFx0XFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowMy4xNTcxNDU0MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NDE3MjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGB0ZHhfaW5pdGAgd29ya3MgaGVyZS4gSXQgc2VlbXMgdGhhdCBpdHMga2V5IHJvbGUsIGF0IGxlYXN0IGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8sIGlzIHRvIHNldCB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBiaXQuIFRoZSBjb25kaXRpb24gZm9yIHRoaXMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIG5lZWRzIHRvIGJlIHN1Y2Nlc3NmdWwsIGFuZCBjcnVjaWFsbHksIGl0IG5lZWRzIHRvIHJldHVybiBhIHZhbHVlLCBgbnJfdGR4X2tleWlkc2AsIHRoYXQncyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMi4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQgc2VlbXMgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgKmF0IGxlYXN0KiB0d28gVERYIGtleSBJRHMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGVuYWJsaW5nIHRoZSBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlcy4gVGhlIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgdGhlbiwgaXMgdW5kZXJzdGFuZGluZyB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZXRlcm1pbmVzIHN1Y2Nlc3MgYW5kIGhvdyBpdCBjYWxjdWxhdGVzIHRoaXMgYG5yX3RkeF9rZXlpZHNgIHZhbHVlLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGllcywgYW5kIHdoZXJlIEkgY2FuIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0ncyBURFggY2FwYWJpbGl0aWVzIGFuZCBsaW1pdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNDYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjA4LjEzMTMyMTMzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NDI5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE2MzI9Y29uc3QgY2hhciAqdGR4X2R1bXBfbWNlX2luZm8oc3RydWN0IG1jZSAqbSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjQyLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjQzOnN0YXRpYyBfX2luaXQgaW50IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcodTMyICp0ZHhfa2V5aWRfc3RhcnQsXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE2NDQtXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0ODpcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0OS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowOC4yMzEwNjkxMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDE4MDQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBhcnRpdGlvbmluZyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIFRoZSBmaXJzdCB0aG91Z2h0IGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gYWJvdXQgdG8gYXNzZXNzIGEgc3BlY2lmaWMgYXBwcm9hY2ggb3IgZGVzaWduIHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGJyZWFraW5nIGRvd24gYW5kIG9yZ2FuaXppbmcgZGF0YSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSBhc3NpZ24gYW5kIHVzZSByZWNvcmQga2V5cyB3aXRoaW4gYSBwYXJ0aXRpb25lZCBzdHJ1Y3R1cmUuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBlaXRoZXIgYW4gZXhpc3Rpbmcgc3lzdGVtIEknbSBmYW1pbGlhciB3aXRoLCBvciBzb21ldGhpbmcgbmV3IHRoYXQncyBwcmVzZW50ZWQgaXRzZWxmIGFzIGEgcG90ZW50aWFsIHNvbHV0aW9uIG9yIGEgcG9pbnQgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgY29udmVudGlvbiBcInJlY29yZF9rZXlpZFwiIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IG1lbnRhbCBkYXRhYmFzZSBvZiBwb3NzaWJsZSBhcHBsaWNhdGlvbnM6IGRhdGEgd2FyZWhvdXNpbmcsIGRpc3RyaWJ1dGVkIGRhdGFiYXNlcywgZXZlbnQgc3RyZWFtaW5nIHN5c3RlbXMsIHBvc3NpYmx5IGV2ZW4gc29tZXRoaW5nIG1vcmUgbmljaGUgbGlrZSBhIHNwZWNpYWxpemVkIGtleS12YWx1ZSBzdG9yZS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBpbml0aWFsIHF1ZXN0aW9uczogSXMgdGhpcyBhIHNoYXJkaW5nIHN0cmF0ZWd5PyBJcyBpdCBiYXNlZCBvbiBoYXNoaW5nLCByYW5nZSBwYXJ0aXRpb25pbmcsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQncyB0aGUgYW50aWNpcGF0ZWQgZGF0YSB2b2x1bWUgYW5kIHdyaXRlL3JlYWQgcGF0dGVybnMgdGhhdCB0aGlzIHBhcnRpdGlvbmluZyBzY2hlbWUgaXMgZGVzaWduZWQgdG8gaGFuZGxlPyBUaGUgdGVybSBcInBhcnRpdGlvbmluZ1wiIGl0c2VsZiBpbXBsaWVzIGEgZGVzaXJlIGZvciBzY2FsYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhbmQgcG90ZW50aWFsIHBhcmFsbGVsIHByb2Nlc3NpbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGltcGxlbWVudGF0aW9uIGFjaGlldmVzIHRob3NlIGdvYWxzIChvciBhdHRlbXB0cyB0bykuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk3LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTIuNTQxMjUyNzI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0MzpcXHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxcbjE2NDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcXG4xNjQ1OlxcdHtcXG4xNjQ2OlxcdFxcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcXG4xNjQ3OlxcdFxcdGludCByZXQ7XFxuMTY0ODpcXHRcXG4xNjQ5OlxcdFxcdC8qXFxuMTY1MDpcXHRcXHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XFxuMTY1MTpcXHRcXHQgKiAgIEJpdCBbMzE6MF06XFx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cXG4xNjUyOlxcdFxcdCAqICAgQml0IFs2MzozMl06XFx0TnVtYmVyIG9mIFREWCBwcml2YXRlIEtleUlEcy5cXG4xNjUzOlxcdFxcdCAqL1xcbjE2NTQ6XFx0XFx0cmV0ID0gcmRtc3Jfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFxcdTAwMjZfbnJfbWt0bWVfa2V5aWRzLFxcbjE2NTU6XFx0XFx0XFx0XFx0XFx1MDAyNl9ucl90ZHhfa2V5aWRzKTtcXG4xNjU2OlxcdFxcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxcbjE2NTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY1ODpcXHRcXG4xNjU5OlxcdFxcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXFxuMTY2MDpcXHRcXHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyArIDE7XFxuMTY2MTpcXHRcXG4xNjYyOlxcdFxcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xcbjE2NjM6XFx0XFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcXG4xNjY0OlxcdFxcbjE2NjU6XFx0XFx0cmV0dXJuIDA7XFxuMTY2NjpcXHR9XFxuMTY2NzpcXHRcXG4xNjY4OlxcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4xNjY5OlxcdHtcXG4xNjcwOlxcdFxcdHN0cnVjdCB0ZHhfbWVtYmxvY2sgKnRtYjtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0XFx0LypcXG4xNjczOlxcdFxcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cXHUwMDNjLVxcdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XFxuMTY3NDpcXHRcXHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcXG4xNjc1OlxcdFxcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XFxuMTY3NjpcXHRcXHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcXG4xNjc3OlxcdFxcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxcbjE2Nzg6XFx0XFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJ3N0cnVjdCBtZW1vcnlfYmxvY2snLCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxcbjE2Nzk6XFx0XFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cXG4xNjgwOlxcdFxcdCAqL1xcbjE2ODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFxcdTAwMjZ0ZHhfbWVtbGlzdCwgbGlzdCkge1xcbjE2ODI6XFx0XFx0XFx0aWYgKHN0YXJ0X3BmbiBcXHUwMDNlPSB0bWItXFx1MDAzZXN0YXJ0X3BmbiBcXHUwMDI2XFx1MDAyNiBlbmRfcGZuIFxcdTAwM2M9IHRtYi1cXHUwMDNlZW5kX3BmbilcXG4xNjgzOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE2ODQ6XFx0XFx0fVxcbjE2ODU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE2ODY6XFx0fVxcbjE2ODc6XFx0XFxuMTY4ODpcXHRzdGF0aWMgaW50IHRkeF9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuMTY4OTpcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqdilcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBtZW1vcnlfbm90aWZ5ICptbiA9IHY7XFxuMTY5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTIuNTQxNTExMTM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDc5OTk5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNS1RNRSBLZXkgSUQgUGFydGl0aW9uaW5nIGluIGEgVERYIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgZnVuY3Rpb24sIGFuZCBpdCdzIHN0YXJ0aW5nIGJ5IHJlYWRpbmcgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi4gTm93LCBpZiB0aGF0IE1TUiBpc24ndCBwcmVzZW50IG9yIGlmIHRoZSBudW1iZXIgb2YgVERYIGtleSBJRHMgY29tZXMgYmFjayBhcyB6ZXJvLCBpdCdzIHRocm93aW5nIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBjYW4gUUVNVSBldmVuICplbXVsYXRlKiB0aGF0IE1TUj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0J3MgZ2VuZXJhbGx5IHRpZWQgdG8gc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBjZXJ0YWluIGZlYXR1cmUgZmxhZ3MuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuRXZlbiBpZiBRRU1VICpkb2VzKiBlbXVsYXRlIGl0LCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiBUaGUgYHRkeF9lbmFibGVgIGNhbGwgdHJpZ2dlcnMgYGluaXRfdGR4X21vZHVsZWAsIGFuZCAqdGhhdCogY2FsbHMgYGdldF90ZHhfc3lzX2luZm9gLiBUaGVuLCBgZ2V0X3RkeF9zeXNfaW5mb2AgY2FsbHMgYHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgcGFydC4gU3BlY2lmaWNhbGx5LCBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIGlzIGV4ZWN1dGluZyBhIGBUREguU1lTLlJEYCBTRUFNQ0FMTC4gU28sICp0aGF0KiBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIFREWCBzeXN0ZW0gbWV0YWRhdGEgcmVhZC4gQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgYW5kIHNlZSB3aGF0IGl0IGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjE5LjA0OTUxNjEyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTc4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9zeXNfbWV0YWRhdGFfZmllbGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yOTg9c3RhdGljIF9faW5pdCBpbnQgYnVpbGRfdGR4X21lbWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzI5LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzozMzA6c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV9maWVsZCh1NjQgZmllbGRfaWQsIHU2NCAqZGF0YSlcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzMxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0zNzg9c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV90YWJsZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZmllbGRzLFxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTM4Ni1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6Mzg3OlxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXFx1MDAzZWZpZWxkX2lkLCBcXHUwMDI2dmFsKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzg4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDk4PXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTE4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZF9jb25mLVxcdTAwM2VudW1fY3B1aWRfY29uZmlnOyBpKyspIHtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTE5OlxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMgKyBpLFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTUyNi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTI3OlxcdFxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTkuMTQ4OTQyMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3ODc5MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgaW5wdXRzOiB3aGF0IGRvZXMgaXQgZXhwZWN0IHRvIHJlY2VpdmU/IElzIGl0IGEga2V5LCBhIHBhdGgsIHNvbWUgc29ydCBvZiBpZGVudGlmaWVyPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hhdCdzIGl0cyBvdXRwdXQ/IERvZXMgaXQgcmV0dXJuIHRoZSBtZXRhZGF0YSBkaXJlY3RseSwgb3Igc29tZSBzb3J0IG9mIGhhbmRsZSBvciBvYmplY3QgdGhhdCBJIHRoZW4gbmVlZCB0byBpbnRlcmFjdCB3aXRoPyBJcyBpdCByYXcgZGF0YSBvciBpcyBpdCBhbHJlYWR5IHBhcnNlZCB0byBKU09OIG9yIHNvbWUgb3RoZXIgZm9ybWF0PyBLbm93aW5nIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGlzICpjcml0aWNhbCogZm9yIHRoaXMgZXhwbG9yYXRpb24sIHNvIGxldCdzIHN0YXJ0IHRoZXJlLlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0J3MgdGhlIHN0b3JhZ2UgbWVjaGFuaXNtIGZvciB0aGlzIHN5c3RlbSBtZXRhZGF0YT8gSXMgaXQgYSBrZXktdmFsdWUgc3RvcmUsIGEgZGF0YWJhc2UsIGEgZmlsZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgbW9kZWwgaXMgZ29pbmcgdG8gaW5mbHVlbmNlIG15IGludGVycHJldGF0aW9uLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIG9yIHByZS1jb25kaXRpb25zIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1ldGFkYXRhPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGdyYWNlZnVsbHk/IERvZXMgaXQgb2ZmZXIgYW55IHR5cGUgb2YgY2FjaGluZyB0byBzcGVlZCB1cCB0aGUgbWV0YWRhdGEgcmV0cmlldmFsLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZGF0YSBjb25zaXN0ZW5jeT9cblxuSSB3aWxsIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBtZXRhZGF0YSBmaWVsZCBkb2Vzbid0IGV4aXN0PyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiwgcmV0dXJuIGEgbnVsbCB2YWx1ZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byB3cml0aW5nIHJvYnVzdCBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQuIEFuZCBldmVuIG1vcmUgaW1wb3J0YW50bHksIEknbGwgYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGlmIGFueS4gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhdmUgYWNjZXNzIHRvIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbj8gQXJlIHRoZXJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBpbmplY3Rpb24gb3IgdW5hdXRob3JpemVkIGFjY2Vzcz8gRmluYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggY29uY3VycmVuY3kgaWYgdGhlIGVudmlyb25tZW50IGlzIG11bHRpdGhyZWFkZWQuIFdpbGwgdGhlcmUgYmUgYW55IHJhY2UgY29uZGl0aW9ucywgb3IgaXMgdGhpcyB0aHJlYWQtc2FmZT8gT2ssIGxldCdzIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI1NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjI4LjUyNzczNjAxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV9maWVsZCh1NjQgZmllbGRfaWQsIHU2NCAqZGF0YSlcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xcbiAzMzM6XFx0XFx0aW50IHJldDtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0LypcXG4gMzM2OlxcdFxcdCAqIFRESC5TWVMuUkQgLS0gcmVhZHMgb25lIGdsb2JhbCBtZXRhZGF0YSBmaWVsZFxcbiAzMzc6XFx0XFx0ICogIC0gUkRYIChpbik6IHRoZSBmaWVsZCB0byByZWFkXFxuIDMzODpcXHRcXHQgKiAgLSBSOCAob3V0KTogdGhlIGZpZWxkIGRhdGFcXG4gMzM5OlxcdFxcdCAqL1xcbiAzNDA6XFx0XFx0YXJncy5yZHggPSBmaWVsZF9pZDtcXG4gMzQxOlxcdFxcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1JELCBcXHUwMDI2YXJncyk7XFxuIDM0MjpcXHRcXHRpZiAocmV0KVxcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0KmRhdGEgPSBhcmdzLnI4O1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRyZXR1cm4gMDtcXG4gMzQ4OlxcdH1cXG4gMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjoyOC41Mjg5MzcyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQxMDI2MDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcG9zc2liaWxpdHkgb2YgUmVhY2hpbmcgYHNlYW1jYWxsX3ByZXJyX3JldGAqKlxuXG5Pa2F5LCBzbyBgc2VhbWNhbGxfcHJlcnJfcmV0YCBpbnZvbHZlcyBhIGBTRUFNQ0FMTGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHByZXR0eSBuaWNoZS4gSXQncyBhIFZNWCBpbnN0cnVjdGlvbiwgbWVhbmluZyBpdCBuZWVkcyBWTVggcm9vdCBvcGVyYXRpb24sIGFuZCBjcml0aWNhbGx5LCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IOKAkyBuYW1lbHksIGFuIEludGVsIFREWCBtb2R1bGUgbG9hZGVkIHdpdGhpbiB0aGUgU0VBTSByYW5nZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIFFFTVU/IEFuZCwgb2YgY291cnNlLCB0aGUgYW5zd2VyIGlzIG5vLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIG1vZHVsZSBvciBgU0VBTUNBTExgLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGVudmlyb25tZW50IEkgd29yayBpbiwgc3l6a2FsbGVyLCBpc24ndCBzZXQgdXAgdG8gcnVuIHdpdGggVERYIGVtdWxhdGlvbiwgYXQgbGVhc3Qgbm90IHRoYXQgSSdtIGF3YXJlIG9mLlxuXG5UaGF0IG1ha2VzIG1lIHdvbmRlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJ1biogb24gcmVhbCBURFggaGFyZHdhcmUgYW55d2hlcmU/IFRoZSBjb250ZXh0IG1lbnRpb25zIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBoaXRzIGhvbWUuIFREWCBob3N0IGNvZGUgZGVtYW5kcyAqYWN0dWFsKiBwaHlzaWNhbCBURFggaGFyZHdhcmUsIHdpdGggdGhlIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgdGhpcyBlZmZlY3RpdmVseSBtZWFucyB0aGlzIGNvZGUgaXMgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHR5cGljYWwgUUVNVS9HQ0UgZGV2ZWxvcG1lbnQgc2V0dXAuXG5cbk5vdywgYSBrZXJuZWwgYnVnIGlzIGEga2VybmVsIGJ1ZywgYW5kIEkgY2FuJ3QganVzdCB0aHJvdyB1cCBteSBoYW5kcy4gSXMgdGhlcmUgKmFueSogdHJpY2sgdG8gdHJ5IGFuZCBcImZha2VcIiBgc2VhbWNhbGxgIHNvIEkgY2FuIHRlc3QgYXJvdW5kIGl0PyBPa2F5LCB0aW1lIHRvIGdvIGJhY2sgdG8gYmFzaWNzLCBhbmQgY2hlY2sgYHNlYW1jYWxsX3ByZXJyX3JldGAgaXRzZWxmIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjM1LjkzOTIwMDY2NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDI2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlYW1jYWxsX3ByZXJyX3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc2NfcmV0cnlfcHJlcnIoc2NfZnVuY190IGZ1bmMsXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDUtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6MTA2OiNkZWZpbmUgc2VhbWNhbGxfcHJlcnJfcmV0KF9fZm4sIF9fYXJncylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA3LVxcdHNjX3JldHJ5X3ByZXJyKF9fc2VhbWNhbGxfcmV0LCBzZWFtY2FsbF9lcnJfcmV0LCAoX19mbiksIChfX2FyZ3MpKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTMzMD1zdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTM0MC1cXHRhcmdzLnJkeCA9IGZpZWxkX2lkO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzozNDE6XFx0cmV0ID0gc2VhbWNhbGxfcHJlcnJfcmV0KFRESF9TWVNfUkQsIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzQyLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTMwOT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXIoc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzIzLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzI0OlxcdFxcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1RETVJfSU5JVCwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzI1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjM2LjEzMzIzNDQ5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk3NzE3ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgX19zZWFtY2FsbF9yZXRgKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbi4gU2VlbXMgbGlrZSB3ZSdyZSBsb29raW5nIGF0IGEgcmV0dXJuIHZhbHVlLCBzcGVjaWZpY2FsbHkgYF9fc2VhbWNhbGxfcmV0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogd2UncmUgZXhhbWluaW5nIHRoaXMuIElzIGl0IGEgc3VzcGVjdGVkIGlzc3VlPyBBcmUgd2UgdHJhY2luZyBhIGJ1Zz8gT3IgYXJlIHdlIHNpbXBseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBjb250cm9sIGZsb3cgbW9yZSBkZWVwbHkgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlPyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmVzLCBgX19zZWFtY2FsbF9yZXRgIGlzIGxpa2VseSBhIHNlYW0gY2FsbCByZXR1cm4gdmFsdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbC4gSW1tZWRpYXRlbHksIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiB3aGF0IGNvbnRleHQgYXJlIHdlIGluPyBXaGF0J3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBpdHMgdmFsdWUsIGFzIGl0IGNvdWxkIHBvaW50IHRvd2FyZCBhIG51bWJlciBvZiBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NDMuMTMwOTU2MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjAzNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NlYW1jYWxsX3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM9MjM9U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGwpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yNS0vKlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TOjI2OiAqIF9fc2VhbWNhbGxfcmV0KCkgLSBIb3N0LXNpZGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBTRUFNIHNvZnR3YXJlXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtMjctICogKHRoZSBQLVNFQU1MRFIgb3IgdGhlIFREWCBtb2R1bGUpLCB3aXRoIHNhdmluZyBvdXRwdXQgcmVnaXN0ZXJzIHRvXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yOS0gKlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TOjMwOiAqIF9fc2VhbWNhbGxfcmV0KCkgZnVuY3Rpb24gQUJJOlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTMxLSAqXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0zOS0gKi9cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzo0MDpTWU1fRlVOQ19TVEFSVChfX3NlYW1jYWxsX3JldClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy00MS1cXHRURFhfTU9EVUxFX0NBTEwgaG9zdD0xIHJldD0xXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6NDI6U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGxfcmV0KVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTQzLVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9MjA9dTY0IF9fc2VhbWNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaDoyMTp1NjQgX19zZWFtY2FsbF9yZXQodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0yMi11NjQgX19zZWFtY2FsbF9zYXZlZF9yZXQodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oPTQ1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IHNjX3JldHJ5KHNjX2Z1bmNfdCBmdW5jLCB1NjQgZm4sXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC02MC0jZGVmaW5lIHNlYW1jYWxsKF9mbiwgX2FyZ3MpXFx0XFx0c2NfcmV0cnkoX19zZWFtY2FsbCwgKF9mbiksIChfYXJncykpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6NjE6I2RlZmluZSBzZWFtY2FsbF9yZXQoX2ZuLCBfYXJncylcXHRzY19yZXRyeShfX3NlYW1jYWxsX3JldCwgKF9mbiksIChfYXJncykpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtNjItI2RlZmluZSBzZWFtY2FsbF9zYXZlZF9yZXQoX2ZuLCBfYXJncylcXHRzY19yZXRyeShfX3NlYW1jYWxsX3NhdmVkX3JldCwgKF9mbiksIChfYXJncykpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaD04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzY19yZXRyeV9wcmVycihzY19mdW5jX3QgZnVuYyxcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oLTEwNi0jZGVmaW5lIHNlYW1jYWxsX3ByZXJyX3JldChfX2ZuLCBfX2FyZ3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjEwNzpcXHRzY19yZXRyeV9wcmVycihfX3NlYW1jYWxsX3JldCwgc2VhbWNhbGxfZXJyX3JldCwgKF9fZm4pLCAoX19hcmdzKSlcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDgtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTU4Mj1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5Mi1cXHQvKiBHZXQgcGFnZSB0eXBlIGZyb20gdGhlIFREWCBtb2R1bGUgKi9cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTU5MzpcXHRzcmV0ID0gX19zZWFtY2FsbF9kaXJ0eV9jYWNoZShfX3NlYW1jYWxsX3JldCwgVERIX1BIWU1FTV9QQUdFX1JETUQsIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NDMuMzE2OTk4NzE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjE0MDk4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2Ugb2YgYF9fc2VhbWNhbGxfcmV0YCB3aGljaCByZWxpZXMgb24gYFREWF9NT0RVTEVfQ0FMTGAsIHVzaW5nIHRoZSBgc2VhbWNhbGxgIGluc3RydWN0aW9uLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgVERYLXNwZWNpZmljLCBhbmQgYHNlYW1jYWxsYCAqbmVlZHMqIFREWCBoYXJkd2FyZS4gUUVNVSwgaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0gb3IgU0VBTSBjYWxscywgc28gZXhlY3V0aW5nIHRoYXQgY29kZSBwYXRoIGRpcmVjdGx5IHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQgaXMgYSBub24tc3RhcnRlci5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYmUgc2V0IGJ5IHNvbWUgb3RoZXIgbWVhbnMgdG8gdHJpY2sgdGhpbmdzPyBJIGR1ZyBkZWVwZXIuIFRoZSBmdW5jdGlvbiBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2Agd2lsbCByZWFkIGZyb20gYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AuIElmIHRoYXQgcmVhZCBmYWlscywgd2UncmUgZ29pbmcgdG8gaGl0IHRoZSBgLUVJTlZBTGAgYW5kIHRoZXJlZm9yZSwgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBpc24ndCBnb2luZyB0byBiZSBzZXQsIHNvIHdlIGNhbid0IGdldCB0aGVyZS4gRXZlbiBpZiB3ZSAqc29tZWhvdyogbWFuYWdlZCB0byBieXBhc3MgdGhhdCBjaGVjayAoZXh0cmVtZWx5IHVubGlrZWx5KSwgdGhlIGBzZWFtY2FsbGAgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIGdlbmVyYXRlIGEgI1VEIG9yIGZhaWwgYmVjYXVzZSBRRU1VIGRvZXNuJ3QgaGF2ZSB0aGUgVERYIGhvc3QgZW11bGF0aW9uIG5lY2Vzc2FyeS4gV2UgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBvdGhlciB1c2VzIG9mIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAgYW5kIGNvbmZpcm0gdGhhdCBpdCBpcyBvbmx5IHVzZWQgaW4gVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZS5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSwgdGhlIHJlZmFjdG9yaW5nIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYCwgaXMgcGFydCBvZiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2hpY2ggaXMgYHRkeF9pbml0YCwgYHRkeF9lbmFibGVgIGFuZCBgaW5pdF90ZHhfbW9kdWxlYC4gSXQncyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhlIHByZXNlbmNlIG9mIHJlYWwgVERYIGhhcmR3YXJlIGFuZCBhIEJJT1MgdGhhdCBzdXBwb3J0cyBpdCwgdmlhIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIENQVSBmZWF0dXJlIGFuZCB0aGUgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AgY2hlY2suIFRoZSB1c2Ugb2YgYFNFQU1DQUxMYCBjb25maXJtcyB0aGlzIGRlcGVuZGVuY2Ugb24gYSBsb2FkZWQgSW50ZWwgVERYIG1vZHVsZSBpbiB0aGUgU0VBTSByYW5nZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB3ZSdyZSBhbmFseXppbmcgdGhpcyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYW5kIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGxpa2VseSBRRU1VIG9yIGEgc2ltaWxhcmx5IGNvbnN0cmFpbmVkIGVudmlyb25tZW50LCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGV4ZWN1dGUgdGhpcyBjb2RlLiBJdCdzIG5vdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkkgd2lsbCBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MiwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NTQuNTMxMTAxMDMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZSAoYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jKS4gVGhpcyBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSBDUFUgZmVhdHVyZSBhbmQgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZSAoYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jKS4gVGhpcyBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSBDUFUgZmVhdHVyZSBhbmQgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow85cnq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 12:01:05 +0000 UTC FinishedAt: 2026-08-04 12:22:55 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGNvZGUgKGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYykuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0gQ1BVIGZlYXR1cmUgYW5kIHRoZSBTRUFNQ0FMTCBpbnN0cnVjdGlvbiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbmluZGV4IDQxMTUwZDU0NjU4OWMuLmE4NmJlOWU1ZWM3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuQEAgLTEsMTAgJiM0MzsxLDE1IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbi0vKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBURFggZ2xvYmFsIG1ldGFkYXRhIHN0cnVjdHVyZXMuICovXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxuLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2lmbmRlZiBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiYjNDM7I2RlZmluZSBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFREWCBtb2R1bGUgXCYjMzQ7R2xvYmFsIFNjb3BlIE1ldGFkYXRhXCYjMzQ7IGFzIGRvY3VtZW50ZWQgaW4gdGhlIEludGVsIFREWFxuJiM0MzsgKiBNb2R1bGUgQUJJIHNwZWMuIEVhY2ggc3ViLXN0cnVjdHVyZSBiZWxvdyBjb3JyZXNwb25kcyB0byBvbmUgVERYXG4mIzQzOyAqIG1ldGFkYXRhIFwmIzM0O0NsYXNzXCYjMzQ7OyBpdHMgbWVtYmVycyBhcmUgcG9wdWxhdGVkIHZpYSBUREguU1lTLlJEIFNFQU1DQUxMcy5cbiYjNDM7ICovXG4mIzQzO1xuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiB7XG4gXHR1MTYgbWlub3JfdmVyc2lvbjtcbiBcdHUxNiBtYWpvcl92ZXJzaW9uO1xuQEAgLTUyLDQgJiM0Mzs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xuIFx0c3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7XG4gfTtcbiBcbi0jZW5kaWZcbiYjNDM7I2VuZGlmIC8qIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uNTkwOTljYzE1ZjdhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzQ3LDcgJiM0MzszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2luY2x1ZGUgXCYjMzQ7dGR4X2dsb2JhbF9tZXRhZGF0YS5jXCYjMzQ7XG4mIzQzOy8qXG4mIzQzOyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0XG4mIzQzOyAqIGhvbGRzIGl0cyB2YWx1ZS4gVXNlIFREX1NZU0lORk9fTUFQKCkgdG8gcG9wdWxhdGUgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHtcbiYjNDM7XHR1NjQgZmllbGRfaWQ7XG4mIzQzO1x0dTE2IG9mZnNldDtcbiYjNDM7XHR1OCAgc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzaXplIGVuY29kZWQgaW4gdGhlIGZpZWxkIElEIGFuZCB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gQ1xuJiM0MzsgKiBtZW1iZXIgbXVzdCBhZ3JlZTsgQlVJTERfQlVHX09OX1pFUk8oKSBlbmZvcmNlcyB0aGlzIGF0IGNvbXBpbGUgdGltZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCBfc3RydWN0LCBfbWVtYmVyKVx0XHRcdFx0XFxcbiYjNDM7XHR7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5vZmZzZXQgICA9IG9mZnNldG9mKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSxcdFx0XHRcXFxuJiM0MztcdFx0LnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAmIzQzO1x0XHRcXFxuJiM0MztcdFx0XHQgICAgQlVJTERfQlVHX09OX1pFUk8oXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0c2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAhPVx0XFxcbiYjNDM7XHRcdFx0XHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFx0XFxcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIGEgdGFibGUgb2YgVERYIGdsb2JhbCBtZXRhZGF0YSBmaWVsZHMsIHJlYWQgZWFjaCB2aWEgVERILlNZUy5SRCxcbiYjNDM7ICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgbWF0Y2hpbmcgQyBtZW1iZXIgb2YgKkBiYXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV90YWJsZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgIGludCBucl9maWVsZHMsIHZvaWQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHU2NCB2YWw7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2ZpZWxkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmID0gXHUwMDI2ZmllbGRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXHUwMDNlZmllbGRfaWQsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoZi1cdTAwM2VzaXplKSB7XG4mIzQzO1x0XHRjYXNlIDE6ICoodTggICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbiYjNDM7XHRcdGNhc2UgMjogKih1MTYgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkgPSB2YWw7IGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA0OiAqKHUzMiAqKShiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0KSA9IHZhbDsgYnJlYWs7XG4mIzQzO1x0XHRjYXNlIDg6ICoodTY0ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3ZlcnNpb24sIF9tZW1iZXIpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdmVyc2lvbl9maWVsZHNbXSA9IHtcbiYjNDM7XHRNQVBfVkVSU0lPTihNSU5PUl9WRVJTSU9OLFx0bWlub3JfdmVyc2lvbiksXG4mIzQzO1x0TUFQX1ZFUlNJT04oTUFKT1JfVkVSU0lPTixcdG1ham9yX3ZlcnNpb24pLFxuJiM0MztcdE1BUF9WRVJTSU9OKFVQREFURV9WRVJTSU9OLFx0dXBkYXRlX3ZlcnNpb24pLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodmVyc2lvbl9maWVsZHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodmVyc2lvbl9maWVsZHMpLFxuJiM0MztcdFx0XHRcdCAgICAgICBzeXNpbmZvX3ZlcnNpb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BUF9GRUFUVVJFUyhfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX2ZlYXR1cmVzLCBfbWVtYmVyKVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGZlYXR1cmVzX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuJiM0MztcdE1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLFx0dGR4X2ZlYXR1cmVzMCksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoZmVhdHVyZXNfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN5c2luZm9fZmVhdHVyZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BUF9URE1SKF9maWVsZF9pZCwgX21lbWJlcilcdFxcXG4mIzQzO1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZG1yX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuJiM0MztcdE1BUF9URE1SKE1BWF9URE1SUyxcdFx0bWF4X3RkbXJzKSxcbiYjNDM7XHRNQVBfVERNUihNQVhfUkVTRVJWRURfUEVSX1RETVIsXHRtYXhfcmVzZXJ2ZWRfcGVyX3RkbXIpLFxuJiM0MztcdE1BUF9URE1SKFBBTVRfNEtfRU5UUllfU0laRSxcdHBhbXRfNGtfZW50cnlfc2l6ZSksXG4mIzQzO1x0TUFQX1RETVIoUEFNVF8yTV9FTlRSWV9TSVpFLFx0cGFtdF8ybV9lbnRyeV9zaXplKSxcbiYjNDM7XHRNQVBfVERNUihQQU1UXzFHX0VOVFJZX1NJWkUsXHRwYW10XzFnX2VudHJ5X3NpemUpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKHRkbXJfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3lzaW5mb190ZG1yKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVERfQ1RSTChfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2N0cmwsIF9tZW1iZXIpXG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY3RybF9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbiYjNDM7XHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFx0dGRyX2Jhc2Vfc2l6ZSksXG4mIzQzO1x0TUFQX1REX0NUUkwoVERDU19CQVNFX1NJWkUsXHR0ZGNzX2Jhc2Vfc2l6ZSksXG4mIzQzO1x0TUFQX1REX0NUUkwoVERWUFNfQkFTRV9TSVpFLFx0dGR2cHNfYmFzZV9zaXplKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jdHJsX2ZpZWxkcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRSh0ZF9jdHJsX2ZpZWxkcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFQX0hBTkRPRkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbiYjNDM7XHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XG4mIzQzO1x0TUFQX0hBTkRPRkYoTU9EVUxFX0hWLFx0bW9kdWxlX2h2KSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKGhhbmRvZmZfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3lzaW5mb19oYW5kb2ZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVBfVERfQ09ORihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuJiM0MztcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcJiMzNDtURCBDb25maWd1cmF0aW9uXCYjMzQ7IGNsYXNzLiAgbnVtX2NwdWlkX2NvbmZpZ1xuJiM0MzsgKiBtdXN0IGJlIHByZXNlbnQgaGVyZSAoYW5kIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIENQVUlEIGFycmF5c1xuJiM0MzsgKiBiZWxvdykgYmVjYXVzZSBpdCBzaXplcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4mIzQzO1x0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsXHRhdHRyaWJ1dGVzX2ZpeGVkMCksXG4mIzQzO1x0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDEsXHRhdHRyaWJ1dGVzX2ZpeGVkMSksXG4mIzQzO1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsXHR4ZmFtX2ZpeGVkMCksXG4mIzQzO1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsXHR4ZmFtX2ZpeGVkMSksXG4mIzQzO1x0TUFQX1REX0NPTkYoTlVNX0NQVUlEX0NPTkZJRyxcdG51bV9jcHVpZF9jb25maWcpLFxuJiM0MztcdE1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsXHRtYXhfdmNwdXNfcGVyX3RkKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCBpLCBqO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jb25mX2ZpZWxkcyxcbiYjNDM7XHRcdFx0XHQgICAgICBBUlJBWV9TSVpFKHRkX2NvbmZfZmllbGRzKSxcbiYjNDM7XHRcdFx0XHQgICAgICB0ZF9jb25mKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cyBhcmUgc2l6ZWQgYXQgcnVudGltZSBieVxuJiM0MztcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJiMzOTt0IGJlIGV4cHJlc3NlZCBpbiBhIHN0YXRpY1xuJiM0MztcdCAqIFREX1NZU0lORk9fTUFQIHRhYmxlLiAgVGhlaXIgZmllbGQgSURzIGFyZSBjb250aWd1b3VzIGZyb21cbiYjNDM7XHQgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSB8fFxuJiM0MztcdCAgICB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICYjNDM7IGksXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyAmIzQzOyBpICogMiAmIzQzOyBqO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7TW9kdWxlIHZlcnNpb246IFwmIzM0OyBURFhfVkVSU0lPTl9GTVQgXCYjMzQ7XFxuXCYjMzQ7LFxuJiM0MztcdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1ham9yX3ZlcnNpb24sXG4mIzQzO1x0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWlub3JfdmVyc2lvbixcbiYjNDM7XHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi51cGRhdGVfdmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFx1MDAyNnN5c2luZm8tXHUwMDNlZmVhdHVyZXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNTgsNiAmIzQzOzU4LDcyIEBAXG4gICovXG4gI2RlZmluZSBURFhfVkVSU0lPTl9TSElGVFx0XHQxNlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHbG9iYWwgU2NvcGUgTWV0YWRhdGEgZmllbGQgSURzLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgXCYjMzQ7R2xvYmFsLVNjb3BlIChURFggTW9kdWxlKSBNZXRhZGF0YVwmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQklcbiYjNDM7ICogc3BlYy5cbiYjNDM7ICpcbiYjNDM7ICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhIFwmIzM0O0NsYXNzXCYjMzQ7XG4mIzQzOyAqICh3aGljaCBMaW51eCBtaXJyb3JzIGluICYjMzk7c3RydWN0IHRkeF9zeXNfaW5mbyYjMzk7IHN1Yi1zdHJ1Y3R1cmVzKSxcbiYjNDM7ICogdGhlIGVsZW1lbnQgc2l6ZSwgYW5kIGEgcGVyLWNsYXNzIGZpZWxkIGluZGV4LiBFYWNoIElEIGJlbG93XG4mIzQzOyAqIGlzIHBhaXJlZCB3aXRoIHRoZSBDIG1lbWJlciB0aGF0IGhvbGRzIGl0cyB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggTW9kdWxlIFZlcnNpb25cJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NSU5PUl9WRVJTSU9OXHRcdDB4MDgwMDAwMDEwMDAwMDAwM1VMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BSk9SX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVVBEQVRFX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA1VUxMXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggRmVhdHVyZXNcJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwXHRcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxuJiM0MztcbiYjNDM7LyogQ2xhc3MgXCYjMzQ7VERNUiBJbmZvXCYjMzQ7ICovXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUFYX1RETVJTXHRcdFx0MHg5MTAwMDAwMTAwMDAwMDA4VUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUFYX1JFU0VSVkVEX1BFUl9URE1SXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzRLX0VOVFJZX1NJWkVcdFx0MHg5MTAwMDAwMTAwMDAwMDEwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfUEFNVF8yTV9FTlRSWV9TSVpFXHRcdDB4OTEwMDAwMDEwMDAwMDAxMVVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMUdfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTJVTExcbiYjNDM7XG4mIzQzOy8qIENsYXNzIFwmIzM0O1REIENvbnRyb2wgU3RydWN0dXJlc1wmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REUl9CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVERDU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfVERWUFNfQkFTRV9TSVpFXHRcdDB4OTgwMDAwMDEwMDAwMDIwMFVMTFxuJiM0MztcbiYjNDM7LyogQ2xhc3MgXCYjMzQ7VEQgQ29uZmlndXJhdGlvblwmIzM0OyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwXHRcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxXHRcdDB4MTkwMDAwMDMwMDAwMDAwMVVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1hGQU1fRklYRUQwXHRcdFx0MHgxOTAwMDAwMzAwMDAwMDAyVUxMXG4mIzQzOyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDFcdFx0XHQweDE5MDAwMDAzMDAwMDAwMDNVTExcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9OVU1fQ1BVSURfQ09ORklHXHRcdDB4OTkwMDAwMDEwMDAwMDAwNFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9WQ1BVU19QRVJfVERcdFx0MHg5OTAwMDAwMTAwMDAwMDA4VUxMXG4mIzQzO1xuJiM0MzsvKiBDbGFzcyBcJiMzNDtURFggTW9kdWxlIEhhbmRvZmZcJiMzNDsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NT0RVTEVfSFZcdFx0XHQweDg5MDAwMDAxMDAwMDAwMDBVTExcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJhc2UgSURzIGZvciB0aGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cy4gIFRoZSBmaWVsZCBJRCBvZiBsZWFmXG4mIzQzOyAqIGluZGV4IEBpIGlzIEJBU0UgJiM0MzsgaTsgZm9yIHRoZSB2YWx1ZXMgYXJyYXksIHN1Yi1lbnRyeSBAaiBvZiBpbmRleFxuJiM0MzsgKiBAaSBpcyBCQVNFICYjNDM7IGkqMiAmIzQzOyBqLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTXHRcdDB4OTkwMDAwMDMwMDAwMDQwMFVMTFxuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19WQUxVRVNcdFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXG4mIzQzOyAqXG4mIzQzOyAqIFNlZSBcJiMzNDtNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcilcbiYjNDM7ICogRGVmaW5pdGlvblwmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQkkgc3BlYy5cbiYjNDM7ICpcbiYjNDM7ICogIC0gQml0IDMzOjMyOiBFTEVNRU5UX1NJWkVfQ09ERSAtLSBsb2cyIG9mIGEgc2luZ2xlIG1ldGFkYXRhXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCYjMzk7cyBzaXplIGluIGJ5dGVzXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0VMRV9TSVpFX0NPREUoZmllbGRfaWQpXHRcXFxuJiM0MztcdCgoKGZpZWxkX2lkKSBcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXHUwMDNlXHUwMDNlIDMyKVxuJiM0MztcbiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRShmaWVsZF9pZClcdFx0XFxcbiYjNDM7XHQoMSBcdTAwM2NcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXG4mIzQzO1xuIC8qIFREWCBwYWdlIHR5cGVzICovXG4gI2RlZmluZVx0UFRfTkRBXHRcdDB4MFxuICNkZWZpbmVcdFBUX1JTVkRcdFx0MHgxXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMTMzICYjNDM7MCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4tICpcbi0gKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuLSAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbi0gKiBJbmNsdWRlIHRoaXMgZmlsZSB0byBvdGhlciBDIGZpbGUgaW5zdGVhZC5cbi0gKi9cbi1cbi1zdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gKnN5c2luZm9fdmVyc2lvbilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3ZlcnNpb24tXHUwMDNlbWlub3JfdmVyc2lvbiA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdmVyc2lvbi1cdTAwM2VtYWpvcl92ZXJzaW9uID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb192ZXJzaW9uLVx1MDAzZXVwZGF0ZV92ZXJzaW9uID0gdmFsO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0dTY0IHZhbDtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fZmVhdHVyZXMtXHUwMDNldGR4X2ZlYXR1cmVzMCA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlbWF4X3RkbXJzID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZW1heF9yZXNlcnZlZF9wZXJfdGRtciA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2N0cmwtXHUwMDNldGRyX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZGNzX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZHZwc19iYXNlX3NpemUgPSB2YWw7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICpzeXNpbmZvX3RkX2NvbmYpXG4te1xuLVx0aW50IHJldCA9IDA7XG4tXHR1NjQgdmFsO1xuLVx0aW50IGksIGo7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDIsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY29uZi1cdTAwM2VtYXhfdmNwdXNfcGVyX3RkID0gdmFsO1xuLVx0aWYgKHN5c2luZm9fdGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHN5c2luZm9fdGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspXG4tXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDQwMCAmIzQzOyBpLCBcdTAwMjZ2YWwpKSlcbi1cdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcbi1cdGlmIChzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcdTAwM2UgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzaW5mb190ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KVxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA1MDAgJiM0MzsgaSAqIDIgJiM0MzsgaiwgXHUwMDI2dmFsKSkpXG4tXHRcdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuLXtcbi1cdGludCByZXQ7XG4tXHR1NjQgdmFsO1xuLVxuLVx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg4OTAwMDAwMTAwMDAwMDAwLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN5c2luZm9faGFuZG9mZi1cdTAwM2Vtb2R1bGVfaHYgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcdTAwMjZzeXNpbmZvLVx1MDAzZXZlcnNpb24pO1xuLVxuLVx0cHJfaW5mbyhcJiMzNDtNb2R1bGUgdmVyc2lvbjogXCYjMzQ7IFREWF9WRVJTSU9OX0ZNVCBcJiMzNDtcXG5cJiMzNDssXG4tXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi5tYWpvcl92ZXJzaW9uLFxuLVx0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWlub3JfdmVyc2lvbixcbi1cdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTtcbi1cbi1cdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFx1MDAyNnN5c2luZm8tXHUwMDNlZmVhdHVyZXMpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRtcihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2NvbmYpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIGNvZGUgKGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYykuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0gQ1BVIGZlYXR1cmUgYW5kIHRoZSBTRUFNQ0FMTCBpbnN0cnVjdGlvbiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAppbmRleCA0MTE1MGQ1NDY1ODljLi5hODZiZTllNWVjNzcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCkBAIC0xLDEwICYjNDM7MSwxNSBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi8KLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKLSNkZWZpbmUgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0gKJiM0MzsjaWZuZGVmIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSAomIzQzOyNkZWZpbmUgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9ICiAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBURFggbW9kdWxlICYjMzQ7R2xvYmFsIFNjb3BlIE1ldGFkYXRhJiMzNDsgYXMgZG9jdW1lbnRlZCBpbiB0aGUgSW50ZWwgVERYCiYjNDM7ICogTW9kdWxlIEFCSSBzcGVjLiBFYWNoIHN1Yi1zdHJ1Y3R1cmUgYmVsb3cgY29ycmVzcG9uZHMgdG8gb25lIFREWAomIzQzOyAqIG1ldGFkYXRhICYjMzQ7Q2xhc3MmIzM0OzsgaXRzIG1lbWJlcnMgYXJlIHBvcHVsYXRlZCB2aWEgVERILlNZUy5SRCBTRUFNQ0FMTHMuCiYjNDM7ICovCiYjNDM7CiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gewogCXUxNiBtaW5vcl92ZXJzaW9uOwogCXUxNiBtYWpvcl92ZXJzaW9uOwpAQCAtNTIsNCAmIzQzOzU3LDQgQEAgc3RydWN0IHRkeF9zeXNfaW5mbyB7CiAJc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7CiB9OwogCi0jZW5kaWYKJiM0MzsjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKaW5kZXggNDJkZjhlYTQ2NGM0Ny4uNTkwOTljYzE1ZjdhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzQ3LDcgJiM0MzszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpCiAJcmV0dXJuIDA7CiB9CiAKLSNpbmNsdWRlICYjMzQ7dGR4X2dsb2JhbF9tZXRhZGF0YS5jJiMzNDsKJiM0MzsvKgomIzQzOyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0CiYjNDM7ICogaG9sZHMgaXRzIHZhbHVlLiBVc2UgVERfU1lTSU5GT19NQVAoKSB0byBwb3B1bGF0ZSBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHsKJiM0MzsJdTY0IGZpZWxkX2lkOwomIzQzOwl1MTYgb2Zmc2V0OwomIzQzOwl1OCAgc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHNpemUgZW5jb2RlZCBpbiB0aGUgZmllbGQgSUQgYW5kIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBDCiYjNDM7ICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIF9zdHJ1Y3QsIF9tZW1iZXIpCQkJCVwKJiM0MzsJewkJCQkJCQkJCVwKJiM0MzsJCS5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLAkJCQlcCiYjNDM7CQkub2Zmc2V0ICAgPSBvZmZzZXRvZihzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlciksCQkJXAomIzQzOwkJLnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAmIzQzOwkJXAomIzQzOwkJCSAgICBCVUlMRF9CVUdfT05fWkVSTygJCQkJCVwKJiM0MzsJCQkJc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSAhPQlcCiYjNDM7CQkJCU1EX0ZJRUxEX0lEX0VMRV9TSVpFKE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkKSksCVwKJiM0MzsJfQomIzQzOwomIzQzOy8qCiYjNDM7ICogV2FsayBhIHRhYmxlIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGRzLCByZWFkIGVhY2ggdmlhIFRESC5TWVMuUkQsCiYjNDM7ICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgbWF0Y2hpbmcgQyBtZW1iZXIgb2YgKkBiYXNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcywKJiM0MzsJCQkJICAgaW50IG5yX2ZpZWxkcywgdm9pZCAqYmFzZSkKJiM0Mzt7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9maWVsZHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZiA9ICZhbXA7ZmllbGRzW2ldOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZi0mZ3Q7ZmllbGRfaWQsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoZi0mZ3Q7c2l6ZSkgewomIzQzOwkJY2FzZSAxOiAqKHU4ICAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSAyOiAqKHUxNiAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSA0OiAqKHUzMiAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJY2FzZSA4OiAqKHU2NCAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkgPSB2YWw7IGJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdmVyc2lvbiwgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdmVyc2lvbl9maWVsZHNbXSA9IHsKJiM0MzsJTUFQX1ZFUlNJT04oTUlOT1JfVkVSU0lPTiwJbWlub3JfdmVyc2lvbiksCiYjNDM7CU1BUF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sCW1ham9yX3ZlcnNpb24pLAomIzQzOwlNQVBfVkVSU0lPTihVUERBVEVfVkVSU0lPTiwJdXBkYXRlX3ZlcnNpb24pLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodmVyc2lvbl9maWVsZHMsCiYjNDM7CQkJCSAgICAgICBBUlJBWV9TSVpFKHZlcnNpb25fZmllbGRzKSwKJiM0MzsJCQkJICAgICAgIHN5c2luZm9fdmVyc2lvbik7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgTUFQX0ZFQVRVUkVTKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19mZWF0dXJlcywgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7CiYjNDM7CU1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLAl0ZHhfZmVhdHVyZXMwKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShmZWF0dXJlc19maWVsZHMsCiYjNDM7CQkJCSAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHsKJiM0MzsJTUFQX1RETVIoTUFYX1RETVJTLAkJbWF4X3RkbXJzKSwKJiM0MzsJTUFQX1RETVIoTUFYX1JFU0VSVkVEX1BFUl9URE1SLAltYXhfcmVzZXJ2ZWRfcGVyX3RkbXIpLAomIzQzOwlNQVBfVERNUihQQU1UXzRLX0VOVFJZX1NJWkUsCXBhbXRfNGtfZW50cnlfc2l6ZSksCiYjNDM7CU1BUF9URE1SKFBBTVRfMk1fRU5UUllfU0laRSwJcGFtdF8ybV9lbnRyeV9zaXplKSwKJiM0MzsJTUFQX1RETVIoUEFNVF8xR19FTlRSWV9TSVpFLAlwYW10XzFnX2VudHJ5X3NpemUpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLAomIzQzOwkJCQkgICAgICAgQVJSQVlfU0laRSh0ZG1yX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX3RkbXIpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIE1BUF9URF9DVFJMKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb190ZF9jdHJsLCBfbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0gewomIzQzOwlNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLAl0ZHJfYmFzZV9zaXplKSwKJiM0MzsJTUFQX1REX0NUUkwoVERDU19CQVNFX1NJWkUsCXRkY3NfYmFzZV9zaXplKSwKJiM0MzsJTUFQX1REX0NUUkwoVERWUFNfQkFTRV9TSVpFLAl0ZHZwc19iYXNlX3NpemUpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2N0cmxfZmllbGRzLAomIzQzOwkJCQkgICAgICAgQVJSQVlfU0laRSh0ZF9jdHJsX2ZpZWxkcyksCiYjNDM7CQkJCSAgICAgICBzeXNpbmZvX3RkX2N0cmwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIE1BUF9IQU5ET0ZGKF9maWVsZF9pZCwgX21lbWJlcikJXAomIzQzOwlURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCBoYW5kb2ZmX2ZpZWxkc1tdID0gewomIzQzOwlNQVBfSEFORE9GRihNT0RVTEVfSFYsCW1vZHVsZV9odiksCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9faGFuZG9mZihzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgKnN5c2luZm9faGFuZG9mZikKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShoYW5kb2ZmX2ZpZWxkcywKJiM0MzsJCQkJICAgICAgIEFSUkFZX1NJWkUoaGFuZG9mZl9maWVsZHMpLAomIzQzOwkJCQkgICAgICAgc3lzaW5mb19oYW5kb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBNQVBfVERfQ09ORihfZmllbGRfaWQsIF9tZW1iZXIpCVwKJiM0MzsJVERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRfY29uZiwgX21lbWJlcikKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNjYWxhciBmaWVsZHMgb2YgdGhlICYjMzQ7VEQgQ29uZmlndXJhdGlvbiYjMzQ7IGNsYXNzLiAgbnVtX2NwdWlkX2NvbmZpZwomIzQzOyAqIG11c3QgYmUgcHJlc2VudCBoZXJlIChhbmQgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgQ1BVSUQgYXJyYXlzCiYjNDM7ICogYmVsb3cpIGJlY2F1c2UgaXQgc2l6ZXMgdGhlbS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY29uZl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHsKJiM0MzsJTUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsCWF0dHJpYnV0ZXNfZml4ZWQwKSwKJiM0MzsJTUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDEsCWF0dHJpYnV0ZXNfZml4ZWQxKSwKJiM0MzsJTUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsCXhmYW1fZml4ZWQwKSwKJiM0MzsJTUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsCXhmYW1fZml4ZWQxKSwKJiM0MzsJTUFQX1REX0NPTkYoTlVNX0NQVUlEX0NPTkZJRywJbnVtX2NwdWlkX2NvbmZpZyksCiYjNDM7CU1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsCW1heF92Y3B1c19wZXJfdGQpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZikKJiM0Mzt7CiYjNDM7CWludCByZXQsIGksIGo7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2NvbmZfZmllbGRzLAomIzQzOwkJCQkgICAgICBBUlJBWV9TSVpFKHRkX2NvbmZfZmllbGRzKSwKJiM0MzsJCQkJICAgICAgdGRfY29uZik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cyBhcmUgc2l6ZWQgYXQgcnVudGltZSBieQomIzQzOwkgKiBudW1fY3B1aWRfY29uZmlnLCBzbyB0aGV5IGNhbiYjMzk7dCBiZSBleHByZXNzZWQgaW4gYSBzdGF0aWMKJiM0MzsJICogVERfU1lTSU5GT19NQVAgdGFibGUuICBUaGVpciBmaWVsZCBJRHMgYXJlIGNvbnRpZ3VvdXMgZnJvbQomIzQzOwkgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRkX2NvbmYtJmd0O251bV9jcHVpZF9jb25maWcgJmd0OyBBUlJBWV9TSVpFKHRkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ19sZWF2ZXMpIHx8CiYjNDM7CSAgICB0ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnICZndDsgQVJSQVlfU0laRSh0ZF9jb25mLSZndDtjcHVpZF9jb25maWdfdmFsdWVzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMgJiM0MzsgaSwKJiM0MzsJCQkJCSAgICAgICZhbXA7dGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX2xlYXZlc1tpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgMjsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyAmIzQzOyBpICogMiAmIzQzOyBqOwomIzQzOwomIzQzOwkJCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3RkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbigmYW1wO3N5c2luZm8tJmd0O3ZlcnNpb24pOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7TW9kdWxlIHZlcnNpb246ICYjMzQ7IFREWF9WRVJTSU9OX0ZNVCAmIzM0O1xuJiMzNDssCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1ham9yX3ZlcnNpb24sCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sCiYjNDM7CQlzeXNpbmZvLSZndDt2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoJmFtcDtzeXNpbmZvLSZndDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoJmFtcDtzeXNpbmZvLSZndDt0ZG1yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90ZHhfc3lzX2luZm9fdGRfY29uZigmYW1wO3N5c2luZm8tJmd0O3RkX2NvbmYpOwomIzQzO30KIAogc3RhdGljIF9faW5pdCBpbnQgY2hlY2tfZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAppbmRleCBiZGZkMGUxZTMzN2FjLi5jNjEyYjFjZjdjMTQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCkBAIC01OCw2ICYjNDM7NTgsNzIgQEAKICAqLwogI2RlZmluZSBURFhfVkVSU0lPTl9TSElGVAkJMTYKIAomIzQzOy8qCiYjNDM7ICogR2xvYmFsIFNjb3BlIE1ldGFkYXRhIGZpZWxkIElEcy4KJiM0MzsgKgomIzQzOyAqIFNlZSAmIzM0O0dsb2JhbC1TY29wZSAoVERYIE1vZHVsZSkgTWV0YWRhdGEmIzM0OyBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQkkKJiM0MzsgKiBzcGVjLgomIzQzOyAqCiYjNDM7ICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhICYjMzQ7Q2xhc3MmIzM0OwomIzQzOyAqICh3aGljaCBMaW51eCBtaXJyb3JzIGluICYjMzk7c3RydWN0IHRkeF9zeXNfaW5mbyYjMzk7IHN1Yi1zdHJ1Y3R1cmVzKSwKJiM0MzsgKiB0aGUgZWxlbWVudCBzaXplLCBhbmQgYSBwZXItY2xhc3MgZmllbGQgaW5kZXguIEVhY2ggSUQgYmVsb3cKJiM0MzsgKiBpcyBwYWlyZWQgd2l0aCB0aGUgQyBtZW1iZXIgdGhhdCBob2xkcyBpdHMgdmFsdWUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyogQ2xhc3MgJiMzNDtURFggTW9kdWxlIFZlcnNpb24mIzM0OyAqLwomIzQzOyNkZWZpbmUgTURfRklFTERfSURfTUlOT1JfVkVSU0lPTgkJMHgwODAwMDAwMTAwMDAwMDAzVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQUpPUl9WRVJTSU9OCQkweDA4MDAwMDAxMDAwMDAwMDRVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1VQREFURV9WRVJTSU9OCQkweDA4MDAwMDAxMDAwMDAwMDVVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REWCBGZWF0dXJlcyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwCQkweDBBMDAwMDAzMDAwMDAwMDhVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1RETVIgSW5mbyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVERNUlMJCQkweDkxMDAwMDAxMDAwMDAwMDhVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9SRVNFUlZFRF9QRVJfVERNUgkweDkxMDAwMDAxMDAwMDAwMDlVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfNEtfRU5UUllfU0laRQkJMHg5MTAwMDAwMTAwMDAwMDEwVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzJNX0VOVFJZX1NJWkUJCTB4OTEwMDAwMDEwMDAwMDAxMVVMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfUEFNVF8xR19FTlRSWV9TSVpFCQkweDkxMDAwMDAxMDAwMDAwMTJVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REIENvbnRyb2wgU3RydWN0dXJlcyYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9URFJfQkFTRV9TSVpFCQkweDk4MDAwMDAxMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REQ1NfQkFTRV9TSVpFCQkweDk4MDAwMDAxMDAwMDAxMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1REVlBTX0JBU0VfU0laRQkJMHg5ODAwMDAwMTAwMDAwMjAwVUxMCiYjNDM7CiYjNDM7LyogQ2xhc3MgJiMzNDtURCBDb25maWd1cmF0aW9uJiMzNDsgKi8KJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwCQkweDE5MDAwMDAzMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxCQkweDE5MDAwMDAzMDAwMDAwMDFVTEwKJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX1hGQU1fRklYRUQwCQkJMHgxOTAwMDAwMzAwMDAwMDAyVUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMQkJCTB4MTkwMDAwMDMwMDAwMDAwM1VMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfTlVNX0NQVUlEX0NPTkZJRwkJMHg5OTAwMDAwMTAwMDAwMDA0VUxMCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1RECQkweDk5MDAwMDAxMDAwMDAwMDhVTEwKJiM0MzsKJiM0MzsvKiBDbGFzcyAmIzM0O1REWCBNb2R1bGUgSGFuZG9mZiYjMzQ7ICovCiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9NT0RVTEVfSFYJCQkweDg5MDAwMDAxMDAwMDAwMDBVTEwKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJhc2UgSURzIGZvciB0aGUgY29uZmlndXJhYmxlLUNQVUlEIGFycmF5cy4gIFRoZSBmaWVsZCBJRCBvZiBsZWFmCiYjNDM7ICogaW5kZXggQGkgaXMgQkFTRSAmIzQzOyBpOyBmb3IgdGhlIHZhbHVlcyBhcnJheSwgc3ViLWVudHJ5IEBqIG9mIGluZGV4CiYjNDM7ICogQGkgaXMgQkFTRSAmIzQzOyBpKjIgJiM0Mzsgai4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMJCTB4OTkwMDAwMDMwMDAwMDQwMFVMTAomIzQzOyNkZWZpbmUgTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUwkJMHg5OTAwMDAwMzAwMDAwNTAwVUxMCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuCiYjNDM7ICoKJiM0MzsgKiBTZWUgJiMzNDtNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcikKJiM0MzsgKiBEZWZpbml0aW9uJiMzNDsgaW4gdGhlIEludGVsIFREWCBNb2R1bGUgQUJJIHNwZWMuCiYjNDM7ICoKJiM0MzsgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGEKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQmIzM5O3Mgc2l6ZSBpbiBieXRlcwomIzQzOyAqLwomIzQzOyNkZWZpbmUgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkJXAomIzQzOwkoKChmaWVsZF9pZCkgJmFtcDsgR0VOTUFTS19VTEwoMzMsIDMyKSkgJmd0OyZndDsgMzIpCiYjNDM7CiYjNDM7I2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRShmaWVsZF9pZCkJCVwKJiM0MzsJKDEgJmx0OyZsdDsgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpCiYjNDM7CiAvKiBURFggcGFnZSB0eXBlcyAqLwogI2RlZmluZQlQVF9OREEJCTB4MAogI2RlZmluZQlQVF9SU1ZECQkweDEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDljMzAwZjIzZDQzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwxMzMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS4KLSAqCi0gKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvbgotICogb2YgU0VBTUNBTEwgd3JhcHBlciBwcmltaXRpdmUgd2hpY2ggcmVhZHMgZ2xvYmFsIG1ldGFkYXRhLgotICogSW5jbHVkZSB0aGlzIGZpbGUgdG8gb3RoZXIgQyBmaWxlIGluc3RlYWQuCi0gKi8KLQotc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pCi17Ci0JaW50IHJldCA9IDA7Ci0JdTY0IHZhbDsKLQotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdmVyc2lvbi0mZ3Q7bWlub3JfdmVyc2lvbiA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA0LCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3ZlcnNpb24tJmd0O21ham9yX3ZlcnNpb24gPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb192ZXJzaW9uLSZndDt1cGRhdGVfdmVyc2lvbiA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcykKLXsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgdmFsOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb19mZWF0dXJlcy0mZ3Q7dGR4X2ZlYXR1cmVzMCA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcikKLXsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgdmFsOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAwOCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDttYXhfdGRtcnMgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAwOSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDttYXhfcmVzZXJ2ZWRfcGVyX3RkbXIgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMSwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMiwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzFnX2VudHJ5X3NpemUgPSB2YWw7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsICpzeXNpbmZvX3RkX2N0cmwpCi17Ci0JaW50IHJldCA9IDA7Ci0JdTY0IHZhbDsKLQotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY3RybC0mZ3Q7dGRyX2Jhc2Vfc2l6ZSA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5ODAwMDAwMTAwMDAwMTAwLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2N0cmwtJmd0O3RkY3NfYmFzZV9zaXplID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAyMDAsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY3RybC0mZ3Q7dGR2cHNfYmFzZV9zaXplID0gdmFsOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqc3lzaW5mb190ZF9jb25mKQotewotCWludCByZXQgPSAwOwotCXU2NCB2YWw7Ci0JaW50IGksIGo7Ci0KLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgxOTAwMDAwMzAwMDAwMDAwLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O2F0dHJpYnV0ZXNfZml4ZWQwID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY29uZi0mZ3Q7YXR0cmlidXRlc19maXhlZDEgPSB2YWw7Ci0JaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMiwgJmFtcDt2YWwpKSkKLQkJc3lzaW5mb190ZF9jb25mLSZndDt4ZmFtX2ZpeGVkMCA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgxOTAwMDAwMzAwMDAwMDAzLCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O3hmYW1fZml4ZWQxID0gdmFsOwotCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsICZhbXA7dmFsKSkpCi0JCXN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZyA9IHZhbDsKLQlpZiAoIXJldCAmYW1wOyZhbXA7ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5OTAwMDAwMTAwMDAwMDA4LCAmYW1wO3ZhbCkpKQotCQlzeXNpbmZvX3RkX2NvbmYtJmd0O21heF92Y3B1c19wZXJfdGQgPSB2YWw7Ci0JaWYgKHN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZyAmZ3Q7IEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLSZndDtjcHVpZF9jb25maWdfbGVhdmVzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHN5c2luZm9fdGRfY29uZi0mZ3Q7bnVtX2NwdWlkX2NvbmZpZzsgaSYjNDM7JiM0MzspCi0JCWlmICghcmV0ICZhbXA7JmFtcDsgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgJiM0MzsgaSwgJmFtcDt2YWwpKSkKLQkJCXN5c2luZm9fdGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDsKLQlpZiAoc3lzaW5mb190ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnICZndDsgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtJmd0O2NwdWlkX2NvbmZpZ192YWx1ZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmb3IgKGkgPSAwOyBpICZsdDsgc3lzaW5mb190ZF9jb25mLSZndDtudW1fY3B1aWRfY29uZmlnOyBpJiM0MzsmIzQzOykKLQkJZm9yIChqID0gMDsgaiAmbHQ7IDI7IGomIzQzOyYjNDM7KQotCQkJaWYgKCFyZXQgJmFtcDsmYW1wOyAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDUwMCAmIzQzOyBpICogMiAmIzQzOyBqLCAmYW1wO3ZhbCkpKQotCQkJCXN5c2luZm9fdGRfY29uZi0mZ3Q7Y3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKQotewotCWludCByZXQ7Ci0JdTY0IHZhbDsKLQotCXJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4ODkwMDAwMDEwMDAwMDAwMCwgJmFtcDt2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzeXNpbmZvX2hhbmRvZmYtJmd0O21vZHVsZV9odiA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQotewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbigmYW1wO3N5c2luZm8tJmd0O3ZlcnNpb24pOwotCi0JcHJfaW5mbygmIzM0O01vZHVsZSB2ZXJzaW9uOiAmIzM0OyBURFhfVkVSU0lPTl9GTVQgJiMzNDtcbiYjMzQ7LAotCQlzeXNpbmZvLSZndDt2ZXJzaW9uLm1ham9yX3ZlcnNpb24sCi0JCXN5c2luZm8tJmd0O3ZlcnNpb24ubWlub3JfdmVyc2lvbiwKLQkJc3lzaW5mby0mZ3Q7dmVyc2lvbi51cGRhdGVfdmVyc2lvbik7Ci0KLQlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcygmYW1wO3N5c2luZm8tJmd0O2ZlYXR1cmVzKTsKLQlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZG1yKCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7Ci0JcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwotCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKLQotCXJldHVybiByZXQ7Ci19CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBURFggTWV0YWRhdGEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBsb2dpYy4gSXQgc2VlbXMgdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIGF1dG8tZ2VuZXJhdGVkIGB0ZHhfZ2xvYmFsX21ldGFkYXRhLmNgIGluIGZhdm9yIG9mIGEgdGFibGUtZHJpdmVuIGFwcHJvYWNoIHVzaW5nIGBURF9TWVNJTkZPX01BUGAgYW5kIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7aXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBURFgsIGFmdGVyIGFsbCwgaGluZ2VzIG9uIHNwZWNpZmljIEludGVsIFREWCBoYXJkd2FyZS4gQW5kIEkgbmVlZCB0byBjbGFyaWZ5LCBhcmUgd2UgdGFsa2luZyBURFggZ3Vlc3Qgb3IgaG9zdCBoZXJlPwoKV2FpdCwgdGhlIHBhdGgsIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLCB0aGF0JiMzOTtzIHRoZSBURFggaG9zdCBzdXBwb3J0IGNvZGUsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgS1ZNL1REWCBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIE9rYXksIHNvIG5vdyB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHRoaXMgYmUgZnV6emVkIG9yIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PyBJJiMzOTttIGJldHRpbmcgbm8sIGJlY2F1c2UgVERYIGhvc3Qgc3VwcG9ydCBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHRoYXQgVERYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQuIFRoYXQmIzM5O3MgYSBodWdlIGh1cmRsZS4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhpcyBpcyBwb3NzaWJsZSB3aXRob3V0IGhhcmR3YXJlLiBJIGtub3cgdGhhdCBURFggaG9zdCBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNoZWNrcyBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQgZWFybHkgb24gYW5kIGJhaWxzIG91dCBpZiBpdCYjMzk7cyBub3QgZGV0ZWN0ZWQuIEkgbmVlZCB0byBkaWcgaW50byBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYCB0byBjb25maXJtIHRoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhpcyBjaGVjayBpcywgYW5kIHdoYXQgaGFwcGVucyBpZiBpdCYjMzk7cyBieXBhc3NlZCBzb21laG93LCBkZWxpYmVyYXRlbHkgb3IgYWNjaWRlbnRhbGx5LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZSBldmVuIHdpdGhvdXQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlLCBvciBhbnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBoYXJkd2FyZSBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE3MTg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3RkeF9lcnJhdHVtKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3NDItXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0Mzp2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0ZHhfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0ZHhfaW5pdGAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIHN1YnN5c3RlbS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSXMgdGhpcyBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIHBhdHRlcm4gb3Igc29tZXRoaW5nIGN1c3RvbS1idWlsdD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSB0YXNrcyBgdGR4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciwgdGhlIHJlc291cmNlcyBpdCBtYW5hZ2VzLCBhbmQgYW55IGV4dGVybmFsIGludGVyYWN0aW9ucyBpdCB0cmlnZ2Vycy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZyB0b28uIEtub3dpbmcgd2hlcmUgdGhlIGluaXRpYWxpemF0aW9uIGlzIG9jY3VycmluZyB3aWxsIGhlbHAgbWUuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgdGhpcyBmdW5jdGlvbiBjYWxscyBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDM6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTc0NDpcdHtcbjE3NDU6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNzQ2Olx0XHRpbnQgZXJyO1xuMTc0NzpcdFxuMTc0ODpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTc0OTpcdFx0aWYgKGVycilcbjE3NTA6XHRcdFx0cmV0dXJuO1xuMTc1MTpcdFxuMTc1MjpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNzUzOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNzU0Olx0XG4xNzU1Olx0XHQvKlxuMTc1NjpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE3NTc6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNzU4Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE3NTk6XHRcdCAqIGF0IGFsbC5cbjE3NjA6XHRcdCAqL1xuMTc2MTpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE3NjI6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE3NjM6XHRcdFx0cmV0dXJuO1xuMTc2NDpcdFx0fVxuMTc2NTpcdFxuMTc2NjpcdFx0LypcbjE3Njc6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNzY4Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE3Njk6XHRcdCAqL1xuMTc3MDpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNzcxOlx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNzcyOlx0XHRcdHJldHVybjtcbjE3NzM6XHRcdH1cbjE3NzQ6XHRcbjE3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE3NzY6XHRcdGlmIChlcnIpIHtcbjE3Nzc6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNzc4Olx0XHRcdFx0XHRlcnIpO1xuMTc3OTpcdFx0XHRyZXR1cm47XG4xNzgwOlx0XHR9XG4xNzgxOlx0XG4xNzgyOlx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTc4MzpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTc4NDpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE3ODU6XHQjZW5kaWZcbjE3ODY6XHRcbjE3ODc6XHRcdC8qXG4xNzg4Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTc4OTpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNzkwOlx0XHQgKi9cbjE3OTE6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNzkyOlx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBURFggSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYHRkeF9pbml0YC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBzZXR1cCwgYW5kIGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZWFybHksIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBlc3RhYmxpc2hlcyB0aGUgc2VjdXJlIGVudmlyb25tZW50IGZvdW5kYXRpb24uIEJ1dCBub3cgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgYHRkeF9pbml0YCBkZXBlbmRzIG9uIGNvbWluZyBmcm9tPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBnZXRfdGR4X3N5c19pbmZvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGVhcmx5IGFzIHdlbGwsIG9yIGlzIGl0IGdldHRpbmcgaW5mb3JtYXRpb24gbGF0ZXIgb24/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGhvdyB0aGUgcmVsZXZhbnQgc3lzdGVtIGluZm9ybWF0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGFuZCB1c2VkIGluIHRoZSBURFggbGlmZWN5Y2xlLiBUaGlzIHRyYWNlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2VjdXJpdHkgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdGR4X3N5c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00MDY9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQxMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0MTI6c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uICpzeXNpbmZvX3ZlcnNpb24pXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDEzLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCBmZWF0dXJlc19maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI1LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQyNjpzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI3LXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZG1yX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDMtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDQ0OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDUte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2N0cmxfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ1OS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0NjA6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ2MS17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQ3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgaGFuZG9mZl9maWVsZHNbXSA9IHtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDczLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQ3NDpzdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9faGFuZG9mZihzdHJ1Y3QgdGR4X3N5c19pbmZvX2hhbmRvZmYgKnN5c2luZm9faGFuZG9mZilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NzUte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5Ny1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0OTg6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00OTkte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MzYtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTM3OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mzgte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NDAtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTQxOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTQyLVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTAtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTUxOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhcdTAwMjZzeXNpbmZvLVx1MDAzZWZlYXR1cmVzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTItXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU1Olx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yKFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTU2LVx0aWYgKHJldClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTU4LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjU1OTpcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2MC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo1NjM6XHRyZXR1cm4gZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTY0LX1cbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTM1OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzYzOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mbyhcdTAwMjZ0ZHhfc3lzaW5mbyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2NC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE0ODU9aW50IHRkeF9tb2R1bGVfc2h1dGRvd24odm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ5MS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDkyOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKFx1MDAyNmhhbmRvZmYpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0OTMtXHQvKlxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTIzPWludCB0ZHhfbW9kdWxlX3J1bl91cGRhdGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTUzMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNTMyOlx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnRkeF9zeXNpbmZvLnZlcnNpb24pO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1MzMtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIFREWCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSBzZWUgYGluaXRfdGR4X21vZHVsZWAgaXMgY2FsbGluZyBgZ2V0X3RkeF9zeXNfaW5mb2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGluaXRpYWxpemluZyB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBtb2R1bGUgdXN1YWxseSBpbnZvbHZlcyBnYXRoZXJpbmcgc29tZSBzeXN0ZW0tbGV2ZWwgaW5mb3JtYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGVyZSBleGFjdGx5IGlzIGBpbml0X3RkeF9tb2R1bGVgIGJlaW5nIGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYXJvdW5kIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIGNyaXRpY2FsLiBJcyBpdCBiZWluZyB0cmlnZ2VyZWQgYXQgYm9vdCwgb24tZGVtYW5kIGJ5IGFub3RoZXIgc2VydmljZSwgb3IgaW4gcmVzcG9uc2UgdG8gc29tZSBleHRlcm5hbCBldmVudD8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGdpdmVzIGEgaHVnZSBhbW91bnQgb2YgaW5zaWdodCBpbnRvIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJiMzOTtzIGludGVncmF0aW9uIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gQ29udGV4dCBpcyBrZXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF90ZHhfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzQwPXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzNTgtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM1OTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzYwLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ0MD1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NjktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3MDpcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NzEtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcG9pbnQgb2YgZW50cnkgaXMgYHRkeF9lbmFibGVgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvLCB3ZWxsLCBlbmFibGluZyBURFguIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaG93IGRvZXMgaXQgZG8gdGhhdD8gQWhhLCB0aGUgdGV4dCBwb2ludHMgb3V0IGB0ZHhfZW5hYmxlYCBjYWxscyBgaW5pdF90ZHhfbW9kdWxlYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB0aGVuLCB0aGUgcGxhY2Ugd2hlcmUgYWxsIHRoZSBuZWNlc3Nhcnkgc2V0dXAgcHJvYmFibHkgaGFwcGVucy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBhbmQgdGhlICp3aGVuKi4gU28sIG15IG5leHQgcXVlc3Rpb24gaXMgcGFyYW1vdW50OiB3aGVyZSB0aGUgaGVjayBpcyBgdGR4X2VuYWJsZWAgYWN0dWFsbHkgKmNhbGxlZCo/IEZpbmRpbmcgdGhlIGNhbGwgc2l0ZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIFREWCBlbmFibGVtZW50IGZsb3csIHRoZSBwcmVjb25kaXRpb25zIGZvciBpdCwgYW5kIHdoYXQgdHJpZ2dlcnMgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2VuYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTM1OT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQzOS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDQwOnN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQxLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ4Mi19XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ4MzpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVERYIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBpcyBkZWNsYXJlZCBhcyBhIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCB0aGF0JiMzOTtzIGluaXRpYWxpemVkIHByZXR0eSBlYXJseSBkdXJpbmcgdGhlIHN5c3RlbSBib290IHByb2Nlc3MsIGxpa2VseSBiZWZvcmUgbW9zdCBkcml2ZXJzIGFyZSB1cCBhbmQgcnVubmluZy4gSXQgbWVhbnMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgdG8gYmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfZW5hYmxlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHNldHRpbmcgdXAgdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4xNDQxOlx0e1xuMTQ0MjpcdFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcbjE0NDM6XHRcdGludCByZXQ7XG4xNDQ0Olx0XG4xNDQ1Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4xNDQ2Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4xNDQ3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTQ0ODpcdFx0fVxuMTQ0OTpcdFxuMTQ1MDpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1hTQVZFKSkge1xuMTQ1MTpcdFx0XHRwcl9lcnIoXCYjMzQ7WFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4xNDUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ1MzpcdFx0fVxuMTQ1NDpcdFxuMTQ1NTpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcbjE0NTY6XHRcdFx0cHJfZXJyKFwmIzM0O01PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjE0NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU4Olx0XHR9XG4xNDU5Olx0XG4xNDYwOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xuMTQ2MTpcdFx0XHRwcl9lcnIoXCYjMzQ7U2VsZi1zbm9vcCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjE0NjI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYzOlx0XHR9XG4xNDY0Olx0XG4xNDY1Olx0XHRzdGF0ZSA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O3ZpcnQvdGR4Om9ubGluZVwmIzM0OyxcbjE0NjY6XHRcdFx0XHRcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XG4xNDY3Olx0XHRpZiAoc3RhdGUgXHUwMDNjIDApXG4xNDY4Olx0XHRcdHJldHVybiBzdGF0ZTtcbjE0Njk6XHRcbjE0NzA6XHRcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuMTQ3MTpcdFx0aWYgKHJldCkge1xuMTQ3MjpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbjE0NzM6XHRcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlKTtcbjE0NzQ6XHRcdFx0cmV0dXJuIHJldDtcbjE0NzU6XHRcdH1cbjE0NzY6XHRcbjE0Nzc6XHRcdHJlZ2lzdGVyX3N5c2NvcmUoXHUwMDI2dGR4X3N5c2NvcmUpO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0dGR4X21vZHVsZV9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4xNDgwOlx0XHRwcl9pbmZvKFwmIzM0O1REWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTQ4MTpcdFx0cmV0dXJuIDA7XG4xNDgyOlx0fVxuMTQ4MzpcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbjE0ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBURFggSG9zdCBQbGF0Zm9ybSBTdXBwb3J0IGluIEtlcm5lbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGR4X2VuYWJsZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiB0aGUgaG9zdCBwbGF0Zm9ybSBzdXBwb3J0cyBURFggdGhyb3VnaCBgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSlgLiBNYWtlcyBzZW5zZS4gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBURFgsIHdoaWNoIEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoaXMgZW52aXJvbm1lbnQsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBgLUVOT0RFVmAuIEkgc3RhcnQgd29uZGVyaW5nLCBjYW4gUUVNVSBlbXVsYXRlIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGJpdD8gVXN1YWxseSwgdGhhdCBraW5kIG9mIFREWCBob3N0IHN1cHBvcnQgZGVtYW5kcyBhY3R1YWwgVERYIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9uIHRoYXQmIzM5O3MgZmFyIGZyb20gdGhlIG5vcm0uIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBTeXprYWxsZXIsIHNvIHRoaXMgaXMgdW5saWtlbHkgdG8gYmUgcnVubmluZyBvbiBURFggaGFyZHdhcmUhIFRoYXQgY2xpY2tzLgoKU28sIGlmIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmZWF0dXJlIGlzbiYjMzk7dCBwcmVzZW50LCBgdGR4X2VuYWJsZWAgYmFpbHMgb3V0IGVhcmx5LiBNZWFuaW5nLCBgaW5pdF90ZHhfbW9kdWxlYCwgd2hpY2ggc3Vic2VxdWVudGx5IGNhbGxzIGBnZXRfdGR4X3N5c19pbmZvYCwgaXMgbmV2ZXIgZXZlbiByZWFjaGVkLiBUaGF0IGV4cGxhaW5zIHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgaXMgYWN0dWFsbHkgc2V0LiBUaW1lIHRvIGdvIGh1bnRpbmcgaW4gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0xOTAtI2RlZmluZSBYODZfRkVBVFVSRV9DRFBfTDNcdFx0KCA3KjMyJiM0MzsgNikgLyogXCYjMzQ7Y2RwX2wzXCYjMzQ7IENvZGUgYW5kIERhdGEgUHJpb3JpdGl6YXRpb24gTDMgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6MTkxOiNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1cdCggNyozMiYjNDM7IDcpIC8qIFwmIzM0O3RkeF9ob3N0X3BsYXRmb3JtXCYjMzQ7IFBsYXRmb3JtIHN1cHBvcnRzIGJlaW5nIGEgVERYIGhvc3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMTkyLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSFdfUFNUQVRFXHRcdCggNyozMiYjNDM7IDgpIC8qIFwmIzM0O2h3X3BzdGF0ZVwmIzM0OyBBTUQgSFctUFN0YXRlICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDM2PWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDY3Olx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LVx0XHRwcl9lcnIoXCYjMzQ7VERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDQwPXN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ0NC1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNDQ1Olx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NDYtXHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODI9c3RhdGljIGJvb2wgcGFkZHJfaXNfdGR4X3ByaXZhdGUodW5zaWduZWQgbG9uZyBwaHlzKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTg4LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODk6XHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3OTQtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc5NTpcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE3OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDAxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYHRkeF9pbml0YCYjMzk7cyBDUFUgRmVhdHVyZSBTZXR1cCoqCgpSaWdodCwgdGhhdCYjMzk7cyBpdCEgYHRkeF9pbml0YCBpcyBjYWxsaW5nIGBzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtgLiBHb29kLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGluaXRpYWwgc3RlcC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGB0ZHhfaW5pdGAmIzM5O3Mgb3ZlcmFsbCBwdXJwb3NlLCBhbmQgdGhpcyBmdW5jdGlvbiBjYWxsIGNvbmZpcm1zIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgQ1BVIGZlYXR1cmVzIHJlcXVpcmVkIGZvciB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0JiMzOTtzIHB1c2hpbmcgdGhhdCBjcnVjaWFsIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBhbmQgc2VlIHdoZXJlIHdlIGFyZS4gTGV0JiMzOTtzIGRlbHZlIGJhY2sgaW50byBgdGR4X2luaXRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBzeXN0ZW0gdG8gYWNjb21tb2RhdGUgVERYLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpdCBkb2VzLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBzZXRzIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGl0IGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDM6XHR2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuMTc0NDpcdHtcbjE3NDU6XHRcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XG4xNzQ2Olx0XHRpbnQgZXJyO1xuMTc0NzpcdFxuMTc0ODpcdFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFx1MDAyNm5yX3RkeF9rZXlpZHMpO1xuMTc0OTpcdFx0aWYgKGVycilcbjE3NTA6XHRcdFx0cmV0dXJuO1xuMTc1MTpcdFxuMTc1MjpcdFx0cHJfaW5mbyhcJiMzNDtCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXG5cJiMzNDssXG4xNzUzOlx0XHRcdFx0dGR4X2tleWlkX3N0YXJ0LCB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgbnJfdGR4X2tleWlkcyk7XG4xNzU0Olx0XG4xNzU1Olx0XHQvKlxuMTc1NjpcdFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IHRvIHByb3RlY3RcbjE3NTc6XHRcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJiMzOTtzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJiMzOTt0IGJlXG4xNzU4Olx0XHQgKiBhbnkgbGVmdCBmb3IgVERYIGd1ZXN0cyB0aHVzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcbjE3NTk6XHRcdCAqIGF0IGFsbC5cbjE3NjA6XHRcdCAqL1xuMTc2MTpcdFx0aWYgKG5yX3RkeF9rZXlpZHMgXHUwMDNjIDIpIHtcbjE3NjI6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxuXCYjMzQ7KTtcbjE3NjM6XHRcdFx0cmV0dXJuO1xuMTc2NDpcdFx0fVxuMTc2NTpcdFxuMTc2NjpcdFx0LypcbjE3Njc6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXG4xNzY4Olx0XHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbjE3Njk6XHRcdCAqL1xuMTc3MDpcdFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XG4xNzcxOlx0XHRcdHByX2VycihcJiMzNDtpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcblwmIzM0Oyk7XG4xNzcyOlx0XHRcdHJldHVybjtcbjE3NzM6XHRcdH1cbjE3NzQ6XHRcbjE3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcbjE3NzY6XHRcdGlmIChlcnIpIHtcbjE3Nzc6XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXG5cJiMzNDssXG4xNzc4Olx0XHRcdFx0XHRlcnIpO1xuMTc3OTpcdFx0XHRyZXR1cm47XG4xNzgwOlx0XHR9XG4xNzgxOlx0XG4xNzgyOlx0I2lmIGRlZmluZWQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxuMTc4MzpcdFx0cHJfaW5mbyhcJiMzNDtEaXNhYmxlIEFDUEkgUzMuIFR1cm4gb2ZmIFREWCBpbiB0aGUgQklPUyB0byB1c2UgQUNQSSBTMy5cXG5cJiMzNDspO1xuMTc4NDpcdFx0YWNwaV9zdXNwZW5kX2xvd2xldmVsID0gTlVMTDtcbjE3ODU6XHQjZW5kaWZcbjE3ODY6XHRcbjE3ODc6XHRcdC8qXG4xNzg4Olx0XHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAmIzM5O2dsb2JhbCBLZXlJRCYjMzk7IGFuZFxuMTc4OTpcdFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXG4xNzkwOlx0XHQgKi9cbjE3OTE6XHRcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XG4xNzkyOlx0XHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgJiM0MzsgMTtcbjE3OTM6XHRcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcbjE3OTQ6XHRcbjE3OTU6XHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pO1xuMTc5NjpcdFxuMTc5NzpcdFx0Y2hlY2tfdGR4X2VycmF0dW0oKTtcbjE3OTg6XHR9XG4xNzk5Olx0XG4xODAwOlx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X2dldF9zeXNpbmZvKHZvaWQpXG4xODAxOlx0e1xuMTgwMjpcdFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERYIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgdGR4X2luaXRgIHdvcmtzIGhlcmUuIEl0IHNlZW1zIHRoYXQgaXRzIGtleSByb2xlLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCBpcyB0byBzZXQgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBUaGUgY29uZGl0aW9uIGZvciB0aGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCBuZWVkcyB0byBiZSBzdWNjZXNzZnVsLCBhbmQgY3J1Y2lhbGx5LCBpdCBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSwgYG5yX3RkeF9rZXlpZHNgLCB0aGF0JiMzOTtzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBzZWVtcyB0aGF0IHRoZSBwcmVzZW5jZSBvZiAqYXQgbGVhc3QqIHR3byBURFgga2V5IElEcyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgZW5hYmxpbmcgdGhlIFREWCBob3N0IHBsYXRmb3JtIGZlYXR1cmVzLiBUaGUgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCB0aGVuLCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGRldGVybWluZXMgc3VjY2VzcyBhbmQgaG93IGl0IGNhbGN1bGF0ZXMgdGhpcyBgbnJfdGR4X2tleWlkc2AgdmFsdWUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGllcywgYW5kIHdoZXJlIEkgY2FuIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0mIzM5O3MgVERYIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE2MzI9Y29uc3QgY2hhciAqdGR4X2R1bXBfbWNlX2luZm8oc3RydWN0IG1jZSAqbSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTY0Mi1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjQzOnN0YXRpYyBfX2luaXQgaW50IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcodTMyICp0ZHhfa2V5aWRfc3RhcnQsXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTY0NC1cdFx0XHRcdFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTc0Mz12b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNzQ3LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE3NDg6XHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFx1MDAyNnRkeF9rZXlpZF9zdGFydCwgXHUwMDI2bnJfdGR4X2tleWlkcyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0OS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gVGhlIGZpcnN0IHRob3VnaHQgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGFib3V0IHRvIGFzc2VzcyBhIHNwZWNpZmljIGFwcHJvYWNoIG9yIGRlc2lnbiByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgYnJlYWtpbmcgZG93biBhbmQgb3JnYW5pemluZyBkYXRhLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHdlIGFzc2lnbiBhbmQgdXNlIHJlY29yZCBrZXlzIHdpdGhpbiBhIHBhcnRpdGlvbmVkIHN0cnVjdHVyZS4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBlaXRoZXIgYW4gZXhpc3Rpbmcgc3lzdGVtIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgb3Igc29tZXRoaW5nIG5ldyB0aGF0JiMzOTtzIHByZXNlbnRlZCBpdHNlbGYgYXMgYSBwb3RlbnRpYWwgc29sdXRpb24gb3IgYSBwb2ludCBvZiBpbnRlcmVzdC4gVGhlIG5hbWluZyBjb252ZW50aW9uICYjMzQ7cmVjb3JkX2tleWlkJiMzNDsgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgbWVudGFsIGRhdGFiYXNlIG9mIHBvc3NpYmxlIGFwcGxpY2F0aW9uczogZGF0YSB3YXJlaG91c2luZywgZGlzdHJpYnV0ZWQgZGF0YWJhc2VzLCBldmVudCBzdHJlYW1pbmcgc3lzdGVtcywgcG9zc2libHkgZXZlbiBzb21ldGhpbmcgbW9yZSBuaWNoZSBsaWtlIGEgc3BlY2lhbGl6ZWQga2V5LXZhbHVlIHN0b3JlLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBpbml0aWFsIHF1ZXN0aW9uczogSXMgdGhpcyBhIHNoYXJkaW5nIHN0cmF0ZWd5PyBJcyBpdCBiYXNlZCBvbiBoYXNoaW5nLCByYW5nZSBwYXJ0aXRpb25pbmcsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQmIzM5O3MgdGhlIGFudGljaXBhdGVkIGRhdGEgdm9sdW1lIGFuZCB3cml0ZS9yZWFkIHBhdHRlcm5zIHRoYXQgdGhpcyBwYXJ0aXRpb25pbmcgc2NoZW1lIGlzIGRlc2lnbmVkIHRvIGhhbmRsZT8gVGhlIHRlcm0gJiMzNDtwYXJ0aXRpb25pbmcmIzM0OyBpdHNlbGYgaW1wbGllcyBhIGRlc2lyZSBmb3Igc2NhbGFiaWxpdHksIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIHBvdGVudGlhbCBwYXJhbGxlbCBwcm9jZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgaW1wbGVtZW50YXRpb24gYWNoaWV2ZXMgdGhvc2UgZ29hbHMgKG9yIGF0dGVtcHRzIHRvKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NDM6XHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxuMTY0NDpcdFx0XHRcdFx0XHQgICAgdTMyICpucl90ZHhfa2V5aWRzKVxuMTY0NTpcdHtcbjE2NDY6XHRcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcbjE2NDc6XHRcdGludCByZXQ7XG4xNjQ4Olx0XG4xNjQ5Olx0XHQvKlxuMTY1MDpcdFx0ICogSUEzMl9NS1RNRV9LRVlJRF9QQVJUSU9OSU5HOlxuMTY1MTpcdFx0ICogICBCaXQgWzMxOjBdOlx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cbjE2NTI6XHRcdCAqICAgQml0IFs2MzozMl06XHROdW1iZXIgb2YgVERYIHByaXZhdGUgS2V5SURzLlxuMTY1MzpcdFx0ICovXG4xNjU0Olx0XHRyZXQgPSByZG1zcl9zYWZlKE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklORywgXHUwMDI2X25yX21rdG1lX2tleWlkcyxcbjE2NTU6XHRcdFx0XHRcdTAwMjZfbnJfdGR4X2tleWlkcyk7XG4xNjU2Olx0XHRpZiAocmV0IHx8ICFfbnJfdGR4X2tleWlkcylcbjE2NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjU4Olx0XG4xNjU5Olx0XHQvKiBURFggS2V5SURzIHN0YXJ0IGFmdGVyIHRoZSBsYXN0IE1LVE1FIEtleUlELiAqL1xuMTY2MDpcdFx0X3RkeF9rZXlpZF9zdGFydCA9IF9ucl9ta3RtZV9rZXlpZHMgJiM0MzsgMTtcbjE2NjE6XHRcbjE2NjI6XHRcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xuMTY2MzpcdFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcbjE2NjQ6XHRcbjE2NjU6XHRcdHJldHVybiAwO1xuMTY2NjpcdH1cbjE2Njc6XHRcbjE2Njg6XHRzdGF0aWMgYm9vbCBpc190ZHhfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4xNjY5Olx0e1xuMTY3MDpcdFx0c3RydWN0IHRkeF9tZW1ibG9jayAqdG1iO1xuMTY3MTpcdFxuMTY3MjpcdFx0LypcbjE2NzM6XHRcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cdTAwM2MtXHUwMDNlZW5kX3BmbiByYW5nZSBkb2VzIG5vdFxuMTY3NDpcdFx0ICogY3Jvc3MgbXVsdGlwbGUgQHRkeF9tZW1saXN0IGVudHJpZXMuICBBIHNpbmdsZSBtZW1vcnkgb25saW5lXG4xNjc1Olx0XHQgKiBldmVudCBhY3Jvc3MgbXVsdGlwbGUgbWVtYmxvY2tzIChmcm9tIHdoaWNoIEB0ZHhfbWVtbGlzdFxuMTY3NjpcdFx0ICogZW50cmllcyBhcmUgZGVyaXZlZCBhdCB0aGUgdGltZSBvZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24pIGlzXG4xNjc3Olx0XHQgKiBub3QgcG9zc2libGUuICBUaGlzIGlzIGJlY2F1c2UgbWVtb3J5IG9mZmxpbmUvb25saW5lIGlzIGRvbmVcbjE2Nzg6XHRcdCAqIG9uIGdyYW51bGFyaXR5IG9mICYjMzk7c3RydWN0IG1lbW9yeV9ibG9jayYjMzk7LCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxuMTY3OTpcdFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cbjE2ODA6XHRcdCAqL1xuMTY4MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFx1MDAyNnRkeF9tZW1saXN0LCBsaXN0KSB7XG4xNjgyOlx0XHRcdGlmIChzdGFydF9wZm4gXHUwMDNlPSB0bWItXHUwMDNlc3RhcnRfcGZuIFx1MDAyNlx1MDAyNiBlbmRfcGZuIFx1MDAzYz0gdG1iLVx1MDAzZWVuZF9wZm4pXG4xNjgzOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4xNjg0Olx0XHR9XG4xNjg1Olx0XHRyZXR1cm4gZmFsc2U7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdHN0YXRpYyBpbnQgdGR4X21lbW9yeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbjE2ODk6XHRcdFx0XHQgICAgICAgdm9pZCAqdilcbjE2OTA6XHR7XG4xNjkxOlx0XHRzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqbW4gPSB2O1xuMTY5MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTExNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1LVE1FIEtleSBJRCBQYXJ0aXRpb25pbmcgaW4gYSBURFggQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3Mgc3RhcnRpbmcgYnkgcmVhZGluZyB0aGUgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AgTVNSLiBOb3csIGlmIHRoYXQgTVNSIGlzbiYjMzk7dCBwcmVzZW50IG9yIGlmIHRoZSBudW1iZXIgb2YgVERYIGtleSBJRHMgY29tZXMgYmFjayBhcyB6ZXJvLCBpdCYjMzk7cyB0aHJvd2luZyBhbiBgLUVJTlZBTGAgZXJyb3IuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIG5leHQgcXVlc3Rpb24gaXM6IGNhbiBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoYXQgTVNSPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRpZWQgdG8gc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBjZXJ0YWluIGZlYXR1cmUgZmxhZ3MuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCkV2ZW4gaWYgUUVNVSAqZG9lcyogZW11bGF0ZSBpdCwgaXQmIzM5O3Mgbm90IHRoZSBlbmQgb2YgdGhlIGxpbmUuIFRoZSBgdGR4X2VuYWJsZWAgY2FsbCB0cmlnZ2VycyBgaW5pdF90ZHhfbW9kdWxlYCwgYW5kICp0aGF0KiBjYWxscyBgZ2V0X3RkeF9zeXNfaW5mb2AuIFRoZW4sIGBnZXRfdGR4X3N5c19pbmZvYCBjYWxscyBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBwYXJ0LiBTcGVjaWZpY2FsbHksIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgaXMgZXhlY3V0aW5nIGEgYFRESC5TWVMuUkRgIFNFQU1DQUxMLiBTbywgKnRoYXQqIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgVERYIHN5c3RlbSBtZXRhZGF0YSByZWFkLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgYW5kIHNlZSB3aGF0IGl0IGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX3N5c19tZXRhZGF0YV9maWVsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9Mjk4PXN0YXRpYyBfX2luaXQgaW50IGJ1aWxkX3RkeF9tZW1saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zMjktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MzMwOnN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzMxLXtcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9Mzc4PXN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcyxcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzg2LVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjM4NzpcdFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoZi1cdTAwM2VmaWVsZF9pZCwgXHUwMDI2dmFsKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zODgtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQ5OD1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICp0ZF9jb25mKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkmIzQzOyYjNDM7KSB7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTE5Olx0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICYjNDM7IGksXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTIwLVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0ZF9jb25mLVx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjYtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTI3Olx0XHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjgtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBpbnB1dHM6IHdoYXQgZG9lcyBpdCBleHBlY3QgdG8gcmVjZWl2ZT8gSXMgaXQgYSBrZXksIGEgcGF0aCwgc29tZSBzb3J0IG9mIGlkZW50aWZpZXI/IEFuZCBqdXN0IGFzIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIGl0cyBvdXRwdXQ/IERvZXMgaXQgcmV0dXJuIHRoZSBtZXRhZGF0YSBkaXJlY3RseSwgb3Igc29tZSBzb3J0IG9mIGhhbmRsZSBvciBvYmplY3QgdGhhdCBJIHRoZW4gbmVlZCB0byBpbnRlcmFjdCB3aXRoPyBJcyBpdCByYXcgZGF0YSBvciBpcyBpdCBhbHJlYWR5IHBhcnNlZCB0byBKU09OIG9yIHNvbWUgb3RoZXIgZm9ybWF0PyBLbm93aW5nIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGlzICpjcml0aWNhbCogZm9yIHRoaXMgZXhwbG9yYXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0JiMzOTtzIHRoZSBzdG9yYWdlIG1lY2hhbmlzbSBmb3IgdGhpcyBzeXN0ZW0gbWV0YWRhdGE/IElzIGl0IGEga2V5LXZhbHVlIHN0b3JlLCBhIGRhdGFiYXNlLCBhIGZpbGUgc3lzdGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIG1vZGVsIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSBteSBpbnRlcnByZXRhdGlvbi4gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBvciBwcmUtY29uZGl0aW9ucyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBtZXRhZGF0YT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBncmFjZWZ1bGx5PyBEb2VzIGl0IG9mZmVyIGFueSB0eXBlIG9mIGNhY2hpbmcgdG8gc3BlZWQgdXAgdGhlIG1ldGFkYXRhIHJldHJpZXZhbCwgYW5kIGlmIHNvLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIGRhdGEgY29uc2lzdGVuY3k/CgpJIHdpbGwgcGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIG1ldGFkYXRhIGZpZWxkIGRvZXNuJiMzOTt0IGV4aXN0PyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiwgcmV0dXJuIGEgbnVsbCB2YWx1ZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byB3cml0aW5nIHJvYnVzdCBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQuIEFuZCBldmVuIG1vcmUgaW1wb3J0YW50bHksIEkmIzM5O2xsIGFzc2VzcyB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBpZiBhbnkuIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFjY2VzcyB0byBzZW5zaXRpdmUgaW5mb3JtYXRpb24/IEFyZSB0aGVyZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gaW5qZWN0aW9uIG9yIHVuYXV0aG9yaXplZCBhY2Nlc3M/IEZpbmFsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGNvbmN1cnJlbmN5IGlmIHRoZSBlbnZpcm9ubWVudCBpcyBtdWx0aXRocmVhZGVkLiBXaWxsIHRoZXJlIGJlIGFueSByYWNlIGNvbmRpdGlvbnMsIG9yIGlzIHRoaXMgdGhyZWFkLXNhZmU/IE9rLCBsZXQmIzM5O3MgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuIDMzMTpcdHtcbiAzMzI6XHRcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuIDMzMzpcdFx0aW50IHJldDtcbiAzMzQ6XHRcbiAzMzU6XHRcdC8qXG4gMzM2Olx0XHQgKiBUREguU1lTLlJEIC0tIHJlYWRzIG9uZSBnbG9iYWwgbWV0YWRhdGEgZmllbGRcbiAzMzc6XHRcdCAqICAtIFJEWCAoaW4pOiB0aGUgZmllbGQgdG8gcmVhZFxuIDMzODpcdFx0ICogIC0gUjggKG91dCk6IHRoZSBmaWVsZCBkYXRhXG4gMzM5Olx0XHQgKi9cbiAzNDA6XHRcdGFyZ3MucmR4ID0gZmllbGRfaWQ7XG4gMzQxOlx0XHRyZXQgPSBzZWFtY2FsbF9wcmVycl9yZXQoVERIX1NZU19SRCwgXHUwMDI2YXJncyk7XG4gMzQyOlx0XHRpZiAocmV0KVxuIDM0MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM0NDpcdFxuIDM0NTpcdFx0KmRhdGEgPSBhcmdzLnI4O1xuIDM0NjpcdFxuIDM0NzpcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0fVxuIDM0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcG9zc2liaWxpdHkgb2YgUmVhY2hpbmcgYHNlYW1jYWxsX3ByZXJyX3JldGAqKgoKT2theSwgc28gYHNlYW1jYWxsX3ByZXJyX3JldGAgaW52b2x2ZXMgYSBgU0VBTUNBTExgIGluc3RydWN0aW9uLCB3aGljaCBpcyBwcmV0dHkgbmljaGUuIEl0JiMzOTtzIGEgVk1YIGluc3RydWN0aW9uLCBtZWFuaW5nIGl0IG5lZWRzIFZNWCByb290IG9wZXJhdGlvbiwgYW5kIGNyaXRpY2FsbHksIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQg4oCTIG5hbWVseSwgYW4gSW50ZWwgVERYIG1vZHVsZSBsb2FkZWQgd2l0aGluIHRoZSBTRUFNIHJhbmdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSB0cmlnZ2VyZWQgaW4gUUVNVT8gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgbm8uIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgVERYIG1vZHVsZSBvciBgU0VBTUNBTExgLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGVudmlyb25tZW50IEkgd29yayBpbiwgc3l6a2FsbGVyLCBpc24mIzM5O3Qgc2V0IHVwIHRvIHJ1biB3aXRoIFREWCBlbXVsYXRpb24sIGF0IGxlYXN0IG5vdCB0aGF0IEkmIzM5O20gYXdhcmUgb2YuCgpUaGF0IG1ha2VzIG1lIHdvbmRlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJ1biogb24gcmVhbCBURFggaGFyZHdhcmUgYW55d2hlcmU/IFRoZSBjb250ZXh0IG1lbnRpb25zIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBoaXRzIGhvbWUuIFREWCBob3N0IGNvZGUgZGVtYW5kcyAqYWN0dWFsKiBwaHlzaWNhbCBURFggaGFyZHdhcmUsIHdpdGggdGhlIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgdGhpcyBlZmZlY3RpdmVseSBtZWFucyB0aGlzIGNvZGUgaXMgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHR5cGljYWwgUUVNVS9HQ0UgZGV2ZWxvcG1lbnQgc2V0dXAuCgpOb3csIGEga2VybmVsIGJ1ZyBpcyBhIGtlcm5lbCBidWcsIGFuZCBJIGNhbiYjMzk7dCBqdXN0IHRocm93IHVwIG15IGhhbmRzLiBJcyB0aGVyZSAqYW55KiB0cmljayB0byB0cnkgYW5kICYjMzQ7ZmFrZSYjMzQ7IGBzZWFtY2FsbGAgc28gSSBjYW4gdGVzdCBhcm91bmQgaXQ/IE9rYXksIHRpbWUgdG8gZ28gYmFjayB0byBiYXNpY3MsIGFuZCBjaGVjayBgc2VhbWNhbGxfcHJlcnJfcmV0YCBpdHNlbGYgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlYW1jYWxsX3ByZXJyX3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaD04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzY19yZXRyeV9wcmVycihzY19mdW5jX3QgZnVuYyxcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDUtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaDoxMDY6I2RlZmluZSBzZWFtY2FsbF9wcmVycl9yZXQoX19mbiwgX19hcmdzKVx0XHRcdFx0XHRcXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA3LVx0c2NfcmV0cnlfcHJlcnIoX19zZWFtY2FsbF9yZXQsIHNlYW1jYWxsX2Vycl9yZXQsIChfX2ZuKSwgKF9fYXJncykpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTMzMD1zdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zNDAtXHRhcmdzLnJkeCA9IGZpZWxkX2lkO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjM0MTpcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1JELCBcdTAwMjZhcmdzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0zNDItXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzA5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzIzLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMjQ6XHRcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1RETVJfSU5JVCwgXHUwMDI2YXJncyk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMyNS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYF9fc2VhbWNhbGxfcmV0YCoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHJldHVybiB2YWx1ZSwgc3BlY2lmaWNhbGx5IGBfX3NlYW1jYWxsX3JldGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aHkqIHdlJiMzOTtyZSBleGFtaW5pbmcgdGhpcy4gSXMgaXQgYSBzdXNwZWN0ZWQgaXNzdWU/IEFyZSB3ZSB0cmFjaW5nIGEgYnVnPyBPciBhcmUgd2Ugc2ltcGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGNvbnRyb2wgZmxvdyBtb3JlIGRlZXBseSBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGU/IEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZXMsIGBfX3NlYW1jYWxsX3JldGAgaXMgbGlrZWx5IGEgc2VhbSBjYWxsIHJldHVybiB2YWx1ZSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IHdoYXQgY29udGV4dCBhcmUgd2UgaW4/IFdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIHZhbHVlLCBhcyBpdCBjb3VsZCBwb2ludCB0b3dhcmQgYSBudW1iZXIgb2YgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NlYW1jYWxsX3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUz0yMz1TWU1fRlVOQ19FTkQoX19zZWFtY2FsbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yNS0vKlxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6MjY6ICogX19zZWFtY2FsbF9yZXQoKSAtIEhvc3Qtc2lkZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIFNFQU0gc29mdHdhcmVcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTI3LSAqICh0aGUgUC1TRUFNTERSIG9yIHRoZSBURFggbW9kdWxlKSwgd2l0aCBzYXZpbmcgb3V0cHV0IHJlZ2lzdGVycyB0b1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTI5LSAqXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzozMDogKiBfX3NlYW1jYWxsX3JldCgpIGZ1bmN0aW9uIEFCSTpcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTMxLSAqXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtMzktICovXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzo0MDpTWU1fRlVOQ19TVEFSVChfX3NlYW1jYWxsX3JldClcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTQxLVx0VERYX01PRFVMRV9DQUxMIGhvc3Q9MSByZXQ9MVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6NDI6U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGxfcmV0KVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtNDMtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9MjA9dTY0IF9fc2VhbWNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjIxOnU2NCBfX3NlYW1jYWxsX3JldCh1NjQgZm4sIHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgKmFyZ3MpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMjItdTY0IF9fc2VhbWNhbGxfc2F2ZWRfcmV0KHU2NCBmbiwgc3RydWN0IHRkeF9tb2R1bGVfYXJncyAqYXJncyk7XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9NDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgc2NfcmV0cnkoc2NfZnVuY190IGZ1bmMsIHU2NCBmbixcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC02MC0jZGVmaW5lIHNlYW1jYWxsKF9mbiwgX2FyZ3MpXHRcdHNjX3JldHJ5KF9fc2VhbWNhbGwsIChfZm4pLCAoX2FyZ3MpKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6NjE6I2RlZmluZSBzZWFtY2FsbF9yZXQoX2ZuLCBfYXJncylcdHNjX3JldHJ5KF9fc2VhbWNhbGxfcmV0LCAoX2ZuKSwgKF9hcmdzKSlcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oLTYyLSNkZWZpbmUgc2VhbWNhbGxfc2F2ZWRfcmV0KF9mbiwgX2FyZ3MpXHRzY19yZXRyeShfX3NlYW1jYWxsX3NhdmVkX3JldCwgKF9mbiksIChfYXJncykpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc2NfcmV0cnlfcHJlcnIoc2NfZnVuY190IGZ1bmMsXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA2LSNkZWZpbmUgc2VhbWNhbGxfcHJlcnJfcmV0KF9fZm4sIF9fYXJncylcdFx0XHRcdFx0XFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjEwNzpcdHNjX3JldHJ5X3ByZXJyKF9fc2VhbWNhbGxfcmV0LCBzZWFtY2FsbF9lcnJfcmV0LCAoX19mbiksIChfX2FyZ3MpKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA4LVxuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNTgyPXN0YXRpYyBib29sIHBhZGRyX2lzX3RkeF9wcml2YXRlKHVuc2lnbmVkIGxvbmcgcGh5cylcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5Mi1cdC8qIEdldCBwYWdlIHR5cGUgZnJvbSB0aGUgVERYIG1vZHVsZSAqL1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1OTM6XHRzcmV0ID0gX19zZWFtY2FsbF9kaXJ0eV9jYWNoZShfX3NlYW1jYWxsX3JldCwgVERIX1BIWU1FTV9QQUdFX1JETUQsIFx1MDAyNmFyZ3MpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2Ugb2YgYF9fc2VhbWNhbGxfcmV0YCB3aGljaCByZWxpZXMgb24gYFREWF9NT0RVTEVfQ0FMTGAsIHVzaW5nIHRoZSBgc2VhbWNhbGxgIGluc3RydWN0aW9uLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgVERYLXNwZWNpZmljLCBhbmQgYHNlYW1jYWxsYCAqbmVlZHMqIFREWCBoYXJkd2FyZS4gUUVNVSwgaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFREWCBob3N0IHBsYXRmb3JtIG9yIFNFQU0gY2FsbHMsIHNvIGV4ZWN1dGluZyB0aGF0IGNvZGUgcGF0aCBkaXJlY3RseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50IGlzIGEgbm9uLXN0YXJ0ZXIuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBiZSBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0byB0cmljayB0aGluZ3M/IEkgZHVnIGRlZXBlci4gVGhlIGZ1bmN0aW9uIGByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nYCB3aWxsIHJlYWQgZnJvbSBgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HYC4gSWYgdGhhdCByZWFkIGZhaWxzLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IHRoZSBgLUVJTlZBTGAgYW5kIHRoZXJlZm9yZSwgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgc2V0LCBzbyB3ZSBjYW4mIzM5O3QgZ2V0IHRoZXJlLiBFdmVuIGlmIHdlICpzb21laG93KiBtYW5hZ2VkIHRvIGJ5cGFzcyB0aGF0IGNoZWNrIChleHRyZW1lbHkgdW5saWtlbHkpLCB0aGUgYHNlYW1jYWxsYCBpbnN0cnVjdGlvbiBpdHNlbGYgaXMgZ29pbmcgdG8gZ2VuZXJhdGUgYSAjVUQgb3IgZmFpbCBiZWNhdXNlIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgVERYIGhvc3QgZW11bGF0aW9uIG5lY2Vzc2FyeS4gV2UgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBvdGhlciB1c2VzIG9mIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAgYW5kIGNvbmZpcm0gdGhhdCBpdCBpcyBvbmx5IHVzZWQgaW4gVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZS4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUsIHRoZSByZWZhY3RvcmluZyBvZiBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AsIGlzIHBhcnQgb2YgdGhlIFREWCBob3N0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdoaWNoIGlzIGB0ZHhfaW5pdGAsIGB0ZHhfZW5hYmxlYCBhbmQgYGluaXRfdGR4X21vZHVsZWAuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgcmVhbCBURFggaGFyZHdhcmUgYW5kIGEgQklPUyB0aGF0IHN1cHBvcnRzIGl0LCB2aWEgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgQ1BVIGZlYXR1cmUgYW5kIHRoZSBgTVNSX0lBMzJfTUtUTUVfS0VZSURfUEFSVElUSU9OSU5HYCBjaGVjay4gVGhlIHVzZSBvZiBgU0VBTUNBTExgIGNvbmZpcm1zIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGxvYWRlZCBJbnRlbCBURFggbW9kdWxlIGluIHRoZSBTRUFNIHJhbmdlLgoKVGhlcmVmb3JlLCBzaW5jZSB3ZSYjMzk7cmUgYW5hbHl6aW5nIHRoaXMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBsaWtlbHkgUUVNVSBvciBhIHNpbWlsYXJseSBjb25zdHJhaW5lZCBlbnZpcm9ubWVudCwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZXhlY3V0ZSB0aGlzIGNvZGUuIEl0JiMzOTtzIG5vdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGZ1enppbmcgZW52aXJvbm1lbnQuCgpJIHdpbGwgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MTQuMDEyNzM2NTY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTE4NDA4NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMToxNC4wMTI3NDQwNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODkzMDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1MDM5MjUyMzY4ZmVjNTQ3OThiZDI3M2IyOGY4ZDExMWMzZWUzMzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5pbmRleCA0MTE1MGQ1NDY1ODljLi5hODZiZTllNWVjNzcwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbkBAIC0xLDEwICsxLDE1IEBAXFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFREWCBnbG9iYWwgbWV0YWRhdGEgc3RydWN0dXJlcy4gKi9cXG4tI2lmbmRlZiBfWDg2X1ZJUlRfVERYX0FVVE9fR0VORVJBVEVEX1REWF9HTE9CQUxfTUVUQURBVEFfSFxcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKyNpZm5kZWYgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuKyNkZWZpbmUgX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKy8qXFxuKyAqIFREWCBtb2R1bGUgXFxcIkdsb2JhbCBTY29wZSBNZXRhZGF0YVxcXCIgYXMgZG9jdW1lbnRlZCBpbiB0aGUgSW50ZWwgVERYXFxuKyAqIE1vZHVsZSBBQkkgc3BlYy4gRWFjaCBzdWItc3RydWN0dXJlIGJlbG93IGNvcnJlc3BvbmRzIHRvIG9uZSBURFhcXG4rICogbWV0YWRhdGEgXFxcIkNsYXNzXFxcIjsgaXRzIG1lbWJlcnMgYXJlIHBvcHVsYXRlZCB2aWEgVERILlNZUy5SRCBTRUFNQ0FMTHMuXFxuKyAqL1xcbitcXG4gc3RydWN0IHRkeF9zeXNfaW5mb192ZXJzaW9uIHtcXG4gXFx0dTE2IG1pbm9yX3ZlcnNpb247XFxuIFxcdHUxNiBtYWpvcl92ZXJzaW9uO1xcbkBAIC01Miw0ICs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xcbiBcXHRzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgdGRfY29uZjtcXG4gfTtcXG4gXFxuLSNlbmRpZlxcbisjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDQyZGY4ZWE0NjRjNDcuLjU5MDk5Y2MxNWY3YWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuQEAgLTM0Nyw3ICszNDcsMjIxIEBAIHN0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQodTY0IGZpZWxkX2lkLCB1NjQgKmRhdGEpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaW5jbHVkZSBcXFwidGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxcIlxcbisvKlxcbisgKiBNYXBwaW5nIGJldHdlZW4gYSBURFggZ2xvYmFsIG1ldGFkYXRhIGZpZWxkIGFuZCB0aGUgQyBtZW1iZXIgdGhhdFxcbisgKiBob2xkcyBpdHMgdmFsdWUuIFVzZSBURF9TWVNJTkZPX01BUCgpIHRvIHBvcHVsYXRlIGVudHJpZXMuXFxuKyAqL1xcbitzdHJ1Y3QgdGR4X3N5c19maWVsZCB7XFxuK1xcdHU2NCBmaWVsZF9pZDtcXG4rXFx0dTE2IG9mZnNldDtcXG4rXFx0dTggIHNpemU7XFxuK307XFxuK1xcbisvKlxcbisgKiBUaGUgc2l6ZSBlbmNvZGVkIGluIHRoZSBmaWVsZCBJRCBhbmQgdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIENcXG4rICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuXFxuKyAqL1xcbisjZGVmaW5lIFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgX3N0cnVjdCwgX21lbWJlcilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0Lm9mZnNldCAgID0gb2Zmc2V0b2Yoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpLFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0LnNpemUgICAgID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBfc3RydWN0LCBfbWVtYmVyKSArXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgQlVJTERfQlVHX09OX1pFUk8oXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRzaXplb2ZfZmllbGQoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpICE9XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFxcdFxcXFxcXG4rXFx0fVxcbitcXG4rLypcXG4rICogV2FsayBhIHRhYmxlIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGRzLCByZWFkIGVhY2ggdmlhIFRESC5TWVMuUkQsXFxuKyAqIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIG1hdGNoaW5nIEMgbWVtYmVyIG9mICpAYmFzZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG5yX2ZpZWxkcywgdm9pZCAqYmFzZSlcXG4re1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXHR1NjQgdmFsO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2ZpZWxkczsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmID0gXFx1MDAyNmZpZWxkc1tpXTtcXG4rXFxuK1xcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXFx1MDAzZWZpZWxkX2lkLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoZi1cXHUwMDNlc2l6ZSkge1xcbitcXHRcXHRjYXNlIDE6ICoodTggICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcXG4rXFx0XFx0Y2FzZSAyOiAqKHUxNiAqKShiYXNlICsgZi1cXHUwMDNlb2Zmc2V0KSA9IHZhbDsgYnJlYWs7XFxuK1xcdFxcdGNhc2UgNDogKih1MzIgKikoYmFzZSArIGYtXFx1MDAzZW9mZnNldCkgPSB2YWw7IGJyZWFrO1xcbitcXHRcXHRjYXNlIDg6ICoodTY0ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfVkVSU0lPTihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb192ZXJzaW9uLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XFxuK1xcdE1BUF9WRVJTSU9OKE1JTk9SX1ZFUlNJT04sXFx0bWlub3JfdmVyc2lvbiksXFxuK1xcdE1BUF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sXFx0bWFqb3JfdmVyc2lvbiksXFxuK1xcdE1BUF9WRVJTSU9OKFVQREFURV9WRVJTSU9OLFxcdHVwZGF0ZV92ZXJzaW9uKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh2ZXJzaW9uX2ZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodmVyc2lvbl9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3lzaW5mb192ZXJzaW9uKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfRkVBVFVSRVMoX2ZpZWxkX2lkLCBfbWVtYmVyKVxcdFxcXFxcXG4rXFx0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMsIF9tZW1iZXIpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuK1xcdE1BUF9GRUFUVVJFUyhURFhfRkVBVFVSRVMwLFxcdHRkeF9mZWF0dXJlczApLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZShmZWF0dXJlc19maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKGZlYXR1cmVzX2ZpZWxkcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb190ZG1yLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkbXJfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuK1xcdE1BUF9URE1SKE1BWF9URE1SUyxcXHRcXHRtYXhfdGRtcnMpLFxcbitcXHRNQVBfVERNUihNQVhfUkVTRVJWRURfUEVSX1RETVIsXFx0bWF4X3Jlc2VydmVkX3Blcl90ZG1yKSxcXG4rXFx0TUFQX1RETVIoUEFNVF80S19FTlRSWV9TSVpFLFxcdHBhbXRfNGtfZW50cnlfc2l6ZSksXFxuK1xcdE1BUF9URE1SKFBBTVRfMk1fRU5UUllfU0laRSxcXHRwYW10XzJtX2VudHJ5X3NpemUpLFxcbitcXHRNQVBfVERNUihQQU1UXzFHX0VOVFJZX1NJWkUsXFx0cGFtdF8xZ19lbnRyeV9zaXplKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4re1xcbitcXHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodGRtcl9maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKHRkbXJfZmllbGRzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN5c2luZm9fdGRtcik7XFxuK31cXG4rXFxuKyNkZWZpbmUgTUFQX1REX0NUUkwoX2ZpZWxkX2lkLCBfbWVtYmVyKVxcdFxcXFxcXG4rXFx0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRfY3RybCwgX21lbWJlcilcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbitcXHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFxcdHRkcl9iYXNlX3NpemUpLFxcbitcXHRNQVBfVERfQ1RSTChURENTX0JBU0VfU0laRSxcXHR0ZGNzX2Jhc2Vfc2l6ZSksXFxuK1xcdE1BUF9URF9DVFJMKFREVlBTX0JBU0VfU0laRSxcXHR0ZHZwc19iYXNlX3NpemUpLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxcbit7XFxuK1xcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh0ZF9jdHJsX2ZpZWxkcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEFSUkFZX1NJWkUodGRfY3RybF9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3lzaW5mb190ZF9jdHJsKTtcXG4rfVxcbitcXG4rI2RlZmluZSBNQVBfSEFORE9GRihfZmllbGRfaWQsIF9tZW1iZXIpXFx0XFxcXFxcbitcXHRURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIHRkeF9zeXNfaW5mb19oYW5kb2ZmLCBfbWVtYmVyKVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XFxuK1xcdE1BUF9IQU5ET0ZGKE1PRFVMRV9IVixcXHRtb2R1bGVfaHYpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQVJSQVlfU0laRShoYW5kb2ZmX2ZpZWxkcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzeXNpbmZvX2hhbmRvZmYpO1xcbit9XFxuK1xcbisjZGVmaW5lIE1BUF9URF9DT05GKF9maWVsZF9pZCwgX21lbWJlcilcXHRcXFxcXFxuK1xcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXFxuK1xcbisvKlxcbisgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcXFwiVEQgQ29uZmlndXJhdGlvblxcXCIgY2xhc3MuICBudW1fY3B1aWRfY29uZmlnXFxuKyAqIG11c3QgYmUgcHJlc2VudCBoZXJlIChhbmQgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgQ1BVSUQgYXJyYXlzXFxuKyAqIGJlbG93KSBiZWNhdXNlIGl0IHNpemVzIHRoZW0uXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRfY29uZl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcXG4rXFx0TUFQX1REX0NPTkYoQVRUUklCVVRFU19GSVhFRDAsXFx0YXR0cmlidXRlc19maXhlZDApLFxcbitcXHRNQVBfVERfQ09ORihBVFRSSUJVVEVTX0ZJWEVEMSxcXHRhdHRyaWJ1dGVzX2ZpeGVkMSksXFxuK1xcdE1BUF9URF9DT05GKFhGQU1fRklYRUQwLFxcdHhmYW1fZml4ZWQwKSxcXG4rXFx0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDEsXFx0eGZhbV9maXhlZDEpLFxcbitcXHRNQVBfVERfQ09ORihOVU1fQ1BVSURfQ09ORklHLFxcdG51bV9jcHVpZF9jb25maWcpLFxcbitcXHRNQVBfVERfQ09ORihNQVhfVkNQVVNfUEVSX1RELFxcdG1heF92Y3B1c19wZXJfdGQpLFxcbit9O1xcbitcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY29uZiAqdGRfY29uZilcXG4re1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUodGRfY29uZl9maWVsZHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFSUkFZX1NJWkUodGRfY29uZl9maWVsZHMpLFxcbitcXHRcXHRcXHRcXHQgICAgICB0ZF9jb25mKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzIGFyZSBzaXplZCBhdCBydW50aW1lIGJ5XFxuK1xcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJ3QgYmUgZXhwcmVzc2VkIGluIGEgc3RhdGljXFxuK1xcdCAqIFREX1NZU0lORk9fTUFQIHRhYmxlLiAgVGhlaXIgZmllbGQgSURzIGFyZSBjb250aWd1b3VzIGZyb21cXG4rXFx0ICogdGhlIGJhc2VzIGFubm91bmNlZCBieSB0aGUgc3BlYy5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZF9jb25mLVxcdTAwM2VudW1fY3B1aWRfY29uZmlnIFxcdTAwM2UgQVJSQVlfU0laRSh0ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSB8fFxcbitcXHQgICAgdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKykge1xcbitcXHRcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICsgaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIDI7IGorKykge1xcbitcXHRcXHRcXHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyArIGkgKiAyICsgajtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ192YWx1ZXNbaV1bal0pO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcXHUwMDI2c3lzaW5mby1cXHUwMDNldmVyc2lvbik7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJNb2R1bGUgdmVyc2lvbjogXFxcIiBURFhfVkVSU0lPTl9GTVQgXFxcIlxcXFxuXFxcIixcXG4rXFx0XFx0c3lzaW5mby1cXHUwMDNldmVyc2lvbi5tYWpvcl92ZXJzaW9uLFxcbitcXHRcXHRzeXNpbmZvLVxcdTAwM2V2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sXFxuK1xcdFxcdHN5c2luZm8tXFx1MDAzZXZlcnNpb24udXBkYXRlX3ZlcnNpb24pO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoXFx1MDAyNnN5c2luZm8tXFx1MDAzZWZlYXR1cmVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRtcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2N0cmwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuK31cXG4gXFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNTgsNiArNTgsNzIgQEBcXG4gICovXFxuICNkZWZpbmUgVERYX1ZFUlNJT05fU0hJRlRcXHRcXHQxNlxcbiBcXG4rLypcXG4rICogR2xvYmFsIFNjb3BlIE1ldGFkYXRhIGZpZWxkIElEcy5cXG4rICpcXG4rICogU2VlIFxcXCJHbG9iYWwtU2NvcGUgKFREWCBNb2R1bGUpIE1ldGFkYXRhXFxcIiBpbiB0aGUgSW50ZWwgVERYIE1vZHVsZSBBQklcXG4rICogc3BlYy5cXG4rICpcXG4rICogQSBmaWVsZCBJRCBpcyBhIDY0LWJpdCB2YWx1ZSB0aGF0IGVuY29kZXMgdGhlIG1ldGFkYXRhIFxcXCJDbGFzc1xcXCJcXG4rICogKHdoaWNoIExpbnV4IG1pcnJvcnMgaW4gJ3N0cnVjdCB0ZHhfc3lzX2luZm8nIHN1Yi1zdHJ1Y3R1cmVzKSxcXG4rICogdGhlIGVsZW1lbnQgc2l6ZSwgYW5kIGEgcGVyLWNsYXNzIGZpZWxkIGluZGV4LiBFYWNoIElEIGJlbG93XFxuKyAqIGlzIHBhaXJlZCB3aXRoIHRoZSBDIG1lbWJlciB0aGF0IGhvbGRzIGl0cyB2YWx1ZS5cXG4rICovXFxuK1xcbisvKiBDbGFzcyBcXFwiVERYIE1vZHVsZSBWZXJzaW9uXFxcIiAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01JTk9SX1ZFUlNJT05cXHRcXHQweDA4MDAwMDAxMDAwMDAwMDNVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQUpPUl9WRVJTSU9OXFx0XFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfVVBEQVRFX1ZFUlNJT05cXHRcXHQweDA4MDAwMDAxMDAwMDAwMDVVTExcXG4rXFxuKy8qIENsYXNzIFxcXCJURFggRmVhdHVyZXNcXFwiICovXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERYX0ZFQVRVUkVTMFxcdFxcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxcbitcXG4rLyogQ2xhc3MgXFxcIlRETVIgSW5mb1xcXCIgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVERNUlNcXHRcXHRcXHQweDkxMDAwMDAxMDAwMDAwMDhVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfUkVTRVJWRURfUEVSX1RETVJcXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzRLX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTBVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzJNX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTFVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9QQU1UXzFHX0VOVFJZX1NJWkVcXHRcXHQweDkxMDAwMDAxMDAwMDAwMTJVTExcXG4rXFxuKy8qIENsYXNzIFxcXCJURCBDb250cm9sIFN0cnVjdHVyZXNcXFwiICovXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERSX0JBU0VfU0laRVxcdFxcdDB4OTgwMDAwMDEwMDAwMDAwMFVMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1REQ1NfQkFTRV9TSVpFXFx0XFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfVERWUFNfQkFTRV9TSVpFXFx0XFx0MHg5ODAwMDAwMTAwMDAwMjAwVUxMXFxuK1xcbisvKiBDbGFzcyBcXFwiVEQgQ29uZmlndXJhdGlvblxcXCIgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9BVFRSSUJVVEVTX0ZJWEVEMFxcdFxcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQxXFx0XFx0MHgxOTAwMDAwMzAwMDAwMDAxVUxMXFxuKyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDBcXHRcXHRcXHQweDE5MDAwMDAzMDAwMDAwMDJVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMVxcdFxcdFxcdDB4MTkwMDAwMDMwMDAwMDAwM1VMTFxcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX05VTV9DUFVJRF9DT05GSUdcXHRcXHQweDk5MDAwMDAxMDAwMDAwMDRVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1REXFx0XFx0MHg5OTAwMDAwMTAwMDAwMDA4VUxMXFxuK1xcbisvKiBDbGFzcyBcXFwiVERYIE1vZHVsZSBIYW5kb2ZmXFxcIiAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01PRFVMRV9IVlxcdFxcdFxcdDB4ODkwMDAwMDEwMDAwMDAwMFVMTFxcbitcXG4rLypcXG4rICogQmFzZSBJRHMgZm9yIHRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzLiAgVGhlIGZpZWxkIElEIG9mIGxlYWZcXG4rICogaW5kZXggQGkgaXMgQkFTRSArIGk7IGZvciB0aGUgdmFsdWVzIGFycmF5LCBzdWItZW50cnkgQGogb2YgaW5kZXhcXG4rICogQGkgaXMgQkFTRSArIGkqMiArIGouXFxuKyAqL1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVNcXHRcXHQweDk5MDAwMDAzMDAwMDA0MDBVTExcXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfVkFMVUVTXFx0XFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXFxuK1xcbisvKlxcbisgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXFxuKyAqXFxuKyAqIFNlZSBcXFwiTURfRklFTERfSUQgKE1ldGFkYXRhIEZpZWxkIElkZW50aWZpZXIgLyBTZXF1ZW5jZSBIZWFkZXIpXFxuKyAqIERlZmluaXRpb25cXFwiIGluIHRoZSBJbnRlbCBURFggTW9kdWxlIEFCSSBzcGVjLlxcbisgKlxcbisgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGFcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50J3Mgc2l6ZSBpbiBieXRlc1xcbisgKi9cXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRV9DT0RFKGZpZWxkX2lkKVxcdFxcXFxcXG4rXFx0KCgoZmllbGRfaWQpIFxcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXFx1MDAzZVxcdTAwM2UgMzIpXFxuK1xcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0VMRV9TSVpFKGZpZWxkX2lkKVxcdFxcdFxcXFxcXG4rXFx0KDEgXFx1MDAzY1xcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXFxuK1xcbiAvKiBURFggcGFnZSB0eXBlcyAqL1xcbiAjZGVmaW5lXFx0UFRfTkRBXFx0XFx0MHgwXFxuICNkZWZpbmVcXHRQVF9SU1ZEXFx0XFx0MHgxXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMTMzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLypcXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4tICpcXG4tICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxcbi0gKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXFxuLSAqIEluY2x1ZGUgdGhpcyBmaWxlIHRvIG90aGVyIEMgZmlsZSBpbnN0ZWFkLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb192ZXJzaW9uLVxcdTAwM2VtaW5vcl92ZXJzaW9uID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3ZlcnNpb24tXFx1MDAzZW1ham9yX3ZlcnNpb24gPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdmVyc2lvbi1cXHUwMDNldXBkYXRlX3ZlcnNpb24gPSB2YWw7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZm9fZmVhdHVyZXMpXFxuLXtcXG4tXFx0aW50IHJldCA9IDA7XFxuLVxcdHU2NCB2YWw7XFxuLVxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX2ZlYXR1cmVzLVxcdTAwM2V0ZHhfZmVhdHVyZXMwID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VtYXhfdGRtcnMgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlbWF4X3Jlc2VydmVkX3Blcl90ZG1yID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSA9IHZhbDtcXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCAqc3lzaW5mb190ZF9jdHJsKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHR1NjQgdmFsO1xcbi1cXG4tXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0c3lzaW5mb190ZF9jdHJsLVxcdTAwM2V0ZHJfYmFzZV9zaXplID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2N0cmwtXFx1MDAzZXRkY3NfYmFzZV9zaXplID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2N0cmwtXFx1MDAzZXRkdnBzX2Jhc2Vfc2l6ZSA9IHZhbDtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnN5c2luZm9fdGRfY29uZilcXG4te1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFx0dTY0IHZhbDtcXG4tXFx0aW50IGksIGo7XFxuLVxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZWF0dHJpYnV0ZXNfZml4ZWQwID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMSwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZWF0dHJpYnV0ZXNfZml4ZWQxID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMiwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZXhmYW1fZml4ZWQwID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MTkwMDAwMDMwMDAwMDAwMywgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZXhmYW1fZml4ZWQxID0gdmFsO1xcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwNCwgXFx1MDAyNnZhbCkpKVxcbi1cXHRcXHRzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWcgPSB2YWw7XFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5OTAwMDAwMTAwMDAwMDA4LCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbWF4X3ZjcHVzX3Blcl90ZCA9IHZhbDtcXG4tXFx0aWYgKHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcXG4tXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgKyBpLCBcXHUwMDI2dmFsKSkpXFxuLVxcdFxcdFxcdHN5c2luZm9fdGRfY29uZi1cXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcXG4tXFx0aWYgKHN5c2luZm9fdGRfY29uZi1cXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcXHUwMDNlIEFSUkFZX1NJWkUoc3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXFx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIDI7IGorKylcXG4tXFx0XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA1MDAgKyBpICogMiArIGosIFxcdTAwMjZ2YWwpKSlcXG4tXFx0XFx0XFx0XFx0c3lzaW5mb190ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTY0IHZhbDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4ODkwMDAwMDEwMDAwMDAwMCwgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzeXNpbmZvX2hhbmRvZmYtXFx1MDAzZW1vZHVsZV9odiA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4te1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oXFx1MDAyNnN5c2luZm8tXFx1MDAzZXZlcnNpb24pO1xcbi1cXG4tXFx0cHJfaW5mbyhcXFwiTW9kdWxlIHZlcnNpb246IFxcXCIgVERYX1ZFUlNJT05fRk1UIFxcXCJcXFxcblxcXCIsXFxuLVxcdFxcdHN5c2luZm8tXFx1MDAzZXZlcnNpb24ubWFqb3JfdmVyc2lvbixcXG4tXFx0XFx0c3lzaW5mby1cXHUwMDNldmVyc2lvbi5taW5vcl92ZXJzaW9uLFxcbi1cXHRcXHRzeXNpbmZvLVxcdTAwM2V2ZXJzaW9uLnVwZGF0ZV92ZXJzaW9uKTtcXG4tXFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcyk7XFxuLVxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkbXIpO1xcbi1cXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4tXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjE0LjU2Mjc4MDcxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5OTY4MzU1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgVERYIGdsb2JhbCBtZXRhZGF0YSByZWFkaW5nIGluIHRoZSBURFggaG9zdCBpbml0aWFsaXphdGlvbiBjb2RlIChhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMpLiBUaGlzIGNvZGUgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgVERYIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhlIFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNIENQVSBmZWF0dXJlIGFuZCB0aGUgU0VBTUNBTEwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNTAzOTI1MjM2OGZlYzU0Nzk4YmQyNzNiMjhmOGQxMTFjM2VlMzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMjoyMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuaW5kZXggNDExNTBkNTQ2NTg5Yy4uYTg2YmU5ZTVlYzc3MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMSwxMCArMSwxNSBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVERYIGdsb2JhbCBtZXRhZGF0YSBzdHJ1Y3R1cmVzLiAqL1xuLSNpZm5kZWYgX1g4Nl9WSVJUX1REWF9BVVRPX0dFTkVSQVRFRF9URFhfR0xPQkFMX01FVEFEQVRBX0hcbi0jZGVmaW5lIF9YODZfVklSVF9URFhfQVVUT19HRU5FUkFURURfVERYX0dMT0JBTF9NRVRBREFUQV9IXG4rI2lmbmRlZiBfQVNNX1g4Nl9URFhfR0xPQkFMX01FVEFEQVRBX0hcbisjZGVmaW5lIF9BU01fWDg2X1REWF9HTE9CQUxfTUVUQURBVEFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbisvKlxuKyAqIFREWCBtb2R1bGUgXCJHbG9iYWwgU2NvcGUgTWV0YWRhdGFcIiBhcyBkb2N1bWVudGVkIGluIHRoZSBJbnRlbCBURFhcbisgKiBNb2R1bGUgQUJJIHNwZWMuIEVhY2ggc3ViLXN0cnVjdHVyZSBiZWxvdyBjb3JyZXNwb25kcyB0byBvbmUgVERYXG4rICogbWV0YWRhdGEgXCJDbGFzc1wiOyBpdHMgbWVtYmVycyBhcmUgcG9wdWxhdGVkIHZpYSBUREguU1lTLlJEIFNFQU1DQUxMcy5cbisgKi9cbitcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24ge1xuIFx0dTE2IG1pbm9yX3ZlcnNpb247XG4gXHR1MTYgbWFqb3JfdmVyc2lvbjtcbkBAIC01Miw0ICs1Nyw0IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm8ge1xuIFx0c3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mIHRkX2NvbmY7XG4gfTtcbiBcbi0jZW5kaWZcbisjZW5kaWYgLyogX0FTTV9YODZfVERYX0dMT0JBTF9NRVRBREFUQV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5pbmRleCA0MmRmOGVhNDY0YzQ3Li41OTA5OWNjMTVmN2FhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zNDcsNyArMzQ3LDIyMSBAQCBzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpbmNsdWRlIFwidGR4X2dsb2JhbF9tZXRhZGF0YS5jXCJcbisvKlxuKyAqIE1hcHBpbmcgYmV0d2VlbiBhIFREWCBnbG9iYWwgbWV0YWRhdGEgZmllbGQgYW5kIHRoZSBDIG1lbWJlciB0aGF0XG4rICogaG9sZHMgaXRzIHZhbHVlLiBVc2UgVERfU1lTSU5GT19NQVAoKSB0byBwb3B1bGF0ZSBlbnRyaWVzLlxuKyAqL1xuK3N0cnVjdCB0ZHhfc3lzX2ZpZWxkIHtcbitcdHU2NCBmaWVsZF9pZDtcbitcdHUxNiBvZmZzZXQ7XG4rXHR1OCAgc2l6ZTtcbit9O1xuK1xuKy8qXG4rICogVGhlIHNpemUgZW5jb2RlZCBpbiB0aGUgZmllbGQgSUQgYW5kIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBDXG4rICogbWVtYmVyIG11c3QgYWdyZWU7IEJVSUxEX0JVR19PTl9aRVJPKCkgZW5mb3JjZXMgdGhpcyBhdCBjb21waWxlIHRpbWUuXG4rICovXG4rI2RlZmluZSBURF9TWVNJTkZPX01BUChfZmllbGRfaWQsIF9zdHJ1Y3QsIF9tZW1iZXIpXHRcdFx0XHRcXFxuK1x0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdC5maWVsZF9pZCA9IE1EX0ZJRUxEX0lEXyMjX2ZpZWxkX2lkLFx0XHRcdFx0XFxcbitcdFx0Lm9mZnNldCAgID0gb2Zmc2V0b2Yoc3RydWN0IF9zdHJ1Y3QsIF9tZW1iZXIpLFx0XHRcdFxcXG4rXHRcdC5zaXplICAgICA9IHNpemVvZl9maWVsZChzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlcikgK1x0XHRcXFxuK1x0XHRcdCAgICBCVUlMRF9CVUdfT05fWkVSTyhcdFx0XHRcdFx0XFxcbitcdFx0XHRcdHNpemVvZl9maWVsZChzdHJ1Y3QgX3N0cnVjdCwgX21lbWJlcikgIT1cdFxcXG4rXHRcdFx0XHRNRF9GSUVMRF9JRF9FTEVfU0laRShNRF9GSUVMRF9JRF8jI19maWVsZF9pZCkpLFx0XFxcbitcdH1cbitcbisvKlxuKyAqIFdhbGsgYSB0YWJsZSBvZiBURFggZ2xvYmFsIG1ldGFkYXRhIGZpZWxkcywgcmVhZCBlYWNoIHZpYSBUREguU1lTLlJELFxuKyAqIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIG1hdGNoaW5nIEMgbWVtYmVyIG9mICpAYmFzZS5cbisgKi9cbitzdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkICpmaWVsZHMsXG4rXHRcdFx0XHQgICBpbnQgbnJfZmllbGRzLCB2b2lkICpiYXNlKVxuK3tcbitcdGludCBpLCByZXQ7XG4rXHR1NjQgdmFsO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZmllbGRzOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgKmYgPSBcdTAwMjZmaWVsZHNbaV07XG4rXG4rXHRcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXHUwMDNlZmllbGRfaWQsIFx1MDAyNnZhbCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3dpdGNoIChmLVx1MDAzZXNpemUpIHtcbitcdFx0Y2FzZSAxOiAqKHU4ICAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSAyOiAqKHUxNiAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSA0OiAqKHUzMiAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0Y2FzZSA4OiAqKHU2NCAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpID0gdmFsOyBicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1ZFUlNJT04oX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3ZlcnNpb24sIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHZlcnNpb25fZmllbGRzW10gPSB7XG4rXHRNQVBfVkVSU0lPTihNSU5PUl9WRVJTSU9OLFx0bWlub3JfdmVyc2lvbiksXG4rXHRNQVBfVkVSU0lPTihNQUpPUl9WRVJTSU9OLFx0bWFqb3JfdmVyc2lvbiksXG4rXHRNQVBfVkVSU0lPTihVUERBVEVfVkVSU0lPTixcdHVwZGF0ZV92ZXJzaW9uKSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxuK3tcbitcdHJldHVybiByZWFkX3N5c19tZXRhZGF0YV90YWJsZSh2ZXJzaW9uX2ZpZWxkcyxcbitcdFx0XHRcdCAgICAgICBBUlJBWV9TSVpFKHZlcnNpb25fZmllbGRzKSxcbitcdFx0XHRcdCAgICAgICBzeXNpbmZvX3ZlcnNpb24pO1xuK31cbitcbisjZGVmaW5lIE1BUF9GRUFUVVJFUyhfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuK1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGZlYXR1cmVzX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xuK1x0TUFQX0ZFQVRVUkVTKFREWF9GRUFUVVJFUzAsXHR0ZHhfZmVhdHVyZXMwKSxcbit9O1xuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mb19mZWF0dXJlcylcbit7XG4rXHRyZXR1cm4gcmVhZF9zeXNfbWV0YWRhdGFfdGFibGUoZmVhdHVyZXNfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUoZmVhdHVyZXNfZmllbGRzKSxcbitcdFx0XHRcdCAgICAgICBzeXNpbmZvX2ZlYXR1cmVzKTtcbit9XG4rXG4rI2RlZmluZSBNQVBfVERNUihfZmllbGRfaWQsIF9tZW1iZXIpXHRcXFxuK1x0VERfU1lTSU5GT19NQVAoX2ZpZWxkX2lkLCB0ZHhfc3lzX2luZm9fdGRtciwgX21lbWJlcilcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcbitcdE1BUF9URE1SKE1BWF9URE1SUyxcdFx0bWF4X3RkbXJzKSxcbitcdE1BUF9URE1SKE1BWF9SRVNFUlZFRF9QRVJfVERNUixcdG1heF9yZXNlcnZlZF9wZXJfdGRtciksXG4rXHRNQVBfVERNUihQQU1UXzRLX0VOVFJZX1NJWkUsXHRwYW10XzRrX2VudHJ5X3NpemUpLFxuK1x0TUFQX1RETVIoUEFNVF8yTV9FTlRSWV9TSVpFLFx0cGFtdF8ybV9lbnRyeV9zaXplKSxcbitcdE1BUF9URE1SKFBBTVRfMUdfRU5UUllfU0laRSxcdHBhbXRfMWdfZW50cnlfc2l6ZSksXG4rfTtcbitcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkbXJfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodGRtcl9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRtcik7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1REX0NUUkwoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2N0cmwsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2N0cmxfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4rXHRNQVBfVERfQ1RSTChURFJfQkFTRV9TSVpFLFx0dGRyX2Jhc2Vfc2l6ZSksXG4rXHRNQVBfVERfQ1RSTChURENTX0JBU0VfU0laRSxcdHRkY3NfYmFzZV9zaXplKSxcbitcdE1BUF9URF9DVFJMKFREVlBTX0JBU0VfU0laRSxcdHRkdnBzX2Jhc2Vfc2l6ZSksXG4rfTtcbitcbitzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsICpzeXNpbmZvX3RkX2N0cmwpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2N0cmxfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUodGRfY3RybF9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9fdGRfY3RybCk7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX0hBTkRPRkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX2hhbmRvZmYsIF9tZW1iZXIpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XG4rXHRNQVBfSEFORE9GRihNT0RVTEVfSFYsXHRtb2R1bGVfaHYpLFxuK307XG4rXG4rc3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXG4re1xuK1x0cmV0dXJuIHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKGhhbmRvZmZfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgIEFSUkFZX1NJWkUoaGFuZG9mZl9maWVsZHMpLFxuK1x0XHRcdFx0ICAgICAgIHN5c2luZm9faGFuZG9mZik7XG4rfVxuK1xuKyNkZWZpbmUgTUFQX1REX0NPTkYoX2ZpZWxkX2lkLCBfbWVtYmVyKVx0XFxcbitcdFREX1NZU0lORk9fTUFQKF9maWVsZF9pZCwgdGR4X3N5c19pbmZvX3RkX2NvbmYsIF9tZW1iZXIpXG4rXG4rLypcbisgKiBTY2FsYXIgZmllbGRzIG9mIHRoZSBcIlREIENvbmZpZ3VyYXRpb25cIiBjbGFzcy4gIG51bV9jcHVpZF9jb25maWdcbisgKiBtdXN0IGJlIHByZXNlbnQgaGVyZSAoYW5kIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIENQVUlEIGFycmF5c1xuKyAqIGJlbG93KSBiZWNhdXNlIGl0IHNpemVzIHRoZW0uXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIHRkX2NvbmZfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XG4rXHRNQVBfVERfQ09ORihBVFRSSUJVVEVTX0ZJWEVEMCxcdGF0dHJpYnV0ZXNfZml4ZWQwKSxcbitcdE1BUF9URF9DT05GKEFUVFJJQlVURVNfRklYRUQxLFx0YXR0cmlidXRlc19maXhlZDEpLFxuK1x0TUFQX1REX0NPTkYoWEZBTV9GSVhFRDAsXHR4ZmFtX2ZpeGVkMCksXG4rXHRNQVBfVERfQ09ORihYRkFNX0ZJWEVEMSxcdHhmYW1fZml4ZWQxKSxcbitcdE1BUF9URF9DT05GKE5VTV9DUFVJRF9DT05GSUcsXHRudW1fY3B1aWRfY29uZmlnKSxcbitcdE1BUF9URF9DT05GKE1BWF9WQ1BVU19QRVJfVEQsXHRtYXhfdmNwdXNfcGVyX3RkKSxcbit9O1xuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXG4re1xuK1x0aW50IHJldCwgaSwgajtcbitcbitcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX3RhYmxlKHRkX2NvbmZfZmllbGRzLFxuK1x0XHRcdFx0ICAgICAgQVJSQVlfU0laRSh0ZF9jb25mX2ZpZWxkcyksXG4rXHRcdFx0XHQgICAgICB0ZF9jb25mKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGNvbmZpZ3VyYWJsZS1DUFVJRCBhcnJheXMgYXJlIHNpemVkIGF0IHJ1bnRpbWUgYnlcbitcdCAqIG51bV9jcHVpZF9jb25maWcsIHNvIHRoZXkgY2FuJ3QgYmUgZXhwcmVzc2VkIGluIGEgc3RhdGljXG4rXHQgKiBURF9TWVNJTkZPX01BUCB0YWJsZS4gIFRoZWlyIGZpZWxkIElEcyBhcmUgY29udGlndW91cyBmcm9tXG4rXHQgKiB0aGUgYmFzZXMgYW5ub3VuY2VkIGJ5IHRoZSBzcGVjLlxuK1x0ICovXG4rXHRpZiAodGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHRkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlcykgfHxcbitcdCAgICB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWcgXHUwMDNlIEFSUkFZX1NJWkUodGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKykge1xuK1x0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChNRF9GSUVMRF9JRF9DUFVJRF9DT05GSUdfTEVBVkVTICsgaSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyAyOyBqKyspIHtcbitcdFx0XHR1NjQgZmlkID0gTURfRklFTERfSURfQ1BVSURfQ09ORklHX1ZBTFVFUyArIGkgKiAyICsgajtcbitcbitcdFx0XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZChmaWQsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKFx1MDAyNnN5c2luZm8tXHUwMDNldmVyc2lvbik7XG4rXG4rXHRwcl9pbmZvKFwiTW9kdWxlIHZlcnNpb246IFwiIFREWF9WRVJTSU9OX0ZNVCBcIlxcblwiLFxuK1x0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24ubWFqb3JfdmVyc2lvbixcbitcdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1pbm9yX3ZlcnNpb24sXG4rXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi51cGRhdGVfdmVyc2lvbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhcdTAwMjZzeXNpbmZvLVx1MDAzZWZlYXR1cmVzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXIoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4rfVxuIFxuIHN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYzYxMmIxY2Y3YzE0MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNTgsNiArNTgsNzIgQEBcbiAgKi9cbiAjZGVmaW5lIFREWF9WRVJTSU9OX1NISUZUXHRcdDE2XG4gXG4rLypcbisgKiBHbG9iYWwgU2NvcGUgTWV0YWRhdGEgZmllbGQgSURzLlxuKyAqXG4rICogU2VlIFwiR2xvYmFsLVNjb3BlIChURFggTW9kdWxlKSBNZXRhZGF0YVwiIGluIHRoZSBJbnRlbCBURFggTW9kdWxlIEFCSVxuKyAqIHNwZWMuXG4rICpcbisgKiBBIGZpZWxkIElEIGlzIGEgNjQtYml0IHZhbHVlIHRoYXQgZW5jb2RlcyB0aGUgbWV0YWRhdGEgXCJDbGFzc1wiXG4rICogKHdoaWNoIExpbnV4IG1pcnJvcnMgaW4gJ3N0cnVjdCB0ZHhfc3lzX2luZm8nIHN1Yi1zdHJ1Y3R1cmVzKSxcbisgKiB0aGUgZWxlbWVudCBzaXplLCBhbmQgYSBwZXItY2xhc3MgZmllbGQgaW5kZXguIEVhY2ggSUQgYmVsb3dcbisgKiBpcyBwYWlyZWQgd2l0aCB0aGUgQyBtZW1iZXIgdGhhdCBob2xkcyBpdHMgdmFsdWUuXG4rICovXG4rXG4rLyogQ2xhc3MgXCJURFggTW9kdWxlIFZlcnNpb25cIiAqL1xuKyNkZWZpbmUgTURfRklFTERfSURfTUlOT1JfVkVSU0lPTlx0XHQweDA4MDAwMDAxMDAwMDAwMDNVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01BSk9SX1ZFUlNJT05cdFx0MHgwODAwMDAwMTAwMDAwMDA0VUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9VUERBVEVfVkVSU0lPTlx0XHQweDA4MDAwMDAxMDAwMDAwMDVVTExcbitcbisvKiBDbGFzcyBcIlREWCBGZWF0dXJlc1wiICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFhfRkVBVFVSRVMwXHRcdDB4MEEwMDAwMDMwMDAwMDAwOFVMTFxuK1xuKy8qIENsYXNzIFwiVERNUiBJbmZvXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01BWF9URE1SU1x0XHRcdDB4OTEwMDAwMDEwMDAwMDAwOFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfTUFYX1JFU0VSVkVEX1BFUl9URE1SXHQweDkxMDAwMDAxMDAwMDAwMDlVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfNEtfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTBVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMk1fRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTFVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX1BBTVRfMUdfRU5UUllfU0laRVx0XHQweDkxMDAwMDAxMDAwMDAwMTJVTExcbitcbisvKiBDbGFzcyBcIlREIENvbnRyb2wgU3RydWN0dXJlc1wiICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFJfQkFTRV9TSVpFXHRcdDB4OTgwMDAwMDEwMDAwMDAwMFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfVERDU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMTAwVUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9URFZQU19CQVNFX1NJWkVcdFx0MHg5ODAwMDAwMTAwMDAwMjAwVUxMXG4rXG4rLyogQ2xhc3MgXCJURCBDb25maWd1cmF0aW9uXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0FUVFJJQlVURVNfRklYRUQwXHRcdDB4MTkwMDAwMDMwMDAwMDAwMFVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfQVRUUklCVVRFU19GSVhFRDFcdFx0MHgxOTAwMDAwMzAwMDAwMDAxVUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9YRkFNX0ZJWEVEMFx0XHRcdDB4MTkwMDAwMDMwMDAwMDAwMlVMTFxuKyNkZWZpbmUgTURfRklFTERfSURfWEZBTV9GSVhFRDFcdFx0XHQweDE5MDAwMDAzMDAwMDAwMDNVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX05VTV9DUFVJRF9DT05GSUdcdFx0MHg5OTAwMDAwMTAwMDAwMDA0VUxMXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9NQVhfVkNQVVNfUEVSX1REXHRcdDB4OTkwMDAwMDEwMDAwMDAwOFVMTFxuK1xuKy8qIENsYXNzIFwiVERYIE1vZHVsZSBIYW5kb2ZmXCIgKi9cbisjZGVmaW5lIE1EX0ZJRUxEX0lEX01PRFVMRV9IVlx0XHRcdDB4ODkwMDAwMDEwMDAwMDAwMFVMTFxuK1xuKy8qXG4rICogQmFzZSBJRHMgZm9yIHRoZSBjb25maWd1cmFibGUtQ1BVSUQgYXJyYXlzLiAgVGhlIGZpZWxkIElEIG9mIGxlYWZcbisgKiBpbmRleCBAaSBpcyBCQVNFICsgaTsgZm9yIHRoZSB2YWx1ZXMgYXJyYXksIHN1Yi1lbnRyeSBAaiBvZiBpbmRleFxuKyAqIEBpIGlzIEJBU0UgKyBpKjIgKyBqLlxuKyAqL1xuKyNkZWZpbmUgTURfRklFTERfSURfQ1BVSURfQ09ORklHX0xFQVZFU1x0XHQweDk5MDAwMDAzMDAwMDA0MDBVTExcbisjZGVmaW5lIE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19WQUxVRVNcdFx0MHg5OTAwMDAwMzAwMDAwNTAwVUxMXG4rXG4rLypcbisgKiBTdWItZmllbGQgZGVmaW5pdGlvbnMgb2YgTURfRklFTERfSUQuXG4rICpcbisgKiBTZWUgXCJNRF9GSUVMRF9JRCAoTWV0YWRhdGEgRmllbGQgSWRlbnRpZmllciAvIFNlcXVlbmNlIEhlYWRlcilcbisgKiBEZWZpbml0aW9uXCIgaW4gdGhlIEludGVsIFREWCBNb2R1bGUgQUJJIHNwZWMuXG4rICpcbisgKiAgLSBCaXQgMzM6MzI6IEVMRU1FTlRfU0laRV9DT0RFIC0tIGxvZzIgb2YgYSBzaW5nbGUgbWV0YWRhdGFcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQncyBzaXplIGluIGJ5dGVzXG4rICovXG4rI2RlZmluZSBNRF9GSUVMRF9JRF9FTEVfU0laRV9DT0RFKGZpZWxkX2lkKVx0XFxcbitcdCgoKGZpZWxkX2lkKSBcdTAwMjYgR0VOTUFTS19VTEwoMzMsIDMyKSkgXHUwMDNlXHUwMDNlIDMyKVxuK1xuKyNkZWZpbmUgTURfRklFTERfSURfRUxFX1NJWkUoZmllbGRfaWQpXHRcdFxcXG4rXHQoMSBcdTAwM2NcdTAwM2MgTURfRklFTERfSURfRUxFX1NJWkVfQ09ERShmaWVsZF9pZCkpXG4rXG4gLyogVERYIHBhZ2UgdHlwZXMgKi9cbiAjZGVmaW5lXHRQVF9OREFcdFx0MHgwXG4gI2RlZmluZVx0UFRfUlNWRFx0XHQweDFcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBlNDljMzAwZjIzZDQzLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwxMzMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuLSAqXG4tICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuLSAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbi0gKiBJbmNsdWRlIHRoaXMgZmlsZSB0byBvdGhlciBDIGZpbGUgaW5zdGVhZC5cbi0gKi9cbi1cbi1zdGF0aWMgaW50IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihzdHJ1Y3QgdGR4X3N5c19pbmZvX3ZlcnNpb24gKnN5c2luZm9fdmVyc2lvbilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDA4MDAwMDAxMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3ZlcnNpb24tXHUwMDNlbWlub3JfdmVyc2lvbiA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MDgwMDAwMDEwMDAwMDAwNCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdmVyc2lvbi1cdTAwM2VtYWpvcl92ZXJzaW9uID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHgwODAwMDAwMTAwMDAwMDA1LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb192ZXJzaW9uLVx1MDAzZXVwZGF0ZV92ZXJzaW9uID0gdmFsO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0dTY0IHZhbDtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4MEEwMDAwMDMwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fZmVhdHVyZXMtXHUwMDNldGR4X2ZlYXR1cmVzMCA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMDgsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlbWF4X3RkbXJzID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDA5LCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZW1heF9yZXNlcnZlZF9wZXJfdGRtciA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAxMDAwMDAwMTEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF8ybV9lbnRyeV9zaXplID0gdmFsO1xuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICEocmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEyLCBcdTAwMjZ2YWwpKSlcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdHU2NCB2YWw7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk4MDAwMDAxMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2N0cmwtXHUwMDNldGRyX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDEwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZGNzX2Jhc2Vfc2l6ZSA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTgwMDAwMDEwMDAwMDIwMCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY3RybC1cdTAwM2V0ZHZwc19iYXNlX3NpemUgPSB2YWw7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jb25mICpzeXNpbmZvX3RkX2NvbmYpXG4te1xuLVx0aW50IHJldCA9IDA7XG4tXHR1NjQgdmFsO1xuLVx0aW50IGksIGo7XG4tXG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDAsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDEsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlYXR0cmlidXRlc19maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDIsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDAgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDE5MDAwMDAzMDAwMDAwMDMsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNleGZhbV9maXhlZDEgPSB2YWw7XG4tXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAxMDAwMDAwMDQsIFx1MDAyNnZhbCkpKVxuLVx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyA9IHZhbDtcbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDEwMDAwMDAwOCwgXHUwMDI2dmFsKSkpXG4tXHRcdHN5c2luZm9fdGRfY29uZi1cdTAwM2VtYXhfdmNwdXNfcGVyX3RkID0gdmFsO1xuLVx0aWYgKHN5c2luZm9fdGRfY29uZi1cdTAwM2VudW1fY3B1aWRfY29uZmlnIFx1MDAzZSBBUlJBWV9TSVpFKHN5c2luZm9fdGRfY29uZi1cdTAwM2VjcHVpZF9jb25maWdfbGVhdmVzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZzsgaSsrKVxuLVx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIShyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDk5MDAwMDAzMDAwMDA0MDAgKyBpLCBcdTAwMjZ2YWwpKSlcbi1cdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX2xlYXZlc1tpXSA9IHZhbDtcbi1cdGlmIChzeXNpbmZvX3RkX2NvbmYtXHUwMDNlbnVtX2NwdWlkX2NvbmZpZyBcdTAwM2UgQVJSQVlfU0laRShzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3lzaW5mb190ZF9jb25mLVx1MDAzZW51bV9jcHVpZF9jb25maWc7IGkrKylcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgMjsgaisrKVxuLVx0XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhKHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTkwMDAwMDMwMDAwMDUwMCArIGkgKiAyICsgaiwgXHUwMDI2dmFsKSkpXG4tXHRcdFx0XHRzeXNpbmZvX3RkX2NvbmYtXHUwMDNlY3B1aWRfY29uZmlnX3ZhbHVlc1tpXVtqXSA9IHZhbDtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb19oYW5kb2ZmKHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiAqc3lzaW5mb19oYW5kb2ZmKVxuLXtcbi1cdGludCByZXQ7XG4tXHR1NjQgdmFsO1xuLVxuLVx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg4OTAwMDAwMTAwMDAwMDAwLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN5c2luZm9faGFuZG9mZi1cdTAwM2Vtb2R1bGVfaHYgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcdTAwMjZzeXNpbmZvLVx1MDAzZXZlcnNpb24pO1xuLVxuLVx0cHJfaW5mbyhcIk1vZHVsZSB2ZXJzaW9uOiBcIiBURFhfVkVSU0lPTl9GTVQgXCJcXG5cIixcbi1cdFx0c3lzaW5mby1cdTAwM2V2ZXJzaW9uLm1ham9yX3ZlcnNpb24sXG4tXHRcdHN5c2luZm8tXHUwMDNldmVyc2lvbi5taW5vcl92ZXJzaW9uLFxuLVx0XHRzeXNpbmZvLVx1MDAzZXZlcnNpb24udXBkYXRlX3ZlcnNpb24pO1xuLVxuLVx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoXHUwMDI2c3lzaW5mby1cdTAwM2VmZWF0dXJlcyk7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZG1yKFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4tXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjE0LjU2Mjc4MjcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjI0NTA5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggTWV0YWRhdGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBURFggZ2xvYmFsIG1ldGFkYXRhIHJlYWRpbmcgbG9naWMuIEl0IHNlZW1zIHRoZXkncmUgZGl0Y2hpbmcgdGhlIGF1dG8tZ2VuZXJhdGVkIGB0ZHhfZ2xvYmFsX21ldGFkYXRhLmNgIGluIGZhdm9yIG9mIGEgdGFibGUtZHJpdmVuIGFwcHJvYWNoIHVzaW5nIGBURF9TWVNJTkZPX01BUGAgYW5kIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBURFggaW5pdGlhbGl6YXRpb24gY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cIiBURFgsIGFmdGVyIGFsbCwgaGluZ2VzIG9uIHNwZWNpZmljIEludGVsIFREWCBoYXJkd2FyZS4gQW5kIEkgbmVlZCB0byBjbGFyaWZ5LCBhcmUgd2UgdGFsa2luZyBURFggZ3Vlc3Qgb3IgaG9zdCBoZXJlP1xuXG5XYWl0LCB0aGUgcGF0aCwgYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AsIHRoYXQncyB0aGUgVERYIGhvc3Qgc3VwcG9ydCBjb2RlLCByaWdodD8gSXQncyB0aGUgS1ZNL1REWCBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIE9rYXksIHNvIG5vdyB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHRoaXMgYmUgZnV6emVkIG9yIHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50PyBJJ20gYmV0dGluZyBubywgYmVjYXVzZSBURFggaG9zdCBzdXBwb3J0IGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgdGhhdCBURFggaGFyZHdhcmUgdG8gYmUgcHJlc2VudC4gVGhhdCdzIGEgaHVnZSBodXJkbGUuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBpZiB0aGlzIGlzIHBvc3NpYmxlIHdpdGhvdXQgaGFyZHdhcmUuIEkga25vdyB0aGF0IFREWCBob3N0IGluaXRpYWxpemF0aW9uIHVzdWFsbHkgY2hlY2tzIGZvciB0aGUgaGFyZHdhcmUgc3VwcG9ydCBlYXJseSBvbiBhbmQgYmFpbHMgb3V0IGlmIGl0J3Mgbm90IGRldGVjdGVkLiBJIG5lZWQgdG8gZGlnIGludG8gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgdG8gY29uZmlybSB0aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyByb2J1c3QgdGhpcyBjaGVjayBpcywgYW5kIHdoYXQgaGFwcGVucyBpZiBpdCdzIGJ5cGFzc2VkIHNvbWVob3csIGRlbGliZXJhdGVseSBvciBhY2NpZGVudGFsbHkuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBleGVjdXRpb24gdG8gY29udGludWUgZXZlbiB3aXRob3V0IHRoZSBleHBlY3RlZCBoYXJkd2FyZSwgb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgaGFyZHdhcmUgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjEuODI1MjM2NDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY5MzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE3MTg9c3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3RkeF9lcnJhdHVtKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0Mzp2b2lkIF9faW5pdCB0ZHhfaW5pdCh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNzQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjEuOTMyOTM0NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzOTg2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0ZHhfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGR4X2luaXRgIGlzIGFjdHVhbGx5ICpkb2luZyouIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIHN1YnN5c3RlbS4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGEgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gcGF0dGVybiBvciBzb21ldGhpbmcgY3VzdG9tLWJ1aWx0PyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHRhc2tzIGB0ZHhfaW5pdGAgaXMgcmVzcG9uc2libGUgZm9yLCB0aGUgcmVzb3VyY2VzIGl0IG1hbmFnZXMsIGFuZCBhbnkgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGl0IHRyaWdnZXJzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBmb3IgZXJyb3IgaGFuZGxpbmcgdG9vLiBLbm93aW5nIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBvY2N1cnJpbmcgd2lsbCBoZWxwIG1lLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgZnVuY3Rpb24gY2FsbHMgYXMgd2VsbC4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6MjcuMDY2OTI0MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDM6XFx0dm9pZCBfX2luaXQgdGR4X2luaXQodm9pZClcXG4xNzQ0OlxcdHtcXG4xNzQ1OlxcdFxcdHUzMiB0ZHhfa2V5aWRfc3RhcnQsIG5yX3RkeF9rZXlpZHM7XFxuMTc0NjpcXHRcXHRpbnQgZXJyO1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG4xNzQ5OlxcdFxcdGlmIChlcnIpXFxuMTc1MDpcXHRcXHRcXHRyZXR1cm47XFxuMTc1MTpcXHRcXG4xNzUyOlxcdFxcdHByX2luZm8oXFxcIkJJT1MgZW5hYmxlZDogcHJpdmF0ZSBLZXlJRCByYW5nZSBbJXUsICV1KVxcXFxuXFxcIixcXG4xNzUzOlxcdFxcdFxcdFxcdHRkeF9rZXlpZF9zdGFydCwgdGR4X2tleWlkX3N0YXJ0ICsgbnJfdGR4X2tleWlkcyk7XFxuMTc1NDpcXHRcXG4xNzU1OlxcdFxcdC8qXFxuMTc1NjpcXHRcXHQgKiBUaGUgVERYIG1vZHVsZSBpdHNlbGYgcmVxdWlyZXMgb25lICdnbG9iYWwgS2V5SUQnIHRvIHByb3RlY3RcXG4xNzU3OlxcdFxcdCAqIGl0cyBtZXRhZGF0YS4gIElmIHRoZXJlJ3Mgb25seSBvbmUgVERYIEtleUlELCB0aGVyZSB3b24ndCBiZVxcbjE3NTg6XFx0XFx0ICogYW55IGxlZnQgZm9yIFREWCBndWVzdHMgdGh1cyB0aGVyZSdzIG5vIHBvaW50IHRvIGVuYWJsZSBURFhcXG4xNzU5OlxcdFxcdCAqIGF0IGFsbC5cXG4xNzYwOlxcdFxcdCAqL1xcbjE3NjE6XFx0XFx0aWYgKG5yX3RkeF9rZXlpZHMgXFx1MDAzYyAyKSB7XFxuMTc2MjpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogdG9vIGZldyBwcml2YXRlIEtleUlEcyBhdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4xNzYzOlxcdFxcdFxcdHJldHVybjtcXG4xNzY0OlxcdFxcdH1cXG4xNzY1OlxcdFxcbjE3NjY6XFx0XFx0LypcXG4xNzY3OlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQsIGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpIGluZGljYXRlcyB3aGV0aGVyIG9yXFxuMTc2ODpcXHRcXHQgKiBub3QgaGliZXJuYXRpb24gc3VwcG9ydCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG4xNzY5OlxcdFxcdCAqL1xcbjE3NzA6XFx0XFx0aWYgKGhpYmVybmF0aW9uX2F2YWlsYWJsZSgpKSB7XFxuMTc3MTpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogSGliZXJuYXRpb24gc3VwcG9ydCBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4xNzcyOlxcdFxcdFxcdHJldHVybjtcXG4xNzczOlxcdFxcdH1cXG4xNzc0OlxcdFxcbjE3NzU6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKFxcdTAwMjZ0ZHhfbWVtb3J5X25iKTtcXG4xNzc2OlxcdFxcdGlmIChlcnIpIHtcXG4xNzc3OlxcdFxcdFxcdHByX2VycihcXFwiaW5pdGlhbGl6YXRpb24gZmFpbGVkOiByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoKSBmYWlsZWQgKCVkKVxcXFxuXFxcIixcXG4xNzc4OlxcdFxcdFxcdFxcdFxcdGVycik7XFxuMTc3OTpcXHRcXHRcXHRyZXR1cm47XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdCNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKVxcbjE3ODM6XFx0XFx0cHJfaW5mbyhcXFwiRGlzYWJsZSBBQ1BJIFMzLiBUdXJuIG9mZiBURFggaW4gdGhlIEJJT1MgdG8gdXNlIEFDUEkgUzMuXFxcXG5cXFwiKTtcXG4xNzg0OlxcdFxcdGFjcGlfc3VzcGVuZF9sb3dsZXZlbCA9IE5VTEw7XFxuMTc4NTpcXHQjZW5kaWZcXG4xNzg2OlxcdFxcbjE3ODc6XFx0XFx0LypcXG4xNzg4OlxcdFxcdCAqIEp1c3QgdXNlIHRoZSBmaXJzdCBURFggS2V5SUQgYXMgdGhlICdnbG9iYWwgS2V5SUQnIGFuZFxcbjE3ODk6XFx0XFx0ICogbGVhdmUgdGhlIHJlc3QgZm9yIFREWCBndWVzdHMuXFxuMTc5MDpcXHRcXHQgKi9cXG4xNzkxOlxcdFxcdHRkeF9nbG9iYWxfa2V5aWQgPSB0ZHhfa2V5aWRfc3RhcnQ7XFxuMTc5MjpcXHRcXHR0ZHhfZ3Vlc3Rfa2V5aWRfc3RhcnQgPSB0ZHhfa2V5aWRfc3RhcnQgKyAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMToyNy4wNjcwODUzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTU4MTUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBURFggSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgdGR4X2luaXRgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgc2V0dXAsIGFuZCBpdCdzIGJlaW5nIGludm9rZWQgZWFybHksIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBlc3RhYmxpc2hlcyB0aGUgc2VjdXJlIGVudmlyb25tZW50IGZvdW5kYXRpb24uIEJ1dCBub3cgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgYHRkeF9pbml0YCBkZXBlbmRzIG9uIGNvbWluZyBmcm9tPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBnZXRfdGR4X3N5c19pbmZvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGVhcmx5IGFzIHdlbGwsIG9yIGlzIGl0IGdldHRpbmcgaW5mb3JtYXRpb24gbGF0ZXIgb24/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoYXQgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIGhvdyB0aGUgcmVsZXZhbnQgc3lzdGVtIGluZm9ybWF0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGFuZCB1c2VkIGluIHRoZSBURFggbGlmZWN5Y2xlLiBUaGlzIHRyYWNlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2VjdXJpdHkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjMzLjg2MjkwMzEyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA0NTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdGR4X3N5c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB2ZXJzaW9uX2ZpZWxkc1tdID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQxMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDEyOnN0YXRpYyBpbnQgZ2V0X3RkeF9zeXNfaW5mb192ZXJzaW9uKHN0cnVjdCB0ZHhfc3lzX2luZm9fdmVyc2lvbiAqc3lzaW5mb192ZXJzaW9uKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00MTMte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgZmVhdHVyZXNfZmllbGRzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDI1LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0MjY6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZvX2ZlYXR1cmVzKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00Mjcte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfZmllbGQgdGRtcl9maWVsZHNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy00NDMtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjQ0NDpzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ0NS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jdHJsX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ1OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDYwOnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwgKnN5c2luZm9fdGRfY3RybClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDYxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz00NzA9c3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2ZpZWxkIGhhbmRvZmZfZmllbGRzW10gPSB7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDczLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo0NzQ6c3RhdGljIGludCBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoc3RydWN0IHRkeF9zeXNfaW5mb19oYW5kb2ZmICpzeXNpbmZvX2hhbmRvZmYpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ3NS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCB0ZF9jb25mX2ZpZWxkc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NDk4OnN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTQ5OS17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTM2LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo1Mzc6c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01Mzgte1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0MC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTQxOlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdmVyc2lvbihcXHUwMDI2c3lzaW5mby1cXHUwMDNldmVyc2lvbik7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU0Mi1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NTAtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjU1MTpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1Mi1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU1OlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRtcik7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1Ni1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU1OC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTU5OlxcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY3RybCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU2Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTYzOlxcdHJldHVybiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2NvbmYpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01NjQtfVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTEzNTk9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2Mi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM2MzpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvKFxcdTAwMjZ0ZHhfc3lzaW5mbyk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzNjQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNDg1PWludCB0ZHhfbW9kdWxlX3NodXRkb3duKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ5MS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ5MjpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX2hhbmRvZmYoXFx1MDAyNmhhbmRvZmYpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDkzLVxcdC8qXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTUyMz1pbnQgdGR4X21vZHVsZV9ydW5fdXBkYXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTUzMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTUzMjpcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3ZlcnNpb24oXFx1MDAyNnRkeF9zeXNpbmZvLnZlcnNpb24pO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTMzLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjMzLjkzNjk1MzcwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTk0NDI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFREWCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgaW5pdF90ZHhfbW9kdWxlYCBpcyBjYWxsaW5nIGBnZXRfdGR4X3N5c19pbmZvYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBpbml0aWFsaXppbmcgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgbW9kdWxlIHVzdWFsbHkgaW52b2x2ZXMgZ2F0aGVyaW5nIHNvbWUgc3lzdGVtLWxldmVsIGluZm9ybWF0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hlcmUgZXhhY3RseSBpcyBgaW5pdF90ZHhfbW9kdWxlYCBiZWluZyBpbnZva2VkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBjcml0aWNhbC4gSXMgaXQgYmVpbmcgdHJpZ2dlcmVkIGF0IGJvb3QsIG9uLWRlbWFuZCBieSBhbm90aGVyIHNlcnZpY2UsIG9yIGluIHJlc3BvbnNlIHRvIHNvbWUgZXh0ZXJuYWwgZXZlbnQ/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBhIGh1Z2UgYW1vdW50IG9mIGluc2lnaHQgaW50byBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjYWxsIHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSdzIGludGVncmF0aW9uIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gQ29udGV4dCBpcyBrZXkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTozOS4zOTYzOTkwNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY3MjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3RkeF9tb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzQwPXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM1OC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTM1OTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTM2MC17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTQ0MD1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ2OS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ3MDpcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTQ3MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjM5LjUzMTA3OTA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTkzNzE4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBwb2ludCBvZiBlbnRyeSBpcyBgdGR4X2VuYWJsZWAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8sIHdlbGwsIGVuYWJsaW5nIFREWC4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBob3cgZG9lcyBpdCBkbyB0aGF0PyBBaGEsIHRoZSB0ZXh0IHBvaW50cyBvdXQgYHRkeF9lbmFibGVgIGNhbGxzIGBpbml0X3RkeF9tb2R1bGVgLiBUaGF0J3MgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdGhlbiwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgbmVjZXNzYXJ5IHNldHVwIHByb2JhYmx5IGhhcHBlbnMuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYW5kIHRoZSAqd2hlbiouIFNvLCBteSBuZXh0IHF1ZXN0aW9uIGlzIHBhcmFtb3VudDogd2hlcmUgdGhlIGhlY2sgaXMgYHRkeF9lbmFibGVgIGFjdHVhbGx5ICpjYWxsZWQqPyBGaW5kaW5nIHRoZSBjYWxsIHNpdGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBURFggZW5hYmxlbWVudCBmbG93LCB0aGUgcHJlY29uZGl0aW9ucyBmb3IgaXQsIGFuZCB3aGF0IHRyaWdnZXJzIGl0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTo0NC4yNTA0NTQ5NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEyMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9lbmFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMzU5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0MzktXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0NDA6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDgyLX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTQ4MzpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIxOjQ0LjMyOTA3NTg2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE1MTQ3NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVERYIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHRkeF9lbmFibGVgIGlzIGRlY2xhcmVkIGFzIGEgYHN1YnN5c19pbml0Y2FsbGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50IHRoYXQncyBpbml0aWFsaXplZCBwcmV0dHkgZWFybHkgZHVyaW5nIHRoZSBzeXN0ZW0gYm9vdCBwcm9jZXNzLCBsaWtlbHkgYmVmb3JlIG1vc3QgZHJpdmVycyBhcmUgdXAgYW5kIHJ1bm5pbmcuIEl0IG1lYW5zIGl0J3MgY3J1Y2lhbCBmb3IgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgdG8gYmUgYWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGB0ZHhfZW5hYmxlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHNldHRpbmcgdXAgdGhlIFREWCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDgsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMTo0OS4yNDQyMjgxMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDQwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDQwOlxcdHN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcXG4xNDQxOlxcdHtcXG4xNDQyOlxcdFxcdGVudW0gY3B1aHBfc3RhdGUgc3RhdGU7XFxuMTQ0MzpcXHRcXHRpbnQgcmV0O1xcbjE0NDQ6XFx0XFxuMTQ0NTpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuMTQ0NjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IHBsYXRmb3JtXFxcXG5cXFwiKTtcXG4xNDQ3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0NDg6XFx0XFx0fVxcbjE0NDk6XFx0XFxuMTQ1MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWFNBVkUpKSB7XFxuMTQ1MTpcXHRcXHRcXHRwcl9lcnIoXFxcIlhTQVZFIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjE0NTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ1MzpcXHRcXHR9XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NT1ZESVI2NEIpKSB7XFxuMTQ1NjpcXHRcXHRcXHRwcl9lcnIoXFxcIk1PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxcXG5cXFwiKTtcXG4xNDU3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NTg6XFx0XFx0fVxcbjE0NTk6XFx0XFxuMTQ2MDpcXHRcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xcbjE0NjE6XFx0XFx0XFx0cHJfZXJyKFxcXCJTZWxmLXNub29wIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjE0NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MzpcXHRcXHR9XFxuMTQ2NDpcXHRcXG4xNDY1OlxcdFxcdHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcInZpcnQvdGR4Om9ubGluZVxcXCIsXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHQgIHRkeF9vbmxpbmVfY3B1LCB0ZHhfb2ZmbGluZV9jcHUpO1xcbjE0Njc6XFx0XFx0aWYgKHN0YXRlIFxcdTAwM2MgMClcXG4xNDY4OlxcdFxcdFxcdHJldHVybiBzdGF0ZTtcXG4xNDY5OlxcdFxcbjE0NzA6XFx0XFx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XFxuMTQ3MTpcXHRcXHRpZiAocmV0KSB7XFxuMTQ3MjpcXHRcXHRcXHRwcl9lcnIoXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuMTQ3MzpcXHRcXHRcXHRjcHVocF9yZW1vdmVfc3RhdGUoc3RhdGUpO1xcbjE0NzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc1OlxcdFxcdH1cXG4xNDc2OlxcdFxcbjE0Nzc6XFx0XFx0cmVnaXN0ZXJfc3lzY29yZShcXHUwMDI2dGR4X3N5c2NvcmUpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHR0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4xNDgwOlxcdFxcdHByX2luZm8oXFxcIlREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjE0ODE6XFx0XFx0cmV0dXJuIDA7XFxuMTQ4MjpcXHR9XFxuMTQ4MzpcXHRzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuMTQ4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NDkuMjQ0NDE0MzY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MTg2MjM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBURFggSG9zdCBQbGF0Zm9ybSBTdXBwb3J0IGluIEtlcm5lbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRkeF9lbmFibGVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgY2hlY2sgaWYgdGhlIGhvc3QgcGxhdGZvcm0gc3VwcG9ydHMgVERYIHRocm91Z2ggYGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pYC4gTWFrZXMgc2Vuc2UuIElmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBURFgsIHdoaWNoIEknZCBleHBlY3QgZ2l2ZW4gdGhpcyBlbnZpcm9ubWVudCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRU5PREVWYC4gSSBzdGFydCB3b25kZXJpbmcsIGNhbiBRRU1VIGVtdWxhdGUgdGhlIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0PyBVc3VhbGx5LCB0aGF0IGtpbmQgb2YgVERYIGhvc3Qgc3VwcG9ydCBkZW1hbmRzIGFjdHVhbCBURFggaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgdmVyeSBzcGVjaWZpYyBRRU1VIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGZhciBmcm9tIHRoZSBub3JtLiBXYWl0IGEgbWludXRlLi4uIHRoaXMgaXMgU3l6a2FsbGVyLCBzbyB0aGlzIGlzIHVubGlrZWx5IHRvIGJlIHJ1bm5pbmcgb24gVERYIGhhcmR3YXJlISBUaGF0IGNsaWNrcy5cblxuU28sIGlmIHRoYXQgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBmZWF0dXJlIGlzbid0IHByZXNlbnQsIGB0ZHhfZW5hYmxlYCBiYWlscyBvdXQgZWFybHkuIE1lYW5pbmcsIGBpbml0X3RkeF9tb2R1bGVgLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGdldF90ZHhfc3lzX2luZm9gLCBpcyBuZXZlciBldmVuIHJlYWNoZWQuIFRoYXQgZXhwbGFpbnMgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIGlzIGFjdHVhbGx5IHNldC4gVGltZSB0byBnbyBodW50aW5nIGluIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NTUuMTYzMDQwNTExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwNTAzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtMTkwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0RQX0wzXFx0XFx0KCA3KjMyKyA2KSAvKiBcXFwiY2RwX2wzXFxcIiBDb2RlIGFuZCBEYXRhIFByaW9yaXRpemF0aW9uIEwzICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDoxOTE6I2RlZmluZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STVxcdCggNyozMisgNykgLyogXFxcInRkeF9ob3N0X3BsYXRmb3JtXFxcIiBQbGF0Zm9ybSBzdXBwb3J0cyBiZWluZyBhIFREWCBob3N0ICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC0xOTItI2RlZmluZSBYODZfRkVBVFVSRV9IV19QU1RBVEVcXHRcXHQoIDcqMzIrIDgpIC8qIFxcXCJod19wc3RhdGVcXFwiIEFNRCBIVy1QU3RhdGUgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQzNj1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY2LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ2NzpcXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDY4LVxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE0NDA9c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE0NDQtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE0NDU6XFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKSkge1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNDQ2LVxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE1ODI9c3RhdGljIGJvb2wgcGFkZHJfaXNfdGR4X3ByaXZhdGUodW5zaWduZWQgbG9uZyBwaHlzKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE1ODgtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjE1ODk6XFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNTkwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc5NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc5NTpcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjE6NTUuMzE1MDk1OTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDE3NzMwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHRkeF9pbml0YCdzIENQVSBGZWF0dXJlIFNldHVwKipcblxuUmlnaHQsIHRoYXQncyBpdCEgYHRkeF9pbml0YCBpcyBjYWxsaW5nIGBzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNKTtgLiBHb29kLCB0aGF0J3MgdGhlIG9idmlvdXMgaW5pdGlhbCBzdGVwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYWJvdXQgYHRkeF9pbml0YCdzIG92ZXJhbGwgcHVycG9zZSwgYW5kIHRoaXMgZnVuY3Rpb24gY2FsbCBjb25maXJtcyB0aGF0IGl0IGlzIHNldHRpbmcgdXAgdGhlIENQVSBmZWF0dXJlcyByZXF1aXJlZCBmb3IgdGhlIFREWCBob3N0IHBsYXRmb3JtLiBJdCdzIHB1c2hpbmcgdGhhdCBjcnVjaWFsIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYml0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlIGFuZCBzZWUgd2hlcmUgd2UgYXJlLiBMZXQncyBkZWx2ZSBiYWNrIGludG8gYHRkeF9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBzeXN0ZW0gdG8gYWNjb21tb2RhdGUgVERYLiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpdCBkb2VzLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBzZXRzIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGl0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDEsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowMy4xNTY4NzE5MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQzLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzQzOlxcdHZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuMTc0NDpcXHR7XFxuMTc0NTpcXHRcXHR1MzIgdGR4X2tleWlkX3N0YXJ0LCBucl90ZHhfa2V5aWRzO1xcbjE3NDY6XFx0XFx0aW50IGVycjtcXG4xNzQ3OlxcdFxcbjE3NDg6XFx0XFx0ZXJyID0gcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZyhcXHUwMDI2dGR4X2tleWlkX3N0YXJ0LCBcXHUwMDI2bnJfdGR4X2tleWlkcyk7XFxuMTc0OTpcXHRcXHRpZiAoZXJyKVxcbjE3NTA6XFx0XFx0XFx0cmV0dXJuO1xcbjE3NTE6XFx0XFxuMTc1MjpcXHRcXHRwcl9pbmZvKFxcXCJCSU9TIGVuYWJsZWQ6IHByaXZhdGUgS2V5SUQgcmFuZ2UgWyV1LCAldSlcXFxcblxcXCIsXFxuMTc1MzpcXHRcXHRcXHRcXHR0ZHhfa2V5aWRfc3RhcnQsIHRkeF9rZXlpZF9zdGFydCArIG5yX3RkeF9rZXlpZHMpO1xcbjE3NTQ6XFx0XFxuMTc1NTpcXHRcXHQvKlxcbjE3NTY6XFx0XFx0ICogVGhlIFREWCBtb2R1bGUgaXRzZWxmIHJlcXVpcmVzIG9uZSAnZ2xvYmFsIEtleUlEJyB0byBwcm90ZWN0XFxuMTc1NzpcXHRcXHQgKiBpdHMgbWV0YWRhdGEuICBJZiB0aGVyZSdzIG9ubHkgb25lIFREWCBLZXlJRCwgdGhlcmUgd29uJ3QgYmVcXG4xNzU4OlxcdFxcdCAqIGFueSBsZWZ0IGZvciBURFggZ3Vlc3RzIHRodXMgdGhlcmUncyBubyBwb2ludCB0byBlbmFibGUgVERYXFxuMTc1OTpcXHRcXHQgKiBhdCBhbGwuXFxuMTc2MDpcXHRcXHQgKi9cXG4xNzYxOlxcdFxcdGlmIChucl90ZHhfa2V5aWRzIFxcdTAwM2MgMikge1xcbjE3NjI6XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0aWFsaXphdGlvbiBmYWlsZWQ6IHRvbyBmZXcgcHJpdmF0ZSBLZXlJRHMgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuMTc2MzpcXHRcXHRcXHRyZXR1cm47XFxuMTc2NDpcXHRcXHR9XFxuMTc2NTpcXHRcXG4xNzY2OlxcdFxcdC8qXFxuMTc2NzpcXHRcXHQgKiBBdCB0aGlzIHBvaW50LCBoaWJlcm5hdGlvbl9hdmFpbGFibGUoKSBpbmRpY2F0ZXMgd2hldGhlciBvclxcbjE3Njg6XFx0XFx0ICogbm90IGhpYmVybmF0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcGVybWFuZW50bHkgZGlzYWJsZWQuXFxuMTc2OTpcXHRcXHQgKi9cXG4xNzcwOlxcdFxcdGlmIChoaWJlcm5hdGlvbl9hdmFpbGFibGUoKSkge1xcbjE3NzE6XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0aWFsaXphdGlvbiBmYWlsZWQ6IEhpYmVybmF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZFxcXFxuXFxcIik7XFxuMTc3MjpcXHRcXHRcXHRyZXR1cm47XFxuMTc3MzpcXHRcXHR9XFxuMTc3NDpcXHRcXG4xNzc1OlxcdFxcdGVyciA9IHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihcXHUwMDI2dGR4X21lbW9yeV9uYik7XFxuMTc3NjpcXHRcXHRpZiAoZXJyKSB7XFxuMTc3NzpcXHRcXHRcXHRwcl9lcnIoXFxcImluaXRpYWxpemF0aW9uIGZhaWxlZDogcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCkgZmFpbGVkICglZClcXFxcblxcXCIsXFxuMTc3ODpcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbjE3Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbjE3ODA6XFx0XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHQjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1VTUEVORClcXG4xNzgzOlxcdFxcdHByX2luZm8oXFxcIkRpc2FibGUgQUNQSSBTMy4gVHVybiBvZmYgVERYIGluIHRoZSBCSU9TIHRvIHVzZSBBQ1BJIFMzLlxcXFxuXFxcIik7XFxuMTc4NDpcXHRcXHRhY3BpX3N1c3BlbmRfbG93bGV2ZWwgPSBOVUxMO1xcbjE3ODU6XFx0I2VuZGlmXFxuMTc4NjpcXHRcXG4xNzg3OlxcdFxcdC8qXFxuMTc4ODpcXHRcXHQgKiBKdXN0IHVzZSB0aGUgZmlyc3QgVERYIEtleUlEIGFzIHRoZSAnZ2xvYmFsIEtleUlEJyBhbmRcXG4xNzg5OlxcdFxcdCAqIGxlYXZlIHRoZSByZXN0IGZvciBURFggZ3Vlc3RzLlxcbjE3OTA6XFx0XFx0ICovXFxuMTc5MTpcXHRcXHR0ZHhfZ2xvYmFsX2tleWlkID0gdGR4X2tleWlkX3N0YXJ0O1xcbjE3OTI6XFx0XFx0dGR4X2d1ZXN0X2tleWlkX3N0YXJ0ID0gdGR4X2tleWlkX3N0YXJ0ICsgMTtcXG4xNzkzOlxcdFxcdHRkeF9ucl9ndWVzdF9rZXlpZHMgPSBucl90ZHhfa2V5aWRzIC0gMTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSk7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdGNoZWNrX3RkeF9lcnJhdHVtKCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG4xODAwOlxcdGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9nZXRfc3lzaW5mbyh2b2lkKVxcbjE4MDE6XFx0e1xcbjE4MDI6XFx0XFx0aWYgKCF0ZHhfbW9kdWxlX3N0YXRlLmluaXRpYWxpemVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowMy4xNTcxNDU0MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NDE3MjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFREWCBJbml0aWFsaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGB0ZHhfaW5pdGAgd29ya3MgaGVyZS4gSXQgc2VlbXMgdGhhdCBpdHMga2V5IHJvbGUsIGF0IGxlYXN0IGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8sIGlzIHRvIHNldCB0aGUgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBiaXQuIFRoZSBjb25kaXRpb24gZm9yIHRoaXMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIG5lZWRzIHRvIGJlIHN1Y2Nlc3NmdWwsIGFuZCBjcnVjaWFsbHksIGl0IG5lZWRzIHRvIHJldHVybiBhIHZhbHVlLCBgbnJfdGR4X2tleWlkc2AsIHRoYXQncyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMi4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQgc2VlbXMgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgKmF0IGxlYXN0KiB0d28gVERYIGtleSBJRHMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGVuYWJsaW5nIHRoZSBURFggaG9zdCBwbGF0Zm9ybSBmZWF0dXJlcy4gVGhlIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgdGhlbiwgaXMgdW5kZXJzdGFuZGluZyB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZXRlcm1pbmVzIHN1Y2Nlc3MgYW5kIGhvdyBpdCBjYWxjdWxhdGVzIHRoaXMgYG5yX3RkeF9rZXlpZHNgIHZhbHVlLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGllcywgYW5kIHdoZXJlIEkgY2FuIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0ncyBURFggY2FwYWJpbGl0aWVzIGFuZCBsaW1pdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNDYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjA4LjEzMTMyMTMzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NDI5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTE2MzI9Y29uc3QgY2hhciAqdGR4X2R1bXBfbWNlX2luZm8oc3RydWN0IG1jZSAqbSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xNjQyLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxNjQzOnN0YXRpYyBfX2luaXQgaW50IHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmcodTMyICp0ZHhfa2V5aWRfc3RhcnQsXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTE2NDQtXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xNzQzPXZvaWQgX19pbml0IHRkeF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0Ny1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTc0ODpcXHRlcnIgPSByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKFxcdTAwMjZ0ZHhfa2V5aWRfc3RhcnQsIFxcdTAwMjZucl90ZHhfa2V5aWRzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTc0OS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjowOC4yMzEwNjkxMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDE4MDQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBhcnRpdGlvbmluZyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIFRoZSBmaXJzdCB0aG91Z2h0IGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gYWJvdXQgdG8gYXNzZXNzIGEgc3BlY2lmaWMgYXBwcm9hY2ggb3IgZGVzaWduIHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGJyZWFraW5nIGRvd24gYW5kIG9yZ2FuaXppbmcgZGF0YSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSBhc3NpZ24gYW5kIHVzZSByZWNvcmQga2V5cyB3aXRoaW4gYSBwYXJ0aXRpb25lZCBzdHJ1Y3R1cmUuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBlaXRoZXIgYW4gZXhpc3Rpbmcgc3lzdGVtIEknbSBmYW1pbGlhciB3aXRoLCBvciBzb21ldGhpbmcgbmV3IHRoYXQncyBwcmVzZW50ZWQgaXRzZWxmIGFzIGEgcG90ZW50aWFsIHNvbHV0aW9uIG9yIGEgcG9pbnQgb2YgaW50ZXJlc3QuIFRoZSBuYW1pbmcgY29udmVudGlvbiBcInJlY29yZF9rZXlpZFwiIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IG1lbnRhbCBkYXRhYmFzZSBvZiBwb3NzaWJsZSBhcHBsaWNhdGlvbnM6IGRhdGEgd2FyZWhvdXNpbmcsIGRpc3RyaWJ1dGVkIGRhdGFiYXNlcywgZXZlbnQgc3RyZWFtaW5nIHN5c3RlbXMsIHBvc3NpYmx5IGV2ZW4gc29tZXRoaW5nIG1vcmUgbmljaGUgbGlrZSBhIHNwZWNpYWxpemVkIGtleS12YWx1ZSBzdG9yZS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBpbml0aWFsIHF1ZXN0aW9uczogSXMgdGhpcyBhIHNoYXJkaW5nIHN0cmF0ZWd5PyBJcyBpdCBiYXNlZCBvbiBoYXNoaW5nLCByYW5nZSBwYXJ0aXRpb25pbmcsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQncyB0aGUgYW50aWNpcGF0ZWQgZGF0YSB2b2x1bWUgYW5kIHdyaXRlL3JlYWQgcGF0dGVybnMgdGhhdCB0aGlzIHBhcnRpdGlvbmluZyBzY2hlbWUgaXMgZGVzaWduZWQgdG8gaGFuZGxlPyBUaGUgdGVybSBcInBhcnRpdGlvbmluZ1wiIGl0c2VsZiBpbXBsaWVzIGEgZGVzaXJlIGZvciBzY2FsYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhbmQgcG90ZW50aWFsIHBhcmFsbGVsIHByb2Nlc3NpbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHJlY29yZF9rZXlpZF9wYXJ0aXRpb25pbmdgIGltcGxlbWVudGF0aW9uIGFjaGlldmVzIHRob3NlIGdvYWxzIChvciBhdHRlbXB0cyB0bykuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk3LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTIuNTQxMjUyNzI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0MzpcXHRzdGF0aWMgX19pbml0IGludCByZWNvcmRfa2V5aWRfcGFydGl0aW9uaW5nKHUzMiAqdGR4X2tleWlkX3N0YXJ0LFxcbjE2NDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiAqbnJfdGR4X2tleWlkcylcXG4xNjQ1OlxcdHtcXG4xNjQ2OlxcdFxcdHUzMiBfbnJfbWt0bWVfa2V5aWRzLCBfdGR4X2tleWlkX3N0YXJ0LCBfbnJfdGR4X2tleWlkcztcXG4xNjQ3OlxcdFxcdGludCByZXQ7XFxuMTY0ODpcXHRcXG4xNjQ5OlxcdFxcdC8qXFxuMTY1MDpcXHRcXHQgKiBJQTMyX01LVE1FX0tFWUlEX1BBUlRJT05JTkc6XFxuMTY1MTpcXHRcXHQgKiAgIEJpdCBbMzE6MF06XFx0TnVtYmVyIG9mIE1LVE1FIEtleUlEcy5cXG4xNjUyOlxcdFxcdCAqICAgQml0IFs2MzozMl06XFx0TnVtYmVyIG9mIFREWCBwcml2YXRlIEtleUlEcy5cXG4xNjUzOlxcdFxcdCAqL1xcbjE2NTQ6XFx0XFx0cmV0ID0gcmRtc3Jfc2FmZShNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkcsIFxcdTAwMjZfbnJfbWt0bWVfa2V5aWRzLFxcbjE2NTU6XFx0XFx0XFx0XFx0XFx1MDAyNl9ucl90ZHhfa2V5aWRzKTtcXG4xNjU2OlxcdFxcdGlmIChyZXQgfHwgIV9ucl90ZHhfa2V5aWRzKVxcbjE2NTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY1ODpcXHRcXG4xNjU5OlxcdFxcdC8qIFREWCBLZXlJRHMgc3RhcnQgYWZ0ZXIgdGhlIGxhc3QgTUtUTUUgS2V5SUQuICovXFxuMTY2MDpcXHRcXHRfdGR4X2tleWlkX3N0YXJ0ID0gX25yX21rdG1lX2tleWlkcyArIDE7XFxuMTY2MTpcXHRcXG4xNjYyOlxcdFxcdCp0ZHhfa2V5aWRfc3RhcnQgPSBfdGR4X2tleWlkX3N0YXJ0O1xcbjE2NjM6XFx0XFx0Km5yX3RkeF9rZXlpZHMgPSBfbnJfdGR4X2tleWlkcztcXG4xNjY0OlxcdFxcbjE2NjU6XFx0XFx0cmV0dXJuIDA7XFxuMTY2NjpcXHR9XFxuMTY2NzpcXHRcXG4xNjY4OlxcdHN0YXRpYyBib29sIGlzX3RkeF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4xNjY5OlxcdHtcXG4xNjcwOlxcdFxcdHN0cnVjdCB0ZHhfbWVtYmxvY2sgKnRtYjtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0XFx0LypcXG4xNjczOlxcdFxcdCAqIFRoaXMgY2hlY2sgYXNzdW1lcyB0aGF0IHRoZSBzdGFydF9wZm5cXHUwMDNjLVxcdTAwM2VlbmRfcGZuIHJhbmdlIGRvZXMgbm90XFxuMTY3NDpcXHRcXHQgKiBjcm9zcyBtdWx0aXBsZSBAdGR4X21lbWxpc3QgZW50cmllcy4gIEEgc2luZ2xlIG1lbW9yeSBvbmxpbmVcXG4xNjc1OlxcdFxcdCAqIGV2ZW50IGFjcm9zcyBtdWx0aXBsZSBtZW1ibG9ja3MgKGZyb20gd2hpY2ggQHRkeF9tZW1saXN0XFxuMTY3NjpcXHRcXHQgKiBlbnRyaWVzIGFyZSBkZXJpdmVkIGF0IHRoZSB0aW1lIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbikgaXNcXG4xNjc3OlxcdFxcdCAqIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgYmVjYXVzZSBtZW1vcnkgb2ZmbGluZS9vbmxpbmUgaXMgZG9uZVxcbjE2Nzg6XFx0XFx0ICogb24gZ3JhbnVsYXJpdHkgb2YgJ3N0cnVjdCBtZW1vcnlfYmxvY2snLCBhbmQgdGhlIGhvdHBsdWdnYWJsZVxcbjE2Nzk6XFx0XFx0ICogbWVtb3J5IHJlZ2lvbiAob25lIG1lbWJsb2NrKSBtdXN0IGJlIG11bHRpcGxlIG9mIG1lbW9yeV9ibG9jay5cXG4xNjgwOlxcdFxcdCAqL1xcbjE2ODE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0bWIsIFxcdTAwMjZ0ZHhfbWVtbGlzdCwgbGlzdCkge1xcbjE2ODI6XFx0XFx0XFx0aWYgKHN0YXJ0X3BmbiBcXHUwMDNlPSB0bWItXFx1MDAzZXN0YXJ0X3BmbiBcXHUwMDI2XFx1MDAyNiBlbmRfcGZuIFxcdTAwM2M9IHRtYi1cXHUwMDNlZW5kX3BmbilcXG4xNjgzOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE2ODQ6XFx0XFx0fVxcbjE2ODU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE2ODY6XFx0fVxcbjE2ODc6XFx0XFxuMTY4ODpcXHRzdGF0aWMgaW50IHRkeF9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuMTY4OTpcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqdilcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBtZW1vcnlfbm90aWZ5ICptbiA9IHY7XFxuMTY5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTIuNTQxNTExMTM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MDc5OTk5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNS1RNRSBLZXkgSUQgUGFydGl0aW9uaW5nIGluIGEgVERYIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2AgZnVuY3Rpb24sIGFuZCBpdCdzIHN0YXJ0aW5nIGJ5IHJlYWRpbmcgdGhlIGBNU1JfSUEzMl9NS1RNRV9LRVlJRF9QQVJUSVRJT05JTkdgIE1TUi4gTm93LCBpZiB0aGF0IE1TUiBpc24ndCBwcmVzZW50IG9yIGlmIHRoZSBudW1iZXIgb2YgVERYIGtleSBJRHMgY29tZXMgYmFjayBhcyB6ZXJvLCBpdCdzIHRocm93aW5nIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBjYW4gUUVNVSBldmVuICplbXVsYXRlKiB0aGF0IE1TUj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0J3MgZ2VuZXJhbGx5IHRpZWQgdG8gc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBjZXJ0YWluIGZlYXR1cmUgZmxhZ3MuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuRXZlbiBpZiBRRU1VICpkb2VzKiBlbXVsYXRlIGl0LCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiBUaGUgYHRkeF9lbmFibGVgIGNhbGwgdHJpZ2dlcnMgYGluaXRfdGR4X21vZHVsZWAsIGFuZCAqdGhhdCogY2FsbHMgYGdldF90ZHhfc3lzX2luZm9gLiBUaGVuLCBgZ2V0X3RkeF9zeXNfaW5mb2AgY2FsbHMgYHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgcGFydC4gU3BlY2lmaWNhbGx5LCBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIGlzIGV4ZWN1dGluZyBhIGBUREguU1lTLlJEYCBTRUFNQ0FMTC4gU28sICp0aGF0KiBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIFREWCBzeXN0ZW0gbWV0YWRhdGEgcmVhZC4gQWxyaWdodCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGByZWFkX3N5c19tZXRhZGF0YV9maWVsZGAgYW5kIHNlZSB3aGF0IGl0IGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjE5LjA0OTUxNjEyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTc4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9zeXNfbWV0YWRhdGFfZmllbGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yOTg9c3RhdGljIF9faW5pdCBpbnQgYnVpbGRfdGR4X21lbWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzI5LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzozMzA6c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV9maWVsZCh1NjQgZmllbGRfaWQsIHU2NCAqZGF0YSlcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzMxLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0zNzg9c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV90YWJsZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19maWVsZCAqZmllbGRzLFxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTM4Ni1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6Mzg3OlxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGYtXFx1MDAzZWZpZWxkX2lkLCBcXHUwMDI2dmFsKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzg4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NDk4PXN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2NvbmYgKnRkX2NvbmYpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTE4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZF9jb25mLVxcdTAwM2VudW1fY3B1aWRfY29uZmlnOyBpKyspIHtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTE5OlxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKE1EX0ZJRUxEX0lEX0NQVUlEX0NPTkZJR19MRUFWRVMgKyBpLFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRkX2NvbmYtXFx1MDAzZWNwdWlkX2NvbmZpZ19sZWF2ZXNbaV0pO1xcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTUyNi1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTI3OlxcdFxcdFxcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKGZpZCxcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0ZF9jb25mLVxcdTAwM2VjcHVpZF9jb25maWdfdmFsdWVzW2ldW2pdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6MTkuMTQ4OTQyMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3ODc5MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBgcmVhZF9zeXNfbWV0YWRhdGFfZmllbGRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgaW5wdXRzOiB3aGF0IGRvZXMgaXQgZXhwZWN0IHRvIHJlY2VpdmU/IElzIGl0IGEga2V5LCBhIHBhdGgsIHNvbWUgc29ydCBvZiBpZGVudGlmaWVyPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hhdCdzIGl0cyBvdXRwdXQ/IERvZXMgaXQgcmV0dXJuIHRoZSBtZXRhZGF0YSBkaXJlY3RseSwgb3Igc29tZSBzb3J0IG9mIGhhbmRsZSBvciBvYmplY3QgdGhhdCBJIHRoZW4gbmVlZCB0byBpbnRlcmFjdCB3aXRoPyBJcyBpdCByYXcgZGF0YSBvciBpcyBpdCBhbHJlYWR5IHBhcnNlZCB0byBKU09OIG9yIHNvbWUgb3RoZXIgZm9ybWF0PyBLbm93aW5nIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGlzICpjcml0aWNhbCogZm9yIHRoaXMgZXhwbG9yYXRpb24sIHNvIGxldCdzIHN0YXJ0IHRoZXJlLlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0J3MgdGhlIHN0b3JhZ2UgbWVjaGFuaXNtIGZvciB0aGlzIHN5c3RlbSBtZXRhZGF0YT8gSXMgaXQgYSBrZXktdmFsdWUgc3RvcmUsIGEgZGF0YWJhc2UsIGEgZmlsZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgbW9kZWwgaXMgZ29pbmcgdG8gaW5mbHVlbmNlIG15IGludGVycHJldGF0aW9uLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIG9yIHByZS1jb25kaXRpb25zIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1ldGFkYXRhPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGdyYWNlZnVsbHk/IERvZXMgaXQgb2ZmZXIgYW55IHR5cGUgb2YgY2FjaGluZyB0byBzcGVlZCB1cCB0aGUgbWV0YWRhdGEgcmV0cmlldmFsLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZGF0YSBjb25zaXN0ZW5jeT9cblxuSSB3aWxsIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBtZXRhZGF0YSBmaWVsZCBkb2Vzbid0IGV4aXN0PyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiwgcmV0dXJuIGEgbnVsbCB2YWx1ZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGlzIGtleSB0byB3cml0aW5nIHJvYnVzdCBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQuIEFuZCBldmVuIG1vcmUgaW1wb3J0YW50bHksIEknbGwgYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGlmIGFueS4gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhdmUgYWNjZXNzIHRvIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbj8gQXJlIHRoZXJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBpbmplY3Rpb24gb3IgdW5hdXRob3JpemVkIGFjY2Vzcz8gRmluYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggY29uY3VycmVuY3kgaWYgdGhlIGVudmlyb25tZW50IGlzIG11bHRpdGhyZWFkZWQuIFdpbGwgdGhlcmUgYmUgYW55IHJhY2UgY29uZGl0aW9ucywgb3IgaXMgdGhpcyB0aHJlYWQtc2FmZT8gT2ssIGxldCdzIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI1NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjI4LjUyNzczNjAxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0c3RhdGljIGludCByZWFkX3N5c19tZXRhZGF0YV9maWVsZCh1NjQgZmllbGRfaWQsIHU2NCAqZGF0YSlcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xcbiAzMzM6XFx0XFx0aW50IHJldDtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0LypcXG4gMzM2OlxcdFxcdCAqIFRESC5TWVMuUkQgLS0gcmVhZHMgb25lIGdsb2JhbCBtZXRhZGF0YSBmaWVsZFxcbiAzMzc6XFx0XFx0ICogIC0gUkRYIChpbik6IHRoZSBmaWVsZCB0byByZWFkXFxuIDMzODpcXHRcXHQgKiAgLSBSOCAob3V0KTogdGhlIGZpZWxkIGRhdGFcXG4gMzM5OlxcdFxcdCAqL1xcbiAzNDA6XFx0XFx0YXJncy5yZHggPSBmaWVsZF9pZDtcXG4gMzQxOlxcdFxcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1JELCBcXHUwMDI2YXJncyk7XFxuIDM0MjpcXHRcXHRpZiAocmV0KVxcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0KmRhdGEgPSBhcmdzLnI4O1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRyZXR1cm4gMDtcXG4gMzQ4OlxcdH1cXG4gMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMjoyMjoyOC41Mjg5MzcyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQxMDI2MDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcG9zc2liaWxpdHkgb2YgUmVhY2hpbmcgYHNlYW1jYWxsX3ByZXJyX3JldGAqKlxuXG5Pa2F5LCBzbyBgc2VhbWNhbGxfcHJlcnJfcmV0YCBpbnZvbHZlcyBhIGBTRUFNQ0FMTGAgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHByZXR0eSBuaWNoZS4gSXQncyBhIFZNWCBpbnN0cnVjdGlvbiwgbWVhbmluZyBpdCBuZWVkcyBWTVggcm9vdCBvcGVyYXRpb24sIGFuZCBjcml0aWNhbGx5LCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IOKAkyBuYW1lbHksIGFuIEludGVsIFREWCBtb2R1bGUgbG9hZGVkIHdpdGhpbiB0aGUgU0VBTSByYW5nZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIFFFTVU/IEFuZCwgb2YgY291cnNlLCB0aGUgYW5zd2VyIGlzIG5vLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIG1vZHVsZSBvciBgU0VBTUNBTExgLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGVudmlyb25tZW50IEkgd29yayBpbiwgc3l6a2FsbGVyLCBpc24ndCBzZXQgdXAgdG8gcnVuIHdpdGggVERYIGVtdWxhdGlvbiwgYXQgbGVhc3Qgbm90IHRoYXQgSSdtIGF3YXJlIG9mLlxuXG5UaGF0IG1ha2VzIG1lIHdvbmRlciwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJ1biogb24gcmVhbCBURFggaGFyZHdhcmUgYW55d2hlcmU/IFRoZSBjb250ZXh0IG1lbnRpb25zIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCBoaXRzIGhvbWUuIFREWCBob3N0IGNvZGUgZGVtYW5kcyAqYWN0dWFsKiBwaHlzaWNhbCBURFggaGFyZHdhcmUsIHdpdGggdGhlIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgdGhpcyBlZmZlY3RpdmVseSBtZWFucyB0aGlzIGNvZGUgaXMgaW5oZXJlbnRseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHR5cGljYWwgUUVNVS9HQ0UgZGV2ZWxvcG1lbnQgc2V0dXAuXG5cbk5vdywgYSBrZXJuZWwgYnVnIGlzIGEga2VybmVsIGJ1ZywgYW5kIEkgY2FuJ3QganVzdCB0aHJvdyB1cCBteSBoYW5kcy4gSXMgdGhlcmUgKmFueSogdHJpY2sgdG8gdHJ5IGFuZCBcImZha2VcIiBgc2VhbWNhbGxgIHNvIEkgY2FuIHRlc3QgYXJvdW5kIGl0PyBPa2F5LCB0aW1lIHRvIGdvIGJhY2sgdG8gYmFzaWNzLCBhbmQgY2hlY2sgYHNlYW1jYWxsX3ByZXJyX3JldGAgaXRzZWxmIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjM1LjkzOTIwMDY2NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDI2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlYW1jYWxsX3ByZXJyX3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc2NfcmV0cnlfcHJlcnIoc2NfZnVuY190IGZ1bmMsXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDUtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6MTA2OiNkZWZpbmUgc2VhbWNhbGxfcHJlcnJfcmV0KF9fZm4sIF9fYXJncylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtMTA3LVxcdHNjX3JldHJ5X3ByZXJyKF9fc2VhbWNhbGxfcmV0LCBzZWFtY2FsbF9lcnJfcmV0LCAoX19mbiksIChfX2FyZ3MpKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTMzMD1zdGF0aWMgaW50IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKHU2NCBmaWVsZF9pZCwgdTY0ICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTM0MC1cXHRhcmdzLnJkeCA9IGZpZWxkX2lkO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzozNDE6XFx0cmV0ID0gc2VhbWNhbGxfcHJlcnJfcmV0KFRESF9TWVNfUkQsIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMzQyLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTMwOT1zdGF0aWMgX19pbml0IGludCBpbml0X3RkbXIoc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzIzLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzI0OlxcdFxcdHJldCA9IHNlYW1jYWxsX3ByZXJyX3JldChUREhfU1lTX1RETVJfSU5JVCwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzI1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEyOjIyOjM2LjEzMzIzNDQ5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTk3NzE3ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgX19zZWFtY2FsbF9yZXRgKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbi4gU2VlbXMgbGlrZSB3ZSdyZSBsb29raW5nIGF0IGEgcmV0dXJuIHZhbHVlLCBzcGVjaWZpY2FsbHkgYF9fc2VhbWNhbGxfcmV0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogd2UncmUgZXhhbWluaW5nIHRoaXMuIElzIGl0IGEgc3VzcGVjdGVkIGlzc3VlPyBBcmUgd2UgdHJhY2luZyBhIGJ1Zz8gT3IgYXJlIHdlIHNpbXBseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBjb250cm9sIGZsb3cgbW9yZSBkZWVwbHkgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlPyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmVzLCBgX19zZWFtY2FsbF9yZXRgIGlzIGxpa2VseSBhIHNlYW0gY2FsbCByZXR1cm4gdmFsdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbC4gSW1tZWRpYXRlbHksIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiB3aGF0IGNvbnRleHQgYXJlIHdlIGluPyBXaGF0J3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBpdHMgdmFsdWUsIGFzIGl0IGNvdWxkIHBvaW50IHRvd2FyZCBhIG51bWJlciBvZiBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDk2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NDMuMTMwOTU2MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjAzNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NlYW1jYWxsX3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM9MjM9U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGwpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yNS0vKlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TOjI2OiAqIF9fc2VhbWNhbGxfcmV0KCkgLSBIb3N0LXNpZGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBTRUFNIHNvZnR3YXJlXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlMtMjctICogKHRoZSBQLVNFQU1MRFIgb3IgdGhlIFREWCBtb2R1bGUpLCB3aXRoIHNhdmluZyBvdXRwdXQgcmVnaXN0ZXJzIHRvXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0yOS0gKlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TOjMwOiAqIF9fc2VhbWNhbGxfcmV0KCkgZnVuY3Rpb24gQUJJOlxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTMxLSAqXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy0zOS0gKi9cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUzo0MDpTWU1fRlVOQ19TVEFSVChfX3NlYW1jYWxsX3JldClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGwuUy00MS1cXHRURFhfTU9EVUxFX0NBTEwgaG9zdD0xIHJldD0xXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsLlM6NDI6U1lNX0ZVTkNfRU5EKF9fc2VhbWNhbGxfcmV0KVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbC5TLTQzLVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg9MjA9dTY0IF9fc2VhbWNhbGwodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaDoyMTp1NjQgX19zZWFtY2FsbF9yZXQodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0yMi11NjQgX19zZWFtY2FsbF9zYXZlZF9yZXQodTY0IGZuLCBzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzICphcmdzKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oPTQ1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IHNjX3JldHJ5KHNjX2Z1bmNfdCBmdW5jLCB1NjQgZm4sXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC02MC0jZGVmaW5lIHNlYW1jYWxsKF9mbiwgX2FyZ3MpXFx0XFx0c2NfcmV0cnkoX19zZWFtY2FsbCwgKF9mbiksIChfYXJncykpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmg6NjE6I2RlZmluZSBzZWFtY2FsbF9yZXQoX2ZuLCBfYXJncylcXHRzY19yZXRyeShfX3NlYW1jYWxsX3JldCwgKF9mbiksIChfYXJncykpXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3NlYW1jYWxsX2ludGVybmFsLmgtNjItI2RlZmluZSBzZWFtY2FsbF9zYXZlZF9yZXQoX2ZuLCBfYXJncylcXHRzY19yZXRyeShfX3NlYW1jYWxsX3NhdmVkX3JldCwgKF9mbiksIChfYXJncykpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaD04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzY19yZXRyeV9wcmVycihzY19mdW5jX3QgZnVuYyxcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oLTEwNi0jZGVmaW5lIHNlYW1jYWxsX3ByZXJyX3JldChfX2ZuLCBfX2FyZ3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC9zZWFtY2FsbF9pbnRlcm5hbC5oOjEwNzpcXHRzY19yZXRyeV9wcmVycihfX3NlYW1jYWxsX3JldCwgc2VhbWNhbGxfZXJyX3JldCwgKF9fZm4pLCAoX19hcmdzKSlcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvc2VhbWNhbGxfaW50ZXJuYWwuaC0xMDgtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTU4Mj1zdGF0aWMgYm9vbCBwYWRkcl9pc190ZHhfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHBoeXMpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5Mi1cXHQvKiBHZXQgcGFnZSB0eXBlIGZyb20gdGhlIFREWCBtb2R1bGUgKi9cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTU5MzpcXHRzcmV0ID0gX19zZWFtY2FsbF9kaXJ0eV9jYWNoZShfX3NlYW1jYWxsX3JldCwgVERIX1BIWU1FTV9QQUdFX1JETUQsIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTU5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NDMuMzE2OTk4NzE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjE0MDk4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSB1c2Ugb2YgYF9fc2VhbWNhbGxfcmV0YCB3aGljaCByZWxpZXMgb24gYFREWF9NT0RVTEVfQ0FMTGAsIHVzaW5nIHRoZSBgc2VhbWNhbGxgIGluc3RydWN0aW9uLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgVERYLXNwZWNpZmljLCBhbmQgYHNlYW1jYWxsYCAqbmVlZHMqIFREWCBoYXJkd2FyZS4gUUVNVSwgaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0gb3IgU0VBTSBjYWxscywgc28gZXhlY3V0aW5nIHRoYXQgY29kZSBwYXRoIGRpcmVjdGx5IHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQgaXMgYSBub24tc3RhcnRlci5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYmUgc2V0IGJ5IHNvbWUgb3RoZXIgbWVhbnMgdG8gdHJpY2sgdGhpbmdzPyBJIGR1ZyBkZWVwZXIuIFRoZSBmdW5jdGlvbiBgcmVjb3JkX2tleWlkX3BhcnRpdGlvbmluZ2Agd2lsbCByZWFkIGZyb20gYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AuIElmIHRoYXQgcmVhZCBmYWlscywgd2UncmUgZ29pbmcgdG8gaGl0IHRoZSBgLUVJTlZBTGAgYW5kIHRoZXJlZm9yZSwgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBpc24ndCBnb2luZyB0byBiZSBzZXQsIHNvIHdlIGNhbid0IGdldCB0aGVyZS4gRXZlbiBpZiB3ZSAqc29tZWhvdyogbWFuYWdlZCB0byBieXBhc3MgdGhhdCBjaGVjayAoZXh0cmVtZWx5IHVubGlrZWx5KSwgdGhlIGBzZWFtY2FsbGAgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIGdvaW5nIHRvIGdlbmVyYXRlIGEgI1VEIG9yIGZhaWwgYmVjYXVzZSBRRU1VIGRvZXNuJ3QgaGF2ZSB0aGUgVERYIGhvc3QgZW11bGF0aW9uIG5lY2Vzc2FyeS4gV2UgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBvdGhlciB1c2VzIG9mIGByZWFkX3N5c19tZXRhZGF0YV90YWJsZWAgYW5kIGNvbmZpcm0gdGhhdCBpdCBpcyBvbmx5IHVzZWQgaW4gVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZS5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSwgdGhlIHJlZmFjdG9yaW5nIG9mIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYCwgaXMgcGFydCBvZiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2hpY2ggaXMgYHRkeF9pbml0YCwgYHRkeF9lbmFibGVgIGFuZCBgaW5pdF90ZHhfbW9kdWxlYC4gSXQncyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhlIHByZXNlbmNlIG9mIHJlYWwgVERYIGhhcmR3YXJlIGFuZCBhIEJJT1MgdGhhdCBzdXBwb3J0cyBpdCwgdmlhIHRoZSBgWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk1gIENQVSBmZWF0dXJlIGFuZCB0aGUgYE1TUl9JQTMyX01LVE1FX0tFWUlEX1BBUlRJVElPTklOR2AgY2hlY2suIFRoZSB1c2Ugb2YgYFNFQU1DQUxMYCBjb25maXJtcyB0aGlzIGRlcGVuZGVuY2Ugb24gYSBsb2FkZWQgSW50ZWwgVERYIG1vZHVsZSBpbiB0aGUgU0VBTSByYW5nZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB3ZSdyZSBhbmFseXppbmcgdGhpcyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYW5kIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGxpa2VseSBRRU1VIG9yIGEgc2ltaWxhcmx5IGNvbnN0cmFpbmVkIGVudmlyb25tZW50LCBpdCdzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGV4ZWN1dGUgdGhpcyBjb2RlLiBJdCdzIG5vdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiB0aGUgdGFyZ2V0IGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkkgd2lsbCBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MiwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTI6MjI6NTQuNTMxMTAxMDMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZSAoYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jKS4gVGhpcyBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSBDUFUgZmVhdHVyZSBhbmQgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIFREWCBnbG9iYWwgbWV0YWRhdGEgcmVhZGluZyBpbiB0aGUgVERYIGhvc3QgaW5pdGlhbGl6YXRpb24gY29kZSAoYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jKS4gVGhpcyBjb2RlIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSBDUFUgZmVhdHVyZSBhbmQgdGhlIFNFQU1DQUxMIGluc3RydWN0aW9uLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow85cnq[1] Phase: Running StartedAt: 2026-08-04 12:23:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85cnq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 12:23:06 +0000 UTC FinishedAt: 2026-08-04 12:23:14 +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,}