Name: series-workflowjjppt Phase: Failed StartedAt: 2026-07-01 12:37:23 +0000 UTC FinishedAt: 2026-07-01 12:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjppt[0] Phase: Succeeded StartedAt: 2026-07-01 12:37:23 +0000 UTC FinishedAt: 2026-07-01 12:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjppt[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 12:37:23 +0000 UTC FinishedAt: 2026-07-01 12:53:35 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5nWHVuIChuZ2JlL3R4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIFBDSSBFeHByZXNzIG5ldHdvcmsgY2FyZHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlc2UgZGV2aWNlcyBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9hZXJfY2xlYXJfbm9uZmF0YWxfc3RhdHVzKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGQwNDI1NjdiODEyODRiLi5kMzM0MGIyYjA2ODI0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ1LDUgJiM0MzszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLmEyNWViNmFlZDU2NjBmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuJiM0MztcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICYjNDM7MTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICYjNDM7MTQxMSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgJiM0MzsxNDQwLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDYgJiM0Mzs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYjYuLjNlOTNhM2YzMDljMTY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCkBAIC00LDUgJiM0Mzs0LDUgQEAKIAogb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gubwogCi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8KJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm8KIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwomIzQzOwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwkJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0NSw1ICYjNDM7MzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfY2xvY2spCiYjNDM7CQlwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LSZndDtwdHBfY2xvY2spOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHd4LSZndDtwdHBfdHhfc2tiKTsKJiM0MzsJCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTAzOSw2ICYjNDM7MTA0NCw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzMsNiAmIzQzOzEwODUsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzQsNiAmIzQzOzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTQsNyAmIzQzOzE0MTEsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMiw2ICYjNDM7MTQ0MCw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNCw3ICYjNDM7MTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjYxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBXYW5nWHVuIERyaXZlciBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIGFkZGluZyBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGVzZSBhcmUsIGFmdGVyIGFsbCwgaGFyZHdhcmUgZHJpdmVycyBmb3IgR2lnYWJpdCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLCBhbmQgc3BlY2lmaWMgaGFyZHdhcmUgaXMgdXN1YWxseSBhIG5vLWdvIGluIHZpcnR1YWxpemF0aW9uIHVubGVzcyBlbXVsYXRlZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIFFFTVUgZXZlbiAqZW11bGF0ZXMqIGEgV2FuZ1h1biBjYXJkLiBJIGRvbiYjMzk7dCB0aGluayBpdCBkb2VzLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGl0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gdGhpbmtpbmcsIGlmIFFFTVUgZG9lc24mIzM5O3Qgb2ZmZXIgZW11bGF0aW9uLCB3ZSYjMzk7cmUgbGlrZWx5IG91dCBvZiBsdWNrLgoKVGhlbiwgbXkgYnJhaW4ganVtcHMgdG8gZ2VuZXJpYyBtZWNoYW5pc21zLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UuIElmIHRoYXQgUENJIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCwgYW5kIHRoZSBuZXRkZXYgbmV2ZXIgcmVnaXN0ZXJzLiBUaGlzIHNlZW1zIGxpa2UgYSBkZWFkIGVuZCB1bmxlc3MgdGhlcmUgaXMgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLgoKU3l6a2FsbGVyIGNhbiB1c2UgYHZoY2lgLCBgZHVtbXlgLCBvciBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhvc2UgYXJlIG5vdCBQQ0kgZW11bGF0b3JzLiBXYWl0LCB0aGVyZSBhcmUgc29tZSBgc3l6X3BjaV8uLi5gIGNhbGxzIGluIHN5emthbGxlci4gQnV0IHRoYXQgbWlnaHQgYmUgbGltaXRlZCBvciBtYXliZSBub3QgZXZlbiBhcHBseS4gVGhlcmUmIzM5O3MgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIG9yIGl0IHVzZXMgYHZoY2lgIGZvciBVU0IuIEZvciBQQ0ksIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwgdGhhdCBhbGxvd3MgYXJiaXRyYXJ5IFBDSSBkcml2ZXIgcHJvYmluZywgZXhjZXB0IG1heWJlIHRocm91Z2ggc29tZSBzcGVjaWZpYyBmdXp6aW5nIGhhcm5lc3Nlcy4gV2FpdCwgc3l6a2FsbGVyICpkaWQqIGFkZCBQQ0kgZnV6emluZyBzdXBwb3J0IHJlY2VudGx5IQoKT2theSwgKnRoYXQmIzM5O3MqIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIFBDSSBmdXp6aW5nIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIHBvdGVudGlhbGx5IGhpdCB0aGlzIFdhbmdYdW4gZHJpdmVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgc3l6a2FsbGVyIGNhbiBpbmplY3QgUENJIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBkcml2ZXIgaXMgc2V0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpBaCwgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7CgpTbywgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBXYW5nWHVuIGRyaXZlciByZWFjaGFibGUgaW4gUUVNVT8gVW5sZXNzIFFFTVUgZW11bGF0ZXMgaXQsIHRoZSBhbnN3ZXIgaXMgbm8uIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtuZ2JlJiMzNDsgb3IgJiMzNDt0eGdiZSYjMzQ7IGluIHRoZSBrZXJuZWwgdHJlZSB1c2luZyBgZ3JlcHBlcmAgaW4gdGhlIGB0b29scy9gIGFuZCBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcmllcyB0byBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbi4gU2luY2UgdGhpcyBpcyBhIHB1cmUgaGFyZHdhcmUgZHJpdmVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCBpdCYjMzk7cyBub3QgcmVhY2hhYmxlLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjYW4gZW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBCQVJzLCBidXQgaXQmIzM5O3Mgbm90IGdlbmVyaWMsIGFuZCBzeXprYWxsZXIgdXNlcyBlaXRoZXIgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW4gUUVNVSAoZS5nLiBgaXZzaG1lbWAgb3IgYSBjdXN0b20gYHN5ei1wY2lgIGRldmljZSkgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgdGhpcyB0eXBlIG9mIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHdpbGwgbWFrZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkluIGNvbmNsdXNpb24sIGJlY2F1c2UgaXQmIzM5O3MgYSBwdXJlIGhhcmR3YXJlIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uLCB0aGUgYW5zd2VyIGlzLCBpdCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTtsbCB2ZXJpZnkgdGhlIGxhY2sgb2YgZW11bGF0aW9uIGFuZCB0aGVuIHRoZSBjb25jbHVzaW9uIGlzIHRoaXMgY2hhbmdlIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25nYmVfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5MDogKiBuZ2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTEtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5NS0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5NjogKiBuZ2JlX3Byb2JlIGluaXRpYWxpemVzIGFuIHd4IGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTctICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5OS0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzAwOnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MDEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05ODI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODQtXHQuaWRfdGFibGUgPSBuZ2JlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg1Olx0LnByb2JlICAgID0gbmdiZV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODYtXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU1MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIEZ1enppbmcgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFBDSSBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7U3RhbmRhcmQgUENJIGRyaXZlciwgbm90aGluZyBzcGVjaWFsLiYjMzQ7IFRoZW4gdGhlIHF1ZXN0aW9uIGhpdHM6IGlzIFBDSSBmdXp6aW5nIHN1cHBvcnRlZCBieSBzeXprYWxsZXI/IFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIGBzeXpfcGNpYCBhbmQgYHN5el9wY2l2ZmAsIHNvIHllcywgKnRlY2huaWNhbGx5KiBpdCBpcy4gQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGRvZXMgdGhhdCBtZWFuIHdlIG5lZWQgdG8gZnV6eiAqYWxsKiBQQ0kgZHJpdmVycz8gVGhhdCBmZWVscyBsaWtlIGEgcmFiYml0IGhvbGUuCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBmb3IgdW5yZWFjaGFibGUgY29kZSwgcGFydGljdWxhcmx5IHN0dWZmIHRoYXQmIzM5O3MgaW1wb3NzaWJsZSB0byBoaXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgUENJIGRyaXZlcnMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIG5ldHdvcmsgY2FyZHMgb3IgR1BVcywgZmFsbCBpbnRvIHRoYXQgdW5yZWFjaGFibGUgY2F0ZWdvcnkgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgKnZlcnkqIHNwZWNpZmljIGVtdWxhdGlvbiBoYXBwZW5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciB0aGF0IGludGVyY2VwdHMgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyBhY2Nlc3Nlcywgd2hpY2ggZWZmZWN0aXZlbHkgZW11bGF0ZXMgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBPa2F5LCBzbyBzeXprYWxsZXIgKmNhbiogaGl0IHRoZXNlLCBidXQgZG9lcyBpdCB3b3JrIGZvciAqYWxsKiBQQ0kgZHJpdmVycz8KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4cGxpY2l0IGluc3RydWN0aW9ucyBhYm91dCBQQ0kgZHJpdmVycy4gQWgsIGhlcmUgd2UgYXJlOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgU28gaWYgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMsIHdoaWNoIGl0IGNhbiwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZSwgcmlnaHQ/IEl0IHNvdW5kcyByZWFjaGFibGUuCgpUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpcyBjb25zaWRlcmVkICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlzdGluY3Rpb24uIEFjdHVhbGx5LCBzeXprYWxsZXIgaGFzIGBzeXMvbGludXgvZGV2X3BjaS50eHRgLCBzbyBtYXliZSB0aGVyZSBpcyBhIGxpc3Qgb2YgZGV2aWNlcy4gSSYjMzk7bGwgc2VhcmNoIGZvciBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYG5nYmVgIG9yIGB0eGdiZWAgd2l0aGluIGBzeXMvbGludXgvYCBvciBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcgUENJIGZ1enppbmcgZ2VuZXJhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3BjaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2FuZ1h1biBEcml2ZXIgQXZhaWxhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgYW5kIEkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyLCBpcyB0aGF0IGV2ZW4gaW4gdGhlIG1haW5saW5lIGtlcm5lbCB0cmVlPyBBbmQgdGhlbiBpdCBoaXRzIG1lLCBjYW4gSSAqYWN0dWFsbHkqIHJlYWNoIHRoZSBXYW5nWHVuIGRyaXZlciBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IExldCYjMzk7cyBzZWUuLi4gbm8sIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBhbnkgV2FuZ1h1biBOZXR3b3JrIEludGVyZmFjZSBDYXJkcy4gSXQgY292ZXJzIGEgYnVuY2ggb2YgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIG9uZXMuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgbGlrZSBhIHNvZnR3YXJlLWVtdWxhdGVkLCBnZW5lcmljIFdhbmdYdW4gZGV2aWNlIGluIHRoZSBrZXJuZWwgZWl0aGVyLCBsaWtlIHRoZSBgZHVtbXlfaGNkYCBvciBgaTJjLXN0dWJgIG1vZHVsZXMgZm9yIFVTQiBhbmQgSTJDLCByZXNwZWN0aXZlbHkuIFNvIGlmIEkmIzM5O20gcnVubmluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoaXMgZHJpdmVyIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgZW11bGF0aW9uIG9mIFdhbmdYdW4gYXQgYWxsLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YW5neHVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MDogICB3YW5neHVuL3R4Z2JlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYxOiAgIHdhbmd4dW4vdHhnYmV2ZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjM6ICAgd2FuZ3h1bi9uZ2JldmZcbi0tXG5NQUlOVEFJTkVSUz0yOTAwNj1XOlx0aHR0cHM6Ly93d3cubmV0LXN3aWZ0LmNvbVxuTUFJTlRBSU5FUlM6MjkwMDc6RjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcbk1BSU5UQUlORVJTOjI5MDA4OkY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1xuTUFJTlRBSU5FUlMtMjkwMDktRjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy13eC5jXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfVklBKSAmIzQzOz0gdmlhL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ORVRfVkVORE9SX1dBTkdYVU4pICYjNDM7PSB3YW5neHVuL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCkgJiM0Mzs9IHdpem5ldC9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2Mi0gKi9cbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2NC17XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDMtXHQvKiBXYW5neHVuIG5pY3MgKi9cbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUyNDQ6XHR7IFBDSV9WRU5ET1JfSURfV0FOR1hVTiwgUENJX0FOWV9JRCwgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyB9LFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cdHsgMCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgV2FuZ1h1biBOSUMgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgV2FuZ1h1biBjb2RlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIEluaXRpYWxseSwgSSByZW1lbWJlcmVkIGBzeXprYWxsZXJgIGhhcyBhIFBDSSBmdXp6ZXIsIGJ1dCB0aGVuIEkgcmVjYWxsZWQgaXQgcmVsaWVzIG9uIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBhcmUgbm90IGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgYW5kIHRodXMsIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRoIHRvIHJlYWNoIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGUgZG9jdW1lbnRhdGlvbiByYWlzZXMgYSBrZXkgcG9pbnQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZ1enotd29ydGh5LgoKVGhlbiBJIGNvbnNpZGVyZWQgaWYgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGJlIGNvbnNpZGVyZWQgJiMzNDtzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7IGluIHRoaXMgY2FzZT8gSSBrbm93IGl0IHVzZXMgdGhpbmdzIGxpa2UgYHZmaW9gIG9yIGEgY3VzdG9tIFFFTVUgZGV2aWNlIChgc3l6LXBjaWApLiBCdXQgZG9lcyBpdCBnZW5lcmljYWxseSBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UgdG8gdGhlIHBvaW50IHdoZXJlIHRoaXMgV2FuZ1h1biBjb2RlIHdvdWxkIGJlIHJlYWNoYWJsZT8gVGhlIHByb21wdCBzYXlzLCBzcGVjaWZpY2FsbHksIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBzYXlzIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4gVGhpcyBwcm9tcHRzIG1lIHRvIGNoZWNrLgoKVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICp1bnJlYWNoYWJsZSogaW4gUUVNVS9HQ0UuIFdhbmdYdW4gaXMgYSBwaHlzaWNhbCBOSUMsIGFuZCB0aGVyZSBpcyBubyBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbiBmb3IgaXQuIEFsc28sIHRoZXJlJiMzOTtzIG5vIGVxdWl2YWxlbnQgb2YgYG1hYzgwMjExX2h3c2ltYCBvciBgdXNiIGdhZGdldGAgZm9yIGl0IGluIHRoZSBrZXJuZWwuIFNvLCByaWdodCBub3cgaXQgc2VlbXMgdW5yZWFjaGFibGUuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQnV0IHdhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSB0cnVseSBnZW5lcmljIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSAqYW55KiBQQ0kgZGV2aWNlPyBZZXMsIGl0IHVzZXMgaXRzIGN1c3RvbSBRRU1VIGRldmljZSwgd2hpY2ggaW50ZXJjZXB0cyBjb25maWcgc3BhY2UgYW5kIEJBUnMuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHdoYXQgY2Fubm90IGJlIHJlYWNoZWQuIE15IGludGVycHJldGF0aW9uIGlzIHJlaW5mb3JjZWQgYnkgdGhlIHdvcmRpbmc6IGlmICpldmVyeXRoaW5nKiB3YXMgcmVhY2hhYmxlLCB0aGUgcHJvbXB0IHdvdWxkbiYjMzk7dCBoYXZlIHRoaXMgZXhwbGljaXQgcmVzdHJpY3Rpb24uIFRoZSBtZW50aW9uIG9mICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7IGltcGxpZXMgdGhhdCAqc3BlY2lmaWMqIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCBhcmVuJiMzOTt0IHJlYWRpbHkgZW11bGF0ZWQgYXJlIGV4Y2x1ZGVkLgoKU28gbGV0IG1lIGNoZWNrIGFnYWluLgoKSSBjb25maXJtZWQgdGhlIGNvZGUgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY2AuIEl0JiMzOTtzIGEgbGlicmFyeSB1c2VkIGJ5IFdhbmdYdW4gZXRoZXJuZXQgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgV2FuZ1h1biBQQ0llIE5JQ3MuIFNpbmNlIHRoZXJlJiMzOTtzIG5vIFdhbmdYdW4gTklDIGVtdWxhdGlvbiBpbiBzdGFuZGFyZCBRRU1VIGFuZCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCwgaXQgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgYW0gY29uZmlkZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBmb3IgV2FuZ1h1biBlbXVsYXRpb24gY29kZSwgYW5kIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgaW4gYHRvb2xzL2AuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIHRvb2xzIGlzIG9mdGVuIGZvciBnZW5lcmFsIHV0aWxpdHkgc3R1ZmYuIEFscmlnaHQsIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgZHJpdmVycyBkaXJlY3RvcnkuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLi4uIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgKmFjdHVhbCogZHJpdmVycyByZXNpZGUuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IG1lYW4gaXQgKmVtdWxhdGVzKiB0aGUgaGFyZHdhcmUuIEhtbW0sIG5vdyB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZSBkcml2ZXIgdGhhdCAqZW11bGF0ZXMqIFdhbmdYdW4gd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBhYnN0cmFjdGluZyB0aGUgaGFyZHdhcmUgb3IgcHJldGVuZGluZyB0byBiZSBpdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBzYW1lIGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ2AsIGlzIG15IGJlc3QgYmV0IGZvciB1bmNvdmVyaW5nIHdoZXRoZXIgYW55IHZpcnR1YWwgZGV2aWNlIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cbiAgIDc6XHRcdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcbiAgMTU6XHRcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfVkVORE9SX1dBTkdYVU5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTElCV1hcbiAgMjA6XHRcdHRyaXN0YXRlXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRzZWxlY3QgRElNTElCXG4gIDI0Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTkdCRVxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzI6XHRcdHNlbGVjdCBMSUJXWFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgMzU6XHRcdCAgYWRhcHRlcnMuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICAzODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQxOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cbiAgNjY6XHRcbiAgNjc6XHRjb25maWcgVFhHQkVWRlxuICA2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDY5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDcyOlx0XHRzZWxlY3QgTElCV1hcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxuICA3NTpcdFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDgwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG4gIDgxOlx0XG4gIDgyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxuICA4MzpcdFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cbiAgODQ6XHRcbiAgODU6XHRjb25maWcgTkdCRVZGXG4gIDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA4ODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA4OTpcdFx0c2VsZWN0IExJQldYXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxuICA5NDpcdFxuICA5NTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgOTY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuICA5NzpcdFxuICA5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgOTk6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzE0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhIERlY2lzaW9uIG9uIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGV2YWx1YXRpbmcgd2hldGhlciB0aGVzZSBXYW5nWHVuIG5ldHdvcmsgZHJpdmVycyAoYG5nYmVgLCBgdHhnYmVgLCBgdHhnYmV2ZmAsIGBuZ2JldmZgKSBhcmUgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGNoIGFuZCB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLiBUaGUga2V5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBtYWtlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlLiBJbml0aWFsbHksIEkga25vdyB0aGVzZSBhcmUgcGh5c2ljYWwgUENJIEV4cHJlc3MgYWRhcHRlciBkcml2ZXJzLCBhbmQgSSAqZG9uJiMzOTt0KiBzZWUgYW55IGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHVzYiBnYWRnZXRgLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUgYWJzZW5jZSBvZiAqZGVkaWNhdGVkKiBlbXVsYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqZG9lcyogZXhpc3QgYW5kIGNhbiB0aGVvcmV0aWNhbGx5IGluamVjdCBQQ0kgY29uZmlnIHNwYWNlIGFuZCBCQVJzLCB0aHVzIHBvdGVudGlhbGx5IG1ha2luZyBQQ0kgZHJpdmVycyByZWFjaGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQmIzM5O3MgbGFuZ3VhZ2UgaXMgcHJlY2lzZS4gRG9lcyBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjb3VudCBhcyAmIzM0O3NvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb21wdD8gSXQmIzM5O3Mgbm90IHRoZSBzYW1lIGFzIGEgZGVkaWNhdGVkIGtlcm5lbCBtb2R1bGUgbGlrZSBgbWFjODAyMTFfaHdzaW1gLiBJbnN0ZWFkLCBpdCBpcyBhIGZlYXR1cmUgb2YgdGhlIGZ1enplciB1c2luZyBgc3l6X3BjaWAgb3Igc2ltaWxhci4gSSBjaGVjayBmb3IgYHN5el9wY2lgIGluIHRoZSBrZXJuZWwgYnV0IGl0JiMzOTtzIGEgcHNldWRvLXN5c2NhbGwuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlIGZ1enplciByZWxpZXMgb24gY3VzdG9tIFFFTVUgZGV2aWNlcyAoYHN5ei1wY2lgKS4gSXQmIzM5O3MgKm5vdCogc3RhbmRhcmQgUUVNVS4KClRoZSBwcm9tcHQgaGlnaGxpZ2h0cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgQmVjYXVzZSBpdCByZWxpZXMgb24gYSBjdXN0b20gUUVNVSBkZXZpY2UsIEkgY2FuJiMzOTt0IGNvbnNpZGVyIGl0IHN0YW5kYXJkLiBUaGUgdGV4dCYjMzk7cyBwaHJhc2luZyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHRoYXQgKmV2ZW4gd2l0aCogc29mdHdhcmUgZW11bGF0aW9uLCBpZiB0aGUgZHJpdmVyJiMzOTtzIGNvZGUgcGF0aHMgYXJlIHVuZmVhc2libGUsIHRoZW4gSSBtdXN0IG5vdCBkZWVtIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBhIHBoeXNpY2FsIE5JQyBkcml2ZXIsIFN5emthbGxlciAqd2lsbCogdHJ5IHRvIGZ1enogaXQuIElmIHRoZSBmdXp6ZXIgY2Fubm90IHJlYWNoIHRoZSBjb2RlLCBpdCYjMzk7cyBhIHdhc3RlZCByZXNvdXJjZS4KCkFmdGVyIGV4YW1pbmluZyB0aGUgcHJvdmlkZWQgcGF0Y2gsIEkgc2VlIGVycm9yLWhhbmRsaW5nIHBhdGhzOiBgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBgd3hfaW9fc2xvdF9yZXNldGAsIGB3eF9pb19yZXN1bWVgLCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgLCBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYCwgYHd4X3R4X3RpbWVvdXRgLCBhbmQgYHd4X2hhbmRsZV90eF9oYW5nYC4gVGhlc2UgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgaWYgdGhlIFBDSSBmdXp6ZXIgaW5qZWN0cyBlcnJvcnMgb3IgaWYgdGhlIG5ldGRldiBmdXp6ZXIgdHJpZ2dlcnMgYSBUWCB0aW1lb3V0LCBidXQgSSBhbSBsZXNzIGNlcnRhaW4uCgpgbmRvX3R4X3RpbWVvdXRgIGlzIHRoZSBuZXRkZXYgd2F0Y2hkb2csIGEgdGltZW91dCBzaXR1YXRpb24gdGhhdCBtYXkgYmUgdHJpZ2dlcmVkIGJ5IGEgbWlzc2luZyBvciBpbnZhbGlkIFRYIGRlc2NyaXB0b3IuIGB3eF9jaGVja19oYW5nX3N1YnRhc2tgIGFuZCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgIHJ1biB3aXRoaW4gYSB3b3JrcXVldWUuIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAgdXNlcyBQQ0kgQUVSLiBUbyBjaGVjayB0aGUgY29uZmlncyByZXF1aXJlZCwgSSBub3RlIGBDT05GSUdfTkdCRWAsIGBDT05GSUdfVFhHQkVgLCBgQ09ORklHX0xJQldYYCwgYW5kIGBDT05GSUdfUENJRUFFUmAuIGBOR0JFYCBhbmQgYFRYR0JFYCBhcmUgdGhlIGRyaXZlcnMsIGFuZCBgUENJYCBhbmQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBhcmUgZGVwZW5kZW5jaWVzLgoKSSYjMzk7ZCBuZWVkIGBGb2N1c1N5bWJvbHNgIGlmIGl0IHdlcmUgYFdvcnRoRnV6emluZz10cnVlYDogYHd4X2lvX2Vycm9yX2RldGVjdGVkYCwgYHd4X2lvX3Nsb3RfcmVzZXRgLCBgd3hfaW9fcmVzdW1lYCwgYHd4X2NoZWNrX2Vycl9zdWJ0YXNrYCwgYHd4X2NoZWNrX2hhbmdfc3VidGFza2AsIGB3eF90eF90aW1lb3V0YCwgYHd4X2hhbmRsZV90eF9oYW5nYCwgYHd4X3NvZnRfcXVpZXNjZWAsIGFuZCBgd3hfcHRwX3F1aWVzY2VgLgoKV2hpbGUgYHd4X3R4X3RpbWVvdXRgIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZywgSSBhbSBub3QgY29udmluY2VkIHRoYXQgdGhlIGVycm9yIGNvbmRpdGlvbnMgYXJlICplYXNpbHkqIHJlYWNoYWJsZS4KClRoZSBrZXkgaXMgaW4gdGhlICYjMzQ7ZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBQaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChsaWtlIHRoZXNlIGV0aGVybmV0IGNhcmRzKSBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRlZGljYXRlZCBzb2Z0d2FyZSBlbXVsYXRpb24uIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICpkb2VzKiBlbXVsYXRlIFBDSSBkZXZpY2VzIGJ1dCB0aGUgcHJvbXB0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiwgaXQgaXMgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYW5kIEkgbXVzdCBub3QgY29uc2lkZXIgaXQgYFdvcnRoRnV6emluZz10cnVlYC4KCkkgZG8gYSBkZWVwZXIgZGl2ZSBhbmQgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCB0byBmaW5kIGEgZHJpdmVyIGZvciBXYW5nWHVuIGhhcmR3YXJlIGVtdWxhdGlvbiwgYnV0IEkgZG8gbm90LgoKQmFzZWQgb24gdGhlIHByb21wdCBhbmQgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBXYW5nWHVuIGRyaXZlcnMgYXJlIG5vdCByZWFkaWx5IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FuZ3h1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc9MTg3PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoxODg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xODktc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgJiM0Mzs9IHZpYS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSAmIzQzOz0gd2FuZ3h1bi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICYjNDM7PSB3aXpuZXQvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozODpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTc5LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6OTY6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDQyPXN0YXRpYyBpbnQgcGNpX3F1aXJrX2xvb25nc29uX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjItICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MDYzOnN0YXRpYyBpbnQgIHBjaV9xdWlya193YW5neHVuX25pY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19lbmFibGVkIHtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVx0LyogV2FuZ3h1biBuaWNzICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0Olx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDUtXHR7IDAgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIEZ1enppbmcgRmVhc2liaWxpdHkgZm9yIGEgSGFyZHdhcmUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBmdXp6aW5nIGl0IGlzbiYjMzk7dCBnb2luZyB0byBiZSBwb3NzaWJsZS4gSXQmIzM5O3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgaXQgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgY29tcG9uZW50cy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtObyBlbXVsYXRpb24sJiMzNDsgYmVjYXVzZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgb3IgUUVNVSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBoYXJkd2FyZS4gU28sIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRyeWluZyB0byByZWFjaCB0aGF0IGRyaXZlciBpbiBhIHZpcnR1YWwgc2V0dGluZyBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuCgpCdXQgaG9sZCBvbi4uLiBpcyB0aGF0ICpyZWFsbHkqIHRoZSBjYXNlPyBTeXprYWxsZXIgaXMga25vd24gZm9yIGl0cyBhYmlsaXR5IHRvIHB1c2ggdGhlIGJvdW5kYXJpZXMgb2Yga2VybmVsIGZ1enppbmcuIENvdWxkIGl0ICphY3R1YWxseSogZnV6eiB0aGlzIGhhcmR3YXJlIGRyaXZlciwgcGVyaGFwcyBpbiBzb21lIHN1cnByaXNpbmcgd2F5PyBMZXQgbWUgY2hlY2sgdGhlIFN5emthbGxlciBkYXNoYm9hcmQuIFRoZSBkYXNoYm9hcmQmIzM5O3MgbXkgZmlyc3Qgc3RvcC4gQXJlIHRoZXJlIGFueSByZXBvcnRlZCBidWdzIHJlbGF0ZWQgdG8gZHJpdmVycyBsaWtlIGB0eGdiZWAgb3IgYG5nYmVgPyBFdmVuIGEgc2luZ2xlIGJ1ZyB3b3VsZCBtYWtlIG1lIHJlY29uc2lkZXIgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24uCgpEYW1uIGl0LCBubyBpbnRlcm5ldC4gT2theSwgcGxhbiBCLiBJZiBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGUgZGFzaGJvYXJkLCBJIHN0aWxsIGhhdmUgYGdyZXBwZXJgLiBJIGNhbiB1c2UgdGhhdCB0byBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyLXJlbGF0ZWQgY29tbWVudHMgb3IgYW55dGhpbmcgaW4gdGhlIGRyaXZlciBzb3VyY2UgY29kZSBpdHNlbGYuIFRoYXQgbWlnaHQgaW5kaWNhdGUgaWYgc29tZW9uZSBoYXMgYXR0ZW1wdGVkIG9yIGF0IGxlYXN0IGNvbnNpZGVyZWQgZnV6emluZyBpdCB3aXRoIFN5emthbGxlciwgd2hpY2ggbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueXRoaW5nIHRoYXQgY291bGQgcG9pbnQgdG8gU3l6a2FsbGVyIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCBgZ3JlcHBlcmAgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFdhbmdYdW4gTklDIERyaXZlcioqCgpPa2F5LCBubyBkaXJlY3QgbWVudGlvbnMgb2Ygc3l6a2FsbGVyIGluIHRoZSBjb2RlIGl0c2VsZi4gV2FpdCwgdGhlIGF1dGhvciBpcyBqdXN0IHRoZSBwYXRjaCB0cmlhZ2VyLCBub3QgdGhlIG9yaWdpbmFsIGF1dGhvci4gSG1tLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIHBvdGVudGlhbGx5IGZ1enogUENJIGRyaXZlcnMgZW5vdWdoIHRvIHRyaWdnZXIgdGhpcy4gQ291bGQgaXQgZXZlbiBnZXQgdG8gdGhlIGBwcm9iZWAgZnVuY3Rpb24/IEFuZCBldmVuIGlmIGl0IGRpZCwgY291bGQgaXQgYWN0dWFsbHkgaGl0IGB3eF90eF90aW1lb3V0YCBvciBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYD8gTGV0JiMzOTtzIHNlZS4KClJpZ2h0LCBgd3hfdHhfdGltZW91dGAgZ2V0cyBjYWxsZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZywgYSB0aW1lb3V0IGNhdXNlZCBieSBhIHN0b3BwZWQgVFggcXVldWUuIFRvIGhpdCB0aGF0LCB0aGUgZGV2aWNlIHdvdWxkIG5lZWQgdG8gYmUgcHJvYmVkIHN1Y2Nlc3NmdWxseSwgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldiwgYnJvdWdodCB1cCB3aXRoIGBuZG9fb3BlbmAsIGFuZCBhIHBhY2tldCB3b3VsZCBoYXZlIHRvIGJlIHRyYW5zbWl0dGVkIHdpdGggYG5kb19zdGFydF94bWl0YCwgdGhlbiB0aGUgcXVldWUgaGFzIHRvIHN0b3AsIGFuZCB0aGVuIG5vdCBnZXQgd29rZW4gdXAuIEEgcHJldHR5IGxvbmcgY2hhaW4gdG8gc2V0IHVwLgoKSSBrbm93IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICpjYW4qIHNvbWV0aW1lcyBnZXQgcGFzdCBgcHJvYmVgIGJ5IGd1ZXNzaW5nIE1NSU8gcmVhZHMgY29ycmVjdGx5LCBidXQgaXQmIzM5O3MgcmVhbGx5IHRvdWdoIHdpdGggY29tcGxleCBOSUNzLiBIb3dldmVyLCB3YWl0ISBUaGUgcHJvbXB0IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdhbmdYdW4gaXMgYSAqcGh5c2ljYWwqIE5JQy4gVGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdC4gSXQmIzM5O3MganVzdCBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCYjMzk7cyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgd2l0aCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gcHJlc2VudCwgYW5kIHRoZXJlZm9yZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBzcGVsbCB0aGF0IG91dCBjbGVhcmx5IGluIHRoZSBleHBsYW5hdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrLiBJcyBgbGlid3hgIG1heWJlIHVzZWQgYnkgc29tZSB2aXJ0dWFsIGRyaXZlciwgc29tZSBraW5kIG9mIHNvZnR3YXJlIGRldmljZT8gSnVzdCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlid3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UWEdCRSkgJiM0Mzs9IHR4Z2JlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjc6bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy0xMi0jaW5jbHVkZSBcJiMzNDtuZ2JlX2V0aHRvb2wuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMS0jaW5jbHVkZSBcJiMzNDtuZ2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEzLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTU6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdmYuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ldGh0b29sLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTgtI2luY2x1ZGUgXCYjMzQ7bmdiZXZmX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTE0LSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy0xMS0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTExLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTMtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTEyLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoyMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjItI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O3R4Z2JldmZfdHlwZS5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTE5CgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY2lzaW9uOiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGlzIHNvbGVseSB1c2VkIGJ5IHRoZSBXYW5nWHVuIGhhcmR3YXJlIGRyaXZlcnM6IGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJIGhhdmUgdG8gZ28gYmFjayBhbmQgY29uc2lkZXIgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyAtIGFuZCB0aGUgY3JpdGVyaWEgc3BlY2lmaWNhbGx5IGluY2x1ZGUgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7CgpHaXZlbiB0aGVzZSBkcml2ZXJzJiMzOTsgdmVyeSBuYXR1cmUgYXMgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgdGhleSAqY2Fubm90KiBiZSBydW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gV2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIGhlcmUuIFRoaXMgaXMgYSBkaXJlY3QgbWF0Y2ggdG8gdGhlIHJ1bGUuIFRoZXJlZm9yZSwgYXNzaWduaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEkgd2lsbCBub3cgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIGFuZCBhZGQgYSBjbGVhciBhbmQgY29uY2lzZSByZWFzb24gZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6MzguMDM0Mjk4NDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjY0MDkzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MDozOC4wMzQzMDY5MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MTMwMjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMTIyZWY2YjdiZWVjOWUxNTFjMDc0MjExMTlmODMyOTVhNDE2MDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbkBAIC00LDUgKzQsNSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuIFxcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXFxuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0cGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhcm4od3gsIFxcXCJSZXNldCBhZGFwdGVyLlxcXFxuXFxcIik7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xcbitcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XFxuK1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4LVxcdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfcmVzZXRfd3FfJXhcXFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDEsIHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cXHUwMDNlcGRldikpO1xcbitcXHRpZiAoIXd4LVxcdTAwM2VyZXNldF93cSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFxcdTAwMjZ3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcXG4rXFx0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXFx1MDAzZW1hc2spO1xcbitcXHR1MzIgaSwgajtcXG4rXFxuK1xcdGlmICghd3gtXFx1MDAzZW51bV92ZnMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcXG4rXFx0XFx0XFx0dTMyIGgsIHQ7XFxuK1xcbitcXHRcXHRcXHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXHRcXHRcXHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGggIT0gdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcXG4rXFx0XFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXFxuK1xcdFxcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXFxuK1xcdFxcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxcbitcXHRcXHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcXFxuXFxcIik7XFxuK1xcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xcbitcXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHUxNiB2aWQsIHBjaV9jbWQ7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZpZCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXFx1MDAyNnBjaV9jbWQpO1xcbitcXG4rXFx0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xcbitcXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9XWF9FUlJfSF9cXG4rI2RlZmluZSBfV1hfRVJSX0hfXFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xcbitcXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuIFxcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXFx1MDAzZW5ldGRldiwgcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xcbitcXG4rXFx0aGVhZCA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHRhaWwgPSByaW5nLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFxuK1xcdHJldHVybiAoKGhlYWQgXFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXFx1MDAzZWNvdW50KSAtIGhlYWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XFxuK1xcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XFxuK1xcdHUzMiB0eF9kb25lID0gcmluZy1cXHUwMDNlc3RhdHMucGFja2V0cztcXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFxcdTAwMjZcXHUwMDI2IHR4X3BlbmRpbmcpXFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXFxuK1xcdFxcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXFxuK1xcdHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcXG4rXFx0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xcbitcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXFxuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXFxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXFxuIFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcXG4gXFx0XFx0XFx0XFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XFxuIFxcbitcXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xcbitcXHRcXHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcXG4gXFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFxcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcXG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuIFxcdFxcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XFxuIFxcbkBAIC0zMTYxLDcgKzMxOTgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXG4gb3V0OlxcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcXG4gXFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXFx1MDAzZXBkZXYpO1xcbitcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4rXFx0d3hfcHRwX3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XFxuK1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLmEyNWViNmFlZDU2NjBmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwyNCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKVxcbitcXHRcXHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHd4LVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xcbitcXG4gLyoqXFxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggYzdiZWZlNGNkZmU5MDguLmMyZWRiNzQ4ODFmMmI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcXG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcXG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcXG4gXFxuKyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxcXFxuK1xcdFxcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXFxuKyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxcXFxuK1xcdFxcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXFxuK1xcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcXG4gI2RlZmluZSBXWF9QWF9SUl9CQUgoX2kpICAgICAgICAgICAgICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSlcXG5AQCAtMTAzOSw2ICsxMDQ0LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcXG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcXG4gXFx0dTY0IHJlc3RhcnRfcXVldWU7XFxuIFxcdHU2NCB0eF9idXN5O1xcbitcXHR1MzIgdHhfZG9uZV9vbGQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xcbkBAIC0xMDU0LDYgKzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxcXFxuIFxcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXFx1MDAzZW5leHQpXFxuIFxcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xcbitcXHRXWF9UWF9ERVRFQ1RfSEFORyxcXG4rXFx0V1hfSEFOR19DSEVDS19BUk1FRCxcXG4rXFx0V1hfUklOR19TVEFURV9OQklUU1xcbit9O1xcbitcXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcXG4gXFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXFxuQEAgLTEwNzMsNiArMTA4NSw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcXG4gXFx0XFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XFxuIFxcdFxcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xcbiBcXHR9O1xcbitcXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdHU4IF9faW9tZW0gKnRhaWw7XFxuIFxcdGRtYV9hZGRyX3QgZG1hOyAgICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyBvZiBkZXNjcmlwdG9yIHJpbmcgKi9cXG4gXFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xcbkBAIC0xMjA4LDYgKzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHtcXG4gXFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXFxuIFxcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcXG4gXFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcXG4rXFx0V1hfU1RBVEVfRElTQUJMRUQsXFxuK1xcdFdYX1NUQVRFX1JFU19GUkVFRCxcXG4gXFx0V1hfU1RBVEVfTkJJVFNcXHRcXHQvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEyNzQsNiArMTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xcbiBcXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXFxuIFxcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcXG4gXFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcXG4rXFx0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxcbitcXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcXG4gXFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEzOTQsNyArMTQxMSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xcbiBcXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xcbi1cXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbitcXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4rXFx0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XFxuIFxcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG5AQCAtMTQyMiw2ICsxNDQwLDggQEAgc3RydWN0IHd4IHtcXG4gXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XFxuIFxcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cXG4gfTtcXG4gXFxuQEAgLTE1MDQsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXFxuIFxcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2VycihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbi1cXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcXFxcbitcXHRkZXZfd2FybihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuaW5kZXggYjJlMTkxOTgyODAzMjYuLjE5NjBmNzE1NDE1MWRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbkBAIC01OSw3ICs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcXG4gXFx0a3ZmcmVlKHRlbXBfcmluZyk7XFxuIFxcbi1cXHR3eF9jb25maWd1cmUod3gpO1xcbiBcXHRuZ2JlX3VwKHd4KTtcXG4gXFxuIGNsZWFyX3Jlc2V0OlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5pbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcXG4gXFx0eyB9XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XFxuK1xcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuK1xcdHd4X2ZyZWVfaXJxKHd4KTtcXG4rXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xcbiBcXHR3eC1cXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xcbitcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XFxuIFxcdHNldF9iaXQoMCwgXFx1MDAyNnd4LVxcdTAwM2Vmd2RfYml0bWFzayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XFxuIFxcbiBcXHR3eF91cGRhdGVfc3RhdHMod3gpO1xcbitcXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xcbitcXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XFxuIFxcbiBcXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcXG4gfVxcbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbiBcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuIFxcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5hZGRyKTtcXG4gXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbiB9XFxuIFxcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHR3eF9wdHBfaW5pdCh3eCk7XFxuIFxcbi1cXHRuZ2JlX3VwKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX2Rpc19waHk6XFxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3hfY29uZmlndXJlKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXFxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdG5nYmVfZG93bih3eCk7XFxuIFxcdHd4X2ZyZWVfaXJxKHd4KTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcXG4gXFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdCAqL1xcbiBcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRuZ2JlX2Nsb3NlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuIFxcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbitcXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdG5nYmVfZG93bih3eCk7XFxuK1xcdG5nYmVfdXAod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbitcXHRcXHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxcbiBcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXFxuK1xcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbiBcXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XFxuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbkBAIC05Myw2ICs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTA2LDYgKzExMSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEyMyw2ICsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xcbiBcXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMTQ0LDYgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbkBAIC0xODcsNiArMTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4gXFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XFxuIFxcdGlmIChlcnIgIT0gMClcXG4gXFx0XFx0d3hfZXJyKHd4LCBcXFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK1xcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNDA4LDYgKzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XFxuIFxcdHd4LVxcdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdHR4Z2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NDQsNyArNTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTYwNiwxMSArNjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuIH1cXG4gXFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbiBcXHRcXHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0eGdiZV9yZXNldCh3eCk7XFxuQEAgLTY1NCw2ICs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzQ1LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xcbiBcXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdG5ldGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFxcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcXG4gXFxuIFxcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xcbkBAIC04MTQsNiArODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXG4rXFx0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xcbitcXG4gXFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTg4OSw2ICs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfcGh5O1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFxuQEAgLTkxNiw2ICs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtOTQ4LDYgKzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gXFxuIFxcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbiBcXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXFxuIFxcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbiBcXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXFxcXG4gXFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUwOjM4Ljk4NjM3MjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTcxMjAwOTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbisgKi9cbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuK1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbitcdFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuK1xuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4rXHRcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmVzdWx0ID0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK1x0fVxuK1xuK1x0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XG4rXG4rXHRyZXR1cm4gcmVzdWx0O1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuK1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbitcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiJXNfcmVzZXRfd3FfJXhcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4rXHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuK1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuK1x0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbitcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuK1x0dTMyIGksIGo7XG4rXG4rXHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcbitcdFx0XHR1MzIgaCwgdDtcbitcbitcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXG4rXHRcdFx0aWYgKGggIT0gdClcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4rXHRcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuK1x0XHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xuK1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbitcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbitcdFx0ICovXG4rXHRcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCIpO1xuK1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4rXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1dYX0VSUl9IX1xuKyNkZWZpbmUgX1dYX0VSUl9IX1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4rXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gfVxuIFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCJ3eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuK1xuK1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuK1xuK1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbitcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4rXHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbitcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4rXHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4rXHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbitcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuK1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuK1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbitcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4rXHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyArMzE0OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjEsNyArMzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuK1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4rXHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuK1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4rXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBIWjtcbitcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICs4NDUsMjQgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcbiBcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuK1x0XHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbitcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHR9XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbitcbiAvKipcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTAzOSw2ICsxMDQ0LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICsxMDYwLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzMsNiArMTA4NSw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICsxMjIxLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICsxMjg5LDggQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgKzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuIFx0a3ZmcmVlKHRlbXBfcmluZyk7XG4gXG4tXHR3eF9jb25maWd1cmUod3gpO1xuIFx0bmdiZV91cCh3eCk7XG4gXG4gY2xlYXJfcmVzZXQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5pbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9ody5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X21ieC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3NyaW92LmhcIlxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbit9XG4rXG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuK1x0d3gtXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTQwOCw2ICs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiB7XG4gXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XG4gXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbitcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZXJyX2Rpc19waHk6XG5AQCAtNTAzLDYgKzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0d3hfY29uZmlndXJlKHd4KTtcbitcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuK31cbitcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuIFxuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG5AQCAtNjA2LDExICs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcbitcdG5nYmVfZG93bih3eCk7XG4rXHRuZ2JlX3VwKHd4KTtcbitcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbit9XG4rXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuK1x0XHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IG5nYmVfZHJpdmVyX25hbWU7XG4gXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuZ2JlX25ldGRldl9vcHM7XG4rXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XG5AQCAtNzk2LDYgKzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODEyLDYgKzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgKzkzNSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiArOTYzLDcgQEAgc3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIFx0ZGV2aWNlX3dha2V1cF9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4rXHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgKzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgKzExMSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcIkhhcmR3YXJlIEVycm9yOiAlZFxcblwiLCBlcnIpO1xuQEAgLTIyNCw2ICsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiArMzA4LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbitcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK31cbitcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgKzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgKzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSArNjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xuIFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XG4rXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRuZXRkZXYtXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFx1MDAyNnR4Z2JlX3VkcF90dW5uZWxzO1xuIFxuIFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgKzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICsxMDA2LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiArMTAxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6MzguOTg2Mzc1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjczMzk3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBXYW5nWHVuIERyaXZlciBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqdGVzdCogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/IFRoZXNlIGFyZSwgYWZ0ZXIgYWxsLCBoYXJkd2FyZSBkcml2ZXJzIGZvciBHaWdhYml0IFBDSSBFeHByZXNzIG5ldHdvcmsgY2FyZHMsIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSBpcyB1c3VhbGx5IGEgbm8tZ28gaW4gdmlydHVhbGl6YXRpb24gdW5sZXNzIGVtdWxhdGVkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VIGV2ZW4gKmVtdWxhdGVzKiBhIFdhbmdYdW4gY2FyZC4gSSBkb24ndCB0aGluayBpdCBkb2VzLCBidXQgSSdsbCBkb3VibGUtY2hlY2suIEknbGwgc2VhcmNoIGZvciBpdCwganVzdCB0byBiZSBzdXJlLiBJJ20gdGhpbmtpbmcsIGlmIFFFTVUgZG9lc24ndCBvZmZlciBlbXVsYXRpb24sIHdlJ3JlIGxpa2VseSBvdXQgb2YgbHVjay5cblxuVGhlbiwgbXkgYnJhaW4ganVtcHMgdG8gZ2VuZXJpYyBtZWNoYW5pc21zLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UuIElmIHRoYXQgUENJIGRldmljZSBpc24ndCBwcmVzZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLCBhbmQgdGhlIG5ldGRldiBuZXZlciByZWdpc3RlcnMuIFRoaXMgc2VlbXMgbGlrZSBhIGRlYWQgZW5kIHVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuXG5cblN5emthbGxlciBjYW4gdXNlIGB2aGNpYCwgYGR1bW15YCwgb3IgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHRob3NlIGFyZSBub3QgUENJIGVtdWxhdG9ycy4gV2FpdCwgdGhlcmUgYXJlIHNvbWUgYHN5el9wY2lfLi4uYCBjYWxscyBpbiBzeXprYWxsZXIuIEJ1dCB0aGF0IG1pZ2h0IGJlIGxpbWl0ZWQgb3IgbWF5YmUgbm90IGV2ZW4gYXBwbHkuIFRoZXJlJ3MgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIG9yIGl0IHVzZXMgYHZoY2lgIGZvciBVU0IuIEZvciBQQ0ksIHRoZXJlJ3Mgbm8gZ2VuZXJpYyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIHVwc3RyZWFtIGtlcm5lbCB0aGF0IGFsbG93cyBhcmJpdHJhcnkgUENJIGRyaXZlciBwcm9iaW5nLCBleGNlcHQgbWF5YmUgdGhyb3VnaCBzb21lIHNwZWNpZmljIGZ1enppbmcgaGFybmVzc2VzLiBXYWl0LCBzeXprYWxsZXIgKmRpZCogYWRkIFBDSSBmdXp6aW5nIHN1cHBvcnQgcmVjZW50bHkhXG5cbk9rYXksICp0aGF0J3MqIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIFBDSSBmdXp6aW5nIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIHBvdGVudGlhbGx5IGhpdCB0aGlzIFdhbmdYdW4gZHJpdmVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgc3l6a2FsbGVyIGNhbiBpbmplY3QgUENJIGRldmljZXMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgZHJpdmVyIGlzIHNldCBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5BaCwgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiXG5cblNvLCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBpcyB0aGlzIFdhbmdYdW4gZHJpdmVyIHJlYWNoYWJsZSBpbiBRRU1VPyBVbmxlc3MgUUVNVSBlbXVsYXRlcyBpdCwgdGhlIGFuc3dlciBpcyBuby4gSSdsbCBzZWFyY2ggZm9yIFwibmdiZVwiIG9yIFwidHhnYmVcIiBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdyZXBwZXJgIGluIHRoZSBgdG9vbHMvYCBhbmQgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3JpZXMgdG8gY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24uIFNpbmNlIHRoaXMgaXMgYSBwdXJlIGhhcmR3YXJlIGRyaXZlciwgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCBpdCdzIG5vdCByZWFjaGFibGUuIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIGVtdWxhdGUgUENJIGNvbmZpZyBzcGFjZSBhbmQgQkFScywgYnV0IGl0J3Mgbm90IGdlbmVyaWMsIGFuZCBzeXprYWxsZXIgdXNlcyBlaXRoZXIgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW4gUUVNVSAoZS5nLiBgaXZzaG1lbWAgb3IgYSBjdXN0b20gYHN5ei1wY2lgIGRldmljZSkgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgdGhpcyB0eXBlIG9mIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHdpbGwgbWFrZSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSW4gY29uY2x1c2lvbiwgYmVjYXVzZSBpdCdzIGEgcHVyZSBoYXJkd2FyZSBkcml2ZXIgYW5kIHRoZXJlJ3Mgbm8gZW11bGF0aW9uLCB0aGUgYW5zd2VyIGlzLCBpdCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJ2xsIHZlcmlmeSB0aGUgbGFjayBvZiBlbXVsYXRpb24gYW5kIHRoZW4gdGhlIGNvbmNsdXNpb24gaXMgdGhpcyBjaGFuZ2UgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjYxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6NTMuNjU5Nzc3NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMTU4MDE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZ2JlX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo2OTA6ICogbmdiZV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5MS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTUtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk2OiAqIG5nYmVfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gd3ggaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTctICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjk5LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzAwOnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzAxLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTk4Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTg0LVxcdC5pZF90YWJsZSA9IG5nYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg1OlxcdC5wcm9iZSAgICA9IG5nYmVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4Ni1cXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6NTcuMDcxMzY4OTg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc3Njk4NzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQQ0kgRHJpdmVyIEZ1enppbmcgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlN0YW5kYXJkIFBDSSBkcml2ZXIsIG5vdGhpbmcgc3BlY2lhbC5cIiBUaGVuIHRoZSBxdWVzdGlvbiBoaXRzOiBpcyBQQ0kgZnV6emluZyBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyPyBUaGUgZG9jdW1lbnRhdGlvbiBtZW50aW9ucyBgc3l6X3BjaWAgYW5kIGBzeXpfcGNpdmZgLCBzbyB5ZXMsICp0ZWNobmljYWxseSogaXQgaXMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBkb2VzIHRoYXQgbWVhbiB3ZSBuZWVkIHRvIGZ1enogKmFsbCogUENJIGRyaXZlcnM/IFRoYXQgZmVlbHMgbGlrZSBhIHJhYmJpdCBob2xlLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBmb3IgdW5yZWFjaGFibGUgY29kZSwgcGFydGljdWxhcmx5IHN0dWZmIHRoYXQncyBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBQQ0kgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgbmV0d29yayBjYXJkcyBvciBHUFVzLCBmYWxsIGludG8gdGhhdCB1bnJlYWNoYWJsZSBjYXRlZ29yeSB1bmxlc3MgdGhlcmUncyBzb21lICp2ZXJ5KiBzcGVjaWZpYyBlbXVsYXRpb24gaGFwcGVuaW5nLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIgdGhhdCBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gYWNjZXNzZXMsIHdoaWNoIGVmZmVjdGl2ZWx5IGVtdWxhdGVzIGFyYml0cmFyeSBQQ0kgZGV2aWNlcy4gT2theSwgc28gc3l6a2FsbGVyICpjYW4qIGhpdCB0aGVzZSwgYnV0IGRvZXMgaXQgd29yayBmb3IgKmFsbCogUENJIGRyaXZlcnM/XG5cbkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4cGxpY2l0IGluc3RydWN0aW9ucyBhYm91dCBQQ0kgZHJpdmVycy4gQWgsIGhlcmUgd2UgYXJlOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgU28gaWYgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMsIHdoaWNoIGl0IGNhbiwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZSwgcmlnaHQ/IEl0IHNvdW5kcyByZWFjaGFibGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGlzIGNvbnNpZGVyZWQgXCJzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbnkgZGlzdGluY3Rpb24uIEFjdHVhbGx5LCBzeXprYWxsZXIgaGFzIGBzeXMvbGludXgvZGV2X3BjaS50eHRgLCBzbyBtYXliZSB0aGVyZSBpcyBhIGxpc3Qgb2YgZGV2aWNlcy4gSSdsbCBzZWFyY2ggZm9yIHNwZWNpZmljIGRyaXZlcnMgbGlrZSBgbmdiZWAgb3IgYHR4Z2JlYCB3aXRoaW4gYHN5cy9saW51eC9gIG9yIHNlZSBpZiB0aGVyZSBpcyBpbmZvcm1hdGlvbiBvbiBlbmFibGluZyBQQ0kgZnV6emluZyBnZW5lcmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTUxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjA0Ljg0ODM2Mzk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzIwNzE4NTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9wY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjA3Ljc4MDQ0OTcyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDA4NTIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2FuZ1h1biBEcml2ZXIgQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgYW5kIEknbSBzdGFydGluZyB0byB3b25kZXIsIGlzIHRoYXQgZXZlbiBpbiB0aGUgbWFpbmxpbmUga2VybmVsIHRyZWU/IEFuZCB0aGVuIGl0IGhpdHMgbWUsIGNhbiBJICphY3R1YWxseSogcmVhY2ggdGhlIFdhbmdYdW4gZHJpdmVyIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gTGV0J3Mgc2VlLi4uIG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBhbnkgV2FuZ1h1biBOZXR3b3JrIEludGVyZmFjZSBDYXJkcy4gSXQgY292ZXJzIGEgYnVuY2ggb2YgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIG9uZXMuXG5cbkFuZCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbid0IGFueXRoaW5nIGxpa2UgYSBzb2Z0d2FyZS1lbXVsYXRlZCwgZ2VuZXJpYyBXYW5nWHVuIGRldmljZSBpbiB0aGUga2VybmVsIGVpdGhlciwgbGlrZSB0aGUgYGR1bW15X2hjZGAgb3IgYGkyYy1zdHViYCBtb2R1bGVzIGZvciBVU0IgYW5kIEkyQywgcmVzcGVjdGl2ZWx5LiBTbyBpZiBJJ20gcnVubmluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoaXMgZHJpdmVyIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgZW11bGF0aW9uIG9mIFdhbmdYdW4gYXQgYWxsLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTE6MTMuMjIxMzA5MTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODE1MDIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjA6ICAgd2FuZ3h1bi90eGdiZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYzOiAgIHdhbmd4dW4vbmdiZXZmXFxuLS1cXG5NQUlOVEFJTkVSUz0yOTAwNj1XOlxcdGh0dHBzOi8vd3d3Lm5ldC1zd2lmdC5jb21cXG5NQUlOVEFJTkVSUzoyOTAwNzpGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcXG5NQUlOVEFJTkVSUzoyOTAwODpGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXFxuTUFJTlRBSU5FUlMtMjkwMDktRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtd3guY1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgKz0gdmlhL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSArPSB3YW5neHVuL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICs9IHdpem5ldC9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MToxNi4xMDI4MjQwNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY1ODQ0MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBXYW5nWHVuIE5JQyBDb2RlIGluIGEgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgV2FuZ1h1biBjb2RlIGFuZCB3aGV0aGVyIGl0J3Mgd29ydGggZnV6emluZy4gSW5pdGlhbGx5LCBJIHJlbWVtYmVyZWQgYHN5emthbGxlcmAgaGFzIGEgUENJIGZ1enplciwgYnV0IHRoZW4gSSByZWNhbGxlZCBpdCByZWxpZXMgb24gcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGFyZSBub3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBhbmQgdGh1cywgbm90IGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdG8gcmVhY2ggcGh5c2ljYWwgaGFyZHdhcmUuIFRoZSBkb2N1bWVudGF0aW9uIHJhaXNlcyBhIGtleSBwb2ludDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6LXdvcnRoeS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgaWYgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gYmUgY29uc2lkZXJlZCBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIgaW4gdGhpcyBjYXNlPyBJIGtub3cgaXQgdXNlcyB0aGluZ3MgbGlrZSBgdmZpb2Agb3IgYSBjdXN0b20gUUVNVSBkZXZpY2UgKGBzeXotcGNpYCkuIEJ1dCBkb2VzIGl0IGdlbmVyaWNhbGx5IGVtdWxhdGUgKmFueSogUENJIGRldmljZSB0byB0aGUgcG9pbnQgd2hlcmUgdGhpcyBXYW5nWHVuIGNvZGUgd291bGQgYmUgcmVhY2hhYmxlPyBUaGUgcHJvbXB0IHNheXMsIHNwZWNpZmljYWxseSwgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IHNheXMgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGlzIHByb21wdHMgbWUgdG8gY2hlY2suXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSAqdW5yZWFjaGFibGUqIGluIFFFTVUvR0NFLiBXYW5nWHVuIGlzIGEgcGh5c2ljYWwgTklDLCBhbmQgdGhlcmUgaXMgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZm9yIGl0LiBBbHNvLCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgYG1hYzgwMjExX2h3c2ltYCBvciBgdXNiIGdhZGdldGAgZm9yIGl0IGluIHRoZSBrZXJuZWwuIFNvLCByaWdodCBub3cgaXQgc2VlbXMgdW5yZWFjaGFibGUuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5CdXQgd2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHRydWx5IGdlbmVyaWMgUENJIGZ1enplciB0aGF0IGNhbiBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2U/IFllcywgaXQgdXNlcyBpdHMgY3VzdG9tIFFFTVUgZGV2aWNlLCB3aGljaCBpbnRlcmNlcHRzIGNvbmZpZyBzcGFjZSBhbmQgQkFScy4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgd2hhdCBjYW5ub3QgYmUgcmVhY2hlZC4gTXkgaW50ZXJwcmV0YXRpb24gaXMgcmVpbmZvcmNlZCBieSB0aGUgd29yZGluZzogaWYgKmV2ZXJ5dGhpbmcqIHdhcyByZWFjaGFibGUsIHRoZSBwcm9tcHQgd291bGRuJ3QgaGF2ZSB0aGlzIGV4cGxpY2l0IHJlc3RyaWN0aW9uLiBUaGUgbWVudGlvbiBvZiBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiBpbXBsaWVzIHRoYXQgKnNwZWNpZmljKiBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlbid0IHJlYWRpbHkgZW11bGF0ZWQgYXJlIGV4Y2x1ZGVkLlxuXG5TbyBsZXQgbWUgY2hlY2sgYWdhaW4uXG5cbkkgY29uZmlybWVkIHRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNgLiBJdCdzIGEgbGlicmFyeSB1c2VkIGJ5IFdhbmdYdW4gZXRoZXJuZXQgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgV2FuZ1h1biBQQ0llIE5JQ3MuIFNpbmNlIHRoZXJlJ3Mgbm8gV2FuZ1h1biBOSUMgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUgYW5kIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLCBpdCBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIGNvbmZpZGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTE6MjguNzYxMjczNTc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyNDkzMDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbmd4dW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MToyOS4zNjM1Mzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTk3OTY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBmb3IgV2FuZ1h1biBlbXVsYXRpb24gY29kZSwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBpbiBgdG9vbHMvYC4gVGhhdCdzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCB0b29scyBpcyBvZnRlbiBmb3IgZ2VuZXJhbCB1dGlsaXR5IHN0dWZmLiBBbHJpZ2h0LCBsZXQncyBwaXZvdCB0byB0aGUgZHJpdmVycyBkaXJlY3RvcnkuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLi4uIG9mIGNvdXJzZSwgdGhhdCdzIHdoZXJlIHRoZSAqYWN0dWFsKiBkcml2ZXJzIHJlc2lkZS4gQnV0IHRoYXQgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIGl0ICplbXVsYXRlcyogdGhlIGhhcmR3YXJlLiBIbW1tLCBub3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgKmVtdWxhdGVzKiBXYW5nWHVuIHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIHNvbWV0aGluZyBhYnN0cmFjdGluZyB0aGUgaGFyZHdhcmUgb3IgcHJldGVuZGluZyB0byBiZSBpdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGBLY29uZmlnYCBmaWxlIGluIHRoYXQgc2FtZSBkaXJlY3RvcnksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgLCBpcyBteSBiZXN0IGJldCBmb3IgdW5jb3ZlcmluZyB3aGV0aGVyIGFueSB2aXJ0dWFsIGRldmljZSBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTozMy4yODMzMzk4OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXYW5neHVuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuZ3h1biBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTM6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNDpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgV2FuZ3h1bihSKSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1dBTkdYVU5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIExJQldYXFxuICAyMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjQ6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBOR0JFXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICAzNTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgMzg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNDE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgVFhHQkVcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0OTpcXHRcXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuICA1MDpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICA1MTpcXHRcXHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxcbiAgNTI6XFx0XFx0c2VsZWN0IFNGUFxcbiAgNTM6XFx0XFx0c2VsZWN0IEdQSU9MSUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcXG4gIDU1OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgNTY6XFx0XFx0c2VsZWN0IExJQldYXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICA1OTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgNjI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXFxuICA2NjpcXHRcXG4gIDY3OlxcdGNvbmZpZyBUWEdCRVZGXFxuICA2ODpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgNjk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcXG4gIDc1OlxcdFxcdCAgV1g1WFhYLCBXWDVYWFhBTC5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDgwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgODM6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnIE5HQkVWRlxcbiAgODY6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgODk6XFx0XFx0c2VsZWN0IExJQldYXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCBuZ2JldmYuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA5NjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgOTk6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTozMy4yODM0NDAyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMTYxMDkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYSBEZWNpc2lvbiBvbiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlc2UgV2FuZ1h1biBuZXR3b3JrIGRyaXZlcnMgKGBuZ2JlYCwgYHR4Z2JlYCwgYHR4Z2JldmZgLCBgbmdiZXZmYCkgYXJlIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRjaCBhbmQgdGhlIHByb21wdCdzIGNyaXRlcmlhLiBUaGUga2V5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gbWFrZSB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZS4gSW5pdGlhbGx5LCBJIGtub3cgdGhlc2UgYXJlIHBoeXNpY2FsIFBDSSBFeHByZXNzIGFkYXB0ZXIgZHJpdmVycywgYW5kIEkgKmRvbid0KiBzZWUgYW55IGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHVzYiBnYWRnZXRgLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUgYWJzZW5jZSBvZiAqZGVkaWNhdGVkKiBlbXVsYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmRvZXMqIGV4aXN0IGFuZCBjYW4gdGhlb3JldGljYWxseSBpbmplY3QgUENJIGNvbmZpZyBzcGFjZSBhbmQgQkFScywgdGh1cyBwb3RlbnRpYWxseSBtYWtpbmcgUENJIGRyaXZlcnMgcmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgcHJvbXB0J3MgbGFuZ3VhZ2UgaXMgcHJlY2lzZS4gRG9lcyBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNvdW50IGFzIFwic29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIiBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0PyBJdCdzIG5vdCB0aGUgc2FtZSBhcyBhIGRlZGljYXRlZCBrZXJuZWwgbW9kdWxlIGxpa2UgYG1hYzgwMjExX2h3c2ltYC4gSW5zdGVhZCwgaXQgaXMgYSBmZWF0dXJlIG9mIHRoZSBmdXp6ZXIgdXNpbmcgYHN5el9wY2lgIG9yIHNpbWlsYXIuIEkgY2hlY2sgZm9yIGBzeXpfcGNpYCBpbiB0aGUga2VybmVsIGJ1dCBpdCdzIGEgcHNldWRvLXN5c2NhbGwuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGUgZnV6emVyIHJlbGllcyBvbiBjdXN0b20gUUVNVSBkZXZpY2VzIChgc3l6LXBjaWApLiBJdCdzICpub3QqIHN0YW5kYXJkIFFFTVUuXG5cblRoZSBwcm9tcHQgaGlnaGxpZ2h0cyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIgQmVjYXVzZSBpdCByZWxpZXMgb24gYSBjdXN0b20gUUVNVSBkZXZpY2UsIEkgY2FuJ3QgY29uc2lkZXIgaXQgc3RhbmRhcmQuIFRoZSB0ZXh0J3MgcGhyYXNpbmcgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB0aGF0ICpldmVuIHdpdGgqIHNvZnR3YXJlIGVtdWxhdGlvbiwgaWYgdGhlIGRyaXZlcidzIGNvZGUgcGF0aHMgYXJlIHVuZmVhc2libGUsIHRoZW4gSSBtdXN0IG5vdCBkZWVtIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZm9yIGEgcGh5c2ljYWwgTklDIGRyaXZlciwgU3l6a2FsbGVyICp3aWxsKiB0cnkgdG8gZnV6eiBpdC4gSWYgdGhlIGZ1enplciBjYW5ub3QgcmVhY2ggdGhlIGNvZGUsIGl0J3MgYSB3YXN0ZWQgcmVzb3VyY2UuXG5cbkFmdGVyIGV4YW1pbmluZyB0aGUgcHJvdmlkZWQgcGF0Y2gsIEkgc2VlIGVycm9yLWhhbmRsaW5nIHBhdGhzOiBgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBgd3hfaW9fc2xvdF9yZXNldGAsIGB3eF9pb19yZXN1bWVgLCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgLCBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYCwgYHd4X3R4X3RpbWVvdXRgLCBhbmQgYHd4X2hhbmRsZV90eF9oYW5nYC4gVGhlc2UgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgaWYgdGhlIFBDSSBmdXp6ZXIgaW5qZWN0cyBlcnJvcnMgb3IgaWYgdGhlIG5ldGRldiBmdXp6ZXIgdHJpZ2dlcnMgYSBUWCB0aW1lb3V0LCBidXQgSSBhbSBsZXNzIGNlcnRhaW4uXG5cbmBuZG9fdHhfdGltZW91dGAgaXMgdGhlIG5ldGRldiB3YXRjaGRvZywgYSB0aW1lb3V0IHNpdHVhdGlvbiB0aGF0IG1heSBiZSB0cmlnZ2VyZWQgYnkgYSBtaXNzaW5nIG9yIGludmFsaWQgVFggZGVzY3JpcHRvci4gYHd4X2NoZWNrX2hhbmdfc3VidGFza2AgYW5kIGB3eF9jaGVja19lcnJfc3VidGFza2AgcnVuIHdpdGhpbiBhIHdvcmtxdWV1ZS4gYHd4X2lvX2Vycm9yX2RldGVjdGVkYCB1c2VzIFBDSSBBRVIuIFRvIGNoZWNrIHRoZSBjb25maWdzIHJlcXVpcmVkLCBJIG5vdGUgYENPTkZJR19OR0JFYCwgYENPTkZJR19UWEdCRWAsIGBDT05GSUdfTElCV1hgLCBhbmQgYENPTkZJR19QQ0lFQUVSYC4gYE5HQkVgIGFuZCBgVFhHQkVgIGFyZSB0aGUgZHJpdmVycywgYW5kIGBQQ0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGFyZSBkZXBlbmRlbmNpZXMuXG5cbkknZCBuZWVkIGBGb2N1c1N5bWJvbHNgIGlmIGl0IHdlcmUgYFdvcnRoRnV6emluZz10cnVlYDogYHd4X2lvX2Vycm9yX2RldGVjdGVkYCwgYHd4X2lvX3Nsb3RfcmVzZXRgLCBgd3hfaW9fcmVzdW1lYCwgYHd4X2NoZWNrX2Vycl9zdWJ0YXNrYCwgYHd4X2NoZWNrX2hhbmdfc3VidGFza2AsIGB3eF90eF90aW1lb3V0YCwgYHd4X2hhbmRsZV90eF9oYW5nYCwgYHd4X3NvZnRfcXVpZXNjZWAsIGFuZCBgd3hfcHRwX3F1aWVzY2VgLlxuXG5XaGlsZSBgd3hfdHhfdGltZW91dGAgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nLCBJIGFtIG5vdCBjb252aW5jZWQgdGhhdCB0aGUgZXJyb3IgY29uZGl0aW9ucyBhcmUgKmVhc2lseSogcmVhY2hhYmxlLlxuXG5UaGUga2V5IGlzIGluIHRoZSBcImV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgUGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGVzZSBldGhlcm5ldCBjYXJkcykgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgc29mdHdhcmUgZW11bGF0aW9uLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyICpkb2VzKiBlbXVsYXRlIFBDSSBkZXZpY2VzIGJ1dCB0aGUgcHJvbXB0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiwgaXQgaXMgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYW5kIEkgbXVzdCBub3QgY29uc2lkZXIgaXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSBkbyBhIGRlZXBlciBkaXZlIGFuZCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHRvIGZpbmQgYSBkcml2ZXIgZm9yIFdhbmdYdW4gaGFyZHdhcmUgZW11bGF0aW9uLCBidXQgSSBkbyBub3QuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQgYW5kIG15IHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBXYW5nWHVuIGRyaXZlcnMgYXJlIG5vdCByZWFkaWx5IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsXG5cbiIsIklucHV0VG9rZW5zIjoyNTMxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTo1NS4zOTk1NTQ1MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA3OTkyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTE4Nz1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTg4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTg5LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfVklBKSArPSB2aWEvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ORVRfVkVORE9SX1dBTkdYVU4pICs9IHdhbmd4dW4vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCkgKz0gd2l6bmV0L1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA0Mj1zdGF0aWMgaW50IHBjaV9xdWlya19sb29uZ3Nvbl9hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjItICovXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTA2MzpzdGF0aWMgaW50ICBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2NC17XFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3NfZW5hYmxlZCB7XFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVxcdC8qIFdhbmd4dW4gbmljcyAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUyNDQ6XFx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQ1LVxcdHsgMCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjU2LjgwMDM2MTU1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc2MDgxMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIEZ1enppbmcgRmVhc2liaWxpdHkgZm9yIGEgSGFyZHdhcmUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgZnV6emluZyBpdCBpc24ndCBnb2luZyB0byBiZSBwb3NzaWJsZS4gSXQncyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZSBjb21wb25lbnRzLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIk5vIGVtdWxhdGlvbixcIiBiZWNhdXNlIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBvciBRRU1VLCB3ZSdyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6ZWQgaGFyZHdhcmUuIFNvLCBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRyeWluZyB0byByZWFjaCB0aGF0IGRyaXZlciBpbiBhIHZpcnR1YWwgc2V0dGluZyBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuXG5cbkJ1dCBob2xkIG9uLi4uIGlzIHRoYXQgKnJlYWxseSogdGhlIGNhc2U/IFN5emthbGxlciBpcyBrbm93biBmb3IgaXRzIGFiaWxpdHkgdG8gcHVzaCB0aGUgYm91bmRhcmllcyBvZiBrZXJuZWwgZnV6emluZy4gQ291bGQgaXQgKmFjdHVhbGx5KiBmdXp6IHRoaXMgaGFyZHdhcmUgZHJpdmVyLCBwZXJoYXBzIGluIHNvbWUgc3VycHJpc2luZyB3YXk/IExldCBtZSBjaGVjayB0aGUgU3l6a2FsbGVyIGRhc2hib2FyZC4gVGhlIGRhc2hib2FyZCdzIG15IGZpcnN0IHN0b3AuIEFyZSB0aGVyZSBhbnkgcmVwb3J0ZWQgYnVncyByZWxhdGVkIHRvIGRyaXZlcnMgbGlrZSBgdHhnYmVgIG9yIGBuZ2JlYD8gRXZlbiBhIHNpbmdsZSBidWcgd291bGQgbWFrZSBtZSByZWNvbnNpZGVyIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uLlxuXG5EYW1uIGl0LCBubyBpbnRlcm5ldC4gT2theSwgcGxhbiBCLiBJZiBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBkYXNoYm9hcmQsIEkgc3RpbGwgaGF2ZSBgZ3JlcHBlcmAuIEkgY2FuIHVzZSB0aGF0IHRvIHNlZSBpZiBJIGNhbiBmaW5kIGFueSBTeXprYWxsZXItcmVsYXRlZCBjb21tZW50cyBvciBhbnl0aGluZyBpbiB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIGl0c2VsZi4gVGhhdCBtaWdodCBpbmRpY2F0ZSBpZiBzb21lb25lIGhhcyBhdHRlbXB0ZWQgb3IgYXQgbGVhc3QgY29uc2lkZXJlZCBmdXp6aW5nIGl0IHdpdGggU3l6a2FsbGVyLCB3aGljaCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMuIEknbGwgc2VhcmNoIGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIHBvaW50IHRvIFN5emthbGxlciBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCBgZ3JlcHBlcmAgdW5jb3ZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUyOjAxLjY3NjQ0NjYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NTczMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5elwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MDEuNzk5MTE2NjU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDEwNzQ3OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogV2FuZ1h1biBOSUMgRHJpdmVyKipcblxuT2theSwgbm8gZGlyZWN0IG1lbnRpb25zIG9mIHN5emthbGxlciBpbiB0aGUgY29kZSBpdHNlbGYuIFdhaXQsIHRoZSBhdXRob3IgaXMganVzdCB0aGUgcGF0Y2ggdHJpYWdlciwgbm90IHRoZSBvcmlnaW5hbCBhdXRob3IuIEhtbSwgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IFBDSSBkcml2ZXJzIGVub3VnaCB0byB0cmlnZ2VyIHRoaXMuIENvdWxkIGl0IGV2ZW4gZ2V0IHRvIHRoZSBgcHJvYmVgIGZ1bmN0aW9uPyBBbmQgZXZlbiBpZiBpdCBkaWQsIGNvdWxkIGl0IGFjdHVhbGx5IGhpdCBgd3hfdHhfdGltZW91dGAgb3IgYHd4X2NoZWNrX2hhbmdfc3VidGFza2A/IExldCdzIHNlZS5cblxuUmlnaHQsIGB3eF90eF90aW1lb3V0YCBnZXRzIGNhbGxlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nLCBhIHRpbWVvdXQgY2F1c2VkIGJ5IGEgc3RvcHBlZCBUWCBxdWV1ZS4gVG8gaGl0IHRoYXQsIHRoZSBkZXZpY2Ugd291bGQgbmVlZCB0byBiZSBwcm9iZWQgc3VjY2Vzc2Z1bGx5LCByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2LCBicm91Z2h0IHVwIHdpdGggYG5kb19vcGVuYCwgYW5kIGEgcGFja2V0IHdvdWxkIGhhdmUgdG8gYmUgdHJhbnNtaXR0ZWQgd2l0aCBgbmRvX3N0YXJ0X3htaXRgLCB0aGVuIHRoZSBxdWV1ZSBoYXMgdG8gc3RvcCwgYW5kIHRoZW4gbm90IGdldCB3b2tlbiB1cC4gQSBwcmV0dHkgbG9uZyBjaGFpbiB0byBzZXQgdXAuXG5cbkkga25vdyBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHNvbWV0aW1lcyBnZXQgcGFzdCBgcHJvYmVgIGJ5IGd1ZXNzaW5nIE1NSU8gcmVhZHMgY29ycmVjdGx5LCBidXQgaXQncyByZWFsbHkgdG91Z2ggd2l0aCBjb21wbGV4IE5JQ3MuIEhvd2V2ZXIsIHdhaXQhIFRoZSBwcm9tcHQgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQncyB0aGUga2V5LiBXYW5nWHVuIGlzIGEgKnBoeXNpY2FsKiBOSUMuIFRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdC4gSXQncyBqdXN0IGltcG9zc2libGUgdG8gcmVhY2ggaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCdzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCB3aXRoIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBwcmVzZW50LCBhbmQgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdsbCBtYWtlIHN1cmUgdG8gc3BlbGwgdGhhdCBvdXQgY2xlYXJseSBpbiB0aGUgZXhwbGFuYXRpb24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrLiBJcyBgbGlid3hgIG1heWJlIHVzZWQgYnkgc29tZSB2aXJ0dWFsIGRyaXZlciwgc29tZSBraW5kIG9mIHNvZnR3YXJlIGRldmljZT8gSnVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MjoxMi4yMDk4NzA5NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDgxMDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaWJ3eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4L1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICs9IHR4Z2JlL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZTo3OmxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6ODpsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtMTItI2luY2x1ZGUgXFxcIm5nYmVfZXRodG9vbC5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy03LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIxLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMy0jaW5jbHVkZSBcXFwibmdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3ZmLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmZfY29tbW9uLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTgtI2luY2x1ZGUgXFxcIm5nYmV2Zl90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEzOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMTQtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtMTEtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTExLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jOjExOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMy0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6NzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0xMi0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoyMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjItI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTIyLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF92Zi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmZfY29tbW9uLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFxcXCJ0eGdiZXZmX3R5cGUuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MTIuNTc0NzAyOTk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjM2MzUyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjaXNpb246IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGlzIHNvbGVseSB1c2VkIGJ5IHRoZSBXYW5nWHVuIGhhcmR3YXJlIGRyaXZlcnM6IGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmAuIFRoYXQncyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byBnbyBiYWNrIGFuZCBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLiBXZSdyZSBsb29raW5nIGZvciB3aGV0aGVyIGl0J3MgXCJXb3J0aEZ1enppbmdcIiAtIGFuZCB0aGUgY3JpdGVyaWEgc3BlY2lmaWNhbGx5IGluY2x1ZGUgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG5cbkdpdmVuIHRoZXNlIGRyaXZlcnMnIHZlcnkgbmF0dXJlIGFzIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIHRoZXkgKmNhbm5vdCogYmUgcnVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFdlIGFyZW4ndCBkZWFsaW5nIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIGhlcmUuIFRoaXMgaXMgYSBkaXJlY3QgbWF0Y2ggdG8gdGhlIHJ1bGUuIFRoZXJlZm9yZSwgYXNzaWduaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEkgd2lsbCBub3cgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIGFuZCBhZGQgYSBjbGVhciBhbmQgY29uY2lzZSByZWFzb24gZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMTksIk91dHB1dFRva2VucyI6ODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MTguNjk4MzQzNzAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjjppt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 12:37:23 +0000 UTC FinishedAt: 2026-07-01 12:52:19 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5nWHVuIChuZ2JlL3R4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIFBDSSBFeHByZXNzIG5ldHdvcmsgY2FyZHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlc2UgZGV2aWNlcyBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9hZXJfY2xlYXJfbm9uZmF0YWxfc3RhdHVzKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGQwNDI1NjdiODEyODRiLi5kMzM0MGIyYjA2ODI0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ1LDUgJiM0MzszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLmEyNWViNmFlZDU2NjBmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuJiM0MztcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICYjNDM7MTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICYjNDM7MTQxMSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgJiM0MzsxNDQwLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDYgJiM0Mzs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYjYuLjNlOTNhM2YzMDljMTY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCkBAIC00LDUgJiM0Mzs0LDUgQEAKIAogb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gubwogCi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8KJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm8KIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwomIzQzOwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwkJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0NSw1ICYjNDM7MzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfY2xvY2spCiYjNDM7CQlwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LSZndDtwdHBfY2xvY2spOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHd4LSZndDtwdHBfdHhfc2tiKTsKJiM0MzsJCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTAzOSw2ICYjNDM7MTA0NCw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzMsNiAmIzQzOzEwODUsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzQsNiAmIzQzOzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTQsNyAmIzQzOzE0MTEsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMiw2ICYjNDM7MTQ0MCw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNCw3ICYjNDM7MTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjYxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBXYW5nWHVuIERyaXZlciBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIGFkZGluZyBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGVzZSBhcmUsIGFmdGVyIGFsbCwgaGFyZHdhcmUgZHJpdmVycyBmb3IgR2lnYWJpdCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLCBhbmQgc3BlY2lmaWMgaGFyZHdhcmUgaXMgdXN1YWxseSBhIG5vLWdvIGluIHZpcnR1YWxpemF0aW9uIHVubGVzcyBlbXVsYXRlZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIFFFTVUgZXZlbiAqZW11bGF0ZXMqIGEgV2FuZ1h1biBjYXJkLiBJIGRvbiYjMzk7dCB0aGluayBpdCBkb2VzLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGl0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gdGhpbmtpbmcsIGlmIFFFTVUgZG9lc24mIzM5O3Qgb2ZmZXIgZW11bGF0aW9uLCB3ZSYjMzk7cmUgbGlrZWx5IG91dCBvZiBsdWNrLgoKVGhlbiwgbXkgYnJhaW4ganVtcHMgdG8gZ2VuZXJpYyBtZWNoYW5pc21zLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UuIElmIHRoYXQgUENJIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCwgYW5kIHRoZSBuZXRkZXYgbmV2ZXIgcmVnaXN0ZXJzLiBUaGlzIHNlZW1zIGxpa2UgYSBkZWFkIGVuZCB1bmxlc3MgdGhlcmUgaXMgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLgoKU3l6a2FsbGVyIGNhbiB1c2UgYHZoY2lgLCBgZHVtbXlgLCBvciBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhvc2UgYXJlIG5vdCBQQ0kgZW11bGF0b3JzLiBXYWl0LCB0aGVyZSBhcmUgc29tZSBgc3l6X3BjaV8uLi5gIGNhbGxzIGluIHN5emthbGxlci4gQnV0IHRoYXQgbWlnaHQgYmUgbGltaXRlZCBvciBtYXliZSBub3QgZXZlbiBhcHBseS4gVGhlcmUmIzM5O3MgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIG9yIGl0IHVzZXMgYHZoY2lgIGZvciBVU0IuIEZvciBQQ0ksIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwgdGhhdCBhbGxvd3MgYXJiaXRyYXJ5IFBDSSBkcml2ZXIgcHJvYmluZywgZXhjZXB0IG1heWJlIHRocm91Z2ggc29tZSBzcGVjaWZpYyBmdXp6aW5nIGhhcm5lc3Nlcy4gV2FpdCwgc3l6a2FsbGVyICpkaWQqIGFkZCBQQ0kgZnV6emluZyBzdXBwb3J0IHJlY2VudGx5IQoKT2theSwgKnRoYXQmIzM5O3MqIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIFBDSSBmdXp6aW5nIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIHBvdGVudGlhbGx5IGhpdCB0aGlzIFdhbmdYdW4gZHJpdmVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgc3l6a2FsbGVyIGNhbiBpbmplY3QgUENJIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBkcml2ZXIgaXMgc2V0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpBaCwgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7CgpTbywgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBXYW5nWHVuIGRyaXZlciByZWFjaGFibGUgaW4gUUVNVT8gVW5sZXNzIFFFTVUgZW11bGF0ZXMgaXQsIHRoZSBhbnN3ZXIgaXMgbm8uIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtuZ2JlJiMzNDsgb3IgJiMzNDt0eGdiZSYjMzQ7IGluIHRoZSBrZXJuZWwgdHJlZSB1c2luZyBgZ3JlcHBlcmAgaW4gdGhlIGB0b29scy9gIGFuZCBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcmllcyB0byBjaGVjayBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdGlvbi4gU2luY2UgdGhpcyBpcyBhIHB1cmUgaGFyZHdhcmUgZHJpdmVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCBpdCYjMzk7cyBub3QgcmVhY2hhYmxlLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjYW4gZW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBCQVJzLCBidXQgaXQmIzM5O3Mgbm90IGdlbmVyaWMsIGFuZCBzeXprYWxsZXIgdXNlcyBlaXRoZXIgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW4gUUVNVSAoZS5nLiBgaXZzaG1lbWAgb3IgYSBjdXN0b20gYHN5ei1wY2lgIGRldmljZSkgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgdGhpcyB0eXBlIG9mIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHdpbGwgbWFrZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkluIGNvbmNsdXNpb24sIGJlY2F1c2UgaXQmIzM5O3MgYSBwdXJlIGhhcmR3YXJlIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uLCB0aGUgYW5zd2VyIGlzLCBpdCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTtsbCB2ZXJpZnkgdGhlIGxhY2sgb2YgZW11bGF0aW9uIGFuZCB0aGVuIHRoZSBjb25jbHVzaW9uIGlzIHRoaXMgY2hhbmdlIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25nYmVfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5MDogKiBuZ2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTEtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5NS0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5NjogKiBuZ2JlX3Byb2JlIGluaXRpYWxpemVzIGFuIHd4IGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTctICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5OS0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzAwOnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MDEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05ODI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODQtXHQuaWRfdGFibGUgPSBuZ2JlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg1Olx0LnByb2JlICAgID0gbmdiZV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODYtXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU1MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIEZ1enppbmcgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFBDSSBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7U3RhbmRhcmQgUENJIGRyaXZlciwgbm90aGluZyBzcGVjaWFsLiYjMzQ7IFRoZW4gdGhlIHF1ZXN0aW9uIGhpdHM6IGlzIFBDSSBmdXp6aW5nIHN1cHBvcnRlZCBieSBzeXprYWxsZXI/IFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIGBzeXpfcGNpYCBhbmQgYHN5el9wY2l2ZmAsIHNvIHllcywgKnRlY2huaWNhbGx5KiBpdCBpcy4gQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGRvZXMgdGhhdCBtZWFuIHdlIG5lZWQgdG8gZnV6eiAqYWxsKiBQQ0kgZHJpdmVycz8gVGhhdCBmZWVscyBsaWtlIGEgcmFiYml0IGhvbGUuCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBmb3IgdW5yZWFjaGFibGUgY29kZSwgcGFydGljdWxhcmx5IHN0dWZmIHRoYXQmIzM5O3MgaW1wb3NzaWJsZSB0byBoaXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgUENJIGRyaXZlcnMgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIG5ldHdvcmsgY2FyZHMgb3IgR1BVcywgZmFsbCBpbnRvIHRoYXQgdW5yZWFjaGFibGUgY2F0ZWdvcnkgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgKnZlcnkqIHNwZWNpZmljIGVtdWxhdGlvbiBoYXBwZW5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciB0aGF0IGludGVyY2VwdHMgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyBhY2Nlc3Nlcywgd2hpY2ggZWZmZWN0aXZlbHkgZW11bGF0ZXMgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBPa2F5LCBzbyBzeXprYWxsZXIgKmNhbiogaGl0IHRoZXNlLCBidXQgZG9lcyBpdCB3b3JrIGZvciAqYWxsKiBQQ0kgZHJpdmVycz8KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4cGxpY2l0IGluc3RydWN0aW9ucyBhYm91dCBQQ0kgZHJpdmVycy4gQWgsIGhlcmUgd2UgYXJlOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgU28gaWYgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMsIHdoaWNoIGl0IGNhbiwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZSwgcmlnaHQ/IEl0IHNvdW5kcyByZWFjaGFibGUuCgpUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpcyBjb25zaWRlcmVkICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZGlzdGluY3Rpb24uIEFjdHVhbGx5LCBzeXprYWxsZXIgaGFzIGBzeXMvbGludXgvZGV2X3BjaS50eHRgLCBzbyBtYXliZSB0aGVyZSBpcyBhIGxpc3Qgb2YgZGV2aWNlcy4gSSYjMzk7bGwgc2VhcmNoIGZvciBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYG5nYmVgIG9yIGB0eGdiZWAgd2l0aGluIGBzeXMvbGludXgvYCBvciBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcgUENJIGZ1enppbmcgZ2VuZXJhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3BjaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2FuZ1h1biBEcml2ZXIgQXZhaWxhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgYW5kIEkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyLCBpcyB0aGF0IGV2ZW4gaW4gdGhlIG1haW5saW5lIGtlcm5lbCB0cmVlPyBBbmQgdGhlbiBpdCBoaXRzIG1lLCBjYW4gSSAqYWN0dWFsbHkqIHJlYWNoIHRoZSBXYW5nWHVuIGRyaXZlciBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IExldCYjMzk7cyBzZWUuLi4gbm8sIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBhbnkgV2FuZ1h1biBOZXR3b3JrIEludGVyZmFjZSBDYXJkcy4gSXQgY292ZXJzIGEgYnVuY2ggb2YgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIG9uZXMuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgbGlrZSBhIHNvZnR3YXJlLWVtdWxhdGVkLCBnZW5lcmljIFdhbmdYdW4gZGV2aWNlIGluIHRoZSBrZXJuZWwgZWl0aGVyLCBsaWtlIHRoZSBgZHVtbXlfaGNkYCBvciBgaTJjLXN0dWJgIG1vZHVsZXMgZm9yIFVTQiBhbmQgSTJDLCByZXNwZWN0aXZlbHkuIFNvIGlmIEkmIzM5O20gcnVubmluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoaXMgZHJpdmVyIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgZW11bGF0aW9uIG9mIFdhbmdYdW4gYXQgYWxsLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YW5neHVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MDogICB3YW5neHVuL3R4Z2JlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYxOiAgIHdhbmd4dW4vdHhnYmV2ZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjM6ICAgd2FuZ3h1bi9uZ2JldmZcbi0tXG5NQUlOVEFJTkVSUz0yOTAwNj1XOlx0aHR0cHM6Ly93d3cubmV0LXN3aWZ0LmNvbVxuTUFJTlRBSU5FUlM6MjkwMDc6RjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcbk1BSU5UQUlORVJTOjI5MDA4OkY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1xuTUFJTlRBSU5FUlMtMjkwMDktRjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy13eC5jXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfVklBKSAmIzQzOz0gdmlhL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ORVRfVkVORE9SX1dBTkdYVU4pICYjNDM7PSB3YW5neHVuL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCkgJiM0Mzs9IHdpem5ldC9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2Mi0gKi9cbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2NC17XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDMtXHQvKiBXYW5neHVuIG5pY3MgKi9cbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUyNDQ6XHR7IFBDSV9WRU5ET1JfSURfV0FOR1hVTiwgUENJX0FOWV9JRCwgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyB9LFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cdHsgMCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgV2FuZ1h1biBOSUMgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgV2FuZ1h1biBjb2RlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIEluaXRpYWxseSwgSSByZW1lbWJlcmVkIGBzeXprYWxsZXJgIGhhcyBhIFBDSSBmdXp6ZXIsIGJ1dCB0aGVuIEkgcmVjYWxsZWQgaXQgcmVsaWVzIG9uIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgLCB3aGljaCBhcmUgbm90IGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgYW5kIHRodXMsIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRoIHRvIHJlYWNoIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGUgZG9jdW1lbnRhdGlvbiByYWlzZXMgYSBrZXkgcG9pbnQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZ1enotd29ydGh5LgoKVGhlbiBJIGNvbnNpZGVyZWQgaWYgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGJlIGNvbnNpZGVyZWQgJiMzNDtzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7IGluIHRoaXMgY2FzZT8gSSBrbm93IGl0IHVzZXMgdGhpbmdzIGxpa2UgYHZmaW9gIG9yIGEgY3VzdG9tIFFFTVUgZGV2aWNlIChgc3l6LXBjaWApLiBCdXQgZG9lcyBpdCBnZW5lcmljYWxseSBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2UgdG8gdGhlIHBvaW50IHdoZXJlIHRoaXMgV2FuZ1h1biBjb2RlIHdvdWxkIGJlIHJlYWNoYWJsZT8gVGhlIHByb21wdCBzYXlzLCBzcGVjaWZpY2FsbHksIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBzYXlzIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4gVGhpcyBwcm9tcHRzIG1lIHRvIGNoZWNrLgoKVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICp1bnJlYWNoYWJsZSogaW4gUUVNVS9HQ0UuIFdhbmdYdW4gaXMgYSBwaHlzaWNhbCBOSUMsIGFuZCB0aGVyZSBpcyBubyBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbiBmb3IgaXQuIEFsc28sIHRoZXJlJiMzOTtzIG5vIGVxdWl2YWxlbnQgb2YgYG1hYzgwMjExX2h3c2ltYCBvciBgdXNiIGdhZGdldGAgZm9yIGl0IGluIHRoZSBrZXJuZWwuIFNvLCByaWdodCBub3cgaXQgc2VlbXMgdW5yZWFjaGFibGUuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQnV0IHdhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSB0cnVseSBnZW5lcmljIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSAqYW55KiBQQ0kgZGV2aWNlPyBZZXMsIGl0IHVzZXMgaXRzIGN1c3RvbSBRRU1VIGRldmljZSwgd2hpY2ggaW50ZXJjZXB0cyBjb25maWcgc3BhY2UgYW5kIEJBUnMuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHdoYXQgY2Fubm90IGJlIHJlYWNoZWQuIE15IGludGVycHJldGF0aW9uIGlzIHJlaW5mb3JjZWQgYnkgdGhlIHdvcmRpbmc6IGlmICpldmVyeXRoaW5nKiB3YXMgcmVhY2hhYmxlLCB0aGUgcHJvbXB0IHdvdWxkbiYjMzk7dCBoYXZlIHRoaXMgZXhwbGljaXQgcmVzdHJpY3Rpb24uIFRoZSBtZW50aW9uIG9mICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7IGltcGxpZXMgdGhhdCAqc3BlY2lmaWMqIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCBhcmVuJiMzOTt0IHJlYWRpbHkgZW11bGF0ZWQgYXJlIGV4Y2x1ZGVkLgoKU28gbGV0IG1lIGNoZWNrIGFnYWluLgoKSSBjb25maXJtZWQgdGhlIGNvZGUgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY2AuIEl0JiMzOTtzIGEgbGlicmFyeSB1c2VkIGJ5IFdhbmdYdW4gZXRoZXJuZXQgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgV2FuZ1h1biBQQ0llIE5JQ3MuIFNpbmNlIHRoZXJlJiMzOTtzIG5vIFdhbmdYdW4gTklDIGVtdWxhdGlvbiBpbiBzdGFuZGFyZCBRRU1VIGFuZCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCwgaXQgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgYW0gY29uZmlkZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBmb3IgV2FuZ1h1biBlbXVsYXRpb24gY29kZSwgYW5kIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgaW4gYHRvb2xzL2AuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIHRvb2xzIGlzIG9mdGVuIGZvciBnZW5lcmFsIHV0aWxpdHkgc3R1ZmYuIEFscmlnaHQsIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgZHJpdmVycyBkaXJlY3RvcnkuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLi4uIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgKmFjdHVhbCogZHJpdmVycyByZXNpZGUuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IG1lYW4gaXQgKmVtdWxhdGVzKiB0aGUgaGFyZHdhcmUuIEhtbW0sIG5vdyB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSB2aXJ0dWFsIGRldmljZSBkcml2ZXIgdGhhdCAqZW11bGF0ZXMqIFdhbmdYdW4gd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBhYnN0cmFjdGluZyB0aGUgaGFyZHdhcmUgb3IgcHJldGVuZGluZyB0byBiZSBpdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBzYW1lIGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ2AsIGlzIG15IGJlc3QgYmV0IGZvciB1bmNvdmVyaW5nIHdoZXRoZXIgYW55IHZpcnR1YWwgZGV2aWNlIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2FuZ3h1biBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cbiAgIDc6XHRcdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFdhbmd4dW4oUikgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGxcbiAgMTU6XHRcdCAgYmUgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBORVRfVkVORE9SX1dBTkdYVU5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTElCV1hcbiAgMjA6XHRcdHRyaXN0YXRlXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRzZWxlY3QgRElNTElCXG4gIDI0Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTkdCRVxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzE6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMzI6XHRcdHNlbGVjdCBMSUJXWFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgMzU6XHRcdCAgYWRhcHRlcnMuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICAzODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQxOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cbiAgNjY6XHRcbiAgNjc6XHRjb25maWcgVFhHQkVWRlxuICA2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDY5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDcyOlx0XHRzZWxlY3QgTElCV1hcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxuICA3NTpcdFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxuICA3NjpcdFxuICA3NzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDgwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG4gIDgxOlx0XG4gIDgyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxuICA4MzpcdFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cbiAgODQ6XHRcbiAgODU6XHRjb25maWcgTkdCRVZGXG4gIDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA4ODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA4OTpcdFx0c2VsZWN0IExJQldYXG4gIDkwOlx0XHRoZWxwXG4gIDkxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgbmdiZXZmLlxuICA5NDpcdFxuICA5NTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgOTY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuICA5NzpcdFxuICA5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgOTk6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzE0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhIERlY2lzaW9uIG9uIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGV2YWx1YXRpbmcgd2hldGhlciB0aGVzZSBXYW5nWHVuIG5ldHdvcmsgZHJpdmVycyAoYG5nYmVgLCBgdHhnYmVgLCBgdHhnYmV2ZmAsIGBuZ2JldmZgKSBhcmUgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGNoIGFuZCB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLiBUaGUga2V5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBtYWtlIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlLiBJbml0aWFsbHksIEkga25vdyB0aGVzZSBhcmUgcGh5c2ljYWwgUENJIEV4cHJlc3MgYWRhcHRlciBkcml2ZXJzLCBhbmQgSSAqZG9uJiMzOTt0KiBzZWUgYW55IGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHVzYiBnYWRnZXRgLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgJiMzNDtldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUgYWJzZW5jZSBvZiAqZGVkaWNhdGVkKiBlbXVsYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqZG9lcyogZXhpc3QgYW5kIGNhbiB0aGVvcmV0aWNhbGx5IGluamVjdCBQQ0kgY29uZmlnIHNwYWNlIGFuZCBCQVJzLCB0aHVzIHBvdGVudGlhbGx5IG1ha2luZyBQQ0kgZHJpdmVycyByZWFjaGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQmIzM5O3MgbGFuZ3VhZ2UgaXMgcHJlY2lzZS4gRG9lcyBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjb3VudCBhcyAmIzM0O3NvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb21wdD8gSXQmIzM5O3Mgbm90IHRoZSBzYW1lIGFzIGEgZGVkaWNhdGVkIGtlcm5lbCBtb2R1bGUgbGlrZSBgbWFjODAyMTFfaHdzaW1gLiBJbnN0ZWFkLCBpdCBpcyBhIGZlYXR1cmUgb2YgdGhlIGZ1enplciB1c2luZyBgc3l6X3BjaWAgb3Igc2ltaWxhci4gSSBjaGVjayBmb3IgYHN5el9wY2lgIGluIHRoZSBrZXJuZWwgYnV0IGl0JiMzOTtzIGEgcHNldWRvLXN5c2NhbGwuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlIGZ1enplciByZWxpZXMgb24gY3VzdG9tIFFFTVUgZGV2aWNlcyAoYHN5ei1wY2lgKS4gSXQmIzM5O3MgKm5vdCogc3RhbmRhcmQgUUVNVS4KClRoZSBwcm9tcHQgaGlnaGxpZ2h0cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgQmVjYXVzZSBpdCByZWxpZXMgb24gYSBjdXN0b20gUUVNVSBkZXZpY2UsIEkgY2FuJiMzOTt0IGNvbnNpZGVyIGl0IHN0YW5kYXJkLiBUaGUgdGV4dCYjMzk7cyBwaHJhc2luZyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHRoYXQgKmV2ZW4gd2l0aCogc29mdHdhcmUgZW11bGF0aW9uLCBpZiB0aGUgZHJpdmVyJiMzOTtzIGNvZGUgcGF0aHMgYXJlIHVuZmVhc2libGUsIHRoZW4gSSBtdXN0IG5vdCBkZWVtIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGZvciBhIHBoeXNpY2FsIE5JQyBkcml2ZXIsIFN5emthbGxlciAqd2lsbCogdHJ5IHRvIGZ1enogaXQuIElmIHRoZSBmdXp6ZXIgY2Fubm90IHJlYWNoIHRoZSBjb2RlLCBpdCYjMzk7cyBhIHdhc3RlZCByZXNvdXJjZS4KCkFmdGVyIGV4YW1pbmluZyB0aGUgcHJvdmlkZWQgcGF0Y2gsIEkgc2VlIGVycm9yLWhhbmRsaW5nIHBhdGhzOiBgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBgd3hfaW9fc2xvdF9yZXNldGAsIGB3eF9pb19yZXN1bWVgLCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgLCBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYCwgYHd4X3R4X3RpbWVvdXRgLCBhbmQgYHd4X2hhbmRsZV90eF9oYW5nYC4gVGhlc2UgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgaWYgdGhlIFBDSSBmdXp6ZXIgaW5qZWN0cyBlcnJvcnMgb3IgaWYgdGhlIG5ldGRldiBmdXp6ZXIgdHJpZ2dlcnMgYSBUWCB0aW1lb3V0LCBidXQgSSBhbSBsZXNzIGNlcnRhaW4uCgpgbmRvX3R4X3RpbWVvdXRgIGlzIHRoZSBuZXRkZXYgd2F0Y2hkb2csIGEgdGltZW91dCBzaXR1YXRpb24gdGhhdCBtYXkgYmUgdHJpZ2dlcmVkIGJ5IGEgbWlzc2luZyBvciBpbnZhbGlkIFRYIGRlc2NyaXB0b3IuIGB3eF9jaGVja19oYW5nX3N1YnRhc2tgIGFuZCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgIHJ1biB3aXRoaW4gYSB3b3JrcXVldWUuIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAgdXNlcyBQQ0kgQUVSLiBUbyBjaGVjayB0aGUgY29uZmlncyByZXF1aXJlZCwgSSBub3RlIGBDT05GSUdfTkdCRWAsIGBDT05GSUdfVFhHQkVgLCBgQ09ORklHX0xJQldYYCwgYW5kIGBDT05GSUdfUENJRUFFUmAuIGBOR0JFYCBhbmQgYFRYR0JFYCBhcmUgdGhlIGRyaXZlcnMsIGFuZCBgUENJYCBhbmQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBhcmUgZGVwZW5kZW5jaWVzLgoKSSYjMzk7ZCBuZWVkIGBGb2N1c1N5bWJvbHNgIGlmIGl0IHdlcmUgYFdvcnRoRnV6emluZz10cnVlYDogYHd4X2lvX2Vycm9yX2RldGVjdGVkYCwgYHd4X2lvX3Nsb3RfcmVzZXRgLCBgd3hfaW9fcmVzdW1lYCwgYHd4X2NoZWNrX2Vycl9zdWJ0YXNrYCwgYHd4X2NoZWNrX2hhbmdfc3VidGFza2AsIGB3eF90eF90aW1lb3V0YCwgYHd4X2hhbmRsZV90eF9oYW5nYCwgYHd4X3NvZnRfcXVpZXNjZWAsIGFuZCBgd3hfcHRwX3F1aWVzY2VgLgoKV2hpbGUgYHd4X3R4X3RpbWVvdXRgIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZywgSSBhbSBub3QgY29udmluY2VkIHRoYXQgdGhlIGVycm9yIGNvbmRpdGlvbnMgYXJlICplYXNpbHkqIHJlYWNoYWJsZS4KClRoZSBrZXkgaXMgaW4gdGhlICYjMzQ7ZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBQaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChsaWtlIHRoZXNlIGV0aGVybmV0IGNhcmRzKSBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRlZGljYXRlZCBzb2Z0d2FyZSBlbXVsYXRpb24uIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICpkb2VzKiBlbXVsYXRlIFBDSSBkZXZpY2VzIGJ1dCB0aGUgcHJvbXB0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiwgaXQgaXMgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYW5kIEkgbXVzdCBub3QgY29uc2lkZXIgaXQgYFdvcnRoRnV6emluZz10cnVlYC4KCkkgZG8gYSBkZWVwZXIgZGl2ZSBhbmQgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCB0byBmaW5kIGEgZHJpdmVyIGZvciBXYW5nWHVuIGhhcmR3YXJlIGVtdWxhdGlvbiwgYnV0IEkgZG8gbm90LgoKQmFzZWQgb24gdGhlIHByb21wdCBhbmQgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBXYW5nWHVuIGRyaXZlcnMgYXJlIG5vdCByZWFkaWx5IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FuZ3h1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc9MTg3PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoxODg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xODktc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgJiM0Mzs9IHZpYS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSAmIzQzOz0gd2FuZ3h1bi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICYjNDM7PSB3aXpuZXQvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozODpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTc5LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6OTY6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDQyPXN0YXRpYyBpbnQgcGNpX3F1aXJrX2xvb25nc29uX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjItICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MDYzOnN0YXRpYyBpbnQgIHBjaV9xdWlya193YW5neHVuX25pY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19lbmFibGVkIHtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVx0LyogV2FuZ3h1biBuaWNzICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0Olx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDUtXHR7IDAgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIEZ1enppbmcgRmVhc2liaWxpdHkgZm9yIGEgSGFyZHdhcmUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBmdXp6aW5nIGl0IGlzbiYjMzk7dCBnb2luZyB0byBiZSBwb3NzaWJsZS4gSXQmIzM5O3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgaXQgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgY29tcG9uZW50cy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtObyBlbXVsYXRpb24sJiMzNDsgYmVjYXVzZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgb3IgUUVNVSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBoYXJkd2FyZS4gU28sIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRyeWluZyB0byByZWFjaCB0aGF0IGRyaXZlciBpbiBhIHZpcnR1YWwgc2V0dGluZyBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuCgpCdXQgaG9sZCBvbi4uLiBpcyB0aGF0ICpyZWFsbHkqIHRoZSBjYXNlPyBTeXprYWxsZXIgaXMga25vd24gZm9yIGl0cyBhYmlsaXR5IHRvIHB1c2ggdGhlIGJvdW5kYXJpZXMgb2Yga2VybmVsIGZ1enppbmcuIENvdWxkIGl0ICphY3R1YWxseSogZnV6eiB0aGlzIGhhcmR3YXJlIGRyaXZlciwgcGVyaGFwcyBpbiBzb21lIHN1cnByaXNpbmcgd2F5PyBMZXQgbWUgY2hlY2sgdGhlIFN5emthbGxlciBkYXNoYm9hcmQuIFRoZSBkYXNoYm9hcmQmIzM5O3MgbXkgZmlyc3Qgc3RvcC4gQXJlIHRoZXJlIGFueSByZXBvcnRlZCBidWdzIHJlbGF0ZWQgdG8gZHJpdmVycyBsaWtlIGB0eGdiZWAgb3IgYG5nYmVgPyBFdmVuIGEgc2luZ2xlIGJ1ZyB3b3VsZCBtYWtlIG1lIHJlY29uc2lkZXIgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24uCgpEYW1uIGl0LCBubyBpbnRlcm5ldC4gT2theSwgcGxhbiBCLiBJZiBJIGRvbiYjMzk7dCBoYXZlIGFjY2VzcyB0byB0aGUgZGFzaGJvYXJkLCBJIHN0aWxsIGhhdmUgYGdyZXBwZXJgLiBJIGNhbiB1c2UgdGhhdCB0byBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyLXJlbGF0ZWQgY29tbWVudHMgb3IgYW55dGhpbmcgaW4gdGhlIGRyaXZlciBzb3VyY2UgY29kZSBpdHNlbGYuIFRoYXQgbWlnaHQgaW5kaWNhdGUgaWYgc29tZW9uZSBoYXMgYXR0ZW1wdGVkIG9yIGF0IGxlYXN0IGNvbnNpZGVyZWQgZnV6emluZyBpdCB3aXRoIFN5emthbGxlciwgd2hpY2ggbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueXRoaW5nIHRoYXQgY291bGQgcG9pbnQgdG8gU3l6a2FsbGVyIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCBgZ3JlcHBlcmAgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFdhbmdYdW4gTklDIERyaXZlcioqCgpPa2F5LCBubyBkaXJlY3QgbWVudGlvbnMgb2Ygc3l6a2FsbGVyIGluIHRoZSBjb2RlIGl0c2VsZi4gV2FpdCwgdGhlIGF1dGhvciBpcyBqdXN0IHRoZSBwYXRjaCB0cmlhZ2VyLCBub3QgdGhlIG9yaWdpbmFsIGF1dGhvci4gSG1tLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIHBvdGVudGlhbGx5IGZ1enogUENJIGRyaXZlcnMgZW5vdWdoIHRvIHRyaWdnZXIgdGhpcy4gQ291bGQgaXQgZXZlbiBnZXQgdG8gdGhlIGBwcm9iZWAgZnVuY3Rpb24/IEFuZCBldmVuIGlmIGl0IGRpZCwgY291bGQgaXQgYWN0dWFsbHkgaGl0IGB3eF90eF90aW1lb3V0YCBvciBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYD8gTGV0JiMzOTtzIHNlZS4KClJpZ2h0LCBgd3hfdHhfdGltZW91dGAgZ2V0cyBjYWxsZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZywgYSB0aW1lb3V0IGNhdXNlZCBieSBhIHN0b3BwZWQgVFggcXVldWUuIFRvIGhpdCB0aGF0LCB0aGUgZGV2aWNlIHdvdWxkIG5lZWQgdG8gYmUgcHJvYmVkIHN1Y2Nlc3NmdWxseSwgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldiwgYnJvdWdodCB1cCB3aXRoIGBuZG9fb3BlbmAsIGFuZCBhIHBhY2tldCB3b3VsZCBoYXZlIHRvIGJlIHRyYW5zbWl0dGVkIHdpdGggYG5kb19zdGFydF94bWl0YCwgdGhlbiB0aGUgcXVldWUgaGFzIHRvIHN0b3AsIGFuZCB0aGVuIG5vdCBnZXQgd29rZW4gdXAuIEEgcHJldHR5IGxvbmcgY2hhaW4gdG8gc2V0IHVwLgoKSSBrbm93IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICpjYW4qIHNvbWV0aW1lcyBnZXQgcGFzdCBgcHJvYmVgIGJ5IGd1ZXNzaW5nIE1NSU8gcmVhZHMgY29ycmVjdGx5LCBidXQgaXQmIzM5O3MgcmVhbGx5IHRvdWdoIHdpdGggY29tcGxleCBOSUNzLiBIb3dldmVyLCB3YWl0ISBUaGUgcHJvbXB0IHNheXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdhbmdYdW4gaXMgYSAqcGh5c2ljYWwqIE5JQy4gVGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdC4gSXQmIzM5O3MganVzdCBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCYjMzk7cyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgd2l0aCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gcHJlc2VudCwgYW5kIHRoZXJlZm9yZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBzcGVsbCB0aGF0IG91dCBjbGVhcmx5IGluIHRoZSBleHBsYW5hdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrLiBJcyBgbGlid3hgIG1heWJlIHVzZWQgYnkgc29tZSB2aXJ0dWFsIGRyaXZlciwgc29tZSBraW5kIG9mIHNvZnR3YXJlIGRldmljZT8gSnVzdCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlid3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UWEdCRSkgJiM0Mzs9IHR4Z2JlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjc6bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy0xMi0jaW5jbHVkZSBcJiMzNDtuZ2JlX2V0aHRvb2wuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMS0jaW5jbHVkZSBcJiMzNDtuZ2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEzLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTU6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdmYuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ldGh0b29sLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTgtI2luY2x1ZGUgXCYjMzQ7bmdiZXZmX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTE0LSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy0xMS0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTExLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTMtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTEyLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoyMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjItI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O3R4Z2JldmZfdHlwZS5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTE5CgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY2lzaW9uOiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGlzIHNvbGVseSB1c2VkIGJ5IHRoZSBXYW5nWHVuIGhhcmR3YXJlIGRyaXZlcnM6IGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJIGhhdmUgdG8gZ28gYmFjayBhbmQgY29uc2lkZXIgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyAtIGFuZCB0aGUgY3JpdGVyaWEgc3BlY2lmaWNhbGx5IGluY2x1ZGUgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7CgpHaXZlbiB0aGVzZSBkcml2ZXJzJiMzOTsgdmVyeSBuYXR1cmUgYXMgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgdGhleSAqY2Fubm90KiBiZSBydW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gV2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIGhlcmUuIFRoaXMgaXMgYSBkaXJlY3QgbWF0Y2ggdG8gdGhlIHJ1bGUuIFRoZXJlZm9yZSwgYXNzaWduaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEkgd2lsbCBub3cgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIGFuZCBhZGQgYSBjbGVhciBhbmQgY29uY2lzZSByZWFzb24gZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6MzguMDM0Mjk4NDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjY0MDkzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCBQQ0kgRXhwcmVzcyBuZXR3b3JrIGNhcmRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlIGRldmljZXMgaW4gUUVNVSBvciB0aGUga2VybmVsLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MDozOC4wMzQzMDY5MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MTMwMjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMTIyZWY2YjdiZWVjOWUxNTFjMDc0MjExMTlmODMyOTVhNDE2MDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbkBAIC00LDUgKzQsNSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuIFxcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXFxuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0cGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhcm4od3gsIFxcXCJSZXNldCBhZGFwdGVyLlxcXFxuXFxcIik7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xcbitcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XFxuK1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4LVxcdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfcmVzZXRfd3FfJXhcXFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDEsIHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cXHUwMDNlcGRldikpO1xcbitcXHRpZiAoIXd4LVxcdTAwM2VyZXNldF93cSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFxcdTAwMjZ3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcXG4rXFx0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXFx1MDAzZW1hc2spO1xcbitcXHR1MzIgaSwgajtcXG4rXFxuK1xcdGlmICghd3gtXFx1MDAzZW51bV92ZnMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcXG4rXFx0XFx0XFx0dTMyIGgsIHQ7XFxuK1xcbitcXHRcXHRcXHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXHRcXHRcXHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGggIT0gdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcXG4rXFx0XFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXFxuK1xcdFxcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXFxuK1xcdFxcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxcbitcXHRcXHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcXFxuXFxcIik7XFxuK1xcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xcbitcXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHUxNiB2aWQsIHBjaV9jbWQ7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZpZCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXFx1MDAyNnBjaV9jbWQpO1xcbitcXG4rXFx0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xcbitcXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9XWF9FUlJfSF9cXG4rI2RlZmluZSBfV1hfRVJSX0hfXFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xcbitcXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuIFxcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXFx1MDAzZW5ldGRldiwgcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xcbitcXG4rXFx0aGVhZCA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHRhaWwgPSByaW5nLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFxuK1xcdHJldHVybiAoKGhlYWQgXFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXFx1MDAzZWNvdW50KSAtIGhlYWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XFxuK1xcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XFxuK1xcdHUzMiB0eF9kb25lID0gcmluZy1cXHUwMDNlc3RhdHMucGFja2V0cztcXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFxcdTAwMjZcXHUwMDI2IHR4X3BlbmRpbmcpXFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXFxuK1xcdFxcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXFxuK1xcdHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcXG4rXFx0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xcbitcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXFxuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXFxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXFxuIFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcXG4gXFx0XFx0XFx0XFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XFxuIFxcbitcXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xcbitcXHRcXHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcXG4gXFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFxcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcXG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuIFxcdFxcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XFxuIFxcbkBAIC0zMTYxLDcgKzMxOTgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXG4gb3V0OlxcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcXG4gXFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXFx1MDAzZXBkZXYpO1xcbitcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4rXFx0d3hfcHRwX3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XFxuK1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLmEyNWViNmFlZDU2NjBmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwyNCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKVxcbitcXHRcXHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHd4LVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xcbitcXG4gLyoqXFxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggYzdiZWZlNGNkZmU5MDguLmMyZWRiNzQ4ODFmMmI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcXG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcXG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcXG4gXFxuKyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxcXFxuK1xcdFxcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXFxuKyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxcXFxuK1xcdFxcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXFxuK1xcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcXG4gI2RlZmluZSBXWF9QWF9SUl9CQUgoX2kpICAgICAgICAgICAgICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSlcXG5AQCAtMTAzOSw2ICsxMDQ0LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcXG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcXG4gXFx0dTY0IHJlc3RhcnRfcXVldWU7XFxuIFxcdHU2NCB0eF9idXN5O1xcbitcXHR1MzIgdHhfZG9uZV9vbGQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xcbkBAIC0xMDU0LDYgKzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxcXFxuIFxcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXFx1MDAzZW5leHQpXFxuIFxcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xcbitcXHRXWF9UWF9ERVRFQ1RfSEFORyxcXG4rXFx0V1hfSEFOR19DSEVDS19BUk1FRCxcXG4rXFx0V1hfUklOR19TVEFURV9OQklUU1xcbit9O1xcbitcXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcXG4gXFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXFxuQEAgLTEwNzMsNiArMTA4NSw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcXG4gXFx0XFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XFxuIFxcdFxcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xcbiBcXHR9O1xcbitcXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdHU4IF9faW9tZW0gKnRhaWw7XFxuIFxcdGRtYV9hZGRyX3QgZG1hOyAgICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyBvZiBkZXNjcmlwdG9yIHJpbmcgKi9cXG4gXFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xcbkBAIC0xMjA4LDYgKzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHtcXG4gXFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXFxuIFxcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcXG4gXFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcXG4rXFx0V1hfU1RBVEVfRElTQUJMRUQsXFxuK1xcdFdYX1NUQVRFX1JFU19GUkVFRCxcXG4gXFx0V1hfU1RBVEVfTkJJVFNcXHRcXHQvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEyNzQsNiArMTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xcbiBcXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXFxuIFxcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcXG4gXFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcXG4rXFx0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxcbitcXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcXG4gXFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEzOTQsNyArMTQxMSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xcbiBcXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xcbi1cXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbitcXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4rXFx0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XFxuIFxcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG5AQCAtMTQyMiw2ICsxNDQwLDggQEAgc3RydWN0IHd4IHtcXG4gXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XFxuIFxcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cXG4gfTtcXG4gXFxuQEAgLTE1MDQsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXFxuIFxcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2VycihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbi1cXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcXFxcbitcXHRkZXZfd2FybihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuaW5kZXggYjJlMTkxOTgyODAzMjYuLjE5NjBmNzE1NDE1MWRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbkBAIC01OSw3ICs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcXG4gXFx0a3ZmcmVlKHRlbXBfcmluZyk7XFxuIFxcbi1cXHR3eF9jb25maWd1cmUod3gpO1xcbiBcXHRuZ2JlX3VwKHd4KTtcXG4gXFxuIGNsZWFyX3Jlc2V0OlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5pbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcXG4gXFx0eyB9XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XFxuK1xcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuK1xcdHd4X2ZyZWVfaXJxKHd4KTtcXG4rXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xcbiBcXHR3eC1cXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xcbitcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XFxuIFxcdHNldF9iaXQoMCwgXFx1MDAyNnd4LVxcdTAwM2Vmd2RfYml0bWFzayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XFxuIFxcbiBcXHR3eF91cGRhdGVfc3RhdHMod3gpO1xcbitcXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xcbitcXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XFxuIFxcbiBcXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcXG4gfVxcbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbiBcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuIFxcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5hZGRyKTtcXG4gXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbiB9XFxuIFxcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHR3eF9wdHBfaW5pdCh3eCk7XFxuIFxcbi1cXHRuZ2JlX3VwKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX2Rpc19waHk6XFxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3hfY29uZmlndXJlKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXFxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdG5nYmVfZG93bih3eCk7XFxuIFxcdHd4X2ZyZWVfaXJxKHd4KTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcXG4gXFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdCAqL1xcbiBcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRuZ2JlX2Nsb3NlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuIFxcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbitcXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdG5nYmVfZG93bih3eCk7XFxuK1xcdG5nYmVfdXAod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbitcXHRcXHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxcbiBcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXFxuK1xcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbiBcXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XFxuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbkBAIC05Myw2ICs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTA2LDYgKzExMSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEyMyw2ICsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xcbiBcXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMTQ0LDYgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbkBAIC0xODcsNiArMTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4gXFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XFxuIFxcdGlmIChlcnIgIT0gMClcXG4gXFx0XFx0d3hfZXJyKHd4LCBcXFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK1xcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNDA4LDYgKzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XFxuIFxcdHd4LVxcdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdHR4Z2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NDQsNyArNTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTYwNiwxMSArNjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuIH1cXG4gXFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbiBcXHRcXHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0eGdiZV9yZXNldCh3eCk7XFxuQEAgLTY1NCw2ICs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzQ1LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xcbiBcXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdG5ldGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFxcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcXG4gXFxuIFxcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xcbkBAIC04MTQsNiArODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXG4rXFx0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xcbitcXG4gXFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTg4OSw2ICs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfcGh5O1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFxuQEAgLTkxNiw2ICs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtOTQ4LDYgKzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gXFxuIFxcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbiBcXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXFxuIFxcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbiBcXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXFxcXG4gXFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUwOjM4Ljk4NjM3MjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTcxMjAwOTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMTEyMmVmNmI3YmVlYzllMTUxYzA3NDIxMTE5ZjgzMjk1YTQxNjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMjo1MDozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbisgKi9cbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuK1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbitcdFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuK1xuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4rXHRcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmVzdWx0ID0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK1x0fVxuK1xuK1x0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XG4rXG4rXHRyZXR1cm4gcmVzdWx0O1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuK1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbitcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiJXNfcmVzZXRfd3FfJXhcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4rXHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuK1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuK1x0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbitcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuK1x0dTMyIGksIGo7XG4rXG4rXHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcbitcdFx0XHR1MzIgaCwgdDtcbitcbitcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXG4rXHRcdFx0aWYgKGggIT0gdClcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4rXHRcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuK1x0XHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xuK1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbitcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbitcdFx0ICovXG4rXHRcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCIpO1xuK1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4rXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1dYX0VSUl9IX1xuKyNkZWZpbmUgX1dYX0VSUl9IX1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4rXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gfVxuIFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCJ3eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuK1xuK1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuK1xuK1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbitcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4rXHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbitcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4rXHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4rXHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbitcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuK1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuK1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbitcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4rXHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyArMzE0OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjEsNyArMzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuK1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4rXHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuK1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4rXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBIWjtcbitcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICs4NDUsMjQgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcbiBcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuK1x0XHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbitcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHR9XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbitcbiAvKipcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTAzOSw2ICsxMDQ0LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICsxMDYwLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzMsNiArMTA4NSw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICsxMjIxLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICsxMjg5LDggQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgKzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuIFx0a3ZmcmVlKHRlbXBfcmluZyk7XG4gXG4tXHR3eF9jb25maWd1cmUod3gpO1xuIFx0bmdiZV91cCh3eCk7XG4gXG4gY2xlYXJfcmVzZXQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5pbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9ody5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X21ieC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3NyaW92LmhcIlxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbit9XG4rXG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuK1x0d3gtXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTQwOCw2ICs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiB7XG4gXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XG4gXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbitcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZXJyX2Rpc19waHk6XG5AQCAtNTAzLDYgKzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0d3hfY29uZmlndXJlKHd4KTtcbitcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuK31cbitcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuIFxuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG5AQCAtNjA2LDExICs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcbitcdG5nYmVfZG93bih3eCk7XG4rXHRuZ2JlX3VwKHd4KTtcbitcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbit9XG4rXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuK1x0XHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IG5nYmVfZHJpdmVyX25hbWU7XG4gXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuZ2JlX25ldGRldl9vcHM7XG4rXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XG5AQCAtNzk2LDYgKzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODEyLDYgKzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgKzkzNSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiArOTYzLDcgQEAgc3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIFx0ZGV2aWNlX3dha2V1cF9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4rXHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgKzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgKzExMSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcIkhhcmR3YXJlIEVycm9yOiAlZFxcblwiLCBlcnIpO1xuQEAgLTIyNCw2ICsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiArMzA4LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbitcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK31cbitcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgKzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgKzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSArNjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgKzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xuIFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XG4rXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRuZXRkZXYtXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFx1MDAyNnR4Z2JlX3VkcF90dW5uZWxzO1xuIFxuIFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgKzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICsxMDA2LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiArMTAxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6MzguOTg2Mzc1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjczMzk3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBXYW5nWHVuIERyaXZlciBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgV2FuZ1h1biAobmdiZS90eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqdGVzdCogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/IFRoZXNlIGFyZSwgYWZ0ZXIgYWxsLCBoYXJkd2FyZSBkcml2ZXJzIGZvciBHaWdhYml0IFBDSSBFeHByZXNzIG5ldHdvcmsgY2FyZHMsIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSBpcyB1c3VhbGx5IGEgbm8tZ28gaW4gdmlydHVhbGl6YXRpb24gdW5sZXNzIGVtdWxhdGVkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VIGV2ZW4gKmVtdWxhdGVzKiBhIFdhbmdYdW4gY2FyZC4gSSBkb24ndCB0aGluayBpdCBkb2VzLCBidXQgSSdsbCBkb3VibGUtY2hlY2suIEknbGwgc2VhcmNoIGZvciBpdCwganVzdCB0byBiZSBzdXJlLiBJJ20gdGhpbmtpbmcsIGlmIFFFTVUgZG9lc24ndCBvZmZlciBlbXVsYXRpb24sIHdlJ3JlIGxpa2VseSBvdXQgb2YgbHVjay5cblxuVGhlbiwgbXkgYnJhaW4ganVtcHMgdG8gZ2VuZXJpYyBtZWNoYW5pc21zLiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhIFBDSSBkZXZpY2UuIElmIHRoYXQgUENJIGRldmljZSBpc24ndCBwcmVzZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLCBhbmQgdGhlIG5ldGRldiBuZXZlciByZWdpc3RlcnMuIFRoaXMgc2VlbXMgbGlrZSBhIGRlYWQgZW5kIHVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuXG5cblN5emthbGxlciBjYW4gdXNlIGB2aGNpYCwgYGR1bW15YCwgb3IgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHRob3NlIGFyZSBub3QgUENJIGVtdWxhdG9ycy4gV2FpdCwgdGhlcmUgYXJlIHNvbWUgYHN5el9wY2lfLi4uYCBjYWxscyBpbiBzeXprYWxsZXIuIEJ1dCB0aGF0IG1pZ2h0IGJlIGxpbWl0ZWQgb3IgbWF5YmUgbm90IGV2ZW4gYXBwbHkuIFRoZXJlJ3MgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIG9yIGl0IHVzZXMgYHZoY2lgIGZvciBVU0IuIEZvciBQQ0ksIHRoZXJlJ3Mgbm8gZ2VuZXJpYyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIHVwc3RyZWFtIGtlcm5lbCB0aGF0IGFsbG93cyBhcmJpdHJhcnkgUENJIGRyaXZlciBwcm9iaW5nLCBleGNlcHQgbWF5YmUgdGhyb3VnaCBzb21lIHNwZWNpZmljIGZ1enppbmcgaGFybmVzc2VzLiBXYWl0LCBzeXprYWxsZXIgKmRpZCogYWRkIFBDSSBmdXp6aW5nIHN1cHBvcnQgcmVjZW50bHkhXG5cbk9rYXksICp0aGF0J3MqIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIFBDSSBmdXp6aW5nIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIHBvdGVudGlhbGx5IGhpdCB0aGlzIFdhbmdYdW4gZHJpdmVyLiBFdmVuIGlmIGl0ICppcyogZW5hYmxlZCwgc3l6a2FsbGVyIGNhbiBpbmplY3QgUENJIGRldmljZXMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgZHJpdmVyIGlzIHNldCBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5BaCwgYnV0IHRoZW4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiXG5cblNvLCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBpcyB0aGlzIFdhbmdYdW4gZHJpdmVyIHJlYWNoYWJsZSBpbiBRRU1VPyBVbmxlc3MgUUVNVSBlbXVsYXRlcyBpdCwgdGhlIGFuc3dlciBpcyBuby4gSSdsbCBzZWFyY2ggZm9yIFwibmdiZVwiIG9yIFwidHhnYmVcIiBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdyZXBwZXJgIGluIHRoZSBgdG9vbHMvYCBhbmQgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3JpZXMgdG8gY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24uIFNpbmNlIHRoaXMgaXMgYSBwdXJlIGhhcmR3YXJlIGRyaXZlciwgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCBpdCdzIG5vdCByZWFjaGFibGUuIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIGVtdWxhdGUgUENJIGNvbmZpZyBzcGFjZSBhbmQgQkFScywgYnV0IGl0J3Mgbm90IGdlbmVyaWMsIGFuZCBzeXprYWxsZXIgdXNlcyBlaXRoZXIgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW4gUUVNVSAoZS5nLiBgaXZzaG1lbWAgb3IgYSBjdXN0b20gYHN5ei1wY2lgIGRldmljZSkgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgdGhpcyB0eXBlIG9mIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIHdpbGwgbWFrZSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSW4gY29uY2x1c2lvbiwgYmVjYXVzZSBpdCdzIGEgcHVyZSBoYXJkd2FyZSBkcml2ZXIgYW5kIHRoZXJlJ3Mgbm8gZW11bGF0aW9uLCB0aGUgYW5zd2VyIGlzLCBpdCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJ2xsIHZlcmlmeSB0aGUgbGFjayBvZiBlbXVsYXRpb24gYW5kIHRoZW4gdGhlIGNvbmNsdXNpb24gaXMgdGhpcyBjaGFuZ2UgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjYxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6NTMuNjU5Nzc3NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMTU4MDE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZ2JlX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo2OTA6ICogbmdiZV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5MS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTUtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk2OiAqIG5nYmVfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gd3ggaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTctICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjk5LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzAwOnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzAxLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTk4Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTg0LVxcdC5pZF90YWJsZSA9IG5nYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg1OlxcdC5wcm9iZSAgICA9IG5nYmVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4Ni1cXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTA6NTcuMDcxMzY4OTg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc3Njk4NzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQQ0kgRHJpdmVyIEZ1enppbmcgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlN0YW5kYXJkIFBDSSBkcml2ZXIsIG5vdGhpbmcgc3BlY2lhbC5cIiBUaGVuIHRoZSBxdWVzdGlvbiBoaXRzOiBpcyBQQ0kgZnV6emluZyBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyPyBUaGUgZG9jdW1lbnRhdGlvbiBtZW50aW9ucyBgc3l6X3BjaWAgYW5kIGBzeXpfcGNpdmZgLCBzbyB5ZXMsICp0ZWNobmljYWxseSogaXQgaXMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBkb2VzIHRoYXQgbWVhbiB3ZSBuZWVkIHRvIGZ1enogKmFsbCogUENJIGRyaXZlcnM/IFRoYXQgZmVlbHMgbGlrZSBhIHJhYmJpdCBob2xlLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBmb3IgdW5yZWFjaGFibGUgY29kZSwgcGFydGljdWxhcmx5IHN0dWZmIHRoYXQncyBpbXBvc3NpYmxlIHRvIGhpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBQQ0kgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgbmV0d29yayBjYXJkcyBvciBHUFVzLCBmYWxsIGludG8gdGhhdCB1bnJlYWNoYWJsZSBjYXRlZ29yeSB1bmxlc3MgdGhlcmUncyBzb21lICp2ZXJ5KiBzcGVjaWZpYyBlbXVsYXRpb24gaGFwcGVuaW5nLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIgdGhhdCBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gYWNjZXNzZXMsIHdoaWNoIGVmZmVjdGl2ZWx5IGVtdWxhdGVzIGFyYml0cmFyeSBQQ0kgZGV2aWNlcy4gT2theSwgc28gc3l6a2FsbGVyICpjYW4qIGhpdCB0aGVzZSwgYnV0IGRvZXMgaXQgd29yayBmb3IgKmFsbCogUENJIGRyaXZlcnM/XG5cbkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4cGxpY2l0IGluc3RydWN0aW9ucyBhYm91dCBQQ0kgZHJpdmVycy4gQWgsIGhlcmUgd2UgYXJlOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgU28gaWYgc3l6a2FsbGVyICpjYW4qIGZ1enogUENJIGRyaXZlcnMsIHdoaWNoIGl0IGNhbiwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZSwgcmlnaHQ/IEl0IHNvdW5kcyByZWFjaGFibGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGlzIGNvbnNpZGVyZWQgXCJzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbnkgZGlzdGluY3Rpb24uIEFjdHVhbGx5LCBzeXprYWxsZXIgaGFzIGBzeXMvbGludXgvZGV2X3BjaS50eHRgLCBzbyBtYXliZSB0aGVyZSBpcyBhIGxpc3Qgb2YgZGV2aWNlcy4gSSdsbCBzZWFyY2ggZm9yIHNwZWNpZmljIGRyaXZlcnMgbGlrZSBgbmdiZWAgb3IgYHR4Z2JlYCB3aXRoaW4gYHN5cy9saW51eC9gIG9yIHNlZSBpZiB0aGVyZSBpcyBpbmZvcm1hdGlvbiBvbiBlbmFibGluZyBQQ0kgZnV6emluZyBnZW5lcmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTUxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjA0Ljg0ODM2Mzk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzIwNzE4NTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9wY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjA3Ljc4MDQ0OTcyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDA4NTIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2FuZ1h1biBEcml2ZXIgQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgYW5kIEknbSBzdGFydGluZyB0byB3b25kZXIsIGlzIHRoYXQgZXZlbiBpbiB0aGUgbWFpbmxpbmUga2VybmVsIHRyZWU/IEFuZCB0aGVuIGl0IGhpdHMgbWUsIGNhbiBJICphY3R1YWxseSogcmVhY2ggdGhlIFdhbmdYdW4gZHJpdmVyIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gTGV0J3Mgc2VlLi4uIG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBhbnkgV2FuZ1h1biBOZXR3b3JrIEludGVyZmFjZSBDYXJkcy4gSXQgY292ZXJzIGEgYnVuY2ggb2YgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIGUxMDAwZSwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIG9uZXMuXG5cbkFuZCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbid0IGFueXRoaW5nIGxpa2UgYSBzb2Z0d2FyZS1lbXVsYXRlZCwgZ2VuZXJpYyBXYW5nWHVuIGRldmljZSBpbiB0aGUga2VybmVsIGVpdGhlciwgbGlrZSB0aGUgYGR1bW15X2hjZGAgb3IgYGkyYy1zdHViYCBtb2R1bGVzIGZvciBVU0IgYW5kIEkyQywgcmVzcGVjdGl2ZWx5LiBTbyBpZiBJJ20gcnVubmluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoaXMgZHJpdmVyIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgZW11bGF0aW9uIG9mIFdhbmdYdW4gYXQgYWxsLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTE6MTMuMjIxMzA5MTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODE1MDIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjA6ICAgd2FuZ3h1bi90eGdiZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYzOiAgIHdhbmd4dW4vbmdiZXZmXFxuLS1cXG5NQUlOVEFJTkVSUz0yOTAwNj1XOlxcdGh0dHBzOi8vd3d3Lm5ldC1zd2lmdC5jb21cXG5NQUlOVEFJTkVSUzoyOTAwNzpGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcXG5NQUlOVEFJTkVSUzoyOTAwODpGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXFxuTUFJTlRBSU5FUlMtMjkwMDktRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtd3guY1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgKz0gdmlhL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSArPSB3YW5neHVuL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICs9IHdpem5ldC9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MToxNi4xMDI4MjQwNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY1ODQ0MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBXYW5nWHVuIE5JQyBDb2RlIGluIGEgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgV2FuZ1h1biBjb2RlIGFuZCB3aGV0aGVyIGl0J3Mgd29ydGggZnV6emluZy4gSW5pdGlhbGx5LCBJIHJlbWVtYmVyZWQgYHN5emthbGxlcmAgaGFzIGEgUENJIGZ1enplciwgYnV0IHRoZW4gSSByZWNhbGxlZCBpdCByZWxpZXMgb24gcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAsIHdoaWNoIGFyZSBub3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBhbmQgdGh1cywgbm90IGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdG8gcmVhY2ggcGh5c2ljYWwgaGFyZHdhcmUuIFRoZSBkb2N1bWVudGF0aW9uIHJhaXNlcyBhIGtleSBwb2ludDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6LXdvcnRoeS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgaWYgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gYmUgY29uc2lkZXJlZCBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIgaW4gdGhpcyBjYXNlPyBJIGtub3cgaXQgdXNlcyB0aGluZ3MgbGlrZSBgdmZpb2Agb3IgYSBjdXN0b20gUUVNVSBkZXZpY2UgKGBzeXotcGNpYCkuIEJ1dCBkb2VzIGl0IGdlbmVyaWNhbGx5IGVtdWxhdGUgKmFueSogUENJIGRldmljZSB0byB0aGUgcG9pbnQgd2hlcmUgdGhpcyBXYW5nWHVuIGNvZGUgd291bGQgYmUgcmVhY2hhYmxlPyBUaGUgcHJvbXB0IHNheXMsIHNwZWNpZmljYWxseSwgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IHNheXMgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGlzIHByb21wdHMgbWUgdG8gY2hlY2suXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSAqdW5yZWFjaGFibGUqIGluIFFFTVUvR0NFLiBXYW5nWHVuIGlzIGEgcGh5c2ljYWwgTklDLCBhbmQgdGhlcmUgaXMgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZm9yIGl0LiBBbHNvLCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgYG1hYzgwMjExX2h3c2ltYCBvciBgdXNiIGdhZGdldGAgZm9yIGl0IGluIHRoZSBrZXJuZWwuIFNvLCByaWdodCBub3cgaXQgc2VlbXMgdW5yZWFjaGFibGUuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLlxuXG5CdXQgd2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHRydWx5IGdlbmVyaWMgUENJIGZ1enplciB0aGF0IGNhbiBlbXVsYXRlICphbnkqIFBDSSBkZXZpY2U/IFllcywgaXQgdXNlcyBpdHMgY3VzdG9tIFFFTVUgZGV2aWNlLCB3aGljaCBpbnRlcmNlcHRzIGNvbmZpZyBzcGFjZSBhbmQgQkFScy4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgd2hhdCBjYW5ub3QgYmUgcmVhY2hlZC4gTXkgaW50ZXJwcmV0YXRpb24gaXMgcmVpbmZvcmNlZCBieSB0aGUgd29yZGluZzogaWYgKmV2ZXJ5dGhpbmcqIHdhcyByZWFjaGFibGUsIHRoZSBwcm9tcHQgd291bGRuJ3QgaGF2ZSB0aGlzIGV4cGxpY2l0IHJlc3RyaWN0aW9uLiBUaGUgbWVudGlvbiBvZiBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiBpbXBsaWVzIHRoYXQgKnNwZWNpZmljKiBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlbid0IHJlYWRpbHkgZW11bGF0ZWQgYXJlIGV4Y2x1ZGVkLlxuXG5TbyBsZXQgbWUgY2hlY2sgYWdhaW4uXG5cbkkgY29uZmlybWVkIHRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNgLiBJdCdzIGEgbGlicmFyeSB1c2VkIGJ5IFdhbmdYdW4gZXRoZXJuZXQgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgV2FuZ1h1biBQQ0llIE5JQ3MuIFNpbmNlIHRoZXJlJ3Mgbm8gV2FuZ1h1biBOSUMgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUgYW5kIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLCBpdCBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIGNvbmZpZGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTE6MjguNzYxMjczNTc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIyNDkzMDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbmd4dW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MToyOS4zNjM1Mzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTk3OTY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBmb3IgV2FuZ1h1biBlbXVsYXRpb24gY29kZSwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBpbiBgdG9vbHMvYC4gVGhhdCdzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCB0b29scyBpcyBvZnRlbiBmb3IgZ2VuZXJhbCB1dGlsaXR5IHN0dWZmLiBBbHJpZ2h0LCBsZXQncyBwaXZvdCB0byB0aGUgZHJpdmVycyBkaXJlY3RvcnkuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLi4uIG9mIGNvdXJzZSwgdGhhdCdzIHdoZXJlIHRoZSAqYWN0dWFsKiBkcml2ZXJzIHJlc2lkZS4gQnV0IHRoYXQgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIGl0ICplbXVsYXRlcyogdGhlIGhhcmR3YXJlLiBIbW1tLCBub3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgdmlydHVhbCBkZXZpY2UgZHJpdmVyIHRoYXQgKmVtdWxhdGVzKiBXYW5nWHVuIHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIHNvbWV0aGluZyBhYnN0cmFjdGluZyB0aGUgaGFyZHdhcmUgb3IgcHJldGVuZGluZyB0byBiZSBpdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGBLY29uZmlnYCBmaWxlIGluIHRoYXQgc2FtZSBkaXJlY3RvcnksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgLCBpcyBteSBiZXN0IGJldCBmb3IgdW5jb3ZlcmluZyB3aGV0aGVyIGFueSB2aXJ0dWFsIGRldmljZSBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTozMy4yODMzMzk4OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXYW5neHVuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuZ3h1biBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTM6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNDpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgV2FuZ3h1bihSKSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1dBTkdYVU5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIExJQldYXFxuICAyMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjQ6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBOR0JFXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICAzNTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgMzg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNDE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgVFhHQkVcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0OTpcXHRcXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuICA1MDpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICA1MTpcXHRcXHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxcbiAgNTI6XFx0XFx0c2VsZWN0IFNGUFxcbiAgNTM6XFx0XFx0c2VsZWN0IEdQSU9MSUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcXG4gIDU1OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgNTY6XFx0XFx0c2VsZWN0IExJQldYXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICA1OTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgNjI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXFxuICA2NjpcXHRcXG4gIDY3OlxcdGNvbmZpZyBUWEdCRVZGXFxuICA2ODpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgNjk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcXG4gIDc1OlxcdFxcdCAgV1g1WFhYLCBXWDVYWFhBTC5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDgwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgODM6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnIE5HQkVWRlxcbiAgODY6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgODk6XFx0XFx0c2VsZWN0IExJQldYXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCBuZ2JldmYuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA5NjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgOTk6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTozMy4yODM0NDAyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMTYxMDkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYSBEZWNpc2lvbiBvbiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlc2UgV2FuZ1h1biBuZXR3b3JrIGRyaXZlcnMgKGBuZ2JlYCwgYHR4Z2JlYCwgYHR4Z2JldmZgLCBgbmdiZXZmYCkgYXJlIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRjaCBhbmQgdGhlIHByb21wdCdzIGNyaXRlcmlhLiBUaGUga2V5IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gbWFrZSB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZS4gSW5pdGlhbGx5LCBJIGtub3cgdGhlc2UgYXJlIHBoeXNpY2FsIFBDSSBFeHByZXNzIGFkYXB0ZXIgZHJpdmVycywgYW5kIEkgKmRvbid0KiBzZWUgYW55IGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHVzYiBnYWRnZXRgLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgXCJldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiB0aGUgYWJzZW5jZSBvZiAqZGVkaWNhdGVkKiBlbXVsYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmRvZXMqIGV4aXN0IGFuZCBjYW4gdGhlb3JldGljYWxseSBpbmplY3QgUENJIGNvbmZpZyBzcGFjZSBhbmQgQkFScywgdGh1cyBwb3RlbnRpYWxseSBtYWtpbmcgUENJIGRyaXZlcnMgcmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgcHJvbXB0J3MgbGFuZ3VhZ2UgaXMgcHJlY2lzZS4gRG9lcyBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNvdW50IGFzIFwic29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIiBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0PyBJdCdzIG5vdCB0aGUgc2FtZSBhcyBhIGRlZGljYXRlZCBrZXJuZWwgbW9kdWxlIGxpa2UgYG1hYzgwMjExX2h3c2ltYC4gSW5zdGVhZCwgaXQgaXMgYSBmZWF0dXJlIG9mIHRoZSBmdXp6ZXIgdXNpbmcgYHN5el9wY2lgIG9yIHNpbWlsYXIuIEkgY2hlY2sgZm9yIGBzeXpfcGNpYCBpbiB0aGUga2VybmVsIGJ1dCBpdCdzIGEgcHNldWRvLXN5c2NhbGwuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGUgZnV6emVyIHJlbGllcyBvbiBjdXN0b20gUUVNVSBkZXZpY2VzIChgc3l6LXBjaWApLiBJdCdzICpub3QqIHN0YW5kYXJkIFFFTVUuXG5cblRoZSBwcm9tcHQgaGlnaGxpZ2h0cyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIgQmVjYXVzZSBpdCByZWxpZXMgb24gYSBjdXN0b20gUUVNVSBkZXZpY2UsIEkgY2FuJ3QgY29uc2lkZXIgaXQgc3RhbmRhcmQuIFRoZSB0ZXh0J3MgcGhyYXNpbmcgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB0aGF0ICpldmVuIHdpdGgqIHNvZnR3YXJlIGVtdWxhdGlvbiwgaWYgdGhlIGRyaXZlcidzIGNvZGUgcGF0aHMgYXJlIHVuZmVhc2libGUsIHRoZW4gSSBtdXN0IG5vdCBkZWVtIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZm9yIGEgcGh5c2ljYWwgTklDIGRyaXZlciwgU3l6a2FsbGVyICp3aWxsKiB0cnkgdG8gZnV6eiBpdC4gSWYgdGhlIGZ1enplciBjYW5ub3QgcmVhY2ggdGhlIGNvZGUsIGl0J3MgYSB3YXN0ZWQgcmVzb3VyY2UuXG5cbkFmdGVyIGV4YW1pbmluZyB0aGUgcHJvdmlkZWQgcGF0Y2gsIEkgc2VlIGVycm9yLWhhbmRsaW5nIHBhdGhzOiBgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBgd3hfaW9fc2xvdF9yZXNldGAsIGB3eF9pb19yZXN1bWVgLCBgd3hfY2hlY2tfZXJyX3N1YnRhc2tgLCBgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrYCwgYHd4X3R4X3RpbWVvdXRgLCBhbmQgYHd4X2hhbmRsZV90eF9oYW5nYC4gVGhlc2UgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgaWYgdGhlIFBDSSBmdXp6ZXIgaW5qZWN0cyBlcnJvcnMgb3IgaWYgdGhlIG5ldGRldiBmdXp6ZXIgdHJpZ2dlcnMgYSBUWCB0aW1lb3V0LCBidXQgSSBhbSBsZXNzIGNlcnRhaW4uXG5cbmBuZG9fdHhfdGltZW91dGAgaXMgdGhlIG5ldGRldiB3YXRjaGRvZywgYSB0aW1lb3V0IHNpdHVhdGlvbiB0aGF0IG1heSBiZSB0cmlnZ2VyZWQgYnkgYSBtaXNzaW5nIG9yIGludmFsaWQgVFggZGVzY3JpcHRvci4gYHd4X2NoZWNrX2hhbmdfc3VidGFza2AgYW5kIGB3eF9jaGVja19lcnJfc3VidGFza2AgcnVuIHdpdGhpbiBhIHdvcmtxdWV1ZS4gYHd4X2lvX2Vycm9yX2RldGVjdGVkYCB1c2VzIFBDSSBBRVIuIFRvIGNoZWNrIHRoZSBjb25maWdzIHJlcXVpcmVkLCBJIG5vdGUgYENPTkZJR19OR0JFYCwgYENPTkZJR19UWEdCRWAsIGBDT05GSUdfTElCV1hgLCBhbmQgYENPTkZJR19QQ0lFQUVSYC4gYE5HQkVgIGFuZCBgVFhHQkVgIGFyZSB0aGUgZHJpdmVycywgYW5kIGBQQ0lgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGFyZSBkZXBlbmRlbmNpZXMuXG5cbkknZCBuZWVkIGBGb2N1c1N5bWJvbHNgIGlmIGl0IHdlcmUgYFdvcnRoRnV6emluZz10cnVlYDogYHd4X2lvX2Vycm9yX2RldGVjdGVkYCwgYHd4X2lvX3Nsb3RfcmVzZXRgLCBgd3hfaW9fcmVzdW1lYCwgYHd4X2NoZWNrX2Vycl9zdWJ0YXNrYCwgYHd4X2NoZWNrX2hhbmdfc3VidGFza2AsIGB3eF90eF90aW1lb3V0YCwgYHd4X2hhbmRsZV90eF9oYW5nYCwgYHd4X3NvZnRfcXVpZXNjZWAsIGFuZCBgd3hfcHRwX3F1aWVzY2VgLlxuXG5XaGlsZSBgd3hfdHhfdGltZW91dGAgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nLCBJIGFtIG5vdCBjb252aW5jZWQgdGhhdCB0aGUgZXJyb3IgY29uZGl0aW9ucyBhcmUgKmVhc2lseSogcmVhY2hhYmxlLlxuXG5UaGUga2V5IGlzIGluIHRoZSBcImV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgUGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGVzZSBldGhlcm5ldCBjYXJkcykgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgc29mdHdhcmUgZW11bGF0aW9uLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyICpkb2VzKiBlbXVsYXRlIFBDSSBkZXZpY2VzIGJ1dCB0aGUgcHJvbXB0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiwgaXQgaXMgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYW5kIEkgbXVzdCBub3QgY29uc2lkZXIgaXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSBkbyBhIGRlZXBlciBkaXZlIGFuZCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHRvIGZpbmQgYSBkcml2ZXIgZm9yIFdhbmdYdW4gaGFyZHdhcmUgZW11bGF0aW9uLCBidXQgSSBkbyBub3QuXG5cbkJhc2VkIG9uIHRoZSBwcm9tcHQgYW5kIG15IHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBXYW5nWHVuIGRyaXZlcnMgYXJlIG5vdCByZWFkaWx5IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsXG5cbiIsIklucHV0VG9rZW5zIjoyNTMxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MTo1NS4zOTk1NTQ1MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA3OTkyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTE4Nz1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTg4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTg5LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfVklBKSArPSB2aWEvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ORVRfVkVORE9SX1dBTkdYVU4pICs9IHdhbmd4dW4vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19ORVRfVkVORE9SX1dJWk5FVCkgKz0gd2l6bmV0L1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA0Mj1zdGF0aWMgaW50IHBjaV9xdWlya19sb29uZ3Nvbl9hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjItICovXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTA2MzpzdGF0aWMgaW50ICBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTA2NC17XFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3NfZW5hYmxlZCB7XFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVxcdC8qIFdhbmd4dW4gbmljcyAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUyNDQ6XFx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQ1LVxcdHsgMCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUxOjU2LjgwMDM2MTU1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc2MDgxMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIEZ1enppbmcgRmVhc2liaWxpdHkgZm9yIGEgSGFyZHdhcmUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgZnV6emluZyBpdCBpc24ndCBnb2luZyB0byBiZSBwb3NzaWJsZS4gSXQncyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZSBjb21wb25lbnRzLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIk5vIGVtdWxhdGlvbixcIiBiZWNhdXNlIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBvciBRRU1VLCB3ZSdyZSBkZWFsaW5nIHdpdGggdmlydHVhbGl6ZWQgaGFyZHdhcmUuIFNvLCBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRyeWluZyB0byByZWFjaCB0aGF0IGRyaXZlciBpbiBhIHZpcnR1YWwgc2V0dGluZyBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuXG5cbkJ1dCBob2xkIG9uLi4uIGlzIHRoYXQgKnJlYWxseSogdGhlIGNhc2U/IFN5emthbGxlciBpcyBrbm93biBmb3IgaXRzIGFiaWxpdHkgdG8gcHVzaCB0aGUgYm91bmRhcmllcyBvZiBrZXJuZWwgZnV6emluZy4gQ291bGQgaXQgKmFjdHVhbGx5KiBmdXp6IHRoaXMgaGFyZHdhcmUgZHJpdmVyLCBwZXJoYXBzIGluIHNvbWUgc3VycHJpc2luZyB3YXk/IExldCBtZSBjaGVjayB0aGUgU3l6a2FsbGVyIGRhc2hib2FyZC4gVGhlIGRhc2hib2FyZCdzIG15IGZpcnN0IHN0b3AuIEFyZSB0aGVyZSBhbnkgcmVwb3J0ZWQgYnVncyByZWxhdGVkIHRvIGRyaXZlcnMgbGlrZSBgdHhnYmVgIG9yIGBuZ2JlYD8gRXZlbiBhIHNpbmdsZSBidWcgd291bGQgbWFrZSBtZSByZWNvbnNpZGVyIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uLlxuXG5EYW1uIGl0LCBubyBpbnRlcm5ldC4gT2theSwgcGxhbiBCLiBJZiBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBkYXNoYm9hcmQsIEkgc3RpbGwgaGF2ZSBgZ3JlcHBlcmAuIEkgY2FuIHVzZSB0aGF0IHRvIHNlZSBpZiBJIGNhbiBmaW5kIGFueSBTeXprYWxsZXItcmVsYXRlZCBjb21tZW50cyBvciBhbnl0aGluZyBpbiB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIGl0c2VsZi4gVGhhdCBtaWdodCBpbmRpY2F0ZSBpZiBzb21lb25lIGhhcyBhdHRlbXB0ZWQgb3IgYXQgbGVhc3QgY29uc2lkZXJlZCBmdXp6aW5nIGl0IHdpdGggU3l6a2FsbGVyLCB3aGljaCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMuIEknbGwgc2VhcmNoIGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIHBvaW50IHRvIFN5emthbGxlciBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCBgZ3JlcHBlcmAgdW5jb3ZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEyOjUyOjAxLjY3NjQ0NjYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NTczMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5elwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MDEuNzk5MTE2NjU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDEwNzQ3OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogV2FuZ1h1biBOSUMgRHJpdmVyKipcblxuT2theSwgbm8gZGlyZWN0IG1lbnRpb25zIG9mIHN5emthbGxlciBpbiB0aGUgY29kZSBpdHNlbGYuIFdhaXQsIHRoZSBhdXRob3IgaXMganVzdCB0aGUgcGF0Y2ggdHJpYWdlciwgbm90IHRoZSBvcmlnaW5hbCBhdXRob3IuIEhtbSwgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IFBDSSBkcml2ZXJzIGVub3VnaCB0byB0cmlnZ2VyIHRoaXMuIENvdWxkIGl0IGV2ZW4gZ2V0IHRvIHRoZSBgcHJvYmVgIGZ1bmN0aW9uPyBBbmQgZXZlbiBpZiBpdCBkaWQsIGNvdWxkIGl0IGFjdHVhbGx5IGhpdCBgd3hfdHhfdGltZW91dGAgb3IgYHd4X2NoZWNrX2hhbmdfc3VidGFza2A/IExldCdzIHNlZS5cblxuUmlnaHQsIGB3eF90eF90aW1lb3V0YCBnZXRzIGNhbGxlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nLCBhIHRpbWVvdXQgY2F1c2VkIGJ5IGEgc3RvcHBlZCBUWCBxdWV1ZS4gVG8gaGl0IHRoYXQsIHRoZSBkZXZpY2Ugd291bGQgbmVlZCB0byBiZSBwcm9iZWQgc3VjY2Vzc2Z1bGx5LCByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2LCBicm91Z2h0IHVwIHdpdGggYG5kb19vcGVuYCwgYW5kIGEgcGFja2V0IHdvdWxkIGhhdmUgdG8gYmUgdHJhbnNtaXR0ZWQgd2l0aCBgbmRvX3N0YXJ0X3htaXRgLCB0aGVuIHRoZSBxdWV1ZSBoYXMgdG8gc3RvcCwgYW5kIHRoZW4gbm90IGdldCB3b2tlbiB1cC4gQSBwcmV0dHkgbG9uZyBjaGFpbiB0byBzZXQgdXAuXG5cbkkga25vdyBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHNvbWV0aW1lcyBnZXQgcGFzdCBgcHJvYmVgIGJ5IGd1ZXNzaW5nIE1NSU8gcmVhZHMgY29ycmVjdGx5LCBidXQgaXQncyByZWFsbHkgdG91Z2ggd2l0aCBjb21wbGV4IE5JQ3MuIEhvd2V2ZXIsIHdhaXQhIFRoZSBwcm9tcHQgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQncyB0aGUga2V5LiBXYW5nWHVuIGlzIGEgKnBoeXNpY2FsKiBOSUMuIFRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciBpdC4gSXQncyBqdXN0IGltcG9zc2libGUgdG8gcmVhY2ggaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCdzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCB3aXRoIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBwcmVzZW50LCBhbmQgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdsbCBtYWtlIHN1cmUgdG8gc3BlbGwgdGhhdCBvdXQgY2xlYXJseSBpbiB0aGUgZXhwbGFuYXRpb24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlIGNoZWNrLiBJcyBgbGlid3hgIG1heWJlIHVzZWQgYnkgc29tZSB2aXJ0dWFsIGRyaXZlciwgc29tZSBraW5kIG9mIHNvZnR3YXJlIGRldmljZT8gSnVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMjo1MjoxMi4yMDk4NzA5NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDgxMDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaWJ3eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4L1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICs9IHR4Z2JlL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZTo3OmxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6ODpsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtMTItI2luY2x1ZGUgXFxcIm5nYmVfZXRodG9vbC5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy03LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIxLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMy0jaW5jbHVkZSBcXFwibmdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3ZmLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmZfY29tbW9uLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTgtI2luY2x1ZGUgXFxcIm5nYmV2Zl90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzoxMjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEzOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMTQtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtMTEtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jLTExLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jOjExOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMy0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6NzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0xMi0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTU6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoyMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjItI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTc6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTIyLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF92Zi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmZfY29tbW9uLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFxcXCJ0eGdiZXZmX3R5cGUuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MTIuNTc0NzAyOTk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjM2MzUyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjaXNpb246IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGlzIHNvbGVseSB1c2VkIGJ5IHRoZSBXYW5nWHVuIGhhcmR3YXJlIGRyaXZlcnM6IGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGFuZCBgdHhnYmV2ZmAuIFRoYXQncyB0aGUga2V5LiBOb3csIEkgaGF2ZSB0byBnbyBiYWNrIGFuZCBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLiBXZSdyZSBsb29raW5nIGZvciB3aGV0aGVyIGl0J3MgXCJXb3J0aEZ1enppbmdcIiAtIGFuZCB0aGUgY3JpdGVyaWEgc3BlY2lmaWNhbGx5IGluY2x1ZGUgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG5cbkdpdmVuIHRoZXNlIGRyaXZlcnMnIHZlcnkgbmF0dXJlIGFzIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIHRoZXkgKmNhbm5vdCogYmUgcnVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFdlIGFyZW4ndCBkZWFsaW5nIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIGhlcmUuIFRoaXMgaXMgYSBkaXJlY3QgbWF0Y2ggdG8gdGhlIHJ1bGUuIFRoZXJlZm9yZSwgYXNzaWduaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSBjb3JyZWN0IGNhbGwuIEkgd2lsbCBub3cgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIGFuZCBhZGQgYSBjbGVhciBhbmQgY29uY2lzZSByZWFzb24gZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMTksIk91dHB1dFRva2VucyI6ODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTI6NTI6MTguNjk4MzQzNzAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmdYdW4gKG5nYmUvdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgUENJIEV4cHJlc3MgbmV0d29yayBjYXJkcy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVzZSBkZXZpY2VzIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjjppt[1] Phase: Running StartedAt: 2026-07-01 12:53:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjppt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 12:53:35 +0000 UTC FinishedAt: 2026-07-01 12:53:49 +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,}