Name: series-workflow6hngb Phase: Succeeded StartedAt: 2026-07-04 03:56:36 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[0] Phase: Succeeded StartedAt: 2026-07-04 03:56:36 +0000 UTC FinishedAt: 2026-07-04 04:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 03:56:36 +0000 UTC FinishedAt: 2026-07-04 04:19:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM" ], "series_id": "73bb8809-6c18-4fb4-9947-ad5ba5eeb149" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__devlink_compat_running_version", "devlink_compat_running_version" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzFlZDE3YWQ1MzgyNWUwZTNjMjBjYTlkODk3MDYwNzE5NjA0MzAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMDQ6MTc6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggNTdiMmI4ZjAzNTQzNmIuLjBkNDMwMTI2NzE3MTcwIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2J1Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2RldmxfaW50ZXJuYWwuaFwmIzM0O1xuQEAgLTExODgsOCAmIzQzOzExODksMTAgQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdFx0XHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxIHJlcSA9IHt9O1xuJiM0MztcdHNpemVfdCB1c2VkID0gc3RybmxlbihidWYsIGxlbik7XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuJiM0MztcdHN0cnVjdCBzZXFfYnVmIHNiO1xuIFx0aW50IHJlbSwgZXJyO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTIwMSw2ICYjNDM7MTIwNCw4IEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX21zZztcbiBcbiYjNDM7XHRzZXFfYnVmX2luaXQoXHUwMDI2c2IsIGJ1ZiAmIzQzOyB1c2VkLCBsZW4gLSB1c2VkKTtcbiYjNDM7XG4gXHRubGFfZm9yX2VhY2hfYXR0cl90eXBlKG5sYXR0ciwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9SVU5OSU5HLFxuIFx0XHRcdCAgICAgICAodm9pZCAqKW1zZy1cdTAwM2VkYXRhLCBtc2ctXHUwMDNlbGVuLCByZW0pIHtcbiBcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7XG5AQCAtMTIwOCw4ICYjNDM7MTIxMyw4IEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFxuIFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUoa3YsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fVkFMVUUsXG4gXHRcdFx0XHRcdCBubGF0dHIsIHJlbV9rdikge1xuLVx0XHRcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XG4tXHRcdFx0c3RybGNhdChidWYsIFwmIzM0OyBcJiMzNDssIGxlbik7XG4mIzQzO1x0XHRcdHNlcV9idWZfcHJpbnRmKFx1MDAyNnNiLCBcJiMzNDslcyBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIChjb25zdCBjaGFyICopbmxhX2RhdGEoa3YpKTtcbiBcdFx0fVxuIFx0fVxuIGZyZWVfbXNnOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMWVkMTdhZDUzODI1ZTBlM2MyMGNhOWQ4OTcwNjA3MTk2MDQzMDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgNCAwNDoxNzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmMKaW5kZXggNTdiMmI4ZjAzNTQzNmIuLjBkNDMwMTI2NzE3MTcwIDEwMDY0NAotLS0gYS9uZXQvZGV2bGluay9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXYuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXFfYnVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2RldmxfaW50ZXJuYWwuaCYjMzQ7CkBAIC0xMTg4LDggJiM0MzsxMTg5LDEwIEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQkJCQkgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTsKJiM0MzsJc2l6ZV90IHVzZWQgPSBzdHJubGVuKGJ1ZiwgbGVuKTsKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKJiM0MzsJc3RydWN0IHNlcV9idWYgc2I7CiAJaW50IHJlbSwgZXJyOwogCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC0xMjAxLDYgJiM0MzsxMjA0LDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAJaWYgKGVycikKIAkJZ290byBmcmVlX21zZzsKIAomIzQzOwlzZXFfYnVmX2luaXQoJmFtcDtzYiwgYnVmICYjNDM7IHVzZWQsIGxlbiAtIHVzZWQpOwomIzQzOwogCW5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsCiAJCQkgICAgICAgKHZvaWQgKiltc2ctJmd0O2RhdGEsIG1zZy0mZ3Q7bGVuLCByZW0pIHsKIAkJY29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7CkBAIC0xMjA4LDggJiM0MzsxMjEzLDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLAogCQkJCQkgbmxhdHRyLCByZW1fa3YpIHsKLQkJCXN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7Ci0JCQlzdHJsY2F0KGJ1ZiwgJiMzNDsgJiMzNDssIGxlbik7CiYjNDM7CQkJc2VxX2J1Zl9wcmludGYoJmFtcDtzYiwgJiMzNDslcyAmIzM0OywKJiM0MzsJCQkJICAgICAgIChjb25zdCBjaGFyICopbmxhX2RhdGEoa3YpKTsKIAkJfQogCX0KIGZyZWVfbXNnOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L2RldmxpbmsvZGV2LmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvZGV2bGluay9kZXYuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTt2ZSBtYWRlIGEgcGVyZm9ybWFuY2Ugb3Igc2FmZXR5IGltcHJvdmVtZW50LCBhcyB0aGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmxjYXRgIHdpdGggYHNlcV9idWZfcHJpbnRmYCwgdXRpbGl6aW5nIGEgYHNlcV9idWZgLiBUaGlzIHVzdWFsbHkgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBhdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvcHRpbWl6ZSBzdHJpbmcgbWFuaXB1bGF0aW9uLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnkgYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbW1lZGlhdGVseSB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGxzIHRvIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24uIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9uIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmM9MTEzND1pbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTExODctXG5uZXQvZGV2bGluay9kZXYuYzoxMTg4OnN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxubmV0L2RldmxpbmsvZGV2LmM9MTIyND12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbi0tXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2Rldi5jOjEyMzI6XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMtXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBpbXBhY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgZGl2ZSBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSBvZiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCByZXZlYWwgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIHB1cnBvc2UgaXQgc2VydmVzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aG9zZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyB0cnVlIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMDg9dm9pZCBkZXZsaW5rX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEwOS1cbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTEwOnZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMTEtXHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbi0tXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEzMz1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTM0OmRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMzUte1xuLS1cbm5ldC9kZXZsaW5rL2Rldi5jPTExMzQ9aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxubmV0L2RldmxpbmsvZGV2LmM6MTE4ODpzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9kZXZsaW5rL2Rldi5jLTExODktXHRcdFx0XHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMjMtXG5uZXQvZGV2bGluay9kZXYuYzoxMjI0OnZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2RldmxpbmsvZGV2LmMtMTIyNS1cdFx0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTIzMS1cdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOlx0XHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XG5uZXQvZGV2bGluay9kZXYuYy0xMjMzLVx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjQ2PWludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVx0XHRpZiAoc3RhdGUtXHUwMDNlZGV2bGluaylcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY4MTpcdFx0XHRkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RhdGUtXHUwMDNlZGV2bGluayxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cdFx0XHRcdFx0XHQgICAgICAgc3RhdGUtXHUwMDNlaW5mby5md192ZXJzaW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRyaWdnZXJlZCBieSBgZGV2X2V0aHRvb2xgLCB3aGljaCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBjbGVhcmx5IGRlZmluZWQgZW50cnkgcG9pbnQgYW5kIHNob3VsZCBiZSByZWFkaWx5IHRlc3RhYmxlLiBJIGNhbiB3b3JrIHdpdGggdGhhdC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZSwgdGhvdWdoLCBpcyBpbiBgbmV0L2RldmxpbmsvZGV2LmNgLCBzcGVjaWZpY2FsbHksIGl0IG1vZGlmaWVzIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEhtbSwgdGhhdCByaW5ncyBhIGJlbGwuLi4gb2ggeWVhaCwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGV0aHRvb2wgaW5mbyByZXRyaWV2YWwuIFNvLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGFmZmVjdGluZyBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCwgb3IgcmV0cmlldmVzIGluZm9ybWF0aW9uIGZyb20sIHRoZSBkZXZsaW5rIHN1YnN5c3RlbS4KCk5vdywgYSBxdWljayBjaGVjay4uLiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19ORVRfREVWTElOS2AuIElzIGRldmxpbmsgYSBjb3JlIHBhcnQgb2YgbmV0d29ya2luZywgb3IgaXMgaXQgYSBtb2R1bGU/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2RldmxpbmsvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaXRzIGJ1aWxkIHN0YXR1cy4gVGhhdCBzaG91bGQgY2xhcmlmeSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgZGVwZW5kZW5jeSBpc3N1ZXMgZHVyaW5nIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX0JSSURHRSlcdFx0JiM0Mzs9IGJyaWRnZS9cbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXHQmIzQzOz0gZGV2bGluay9cbm5ldC9NYWtlZmlsZS0yNy1vYmoteVx0XHRcdFx0JiM0Mzs9IGRzYS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5ldHdvcmsgRGV2aWNlIExpbmtpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIG5ldHdvcmsgZGV2aWNlIGxpbmtpbmcsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBJJiMzOTttIHNlZWluZyBpcyBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhlIHN1YmplY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgSSYjMzk7bSBhd2FyZSBvZiBhbGwgdGhlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUtMi1cbm5ldC9kZXZsaW5rL01ha2VmaWxlOjM6b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjQ6XHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2bGluayBDb21wYXRpYmlsaXR5IFZlcnNpb24gVXBkYXRlKioKCk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYWxsIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBjb25maWd1cmF0aW9uLXdpc2UgaXMgYE5FVF9ERVZMSU5LYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gLSBpdCYjMzk7cyBsaWtlbHkgb25lIG9mIHRob3NlLiBBaCwgdGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJsY2F0YCB3aXRoIGBzZXFfYnVmX3ByaW50ZmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYWN0dWFsbHkuIEl0JiMzOTtzIGFkZHJlc3NpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc3RyaW5nIHRydW5jYXRpb24sIHNvIGEgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IGltcHJvdmVtZW50LCBhbmQgYWxzbyBjaGFuZ2luZyBob3cgdGhlIHZlcnNpb24gc3RyaW5nIGlzIHB1dCB0b2dldGhlci4gV2FpdCwgSSBzZWUgbm93IC0gaXQmIzM5O3MgdXNpbmcgYHNlcV9idWZfcHJpbnRmYC4gT2theSwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIHN0YXRpYy4uLlllcCwgaXQgaXMuIEFscmlnaHQsIHNvIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIHRoZSBhY3R1YWwgZXhwb3J0ZWQgZnVuY3Rpb24gdGhlbi4gRmluYWxseSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSB0eXBlIG9mIGBORVRfREVWTElOS2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBoYW5kbGVzIHRoZSBjb25maWcgYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9ERVZMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcbi0tXG5uZXQvS2NvbmZpZy00ODYtXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXG5uZXQvS2NvbmZpZy00ODgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpc3NlY3RpbmcgYSBEcml2ZXIgQ29uZmlndXJhdGlvbiBTZXR0aW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBkcml2ZXIgc2V0dGluZywgYW5kIGl0IHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgYSBzaW1wbGUgb24vb2ZmIHNlbGVjdGlvbiBmb3IgZHJpdmVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYSBib29sZWFuLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgKndoeSo/JiMzNDsuIEkgc3RhcnQgd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpkcml2aW5nKiB0aGlzIHNlbGVjdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB0cmlnZ2VyIHRoZSBzZXR0aW5nIG9mIHRoaXMgYm9vbGVhbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGV4cGxpY2l0bHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLCBiZWNhdXNlIHRoYXQgbGlrZWx5IHByb3ZpZGVzIGltcG9ydGFudCBjbHVlcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfREVWTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MTEtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MTcxPWNvbmZpZyBDQU5fS1ZBU0VSX1BDSUVGRFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBQQ0llIEZEIGNhcmRzXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoxNzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTMzLVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcJiMzNDtcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTcwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnPTE5PWNvbmZpZyBFTkFfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZz0xNjk9Y29uZmlnIFBEU19DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnOjE3MzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTc0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjA3PWNvbmZpZyBCTlhUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Mi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz02OD1jb25maWcgTElRVUlESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3NjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc9Mj1jb25maWcgRlNMX0RQQUEyX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXHRzZWxlY3QgRlNMX1hHTUFDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnOjg6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWc9Nj1jb25maWcgRlVOX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cdHNlbGVjdCBGVU5fQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQVJNNjQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xNDU9Y29uZmlnIElYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTAtXHRzZWxlY3QgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUyLVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjI5PWNvbmZpZyBJNDBFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzUtXHRzZWxlY3QgTElCSUVfQURNSU5RXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzAyLVx0c2VsZWN0IExJQklFX0ZXTE9HIGlmIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDQtXHRzZWxlY3QgUEFDS0lOR1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMS1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc9Nj1jb25maWcgUFJFU1RFUkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTI4PWNvbmZpZyBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzMtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz02PWNvbmZpZyBNTFg1X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMS1cdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZz02PWNvbmZpZyBNTFhGV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXHRzZWxlY3QgWFpfREVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6ODpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVx0c2VsZWN0IE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyNzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjMtXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yNS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWc9NzY9Y29uZmlnIFFFRFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cdHNlbGVjdCBSRUdNQVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzUtXHRpbXBseSBQSFlfVElfR01JSV9TRUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDAtXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBORVRERVZTSU0qKgoKT2theSwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxscyBpbiBgTkVUX0RFVkxJTktgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgdXNlZnVsLiBTaW5jZSBgTkVUX0RFVkxJTktgIGlzIHJlbGF0ZWQgdG8gZGV2aWNlIGxpbmsgZnVuY3Rpb25hbGl0eSwgaGF2aW5nIGEgc2ltdWxhdGVkIGRldmljZSwgYXMgcHJvdmlkZWQgYnkgYE5FVERFVlNJTWAsIHdvdWxkIGJlIGEgcGVyZmVjdCB3YXkgdG8gdGVzdCBhbmQgZGVidWcgYW55IGRldmxpbmstcmVsYXRlZCBjb2RlLiBJdCYjMzk7cyBhIGxvdy1yaXNrLCBjb250cm9sbGVkIGVudmlyb25tZW50IGZvciBleHBsb3JpbmcgaG93IHRoZSBzeXN0ZW0gcmVhY3RzLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGBORVRERVZTSU1gIHNlZW1zIGxpa2UgYSBzb2xpZCBjb25maWd1cmF0aW9uIGNob2ljZSBmb3IgYW55IGRldmVsb3BlciB3b3JraW5nIHdpdGgsIG9yIGludGVyZXN0ZWQgaW4sIGBORVRfREVWTElOS2AgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgTkVUREVWU0lNYCBtb2R1bGUgaXRzZWxmIGFuZCBzZWUgd2hhdCBmZWF0dXJlcyBpdCBhY3R1YWxseSBvZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUREVWU0lNYCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gaXNuJiMzOTt0IGBORVRfREVWTElOS2AgYWN0dWFsbHkgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZT8gSXQmIzM5O3MgdGhlIGNvcmUuIEJlZm9yZSBJIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gYE5FVERFVlNJTWAsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGBuZXRkZXZzaW1gIGRyaXZlciBhY3R1YWxseSB1dGlsaXplIG9yIGRlcGVuZCBvbiB0aGUgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIGNoZWNrIGZyb20gYGRldmxpbmtgPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGZ1bmN0aW9uIGlzIGV2ZW4gY2FsbGVkICpieSogYG5ldGRldnNpbWAuIElmIGl0IGlzLCB0aGVuIHRoZSBsaW5rYWdlIGlzIGV4cGxpY2l0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGJvdGggZW5hYmxlZCwgd2l0aCB0aGUgcmlnaHQgdmVyc2lvbnMuIElmIG5vdCwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgb2YgYGRldmxpbmtgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVyIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZSB0cmFjZSBkb2VzbiYjMzk7dCBzaG93IGl0IG9yaWdpbmF0aW5nIGZyb20gYG5ldGRldnNpbWAsIHdoaWNoIGlzIG9kZC4gTXkgaW50dWl0aW9uIHNheXMgdGhlcmUgaXMgYSBzaW1wbGUgcmVhc29uLgoKQWxyaWdodCwgYSBjbHVlIHBvcHMgdXA6IGBkZXZfZXRodG9vbGAgaXMgY2FsbGluZyBpdC4gTm93LCB0aGF0IHJpbmdzIGEgYmVsbCEgYGRldl9ldGh0b29sYCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGBldGh0b29sYCBpcyBhIHRvb2wgZm9yIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBjb21wYXRpYmlsaXR5IGNoZWNrcyBvZnRlbiBmYWxsIHVuZGVyIGl0cyBwdXJ2aWV3LgoKVGltZSB0byBjb25maXJtIHRoaXM7IEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG5ldC9ldGh0b29sL2lvY3RsLmNgIGFuZCBkaWcgaW50byB0aGUgY29kZSBzdXJyb3VuZGluZyBgZGV2X2V0aHRvb2xgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEkmIzM5O2xsIGJldCBJJiMzOTtsbCBmaW5kIG15IGFuc3dlciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4MC1cdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XHRcdFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVx1MDAzZWRldmxpbmssXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2ODItXHRcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgRHJpdmVyIEluZm8gUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBkZXZfZXRodG9vbGAg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQmIzM5O3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgZXRodG9vbCBvcGVyYXRpb25zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGdyYWIgZXRodG9vbCBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXIgaW5mb3JtYXRpb24sIGFzIGluZGljYXRlZCBieSBgZXRodG9vbF9nZXRfZHJ2aW5mb2AuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhpcyBpcyBsaWtlbHkgd2l0aGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBmb3IgZXRodG9vbCBmdW5jdGlvbnMgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgYGRldl9ldGh0b29sYCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBldGh0b29sX2dldF9kcnZpbmZvYC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGZsb3cgYW5kIHNlZSB3aGVyZSB0aGUgYWN0dWFsIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBiZWluZyBjb2xsZWN0ZWQgYW5kIHByZXNlbnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbjM2NTA6XHRcdGludCByYztcbjM2NTE6XHRcbjM2NTI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpXG4zNjUzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzY1NDpcdFxuMzY1NTpcdFx0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuMzY1NjpcdFx0aWYgKCFzdGF0ZSlcbjM2NTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNjU4Olx0XG4zNjU5Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzY2MDpcdFx0Y2FzZSBFVEhUT09MX0ZMQVNIREVWOlxuMzY2MTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3RhdGUtXHUwMDNlZWZsLCB1c2VyYWRkciwgc2l6ZW9mKHN0YXRlLVx1MDAzZWVmbCkpKSB7XG4zNjYyOlx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuMzY2MzpcdFx0XHRcdGdvdG8gZXhpdF9mcmVlO1xuMzY2NDpcdFx0XHR9XG4zNjY1Olx0XHRcdHN0YXRlLVx1MDAzZWVmbC5kYXRhW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FIC0gMV0gPSAwO1xuMzY2NjpcdFx0XHRicmVhaztcbjM2Njc6XHRcdH1cbjM2Njg6XHRcbjM2Njk6XHRcdHJjID0gX19kZXZfZXRodG9vbChuZXQsIGlmciwgdXNlcmFkZHIsIGV0aGNtZCwgc3RhdGUpO1xuMzY3MDpcdFx0aWYgKHJjKVxuMzY3MTpcdFx0XHRnb3RvIGV4aXRfZnJlZTtcbjM2NzI6XHRcbjM2NzM6XHRcdHN3aXRjaCAoZXRoY21kKSB7XG4zNjc0Olx0XHRjYXNlIEVUSFRPT0xfRkxBU0hERVY6XG4zNjc1Olx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZXZsaW5rKVxuMzY3NjpcdFx0XHRcdHJjID0gZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0YXRlLVx1MDAzZWRldmxpbmssXG4zNjc3Olx0XHRcdFx0XHRcdFx0XHQgc3RhdGUtXHUwMDNlZWZsLmRhdGEpO1xuMzY3ODpcdFx0XHRicmVhaztcbjM2Nzk6XHRcdGNhc2UgRVRIVE9PTF9HRFJWSU5GTzpcbjM2ODA6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG4zNjgxOlx0XHRcdFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVx1MDAzZWRldmxpbmssXG4zNjgyOlx0XHRcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbixcbjM2ODM6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbikpO1xuMzY4NDpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcdTAwMjZzdGF0ZS1cdTAwM2VpbmZvLCBzaXplb2Yoc3RhdGUtXHUwMDNlaW5mbykpKSB7XG4zNjg1Olx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuMzY4NjpcdFx0XHRcdGdvdG8gZXhpdF9mcmVlO1xuMzY4NzpcdFx0XHR9XG4zNjg4Olx0XHRcdGJyZWFrO1xuMzY4OTpcdFx0fVxuMzY5MDpcdFxuMzY5MTpcdGV4aXRfZnJlZTpcbjM2OTI6XHRcdGlmIChzdGF0ZS1cdTAwM2VkZXZsaW5rKVxuMzY5MzpcdFx0XHRkZXZsaW5rX3B1dChzdGF0ZS1cdTAwM2VkZXZsaW5rKTtcbjM2OTQ6XHRcdGtmcmVlKHN0YXRlKTtcbjM2OTU6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEVUSFRPT0xfR0RSVklORk8gRmxvdyB3aXRoIERldmxpbmsqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgRVRIVE9PTF9HRFJWSU5GT2AgcmVxdWVzdCBjb21lcyBpbiAqYW5kKiBpZiBgc3RhdGUtJmd0O2RldmxpbmtgIGlzIHBvcHVsYXRlZC4gVGhhdCBgc3RhdGUtJmd0O2RldmxpbmtgIHBvaW50ZXIgaXMga2V5IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZ2V0cyBzZXQuIE15IGluaXRpYWwgaHVuY2gsIGZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgaXMgdGhhdCBgX19kZXZfZXRodG9vbGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLiBMZXQgbWUgY29uZmlybSB0aGF0IGJ5IGp1bXBpbmcgaW4gYW5kIGV4YW1pbmluZyBgX19kZXZfZXRodG9vbGAgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyBgc3RhdGUtJmd0O2RldmxpbmtgLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIFRpbWUgdG8gZGlnIGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MDA6XHRcdGNhc2UgRVRIVE9PTF9TU0c6XG4zNTAxOlx0XHRjYXNlIEVUSFRPT0xfU1RTTzpcbjM1MDI6XHRcdGNhc2UgRVRIVE9PTF9TR1NPOlxuMzUwMzpcdFx0Y2FzZSBFVEhUT09MX1NHUk86XG4zNTA0Olx0XHRcdHJjID0gZXRodG9vbF9zZXRfb25lX2ZlYXR1cmUoZGV2LCB1c2VyYWRkciwgZXRoY21kKTtcbjM1MDU6XHRcdFx0YnJlYWs7XG4zNTA2Olx0XHRjYXNlIEVUSFRPT0xfR0NIQU5ORUxTOlxuMzUwNzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2NoYW5uZWxzKGRldiwgdXNlcmFkZHIpO1xuMzUwODpcdFx0XHRicmVhaztcbjM1MDk6XHRcdGNhc2UgRVRIVE9PTF9TQ0hBTk5FTFM6XG4zNTEwOlx0XHRcdHJjID0gZXRodG9vbF9zZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7XG4zNTExOlx0XHRcdGJyZWFrO1xuMzUxMjpcdFx0Y2FzZSBFVEhUT09MX1NFVF9EVU1QOlxuMzUxMzpcdFx0XHRyYyA9IGV0aHRvb2xfc2V0X2R1bXAoZGV2LCB1c2VyYWRkcik7XG4zNTE0Olx0XHRcdGJyZWFrO1xuMzUxNTpcdFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc6XG4zNTE2Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfZHVtcF9mbGFnKGRldiwgdXNlcmFkZHIpO1xuMzUxNzpcdFx0XHRicmVhaztcbjM1MTg6XHRcdGNhc2UgRVRIVE9PTF9HRVRfRFVNUF9EQVRBOlxuMzUxOTpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShkZXYsIHVzZXJhZGRyKTtcbjM1MjA6XHRcdFx0YnJlYWs7XG4zNTIxOlx0XHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XG4zNTIyOlx0XHRcdHJjID0gZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIHVzZXJhZGRyKTtcbjM1MjM6XHRcdFx0YnJlYWs7XG4zNTI0Olx0XHRjYXNlIEVUSFRPT0xfR01PRFVMRUlORk86XG4zNTI1Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2luZm8oZGV2LCB1c2VyYWRkcik7XG4zNTI2Olx0XHRcdGJyZWFrO1xuMzUyNzpcdFx0Y2FzZSBFVEhUT09MX0dNT0RVTEVFRVBST006XG4zNTI4Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbShkZXYsIHVzZXJhZGRyKTtcbjM1Mjk6XHRcdFx0YnJlYWs7XG4zNTMwOlx0XHRjYXNlIEVUSFRPT0xfR1RVTkFCTEU6XG4zNTMxOlx0XHRcdHJjID0gZXRodG9vbF9nZXRfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcbjM1MzI6XHRcdFx0YnJlYWs7XG4zNTMzOlx0XHRjYXNlIEVUSFRPT0xfU1RVTkFCTEU6XG4zNTM0Olx0XHRcdHJjID0gZXRodG9vbF9zZXRfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcbjM1MzU6XHRcdFx0YnJlYWs7XG4zNTM2Olx0XHRjYXNlIEVUSFRPT0xfR1BIWVNUQVRTOlxuMzUzNzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X3BoeV9zdGF0cyhkZXYsIHVzZXJhZGRyKTtcbjM1Mzg6XHRcdFx0YnJlYWs7XG4zNTM5Olx0XHRjYXNlIEVUSFRPT0xfUEVSUVVFVUU6XG4zNTQwOlx0XHRcdHJjID0gZXRodG9vbF9zZXRfcGVyX3F1ZXVlKGRldiwgdXNlcmFkZHIsIHN1Yl9jbWQpO1xuMzU0MTpcdFx0XHRicmVhaztcbjM1NDI6XHRcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxuMzU0MzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xuMzU0NDpcdFx0XHRicmVhaztcbjM1NDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuMzU0NjpcdFx0XHRyYyA9IGV0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xuMzU0NzpcdFx0XHRicmVhaztcbjM1NDg6XHRcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XG4zNTQ5Olx0XHRcdHJjID0gZ2V0X3BoeV90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xuMzU1MDpcdFx0XHRicmVhaztcbjM1NTE6XHRcdGNhc2UgRVRIVE9PTF9QSFlfU1RVTkFCTEU6XG4zNTUyOlx0XHRcdHJjID0gc2V0X3BoeV90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xuMzU1MzpcdFx0XHRicmVhaztcbjM1NTQ6XHRcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XG4zNTU1Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfZmVjcGFyYW0oZGV2LCB1c2VyYWRkcik7XG4zNTU2Olx0XHRcdGJyZWFrO1xuMzU1NzpcdFx0Y2FzZSBFVEhUT09MX1NGRUNQQVJBTTpcbjM1NTg6XHRcdFx0cmMgPSBldGh0b29sX3NldF9mZWNwYXJhbShkZXYsIHVzZXJhZGRyKTtcbjM1NTk6XHRcdFx0YnJlYWs7XG4zNTYwOlx0XHRkZWZhdWx0OlxuMzU2MTpcdFx0XHRyYyA9IC1FT1BOT1RTVVBQO1xuMzU2MjpcdFx0fVxuMzU2MzpcdFxuMzU2NDpcdFx0aWYgKGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2Vjb21wbGV0ZSlcbjM1NjU6XHRcdFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWNvbXBsZXRlKGRldik7XG4zNTY2Olx0XG4zNTY3Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzU2ODpcdFx0Y2FzZSBFVEhUT09MX1BIWVNfSUQ6XG4zNTY5Olx0XHRcdC8qIERvbiYjMzk7dCBjaGVjayBmZWF0dXJlcyBpZiBvcGVyYXRpb24gZHJvcHMgdGhlIGxvY2tzLlxuMzU3MDpcdFx0XHQgKiBTb21lb25lIGVsc2UgbWF5IGhhdmUgY2hhbmdlZCBmZWF0dXJlcyBpbiBwYXJhbGxlbC5cbjM1NzE6XHRcdFx0ICovXG4zNTcyOlx0XHRcdGJyZWFrO1xuMzU3MzpcdFx0ZGVmYXVsdDpcbjM1NzQ6XHRcdFx0aWYgKG9sZF9mZWF0dXJlcyAhPSBkZXYtXHUwMDNlZmVhdHVyZXMpIHtcbjM1NzU6XHRcdFx0XHRpZiAoaGFzX3J0bmxfbG9jaylcbjM1NzY6XHRcdFx0XHRcdG5ldGRldl9mZWF0dXJlc19jaGFuZ2UoZGV2KTtcbjM1Nzc6XHRcdFx0XHRlbHNlXG4zNTc4Olx0XHRcdFx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O2V0aHRvb2wgY21kICV1IGNoYW5nZWQgZmVhdHVyZXMgd2l0aG91dCBydG5sX2xvY2tcJiMzNDssIGV0aGNtZCk7XG4zNTc5Olx0XHRcdH1cbjM1ODA6XHRcdH1cbjM1ODE6XHRvdXQ6XG4zNTgyOlx0XHRpZiAoZGV2LVx1MDAzZWRldi5wYXJlbnQpXG4zNTgzOlx0XHRcdHBtX3J1bnRpbWVfcHV0KGRldi1cdTAwM2VkZXYucGFyZW50KTtcbjM1ODQ6XHRcbjM1ODU6XHRcdHJldHVybiByYztcbjM1ODY6XHR9XG4zNTg3Olx0XG4zNTg4Olx0LyogQ29tbWFuZHMgdGhhdCBtYXkgdG9nZ2xlIGRldi1cdTAwM2VmZWF0dXJlcyBpbiBuZXQvZXRodG9vbC9pb2N0bC5jIGFuZCBzb1xuMzU4OTpcdCAqIGNhbGwgaW50byBfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoKSwgd2hpY2ggc3RpbGwgcmVxdWlyZXMgcnRubF9sb2NrLlxuMzU5MDpcdCAqIERyaXZlci1kZWNpZGVkIFNFVCBjb21tYW5kcyB0aGF0IG1heSBjaGFpbiBpbnRvIHJ0bmwtb25seSBoZWxwZXJzIGFyZVxuMzU5MTpcdCAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXG4zNTkyOlx0ICovXG4zNTkzOlx0c3RhdGljIGJvb2wgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyh1MzIgZXRoY21kKVxuMzU5NDpcdHtcbjM1OTU6XHRcdHN3aXRjaCAoZXRoY21kKSB7XG4zNTk2Olx0XHRjYXNlIEVUSFRPT0xfU0ZFQVRVUkVTOlxuMzU5NzpcdFx0Y2FzZSBFVEhUT09MX1NGTEFHUzpcbjM1OTg6XHRcdGNhc2UgRVRIVE9PTF9TVFhDU1VNOlxuMzU5OTpcdFx0Y2FzZSBFVEhUT09MX1NSWENTVU06XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNaXNzaW5nIHRoZSBUYXJnZXQ6IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgd2FzIHNjYW5uaW5nIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGZ1bmN0aW9uIHNuaXBwZXQsIGFuZCBJIGRpZG4mIzM5O3QgY2F0Y2ggc2lnaHQgb2YgYEVUSFRPT0xfR0RSVklORk9gIGluIHRoZXJlLiBUaGF0JiMzOTtzIHVudXN1YWwuIEl0IHNob3VsZCBkZWZpbml0ZWx5IGJlIHRoZXJlIGlmIHRoZSBpbnRlbnRpb24gaXMgdG8gZ2F0aGVyIGRyaXZlciBpbmZvcm1hdGlvbi4gTGV0IG1lIGJhY2t0cmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcHJlY2VkaW5nIGxpbmVzIG9mIGNvZGUuIEkgbmVlZCB0byBlbnN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBQZXJoYXBzIGl0JiMzOTtzIGNhbGxlZCBlbHNld2hlcmUsIG9yIG1heWJlIEkmIzM5O20gbG9va2luZyBhdCBhbiBvdXRkYXRlZCB2ZXJzaW9uPyBFaXRoZXIgd2F5LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgdGhlIGltbWVkaWF0ZSBjb2RlIGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTAwOlx0XHRcdGZvcl9lYWNoX3NldF9iaXQoaSwgcXVldWVfbWFzaywgYml0KSB7XG4zMTAxOlx0XHRcdFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9wZXJfcXVldWVfY29hbGVzY2UoZGV2LCBpLCB0bXApO1xuMzEwMjpcdFx0XHRcdHRtcCYjNDM7JiM0Mzs7XG4zMTAzOlx0XHRcdH1cbjMxMDQ6XHRcdH1cbjMxMDU6XHRcdGtmcmVlKGJhY2t1cCk7XG4zMTA2Olx0XG4zMTA3Olx0XHRyZXR1cm4gcmV0O1xuMzEwODpcdH1cbjMxMDk6XHRcbjMxMTA6XHRzdGF0aWMgaW50IG5vaW5saW5lX2Zvcl9zdGFjayBldGh0b29sX3NldF9wZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjMxMTE6XHRcdFx0XHRcdCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsIHUzMiBzdWJfY21kKVxuMzExMjpcdHtcbjMxMTM6XHRcdHN0cnVjdCBldGh0b29sX3Blcl9xdWV1ZV9vcCBwZXJfcXVldWVfb3B0O1xuMzExNDpcdFxuMzExNTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnBlcl9xdWV1ZV9vcHQsIHVzZXJhZGRyLCBzaXplb2YocGVyX3F1ZXVlX29wdCkpKVxuMzExNjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMxMTc6XHRcbjMxMTg6XHRcdGlmIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kICE9IHN1Yl9jbWQpXG4zMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEyMDpcdFxuMzEyMTpcdFx0c3dpdGNoIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kKSB7XG4zMTIyOlx0XHRjYXNlIEVUSFRPT0xfR0NPQUxFU0NFOlxuMzEyMzpcdFx0XHRyZXR1cm4gZXRodG9vbF9nZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKGRldiwgdXNlcmFkZHIsIFx1MDAyNnBlcl9xdWV1ZV9vcHQpO1xuMzEyNDpcdFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcbjMxMjU6XHRcdFx0cmV0dXJuIGV0aHRvb2xfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcdTAwMjZwZXJfcXVldWVfb3B0KTtcbjMxMjY6XHRcdGRlZmF1bHQ6XG4zMTI3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjMxMjg6XHRcdH1cbjMxMjk6XHR9XG4zMTMwOlx0XG4zMTMxOlx0c3RhdGljIGludCBldGh0b29sX3BoeV90dW5hYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBldGh0b29sX3R1bmFibGUgKnR1bmEpXG4zMTMyOlx0e1xuMzEzMzpcdFx0c3dpdGNoICh0dW5hLVx1MDAzZWlkKSB7XG4zMTM0Olx0XHRjYXNlIEVUSFRPT0xfUEhZX0RPV05TSElGVDpcbjMxMzU6XHRcdGNhc2UgRVRIVE9PTF9QSFlfRkFTVF9MSU5LX0RPV046XG4zMTM2Olx0XHRjYXNlIEVUSFRPT0xfUEhZX1NIT1JUX0NBQkxFX1BSRVNFVDpcbjMxMzc6XHRcdFx0aWYgKHR1bmEtXHUwMDNlbGVuICE9IHNpemVvZih1OCkgfHxcbjMxMzg6XHRcdFx0ICAgIHR1bmEtXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTgpXG4zMTM5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTQwOlx0XHRcdGJyZWFrO1xuMzE0MTpcdFx0Y2FzZSBFVEhUT09MX1BIWV9FRFBEOlxuMzE0MjpcdFx0XHRpZiAodHVuYS1cdTAwM2VsZW4gIT0gc2l6ZW9mKHUxNikgfHxcbjMxNDM6XHRcdFx0ICAgIHR1bmEtXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTE2KVxuMzE0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzE0NTpcdFx0XHRicmVhaztcbjMxNDY6XHRcdGNhc2UgRVRIVE9PTF9QSFlfTFBGX0JXOlxuMzE0NzpcdFx0Y2FzZSBFVEhUT09MX1BIWV9EU1BfRVFfSU5JVF9WQUxVRTpcbjMxNDg6XHRcdFx0aWYgKHR1bmEtXHUwMDNlbGVuICE9IHNpemVvZih1MzIpIHx8XG4zMTQ5Olx0XHRcdCAgICB0dW5hLVx1MDAzZXR5cGVfaWQgIT0gRVRIVE9PTF9UVU5BQkxFX1UzMilcbjMxNTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTE6XHRcdFx0YnJlYWs7XG4zMTUyOlx0XHRkZWZhdWx0OlxuMzE1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTQ6XHRcdH1cbjMxNTU6XHRcbjMxNTY6XHRcdHJldHVybiAwO1xuMzE1NzpcdH1cbjMxNTg6XHRcbjMxNTk6XHRzdGF0aWMgaW50IGdldF9waHlfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zMTYwOlx0e1xuMzE2MTpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cdTAwM2VwaHlkZXY7XG4zMTYyOlx0XHRzdHJ1Y3QgZXRodG9vbF90dW5hYmxlIHR1bmE7XG4zMTYzOlx0XHRib29sIHBoeV9kcnZfdHVuYWJsZTtcbjMxNjQ6XHRcdHZvaWQgKmRhdGE7XG4zMTY1Olx0XHRpbnQgcmV0O1xuMzE2NjpcdFxuMzE2NzpcdFx0cGh5X2Rydl90dW5hYmxlID0gcGh5ZGV2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWdldF90dW5hYmxlO1xuMzE2ODpcdFx0aWYgKCFwaHlfZHJ2X3R1bmFibGUgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90dW5hYmxlKVxuMzE2OTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4zMTcwOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHVuYSwgdXNlcmFkZHIsIHNpemVvZih0dW5hKSkpXG4zMTcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzE3MjpcdFx0cmV0ID0gZXRodG9vbF9waHlfdHVuYWJsZV92YWxpZChcdTAwMjZ0dW5hKTtcbjMxNzM6XHRcdGlmIChyZXQpXG4zMTc0Olx0XHRcdHJldHVybiByZXQ7XG4zMTc1Olx0XHRkYXRhID0ga3phbGxvYyh0dW5hLmxlbiwgR0ZQX1VTRVIpO1xuMzE3NjpcdFx0aWYgKCFkYXRhKVxuMzE3NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNzg6XHRcdGlmIChwaHlfZHJ2X3R1bmFibGUpIHtcbjMxNzk6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4zMTgwOlx0XHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlZ2V0X3R1bmFibGUocGh5ZGV2LCBcdTAwMjZ0dW5hLCBkYXRhKTtcbjMxODE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbjMxODI6XHRcdH0gZWxzZSB7XG4zMTgzOlx0XHRcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcGh5X3R1bmFibGUoZGV2LCBcdTAwMjZ0dW5hLCBkYXRhKTtcbjMxODQ6XHRcdH1cbjMxODU6XHRcdGlmIChyZXQpXG4zMTg2Olx0XHRcdGdvdG8gb3V0O1xuMzE4NzpcdFx0dXNlcmFkZHIgJiM0Mzs9IHNpemVvZih0dW5hKTtcbjMxODg6XHRcdHJldCA9IC1FRkFVTFQ7XG4zMTg5Olx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCB0dW5hLmxlbikpXG4zMTkwOlx0XHRcdGdvdG8gb3V0O1xuMzE5MTpcdFx0cmV0ID0gMDtcbjMxOTI6XHRcbjMxOTM6XHRvdXQ6XG4zMTk0Olx0XHRrZnJlZShkYXRhKTtcbjMxOTU6XHRcdHJldHVybiByZXQ7XG4zMTk2Olx0fVxuMzE5NzpcdFxuMzE5ODpcdHN0YXRpYyBpbnQgc2V0X3BoeV90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcilcbjMxOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEVUSFRPT0xfR0RSVklORk9gIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBgRVRIVE9PTF9HRFJWSU5GT2AsIGFuZCB0aGUgaW1tZWRpYXRlIHBsYWNlIG15IG1pbmQganVtcHMgdG8gaXMgdGhlIGNvcmUgb2YgZXRodG9vbCYjMzk7cyBpb2N0bCBoYW5kbGluZzogYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCByZWFsbHkuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIHJlcXVlc3RzLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIGlzIGNsZWFybHkgYW4gaW9jdGwgY29tbWFuZC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgZXRodG9vbCYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkga25vdyBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBjYXNlIHN0YXRlbWVudCBvciBmdW5jdGlvbiBoYW5kbGluZyBgRVRIVE9PTF9HRFJWSU5GT2AgdGhlcmUsIGFsb25nIHdpdGggdGhlIHN1YnNlcXVlbnQgY2FsbHMgaW50byBkcml2ZXItc3BlY2lmaWMgY29kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSFRPT0xfR0RSVklORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9NzM0PWV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnJzcClcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTczOC1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NzM5Olx0cnNwLVx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzQwLVx0c3Ryc2NweShyc3AtXHUwMDNlaW5mby52ZXJzaW9uLCBpbml0X3V0c19ucy5uYW1lLnJlbGVhc2UsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zMjg5LVx0Y2FzZSBFVEhUT09MX0dTRVQ6XG5uZXQvZXRodG9vbC9pb2N0bC5jOjMyOTA6XHRjYXNlIEVUSFRPT0xfR0RSVklORk86XG5uZXQvZXRodG9vbC9pb2N0bC5jLTMyOTEtXHRjYXNlIEVUSFRPT0xfR01TR0xWTDpcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTMzNTQtXHRcdGJyZWFrO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozMzU1Olx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zMzU2LVx0XHRyYyA9IGV0aHRvb2xfZ2V0X2RydmluZm8oZGV2LCBkZXZsaW5rX3N0YXRlKTtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2NDY9aW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcilcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzgtXHRcdGJyZWFrO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNjc5Olx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVx0XHRpZiAoc3RhdGUtXHUwMDNlZGV2bGluaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gZXRodG9vbF9nZXRfZHJ2aW5mbyoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGUgYEVUSFRPT0xfR0RSVklORk9gIHJlcXVlc3QgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBkZXZfZXRodG9vbF9sb2NrZWRgIGZ1bmN0aW9uLiBBbmQgdGhhdCBmdW5jdGlvbiwgYXMgSSBzdXNwZWN0ZWQsIGlzIHRoZSBvbmUgdGhhdCB0aGVuIGNhbGxzIHRoZSBjb3JlIGBldGh0b29sX2dldF9kcnZpbmZvYCBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBleGFjdGx5IHRvIGZpbmQgYGV0aHRvb2xfZ2V0X2RydmluZm9gLCBzbyBsZXQgbWUganVtcCBvdmVyIHRvIHRoZSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaXRzIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBmZXRjaGVkLiBUaGF0IGByc3AtJmd0O2luZm9gIGFuZCBgcnNwLSZndDtkZXZsaW5rYCBwYXJ0IHNlZW1zIGltcG9ydGFudCwgdGhvc2UgYXJlIHByb2JhYmx5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIHRoZSBkcml2ZXImIzM5O3MgZGV0YWlscy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBnb2VzIGludG8gdGhvc2UgZmllbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNDpcdGV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnJzcClcbiA3MzU6XHR7XG4gNzM2Olx0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cdTAwM2VldGh0b29sX29wcztcbiA3Mzc6XHRcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VkZXYucGFyZW50O1xuIDczODpcdFxuIDczOTpcdFx0cnNwLVx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcbiA3NDA6XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8udmVyc2lvbiwgaW5pdF91dHNfbnMubmFtZS5yZWxlYXNlLFxuIDc0MTpcdFx0XHRzaXplb2YocnNwLVx1MDAzZWluZm8udmVyc2lvbikpO1xuIDc0MjpcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZHJ2aW5mbykge1xuIDc0MzpcdFx0XHRvcHMtXHUwMDNlZ2V0X2RydmluZm8oZGV2LCBcdTAwMjZyc3AtXHUwMDNlaW5mbyk7XG4gNzQ0Olx0XHRcdGlmICghcnNwLVx1MDAzZWluZm8uYnVzX2luZm9bMF0gXHUwMDI2XHUwMDI2IHBhcmVudClcbiA3NDU6XHRcdFx0XHRzdHJzY3B5KHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvLCBkZXZfbmFtZShwYXJlbnQpLFxuIDc0NjpcdFx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvKSk7XG4gNzQ3Olx0XHRcdGlmICghcnNwLVx1MDAzZWluZm8uZHJpdmVyWzBdIFx1MDAyNlx1MDAyNiBwYXJlbnQgXHUwMDI2XHUwMDI2IHBhcmVudC1cdTAwM2Vkcml2ZXIpXG4gNzQ4Olx0XHRcdFx0c3Ryc2NweShyc3AtXHUwMDNlaW5mby5kcml2ZXIsIHBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlbmFtZSxcbiA3NDk6XHRcdFx0XHRcdHNpemVvZihyc3AtXHUwMDNlaW5mby5kcml2ZXIpKTtcbiA3NTA6XHRcdH0gZWxzZSBpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBwYXJlbnQtXHUwMDNlZHJpdmVyKSB7XG4gNzUxOlx0XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXG4gNzUyOlx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvKSk7XG4gNzUzOlx0XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8uZHJpdmVyLCBwYXJlbnQtXHUwMDNlZHJpdmVyLVx1MDAzZW5hbWUsXG4gNzU0Olx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmRyaXZlcikpO1xuIDc1NTpcdFx0fSBlbHNlIGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcykge1xuIDc1NjpcdFx0XHRzdHJzY3B5KHJzcC1cdTAwM2VpbmZvLmRyaXZlciwgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNla2luZCxcbiA3NTc6XHRcdFx0XHRzaXplb2YocnNwLVx1MDAzZWluZm8uZHJpdmVyKSk7XG4gNzU4Olx0XHR9IGVsc2Uge1xuIDc1OTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNzYwOlx0XHR9XG4gNzYxOlx0XG4gNzYyOlx0XHQvKlxuIDc2MzpcdFx0ICogdGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIHN0cmluZyBzZXQgaW5mbyBpcyBkZXByZWNhdGVkO1xuIDc2NDpcdFx0ICogVXNlIEVUSFRPT0xfR1NTRVRfSU5GTyBpbnN0ZWFkLlxuIDc2NTpcdFx0ICovXG4gNzY2Olx0XHRpZiAob3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KSB7XG4gNzY3Olx0XHRcdGludCByYztcbiA3Njg6XHRcbiA3Njk6XHRcdFx0cmMgPSBvcHMtXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfVEVTVCk7XG4gNzcwOlx0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4gNzcxOlx0XHRcdFx0cnNwLVx1MDAzZWluZm8udGVzdGluZm9fbGVuID0gcmM7XG4gNzcyOlx0XHRcdHJjID0gb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KGRldiwgRVRIX1NTX1NUQVRTKTtcbiA3NzM6XHRcdFx0aWYgKHJjIFx1MDAzZT0gMClcbiA3NzQ6XHRcdFx0XHRyc3AtXHUwMDNlaW5mby5uX3N0YXRzID0gcmM7XG4gNzc1Olx0XHRcdHJjID0gb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KGRldiwgRVRIX1NTX1BSSVZfRkxBR1MpO1xuIDc3NjpcdFx0XHRpZiAocmMgXHUwMDNlPSAwKVxuIDc3NzpcdFx0XHRcdHJzcC1cdTAwM2VpbmZvLm5fcHJpdl9mbGFncyA9IHJjO1xuIDc3ODpcdFx0fVxuIDc3OTpcdFx0aWYgKG9wcy1cdTAwM2VnZXRfcmVnc19sZW4pIHtcbiA3ODA6XHRcdFx0aW50IHJldCA9IG9wcy1cdTAwM2VnZXRfcmVnc19sZW4oZGV2KTtcbiA3ODE6XHRcbiA3ODI6XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiA3ODM6XHRcdFx0XHRyc3AtXHUwMDNlaW5mby5yZWdkdW1wX2xlbiA9IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpZ2dpbmcgaW50byBgZXRodG9vbF9nZXRfZHJ2aW5mb2AqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqZXhhY3RseSogaXMgYHJzcC0mZ3Q7ZGV2bGlua2AgZ2V0dGluZyBpdHMgdmFsdWUgc2V0PyBJIHNlZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBidXQgSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhhdCBwb2ludGVyIGlzIGFjdHVhbGx5IGdldHRpbmcgcG9wdWxhdGVkIHdpdGggdXNlZnVsIGRhdGEuIExldCBtZSBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IHJlYWQgbW9yZSBvZiB0aGUgYGV0aHRvb2xfZ2V0X2RydmluZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhbGwgdGhlIHBvc3NpYmxlIGNvZGUgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdoZXJlIHRoYXQgY3J1Y2lhbCBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgZm9sbG93IHRoYXQgdmFyaWFibGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzg0Olx0XHR9XG4gNzg1Olx0XG4gNzg2Olx0XHRpZiAob3BzLVx1MDAzZWdldF9lZXByb21fbGVuKVxuIDc4NzpcdFx0XHRyc3AtXHUwMDNlaW5mby5lZWR1bXBfbGVuID0gb3BzLVx1MDAzZWdldF9lZXByb21fbGVuKGRldik7XG4gNzg4Olx0XG4gNzg5Olx0XHRpZiAoIXJzcC1cdTAwM2VpbmZvLmZ3X3ZlcnNpb25bMF0pXG4gNzkwOlx0XHRcdHJzcC1cdTAwM2VkZXZsaW5rID0gbmV0ZGV2X3RvX2RldmxpbmtfZ2V0KGRldik7XG4gNzkxOlx0XG4gNzkyOlx0XHRyZXR1cm4gMDtcbiA3OTM6XHR9XG4gNzk0Olx0XG4gNzk1Olx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9nZXRfc3NldF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNzk2Olx0XHRcdFx0XHRcdFx0ICAgIHZvaWQgX191c2VyICp1c2VyYWRkcilcbiA3OTc6XHR7XG4gNzk4Olx0XHRzdHJ1Y3QgZXRodG9vbF9zc2V0X2luZm8gaW5mbztcbiA3OTk6XHRcdHU2NCBzc2V0X21hc2s7XG4gODAwOlx0XHRpbnQgaSwgaWR4ID0gMCwgbl9iaXRzID0gMCwgcmV0LCByYztcbiA4MDE6XHRcdHUzMiAqaW5mb19idWYgPSBOVUxMO1xuIDgwMjpcdFxuIDgwMzpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIHVzZXJhZGRyLCBzaXplb2YoaW5mbykpKVxuIDgwNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MDU6XHRcbiA4MDY6XHRcdC8qIHN0b3JlIGNvcHkgb2YgbWFzaywgYmVjYXVzZSB3ZSB6ZXJvIHN0cnVjdCBsYXRlciBvbiAqL1xuIDgwNzpcdFx0c3NldF9tYXNrID0gaW5mby5zc2V0X21hc2s7XG4gODA4Olx0XHRpZiAoIXNzZXRfbWFzaylcbiA4MDk6XHRcdFx0cmV0dXJuIDA7XG4gODEwOlx0XG4gODExOlx0XHQvKiBjYWxjdWxhdGUgc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovXG4gODEyOlx0XHRuX2JpdHMgPSBod2VpZ2h0NjQoc3NldF9tYXNrKTtcbiA4MTM6XHRcbiA4MTQ6XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDgxNTpcdFx0aW5mby5jbWQgPSBFVEhUT09MX0dTU0VUX0lORk87XG4gODE2Olx0XG4gODE3Olx0XHRpbmZvX2J1ZiA9IGtjYWxsb2Mobl9iaXRzLCBzaXplb2YodTMyKSwgR0ZQX1VTRVIpO1xuIDgxODpcdFx0aWYgKCFpbmZvX2J1ZilcbiA4MTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODIwOlx0XG4gODIxOlx0XHQvKlxuIDgyMjpcdFx0ICogZmlsbCByZXR1cm4gYnVmZmVyIGJhc2VkIG9uIGlucHV0IGJpdG1hc2sgYW5kIHN1Y2Nlc3NmdWxcbiA4MjM6XHRcdCAqIGdldF9zc2V0X2NvdW50IHJldHVyblxuIDgyNDpcdFx0ICovXG4gODI1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSYjNDM7JiM0MzspIHtcbiA4MjY6XHRcdFx0aWYgKCEoc3NldF9tYXNrIFx1MDAyNiAoMVVMTCBcdTAwM2NcdTAwM2MgaSkpKVxuIDgyNzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgyODpcdFxuIDgyOTpcdFx0XHRyYyA9IF9fZXRodG9vbF9nZXRfc3NldF9jb3VudChkZXYsIGkpO1xuIDgzMDpcdFx0XHRpZiAocmMgXHUwMDNlPSAwKSB7XG4gODMxOlx0XHRcdFx0aW5mby5zc2V0X21hc2sgfD0gKDFVTEwgXHUwMDNjXHUwMDNjIGkpO1xuIDgzMjpcdFx0XHRcdGluZm9fYnVmW2lkeCYjNDM7JiM0MztdID0gcmM7XG4gODMzOlx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTGluayBGaXJtd2FyZSBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBpZiB0aGUgZGV2aWNlIGRyaXZlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHByb3ZpZGUgYSBmaXJtd2FyZSB2ZXJzaW9uIChgIXJzcC0mZ3Q7aW5mby5md192ZXJzaW9uWzBdYCksIHRoZSBjb2RlIGludGVsbGlnZW50bHkgdHJpZXMgdG8gZmV0Y2ggaXQgdXNpbmcgYG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpYCDigJMgYSBzdGFuZGFyZCwgZXhwZWN0ZWQgZmxvdy4gVGhpcyBpcyBnb29kLCBub3RoaW5nIHVudXN1YWwgdGhlcmUuCgpUaGlzIHBhdGNoLCBob3dldmVyLCB0b3VjaGVzIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gLiBHaXZlbiB0aGF0IGBORVRfREVWTElOS2AgaXMgY29udHJvbGxlZCBieSBgTkVUREVWU0lNYCwgYWRkaW5nIGBORVRERVZTSU1gIHRvIGVuYWJsZSB0aGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgYW5kIGFwcHJvcHJpYXRlIHNvbHV0aW9uLiBBY3R1YWxseSwgd2FpdCBhIG1vbWVudC4gYE5FVF9ERVZMSU5LYCBnZXRzIGJ1aWx0LWluIGlmICphbnkqIGRyaXZlciB0aGF0IHNlbGVjdHMgaXQgaXMgYnVpbHQtaW4uIFRoYXQgY291bGQgaW1wYWN0IHRoaXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgYG5ldC9kZXZsaW5rL2Rldi5jYC4KClJpZ2h0LCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHJlbGllcyBvbiBgZGV2bGlua19pbmZvX3JlcWAsIGNvbnN0cnVjdHMgYSBOZXRsaW5rIG1lc3NhZ2UsIGFuZCB1c2VzIGBkZXZsaW5rLSZndDtvcHMtJmd0O2luZm9fZ2V0YCB0byBnZXQgdGhlIHJ1bm5pbmcgdmVyc2lvbi4gVGhpcyBjbGVhcmx5IGRlZmluZXMgYSBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZSBwYXRoLiBJJiMzOTttIGZhaXJseSBjb25maWRlbnQgdGhpcyB3aWxsIHdvcmsuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZTogaXMganVzdCBhZGRpbmcgYE5FVERFVlNJTWAgZW5vdWdoPyBgTkVUREVWU0lNYCBkb2VzIHNlbGVjdCBgTkVUX0RFVkxJTktgLCBzbyB0aGF0IGNoZWNrcyBvdXQuIEl0IGxvb2tzIGxpa2UgYE5FVERFVlNJTWAgYmVsb25ncyBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCwgc2hvdWxkIEkgY29uc2lkZXIgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBgRVRIVE9PTF9ORVRMSU5LYCBzcHJpbmdzIHRvIG1pbmQsIGJ1dCB0aGF0JiMzOTtzIGFuIGlvY3RsLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIHN1Z2dlc3RzIGEgZGlmZmVyZW50IGFwcHJvYWNoIGFsdG9nZXRoZXIuIFNvLCBiYWNrIHRvIHRoZSBjb3JlLiBEb2VzIGBORVRERVZTSU1gIHByb3ZpZGUgYGluZm9fZ2V0YCBpbiB0aGUgZGV2bGluayBvcGVyYXRpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgc3VwcG9ydGVkIGJ5IHRoZSBzaW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmZvX2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTEwNDI9c3RhdGljIGludCBuc2ltX2Rldl9yZWxvYWRfdXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGVudW0gZGV2bGlua19yZWxvYWRfYWN0aW9uIGFjdGlvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTA2MC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDYxOnN0YXRpYyBpbnQgbnNpbV9kZXZfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTA2Mi1cdFx0XHQgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQzMS1cdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQzMjpcdC5pbmZvX2dldCA9IG5zaW1fZGV2X2luZm9fZ2V0LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzMtXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXBhdGliaWxpdHkgUGF0Y2gqKgoKT2theSwgc28gYG5ldGRldnNpbWAgZG9lcyBpbmRlZWQgaW1wbGVtZW50IGBpbmZvX2dldGAuIFRoYXQmIzM5O3MgYSBncmVhdCBzdGFydDsgdGhlIHdob2xlIGBORVRERVZTSU1gIGFuZ2xlIGxvb2tzIHByb21pc2luZy4KCk5vdywgbXkgcHJpbWFyeSB0YXNrIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcsIGFuZCB0byBldmFsdWF0ZSB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiBhbGwgcmVsZXZhbnQgc3ltYm9scy4KClJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYC4gU28gdGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBhcyBvbmUga2V5IGZvY3VzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG5vbi11bmRlcnNjb3JlZCB2ZXJzaW9uIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHdoaWNoIHNob3VsZCBiZSBjb25zaWRlcmVkLCB0b28uIEFoLCBidXQgd2FpdCwgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzIGEgbGl0dGxlIOKAkyBidXQgSSBzaG91bGQgbGlzdCBib3RoIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZSBjb3ZlcmVkIGFsbCBiYXNlcyBhbmQgYXZvaWQgYW55IGdvdGNoYXMuIEkgd2lsbCBmb2N1cyBvbiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBvciBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gCgpMZXQmIzM5O3MgY2hlY2sgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCBhbHNvIGRlcGVuZGVudCBvbiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIG9yIGluZGVlZCBhbnkgb3RoZXIgY29kZSB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcywgdG8gZW5zdXJlIG5vIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTE4Ny1cbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5uZXQvZGV2bGluay9kZXYuYy0xMTg5LVx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5uZXQvZGV2bGluay9kZXYuYz0xMjI0PXZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKVxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcdFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cdGRldmxfdW5sb2NrKGRldmxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERldmxpbmsgQ29tcGF0aWJpbGl0eSBWZXJzaW9uIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gRmlyc3QsIEkgcmVhbGl6ZSB0aGF0IGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpc24mIzM5O3QgY2FsbGVkIGZyb20gd2l0aGluIHRoaXMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlcj8gSSBzZWUgYE5FVF9ERVZMSU5LYCBpcyBzZWxlY3RlZCBieSBgTkVUREVWU0lNYCwgYW5kIHNpbmNlIGBORVRERVZTSU1gIGdpdmVzIG1lIGEgc29mdHdhcmUgZGV2aWNlIHRoYXQgdXRpbGl6ZXMgZGV2bGluaywgdGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBkb24mIzM5O3Qgc2VlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgYHNlcV9idWZgIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbC4KCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBwYXRjaCBpdHNlbGYgYWdhaW4uIEl0JiMzOTtzIGNoYW5naW5nIGhvdyBhIHZlcnNpb24gc3RyaW5nIGlzIGJ1aWx0LiBQcmV2aW91c2x5LCBpdCB1c2VkIGBzdHJsY2F0YC4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgc2VxX2J1Zl9wcmludGZgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIHBvdGVudGlhbGx5IHNhZmVyLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlZ2FyZGluZyBgc3RybGNhdGAgd2hlcmUgaXQgbWlnaHQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBubGFfZGF0YShrdilgIGRhdGEsIGlmIGl0IHdhcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBvciBqdXN0IGdlbmVyYWwgdXNlIGNhc2Ugc2FmZXR5IHVzaW5nIGBzZXFfYnVmX3ByaW50ZmAuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgdHlwZSBjYXN0IHRvIGAoY29uc3QgY2hhciAqKWAgYW5kIHByaW50cyB3aXRoIGAlc2AsIHdoaWNoIHN0aWxsIHJlbGllcyBvbiBudWxsLXRlcm1pbmF0aW9uLiBCdXQgYHNlcV9idWZfcHJpbnRmYCBoYW5kbGVzIGJ1ZmZlciBib3VuZGFyaWVzIG11Y2ggYmV0dGVyLiBJIGFtIHJlbWVtYmVyaW5nIHRoYXQgYHN0cmxjYXRgIHJlcXVpcmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGBidWZgIGlzIGEgdmFsaWQgQyBzdHJpbmcgYW5kIHRoYXQgaXQgaGFzIHRvIGJlIG51bGwtdGVybWluYXRlZCB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlci4gVGhlIHVwZGF0ZWQgY29kZSB1c2VzIGBzZXFfYnVmX2luaXRgIGFuZCB1c2VzIGBzdHJubGVuKGJ1ZiwgbGVuKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzYWZlciBjaG9pY2UuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2hhbmdlLiBJdCBpcyBsaWtlbHkgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBmdXp6aW5nIG9uIHRoaXMgYXJlYS4KClRvIHRlc3QgdGhpcyBjaGFuZ2UsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgd291bGQgYmU6CgoqICAgYE5FVERFVlNJTWAgKHRvIGVuYWJsZSBhIGRyaXZlciB0aGF0IHVzZXMgZGV2bGluayBhbmQgaW1wbGVtZW50cyBgaW5mb19nZXRgKQoKVGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBhcmU6CgoqICAgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYAoqICAgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAKCkkmIzM5O2xsIGNoZWNrIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGluIGBuZXQvZGV2bGluay9kZXYuY2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRmcmVlX21zZzpcbjEyMjE6XHRcdG5sbXNnX2NvbnN1bWUobXNnKTtcbjEyMjI6XHR9XG4xMjIzOlx0XG4xMjI0Olx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4xMjI1Olx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTIyNjpcdHtcbjEyMjc6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQpXG4xMjI4Olx0XHRcdHJldHVybjtcbjEyMjk6XHRcbjEyMzA6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMzE6XHRcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4xMjMyOlx0XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbjEyMzM6XHRcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuMTIzNDpcdH1cbjEyMzU6XHRcbjEyMzY6XHRpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXG4xMjM3Olx0e1xuMTIzODpcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcbjEyMzk6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgVmFyaWFibGUqKgoKT2theSwgc28gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nIHRoaXMgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgdGhpbmcuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyBpdCwgb3IgYXQgbGVhc3QgdXNpbmcgaXQgc29tZXdoZXJlLCBwcm9iYWJseSBhY3Jvc3MgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHVzZWQgaW4gYGluY2x1ZGUvbmV0L2RldmxpbmsuaGAuIEV4Y2VsbGVudC4gTm93LCB3aGVyZSBpcyBpdCAqY2FsbGVkKiBmcm9tPyBBaCwgaGVyZSB3ZSBnbywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgLgoKQWhhISBOb3csIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgaW4gb3JkZXIgaGVyZS4gTGV0JiMzOTtzIHRoaW5rLCBpcyBgbmV0L2V0aHRvb2wvaW9jdGwuY2Agc29tZXRoaW5nIHRoYXQmIzM5O3MgYnVpbHQgYnkgZGVmYXVsdD8gWWVzLCBpdCBpcyEgRXRodG9vbCBpcyBjb3JlIG5ldHdvcmtpbmcsIHNvIGl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgY29tcGlsZWQgYW5kIGxpbmtlZC4gR29vZCwgdGhhdCBjb25maXJtcyBhIGJhc2VsaW5lIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuIEkgd2lsbCBjaGVjayBpZiBpdCBjYW4gYmUgZGlzYWJsZWQgYnV0IG5vcm1hbGx5IGl0IGlzIGEga2V5IGNvbXBvbmVudCB0byBuZXR3b3JraW5nIGFuZCB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvY3RsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZS0yLVxubmV0L2V0aHRvb2wvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0JiM0Mzs9IGlvY3RsLm8gY29tbW9uLm9cbm5ldC9ldGh0b29sL01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgaW9jdGwub2AqKgoKUmlnaHQsIHNvIGBpb2N0bC5vYCBpcyBhbHdheXMgYnVpbHQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcyBhcm91bmQgdGhvc2UgYE5FVERFVlNJTWAgY29uZmlndXJhdGlvbnMuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBEb2VzIGVuYWJsaW5nIGBORVRERVZTSU1gIGF1dG9tYXRpY2FsbHkgcHVsbCBpbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnM/IEJlc3QgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVhbCBpcyB3aXRoIGBORVRERVZTSU1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFxuIDYwMTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXCYjMzQ7XG4gNjAyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG4gNjAzOlx0XG4gNjA0Olx0Y29uZmlnIE5FVERFVlNJTVxuIDYwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4gNjA2Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gNjA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiA2MDg6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cbiA2MDk6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cbiA2MTA6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDYxMTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuIDYxMjpcdFx0c2VsZWN0IE5FVF9TSEFQRVJcbiA2MTM6XHRcdGhlbHBcbiA2MTQ6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxuIDYxNTpcdFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XG4gNjE2Olx0XHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cbiA2MTc6XHRcbiA2MTg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDYxOTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZXRkZXZzaW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTQ4CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBvbmUgaGluZ2VzIG9uIGEgY291cGxlIG9mIGtleSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBERUJVR19GU2AgYW5kIGBJTkVUYC4gR2VuZXJhbGx5LCB0aG9zZSBhcmUgc3RhbmRhcmQgZmFyZSBpbiBzeXprYWxsZXIgc2V0dXBzLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBNeSBwbGFuIGlzIHRvIGluY2x1ZGUgYE5FVERFVlNJTWAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQuIFRoZSBwYXRjaCBpcyBzd2FwcGluZyBvdXQgYHN0cmxjYXRgIGZvciBgc2VxX2J1Zl9wcmludGZgIHdpdGhpbiB0aGUgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGRpcmVjdCBtb3ZlIHRvIGltcHJvdmUgYnVmZmVyIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIHZlcnNpb24gcmV0cmlldmFsIHRocm91Z2ggZGV2bGluay4gQW5kIHNpbmNlIHRoYXQgY2hhbmdlIG9jY3VycyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKSwgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuCgpUaGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciB0aGlzIHdpbGwgYmUgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBhbmQgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEFuZCwgYXMgc3RhdGVkIGVhcmxpZXIsIHRoZSBgTkVUREVWU0lNYCBjb25maWcgc2hvdWxkIGJlIGVuYWJsZWQgdG8gbWF4aW1pemUgdGhpcyBmdXp6aW5nLgoKSSYjMzk7bSBub3cgY29uZmlkZW50IGluIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZXR0aW5ncyBmb3IgdGhpcyBydW4sIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAgICYjMzQ7ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MjIuOTI3ODAyNzk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzODcwOTk4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjIyLjkyNzgwNzIyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3NTA2Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzFlZDE3YWQ1MzgyNWUwZTNjMjBjYTlkODk3MDYwNzE5NjA0MzAzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDA0OjE3OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcXG5pbmRleCA1N2IyYjhmMDM1NDM2Yi4uMGQ0MzAxMjY3MTcxNzAgMTAwNjQ0XFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xcbkBAIC01LDYgKzUsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJkZXZsX2ludGVybmFsLmhcXFwiXFxuQEAgLTExODgsOCArMTE4OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XFxuK1xcdHNpemVfdCB1c2VkID0gc3RybmxlbihidWYsIGxlbik7XFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4rXFx0c3RydWN0IHNlcV9idWYgc2I7XFxuIFxcdGludCByZW0sIGVycjtcXG4gXFxuIFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbkBAIC0xMjAxLDYgKzEyMDQsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFxuK1xcdHNlcV9idWZfaW5pdChcXHUwMDI2c2IsIGJ1ZiArIHVzZWQsIGxlbiAtIHVzZWQpO1xcbitcXG4gXFx0bmxhX2Zvcl9lYWNoX2F0dHJfdHlwZShubGF0dHIsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fUlVOTklORyxcXG4gXFx0XFx0XFx0ICAgICAgICh2b2lkICopbXNnLVxcdTAwM2VkYXRhLCBtc2ctXFx1MDAzZWxlbiwgcmVtKSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbkBAIC0xMjA4LDggKzEyMTMsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFxuIFxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShrdiwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9WQUxVRSxcXG4gXFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuLVxcdFxcdFxcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XFxuLVxcdFxcdFxcdHN0cmxjYXQoYnVmLCBcXFwiIFxcXCIsIGxlbik7XFxuK1xcdFxcdFxcdHNlcV9idWZfcHJpbnRmKFxcdTAwMjZzYiwgXFxcIiVzIFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAoY29uc3QgY2hhciAqKW5sYV9kYXRhKGt2KSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBmcmVlX21zZzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MjMuNDk2Mjg5MDM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTgxODYwMzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3RybGNhdCB3aXRoIHNlcV9idWZfcHJpbnRmIGluIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uIHRvIGZpeCBwb3RlbnRpYWwgYnVmZmVyIGhhbmRsaW5nIGlzc3VlcyB3aGVuIHJldHJpZXZpbmcgdGhlIHJ1bm5pbmcgdmVyc2lvbiBvZiBhIGRldmljZSB2aWEgZGV2bGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMWVkMTdhZDUzODI1ZTBlM2MyMGNhOWQ4OTcwNjA3MTk2MDQzMDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAwNDoxNzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IDU3YjJiOGYwMzU0MzZiLi4wZDQzMDEyNjcxNzE3MCAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTUsNiArNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfYnVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXCJkZXZsX2ludGVybmFsLmhcIlxuQEAgLTExODgsOCArMTE4OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XG4rXHRzaXplX3QgdXNlZCA9IHN0cm5sZW4oYnVmLCBsZW4pO1xuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhdHRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbitcdHN0cnVjdCBzZXFfYnVmIHNiO1xuIFx0aW50IHJlbSwgZXJyO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTIwMSw2ICsxMjA0LDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfbXNnO1xuIFxuK1x0c2VxX2J1Zl9pbml0KFx1MDAyNnNiLCBidWYgKyB1c2VkLCBsZW4gLSB1c2VkKTtcbitcbiBcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXG4gXHRcdFx0ICAgICAgICh2b2lkICopbXNnLVx1MDAzZWRhdGEsIG1zZy1cdTAwM2VsZW4sIHJlbSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICprdjtcbkBAIC0xMjA4LDggKzEyMTMsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcbiBcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxuIFx0XHRcdFx0XHQgbmxhdHRyLCByZW1fa3YpIHtcbi1cdFx0XHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xuLVx0XHRcdHN0cmxjYXQoYnVmLCBcIiBcIiwgbGVuKTtcbitcdFx0XHRzZXFfYnVmX3ByaW50ZihcdTAwMjZzYiwgXCIlcyBcIixcbitcdFx0XHRcdCAgICAgICAoY29uc3QgY2hhciAqKW5sYV9kYXRhKGt2KSk7XG4gXHRcdH1cbiBcdH1cbiBmcmVlX21zZzpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjIzLjQ5NjI5MTA3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjA4MjI2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvZGV2bGluay9kZXYuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvZGV2bGluay9kZXYuY2AuIEl0IHNlZW1zIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgbWFkZSBhIHBlcmZvcm1hbmNlIG9yIHNhZmV0eSBpbXByb3ZlbWVudCwgYXMgdGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJsY2F0YCB3aXRoIGBzZXFfYnVmX3ByaW50ZmAsIHV0aWxpemluZyBhIGBzZXFfYnVmYC4gVGhpcyB1c3VhbGx5IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gYXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3B0aW1pemUgc3RyaW5nIG1hbmlwdWxhdGlvbi5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnkgYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbW1lZGlhdGVseSB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGxzIHRvIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24uIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9uIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyNy4xMTcxMTY2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzMzkwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RldmxpbmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kZXZsaW5rL2Rldi5jPTExMzQ9aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTExODctXFxubmV0L2RldmxpbmsvZGV2LmM6MTE4ODpzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9kZXYuYy0xMTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2RldmxpbmsvZGV2LmM9MTIyND12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOlxcdFxcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcXG5uZXQvZGV2bGluay9kZXYuYy0xMjMzLVxcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyNy4yMTk0OTM4NTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYyMzU5MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaW1wYWN0LiBMZXQncyBzZWUuLi4gSSdsbCBkaXZlIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGJlaW5nIHVzZWQuIFRoYXQnbGwgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBwdXJwb3NlIGl0IHNlcnZlcyB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgdHJ1ZSBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyOS45ODE4NTUzNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MzYwNDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMDg9dm9pZCBkZXZsaW5rX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMDktXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oOjIxMTA6dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMTEtXFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuLS1cXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEzMz1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjEzNDpkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEzNS17XFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxcbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMjMtXFxubmV0L2RldmxpbmsvZGV2LmM6MTIyNDp2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9kZXYuYy0xMjI1LVxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XFx0XFx0XFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZWluZm8uZndfdmVyc2lvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzIuNzI1NDY0NTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDIxMzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0cmlnZ2VyZWQgYnkgYGRldl9ldGh0b29sYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBHb29kLCB0aGF0J3MgYSBjbGVhcmx5IGRlZmluZWQgZW50cnkgcG9pbnQgYW5kIHNob3VsZCBiZSByZWFkaWx5IHRlc3RhYmxlLiBJIGNhbiB3b3JrIHdpdGggdGhhdC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGlzIGluIGBuZXQvZGV2bGluay9kZXYuY2AsIHNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gSG1tLCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBvaCB5ZWFoLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZXRodG9vbCBpbmZvIHJldHJpZXZhbC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWZmZWN0aW5nIGhvdyBldGh0b29sIGludGVyYWN0cyB3aXRoLCBvciByZXRyaWV2ZXMgaW5mb3JtYXRpb24gZnJvbSwgdGhlIGRldmxpbmsgc3Vic3lzdGVtLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2suLi4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBkZXZsaW5rIGEgY29yZSBwYXJ0IG9mIG5ldHdvcmtpbmcsIG9yIGlzIGl0IGEgbW9kdWxlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9kZXZsaW5rL01ha2VmaWxlYCB0byBjb25maXJtIGl0cyBidWlsZCBzdGF0dXMuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaWYgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGRlcGVuZGVuY3kgaXNzdWVzIGR1cmluZyB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjM2LjQwOTY4MDEzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxMTU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjM2LjUyNjgwMTE0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Mjc3NjQ4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOZXR3b3JrIERldmljZSBMaW5raW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gbmV0d29yayBkZXZpY2UgbGlua2luZywgYW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIEknbSBzZWVpbmcgaXMgYE5FVF9ERVZMSU5LYC4gTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHRoZSBzdWJqZWN0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIHNvbWV0aGluZy4gSSBjYW4ndCBqdXN0IGFzc3VtZSBJJ20gYXdhcmUgb2YgYWxsIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzguOTU0NTY4MzIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM3NDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9NYWtlZmlsZS0yLVxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjM6b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcXFxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjQ6XFx0IHJlc291cmNlLm8gcGFyYW0ubyByZWdpb24ubyBoZWFsdGgubyB0cmFwLm8gcmF0ZS5vIGxpbmVjYXJkLm8gc2hfZGV2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzkuMDQxOTQ3Mjg0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc5NTM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIENvbXBhdGliaWxpdHkgVmVyc2lvbiBVcGRhdGUqKlxuXG5Pa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGFsbCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggY29uZmlndXJhdGlvbi13aXNlIGlzIGBORVRfREVWTElOS2AuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gLSBpdCdzIGxpa2VseSBvbmUgb2YgdGhvc2UuIEFoLCB0aGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmxjYXRgIHdpdGggYHNlcV9idWZfcHJpbnRmYC4gUmlnaHQsIHRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5LiBJdCdzIGFkZHJlc3NpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc3RyaW5nIHRydW5jYXRpb24sIHNvIGEgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IGltcHJvdmVtZW50LCBhbmQgYWxzbyBjaGFuZ2luZyBob3cgdGhlIHZlcnNpb24gc3RyaW5nIGlzIHB1dCB0b2dldGhlci4gV2FpdCwgSSBzZWUgbm93IC0gaXQncyB1c2luZyBgc2VxX2J1Zl9wcmludGZgLiBPa2F5LCB0aGF0J3MgZ29vZCB0byBrbm93LiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBzdGF0aWMuLi5ZZXAsIGl0IGlzLiBBbHJpZ2h0LCBzbyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyB0aGUgYWN0dWFsIGV4cG9ydGVkIGZ1bmN0aW9uIHRoZW4uIEZpbmFsbHksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgdHlwZSBvZiBgTkVUX0RFVkxJTktgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaGFuZGxlcyB0aGUgY29uZmlnIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NDMuMTg5OTAzMjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzA4NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Ni1cXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXFxubmV0L0tjb25maWctNDg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NDMuMzIyOTkyNTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDc2Njc4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyBhIERyaXZlciBDb25maWd1cmF0aW9uIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBkcml2ZXIgc2V0dGluZywgYW5kIGl0IHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgYSBzaW1wbGUgb24vb2ZmIHNlbGVjdGlvbiBmb3IgZHJpdmVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYSBib29sZWFuLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgKndoeSo/XCIuIEkgc3RhcnQgd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyAqZHJpdmluZyogdGhpcyBzZWxlY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiB0aGlzIGJvb2xlYW4uIExldCdzIHNlZSB3aGF0IGV4cGxpY2l0bHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLCBiZWNhdXNlIHRoYXQgbGlrZWx5IHByb3ZpZGVzIGltcG9ydGFudCBjbHVlcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjQ2LjIzMDY2MjcwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NzA5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfREVWTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE3MT1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTc0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTEtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzUtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnPTY9Y29uZmlnIFBSRVNURVJBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIEJSSURHRSB8fCBCUklER0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTEtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz0yOD1jb25maWcgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMzLVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Nj1jb25maWcgTUxYNV9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTEtXFx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc9Nj1jb25maWcgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXFx0c2VsZWN0IFhaX0RFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjg6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVxcdHNlbGVjdCBNTFhGV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjc6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTIzLVxcdGRlcGVuZHMgb24gVExTIFxcdTAwMjZcXHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTc2PWNvbmZpZyBRRURcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTE5PWNvbmZpZyBTRkNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cXHRzZWxlY3QgUkVHTUFQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTc1LVxcdGltcGx5IFBIWV9USV9HTUlJX1NFTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBBUkNIX0szIFxcdTAwMjZcXHUwMDI2IE9GIFxcdTAwMjZcXHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjQ2LjQ3OTM3ODE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTg2NTEwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTkVUREVWU0lNKipcblxuT2theSwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxscyBpbiBgTkVUX0RFVkxJTktgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBxdWl0ZSB1c2VmdWwuIFNpbmNlIGBORVRfREVWTElOS2AgaXMgcmVsYXRlZCB0byBkZXZpY2UgbGluayBmdW5jdGlvbmFsaXR5LCBoYXZpbmcgYSBzaW11bGF0ZWQgZGV2aWNlLCBhcyBwcm92aWRlZCBieSBgTkVUREVWU0lNYCwgd291bGQgYmUgYSBwZXJmZWN0IHdheSB0byB0ZXN0IGFuZCBkZWJ1ZyBhbnkgZGV2bGluay1yZWxhdGVkIGNvZGUuIEl0J3MgYSBsb3ctcmlzaywgY29udHJvbGxlZCBlbnZpcm9ubWVudCBmb3IgZXhwbG9yaW5nIGhvdyB0aGUgc3lzdGVtIHJlYWN0cy4gVGhlcmVmb3JlLCBlbmFibGluZyBgTkVUREVWU0lNYCBzZWVtcyBsaWtlIGEgc29saWQgY29uZmlndXJhdGlvbiBjaG9pY2UgZm9yIGFueSBkZXZlbG9wZXIgd29ya2luZyB3aXRoLCBvciBpbnRlcmVzdGVkIGluLCBgTkVUX0RFVkxJTktgIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRlbHZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgTkVUREVWU0lNYCBtb2R1bGUgaXRzZWxmIGFuZCBzZWUgd2hhdCBmZWF0dXJlcyBpdCBhY3R1YWxseSBvZmZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo0OS4zMzgwMzA5NTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzEwODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo0OS40MzYzNDc1MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyODgxNjA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRERVZTSU1gIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCB0aGF0J3Mgc3RlcCBvbmUuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzbid0IGBORVRfREVWTElOS2AgYWN0dWFsbHkgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZT8gSXQncyB0aGUgY29yZS4gQmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiBgTkVUREVWU0lNYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBoZXJlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyIGFjdHVhbGx5IHV0aWxpemUgb3IgZGVwZW5kIG9uIHRoZSBjb21wYXRpYmlsaXR5IHZlcnNpb24gY2hlY2sgZnJvbSBgZGV2bGlua2A/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gaXMgZXZlbiBjYWxsZWQgKmJ5KiBgbmV0ZGV2c2ltYC4gSWYgaXQgaXMsIHRoZW4gdGhlIGxpbmthZ2UgaXMgZXhwbGljaXQgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhleSdyZSBib3RoIGVuYWJsZWQsIHdpdGggdGhlIHJpZ2h0IHZlcnNpb25zLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IG9mIGBkZXZsaW5rYCBpcyBhY3R1YWxseSB1c2VkIGFuZCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCdzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NTIuNTY1MTY1NzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjAwMzEwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjUyLjY0NzE5MjM3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxNzM4MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhlIHRyYWNlIGRvZXNuJ3Qgc2hvdyBpdCBvcmlnaW5hdGluZyBmcm9tIGBuZXRkZXZzaW1gLCB3aGljaCBpcyBvZGQuIE15IGludHVpdGlvbiBzYXlzIHRoZXJlIGlzIGEgc2ltcGxlIHJlYXNvbi5cblxuQWxyaWdodCwgYSBjbHVlIHBvcHMgdXA6IGBkZXZfZXRodG9vbGAgaXMgY2FsbGluZyBpdC4gTm93LCB0aGF0IHJpbmdzIGEgYmVsbCEgYGRldl9ldGh0b29sYCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGBldGh0b29sYCBpcyBhIHRvb2wgZm9yIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBjb21wYXRpYmlsaXR5IGNoZWNrcyBvZnRlbiBmYWxsIHVuZGVyIGl0cyBwdXJ2aWV3LlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpczsgSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBuZXQvZXRodG9vbC9pb2N0bC5jYCBhbmQgZGlnIGludG8gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGRldl9ldGh0b29sYC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEknbGwgYmV0IEknbGwgZmluZCBteSBhbnN3ZXIgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo1NS43Nzg5MzM4NjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU1NTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XFx0XFx0XFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZWluZm8uZndfdmVyc2lvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NTUuODgxNTI0MjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU5ODg3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgRHJpdmVyIEluZm8gUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgYGRldl9ldGh0b29sYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgZXRodG9vbCBvcGVyYXRpb25zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIGNhbGxlZCB3aGVuIHdlJ3JlIHRyeWluZyB0byBncmFiIGV0aHRvb2wgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGluZm9ybWF0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgYGV0aHRvb2xfZ2V0X2RydmluZm9gLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoaXMgaXMgbGlrZWx5IHdpdGhpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBmb3IgZXRodG9vbCBmdW5jdGlvbnMgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgYGRldl9ldGh0b29sYCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBldGh0b29sX2dldF9kcnZpbmZvYC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGZsb3cgYW5kIHNlZSB3aGVyZSB0aGUgYWN0dWFsIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBiZWluZyBjb2xsZWN0ZWQgYW5kIHByZXNlbnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjU5LjA5NzUxNjE2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY2NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY0NjpcXHRpbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbjM2NDc6XFx0e1xcbjM2NDg6XFx0XFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xcbjM2NDk6XFx0XFx0dTMyIGV0aGNtZDtcXG4zNjUwOlxcdFxcdGludCByYztcXG4zNjUxOlxcdFxcbjM2NTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpXFxuMzY1MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zNjU0OlxcdFxcbjM2NTU6XFx0XFx0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xcbjM2NTY6XFx0XFx0aWYgKCFzdGF0ZSlcXG4zNjU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM2NTg6XFx0XFxuMzY1OTpcXHRcXHRzd2l0Y2ggKGV0aGNtZCkge1xcbjM2NjA6XFx0XFx0Y2FzZSBFVEhUT09MX0ZMQVNIREVWOlxcbjM2NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzdGF0ZS1cXHUwMDNlZWZsLCB1c2VyYWRkciwgc2l6ZW9mKHN0YXRlLVxcdTAwM2VlZmwpKSkge1xcbjM2NjI6XFx0XFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbjM2NjM6XFx0XFx0XFx0XFx0Z290byBleGl0X2ZyZWU7XFxuMzY2NDpcXHRcXHRcXHR9XFxuMzY2NTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZWZsLmRhdGFbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUgLSAxXSA9IDA7XFxuMzY2NjpcXHRcXHRcXHRicmVhaztcXG4zNjY3OlxcdFxcdH1cXG4zNjY4OlxcdFxcbjM2Njk6XFx0XFx0cmMgPSBfX2Rldl9ldGh0b29sKG5ldCwgaWZyLCB1c2VyYWRkciwgZXRoY21kLCBzdGF0ZSk7XFxuMzY3MDpcXHRcXHRpZiAocmMpXFxuMzY3MTpcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4zNjcyOlxcdFxcbjM2NzM6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4zNjc0OlxcdFxcdGNhc2UgRVRIVE9PTF9GTEFTSERFVjpcXG4zNjc1OlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG4zNjc2OlxcdFxcdFxcdFxcdHJjID0gZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbjM2Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0YXRlLVxcdTAwM2VlZmwuZGF0YSk7XFxuMzY3ODpcXHRcXHRcXHRicmVhaztcXG4zNjc5OlxcdFxcdGNhc2UgRVRIVE9PTF9HRFJWSU5GTzpcXG4zNjgwOlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG4zNjgxOlxcdFxcdFxcdFxcdGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdGF0ZS1cXHUwMDNlZGV2bGluayxcXG4zNjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNlaW5mby5md192ZXJzaW9uLFxcbjM2ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdGF0ZS1cXHUwMDNlaW5mby5md192ZXJzaW9uKSk7XFxuMzY4NDpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcXHUwMDI2c3RhdGUtXFx1MDAzZWluZm8sIHNpemVvZihzdGF0ZS1cXHUwMDNlaW5mbykpKSB7XFxuMzY4NTpcXHRcXHRcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuMzY4NjpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4zNjg3OlxcdFxcdFxcdH1cXG4zNjg4OlxcdFxcdFxcdGJyZWFrO1xcbjM2ODk6XFx0XFx0fVxcbjM2OTA6XFx0XFxuMzY5MTpcXHRleGl0X2ZyZWU6XFxuMzY5MjpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRldmxpbmspXFxuMzY5MzpcXHRcXHRcXHRkZXZsaW5rX3B1dChzdGF0ZS1cXHUwMDNlZGV2bGluayk7XFxuMzY5NDpcXHRcXHRrZnJlZShzdGF0ZSk7XFxuMzY5NTpcXHRcXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjU5LjEwMTk4NzM4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MDExODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEVUSFRPT0xfR0RSVklORk8gRmxvdyB3aXRoIERldmxpbmsqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBpdCdzIHRyaWdnZXJlZCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgRVRIVE9PTF9HRFJWSU5GT2AgcmVxdWVzdCBjb21lcyBpbiAqYW5kKiBpZiBgc3RhdGUtXHUwMDNlZGV2bGlua2AgaXMgcG9wdWxhdGVkLiBUaGF0IGBzdGF0ZS1cdTAwM2VkZXZsaW5rYCBwb2ludGVyIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGdldHMgc2V0LiBNeSBpbml0aWFsIGh1bmNoLCBmcm9tIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGlzIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZS4gTGV0IG1lIGNvbmZpcm0gdGhhdCBieSBqdW1waW5nIGluIGFuZCBleGFtaW5pbmcgYF9fZGV2X2V0aHRvb2xgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGhhbmRsZXMgYHN0YXRlLVx1MDAzZWRldmxpbmtgLiBJIHN1c3BlY3QgaXQncyB0aGUgZ2F0ZWtlZXBlci4gVGltZSB0byBkaWcgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjAyLjM1OTAwMTk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzUwMDpcXHRcXHRjYXNlIEVUSFRPT0xfU1NHOlxcbjM1MDE6XFx0XFx0Y2FzZSBFVEhUT09MX1NUU086XFxuMzUwMjpcXHRcXHRjYXNlIEVUSFRPT0xfU0dTTzpcXG4zNTAzOlxcdFxcdGNhc2UgRVRIVE9PTF9TR1JPOlxcbjM1MDQ6XFx0XFx0XFx0cmMgPSBldGh0b29sX3NldF9vbmVfZmVhdHVyZShkZXYsIHVzZXJhZGRyLCBldGhjbWQpO1xcbjM1MDU6XFx0XFx0XFx0YnJlYWs7XFxuMzUwNjpcXHRcXHRjYXNlIEVUSFRPT0xfR0NIQU5ORUxTOlxcbjM1MDc6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF9jaGFubmVscyhkZXYsIHVzZXJhZGRyKTtcXG4zNTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM1MDk6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4zNTEwOlxcdFxcdFxcdHJjID0gZXRodG9vbF9zZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7XFxuMzUxMTpcXHRcXHRcXHRicmVhaztcXG4zNTEyOlxcdFxcdGNhc2UgRVRIVE9PTF9TRVRfRFVNUDpcXG4zNTEzOlxcdFxcdFxcdHJjID0gZXRodG9vbF9zZXRfZHVtcChkZXYsIHVzZXJhZGRyKTtcXG4zNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjM1MTU6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc6XFxuMzUxNjpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZmxhZyhkZXYsIHVzZXJhZGRyKTtcXG4zNTE3OlxcdFxcdFxcdGJyZWFrO1xcbjM1MTg6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0RBVEE6XFxuMzUxOTpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShkZXYsIHVzZXJhZGRyKTtcXG4zNTIwOlxcdFxcdFxcdGJyZWFrO1xcbjM1MjE6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9UU19JTkZPOlxcbjM1MjI6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xcbjM1MjM6XFx0XFx0XFx0YnJlYWs7XFxuMzUyNDpcXHRcXHRjYXNlIEVUSFRPT0xfR01PRFVMRUlORk86XFxuMzUyNTpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X21vZHVsZV9pbmZvKGRldiwgdXNlcmFkZHIpO1xcbjM1MjY6XFx0XFx0XFx0YnJlYWs7XFxuMzUyNzpcXHRcXHRjYXNlIEVUSFRPT0xfR01PRFVMRUVFUFJPTTpcXG4zNTI4OlxcdFxcdFxcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbShkZXYsIHVzZXJhZGRyKTtcXG4zNTI5OlxcdFxcdFxcdGJyZWFrO1xcbjM1MzA6XFx0XFx0Y2FzZSBFVEhUT09MX0dUVU5BQkxFOlxcbjM1MzE6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xcbjM1MzI6XFx0XFx0XFx0YnJlYWs7XFxuMzUzMzpcXHRcXHRjYXNlIEVUSFRPT0xfU1RVTkFCTEU6XFxuMzUzNDpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X3R1bmFibGUoZGV2LCB1c2VyYWRkcik7XFxuMzUzNTpcXHRcXHRcXHRicmVhaztcXG4zNTM2OlxcdFxcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XFxuMzUzNzpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X3BoeV9zdGF0cyhkZXYsIHVzZXJhZGRyKTtcXG4zNTM4OlxcdFxcdFxcdGJyZWFrO1xcbjM1Mzk6XFx0XFx0Y2FzZSBFVEhUT09MX1BFUlFVRVVFOlxcbjM1NDA6XFx0XFx0XFx0cmMgPSBldGh0b29sX3NldF9wZXJfcXVldWUoZGV2LCB1c2VyYWRkciwgc3ViX2NtZCk7XFxuMzU0MTpcXHRcXHRcXHRicmVhaztcXG4zNTQyOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbjM1NDM6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIHVzZXJhZGRyKTtcXG4zNTQ0OlxcdFxcdFxcdGJyZWFrO1xcbjM1NDU6XFx0XFx0Y2FzZSBFVEhUT09MX1NMSU5LU0VUVElOR1M6XFxuMzU0NjpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xcbjM1NDc6XFx0XFx0XFx0YnJlYWs7XFxuMzU0ODpcXHRcXHRjYXNlIEVUSFRPT0xfUEhZX0dUVU5BQkxFOlxcbjM1NDk6XFx0XFx0XFx0cmMgPSBnZXRfcGh5X3R1bmFibGUoZGV2LCB1c2VyYWRkcik7XFxuMzU1MDpcXHRcXHRcXHRicmVhaztcXG4zNTUxOlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfU1RVTkFCTEU6XFxuMzU1MjpcXHRcXHRcXHRyYyA9IHNldF9waHlfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcXG4zNTUzOlxcdFxcdFxcdGJyZWFrO1xcbjM1NTQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dGRUNQQVJBTTpcXG4zNTU1OlxcdFxcdFxcdHJjID0gZXRodG9vbF9nZXRfZmVjcGFyYW0oZGV2LCB1c2VyYWRkcik7XFxuMzU1NjpcXHRcXHRcXHRicmVhaztcXG4zNTU3OlxcdFxcdGNhc2UgRVRIVE9PTF9TRkVDUEFSQU06XFxuMzU1ODpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X2ZlY3BhcmFtKGRldiwgdXNlcmFkZHIpO1xcbjM1NTk6XFx0XFx0XFx0YnJlYWs7XFxuMzU2MDpcXHRcXHRkZWZhdWx0OlxcbjM1NjE6XFx0XFx0XFx0cmMgPSAtRU9QTk9UU1VQUDtcXG4zNTYyOlxcdFxcdH1cXG4zNTYzOlxcdFxcbjM1NjQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWNvbXBsZXRlKVxcbjM1NjU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlY29tcGxldGUoZGV2KTtcXG4zNTY2OlxcdFxcbjM1Njc6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4zNTY4OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlTX0lEOlxcbjM1Njk6XFx0XFx0XFx0LyogRG9uJ3QgY2hlY2sgZmVhdHVyZXMgaWYgb3BlcmF0aW9uIGRyb3BzIHRoZSBsb2Nrcy5cXG4zNTcwOlxcdFxcdFxcdCAqIFNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBjaGFuZ2VkIGZlYXR1cmVzIGluIHBhcmFsbGVsLlxcbjM1NzE6XFx0XFx0XFx0ICovXFxuMzU3MjpcXHRcXHRcXHRicmVhaztcXG4zNTczOlxcdFxcdGRlZmF1bHQ6XFxuMzU3NDpcXHRcXHRcXHRpZiAob2xkX2ZlYXR1cmVzICE9IGRldi1cXHUwMDNlZmVhdHVyZXMpIHtcXG4zNTc1OlxcdFxcdFxcdFxcdGlmIChoYXNfcnRubF9sb2NrKVxcbjM1NzY6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShkZXYpO1xcbjM1Nzc6XFx0XFx0XFx0XFx0ZWxzZVxcbjM1Nzg6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZXRodG9vbCBjbWQgJXUgY2hhbmdlZCBmZWF0dXJlcyB3aXRob3V0IHJ0bmxfbG9ja1xcXCIsIGV0aGNtZCk7XFxuMzU3OTpcXHRcXHRcXHR9XFxuMzU4MDpcXHRcXHR9XFxuMzU4MTpcXHRvdXQ6XFxuMzU4MjpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXYucGFyZW50KVxcbjM1ODM6XFx0XFx0XFx0cG1fcnVudGltZV9wdXQoZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4zNTg0OlxcdFxcbjM1ODU6XFx0XFx0cmV0dXJuIHJjO1xcbjM1ODY6XFx0fVxcbjM1ODc6XFx0XFxuMzU4ODpcXHQvKiBDb21tYW5kcyB0aGF0IG1heSB0b2dnbGUgZGV2LVxcdTAwM2VmZWF0dXJlcyBpbiBuZXQvZXRodG9vbC9pb2N0bC5jIGFuZCBzb1xcbjM1ODk6XFx0ICogY2FsbCBpbnRvIF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpLCB3aGljaCBzdGlsbCByZXF1aXJlcyBydG5sX2xvY2suXFxuMzU5MDpcXHQgKiBEcml2ZXItZGVjaWRlZCBTRVQgY29tbWFuZHMgdGhhdCBtYXkgY2hhaW4gaW50byBydG5sLW9ubHkgaGVscGVycyBhcmVcXG4zNTkxOlxcdCAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxuMzU5MjpcXHQgKi9cXG4zNTkzOlxcdHN0YXRpYyBib29sIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXModTMyIGV0aGNtZClcXG4zNTk0OlxcdHtcXG4zNTk1OlxcdFxcdHN3aXRjaCAoZXRoY21kKSB7XFxuMzU5NjpcXHRcXHRjYXNlIEVUSFRPT0xfU0ZFQVRVUkVTOlxcbjM1OTc6XFx0XFx0Y2FzZSBFVEhUT09MX1NGTEFHUzpcXG4zNTk4OlxcdFxcdGNhc2UgRVRIVE9PTF9TVFhDU1VNOlxcbjM1OTk6XFx0XFx0Y2FzZSBFVEhUT09MX1NSWENTVU06XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjAyLjM1OTMwMzUwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4NDc0OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqTWlzc2luZyB0aGUgVGFyZ2V0OiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgd2FzIHNjYW5uaW5nIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGZ1bmN0aW9uIHNuaXBwZXQsIGFuZCBJIGRpZG4ndCBjYXRjaCBzaWdodCBvZiBgRVRIVE9PTF9HRFJWSU5GT2AgaW4gdGhlcmUuIFRoYXQncyB1bnVzdWFsLiBJdCBzaG91bGQgZGVmaW5pdGVseSBiZSB0aGVyZSBpZiB0aGUgaW50ZW50aW9uIGlzIHRvIGdhdGhlciBkcml2ZXIgaW5mb3JtYXRpb24uIExldCBtZSBiYWNrdHJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIHByZWNlZGluZyBsaW5lcyBvZiBjb2RlLiBJIG5lZWQgdG8gZW5zdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBQZXJoYXBzIGl0J3MgY2FsbGVkIGVsc2V3aGVyZSwgb3IgbWF5YmUgSSdtIGxvb2tpbmcgYXQgYW4gb3V0ZGF0ZWQgdmVyc2lvbj8gRWl0aGVyIHdheSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgdGhlIGltbWVkaWF0ZSBjb2RlIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MDUuMDg3NzgzNzg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTAwOlxcdFxcdFxcdGZvcl9lYWNoX3NldF9iaXQoaSwgcXVldWVfbWFzaywgYml0KSB7XFxuMzEwMTpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKGRldiwgaSwgdG1wKTtcXG4zMTAyOlxcdFxcdFxcdFxcdHRtcCsrO1xcbjMxMDM6XFx0XFx0XFx0fVxcbjMxMDQ6XFx0XFx0fVxcbjMxMDU6XFx0XFx0a2ZyZWUoYmFja3VwKTtcXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0cmV0dXJuIHJldDtcXG4zMTA4OlxcdH1cXG4zMTA5OlxcdFxcbjMxMTA6XFx0c3RhdGljIGludCBub2lubGluZV9mb3Jfc3RhY2sgZXRodG9vbF9zZXRfcGVyX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMzExMTpcXHRcXHRcXHRcXHRcXHQgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLCB1MzIgc3ViX2NtZClcXG4zMTEyOlxcdHtcXG4zMTEzOlxcdFxcdHN0cnVjdCBldGh0b29sX3Blcl9xdWV1ZV9vcCBwZXJfcXVldWVfb3B0O1xcbjMxMTQ6XFx0XFxuMzExNTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnBlcl9xdWV1ZV9vcHQsIHVzZXJhZGRyLCBzaXplb2YocGVyX3F1ZXVlX29wdCkpKVxcbjMxMTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzExNzpcXHRcXG4zMTE4OlxcdFxcdGlmIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kICE9IHN1Yl9jbWQpXFxuMzExOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTIwOlxcdFxcbjMxMjE6XFx0XFx0c3dpdGNoIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kKSB7XFxuMzEyMjpcXHRcXHRjYXNlIEVUSFRPT0xfR0NPQUxFU0NFOlxcbjMxMjM6XFx0XFx0XFx0cmV0dXJuIGV0aHRvb2xfZ2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcXHUwMDI2cGVyX3F1ZXVlX29wdCk7XFxuMzEyNDpcXHRcXHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxcbjMxMjU6XFx0XFx0XFx0cmV0dXJuIGV0aHRvb2xfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcXHUwMDI2cGVyX3F1ZXVlX29wdCk7XFxuMzEyNjpcXHRcXHRkZWZhdWx0OlxcbjMxMjc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjMxMjg6XFx0XFx0fVxcbjMxMjk6XFx0fVxcbjMxMzA6XFx0XFxuMzEzMTpcXHRzdGF0aWMgaW50IGV0aHRvb2xfcGh5X3R1bmFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGV0aHRvb2xfdHVuYWJsZSAqdHVuYSlcXG4zMTMyOlxcdHtcXG4zMTMzOlxcdFxcdHN3aXRjaCAodHVuYS1cXHUwMDNlaWQpIHtcXG4zMTM0OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfRE9XTlNISUZUOlxcbjMxMzU6XFx0XFx0Y2FzZSBFVEhUT09MX1BIWV9GQVNUX0xJTktfRE9XTjpcXG4zMTM2OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfU0hPUlRfQ0FCTEVfUFJFU0VUOlxcbjMxMzc6XFx0XFx0XFx0aWYgKHR1bmEtXFx1MDAzZWxlbiAhPSBzaXplb2YodTgpIHx8XFxuMzEzODpcXHRcXHRcXHQgICAgdHVuYS1cXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTgpXFxuMzEzOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTQwOlxcdFxcdFxcdGJyZWFrO1xcbjMxNDE6XFx0XFx0Y2FzZSBFVEhUT09MX1BIWV9FRFBEOlxcbjMxNDI6XFx0XFx0XFx0aWYgKHR1bmEtXFx1MDAzZWxlbiAhPSBzaXplb2YodTE2KSB8fFxcbjMxNDM6XFx0XFx0XFx0ICAgIHR1bmEtXFx1MDAzZXR5cGVfaWQgIT0gRVRIVE9PTF9UVU5BQkxFX1UxNilcXG4zMTQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxNDU6XFx0XFx0XFx0YnJlYWs7XFxuMzE0NjpcXHRcXHRjYXNlIEVUSFRPT0xfUEhZX0xQRl9CVzpcXG4zMTQ3OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfRFNQX0VRX0lOSVRfVkFMVUU6XFxuMzE0ODpcXHRcXHRcXHRpZiAodHVuYS1cXHUwMDNlbGVuICE9IHNpemVvZih1MzIpIHx8XFxuMzE0OTpcXHRcXHRcXHQgICAgdHVuYS1cXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTMyKVxcbjMxNTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzE1MTpcXHRcXHRcXHRicmVhaztcXG4zMTUyOlxcdFxcdGRlZmF1bHQ6XFxuMzE1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTU0OlxcdFxcdH1cXG4zMTU1OlxcdFxcbjMxNTY6XFx0XFx0cmV0dXJuIDA7XFxuMzE1NzpcXHR9XFxuMzE1ODpcXHRcXG4zMTU5OlxcdHN0YXRpYyBpbnQgZ2V0X3BoeV90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcilcXG4zMTYwOlxcdHtcXG4zMTYxOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXFx1MDAzZXBoeWRldjtcXG4zMTYyOlxcdFxcdHN0cnVjdCBldGh0b29sX3R1bmFibGUgdHVuYTtcXG4zMTYzOlxcdFxcdGJvb2wgcGh5X2Rydl90dW5hYmxlO1xcbjMxNjQ6XFx0XFx0dm9pZCAqZGF0YTtcXG4zMTY1OlxcdFxcdGludCByZXQ7XFxuMzE2NjpcXHRcXG4zMTY3OlxcdFxcdHBoeV9kcnZfdHVuYWJsZSA9IHBoeWRldiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlZ2V0X3R1bmFibGU7XFxuMzE2ODpcXHRcXHRpZiAoIXBoeV9kcnZfdHVuYWJsZSBcXHUwMDI2XFx1MDAyNiAhZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90dW5hYmxlKVxcbjMxNjk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjMxNzA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0dW5hLCB1c2VyYWRkciwgc2l6ZW9mKHR1bmEpKSlcXG4zMTcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMxNzI6XFx0XFx0cmV0ID0gZXRodG9vbF9waHlfdHVuYWJsZV92YWxpZChcXHUwMDI2dHVuYSk7XFxuMzE3MzpcXHRcXHRpZiAocmV0KVxcbjMxNzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zMTc1OlxcdFxcdGRhdGEgPSBremFsbG9jKHR1bmEubGVuLCBHRlBfVVNFUik7XFxuMzE3NjpcXHRcXHRpZiAoIWRhdGEpXFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMTc4OlxcdFxcdGlmIChwaHlfZHJ2X3R1bmFibGUpIHtcXG4zMTc5OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuMzE4MDpcXHRcXHRcXHRyZXQgPSBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlZ2V0X3R1bmFibGUocGh5ZGV2LCBcXHUwMDI2dHVuYSwgZGF0YSk7XFxuMzE4MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuMzE4MjpcXHRcXHR9IGVsc2Uge1xcbjMxODM6XFx0XFx0XFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90dW5hYmxlKGRldiwgXFx1MDAyNnR1bmEsIGRhdGEpO1xcbjMxODQ6XFx0XFx0fVxcbjMxODU6XFx0XFx0aWYgKHJldClcXG4zMTg2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxODc6XFx0XFx0dXNlcmFkZHIgKz0gc2l6ZW9mKHR1bmEpO1xcbjMxODg6XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4zMTg5OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIGRhdGEsIHR1bmEubGVuKSlcXG4zMTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxOTE6XFx0XFx0cmV0ID0gMDtcXG4zMTkyOlxcdFxcbjMxOTM6XFx0b3V0OlxcbjMxOTQ6XFx0XFx0a2ZyZWUoZGF0YSk7XFxuMzE5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxOTY6XFx0fVxcbjMxOTc6XFx0XFxuMzE5ODpcXHRzdGF0aWMgaW50IHNldF9waHlfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuMzE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjA1LjA4ODExNDM0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUxODc5NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBFVEhUT09MX0dEUlZJTkZPYCBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGBFVEhUT09MX0dEUlZJTkZPYCwgYW5kIHRoZSBpbW1lZGlhdGUgcGxhY2UgbXkgbWluZCBqdW1wcyB0byBpcyB0aGUgY29yZSBvZiBldGh0b29sJ3MgaW9jdGwgaGFuZGxpbmc6IGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gSXQncyBhbG1vc3QgYXV0b21hdGljLCByZWFsbHkuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIHJlcXVlc3RzLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIGlzIGNsZWFybHkgYW4gaW9jdGwgY29tbWFuZC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgZXRodG9vbCdzIHN0cnVjdHVyZSBhbmQgdGhlIGRyaXZlciBpbnRlcmFjdGlvbiwgdGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBrbm93IEknbGwgcHJvYmFibHkgZmluZCB0aGUgY2FzZSBzdGF0ZW1lbnQgb3IgZnVuY3Rpb24gaGFuZGxpbmcgYEVUSFRPT0xfR0RSVklORk9gIHRoZXJlLCBhbG9uZyB3aXRoIHRoZSBzdWJzZXF1ZW50IGNhbGxzIGludG8gZHJpdmVyLXNwZWNpZmljIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODowOC42Mzk5OTYxNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODEzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfR0RSVklORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jPTczND1ldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpyc3ApXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTczOC1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjczOTpcXHRyc3AtXFx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTc0MC1cXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby52ZXJzaW9uLCBpbml0X3V0c19ucy5uYW1lLnJlbGVhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzI4OS1cXHRjYXNlIEVUSFRPT0xfR1NFVDpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjMyOTA6XFx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzI5MS1cXHRjYXNlIEVUSFRPT0xfR01TR0xWTDpcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzM1NC1cXHRcXHRicmVhaztcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjMzNTU6XFx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzM1Ni1cXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2RydmluZm8oZGV2LCBkZXZsaW5rX3N0YXRlKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjc4LVxcdFxcdGJyZWFrO1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY3OTpcXHRjYXNlIEVUSFRPT0xfR0RSVklORk86XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MDguNzM1ODEzNzg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzI5MzI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBldGh0b29sX2dldF9kcnZpbmZvKipcblxuUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGBFVEhUT09MX0dEUlZJTkZPYCByZXF1ZXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgZGV2X2V0aHRvb2xfbG9ja2VkYCBmdW5jdGlvbi4gQW5kIHRoYXQgZnVuY3Rpb24sIGFzIEkgc3VzcGVjdGVkLCBpcyB0aGUgb25lIHRoYXQgdGhlbiBjYWxscyB0aGUgY29yZSBgZXRodG9vbF9nZXRfZHJ2aW5mb2AgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSB0byBmaW5kIGBldGh0b29sX2dldF9kcnZpbmZvYCwgc28gbGV0IG1lIGp1bXAgb3ZlciB0byB0aGUgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgZHJpdmVyIGluZm9ybWF0aW9uIGlzIGFjdHVhbGx5IGZldGNoZWQuIFRoYXQgYHJzcC1cdTAwM2VpbmZvYCBhbmQgYHJzcC1cdTAwM2VkZXZsaW5rYCBwYXJ0IHNlZW1zIGltcG9ydGFudCwgdGhvc2UgYXJlIHByb2JhYmx5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIHRoZSBkcml2ZXIncyBkZXRhaWxzLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGdvZXMgaW50byB0aG9zZSBmaWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MTIuMzY4NzQ4OTkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczNDpcXHRldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpyc3ApXFxuIDczNTpcXHR7XFxuIDczNjpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHM7XFxuIDczNzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIDczODpcXHRcXG4gNzM5OlxcdFxcdHJzcC1cXHUwMDNlaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPO1xcbiA3NDA6XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8udmVyc2lvbiwgaW5pdF91dHNfbnMubmFtZS5yZWxlYXNlLFxcbiA3NDE6XFx0XFx0XFx0c2l6ZW9mKHJzcC1cXHUwMDNlaW5mby52ZXJzaW9uKSk7XFxuIDc0MjpcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZHJ2aW5mbykge1xcbiA3NDM6XFx0XFx0XFx0b3BzLVxcdTAwM2VnZXRfZHJ2aW5mbyhkZXYsIFxcdTAwMjZyc3AtXFx1MDAzZWluZm8pO1xcbiA3NDQ6XFx0XFx0XFx0aWYgKCFyc3AtXFx1MDAzZWluZm8uYnVzX2luZm9bMF0gXFx1MDAyNlxcdTAwMjYgcGFyZW50KVxcbiA3NDU6XFx0XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXFxuIDc0NjpcXHRcXHRcXHRcXHRcXHRzaXplb2YocnNwLVxcdTAwM2VpbmZvLmJ1c19pbmZvKSk7XFxuIDc0NzpcXHRcXHRcXHRpZiAoIXJzcC1cXHUwMDNlaW5mby5kcml2ZXJbMF0gXFx1MDAyNlxcdTAwMjYgcGFyZW50IFxcdTAwMjZcXHUwMDI2IHBhcmVudC1cXHUwMDNlZHJpdmVyKVxcbiA3NDg6XFx0XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uZHJpdmVyLCBwYXJlbnQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdHNpemVvZihyc3AtXFx1MDAzZWluZm8uZHJpdmVyKSk7XFxuIDc1MDpcXHRcXHR9IGVsc2UgaWYgKHBhcmVudCBcXHUwMDI2XFx1MDAyNiBwYXJlbnQtXFx1MDAzZWRyaXZlcikge1xcbiA3NTE6XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXFxuIDc1MjpcXHRcXHRcXHRcXHRzaXplb2YocnNwLVxcdTAwM2VpbmZvLmJ1c19pbmZvKSk7XFxuIDc1MzpcXHRcXHRcXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby5kcml2ZXIsIHBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2VuYW1lLFxcbiA3NTQ6XFx0XFx0XFx0XFx0c2l6ZW9mKHJzcC1cXHUwMDNlaW5mby5kcml2ZXIpKTtcXG4gNzU1OlxcdFxcdH0gZWxzZSBpZiAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzKSB7XFxuIDc1NjpcXHRcXHRcXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby5kcml2ZXIsIGRldi1cXHUwMDNlcnRubF9saW5rX29wcy1cXHUwMDNla2luZCxcXG4gNzU3OlxcdFxcdFxcdFxcdHNpemVvZihyc3AtXFx1MDAzZWluZm8uZHJpdmVyKSk7XFxuIDc1ODpcXHRcXHR9IGVsc2Uge1xcbiA3NTk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA3NjA6XFx0XFx0fVxcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHQvKlxcbiA3NjM6XFx0XFx0ICogdGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIHN0cmluZyBzZXQgaW5mbyBpcyBkZXByZWNhdGVkO1xcbiA3NjQ6XFx0XFx0ICogVXNlIEVUSFRPT0xfR1NTRVRfSU5GTyBpbnN0ZWFkLlxcbiA3NjU6XFx0XFx0ICovXFxuIDc2NjpcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudCkge1xcbiA3Njc6XFx0XFx0XFx0aW50IHJjO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRcXHRyYyA9IG9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfVEVTVCk7XFxuIDc3MDpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzcxOlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby50ZXN0aW5mb19sZW4gPSByYztcXG4gNzcyOlxcdFxcdFxcdHJjID0gb3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19TVEFUUyk7XFxuIDc3MzpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzc0OlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby5uX3N0YXRzID0gcmM7XFxuIDc3NTpcXHRcXHRcXHRyYyA9IG9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfUFJJVl9GTEFHUyk7XFxuIDc3NjpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzc3OlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby5uX3ByaXZfZmxhZ3MgPSByYztcXG4gNzc4OlxcdFxcdH1cXG4gNzc5OlxcdFxcdGlmIChvcHMtXFx1MDAzZWdldF9yZWdzX2xlbikge1xcbiA3ODA6XFx0XFx0XFx0aW50IHJldCA9IG9wcy1cXHUwMDNlZ2V0X3JlZ3NfbGVuKGRldik7XFxuIDc4MTpcXHRcXG4gNzgyOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiA3ODM6XFx0XFx0XFx0XFx0cnNwLVxcdTAwM2VpbmZvLnJlZ2R1bXBfbGVuID0gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoxMi4zNjkwMjY4MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDIyNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaWdnaW5nIGludG8gYGV0aHRvb2xfZ2V0X2RydmluZm9gKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqZXhhY3RseSogaXMgYHJzcC1cdTAwM2VkZXZsaW5rYCBnZXR0aW5nIGl0cyB2YWx1ZSBzZXQ/IEkgc2VlIGl0J3MgYmVpbmcgdXNlZCwgYnV0IEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIHRoYXQgcG9pbnRlciBpcyBhY3R1YWxseSBnZXR0aW5nIHBvcHVsYXRlZCB3aXRoIHVzZWZ1bCBkYXRhLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZWFkIG1vcmUgb2YgdGhlIGBldGh0b29sX2dldF9kcnZpbmZvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgYWxsIHRoZSBwb3NzaWJsZSBjb2RlIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGVyZSB0aGF0IGNydWNpYWwgYXNzaWdubWVudCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgZm9sbG93IHRoYXQgdmFyaWFibGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoxNi43MjkyNTY2MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzg0OlxcdFxcdH1cXG4gNzg1OlxcdFxcbiA3ODY6XFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VlcHJvbV9sZW4pXFxuIDc4NzpcXHRcXHRcXHRyc3AtXFx1MDAzZWluZm8uZWVkdW1wX2xlbiA9IG9wcy1cXHUwMDNlZ2V0X2VlcHJvbV9sZW4oZGV2KTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKCFyc3AtXFx1MDAzZWluZm8uZndfdmVyc2lvblswXSlcXG4gNzkwOlxcdFxcdFxcdHJzcC1cXHUwMDNlZGV2bGluayA9IG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRyZXR1cm4gMDtcXG4gNzkzOlxcdH1cXG4gNzk0OlxcdFxcbiA3OTU6XFx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9nZXRfc3NldF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IGV0aHRvb2xfc3NldF9pbmZvIGluZm87XFxuIDc5OTpcXHRcXHR1NjQgc3NldF9tYXNrO1xcbiA4MDA6XFx0XFx0aW50IGksIGlkeCA9IDAsIG5fYml0cyA9IDAsIHJldCwgcmM7XFxuIDgwMTpcXHRcXHR1MzIgKmluZm9fYnVmID0gTlVMTDtcXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpbmZvLCB1c2VyYWRkciwgc2l6ZW9mKGluZm8pKSlcXG4gODA0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHQvKiBzdG9yZSBjb3B5IG9mIG1hc2ssIGJlY2F1c2Ugd2UgemVybyBzdHJ1Y3QgbGF0ZXIgb24gKi9cXG4gODA3OlxcdFxcdHNzZXRfbWFzayA9IGluZm8uc3NldF9tYXNrO1xcbiA4MDg6XFx0XFx0aWYgKCFzc2V0X21hc2spXFxuIDgwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0LyogY2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqL1xcbiA4MTI6XFx0XFx0bl9iaXRzID0gaHdlaWdodDY0KHNzZXRfbWFzayk7XFxuIDgxMzpcXHRcXG4gODE0OlxcdFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4gODE1OlxcdFxcdGluZm8uY21kID0gRVRIVE9PTF9HU1NFVF9JTkZPO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpbmZvX2J1ZiA9IGtjYWxsb2Mobl9iaXRzLCBzaXplb2YodTMyKSwgR0ZQX1VTRVIpO1xcbiA4MTg6XFx0XFx0aWYgKCFpbmZvX2J1ZilcXG4gODE5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHQvKlxcbiA4MjI6XFx0XFx0ICogZmlsbCByZXR1cm4gYnVmZmVyIGJhc2VkIG9uIGlucHV0IGJpdG1hc2sgYW5kIHN1Y2Nlc3NmdWxcXG4gODIzOlxcdFxcdCAqIGdldF9zc2V0X2NvdW50IHJldHVyblxcbiA4MjQ6XFx0XFx0ICovXFxuIDgyNTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNjQ7IGkrKykge1xcbiA4MjY6XFx0XFx0XFx0aWYgKCEoc3NldF9tYXNrIFxcdTAwMjYgKDFVTEwgXFx1MDAzY1xcdTAwM2MgaSkpKVxcbiA4Mjc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyODpcXHRcXG4gODI5OlxcdFxcdFxcdHJjID0gX19ldGh0b29sX2dldF9zc2V0X2NvdW50KGRldiwgaSk7XFxuIDgzMDpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMCkge1xcbiA4MzE6XFx0XFx0XFx0XFx0aW5mby5zc2V0X21hc2sgfD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgaSk7XFxuIDgzMjpcXHRcXHRcXHRcXHRpbmZvX2J1ZltpZHgrK10gPSByYztcXG4gODMzOlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MTYuNzI5NDI4NDMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQ5NDgxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTGluayBGaXJtd2FyZSBWZXJzaW9uIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIGlmIHRoZSBkZXZpY2UgZHJpdmVyIGRvZXNuJ3QgZXhwbGljaXRseSBwcm92aWRlIGEgZmlybXdhcmUgdmVyc2lvbiAoYCFyc3AtXHUwMDNlaW5mby5md192ZXJzaW9uWzBdYCksIHRoZSBjb2RlIGludGVsbGlnZW50bHkgdHJpZXMgdG8gZmV0Y2ggaXQgdXNpbmcgYG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpYCDigJMgYSBzdGFuZGFyZCwgZXhwZWN0ZWQgZmxvdy4gVGhpcyBpcyBnb29kLCBub3RoaW5nIHVudXN1YWwgdGhlcmUuXG5cblRoaXMgcGF0Y2gsIGhvd2V2ZXIsIHRvdWNoZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEdpdmVuIHRoYXQgYE5FVF9ERVZMSU5LYCBpcyBjb250cm9sbGVkIGJ5IGBORVRERVZTSU1gLCBhZGRpbmcgYE5FVERFVlNJTWAgdG8gZW5hYmxlIHRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBhbmQgYXBwcm9wcmlhdGUgc29sdXRpb24uIEFjdHVhbGx5LCB3YWl0IGEgbW9tZW50LiBgTkVUX0RFVkxJTktgIGdldHMgYnVpbHQtaW4gaWYgKmFueSogZHJpdmVyIHRoYXQgc2VsZWN0cyBpdCBpcyBidWlsdC1pbi4gVGhhdCBjb3VsZCBpbXBhY3QgdGhpcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBkb3VibGUtY2hlY2sgYG5ldC9kZXZsaW5rL2Rldi5jYC5cblxuUmlnaHQsIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgcmVsaWVzIG9uIGBkZXZsaW5rX2luZm9fcmVxYCwgY29uc3RydWN0cyBhIE5ldGxpbmsgbWVzc2FnZSwgYW5kIHVzZXMgYGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWluZm9fZ2V0YCB0byBnZXQgdGhlIHJ1bm5pbmcgdmVyc2lvbi4gVGhpcyBjbGVhcmx5IGRlZmluZXMgYSBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZSBwYXRoLiBJJ20gZmFpcmx5IGNvbmZpZGVudCB0aGlzIHdpbGwgd29yay5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWU6IGlzIGp1c3QgYWRkaW5nIGBORVRERVZTSU1gIGVub3VnaD8gYE5FVERFVlNJTWAgZG9lcyBzZWxlY3QgYE5FVF9ERVZMSU5LYCwgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGBORVRERVZTSU1gIGJlbG9uZ3MgaW4gYEVuYWJsZUNvbmZpZ3NgLiBCdXQsIHNob3VsZCBJIGNvbnNpZGVyIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gYEVUSFRPT0xfTkVUTElOS2Agc3ByaW5ncyB0byBtaW5kLCBidXQgdGhhdCdzIGFuIGlvY3RsLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIHN1Z2dlc3RzIGEgZGlmZmVyZW50IGFwcHJvYWNoIGFsdG9nZXRoZXIuIFNvLCBiYWNrIHRvIHRoZSBjb3JlLiBEb2VzIGBORVRERVZTSU1gIHByb3ZpZGUgYGluZm9fZ2V0YCBpbiB0aGUgZGV2bGluayBvcGVyYXRpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgc3VwcG9ydGVkIGJ5IHRoZSBzaW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjIyLjg5NDM3OTg4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3OTM3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZm9fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTEwNDI9c3RhdGljIGludCBuc2ltX2Rldl9yZWxvYWRfdXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGVudW0gZGV2bGlua19yZWxvYWRfYWN0aW9uIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDYwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDYxOnN0YXRpYyBpbnQgbnNpbV9kZXZfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwNjItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDMxLVxcdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE0MzI6XFx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzMtXFx0LmZsYXNoX3VwZGF0ZSA9IG5zaW1fZGV2X2ZsYXNoX3VwZGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MjMuNDUyMzI1MzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NjU3Nzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbXBhdGliaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgbmV0ZGV2c2ltYCBkb2VzIGluZGVlZCBpbXBsZW1lbnQgYGluZm9fZ2V0YC4gVGhhdCdzIGEgZ3JlYXQgc3RhcnQ7IHRoZSB3aG9sZSBgTkVUREVWU0lNYCBhbmdsZSBsb29rcyBwcm9taXNpbmcuXG5cbk5vdywgbXkgcHJpbWFyeSB0YXNrIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcsIGFuZCB0byBldmFsdWF0ZSB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiBhbGwgcmVsZXZhbnQgc3ltYm9scy5cblxuUmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHdpdGhpbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTbyB0aGF0IHBvaW50cyBkaXJlY3RseSB0byBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFzIG9uZSBrZXkgZm9jdXMuIEFuZCwgb2YgY291cnNlLCB0aGUgbm9uLXVuZGVyc2NvcmVkIHZlcnNpb24gYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2hpY2ggc2hvdWxkIGJlIGNvbnNpZGVyZWQsIHRvby4gQWgsIGJ1dCB3YWl0LCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCBjb21wbGljYXRlcyB0aGluZ3MgYSBsaXR0bGUg4oCTIGJ1dCBJIHNob3VsZCBsaXN0IGJvdGgganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlIGNvdmVyZWQgYWxsIGJhc2VzIGFuZCBhdm9pZCBhbnkgZ290Y2hhcy4gSSB3aWxsIGZvY3VzIG9uIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIG9yIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmBcblxuTGV0J3MgY2hlY2sgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbid0IGFsc28gZGVwZW5kZW50IG9uIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgaW5kZWVkIGFueSBvdGhlciBjb2RlIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzLCB0byBlbnN1cmUgbm8gc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoyOC40MTg5MDY3OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE2NDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxcbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jPTEyMjQ9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MjguNTQwMDc4MDU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzUwNTc0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIENvbXBhdGliaWxpdHkgVmVyc2lvbiBVcGRhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSByZWFsaXplIHRoYXQgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGlzbid0IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEkgc2VlIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYE5FVERFVlNJTWAsIGFuZCBzaW5jZSBgTkVUREVWU0lNYCBnaXZlcyBtZSBhIHNvZnR3YXJlIGRldmljZSB0aGF0IHV0aWxpemVzIGRldmxpbmssIHRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJ3Qgc2VlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgYHNlcV9idWZgIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIGNvcmUga2VybmVsLlxuXG5MZXQgbWUgZ28gdGhyb3VnaCB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluLiBJdCdzIGNoYW5naW5nIGhvdyBhIHZlcnNpb24gc3RyaW5nIGlzIGJ1aWx0LiBQcmV2aW91c2x5LCBpdCB1c2VkIGBzdHJsY2F0YC4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgc2VxX2J1Zl9wcmludGZgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIHBvdGVudGlhbGx5IHNhZmVyLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlZ2FyZGluZyBgc3RybGNhdGAgd2hlcmUgaXQgbWlnaHQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBubGFfZGF0YShrdilgIGRhdGEsIGlmIGl0IHdhcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBvciBqdXN0IGdlbmVyYWwgdXNlIGNhc2Ugc2FmZXR5IHVzaW5nIGBzZXFfYnVmX3ByaW50ZmAuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGVyZSdzIGEgdHlwZSBjYXN0IHRvIGAoY29uc3QgY2hhciAqKWAgYW5kIHByaW50cyB3aXRoIGAlc2AsIHdoaWNoIHN0aWxsIHJlbGllcyBvbiBudWxsLXRlcm1pbmF0aW9uLiBCdXQgYHNlcV9idWZfcHJpbnRmYCBoYW5kbGVzIGJ1ZmZlciBib3VuZGFyaWVzIG11Y2ggYmV0dGVyLiBJIGFtIHJlbWVtYmVyaW5nIHRoYXQgYHN0cmxjYXRgIHJlcXVpcmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGBidWZgIGlzIGEgdmFsaWQgQyBzdHJpbmcgYW5kIHRoYXQgaXQgaGFzIHRvIGJlIG51bGwtdGVybWluYXRlZCB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlci4gVGhlIHVwZGF0ZWQgY29kZSB1c2VzIGBzZXFfYnVmX2luaXRgIGFuZCB1c2VzIGBzdHJubGVuKGJ1ZiwgbGVuKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzYWZlciBjaG9pY2UuXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjaGFuZ2UuIEl0IGlzIGxpa2VseSBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGZ1enppbmcgb24gdGhpcyBhcmVhLlxuXG5UbyB0ZXN0IHRoaXMgY2hhbmdlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGJlOlxuXG4qICAgYE5FVERFVlNJTWAgKHRvIGVuYWJsZSBhIGRyaXZlciB0aGF0IHVzZXMgZGV2bGluayBhbmQgaW1wbGVtZW50cyBgaW5mb19nZXRgKVxuXG5UaGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBleGFtaW5lIGFyZTpcblxuKiAgIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmBcbiogICBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYFxuXG5JJ2xsIGNoZWNrIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGluIGBuZXQvZGV2bGluay9kZXYuY2AgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjM3LjcxNTEzODEzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRmcmVlX21zZzpcXG4xMjIxOlxcdFxcdG5sbXNnX2NvbnN1bWUobXNnKTtcXG4xMjIyOlxcdH1cXG4xMjIzOlxcdFxcbjEyMjQ6XFx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjEyMjY6XFx0e1xcbjEyMjc6XFx0XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KVxcbjEyMjg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRkZXZsX2xvY2soZGV2bGluayk7XFxuMTIzMTpcXHRcXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKVxcbjEyMzI6XFx0XFx0XFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xcbjEyMzM6XFx0XFx0ZGV2bF91bmxvY2soZGV2bGluayk7XFxuMTIzNDpcXHR9XFxuMTIzNTpcXHRcXG4xMjM2OlxcdGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcXG4xMjM3OlxcdHtcXG4xMjM4OlxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XFxuMTIzOTpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODozNy43MTUyNzA4OTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTA2NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIFZhcmlhYmxlKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgdGhpcyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCB0aGluZy4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGl0LCBvciBhdCBsZWFzdCB1c2luZyBpdCBzb21ld2hlcmUsIHByb2JhYmx5IGFjcm9zcyBmaWxlcywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFuZCB1c2VkIGluIGBpbmNsdWRlL25ldC9kZXZsaW5rLmhgLiBFeGNlbGxlbnQuIE5vdywgd2hlcmUgaXMgaXQgKmNhbGxlZCogZnJvbT8gQWgsIGhlcmUgd2UgZ28sIGl0J3MgY2FsbGVkIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgLlxuXG5BaGEhIE5vdywgYSBxdWljayBjaGVjayBvZiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBpbiBvcmRlciBoZXJlLiBMZXQncyB0aGluaywgaXMgYG5ldC9ldGh0b29sL2lvY3RsLmNgIHNvbWV0aGluZyB0aGF0J3MgYnVpbHQgYnkgZGVmYXVsdD8gWWVzLCBpdCBpcyEgRXRodG9vbCBpcyBjb3JlIG5ldHdvcmtpbmcsIHNvIGl0J3MgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBjb21waWxlZCBhbmQgbGlua2VkLiBHb29kLCB0aGF0IGNvbmZpcm1zIGEgYmFzZWxpbmUgZm9yIG15IGludmVzdGlnYXRpb24uIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgLiBJIHdpbGwgY2hlY2sgaWYgaXQgY2FuIGJlIGRpc2FibGVkIGJ1dCBub3JtYWxseSBpdCBpcyBhIGtleSBjb21wb25lbnQgdG8gbmV0d29ya2luZyBhbmQgd2lsbCBiZSBpbmNsdWRlZCBieSBkZWZhdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjQxLjQ1NjM0MDY4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwODc4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jdGwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZS0yLVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQrPSBpb2N0bC5vIGNvbW1vbi5vXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6NDEuNTM0NDMzNTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTIxNTgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGlvY3RsLm9gKipcblxuUmlnaHQsIHNvIGBpb2N0bC5vYCBpcyBhbHdheXMgYnVpbHQuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBtYWluIHF1ZXN0aW9uIGlzIGFyb3VuZCB0aG9zZSBgTkVUREVWU0lNYCBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IERvZXMgZW5hYmxpbmcgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxsIGluIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gQmVzdCB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCBgTkVUREVWU0lNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODo0NC41NDY1OTM0ODlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFxuIDYwMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcXFwiXFxuIDYwMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbiA2MDM6XFx0XFxuIDYwNDpcXHRjb25maWcgTkVUREVWU0lNXFxuIDYwNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiA2MDY6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiA2MDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDYwODpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXFxuIDYwOTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuIDYxMDpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gNjExOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gNjEyOlxcdFxcdHNlbGVjdCBORVRfU0hBUEVSXFxuIDYxMzpcXHRcXHRoZWxwXFxuIDYxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cXG4gNjE1OlxcdFxcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxcbiA2MTY6XFx0XFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA2MTk6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZXRkZXZzaW0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjQ0LjU0NjY3MTAzOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjkyMzYxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgb25lIGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgREVCVUdfRlNgIGFuZCBgSU5FVGAuIEdlbmVyYWxseSwgdGhvc2UgYXJlIHN0YW5kYXJkIGZhcmUgaW4gc3l6a2FsbGVyIHNldHVwcywgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgcGxhbiBpcyB0byBpbmNsdWRlIGBORVRERVZTSU1gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBzdHJsY2F0YCBmb3IgYHNlcV9idWZfcHJpbnRmYCB3aXRoaW4gdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24uIFRoYXQncyBhIGRpcmVjdCBtb3ZlIHRvIGltcHJvdmUgYnVmZmVyIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIHZlcnNpb24gcmV0cmlldmFsIHRocm91Z2ggZGV2bGluay4gQW5kIHNpbmNlIHRoYXQgY2hhbmdlIG9jY3VycyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKSwgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuXG5cblRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgd2lsbCBiZSBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gQW5kLCBhcyBzdGF0ZWQgZWFybGllciwgdGhlIGBORVRERVZTSU1gIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZCB0byBtYXhpbWl6ZSB0aGlzIGZ1enppbmcuXG5cbkknbSBub3cgY29uZmlkZW50IGluIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZXR0aW5ncyBmb3IgdGhpcyBydW4sIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0OCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODo0OS4yMzkwMzQ0OTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg1MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 03:56:36 +0000 UTC FinishedAt: 2026-07-04 04:18:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM" ], "series_id": "73bb8809-6c18-4fb4-9947-ad5ba5eeb149" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__devlink_compat_running_version", "devlink_compat_running_version" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzFlZDE3YWQ1MzgyNWUwZTNjMjBjYTlkODk3MDYwNzE5NjA0MzAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMDQ6MTc6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggNTdiMmI4ZjAzNTQzNmIuLjBkNDMwMTI2NzE3MTcwIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2J1Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2RldmxfaW50ZXJuYWwuaFwmIzM0O1xuQEAgLTExODgsOCAmIzQzOzExODksMTAgQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdFx0XHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxIHJlcSA9IHt9O1xuJiM0MztcdHNpemVfdCB1c2VkID0gc3RybmxlbihidWYsIGxlbik7XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuJiM0MztcdHN0cnVjdCBzZXFfYnVmIHNiO1xuIFx0aW50IHJlbSwgZXJyO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTIwMSw2ICYjNDM7MTIwNCw4IEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX21zZztcbiBcbiYjNDM7XHRzZXFfYnVmX2luaXQoXHUwMDI2c2IsIGJ1ZiAmIzQzOyB1c2VkLCBsZW4gLSB1c2VkKTtcbiYjNDM7XG4gXHRubGFfZm9yX2VhY2hfYXR0cl90eXBlKG5sYXR0ciwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9SVU5OSU5HLFxuIFx0XHRcdCAgICAgICAodm9pZCAqKW1zZy1cdTAwM2VkYXRhLCBtc2ctXHUwMDNlbGVuLCByZW0pIHtcbiBcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7XG5AQCAtMTIwOCw4ICYjNDM7MTIxMyw4IEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFxuIFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUoa3YsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fVkFMVUUsXG4gXHRcdFx0XHRcdCBubGF0dHIsIHJlbV9rdikge1xuLVx0XHRcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XG4tXHRcdFx0c3RybGNhdChidWYsIFwmIzM0OyBcJiMzNDssIGxlbik7XG4mIzQzO1x0XHRcdHNlcV9idWZfcHJpbnRmKFx1MDAyNnNiLCBcJiMzNDslcyBcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIChjb25zdCBjaGFyICopbmxhX2RhdGEoa3YpKTtcbiBcdFx0fVxuIFx0fVxuIGZyZWVfbXNnOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMWVkMTdhZDUzODI1ZTBlM2MyMGNhOWQ4OTcwNjA3MTk2MDQzMDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgNCAwNDoxNzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmMKaW5kZXggNTdiMmI4ZjAzNTQzNmIuLjBkNDMwMTI2NzE3MTcwIDEwMDY0NAotLS0gYS9uZXQvZGV2bGluay9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXYuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zZXFfYnVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2RldmxfaW50ZXJuYWwuaCYjMzQ7CkBAIC0xMTg4LDggJiM0MzsxMTg5LDEwIEBAIHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQkJCQkgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTsKJiM0MzsJc2l6ZV90IHVzZWQgPSBzdHJubGVuKGJ1ZiwgbGVuKTsKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKJiM0MzsJc3RydWN0IHNlcV9idWYgc2I7CiAJaW50IHJlbSwgZXJyOwogCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC0xMjAxLDYgJiM0MzsxMjA0LDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAJaWYgKGVycikKIAkJZ290byBmcmVlX21zZzsKIAomIzQzOwlzZXFfYnVmX2luaXQoJmFtcDtzYiwgYnVmICYjNDM7IHVzZWQsIGxlbiAtIHVzZWQpOwomIzQzOwogCW5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsCiAJCQkgICAgICAgKHZvaWQgKiltc2ctJmd0O2RhdGEsIG1zZy0mZ3Q7bGVuLCByZW0pIHsKIAkJY29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7CkBAIC0xMjA4LDggJiM0MzsxMjEzLDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLAogCQkJCQkgbmxhdHRyLCByZW1fa3YpIHsKLQkJCXN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7Ci0JCQlzdHJsY2F0KGJ1ZiwgJiMzNDsgJiMzNDssIGxlbik7CiYjNDM7CQkJc2VxX2J1Zl9wcmludGYoJmFtcDtzYiwgJiMzNDslcyAmIzM0OywKJiM0MzsJCQkJICAgICAgIChjb25zdCBjaGFyICopbmxhX2RhdGEoa3YpKTsKIAkJfQogCX0KIGZyZWVfbXNnOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L2RldmxpbmsvZGV2LmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvZGV2bGluay9kZXYuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTt2ZSBtYWRlIGEgcGVyZm9ybWFuY2Ugb3Igc2FmZXR5IGltcHJvdmVtZW50LCBhcyB0aGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmxjYXRgIHdpdGggYHNlcV9idWZfcHJpbnRmYCwgdXRpbGl6aW5nIGEgYHNlcV9idWZgLiBUaGlzIHVzdWFsbHkgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBhdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvcHRpbWl6ZSBzdHJpbmcgbWFuaXB1bGF0aW9uLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnkgYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbW1lZGlhdGVseSB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGxzIHRvIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24uIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9uIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmM9MTEzND1pbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTExODctXG5uZXQvZGV2bGluay9kZXYuYzoxMTg4OnN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxubmV0L2RldmxpbmsvZGV2LmM9MTIyND12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbi0tXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2Rldi5jOjEyMzI6XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMtXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBpbXBhY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgZGl2ZSBpbiBhbmQgdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSBvZiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCByZXZlYWwgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIHB1cnBvc2UgaXQgc2VydmVzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aG9zZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyB0cnVlIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMDg9dm9pZCBkZXZsaW5rX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEwOS1cbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTEwOnZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMTEtXHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbi0tXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEzMz1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTM0OmRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMzUte1xuLS1cbm5ldC9kZXZsaW5rL2Rldi5jPTExMzQ9aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxubmV0L2RldmxpbmsvZGV2LmM6MTE4ODpzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9kZXZsaW5rL2Rldi5jLTExODktXHRcdFx0XHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMjMtXG5uZXQvZGV2bGluay9kZXYuYzoxMjI0OnZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2RldmxpbmsvZGV2LmMtMTIyNS1cdFx0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTIzMS1cdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOlx0XHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XG5uZXQvZGV2bGluay9kZXYuYy0xMjMzLVx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjQ2PWludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVx0XHRpZiAoc3RhdGUtXHUwMDNlZGV2bGluaylcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY4MTpcdFx0XHRkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RhdGUtXHUwMDNlZGV2bGluayxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cdFx0XHRcdFx0XHQgICAgICAgc3RhdGUtXHUwMDNlaW5mby5md192ZXJzaW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRyaWdnZXJlZCBieSBgZGV2X2V0aHRvb2xgLCB3aGljaCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBjbGVhcmx5IGRlZmluZWQgZW50cnkgcG9pbnQgYW5kIHNob3VsZCBiZSByZWFkaWx5IHRlc3RhYmxlLiBJIGNhbiB3b3JrIHdpdGggdGhhdC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZSwgdGhvdWdoLCBpcyBpbiBgbmV0L2RldmxpbmsvZGV2LmNgLCBzcGVjaWZpY2FsbHksIGl0IG1vZGlmaWVzIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEhtbSwgdGhhdCByaW5ncyBhIGJlbGwuLi4gb2ggeWVhaCwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGV0aHRvb2wgaW5mbyByZXRyaWV2YWwuIFNvLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGFmZmVjdGluZyBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCwgb3IgcmV0cmlldmVzIGluZm9ybWF0aW9uIGZyb20sIHRoZSBkZXZsaW5rIHN1YnN5c3RlbS4KCk5vdywgYSBxdWljayBjaGVjay4uLiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19ORVRfREVWTElOS2AuIElzIGRldmxpbmsgYSBjb3JlIHBhcnQgb2YgbmV0d29ya2luZywgb3IgaXMgaXQgYSBtb2R1bGU/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2RldmxpbmsvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaXRzIGJ1aWxkIHN0YXR1cy4gVGhhdCBzaG91bGQgY2xhcmlmeSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgZGVwZW5kZW5jeSBpc3N1ZXMgZHVyaW5nIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX0JSSURHRSlcdFx0JiM0Mzs9IGJyaWRnZS9cbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXHQmIzQzOz0gZGV2bGluay9cbm5ldC9NYWtlZmlsZS0yNy1vYmoteVx0XHRcdFx0JiM0Mzs9IGRzYS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5ldHdvcmsgRGV2aWNlIExpbmtpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIG5ldHdvcmsgZGV2aWNlIGxpbmtpbmcsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBJJiMzOTttIHNlZWluZyBpcyBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhlIHN1YmplY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgSSYjMzk7bSBhd2FyZSBvZiBhbGwgdGhlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUtMi1cbm5ldC9kZXZsaW5rL01ha2VmaWxlOjM6b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjQ6XHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2bGluayBDb21wYXRpYmlsaXR5IFZlcnNpb24gVXBkYXRlKioKCk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYWxsIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCBjb25maWd1cmF0aW9uLXdpc2UgaXMgYE5FVF9ERVZMSU5LYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gLSBpdCYjMzk7cyBsaWtlbHkgb25lIG9mIHRob3NlLiBBaCwgdGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJsY2F0YCB3aXRoIGBzZXFfYnVmX3ByaW50ZmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYWN0dWFsbHkuIEl0JiMzOTtzIGFkZHJlc3NpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc3RyaW5nIHRydW5jYXRpb24sIHNvIGEgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IGltcHJvdmVtZW50LCBhbmQgYWxzbyBjaGFuZ2luZyBob3cgdGhlIHZlcnNpb24gc3RyaW5nIGlzIHB1dCB0b2dldGhlci4gV2FpdCwgSSBzZWUgbm93IC0gaXQmIzM5O3MgdXNpbmcgYHNlcV9idWZfcHJpbnRmYC4gT2theSwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIHN0YXRpYy4uLlllcCwgaXQgaXMuIEFscmlnaHQsIHNvIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIHRoZSBhY3R1YWwgZXhwb3J0ZWQgZnVuY3Rpb24gdGhlbi4gRmluYWxseSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSB0eXBlIG9mIGBORVRfREVWTElOS2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBoYW5kbGVzIHRoZSBjb25maWcgYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9ERVZMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcbi0tXG5uZXQvS2NvbmZpZy00ODYtXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXG5uZXQvS2NvbmZpZy00ODgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpc3NlY3RpbmcgYSBEcml2ZXIgQ29uZmlndXJhdGlvbiBTZXR0aW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBkcml2ZXIgc2V0dGluZywgYW5kIGl0IHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgYSBzaW1wbGUgb24vb2ZmIHNlbGVjdGlvbiBmb3IgZHJpdmVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYSBib29sZWFuLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgKndoeSo/JiMzNDsuIEkgc3RhcnQgd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpkcml2aW5nKiB0aGlzIHNlbGVjdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB0cmlnZ2VyIHRoZSBzZXR0aW5nIG9mIHRoaXMgYm9vbGVhbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGV4cGxpY2l0bHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLCBiZWNhdXNlIHRoYXQgbGlrZWx5IHByb3ZpZGVzIGltcG9ydGFudCBjbHVlcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfREVWTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MTEtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MTcxPWNvbmZpZyBDQU5fS1ZBU0VSX1BDSUVGRFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBQQ0llIEZEIGNhcmRzXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoxNzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTMzLVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcJiMzNDtcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTcwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnPTE5PWNvbmZpZyBFTkFfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZz0xNjk9Y29uZmlnIFBEU19DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnOjE3MzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTc0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjA3PWNvbmZpZyBCTlhUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Mi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz02OD1jb25maWcgTElRVUlESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3NjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc9Mj1jb25maWcgRlNMX0RQQUEyX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXHRzZWxlY3QgRlNMX1hHTUFDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnOjg6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWc9Nj1jb25maWcgRlVOX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cdHNlbGVjdCBGVU5fQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gKFBDSV9NU0kgXHUwMDI2XHUwMDI2IChYODYgfHwgQVJNNjQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xNDU9Y29uZmlnIElYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTAtXHRzZWxlY3QgTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUyLVx0c2VsZWN0IFBMRE1GV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjI5PWNvbmZpZyBJNDBFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzUtXHRzZWxlY3QgTElCSUVfQURNSU5RXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzAyLVx0c2VsZWN0IExJQklFX0ZXTE9HIGlmIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDQtXHRzZWxlY3QgUEFDS0lOR1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMS1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc9Nj1jb25maWcgUFJFU1RFUkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cdGRlcGVuZHMgb24gQlJJREdFIHx8IEJSSURHRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTI4PWNvbmZpZyBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzMtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz02PWNvbmZpZyBNTFg1X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMS1cdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZz02PWNvbmZpZyBNTFhGV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXHRzZWxlY3QgWFpfREVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6ODpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVx0c2VsZWN0IE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyNzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjMtXHRkZXBlbmRzIG9uIFRMUyBcdTAwMjZcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yNS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWc9NzY9Y29uZmlnIFFFRFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWc9MTk9Y29uZmlnIFNGQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTE0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cdHNlbGVjdCBSRUdNQVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzUtXHRpbXBseSBQSFlfVElfR01JSV9TRUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDAtXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBORVRERVZTSU0qKgoKT2theSwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxscyBpbiBgTkVUX0RFVkxJTktgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcXVpdGUgdXNlZnVsLiBTaW5jZSBgTkVUX0RFVkxJTktgIGlzIHJlbGF0ZWQgdG8gZGV2aWNlIGxpbmsgZnVuY3Rpb25hbGl0eSwgaGF2aW5nIGEgc2ltdWxhdGVkIGRldmljZSwgYXMgcHJvdmlkZWQgYnkgYE5FVERFVlNJTWAsIHdvdWxkIGJlIGEgcGVyZmVjdCB3YXkgdG8gdGVzdCBhbmQgZGVidWcgYW55IGRldmxpbmstcmVsYXRlZCBjb2RlLiBJdCYjMzk7cyBhIGxvdy1yaXNrLCBjb250cm9sbGVkIGVudmlyb25tZW50IGZvciBleHBsb3JpbmcgaG93IHRoZSBzeXN0ZW0gcmVhY3RzLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGBORVRERVZTSU1gIHNlZW1zIGxpa2UgYSBzb2xpZCBjb25maWd1cmF0aW9uIGNob2ljZSBmb3IgYW55IGRldmVsb3BlciB3b3JraW5nIHdpdGgsIG9yIGludGVyZXN0ZWQgaW4sIGBORVRfREVWTElOS2AgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgTkVUREVWU0lNYCBtb2R1bGUgaXRzZWxmIGFuZCBzZWUgd2hhdCBmZWF0dXJlcyBpdCBhY3R1YWxseSBvZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUREVWU0lNYCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gaXNuJiMzOTt0IGBORVRfREVWTElOS2AgYWN0dWFsbHkgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZT8gSXQmIzM5O3MgdGhlIGNvcmUuIEJlZm9yZSBJIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gYE5FVERFVlNJTWAsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIGBuZXRkZXZzaW1gIGRyaXZlciBhY3R1YWxseSB1dGlsaXplIG9yIGRlcGVuZCBvbiB0aGUgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIGNoZWNrIGZyb20gYGRldmxpbmtgPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGZ1bmN0aW9uIGlzIGV2ZW4gY2FsbGVkICpieSogYG5ldGRldnNpbWAuIElmIGl0IGlzLCB0aGVuIHRoZSBsaW5rYWdlIGlzIGV4cGxpY2l0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGJvdGggZW5hYmxlZCwgd2l0aCB0aGUgcmlnaHQgdmVyc2lvbnMuIElmIG5vdCwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgb2YgYGRldmxpbmtgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVyIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZSB0cmFjZSBkb2VzbiYjMzk7dCBzaG93IGl0IG9yaWdpbmF0aW5nIGZyb20gYG5ldGRldnNpbWAsIHdoaWNoIGlzIG9kZC4gTXkgaW50dWl0aW9uIHNheXMgdGhlcmUgaXMgYSBzaW1wbGUgcmVhc29uLgoKQWxyaWdodCwgYSBjbHVlIHBvcHMgdXA6IGBkZXZfZXRodG9vbGAgaXMgY2FsbGluZyBpdC4gTm93LCB0aGF0IHJpbmdzIGEgYmVsbCEgYGRldl9ldGh0b29sYCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGBldGh0b29sYCBpcyBhIHRvb2wgZm9yIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBjb21wYXRpYmlsaXR5IGNoZWNrcyBvZnRlbiBmYWxsIHVuZGVyIGl0cyBwdXJ2aWV3LgoKVGltZSB0byBjb25maXJtIHRoaXM7IEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG5ldC9ldGh0b29sL2lvY3RsLmNgIGFuZCBkaWcgaW50byB0aGUgY29kZSBzdXJyb3VuZGluZyBgZGV2X2V0aHRvb2xgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEkmIzM5O2xsIGJldCBJJiMzOTtsbCBmaW5kIG15IGFuc3dlciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4MC1cdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XHRcdFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVx1MDAzZWRldmxpbmssXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2ODItXHRcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgRHJpdmVyIEluZm8gUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBkZXZfZXRodG9vbGAg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQmIzM5O3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgZXRodG9vbCBvcGVyYXRpb25zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGdyYWIgZXRodG9vbCBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXIgaW5mb3JtYXRpb24sIGFzIGluZGljYXRlZCBieSBgZXRodG9vbF9nZXRfZHJ2aW5mb2AuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhpcyBpcyBsaWtlbHkgd2l0aGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBmb3IgZXRodG9vbCBmdW5jdGlvbnMgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgYGRldl9ldGh0b29sYCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBldGh0b29sX2dldF9kcnZpbmZvYC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGZsb3cgYW5kIHNlZSB3aGVyZSB0aGUgYWN0dWFsIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBiZWluZyBjb2xsZWN0ZWQgYW5kIHByZXNlbnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbjM2NTA6XHRcdGludCByYztcbjM2NTE6XHRcbjM2NTI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpXG4zNjUzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzY1NDpcdFxuMzY1NTpcdFx0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuMzY1NjpcdFx0aWYgKCFzdGF0ZSlcbjM2NTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNjU4Olx0XG4zNjU5Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzY2MDpcdFx0Y2FzZSBFVEhUT09MX0ZMQVNIREVWOlxuMzY2MTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3RhdGUtXHUwMDNlZWZsLCB1c2VyYWRkciwgc2l6ZW9mKHN0YXRlLVx1MDAzZWVmbCkpKSB7XG4zNjYyOlx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuMzY2MzpcdFx0XHRcdGdvdG8gZXhpdF9mcmVlO1xuMzY2NDpcdFx0XHR9XG4zNjY1Olx0XHRcdHN0YXRlLVx1MDAzZWVmbC5kYXRhW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FIC0gMV0gPSAwO1xuMzY2NjpcdFx0XHRicmVhaztcbjM2Njc6XHRcdH1cbjM2Njg6XHRcbjM2Njk6XHRcdHJjID0gX19kZXZfZXRodG9vbChuZXQsIGlmciwgdXNlcmFkZHIsIGV0aGNtZCwgc3RhdGUpO1xuMzY3MDpcdFx0aWYgKHJjKVxuMzY3MTpcdFx0XHRnb3RvIGV4aXRfZnJlZTtcbjM2NzI6XHRcbjM2NzM6XHRcdHN3aXRjaCAoZXRoY21kKSB7XG4zNjc0Olx0XHRjYXNlIEVUSFRPT0xfRkxBU0hERVY6XG4zNjc1Olx0XHRcdGlmIChzdGF0ZS1cdTAwM2VkZXZsaW5rKVxuMzY3NjpcdFx0XHRcdHJjID0gZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0YXRlLVx1MDAzZWRldmxpbmssXG4zNjc3Olx0XHRcdFx0XHRcdFx0XHQgc3RhdGUtXHUwMDNlZWZsLmRhdGEpO1xuMzY3ODpcdFx0XHRicmVhaztcbjM2Nzk6XHRcdGNhc2UgRVRIVE9PTF9HRFJWSU5GTzpcbjM2ODA6XHRcdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG4zNjgxOlx0XHRcdFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVx1MDAzZWRldmxpbmssXG4zNjgyOlx0XHRcdFx0XHRcdFx0ICAgICAgIHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbixcbjM2ODM6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0YXRlLVx1MDAzZWluZm8uZndfdmVyc2lvbikpO1xuMzY4NDpcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcdTAwMjZzdGF0ZS1cdTAwM2VpbmZvLCBzaXplb2Yoc3RhdGUtXHUwMDNlaW5mbykpKSB7XG4zNjg1Olx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuMzY4NjpcdFx0XHRcdGdvdG8gZXhpdF9mcmVlO1xuMzY4NzpcdFx0XHR9XG4zNjg4Olx0XHRcdGJyZWFrO1xuMzY4OTpcdFx0fVxuMzY5MDpcdFxuMzY5MTpcdGV4aXRfZnJlZTpcbjM2OTI6XHRcdGlmIChzdGF0ZS1cdTAwM2VkZXZsaW5rKVxuMzY5MzpcdFx0XHRkZXZsaW5rX3B1dChzdGF0ZS1cdTAwM2VkZXZsaW5rKTtcbjM2OTQ6XHRcdGtmcmVlKHN0YXRlKTtcbjM2OTU6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEVUSFRPT0xfR0RSVklORk8gRmxvdyB3aXRoIERldmxpbmsqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgRVRIVE9PTF9HRFJWSU5GT2AgcmVxdWVzdCBjb21lcyBpbiAqYW5kKiBpZiBgc3RhdGUtJmd0O2RldmxpbmtgIGlzIHBvcHVsYXRlZC4gVGhhdCBgc3RhdGUtJmd0O2RldmxpbmtgIHBvaW50ZXIgaXMga2V5IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZ2V0cyBzZXQuIE15IGluaXRpYWwgaHVuY2gsIGZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgaXMgdGhhdCBgX19kZXZfZXRodG9vbGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLiBMZXQgbWUgY29uZmlybSB0aGF0IGJ5IGp1bXBpbmcgaW4gYW5kIGV4YW1pbmluZyBgX19kZXZfZXRodG9vbGAgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyBgc3RhdGUtJmd0O2RldmxpbmtgLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIFRpbWUgdG8gZGlnIGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1MDA6XHRcdGNhc2UgRVRIVE9PTF9TU0c6XG4zNTAxOlx0XHRjYXNlIEVUSFRPT0xfU1RTTzpcbjM1MDI6XHRcdGNhc2UgRVRIVE9PTF9TR1NPOlxuMzUwMzpcdFx0Y2FzZSBFVEhUT09MX1NHUk86XG4zNTA0Olx0XHRcdHJjID0gZXRodG9vbF9zZXRfb25lX2ZlYXR1cmUoZGV2LCB1c2VyYWRkciwgZXRoY21kKTtcbjM1MDU6XHRcdFx0YnJlYWs7XG4zNTA2Olx0XHRjYXNlIEVUSFRPT0xfR0NIQU5ORUxTOlxuMzUwNzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2NoYW5uZWxzKGRldiwgdXNlcmFkZHIpO1xuMzUwODpcdFx0XHRicmVhaztcbjM1MDk6XHRcdGNhc2UgRVRIVE9PTF9TQ0hBTk5FTFM6XG4zNTEwOlx0XHRcdHJjID0gZXRodG9vbF9zZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7XG4zNTExOlx0XHRcdGJyZWFrO1xuMzUxMjpcdFx0Y2FzZSBFVEhUT09MX1NFVF9EVU1QOlxuMzUxMzpcdFx0XHRyYyA9IGV0aHRvb2xfc2V0X2R1bXAoZGV2LCB1c2VyYWRkcik7XG4zNTE0Olx0XHRcdGJyZWFrO1xuMzUxNTpcdFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc6XG4zNTE2Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfZHVtcF9mbGFnKGRldiwgdXNlcmFkZHIpO1xuMzUxNzpcdFx0XHRicmVhaztcbjM1MTg6XHRcdGNhc2UgRVRIVE9PTF9HRVRfRFVNUF9EQVRBOlxuMzUxOTpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShkZXYsIHVzZXJhZGRyKTtcbjM1MjA6XHRcdFx0YnJlYWs7XG4zNTIxOlx0XHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XG4zNTIyOlx0XHRcdHJjID0gZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIHVzZXJhZGRyKTtcbjM1MjM6XHRcdFx0YnJlYWs7XG4zNTI0Olx0XHRjYXNlIEVUSFRPT0xfR01PRFVMRUlORk86XG4zNTI1Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2luZm8oZGV2LCB1c2VyYWRkcik7XG4zNTI2Olx0XHRcdGJyZWFrO1xuMzUyNzpcdFx0Y2FzZSBFVEhUT09MX0dNT0RVTEVFRVBST006XG4zNTI4Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbShkZXYsIHVzZXJhZGRyKTtcbjM1Mjk6XHRcdFx0YnJlYWs7XG4zNTMwOlx0XHRjYXNlIEVUSFRPT0xfR1RVTkFCTEU6XG4zNTMxOlx0XHRcdHJjID0gZXRodG9vbF9nZXRfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcbjM1MzI6XHRcdFx0YnJlYWs7XG4zNTMzOlx0XHRjYXNlIEVUSFRPT0xfU1RVTkFCTEU6XG4zNTM0Olx0XHRcdHJjID0gZXRodG9vbF9zZXRfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcbjM1MzU6XHRcdFx0YnJlYWs7XG4zNTM2Olx0XHRjYXNlIEVUSFRPT0xfR1BIWVNUQVRTOlxuMzUzNzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X3BoeV9zdGF0cyhkZXYsIHVzZXJhZGRyKTtcbjM1Mzg6XHRcdFx0YnJlYWs7XG4zNTM5Olx0XHRjYXNlIEVUSFRPT0xfUEVSUVVFVUU6XG4zNTQwOlx0XHRcdHJjID0gZXRodG9vbF9zZXRfcGVyX3F1ZXVlKGRldiwgdXNlcmFkZHIsIHN1Yl9jbWQpO1xuMzU0MTpcdFx0XHRicmVhaztcbjM1NDI6XHRcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxuMzU0MzpcdFx0XHRyYyA9IGV0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xuMzU0NDpcdFx0XHRicmVhaztcbjM1NDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuMzU0NjpcdFx0XHRyYyA9IGV0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xuMzU0NzpcdFx0XHRicmVhaztcbjM1NDg6XHRcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XG4zNTQ5Olx0XHRcdHJjID0gZ2V0X3BoeV90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xuMzU1MDpcdFx0XHRicmVhaztcbjM1NTE6XHRcdGNhc2UgRVRIVE9PTF9QSFlfU1RVTkFCTEU6XG4zNTUyOlx0XHRcdHJjID0gc2V0X3BoeV90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xuMzU1MzpcdFx0XHRicmVhaztcbjM1NTQ6XHRcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XG4zNTU1Olx0XHRcdHJjID0gZXRodG9vbF9nZXRfZmVjcGFyYW0oZGV2LCB1c2VyYWRkcik7XG4zNTU2Olx0XHRcdGJyZWFrO1xuMzU1NzpcdFx0Y2FzZSBFVEhUT09MX1NGRUNQQVJBTTpcbjM1NTg6XHRcdFx0cmMgPSBldGh0b29sX3NldF9mZWNwYXJhbShkZXYsIHVzZXJhZGRyKTtcbjM1NTk6XHRcdFx0YnJlYWs7XG4zNTYwOlx0XHRkZWZhdWx0OlxuMzU2MTpcdFx0XHRyYyA9IC1FT1BOT1RTVVBQO1xuMzU2MjpcdFx0fVxuMzU2MzpcdFxuMzU2NDpcdFx0aWYgKGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2Vjb21wbGV0ZSlcbjM1NjU6XHRcdFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWNvbXBsZXRlKGRldik7XG4zNTY2Olx0XG4zNTY3Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzU2ODpcdFx0Y2FzZSBFVEhUT09MX1BIWVNfSUQ6XG4zNTY5Olx0XHRcdC8qIERvbiYjMzk7dCBjaGVjayBmZWF0dXJlcyBpZiBvcGVyYXRpb24gZHJvcHMgdGhlIGxvY2tzLlxuMzU3MDpcdFx0XHQgKiBTb21lb25lIGVsc2UgbWF5IGhhdmUgY2hhbmdlZCBmZWF0dXJlcyBpbiBwYXJhbGxlbC5cbjM1NzE6XHRcdFx0ICovXG4zNTcyOlx0XHRcdGJyZWFrO1xuMzU3MzpcdFx0ZGVmYXVsdDpcbjM1NzQ6XHRcdFx0aWYgKG9sZF9mZWF0dXJlcyAhPSBkZXYtXHUwMDNlZmVhdHVyZXMpIHtcbjM1NzU6XHRcdFx0XHRpZiAoaGFzX3J0bmxfbG9jaylcbjM1NzY6XHRcdFx0XHRcdG5ldGRldl9mZWF0dXJlc19jaGFuZ2UoZGV2KTtcbjM1Nzc6XHRcdFx0XHRlbHNlXG4zNTc4Olx0XHRcdFx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O2V0aHRvb2wgY21kICV1IGNoYW5nZWQgZmVhdHVyZXMgd2l0aG91dCBydG5sX2xvY2tcJiMzNDssIGV0aGNtZCk7XG4zNTc5Olx0XHRcdH1cbjM1ODA6XHRcdH1cbjM1ODE6XHRvdXQ6XG4zNTgyOlx0XHRpZiAoZGV2LVx1MDAzZWRldi5wYXJlbnQpXG4zNTgzOlx0XHRcdHBtX3J1bnRpbWVfcHV0KGRldi1cdTAwM2VkZXYucGFyZW50KTtcbjM1ODQ6XHRcbjM1ODU6XHRcdHJldHVybiByYztcbjM1ODY6XHR9XG4zNTg3Olx0XG4zNTg4Olx0LyogQ29tbWFuZHMgdGhhdCBtYXkgdG9nZ2xlIGRldi1cdTAwM2VmZWF0dXJlcyBpbiBuZXQvZXRodG9vbC9pb2N0bC5jIGFuZCBzb1xuMzU4OTpcdCAqIGNhbGwgaW50byBfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoKSwgd2hpY2ggc3RpbGwgcmVxdWlyZXMgcnRubF9sb2NrLlxuMzU5MDpcdCAqIERyaXZlci1kZWNpZGVkIFNFVCBjb21tYW5kcyB0aGF0IG1heSBjaGFpbiBpbnRvIHJ0bmwtb25seSBoZWxwZXJzIGFyZVxuMzU5MTpcdCAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXG4zNTkyOlx0ICovXG4zNTkzOlx0c3RhdGljIGJvb2wgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyh1MzIgZXRoY21kKVxuMzU5NDpcdHtcbjM1OTU6XHRcdHN3aXRjaCAoZXRoY21kKSB7XG4zNTk2Olx0XHRjYXNlIEVUSFRPT0xfU0ZFQVRVUkVTOlxuMzU5NzpcdFx0Y2FzZSBFVEhUT09MX1NGTEFHUzpcbjM1OTg6XHRcdGNhc2UgRVRIVE9PTF9TVFhDU1VNOlxuMzU5OTpcdFx0Y2FzZSBFVEhUT09MX1NSWENTVU06XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNaXNzaW5nIHRoZSBUYXJnZXQ6IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgd2FzIHNjYW5uaW5nIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGZ1bmN0aW9uIHNuaXBwZXQsIGFuZCBJIGRpZG4mIzM5O3QgY2F0Y2ggc2lnaHQgb2YgYEVUSFRPT0xfR0RSVklORk9gIGluIHRoZXJlLiBUaGF0JiMzOTtzIHVudXN1YWwuIEl0IHNob3VsZCBkZWZpbml0ZWx5IGJlIHRoZXJlIGlmIHRoZSBpbnRlbnRpb24gaXMgdG8gZ2F0aGVyIGRyaXZlciBpbmZvcm1hdGlvbi4gTGV0IG1lIGJhY2t0cmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcHJlY2VkaW5nIGxpbmVzIG9mIGNvZGUuIEkgbmVlZCB0byBlbnN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBQZXJoYXBzIGl0JiMzOTtzIGNhbGxlZCBlbHNld2hlcmUsIG9yIG1heWJlIEkmIzM5O20gbG9va2luZyBhdCBhbiBvdXRkYXRlZCB2ZXJzaW9uPyBFaXRoZXIgd2F5LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgdGhlIGltbWVkaWF0ZSBjb2RlIGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTAwOlx0XHRcdGZvcl9lYWNoX3NldF9iaXQoaSwgcXVldWVfbWFzaywgYml0KSB7XG4zMTAxOlx0XHRcdFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9wZXJfcXVldWVfY29hbGVzY2UoZGV2LCBpLCB0bXApO1xuMzEwMjpcdFx0XHRcdHRtcCYjNDM7JiM0Mzs7XG4zMTAzOlx0XHRcdH1cbjMxMDQ6XHRcdH1cbjMxMDU6XHRcdGtmcmVlKGJhY2t1cCk7XG4zMTA2Olx0XG4zMTA3Olx0XHRyZXR1cm4gcmV0O1xuMzEwODpcdH1cbjMxMDk6XHRcbjMxMTA6XHRzdGF0aWMgaW50IG5vaW5saW5lX2Zvcl9zdGFjayBldGh0b29sX3NldF9wZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjMxMTE6XHRcdFx0XHRcdCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsIHUzMiBzdWJfY21kKVxuMzExMjpcdHtcbjMxMTM6XHRcdHN0cnVjdCBldGh0b29sX3Blcl9xdWV1ZV9vcCBwZXJfcXVldWVfb3B0O1xuMzExNDpcdFxuMzExNTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnBlcl9xdWV1ZV9vcHQsIHVzZXJhZGRyLCBzaXplb2YocGVyX3F1ZXVlX29wdCkpKVxuMzExNjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMxMTc6XHRcbjMxMTg6XHRcdGlmIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kICE9IHN1Yl9jbWQpXG4zMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEyMDpcdFxuMzEyMTpcdFx0c3dpdGNoIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kKSB7XG4zMTIyOlx0XHRjYXNlIEVUSFRPT0xfR0NPQUxFU0NFOlxuMzEyMzpcdFx0XHRyZXR1cm4gZXRodG9vbF9nZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKGRldiwgdXNlcmFkZHIsIFx1MDAyNnBlcl9xdWV1ZV9vcHQpO1xuMzEyNDpcdFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcbjMxMjU6XHRcdFx0cmV0dXJuIGV0aHRvb2xfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcdTAwMjZwZXJfcXVldWVfb3B0KTtcbjMxMjY6XHRcdGRlZmF1bHQ6XG4zMTI3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjMxMjg6XHRcdH1cbjMxMjk6XHR9XG4zMTMwOlx0XG4zMTMxOlx0c3RhdGljIGludCBldGh0b29sX3BoeV90dW5hYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBldGh0b29sX3R1bmFibGUgKnR1bmEpXG4zMTMyOlx0e1xuMzEzMzpcdFx0c3dpdGNoICh0dW5hLVx1MDAzZWlkKSB7XG4zMTM0Olx0XHRjYXNlIEVUSFRPT0xfUEhZX0RPV05TSElGVDpcbjMxMzU6XHRcdGNhc2UgRVRIVE9PTF9QSFlfRkFTVF9MSU5LX0RPV046XG4zMTM2Olx0XHRjYXNlIEVUSFRPT0xfUEhZX1NIT1JUX0NBQkxFX1BSRVNFVDpcbjMxMzc6XHRcdFx0aWYgKHR1bmEtXHUwMDNlbGVuICE9IHNpemVvZih1OCkgfHxcbjMxMzg6XHRcdFx0ICAgIHR1bmEtXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTgpXG4zMTM5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTQwOlx0XHRcdGJyZWFrO1xuMzE0MTpcdFx0Y2FzZSBFVEhUT09MX1BIWV9FRFBEOlxuMzE0MjpcdFx0XHRpZiAodHVuYS1cdTAwM2VsZW4gIT0gc2l6ZW9mKHUxNikgfHxcbjMxNDM6XHRcdFx0ICAgIHR1bmEtXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTE2KVxuMzE0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzE0NTpcdFx0XHRicmVhaztcbjMxNDY6XHRcdGNhc2UgRVRIVE9PTF9QSFlfTFBGX0JXOlxuMzE0NzpcdFx0Y2FzZSBFVEhUT09MX1BIWV9EU1BfRVFfSU5JVF9WQUxVRTpcbjMxNDg6XHRcdFx0aWYgKHR1bmEtXHUwMDNlbGVuICE9IHNpemVvZih1MzIpIHx8XG4zMTQ5Olx0XHRcdCAgICB0dW5hLVx1MDAzZXR5cGVfaWQgIT0gRVRIVE9PTF9UVU5BQkxFX1UzMilcbjMxNTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTE6XHRcdFx0YnJlYWs7XG4zMTUyOlx0XHRkZWZhdWx0OlxuMzE1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTQ6XHRcdH1cbjMxNTU6XHRcbjMxNTY6XHRcdHJldHVybiAwO1xuMzE1NzpcdH1cbjMxNTg6XHRcbjMxNTk6XHRzdGF0aWMgaW50IGdldF9waHlfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zMTYwOlx0e1xuMzE2MTpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cdTAwM2VwaHlkZXY7XG4zMTYyOlx0XHRzdHJ1Y3QgZXRodG9vbF90dW5hYmxlIHR1bmE7XG4zMTYzOlx0XHRib29sIHBoeV9kcnZfdHVuYWJsZTtcbjMxNjQ6XHRcdHZvaWQgKmRhdGE7XG4zMTY1Olx0XHRpbnQgcmV0O1xuMzE2NjpcdFxuMzE2NzpcdFx0cGh5X2Rydl90dW5hYmxlID0gcGh5ZGV2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWdldF90dW5hYmxlO1xuMzE2ODpcdFx0aWYgKCFwaHlfZHJ2X3R1bmFibGUgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90dW5hYmxlKVxuMzE2OTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4zMTcwOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHVuYSwgdXNlcmFkZHIsIHNpemVvZih0dW5hKSkpXG4zMTcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzE3MjpcdFx0cmV0ID0gZXRodG9vbF9waHlfdHVuYWJsZV92YWxpZChcdTAwMjZ0dW5hKTtcbjMxNzM6XHRcdGlmIChyZXQpXG4zMTc0Olx0XHRcdHJldHVybiByZXQ7XG4zMTc1Olx0XHRkYXRhID0ga3phbGxvYyh0dW5hLmxlbiwgR0ZQX1VTRVIpO1xuMzE3NjpcdFx0aWYgKCFkYXRhKVxuMzE3NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNzg6XHRcdGlmIChwaHlfZHJ2X3R1bmFibGUpIHtcbjMxNzk6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4zMTgwOlx0XHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlZ2V0X3R1bmFibGUocGh5ZGV2LCBcdTAwMjZ0dW5hLCBkYXRhKTtcbjMxODE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbjMxODI6XHRcdH0gZWxzZSB7XG4zMTgzOlx0XHRcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcGh5X3R1bmFibGUoZGV2LCBcdTAwMjZ0dW5hLCBkYXRhKTtcbjMxODQ6XHRcdH1cbjMxODU6XHRcdGlmIChyZXQpXG4zMTg2Olx0XHRcdGdvdG8gb3V0O1xuMzE4NzpcdFx0dXNlcmFkZHIgJiM0Mzs9IHNpemVvZih0dW5hKTtcbjMxODg6XHRcdHJldCA9IC1FRkFVTFQ7XG4zMTg5Olx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCB0dW5hLmxlbikpXG4zMTkwOlx0XHRcdGdvdG8gb3V0O1xuMzE5MTpcdFx0cmV0ID0gMDtcbjMxOTI6XHRcbjMxOTM6XHRvdXQ6XG4zMTk0Olx0XHRrZnJlZShkYXRhKTtcbjMxOTU6XHRcdHJldHVybiByZXQ7XG4zMTk2Olx0fVxuMzE5NzpcdFxuMzE5ODpcdHN0YXRpYyBpbnQgc2V0X3BoeV90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcilcbjMxOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEVUSFRPT0xfR0RSVklORk9gIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBgRVRIVE9PTF9HRFJWSU5GT2AsIGFuZCB0aGUgaW1tZWRpYXRlIHBsYWNlIG15IG1pbmQganVtcHMgdG8gaXMgdGhlIGNvcmUgb2YgZXRodG9vbCYjMzk7cyBpb2N0bCBoYW5kbGluZzogYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCByZWFsbHkuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIHJlcXVlc3RzLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIGlzIGNsZWFybHkgYW4gaW9jdGwgY29tbWFuZC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgZXRodG9vbCYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkga25vdyBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBjYXNlIHN0YXRlbWVudCBvciBmdW5jdGlvbiBoYW5kbGluZyBgRVRIVE9PTF9HRFJWSU5GT2AgdGhlcmUsIGFsb25nIHdpdGggdGhlIHN1YnNlcXVlbnQgY2FsbHMgaW50byBkcml2ZXItc3BlY2lmaWMgY29kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSFRPT0xfR0RSVklORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9NzM0PWV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnJzcClcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTczOC1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NzM5Olx0cnNwLVx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzQwLVx0c3Ryc2NweShyc3AtXHUwMDNlaW5mby52ZXJzaW9uLCBpbml0X3V0c19ucy5uYW1lLnJlbGVhc2UsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zMjg5LVx0Y2FzZSBFVEhUT09MX0dTRVQ6XG5uZXQvZXRodG9vbC9pb2N0bC5jOjMyOTA6XHRjYXNlIEVUSFRPT0xfR0RSVklORk86XG5uZXQvZXRodG9vbC9pb2N0bC5jLTMyOTEtXHRjYXNlIEVUSFRPT0xfR01TR0xWTDpcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTMzNTQtXHRcdGJyZWFrO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozMzU1Olx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zMzU2LVx0XHRyYyA9IGV0aHRvb2xfZ2V0X2RydmluZm8oZGV2LCBkZXZsaW5rX3N0YXRlKTtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2NDY9aW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcilcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzgtXHRcdGJyZWFrO1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNjc5Olx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVx0XHRpZiAoc3RhdGUtXHUwMDNlZGV2bGluaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gZXRodG9vbF9nZXRfZHJ2aW5mbyoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGUgYEVUSFRPT0xfR0RSVklORk9gIHJlcXVlc3QgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBkZXZfZXRodG9vbF9sb2NrZWRgIGZ1bmN0aW9uLiBBbmQgdGhhdCBmdW5jdGlvbiwgYXMgSSBzdXNwZWN0ZWQsIGlzIHRoZSBvbmUgdGhhdCB0aGVuIGNhbGxzIHRoZSBjb3JlIGBldGh0b29sX2dldF9kcnZpbmZvYCBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSBleGFjdGx5IHRvIGZpbmQgYGV0aHRvb2xfZ2V0X2RydmluZm9gLCBzbyBsZXQgbWUganVtcCBvdmVyIHRvIHRoZSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaXRzIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBmZXRjaGVkLiBUaGF0IGByc3AtJmd0O2luZm9gIGFuZCBgcnNwLSZndDtkZXZsaW5rYCBwYXJ0IHNlZW1zIGltcG9ydGFudCwgdGhvc2UgYXJlIHByb2JhYmx5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIHRoZSBkcml2ZXImIzM5O3MgZGV0YWlscy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBnb2VzIGludG8gdGhvc2UgZmllbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNDpcdGV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnJzcClcbiA3MzU6XHR7XG4gNzM2Olx0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cdTAwM2VldGh0b29sX29wcztcbiA3Mzc6XHRcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VkZXYucGFyZW50O1xuIDczODpcdFxuIDczOTpcdFx0cnNwLVx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcbiA3NDA6XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8udmVyc2lvbiwgaW5pdF91dHNfbnMubmFtZS5yZWxlYXNlLFxuIDc0MTpcdFx0XHRzaXplb2YocnNwLVx1MDAzZWluZm8udmVyc2lvbikpO1xuIDc0MjpcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZHJ2aW5mbykge1xuIDc0MzpcdFx0XHRvcHMtXHUwMDNlZ2V0X2RydmluZm8oZGV2LCBcdTAwMjZyc3AtXHUwMDNlaW5mbyk7XG4gNzQ0Olx0XHRcdGlmICghcnNwLVx1MDAzZWluZm8uYnVzX2luZm9bMF0gXHUwMDI2XHUwMDI2IHBhcmVudClcbiA3NDU6XHRcdFx0XHRzdHJzY3B5KHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvLCBkZXZfbmFtZShwYXJlbnQpLFxuIDc0NjpcdFx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvKSk7XG4gNzQ3Olx0XHRcdGlmICghcnNwLVx1MDAzZWluZm8uZHJpdmVyWzBdIFx1MDAyNlx1MDAyNiBwYXJlbnQgXHUwMDI2XHUwMDI2IHBhcmVudC1cdTAwM2Vkcml2ZXIpXG4gNzQ4Olx0XHRcdFx0c3Ryc2NweShyc3AtXHUwMDNlaW5mby5kcml2ZXIsIHBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlbmFtZSxcbiA3NDk6XHRcdFx0XHRcdHNpemVvZihyc3AtXHUwMDNlaW5mby5kcml2ZXIpKTtcbiA3NTA6XHRcdH0gZWxzZSBpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBwYXJlbnQtXHUwMDNlZHJpdmVyKSB7XG4gNzUxOlx0XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXG4gNzUyOlx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmJ1c19pbmZvKSk7XG4gNzUzOlx0XHRcdHN0cnNjcHkocnNwLVx1MDAzZWluZm8uZHJpdmVyLCBwYXJlbnQtXHUwMDNlZHJpdmVyLVx1MDAzZW5hbWUsXG4gNzU0Olx0XHRcdFx0c2l6ZW9mKHJzcC1cdTAwM2VpbmZvLmRyaXZlcikpO1xuIDc1NTpcdFx0fSBlbHNlIGlmIChkZXYtXHUwMDNlcnRubF9saW5rX29wcykge1xuIDc1NjpcdFx0XHRzdHJzY3B5KHJzcC1cdTAwM2VpbmZvLmRyaXZlciwgZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMtXHUwMDNla2luZCxcbiA3NTc6XHRcdFx0XHRzaXplb2YocnNwLVx1MDAzZWluZm8uZHJpdmVyKSk7XG4gNzU4Olx0XHR9IGVsc2Uge1xuIDc1OTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNzYwOlx0XHR9XG4gNzYxOlx0XG4gNzYyOlx0XHQvKlxuIDc2MzpcdFx0ICogdGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIHN0cmluZyBzZXQgaW5mbyBpcyBkZXByZWNhdGVkO1xuIDc2NDpcdFx0ICogVXNlIEVUSFRPT0xfR1NTRVRfSU5GTyBpbnN0ZWFkLlxuIDc2NTpcdFx0ICovXG4gNzY2Olx0XHRpZiAob3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KSB7XG4gNzY3Olx0XHRcdGludCByYztcbiA3Njg6XHRcbiA3Njk6XHRcdFx0cmMgPSBvcHMtXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfVEVTVCk7XG4gNzcwOlx0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4gNzcxOlx0XHRcdFx0cnNwLVx1MDAzZWluZm8udGVzdGluZm9fbGVuID0gcmM7XG4gNzcyOlx0XHRcdHJjID0gb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KGRldiwgRVRIX1NTX1NUQVRTKTtcbiA3NzM6XHRcdFx0aWYgKHJjIFx1MDAzZT0gMClcbiA3NzQ6XHRcdFx0XHRyc3AtXHUwMDNlaW5mby5uX3N0YXRzID0gcmM7XG4gNzc1Olx0XHRcdHJjID0gb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KGRldiwgRVRIX1NTX1BSSVZfRkxBR1MpO1xuIDc3NjpcdFx0XHRpZiAocmMgXHUwMDNlPSAwKVxuIDc3NzpcdFx0XHRcdHJzcC1cdTAwM2VpbmZvLm5fcHJpdl9mbGFncyA9IHJjO1xuIDc3ODpcdFx0fVxuIDc3OTpcdFx0aWYgKG9wcy1cdTAwM2VnZXRfcmVnc19sZW4pIHtcbiA3ODA6XHRcdFx0aW50IHJldCA9IG9wcy1cdTAwM2VnZXRfcmVnc19sZW4oZGV2KTtcbiA3ODE6XHRcbiA3ODI6XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbiA3ODM6XHRcdFx0XHRyc3AtXHUwMDNlaW5mby5yZWdkdW1wX2xlbiA9IHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpZ2dpbmcgaW50byBgZXRodG9vbF9nZXRfZHJ2aW5mb2AqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqZXhhY3RseSogaXMgYHJzcC0mZ3Q7ZGV2bGlua2AgZ2V0dGluZyBpdHMgdmFsdWUgc2V0PyBJIHNlZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBidXQgSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhhdCBwb2ludGVyIGlzIGFjdHVhbGx5IGdldHRpbmcgcG9wdWxhdGVkIHdpdGggdXNlZnVsIGRhdGEuIExldCBtZSBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IHJlYWQgbW9yZSBvZiB0aGUgYGV0aHRvb2xfZ2V0X2RydmluZm9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBhbGwgdGhlIHBvc3NpYmxlIGNvZGUgcGF0aHMgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdoZXJlIHRoYXQgY3J1Y2lhbCBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgZm9sbG93IHRoYXQgdmFyaWFibGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzg0Olx0XHR9XG4gNzg1Olx0XG4gNzg2Olx0XHRpZiAob3BzLVx1MDAzZWdldF9lZXByb21fbGVuKVxuIDc4NzpcdFx0XHRyc3AtXHUwMDNlaW5mby5lZWR1bXBfbGVuID0gb3BzLVx1MDAzZWdldF9lZXByb21fbGVuKGRldik7XG4gNzg4Olx0XG4gNzg5Olx0XHRpZiAoIXJzcC1cdTAwM2VpbmZvLmZ3X3ZlcnNpb25bMF0pXG4gNzkwOlx0XHRcdHJzcC1cdTAwM2VkZXZsaW5rID0gbmV0ZGV2X3RvX2RldmxpbmtfZ2V0KGRldik7XG4gNzkxOlx0XG4gNzkyOlx0XHRyZXR1cm4gMDtcbiA3OTM6XHR9XG4gNzk0Olx0XG4gNzk1Olx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9nZXRfc3NldF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNzk2Olx0XHRcdFx0XHRcdFx0ICAgIHZvaWQgX191c2VyICp1c2VyYWRkcilcbiA3OTc6XHR7XG4gNzk4Olx0XHRzdHJ1Y3QgZXRodG9vbF9zc2V0X2luZm8gaW5mbztcbiA3OTk6XHRcdHU2NCBzc2V0X21hc2s7XG4gODAwOlx0XHRpbnQgaSwgaWR4ID0gMCwgbl9iaXRzID0gMCwgcmV0LCByYztcbiA4MDE6XHRcdHUzMiAqaW5mb19idWYgPSBOVUxMO1xuIDgwMjpcdFxuIDgwMzpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIHVzZXJhZGRyLCBzaXplb2YoaW5mbykpKVxuIDgwNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MDU6XHRcbiA4MDY6XHRcdC8qIHN0b3JlIGNvcHkgb2YgbWFzaywgYmVjYXVzZSB3ZSB6ZXJvIHN0cnVjdCBsYXRlciBvbiAqL1xuIDgwNzpcdFx0c3NldF9tYXNrID0gaW5mby5zc2V0X21hc2s7XG4gODA4Olx0XHRpZiAoIXNzZXRfbWFzaylcbiA4MDk6XHRcdFx0cmV0dXJuIDA7XG4gODEwOlx0XG4gODExOlx0XHQvKiBjYWxjdWxhdGUgc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovXG4gODEyOlx0XHRuX2JpdHMgPSBod2VpZ2h0NjQoc3NldF9tYXNrKTtcbiA4MTM6XHRcbiA4MTQ6XHRcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuIDgxNTpcdFx0aW5mby5jbWQgPSBFVEhUT09MX0dTU0VUX0lORk87XG4gODE2Olx0XG4gODE3Olx0XHRpbmZvX2J1ZiA9IGtjYWxsb2Mobl9iaXRzLCBzaXplb2YodTMyKSwgR0ZQX1VTRVIpO1xuIDgxODpcdFx0aWYgKCFpbmZvX2J1ZilcbiA4MTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODIwOlx0XG4gODIxOlx0XHQvKlxuIDgyMjpcdFx0ICogZmlsbCByZXR1cm4gYnVmZmVyIGJhc2VkIG9uIGlucHV0IGJpdG1hc2sgYW5kIHN1Y2Nlc3NmdWxcbiA4MjM6XHRcdCAqIGdldF9zc2V0X2NvdW50IHJldHVyblxuIDgyNDpcdFx0ICovXG4gODI1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSYjNDM7JiM0MzspIHtcbiA4MjY6XHRcdFx0aWYgKCEoc3NldF9tYXNrIFx1MDAyNiAoMVVMTCBcdTAwM2NcdTAwM2MgaSkpKVxuIDgyNzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgyODpcdFxuIDgyOTpcdFx0XHRyYyA9IF9fZXRodG9vbF9nZXRfc3NldF9jb3VudChkZXYsIGkpO1xuIDgzMDpcdFx0XHRpZiAocmMgXHUwMDNlPSAwKSB7XG4gODMxOlx0XHRcdFx0aW5mby5zc2V0X21hc2sgfD0gKDFVTEwgXHUwMDNjXHUwMDNjIGkpO1xuIDgzMjpcdFx0XHRcdGluZm9fYnVmW2lkeCYjNDM7JiM0MztdID0gcmM7XG4gODMzOlx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTGluayBGaXJtd2FyZSBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBpZiB0aGUgZGV2aWNlIGRyaXZlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHByb3ZpZGUgYSBmaXJtd2FyZSB2ZXJzaW9uIChgIXJzcC0mZ3Q7aW5mby5md192ZXJzaW9uWzBdYCksIHRoZSBjb2RlIGludGVsbGlnZW50bHkgdHJpZXMgdG8gZmV0Y2ggaXQgdXNpbmcgYG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpYCDigJMgYSBzdGFuZGFyZCwgZXhwZWN0ZWQgZmxvdy4gVGhpcyBpcyBnb29kLCBub3RoaW5nIHVudXN1YWwgdGhlcmUuCgpUaGlzIHBhdGNoLCBob3dldmVyLCB0b3VjaGVzIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gLiBHaXZlbiB0aGF0IGBORVRfREVWTElOS2AgaXMgY29udHJvbGxlZCBieSBgTkVUREVWU0lNYCwgYWRkaW5nIGBORVRERVZTSU1gIHRvIGVuYWJsZSB0aGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgYW5kIGFwcHJvcHJpYXRlIHNvbHV0aW9uLiBBY3R1YWxseSwgd2FpdCBhIG1vbWVudC4gYE5FVF9ERVZMSU5LYCBnZXRzIGJ1aWx0LWluIGlmICphbnkqIGRyaXZlciB0aGF0IHNlbGVjdHMgaXQgaXMgYnVpbHQtaW4uIFRoYXQgY291bGQgaW1wYWN0IHRoaXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgYG5ldC9kZXZsaW5rL2Rldi5jYC4KClJpZ2h0LCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHJlbGllcyBvbiBgZGV2bGlua19pbmZvX3JlcWAsIGNvbnN0cnVjdHMgYSBOZXRsaW5rIG1lc3NhZ2UsIGFuZCB1c2VzIGBkZXZsaW5rLSZndDtvcHMtJmd0O2luZm9fZ2V0YCB0byBnZXQgdGhlIHJ1bm5pbmcgdmVyc2lvbi4gVGhpcyBjbGVhcmx5IGRlZmluZXMgYSBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZSBwYXRoLiBJJiMzOTttIGZhaXJseSBjb25maWRlbnQgdGhpcyB3aWxsIHdvcmsuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZTogaXMganVzdCBhZGRpbmcgYE5FVERFVlNJTWAgZW5vdWdoPyBgTkVUREVWU0lNYCBkb2VzIHNlbGVjdCBgTkVUX0RFVkxJTktgLCBzbyB0aGF0IGNoZWNrcyBvdXQuIEl0IGxvb2tzIGxpa2UgYE5FVERFVlNJTWAgYmVsb25ncyBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCwgc2hvdWxkIEkgY29uc2lkZXIgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBgRVRIVE9PTF9ORVRMSU5LYCBzcHJpbmdzIHRvIG1pbmQsIGJ1dCB0aGF0JiMzOTtzIGFuIGlvY3RsLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIHN1Z2dlc3RzIGEgZGlmZmVyZW50IGFwcHJvYWNoIGFsdG9nZXRoZXIuIFNvLCBiYWNrIHRvIHRoZSBjb3JlLiBEb2VzIGBORVRERVZTSU1gIHByb3ZpZGUgYGluZm9fZ2V0YCBpbiB0aGUgZGV2bGluayBvcGVyYXRpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgc3VwcG9ydGVkIGJ5IHRoZSBzaW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmZvX2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTEwNDI9c3RhdGljIGludCBuc2ltX2Rldl9yZWxvYWRfdXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGVudW0gZGV2bGlua19yZWxvYWRfYWN0aW9uIGFjdGlvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTA2MC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDYxOnN0YXRpYyBpbnQgbnNpbV9kZXZfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTA2Mi1cdFx0XHQgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQzMS1cdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQzMjpcdC5pbmZvX2dldCA9IG5zaW1fZGV2X2luZm9fZ2V0LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzMtXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXBhdGliaWxpdHkgUGF0Y2gqKgoKT2theSwgc28gYG5ldGRldnNpbWAgZG9lcyBpbmRlZWQgaW1wbGVtZW50IGBpbmZvX2dldGAuIFRoYXQmIzM5O3MgYSBncmVhdCBzdGFydDsgdGhlIHdob2xlIGBORVRERVZTSU1gIGFuZ2xlIGxvb2tzIHByb21pc2luZy4KCk5vdywgbXkgcHJpbWFyeSB0YXNrIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcsIGFuZCB0byBldmFsdWF0ZSB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiBhbGwgcmVsZXZhbnQgc3ltYm9scy4KClJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYC4gU28gdGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBhcyBvbmUga2V5IGZvY3VzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG5vbi11bmRlcnNjb3JlZCB2ZXJzaW9uIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHdoaWNoIHNob3VsZCBiZSBjb25zaWRlcmVkLCB0b28uIEFoLCBidXQgd2FpdCwgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzIGEgbGl0dGxlIOKAkyBidXQgSSBzaG91bGQgbGlzdCBib3RoIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZSBjb3ZlcmVkIGFsbCBiYXNlcyBhbmQgYXZvaWQgYW55IGdvdGNoYXMuIEkgd2lsbCBmb2N1cyBvbiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBvciBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gCgpMZXQmIzM5O3MgY2hlY2sgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCBhbHNvIGRlcGVuZGVudCBvbiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIG9yIGluZGVlZCBhbnkgb3RoZXIgY29kZSB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcywgdG8gZW5zdXJlIG5vIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTE4Ny1cbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5uZXQvZGV2bGluay9kZXYuYy0xMTg5LVx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5uZXQvZGV2bGluay9kZXYuYz0xMjI0PXZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKVxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcdFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cdGRldmxfdW5sb2NrKGRldmxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERldmxpbmsgQ29tcGF0aWJpbGl0eSBWZXJzaW9uIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gRmlyc3QsIEkgcmVhbGl6ZSB0aGF0IGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpc24mIzM5O3QgY2FsbGVkIGZyb20gd2l0aGluIHRoaXMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlcj8gSSBzZWUgYE5FVF9ERVZMSU5LYCBpcyBzZWxlY3RlZCBieSBgTkVUREVWU0lNYCwgYW5kIHNpbmNlIGBORVRERVZTSU1gIGdpdmVzIG1lIGEgc29mdHdhcmUgZGV2aWNlIHRoYXQgdXRpbGl6ZXMgZGV2bGluaywgdGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBkb24mIzM5O3Qgc2VlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgYHNlcV9idWZgIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbC4KCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBwYXRjaCBpdHNlbGYgYWdhaW4uIEl0JiMzOTtzIGNoYW5naW5nIGhvdyBhIHZlcnNpb24gc3RyaW5nIGlzIGJ1aWx0LiBQcmV2aW91c2x5LCBpdCB1c2VkIGBzdHJsY2F0YC4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgc2VxX2J1Zl9wcmludGZgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIHBvdGVudGlhbGx5IHNhZmVyLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlZ2FyZGluZyBgc3RybGNhdGAgd2hlcmUgaXQgbWlnaHQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBubGFfZGF0YShrdilgIGRhdGEsIGlmIGl0IHdhcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBvciBqdXN0IGdlbmVyYWwgdXNlIGNhc2Ugc2FmZXR5IHVzaW5nIGBzZXFfYnVmX3ByaW50ZmAuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgdHlwZSBjYXN0IHRvIGAoY29uc3QgY2hhciAqKWAgYW5kIHByaW50cyB3aXRoIGAlc2AsIHdoaWNoIHN0aWxsIHJlbGllcyBvbiBudWxsLXRlcm1pbmF0aW9uLiBCdXQgYHNlcV9idWZfcHJpbnRmYCBoYW5kbGVzIGJ1ZmZlciBib3VuZGFyaWVzIG11Y2ggYmV0dGVyLiBJIGFtIHJlbWVtYmVyaW5nIHRoYXQgYHN0cmxjYXRgIHJlcXVpcmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGBidWZgIGlzIGEgdmFsaWQgQyBzdHJpbmcgYW5kIHRoYXQgaXQgaGFzIHRvIGJlIG51bGwtdGVybWluYXRlZCB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlci4gVGhlIHVwZGF0ZWQgY29kZSB1c2VzIGBzZXFfYnVmX2luaXRgIGFuZCB1c2VzIGBzdHJubGVuKGJ1ZiwgbGVuKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzYWZlciBjaG9pY2UuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2hhbmdlLiBJdCBpcyBsaWtlbHkgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBmdXp6aW5nIG9uIHRoaXMgYXJlYS4KClRvIHRlc3QgdGhpcyBjaGFuZ2UsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgd291bGQgYmU6CgoqICAgYE5FVERFVlNJTWAgKHRvIGVuYWJsZSBhIGRyaXZlciB0aGF0IHVzZXMgZGV2bGluayBhbmQgaW1wbGVtZW50cyBgaW5mb19nZXRgKQoKVGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBhcmU6CgoqICAgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYAoqICAgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAKCkkmIzM5O2xsIGNoZWNrIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGluIGBuZXQvZGV2bGluay9kZXYuY2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRmcmVlX21zZzpcbjEyMjE6XHRcdG5sbXNnX2NvbnN1bWUobXNnKTtcbjEyMjI6XHR9XG4xMjIzOlx0XG4xMjI0Olx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4xMjI1Olx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTIyNjpcdHtcbjEyMjc6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQpXG4xMjI4Olx0XHRcdHJldHVybjtcbjEyMjk6XHRcbjEyMzA6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMzE6XHRcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4xMjMyOlx0XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbjEyMzM6XHRcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuMTIzNDpcdH1cbjEyMzU6XHRcbjEyMzY6XHRpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXG4xMjM3Olx0e1xuMTIzODpcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcbjEyMzk6XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgVmFyaWFibGUqKgoKT2theSwgc28gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nIHRoaXMgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgdGhpbmcuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyBpdCwgb3IgYXQgbGVhc3QgdXNpbmcgaXQgc29tZXdoZXJlLCBwcm9iYWJseSBhY3Jvc3MgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHVzZWQgaW4gYGluY2x1ZGUvbmV0L2RldmxpbmsuaGAuIEV4Y2VsbGVudC4gTm93LCB3aGVyZSBpcyBpdCAqY2FsbGVkKiBmcm9tPyBBaCwgaGVyZSB3ZSBnbywgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgLgoKQWhhISBOb3csIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgaW4gb3JkZXIgaGVyZS4gTGV0JiMzOTtzIHRoaW5rLCBpcyBgbmV0L2V0aHRvb2wvaW9jdGwuY2Agc29tZXRoaW5nIHRoYXQmIzM5O3MgYnVpbHQgYnkgZGVmYXVsdD8gWWVzLCBpdCBpcyEgRXRodG9vbCBpcyBjb3JlIG5ldHdvcmtpbmcsIHNvIGl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgY29tcGlsZWQgYW5kIGxpbmtlZC4gR29vZCwgdGhhdCBjb25maXJtcyBhIGJhc2VsaW5lIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvZXRodG9vbC9NYWtlZmlsZWAuIEkgd2lsbCBjaGVjayBpZiBpdCBjYW4gYmUgZGlzYWJsZWQgYnV0IG5vcm1hbGx5IGl0IGlzIGEga2V5IGNvbXBvbmVudCB0byBuZXR3b3JraW5nIGFuZCB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvY3RsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZS0yLVxubmV0L2V0aHRvb2wvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0JiM0Mzs9IGlvY3RsLm8gY29tbW9uLm9cbm5ldC9ldGh0b29sL01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDI1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgaW9jdGwub2AqKgoKUmlnaHQsIHNvIGBpb2N0bC5vYCBpcyBhbHdheXMgYnVpbHQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcyBhcm91bmQgdGhvc2UgYE5FVERFVlNJTWAgY29uZmlndXJhdGlvbnMuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBEb2VzIGVuYWJsaW5nIGBORVRERVZTSU1gIGF1dG9tYXRpY2FsbHkgcHVsbCBpbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnM/IEJlc3QgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVhbCBpcyB3aXRoIGBORVRERVZTSU1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFxuIDYwMTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXCYjMzQ7XG4gNjAyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG4gNjAzOlx0XG4gNjA0Olx0Y29uZmlnIE5FVERFVlNJTVxuIDYwNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4gNjA2Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gNjA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiA2MDg6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cbiA2MDk6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cbiA2MTA6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDYxMTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuIDYxMjpcdFx0c2VsZWN0IE5FVF9TSEFQRVJcbiA2MTM6XHRcdGhlbHBcbiA2MTQ6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxuIDYxNTpcdFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XG4gNjE2Olx0XHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cbiA2MTc6XHRcbiA2MTg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDYxOTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZXRkZXZzaW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTQ4CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBvbmUgaGluZ2VzIG9uIGEgY291cGxlIG9mIGtleSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBERUJVR19GU2AgYW5kIGBJTkVUYC4gR2VuZXJhbGx5LCB0aG9zZSBhcmUgc3RhbmRhcmQgZmFyZSBpbiBzeXprYWxsZXIgc2V0dXBzLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBNeSBwbGFuIGlzIHRvIGluY2x1ZGUgYE5FVERFVlNJTWAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQuIFRoZSBwYXRjaCBpcyBzd2FwcGluZyBvdXQgYHN0cmxjYXRgIGZvciBgc2VxX2J1Zl9wcmludGZgIHdpdGhpbiB0aGUgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGRpcmVjdCBtb3ZlIHRvIGltcHJvdmUgYnVmZmVyIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIHZlcnNpb24gcmV0cmlldmFsIHRocm91Z2ggZGV2bGluay4gQW5kIHNpbmNlIHRoYXQgY2hhbmdlIG9jY3VycyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKSwgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuCgpUaGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciB0aGlzIHdpbGwgYmUgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBhbmQgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEFuZCwgYXMgc3RhdGVkIGVhcmxpZXIsIHRoZSBgTkVUREVWU0lNYCBjb25maWcgc2hvdWxkIGJlIGVuYWJsZWQgdG8gbWF4aW1pemUgdGhpcyBmdXp6aW5nLgoKSSYjMzk7bSBub3cgY29uZmlkZW50IGluIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZXR0aW5ncyBmb3IgdGhpcyBydW4sIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24mIzM0OywKICAgICYjMzQ7ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uJiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzdHJsY2F0IHdpdGggc2VxX2J1Zl9wcmludGYgaW4gX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24gdG8gZml4IHBvdGVudGlhbCBidWZmZXIgaGFuZGxpbmcgaXNzdWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIGEgZGV2aWNlIHZpYSBkZXZsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIChldGh0b29sL2RldmxpbmspLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MjIuOTI3ODAyNzk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzODcwOTk4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjIyLjkyNzgwNzIyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3NTA2Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzFlZDE3YWQ1MzgyNWUwZTNjMjBjYTlkODk3MDYwNzE5NjA0MzAzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDA0OjE3OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcXG5pbmRleCA1N2IyYjhmMDM1NDM2Yi4uMGQ0MzAxMjY3MTcxNzAgMTAwNjQ0XFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xcbkBAIC01LDYgKzUsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9nZW5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJkZXZsX2ludGVybmFsLmhcXFwiXFxuQEAgLTExODgsOCArMTE4OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XFxuK1xcdHNpemVfdCB1c2VkID0gc3RybmxlbihidWYsIGxlbik7XFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4rXFx0c3RydWN0IHNlcV9idWYgc2I7XFxuIFxcdGludCByZW0sIGVycjtcXG4gXFxuIFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbkBAIC0xMjAxLDYgKzEyMDQsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFxuK1xcdHNlcV9idWZfaW5pdChcXHUwMDI2c2IsIGJ1ZiArIHVzZWQsIGxlbiAtIHVzZWQpO1xcbitcXG4gXFx0bmxhX2Zvcl9lYWNoX2F0dHJfdHlwZShubGF0dHIsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fUlVOTklORyxcXG4gXFx0XFx0XFx0ICAgICAgICh2b2lkICopbXNnLVxcdTAwM2VkYXRhLCBtc2ctXFx1MDAzZWxlbiwgcmVtKSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbkBAIC0xMjA4LDggKzEyMTMsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFxuIFxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShrdiwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9WQUxVRSxcXG4gXFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuLVxcdFxcdFxcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XFxuLVxcdFxcdFxcdHN0cmxjYXQoYnVmLCBcXFwiIFxcXCIsIGxlbik7XFxuK1xcdFxcdFxcdHNlcV9idWZfcHJpbnRmKFxcdTAwMjZzYiwgXFxcIiVzIFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAoY29uc3QgY2hhciAqKW5sYV9kYXRhKGt2KSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBmcmVlX21zZzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MjMuNDk2Mjg5MDM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTgxODYwMzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc3RybGNhdCB3aXRoIHNlcV9idWZfcHJpbnRmIGluIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uIHRvIGZpeCBwb3RlbnRpYWwgYnVmZmVyIGhhbmRsaW5nIGlzc3VlcyB3aGVuIHJldHJpZXZpbmcgdGhlIHJ1bm5pbmcgdmVyc2lvbiBvZiBhIGRldmljZSB2aWEgZGV2bGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMWVkMTdhZDUzODI1ZTBlM2MyMGNhOWQ4OTcwNjA3MTk2MDQzMDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAwNDoxNzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IDU3YjJiOGYwMzU0MzZiLi4wZDQzMDEyNjcxNzE3MCAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTUsNiArNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfYnVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXCJkZXZsX2ludGVybmFsLmhcIlxuQEAgLTExODgsOCArMTE4OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XG4rXHRzaXplX3QgdXNlZCA9IHN0cm5sZW4oYnVmLCBsZW4pO1xuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhdHRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbitcdHN0cnVjdCBzZXFfYnVmIHNiO1xuIFx0aW50IHJlbSwgZXJyO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTIwMSw2ICsxMjA0LDggQEAgc3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfbXNnO1xuIFxuK1x0c2VxX2J1Zl9pbml0KFx1MDAyNnNiLCBidWYgKyB1c2VkLCBsZW4gLSB1c2VkKTtcbitcbiBcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXG4gXHRcdFx0ICAgICAgICh2b2lkICopbXNnLVx1MDAzZWRhdGEsIG1zZy1cdTAwM2VsZW4sIHJlbSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICprdjtcbkBAIC0xMjA4LDggKzEyMTMsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcbiBcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxuIFx0XHRcdFx0XHQgbmxhdHRyLCByZW1fa3YpIHtcbi1cdFx0XHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xuLVx0XHRcdHN0cmxjYXQoYnVmLCBcIiBcIiwgbGVuKTtcbitcdFx0XHRzZXFfYnVmX3ByaW50ZihcdTAwMjZzYiwgXCIlcyBcIixcbitcdFx0XHRcdCAgICAgICAoY29uc3QgY2hhciAqKW5sYV9kYXRhKGt2KSk7XG4gXHRcdH1cbiBcdH1cbiBmcmVlX21zZzpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjIzLjQ5NjI5MTA3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjA4MjI2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQvZGV2bGluay9kZXYuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvZGV2bGluay9kZXYuY2AuIEl0IHNlZW1zIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgbWFkZSBhIHBlcmZvcm1hbmNlIG9yIHNhZmV0eSBpbXByb3ZlbWVudCwgYXMgdGhlIHBhdGNoIHJlcGxhY2VzIGBzdHJsY2F0YCB3aXRoIGBzZXFfYnVmX3ByaW50ZmAsIHV0aWxpemluZyBhIGBzZXFfYnVmYC4gVGhpcyB1c3VhbGx5IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gYXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3B0aW1pemUgc3RyaW5nIG1hbmlwdWxhdGlvbi5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnkgYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbW1lZGlhdGVseSB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGxzIHRvIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2l0aGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBtb2RpZmljYXRpb24uIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9uIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyNy4xMTcxMTY2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzMzkwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RldmxpbmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kZXZsaW5rL2Rldi5jPTExMzQ9aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTExODctXFxubmV0L2RldmxpbmsvZGV2LmM6MTE4ODpzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9kZXYuYy0xMTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2RldmxpbmsvZGV2LmM9MTIyND12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOlxcdFxcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcXG5uZXQvZGV2bGluay9kZXYuYy0xMjMzLVxcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyNy4yMTk0OTM4NTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYyMzU5MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgaW1wYWN0LiBMZXQncyBzZWUuLi4gSSdsbCBkaXZlIGluIGFuZCB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGJlaW5nIHVzZWQuIFRoYXQnbGwgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBwdXJwb3NlIGl0IHNlcnZlcyB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgdHJ1ZSBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzoyOS45ODE4NTUzNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MzYwNDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMDg9dm9pZCBkZXZsaW5rX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMDktXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oOjIxMTA6dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMTEtXFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuLS1cXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEzMz1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjEzNDpkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEzNS17XFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxcbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMjMtXFxubmV0L2RldmxpbmsvZGV2LmM6MTIyNDp2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9kZXYuYy0xMjI1LVxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XFx0XFx0XFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZWluZm8uZndfdmVyc2lvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzIuNzI1NDY0NTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDIxMzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0cmlnZ2VyZWQgYnkgYGRldl9ldGh0b29sYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBHb29kLCB0aGF0J3MgYSBjbGVhcmx5IGRlZmluZWQgZW50cnkgcG9pbnQgYW5kIHNob3VsZCBiZSByZWFkaWx5IHRlc3RhYmxlLiBJIGNhbiB3b3JrIHdpdGggdGhhdC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGlzIGluIGBuZXQvZGV2bGluay9kZXYuY2AsIHNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gSG1tLCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBvaCB5ZWFoLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZXRodG9vbCBpbmZvIHJldHJpZXZhbC4gU28sIHRoaXMgY2hhbmdlIGlzIGRlZmluaXRlbHkgYWZmZWN0aW5nIGhvdyBldGh0b29sIGludGVyYWN0cyB3aXRoLCBvciByZXRyaWV2ZXMgaW5mb3JtYXRpb24gZnJvbSwgdGhlIGRldmxpbmsgc3Vic3lzdGVtLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2suLi4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBkZXZsaW5rIGEgY29yZSBwYXJ0IG9mIG5ldHdvcmtpbmcsIG9yIGlzIGl0IGEgbW9kdWxlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9kZXZsaW5rL01ha2VmaWxlYCB0byBjb25maXJtIGl0cyBidWlsZCBzdGF0dXMuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaWYgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGRlcGVuZGVuY3kgaXNzdWVzIGR1cmluZyB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjM2LjQwOTY4MDEzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxMTU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjM2LjUyNjgwMTE0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Mjc3NjQ4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOZXR3b3JrIERldmljZSBMaW5raW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gbmV0d29yayBkZXZpY2UgbGlua2luZywgYW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIEknbSBzZWVpbmcgaXMgYE5FVF9ERVZMSU5LYC4gTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHRoZSBzdWJqZWN0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIHNvbWV0aGluZy4gSSBjYW4ndCBqdXN0IGFzc3VtZSBJJ20gYXdhcmUgb2YgYWxsIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzguOTU0NTY4MzIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM3NDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9NYWtlZmlsZS0yLVxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjM6b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcXFxcbm5ldC9kZXZsaW5rL01ha2VmaWxlOjQ6XFx0IHJlc291cmNlLm8gcGFyYW0ubyByZWdpb24ubyBoZWFsdGgubyB0cmFwLm8gcmF0ZS5vIGxpbmVjYXJkLm8gc2hfZGV2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6MzkuMDQxOTQ3Mjg0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc5NTM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIENvbXBhdGliaWxpdHkgVmVyc2lvbiBVcGRhdGUqKlxuXG5Pa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGFsbCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggY29uZmlndXJhdGlvbi13aXNlIGlzIGBORVRfREVWTElOS2AuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gLSBpdCdzIGxpa2VseSBvbmUgb2YgdGhvc2UuIEFoLCB0aGUgcGF0Y2ggcmVwbGFjZXMgYHN0cmxjYXRgIHdpdGggYHNlcV9idWZfcHJpbnRmYC4gUmlnaHQsIHRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5LiBJdCdzIGFkZHJlc3NpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc3RyaW5nIHRydW5jYXRpb24sIHNvIGEgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IGltcHJvdmVtZW50LCBhbmQgYWxzbyBjaGFuZ2luZyBob3cgdGhlIHZlcnNpb24gc3RyaW5nIGlzIHB1dCB0b2dldGhlci4gV2FpdCwgSSBzZWUgbm93IC0gaXQncyB1c2luZyBgc2VxX2J1Zl9wcmludGZgLiBPa2F5LCB0aGF0J3MgZ29vZCB0byBrbm93LiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBzdGF0aWMuLi5ZZXAsIGl0IGlzLiBBbHJpZ2h0LCBzbyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyB0aGUgYWN0dWFsIGV4cG9ydGVkIGZ1bmN0aW9uIHRoZW4uIEZpbmFsbHksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgdHlwZSBvZiBgTkVUX0RFVkxJTktgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaGFuZGxlcyB0aGUgY29uZmlnIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NDMuMTg5OTAzMjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzA4NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc5PWNvbmZpZyBORVRfU09DS19NU0dcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Ni1cXG5uZXQvS2NvbmZpZzo0ODc6Y29uZmlnIE5FVF9ERVZMSU5LXFxubmV0L0tjb25maWctNDg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NDMuMzIyOTkyNTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDc2Njc4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyBhIERyaXZlciBDb25maWd1cmF0aW9uIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBkcml2ZXIgc2V0dGluZywgYW5kIGl0IHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgYSBzaW1wbGUgb24vb2ZmIHNlbGVjdGlvbiBmb3IgZHJpdmVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYSBib29sZWFuLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgKndoeSo/XCIuIEkgc3RhcnQgd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGludm9sdmVkOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyAqZHJpdmluZyogdGhpcyBzZWxlY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiB0aGlzIGJvb2xlYW4uIExldCdzIHNlZSB3aGF0IGV4cGxpY2l0bHkgc2VsZWN0cyBgTkVUX0RFVkxJTktgLCBiZWNhdXNlIHRoYXQgbGlrZWx5IHByb3ZpZGVzIGltcG9ydGFudCBjbHVlcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjQ2LjIzMDY2MjcwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NzA5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfREVWTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE3MT1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTc0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTEtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMy1cXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzUtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnPTY9Y29uZmlnIFBSRVNURVJBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctOS1cXHRkZXBlbmRzIG9uIEJSSURHRSB8fCBCUklER0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTEtXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz0yOD1jb25maWcgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMzEtXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMzLVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Nj1jb25maWcgTUxYNV9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy05LVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTEtXFx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc9Nj1jb25maWcgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWctMTQtXFx0c2VsZWN0IFhaX0RFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjg6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy05LVxcdHNlbGVjdCBNTFhGV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjc6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI4LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZz0xNT1jb25maWcgTVNDQ19PQ0VMT1RfU1dJVENIX0xJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnOjE3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTIzLVxcdGRlcGVuZHMgb24gVExTIFxcdTAwMjZcXHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWctMjUtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTc2PWNvbmZpZyBRRURcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgxLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTgzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnPTE5PWNvbmZpZyBTRkNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMi1cXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03My1cXHRzZWxlY3QgUkVHTUFQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTc1LVxcdGltcGx5IFBIWV9USV9HTUlJX1NFTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBBUkNIX0szIFxcdTAwMjZcXHUwMDI2IE9GIFxcdTAwMjZcXHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjQ2LjQ3OTM3ODE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTg2NTEwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTkVUREVWU0lNKipcblxuT2theSwgc28gSSBzZWUgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxscyBpbiBgTkVUX0RFVkxJTktgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBxdWl0ZSB1c2VmdWwuIFNpbmNlIGBORVRfREVWTElOS2AgaXMgcmVsYXRlZCB0byBkZXZpY2UgbGluayBmdW5jdGlvbmFsaXR5LCBoYXZpbmcgYSBzaW11bGF0ZWQgZGV2aWNlLCBhcyBwcm92aWRlZCBieSBgTkVUREVWU0lNYCwgd291bGQgYmUgYSBwZXJmZWN0IHdheSB0byB0ZXN0IGFuZCBkZWJ1ZyBhbnkgZGV2bGluay1yZWxhdGVkIGNvZGUuIEl0J3MgYSBsb3ctcmlzaywgY29udHJvbGxlZCBlbnZpcm9ubWVudCBmb3IgZXhwbG9yaW5nIGhvdyB0aGUgc3lzdGVtIHJlYWN0cy4gVGhlcmVmb3JlLCBlbmFibGluZyBgTkVUREVWU0lNYCBzZWVtcyBsaWtlIGEgc29saWQgY29uZmlndXJhdGlvbiBjaG9pY2UgZm9yIGFueSBkZXZlbG9wZXIgd29ya2luZyB3aXRoLCBvciBpbnRlcmVzdGVkIGluLCBgTkVUX0RFVkxJTktgIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRlbHZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgTkVUREVWU0lNYCBtb2R1bGUgaXRzZWxmIGFuZCBzZWUgd2hhdCBmZWF0dXJlcyBpdCBhY3R1YWxseSBvZmZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo0OS4zMzgwMzA5NTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzEwODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo0OS40MzYzNDc1MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyODgxNjA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRERVZTSU1gIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCB0aGF0J3Mgc3RlcCBvbmUuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzbid0IGBORVRfREVWTElOS2AgYWN0dWFsbHkgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZT8gSXQncyB0aGUgY29yZS4gQmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiBgTkVUREVWU0lNYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBoZXJlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGUgYG5ldGRldnNpbWAgZHJpdmVyIGFjdHVhbGx5IHV0aWxpemUgb3IgZGVwZW5kIG9uIHRoZSBjb21wYXRpYmlsaXR5IHZlcnNpb24gY2hlY2sgZnJvbSBgZGV2bGlua2A/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24gaXMgZXZlbiBjYWxsZWQgKmJ5KiBgbmV0ZGV2c2ltYC4gSWYgaXQgaXMsIHRoZW4gdGhlIGxpbmthZ2UgaXMgZXhwbGljaXQgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhleSdyZSBib3RoIGVuYWJsZWQsIHdpdGggdGhlIHJpZ2h0IHZlcnNpb25zLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IG9mIGBkZXZsaW5rYCBpcyBhY3R1YWxseSB1c2VkIGFuZCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCdzIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NTIuNTY1MTY1NzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjAwMzEwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjUyLjY0NzE5MjM3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxNzM4MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhlIHRyYWNlIGRvZXNuJ3Qgc2hvdyBpdCBvcmlnaW5hdGluZyBmcm9tIGBuZXRkZXZzaW1gLCB3aGljaCBpcyBvZGQuIE15IGludHVpdGlvbiBzYXlzIHRoZXJlIGlzIGEgc2ltcGxlIHJlYXNvbi5cblxuQWxyaWdodCwgYSBjbHVlIHBvcHMgdXA6IGBkZXZfZXRodG9vbGAgaXMgY2FsbGluZyBpdC4gTm93LCB0aGF0IHJpbmdzIGEgYmVsbCEgYGRldl9ldGh0b29sYCBsaXZlcyBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGBldGh0b29sYCBpcyBhIHRvb2wgZm9yIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBjb21wYXRpYmlsaXR5IGNoZWNrcyBvZnRlbiBmYWxsIHVuZGVyIGl0cyBwdXJ2aWV3LlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpczsgSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBuZXQvZXRodG9vbC9pb2N0bC5jYCBhbmQgZGlnIGludG8gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGRldl9ldGh0b29sYC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEknbGwgYmV0IEknbGwgZmluZCBteSBhbnN3ZXIgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxNzo1NS43Nzg5MzM4NjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU1NTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2ODE6XFx0XFx0XFx0ZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhdGUtXFx1MDAzZWluZm8uZndfdmVyc2lvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTc6NTUuODgxNTI0MjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTU5ODg3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgRHJpdmVyIEluZm8gUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgYGRldl9ldGh0b29sYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgZXRodG9vbCBvcGVyYXRpb25zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIGNhbGxlZCB3aGVuIHdlJ3JlIHRyeWluZyB0byBncmFiIGV0aHRvb2wgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGluZm9ybWF0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgYGV0aHRvb2xfZ2V0X2RydmluZm9gLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoaXMgaXMgbGlrZWx5IHdpdGhpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBmb3IgZXRodG9vbCBmdW5jdGlvbnMgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgYGRldl9ldGh0b29sYCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBldGh0b29sX2dldF9kcnZpbmZvYC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGZsb3cgYW5kIHNlZSB3aGVyZSB0aGUgYWN0dWFsIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBiZWluZyBjb2xsZWN0ZWQgYW5kIHByZXNlbnRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjU5LjA5NzUxNjE2MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY2NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY0NjpcXHRpbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbjM2NDc6XFx0e1xcbjM2NDg6XFx0XFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xcbjM2NDk6XFx0XFx0dTMyIGV0aGNtZDtcXG4zNjUwOlxcdFxcdGludCByYztcXG4zNjUxOlxcdFxcbjM2NTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpXFxuMzY1MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zNjU0OlxcdFxcbjM2NTU6XFx0XFx0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xcbjM2NTY6XFx0XFx0aWYgKCFzdGF0ZSlcXG4zNjU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM2NTg6XFx0XFxuMzY1OTpcXHRcXHRzd2l0Y2ggKGV0aGNtZCkge1xcbjM2NjA6XFx0XFx0Y2FzZSBFVEhUT09MX0ZMQVNIREVWOlxcbjM2NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzdGF0ZS1cXHUwMDNlZWZsLCB1c2VyYWRkciwgc2l6ZW9mKHN0YXRlLVxcdTAwM2VlZmwpKSkge1xcbjM2NjI6XFx0XFx0XFx0XFx0cmMgPSAtRUZBVUxUO1xcbjM2NjM6XFx0XFx0XFx0XFx0Z290byBleGl0X2ZyZWU7XFxuMzY2NDpcXHRcXHRcXHR9XFxuMzY2NTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZWZsLmRhdGFbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUgLSAxXSA9IDA7XFxuMzY2NjpcXHRcXHRcXHRicmVhaztcXG4zNjY3OlxcdFxcdH1cXG4zNjY4OlxcdFxcbjM2Njk6XFx0XFx0cmMgPSBfX2Rldl9ldGh0b29sKG5ldCwgaWZyLCB1c2VyYWRkciwgZXRoY21kLCBzdGF0ZSk7XFxuMzY3MDpcXHRcXHRpZiAocmMpXFxuMzY3MTpcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4zNjcyOlxcdFxcbjM2NzM6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4zNjc0OlxcdFxcdGNhc2UgRVRIVE9PTF9GTEFTSERFVjpcXG4zNjc1OlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG4zNjc2OlxcdFxcdFxcdFxcdHJjID0gZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0YXRlLVxcdTAwM2VkZXZsaW5rLFxcbjM2Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0YXRlLVxcdTAwM2VlZmwuZGF0YSk7XFxuMzY3ODpcXHRcXHRcXHRicmVhaztcXG4zNjc5OlxcdFxcdGNhc2UgRVRIVE9PTF9HRFJWSU5GTzpcXG4zNjgwOlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG4zNjgxOlxcdFxcdFxcdFxcdGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdGF0ZS1cXHUwMDNlZGV2bGluayxcXG4zNjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGF0ZS1cXHUwMDNlaW5mby5md192ZXJzaW9uLFxcbjM2ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdGF0ZS1cXHUwMDNlaW5mby5md192ZXJzaW9uKSk7XFxuMzY4NDpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcXHUwMDI2c3RhdGUtXFx1MDAzZWluZm8sIHNpemVvZihzdGF0ZS1cXHUwMDNlaW5mbykpKSB7XFxuMzY4NTpcXHRcXHRcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuMzY4NjpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4zNjg3OlxcdFxcdFxcdH1cXG4zNjg4OlxcdFxcdFxcdGJyZWFrO1xcbjM2ODk6XFx0XFx0fVxcbjM2OTA6XFx0XFxuMzY5MTpcXHRleGl0X2ZyZWU6XFxuMzY5MjpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWRldmxpbmspXFxuMzY5MzpcXHRcXHRcXHRkZXZsaW5rX3B1dChzdGF0ZS1cXHUwMDNlZGV2bGluayk7XFxuMzY5NDpcXHRcXHRrZnJlZShzdGF0ZSk7XFxuMzY5NTpcXHRcXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE3OjU5LjEwMTk4NzM4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MDExODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEVUSFRPT0xfR0RSVklORk8gRmxvdyB3aXRoIERldmxpbmsqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBpdCdzIHRyaWdnZXJlZCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgRVRIVE9PTF9HRFJWSU5GT2AgcmVxdWVzdCBjb21lcyBpbiAqYW5kKiBpZiBgc3RhdGUtXHUwMDNlZGV2bGlua2AgaXMgcG9wdWxhdGVkLiBUaGF0IGBzdGF0ZS1cdTAwM2VkZXZsaW5rYCBwb2ludGVyIGlzIGtleSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGdldHMgc2V0LiBNeSBpbml0aWFsIGh1bmNoLCBmcm9tIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGlzIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZS4gTGV0IG1lIGNvbmZpcm0gdGhhdCBieSBqdW1waW5nIGluIGFuZCBleGFtaW5pbmcgYF9fZGV2X2V0aHRvb2xgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGhhbmRsZXMgYHN0YXRlLVx1MDAzZWRldmxpbmtgLiBJIHN1c3BlY3QgaXQncyB0aGUgZ2F0ZWtlZXBlci4gVGltZSB0byBkaWcgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjAyLjM1OTAwMTk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzUwMDpcXHRcXHRjYXNlIEVUSFRPT0xfU1NHOlxcbjM1MDE6XFx0XFx0Y2FzZSBFVEhUT09MX1NUU086XFxuMzUwMjpcXHRcXHRjYXNlIEVUSFRPT0xfU0dTTzpcXG4zNTAzOlxcdFxcdGNhc2UgRVRIVE9PTF9TR1JPOlxcbjM1MDQ6XFx0XFx0XFx0cmMgPSBldGh0b29sX3NldF9vbmVfZmVhdHVyZShkZXYsIHVzZXJhZGRyLCBldGhjbWQpO1xcbjM1MDU6XFx0XFx0XFx0YnJlYWs7XFxuMzUwNjpcXHRcXHRjYXNlIEVUSFRPT0xfR0NIQU5ORUxTOlxcbjM1MDc6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF9jaGFubmVscyhkZXYsIHVzZXJhZGRyKTtcXG4zNTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM1MDk6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4zNTEwOlxcdFxcdFxcdHJjID0gZXRodG9vbF9zZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7XFxuMzUxMTpcXHRcXHRcXHRicmVhaztcXG4zNTEyOlxcdFxcdGNhc2UgRVRIVE9PTF9TRVRfRFVNUDpcXG4zNTEzOlxcdFxcdFxcdHJjID0gZXRodG9vbF9zZXRfZHVtcChkZXYsIHVzZXJhZGRyKTtcXG4zNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjM1MTU6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc6XFxuMzUxNjpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZmxhZyhkZXYsIHVzZXJhZGRyKTtcXG4zNTE3OlxcdFxcdFxcdGJyZWFrO1xcbjM1MTg6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9EVU1QX0RBVEE6XFxuMzUxOTpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShkZXYsIHVzZXJhZGRyKTtcXG4zNTIwOlxcdFxcdFxcdGJyZWFrO1xcbjM1MjE6XFx0XFx0Y2FzZSBFVEhUT09MX0dFVF9UU19JTkZPOlxcbjM1MjI6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xcbjM1MjM6XFx0XFx0XFx0YnJlYWs7XFxuMzUyNDpcXHRcXHRjYXNlIEVUSFRPT0xfR01PRFVMRUlORk86XFxuMzUyNTpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X21vZHVsZV9pbmZvKGRldiwgdXNlcmFkZHIpO1xcbjM1MjY6XFx0XFx0XFx0YnJlYWs7XFxuMzUyNzpcXHRcXHRjYXNlIEVUSFRPT0xfR01PRFVMRUVFUFJPTTpcXG4zNTI4OlxcdFxcdFxcdHJjID0gZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbShkZXYsIHVzZXJhZGRyKTtcXG4zNTI5OlxcdFxcdFxcdGJyZWFrO1xcbjM1MzA6XFx0XFx0Y2FzZSBFVEhUT09MX0dUVU5BQkxFOlxcbjM1MzE6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF90dW5hYmxlKGRldiwgdXNlcmFkZHIpO1xcbjM1MzI6XFx0XFx0XFx0YnJlYWs7XFxuMzUzMzpcXHRcXHRjYXNlIEVUSFRPT0xfU1RVTkFCTEU6XFxuMzUzNDpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X3R1bmFibGUoZGV2LCB1c2VyYWRkcik7XFxuMzUzNTpcXHRcXHRcXHRicmVhaztcXG4zNTM2OlxcdFxcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XFxuMzUzNzpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X3BoeV9zdGF0cyhkZXYsIHVzZXJhZGRyKTtcXG4zNTM4OlxcdFxcdFxcdGJyZWFrO1xcbjM1Mzk6XFx0XFx0Y2FzZSBFVEhUT09MX1BFUlFVRVVFOlxcbjM1NDA6XFx0XFx0XFx0cmMgPSBldGh0b29sX3NldF9wZXJfcXVldWUoZGV2LCB1c2VyYWRkciwgc3ViX2NtZCk7XFxuMzU0MTpcXHRcXHRcXHRicmVhaztcXG4zNTQyOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbjM1NDM6XFx0XFx0XFx0cmMgPSBldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIHVzZXJhZGRyKTtcXG4zNTQ0OlxcdFxcdFxcdGJyZWFrO1xcbjM1NDU6XFx0XFx0Y2FzZSBFVEhUT09MX1NMSU5LU0VUVElOR1M6XFxuMzU0NjpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKGRldiwgdXNlcmFkZHIpO1xcbjM1NDc6XFx0XFx0XFx0YnJlYWs7XFxuMzU0ODpcXHRcXHRjYXNlIEVUSFRPT0xfUEhZX0dUVU5BQkxFOlxcbjM1NDk6XFx0XFx0XFx0cmMgPSBnZXRfcGh5X3R1bmFibGUoZGV2LCB1c2VyYWRkcik7XFxuMzU1MDpcXHRcXHRcXHRicmVhaztcXG4zNTUxOlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfU1RVTkFCTEU6XFxuMzU1MjpcXHRcXHRcXHRyYyA9IHNldF9waHlfdHVuYWJsZShkZXYsIHVzZXJhZGRyKTtcXG4zNTUzOlxcdFxcdFxcdGJyZWFrO1xcbjM1NTQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dGRUNQQVJBTTpcXG4zNTU1OlxcdFxcdFxcdHJjID0gZXRodG9vbF9nZXRfZmVjcGFyYW0oZGV2LCB1c2VyYWRkcik7XFxuMzU1NjpcXHRcXHRcXHRicmVhaztcXG4zNTU3OlxcdFxcdGNhc2UgRVRIVE9PTF9TRkVDUEFSQU06XFxuMzU1ODpcXHRcXHRcXHRyYyA9IGV0aHRvb2xfc2V0X2ZlY3BhcmFtKGRldiwgdXNlcmFkZHIpO1xcbjM1NTk6XFx0XFx0XFx0YnJlYWs7XFxuMzU2MDpcXHRcXHRkZWZhdWx0OlxcbjM1NjE6XFx0XFx0XFx0cmMgPSAtRU9QTk9UU1VQUDtcXG4zNTYyOlxcdFxcdH1cXG4zNTYzOlxcdFxcbjM1NjQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWNvbXBsZXRlKVxcbjM1NjU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlY29tcGxldGUoZGV2KTtcXG4zNTY2OlxcdFxcbjM1Njc6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4zNTY4OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlTX0lEOlxcbjM1Njk6XFx0XFx0XFx0LyogRG9uJ3QgY2hlY2sgZmVhdHVyZXMgaWYgb3BlcmF0aW9uIGRyb3BzIHRoZSBsb2Nrcy5cXG4zNTcwOlxcdFxcdFxcdCAqIFNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBjaGFuZ2VkIGZlYXR1cmVzIGluIHBhcmFsbGVsLlxcbjM1NzE6XFx0XFx0XFx0ICovXFxuMzU3MjpcXHRcXHRcXHRicmVhaztcXG4zNTczOlxcdFxcdGRlZmF1bHQ6XFxuMzU3NDpcXHRcXHRcXHRpZiAob2xkX2ZlYXR1cmVzICE9IGRldi1cXHUwMDNlZmVhdHVyZXMpIHtcXG4zNTc1OlxcdFxcdFxcdFxcdGlmIChoYXNfcnRubF9sb2NrKVxcbjM1NzY6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShkZXYpO1xcbjM1Nzc6XFx0XFx0XFx0XFx0ZWxzZVxcbjM1Nzg6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZXRodG9vbCBjbWQgJXUgY2hhbmdlZCBmZWF0dXJlcyB3aXRob3V0IHJ0bmxfbG9ja1xcXCIsIGV0aGNtZCk7XFxuMzU3OTpcXHRcXHRcXHR9XFxuMzU4MDpcXHRcXHR9XFxuMzU4MTpcXHRvdXQ6XFxuMzU4MjpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXYucGFyZW50KVxcbjM1ODM6XFx0XFx0XFx0cG1fcnVudGltZV9wdXQoZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4zNTg0OlxcdFxcbjM1ODU6XFx0XFx0cmV0dXJuIHJjO1xcbjM1ODY6XFx0fVxcbjM1ODc6XFx0XFxuMzU4ODpcXHQvKiBDb21tYW5kcyB0aGF0IG1heSB0b2dnbGUgZGV2LVxcdTAwM2VmZWF0dXJlcyBpbiBuZXQvZXRodG9vbC9pb2N0bC5jIGFuZCBzb1xcbjM1ODk6XFx0ICogY2FsbCBpbnRvIF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpLCB3aGljaCBzdGlsbCByZXF1aXJlcyBydG5sX2xvY2suXFxuMzU5MDpcXHQgKiBEcml2ZXItZGVjaWRlZCBTRVQgY29tbWFuZHMgdGhhdCBtYXkgY2hhaW4gaW50byBydG5sLW9ubHkgaGVscGVycyBhcmVcXG4zNTkxOlxcdCAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxuMzU5MjpcXHQgKi9cXG4zNTkzOlxcdHN0YXRpYyBib29sIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXModTMyIGV0aGNtZClcXG4zNTk0OlxcdHtcXG4zNTk1OlxcdFxcdHN3aXRjaCAoZXRoY21kKSB7XFxuMzU5NjpcXHRcXHRjYXNlIEVUSFRPT0xfU0ZFQVRVUkVTOlxcbjM1OTc6XFx0XFx0Y2FzZSBFVEhUT09MX1NGTEFHUzpcXG4zNTk4OlxcdFxcdGNhc2UgRVRIVE9PTF9TVFhDU1VNOlxcbjM1OTk6XFx0XFx0Y2FzZSBFVEhUT09MX1NSWENTVU06XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjAyLjM1OTMwMzUwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4NDc0OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqTWlzc2luZyB0aGUgVGFyZ2V0OiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgd2FzIHNjYW5uaW5nIHRoYXQgYF9fZGV2X2V0aHRvb2xgIGZ1bmN0aW9uIHNuaXBwZXQsIGFuZCBJIGRpZG4ndCBjYXRjaCBzaWdodCBvZiBgRVRIVE9PTF9HRFJWSU5GT2AgaW4gdGhlcmUuIFRoYXQncyB1bnVzdWFsLiBJdCBzaG91bGQgZGVmaW5pdGVseSBiZSB0aGVyZSBpZiB0aGUgaW50ZW50aW9uIGlzIHRvIGdhdGhlciBkcml2ZXIgaW5mb3JtYXRpb24uIExldCBtZSBiYWNrdHJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIHByZWNlZGluZyBsaW5lcyBvZiBjb2RlLiBJIG5lZWQgdG8gZW5zdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBQZXJoYXBzIGl0J3MgY2FsbGVkIGVsc2V3aGVyZSwgb3IgbWF5YmUgSSdtIGxvb2tpbmcgYXQgYW4gb3V0ZGF0ZWQgdmVyc2lvbj8gRWl0aGVyIHdheSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgdGhlIGltbWVkaWF0ZSBjb2RlIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MDUuMDg3NzgzNzg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTAwOlxcdFxcdFxcdGZvcl9lYWNoX3NldF9iaXQoaSwgcXVldWVfbWFzaywgYml0KSB7XFxuMzEwMTpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKGRldiwgaSwgdG1wKTtcXG4zMTAyOlxcdFxcdFxcdFxcdHRtcCsrO1xcbjMxMDM6XFx0XFx0XFx0fVxcbjMxMDQ6XFx0XFx0fVxcbjMxMDU6XFx0XFx0a2ZyZWUoYmFja3VwKTtcXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0cmV0dXJuIHJldDtcXG4zMTA4OlxcdH1cXG4zMTA5OlxcdFxcbjMxMTA6XFx0c3RhdGljIGludCBub2lubGluZV9mb3Jfc3RhY2sgZXRodG9vbF9zZXRfcGVyX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMzExMTpcXHRcXHRcXHRcXHRcXHQgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLCB1MzIgc3ViX2NtZClcXG4zMTEyOlxcdHtcXG4zMTEzOlxcdFxcdHN0cnVjdCBldGh0b29sX3Blcl9xdWV1ZV9vcCBwZXJfcXVldWVfb3B0O1xcbjMxMTQ6XFx0XFxuMzExNTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnBlcl9xdWV1ZV9vcHQsIHVzZXJhZGRyLCBzaXplb2YocGVyX3F1ZXVlX29wdCkpKVxcbjMxMTY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzExNzpcXHRcXG4zMTE4OlxcdFxcdGlmIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kICE9IHN1Yl9jbWQpXFxuMzExOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTIwOlxcdFxcbjMxMjE6XFx0XFx0c3dpdGNoIChwZXJfcXVldWVfb3B0LnN1Yl9jb21tYW5kKSB7XFxuMzEyMjpcXHRcXHRjYXNlIEVUSFRPT0xfR0NPQUxFU0NFOlxcbjMxMjM6XFx0XFx0XFx0cmV0dXJuIGV0aHRvb2xfZ2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcXHUwMDI2cGVyX3F1ZXVlX29wdCk7XFxuMzEyNDpcXHRcXHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxcbjMxMjU6XFx0XFx0XFx0cmV0dXJuIGV0aHRvb2xfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShkZXYsIHVzZXJhZGRyLCBcXHUwMDI2cGVyX3F1ZXVlX29wdCk7XFxuMzEyNjpcXHRcXHRkZWZhdWx0OlxcbjMxMjc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjMxMjg6XFx0XFx0fVxcbjMxMjk6XFx0fVxcbjMxMzA6XFx0XFxuMzEzMTpcXHRzdGF0aWMgaW50IGV0aHRvb2xfcGh5X3R1bmFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGV0aHRvb2xfdHVuYWJsZSAqdHVuYSlcXG4zMTMyOlxcdHtcXG4zMTMzOlxcdFxcdHN3aXRjaCAodHVuYS1cXHUwMDNlaWQpIHtcXG4zMTM0OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfRE9XTlNISUZUOlxcbjMxMzU6XFx0XFx0Y2FzZSBFVEhUT09MX1BIWV9GQVNUX0xJTktfRE9XTjpcXG4zMTM2OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfU0hPUlRfQ0FCTEVfUFJFU0VUOlxcbjMxMzc6XFx0XFx0XFx0aWYgKHR1bmEtXFx1MDAzZWxlbiAhPSBzaXplb2YodTgpIHx8XFxuMzEzODpcXHRcXHRcXHQgICAgdHVuYS1cXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTgpXFxuMzEzOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTQwOlxcdFxcdFxcdGJyZWFrO1xcbjMxNDE6XFx0XFx0Y2FzZSBFVEhUT09MX1BIWV9FRFBEOlxcbjMxNDI6XFx0XFx0XFx0aWYgKHR1bmEtXFx1MDAzZWxlbiAhPSBzaXplb2YodTE2KSB8fFxcbjMxNDM6XFx0XFx0XFx0ICAgIHR1bmEtXFx1MDAzZXR5cGVfaWQgIT0gRVRIVE9PTF9UVU5BQkxFX1UxNilcXG4zMTQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxNDU6XFx0XFx0XFx0YnJlYWs7XFxuMzE0NjpcXHRcXHRjYXNlIEVUSFRPT0xfUEhZX0xQRl9CVzpcXG4zMTQ3OlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfRFNQX0VRX0lOSVRfVkFMVUU6XFxuMzE0ODpcXHRcXHRcXHRpZiAodHVuYS1cXHUwMDNlbGVuICE9IHNpemVvZih1MzIpIHx8XFxuMzE0OTpcXHRcXHRcXHQgICAgdHVuYS1cXHUwMDNldHlwZV9pZCAhPSBFVEhUT09MX1RVTkFCTEVfVTMyKVxcbjMxNTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzE1MTpcXHRcXHRcXHRicmVhaztcXG4zMTUyOlxcdFxcdGRlZmF1bHQ6XFxuMzE1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTU0OlxcdFxcdH1cXG4zMTU1OlxcdFxcbjMxNTY6XFx0XFx0cmV0dXJuIDA7XFxuMzE1NzpcXHR9XFxuMzE1ODpcXHRcXG4zMTU5OlxcdHN0YXRpYyBpbnQgZ2V0X3BoeV90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcilcXG4zMTYwOlxcdHtcXG4zMTYxOlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXFx1MDAzZXBoeWRldjtcXG4zMTYyOlxcdFxcdHN0cnVjdCBldGh0b29sX3R1bmFibGUgdHVuYTtcXG4zMTYzOlxcdFxcdGJvb2wgcGh5X2Rydl90dW5hYmxlO1xcbjMxNjQ6XFx0XFx0dm9pZCAqZGF0YTtcXG4zMTY1OlxcdFxcdGludCByZXQ7XFxuMzE2NjpcXHRcXG4zMTY3OlxcdFxcdHBoeV9kcnZfdHVuYWJsZSA9IHBoeWRldiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlZ2V0X3R1bmFibGU7XFxuMzE2ODpcXHRcXHRpZiAoIXBoeV9kcnZfdHVuYWJsZSBcXHUwMDI2XFx1MDAyNiAhZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90dW5hYmxlKVxcbjMxNjk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjMxNzA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0dW5hLCB1c2VyYWRkciwgc2l6ZW9mKHR1bmEpKSlcXG4zMTcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMxNzI6XFx0XFx0cmV0ID0gZXRodG9vbF9waHlfdHVuYWJsZV92YWxpZChcXHUwMDI2dHVuYSk7XFxuMzE3MzpcXHRcXHRpZiAocmV0KVxcbjMxNzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zMTc1OlxcdFxcdGRhdGEgPSBremFsbG9jKHR1bmEubGVuLCBHRlBfVVNFUik7XFxuMzE3NjpcXHRcXHRpZiAoIWRhdGEpXFxuMzE3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMTc4OlxcdFxcdGlmIChwaHlfZHJ2X3R1bmFibGUpIHtcXG4zMTc5OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuMzE4MDpcXHRcXHRcXHRyZXQgPSBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlZ2V0X3R1bmFibGUocGh5ZGV2LCBcXHUwMDI2dHVuYSwgZGF0YSk7XFxuMzE4MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuMzE4MjpcXHRcXHR9IGVsc2Uge1xcbjMxODM6XFx0XFx0XFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90dW5hYmxlKGRldiwgXFx1MDAyNnR1bmEsIGRhdGEpO1xcbjMxODQ6XFx0XFx0fVxcbjMxODU6XFx0XFx0aWYgKHJldClcXG4zMTg2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxODc6XFx0XFx0dXNlcmFkZHIgKz0gc2l6ZW9mKHR1bmEpO1xcbjMxODg6XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4zMTg5OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIGRhdGEsIHR1bmEubGVuKSlcXG4zMTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxOTE6XFx0XFx0cmV0ID0gMDtcXG4zMTkyOlxcdFxcbjMxOTM6XFx0b3V0OlxcbjMxOTQ6XFx0XFx0a2ZyZWUoZGF0YSk7XFxuMzE5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxOTY6XFx0fVxcbjMxOTc6XFx0XFxuMzE5ODpcXHRzdGF0aWMgaW50IHNldF9waHlfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuMzE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjA1LjA4ODExNDM0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUxODc5NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBFVEhUT09MX0dEUlZJTkZPYCBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGBFVEhUT09MX0dEUlZJTkZPYCwgYW5kIHRoZSBpbW1lZGlhdGUgcGxhY2UgbXkgbWluZCBqdW1wcyB0byBpcyB0aGUgY29yZSBvZiBldGh0b29sJ3MgaW9jdGwgaGFuZGxpbmc6IGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gSXQncyBhbG1vc3QgYXV0b21hdGljLCByZWFsbHkuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIHJlcXVlc3RzLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIGlzIGNsZWFybHkgYW4gaW9jdGwgY29tbWFuZC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgZXRodG9vbCdzIHN0cnVjdHVyZSBhbmQgdGhlIGRyaXZlciBpbnRlcmFjdGlvbiwgdGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBrbm93IEknbGwgcHJvYmFibHkgZmluZCB0aGUgY2FzZSBzdGF0ZW1lbnQgb3IgZnVuY3Rpb24gaGFuZGxpbmcgYEVUSFRPT0xfR0RSVklORk9gIHRoZXJlLCBhbG9uZyB3aXRoIHRoZSBzdWJzZXF1ZW50IGNhbGxzIGludG8gZHJpdmVyLXNwZWNpZmljIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODowOC42Mzk5OTYxNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODEzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfR0RSVklORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jPTczND1ldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpyc3ApXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTczOC1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjczOTpcXHRyc3AtXFx1MDAzZWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTztcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTc0MC1cXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby52ZXJzaW9uLCBpbml0X3V0c19ucy5uYW1lLnJlbGVhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzI4OS1cXHRjYXNlIEVUSFRPT0xfR1NFVDpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjMyOTA6XFx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzI5MS1cXHRjYXNlIEVUSFRPT0xfR01TR0xWTDpcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzM1NC1cXHRcXHRicmVhaztcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjMzNTU6XFx0Y2FzZSBFVEhUT09MX0dEUlZJTkZPOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzM1Ni1cXHRcXHRyYyA9IGV0aHRvb2xfZ2V0X2RydmluZm8oZGV2LCBkZXZsaW5rX3N0YXRlKTtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjc4LVxcdFxcdGJyZWFrO1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY3OTpcXHRjYXNlIEVUSFRPT0xfR0RSVklORk86XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjgwLVxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGV2bGluaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MDguNzM1ODEzNzg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzI5MzI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBldGh0b29sX2dldF9kcnZpbmZvKipcblxuUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGBFVEhUT09MX0dEUlZJTkZPYCByZXF1ZXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgZGV2X2V0aHRvb2xfbG9ja2VkYCBmdW5jdGlvbi4gQW5kIHRoYXQgZnVuY3Rpb24sIGFzIEkgc3VzcGVjdGVkLCBpcyB0aGUgb25lIHRoYXQgdGhlbiBjYWxscyB0aGUgY29yZSBgZXRodG9vbF9nZXRfZHJ2aW5mb2AgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSB0byBmaW5kIGBldGh0b29sX2dldF9kcnZpbmZvYCwgc28gbGV0IG1lIGp1bXAgb3ZlciB0byB0aGUgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbi5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgZHJpdmVyIGluZm9ybWF0aW9uIGlzIGFjdHVhbGx5IGZldGNoZWQuIFRoYXQgYHJzcC1cdTAwM2VpbmZvYCBhbmQgYHJzcC1cdTAwM2VkZXZsaW5rYCBwYXJ0IHNlZW1zIGltcG9ydGFudCwgdGhvc2UgYXJlIHByb2JhYmx5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIHRoZSBkcml2ZXIncyBkZXRhaWxzLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGdvZXMgaW50byB0aG9zZSBmaWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MTIuMzY4NzQ4OTkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczNDpcXHRldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpyc3ApXFxuIDczNTpcXHR7XFxuIDczNjpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHM7XFxuIDczNzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIDczODpcXHRcXG4gNzM5OlxcdFxcdHJzcC1cXHUwMDNlaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPO1xcbiA3NDA6XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8udmVyc2lvbiwgaW5pdF91dHNfbnMubmFtZS5yZWxlYXNlLFxcbiA3NDE6XFx0XFx0XFx0c2l6ZW9mKHJzcC1cXHUwMDNlaW5mby52ZXJzaW9uKSk7XFxuIDc0MjpcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZHJ2aW5mbykge1xcbiA3NDM6XFx0XFx0XFx0b3BzLVxcdTAwM2VnZXRfZHJ2aW5mbyhkZXYsIFxcdTAwMjZyc3AtXFx1MDAzZWluZm8pO1xcbiA3NDQ6XFx0XFx0XFx0aWYgKCFyc3AtXFx1MDAzZWluZm8uYnVzX2luZm9bMF0gXFx1MDAyNlxcdTAwMjYgcGFyZW50KVxcbiA3NDU6XFx0XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXFxuIDc0NjpcXHRcXHRcXHRcXHRcXHRzaXplb2YocnNwLVxcdTAwM2VpbmZvLmJ1c19pbmZvKSk7XFxuIDc0NzpcXHRcXHRcXHRpZiAoIXJzcC1cXHUwMDNlaW5mby5kcml2ZXJbMF0gXFx1MDAyNlxcdTAwMjYgcGFyZW50IFxcdTAwMjZcXHUwMDI2IHBhcmVudC1cXHUwMDNlZHJpdmVyKVxcbiA3NDg6XFx0XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uZHJpdmVyLCBwYXJlbnQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSxcXG4gNzQ5OlxcdFxcdFxcdFxcdFxcdHNpemVvZihyc3AtXFx1MDAzZWluZm8uZHJpdmVyKSk7XFxuIDc1MDpcXHRcXHR9IGVsc2UgaWYgKHBhcmVudCBcXHUwMDI2XFx1MDAyNiBwYXJlbnQtXFx1MDAzZWRyaXZlcikge1xcbiA3NTE6XFx0XFx0XFx0c3Ryc2NweShyc3AtXFx1MDAzZWluZm8uYnVzX2luZm8sIGRldl9uYW1lKHBhcmVudCksXFxuIDc1MjpcXHRcXHRcXHRcXHRzaXplb2YocnNwLVxcdTAwM2VpbmZvLmJ1c19pbmZvKSk7XFxuIDc1MzpcXHRcXHRcXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby5kcml2ZXIsIHBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2VuYW1lLFxcbiA3NTQ6XFx0XFx0XFx0XFx0c2l6ZW9mKHJzcC1cXHUwMDNlaW5mby5kcml2ZXIpKTtcXG4gNzU1OlxcdFxcdH0gZWxzZSBpZiAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzKSB7XFxuIDc1NjpcXHRcXHRcXHRzdHJzY3B5KHJzcC1cXHUwMDNlaW5mby5kcml2ZXIsIGRldi1cXHUwMDNlcnRubF9saW5rX29wcy1cXHUwMDNla2luZCxcXG4gNzU3OlxcdFxcdFxcdFxcdHNpemVvZihyc3AtXFx1MDAzZWluZm8uZHJpdmVyKSk7XFxuIDc1ODpcXHRcXHR9IGVsc2Uge1xcbiA3NTk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA3NjA6XFx0XFx0fVxcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHQvKlxcbiA3NjM6XFx0XFx0ICogdGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIHN0cmluZyBzZXQgaW5mbyBpcyBkZXByZWNhdGVkO1xcbiA3NjQ6XFx0XFx0ICogVXNlIEVUSFRPT0xfR1NTRVRfSU5GTyBpbnN0ZWFkLlxcbiA3NjU6XFx0XFx0ICovXFxuIDc2NjpcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudCkge1xcbiA3Njc6XFx0XFx0XFx0aW50IHJjO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRcXHRyYyA9IG9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfVEVTVCk7XFxuIDc3MDpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzcxOlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby50ZXN0aW5mb19sZW4gPSByYztcXG4gNzcyOlxcdFxcdFxcdHJjID0gb3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19TVEFUUyk7XFxuIDc3MzpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzc0OlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby5uX3N0YXRzID0gcmM7XFxuIDc3NTpcXHRcXHRcXHRyYyA9IG9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfUFJJVl9GTEFHUyk7XFxuIDc3NjpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4gNzc3OlxcdFxcdFxcdFxcdHJzcC1cXHUwMDNlaW5mby5uX3ByaXZfZmxhZ3MgPSByYztcXG4gNzc4OlxcdFxcdH1cXG4gNzc5OlxcdFxcdGlmIChvcHMtXFx1MDAzZWdldF9yZWdzX2xlbikge1xcbiA3ODA6XFx0XFx0XFx0aW50IHJldCA9IG9wcy1cXHUwMDNlZ2V0X3JlZ3NfbGVuKGRldik7XFxuIDc4MTpcXHRcXG4gNzgyOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiA3ODM6XFx0XFx0XFx0XFx0cnNwLVxcdTAwM2VpbmZvLnJlZ2R1bXBfbGVuID0gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoxMi4zNjkwMjY4MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDIyNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaWdnaW5nIGludG8gYGV0aHRvb2xfZ2V0X2RydmluZm9gKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqZXhhY3RseSogaXMgYHJzcC1cdTAwM2VkZXZsaW5rYCBnZXR0aW5nIGl0cyB2YWx1ZSBzZXQ/IEkgc2VlIGl0J3MgYmVpbmcgdXNlZCwgYnV0IEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIHRoYXQgcG9pbnRlciBpcyBhY3R1YWxseSBnZXR0aW5nIHBvcHVsYXRlZCB3aXRoIHVzZWZ1bCBkYXRhLiBMZXQgbWUgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZWFkIG1vcmUgb2YgdGhlIGBldGh0b29sX2dldF9kcnZpbmZvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgYWxsIHRoZSBwb3NzaWJsZSBjb2RlIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGVyZSB0aGF0IGNydWNpYWwgYXNzaWdubWVudCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgZm9sbG93IHRoYXQgdmFyaWFibGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoxNi43MjkyNTY2MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzg0OlxcdFxcdH1cXG4gNzg1OlxcdFxcbiA3ODY6XFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VlcHJvbV9sZW4pXFxuIDc4NzpcXHRcXHRcXHRyc3AtXFx1MDAzZWluZm8uZWVkdW1wX2xlbiA9IG9wcy1cXHUwMDNlZ2V0X2VlcHJvbV9sZW4oZGV2KTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKCFyc3AtXFx1MDAzZWluZm8uZndfdmVyc2lvblswXSlcXG4gNzkwOlxcdFxcdFxcdHJzcC1cXHUwMDNlZGV2bGluayA9IG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRyZXR1cm4gMDtcXG4gNzkzOlxcdH1cXG4gNzk0OlxcdFxcbiA3OTU6XFx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9nZXRfc3NldF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IGV0aHRvb2xfc3NldF9pbmZvIGluZm87XFxuIDc5OTpcXHRcXHR1NjQgc3NldF9tYXNrO1xcbiA4MDA6XFx0XFx0aW50IGksIGlkeCA9IDAsIG5fYml0cyA9IDAsIHJldCwgcmM7XFxuIDgwMTpcXHRcXHR1MzIgKmluZm9fYnVmID0gTlVMTDtcXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpbmZvLCB1c2VyYWRkciwgc2l6ZW9mKGluZm8pKSlcXG4gODA0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHQvKiBzdG9yZSBjb3B5IG9mIG1hc2ssIGJlY2F1c2Ugd2UgemVybyBzdHJ1Y3QgbGF0ZXIgb24gKi9cXG4gODA3OlxcdFxcdHNzZXRfbWFzayA9IGluZm8uc3NldF9tYXNrO1xcbiA4MDg6XFx0XFx0aWYgKCFzc2V0X21hc2spXFxuIDgwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0LyogY2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqL1xcbiA4MTI6XFx0XFx0bl9iaXRzID0gaHdlaWdodDY0KHNzZXRfbWFzayk7XFxuIDgxMzpcXHRcXG4gODE0OlxcdFxcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4gODE1OlxcdFxcdGluZm8uY21kID0gRVRIVE9PTF9HU1NFVF9JTkZPO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpbmZvX2J1ZiA9IGtjYWxsb2Mobl9iaXRzLCBzaXplb2YodTMyKSwgR0ZQX1VTRVIpO1xcbiA4MTg6XFx0XFx0aWYgKCFpbmZvX2J1ZilcXG4gODE5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHQvKlxcbiA4MjI6XFx0XFx0ICogZmlsbCByZXR1cm4gYnVmZmVyIGJhc2VkIG9uIGlucHV0IGJpdG1hc2sgYW5kIHN1Y2Nlc3NmdWxcXG4gODIzOlxcdFxcdCAqIGdldF9zc2V0X2NvdW50IHJldHVyblxcbiA4MjQ6XFx0XFx0ICovXFxuIDgyNTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNjQ7IGkrKykge1xcbiA4MjY6XFx0XFx0XFx0aWYgKCEoc3NldF9tYXNrIFxcdTAwMjYgKDFVTEwgXFx1MDAzY1xcdTAwM2MgaSkpKVxcbiA4Mjc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyODpcXHRcXG4gODI5OlxcdFxcdFxcdHJjID0gX19ldGh0b29sX2dldF9zc2V0X2NvdW50KGRldiwgaSk7XFxuIDgzMDpcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMCkge1xcbiA4MzE6XFx0XFx0XFx0XFx0aW5mby5zc2V0X21hc2sgfD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgaSk7XFxuIDgzMjpcXHRcXHRcXHRcXHRpbmZvX2J1ZltpZHgrK10gPSByYztcXG4gODMzOlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MTYuNzI5NDI4NDMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQ5NDgxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTGluayBGaXJtd2FyZSBWZXJzaW9uIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIGlmIHRoZSBkZXZpY2UgZHJpdmVyIGRvZXNuJ3QgZXhwbGljaXRseSBwcm92aWRlIGEgZmlybXdhcmUgdmVyc2lvbiAoYCFyc3AtXHUwMDNlaW5mby5md192ZXJzaW9uWzBdYCksIHRoZSBjb2RlIGludGVsbGlnZW50bHkgdHJpZXMgdG8gZmV0Y2ggaXQgdXNpbmcgYG5ldGRldl90b19kZXZsaW5rX2dldChkZXYpYCDigJMgYSBzdGFuZGFyZCwgZXhwZWN0ZWQgZmxvdy4gVGhpcyBpcyBnb29kLCBub3RoaW5nIHVudXN1YWwgdGhlcmUuXG5cblRoaXMgcGF0Y2gsIGhvd2V2ZXIsIHRvdWNoZXMgYF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAuIEdpdmVuIHRoYXQgYE5FVF9ERVZMSU5LYCBpcyBjb250cm9sbGVkIGJ5IGBORVRERVZTSU1gLCBhZGRpbmcgYE5FVERFVlNJTWAgdG8gZW5hYmxlIHRoaXMgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBhbmQgYXBwcm9wcmlhdGUgc29sdXRpb24uIEFjdHVhbGx5LCB3YWl0IGEgbW9tZW50LiBgTkVUX0RFVkxJTktgIGdldHMgYnVpbHQtaW4gaWYgKmFueSogZHJpdmVyIHRoYXQgc2VsZWN0cyBpdCBpcyBidWlsdC1pbi4gVGhhdCBjb3VsZCBpbXBhY3QgdGhpcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBkb3VibGUtY2hlY2sgYG5ldC9kZXZsaW5rL2Rldi5jYC5cblxuUmlnaHQsIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgcmVsaWVzIG9uIGBkZXZsaW5rX2luZm9fcmVxYCwgY29uc3RydWN0cyBhIE5ldGxpbmsgbWVzc2FnZSwgYW5kIHVzZXMgYGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWluZm9fZ2V0YCB0byBnZXQgdGhlIHJ1bm5pbmcgdmVyc2lvbi4gVGhpcyBjbGVhcmx5IGRlZmluZXMgYSBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZSBwYXRoLiBJJ20gZmFpcmx5IGNvbmZpZGVudCB0aGlzIHdpbGwgd29yay5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWU6IGlzIGp1c3QgYWRkaW5nIGBORVRERVZTSU1gIGVub3VnaD8gYE5FVERFVlNJTWAgZG9lcyBzZWxlY3QgYE5FVF9ERVZMSU5LYCwgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGBORVRERVZTSU1gIGJlbG9uZ3MgaW4gYEVuYWJsZUNvbmZpZ3NgLiBCdXQsIHNob3VsZCBJIGNvbnNpZGVyIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gYEVUSFRPT0xfTkVUTElOS2Agc3ByaW5ncyB0byBtaW5kLCBidXQgdGhhdCdzIGFuIGlvY3RsLCBhbmQgYEVUSFRPT0xfR0RSVklORk9gIHN1Z2dlc3RzIGEgZGlmZmVyZW50IGFwcHJvYWNoIGFsdG9nZXRoZXIuIFNvLCBiYWNrIHRvIHRoZSBjb3JlLiBEb2VzIGBORVRERVZTSU1gIHByb3ZpZGUgYGluZm9fZ2V0YCBpbiB0aGUgZGV2bGluayBvcGVyYXRpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgc3VwcG9ydGVkIGJ5IHRoZSBzaW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjIyLjg5NDM3OTg4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3OTM3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZm9fZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTEwNDI9c3RhdGljIGludCBuc2ltX2Rldl9yZWxvYWRfdXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGVudW0gZGV2bGlua19yZWxvYWRfYWN0aW9uIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDYwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDYxOnN0YXRpYyBpbnQgbnNpbV9kZXZfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwNjItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBuc2ltX2Rldl9kZXZsaW5rX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDMxLVxcdC5yZWxvYWRfdXAgPSBuc2ltX2Rldl9yZWxvYWRfdXAsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE0MzI6XFx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzMtXFx0LmZsYXNoX3VwZGF0ZSA9IG5zaW1fZGV2X2ZsYXNoX3VwZGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MjMuNDUyMzI1MzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NjU3Nzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbXBhdGliaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgbmV0ZGV2c2ltYCBkb2VzIGluZGVlZCBpbXBsZW1lbnQgYGluZm9fZ2V0YC4gVGhhdCdzIGEgZ3JlYXQgc3RhcnQ7IHRoZSB3aG9sZSBgTkVUREVWU0lNYCBhbmdsZSBsb29rcyBwcm9taXNpbmcuXG5cbk5vdywgbXkgcHJpbWFyeSB0YXNrIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcsIGFuZCB0byBldmFsdWF0ZSB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiBhbGwgcmVsZXZhbnQgc3ltYm9scy5cblxuUmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIHdpdGhpbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTbyB0aGF0IHBvaW50cyBkaXJlY3RseSB0byBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFzIG9uZSBrZXkgZm9jdXMuIEFuZCwgb2YgY291cnNlLCB0aGUgbm9uLXVuZGVyc2NvcmVkIHZlcnNpb24gYGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgd2hpY2ggc2hvdWxkIGJlIGNvbnNpZGVyZWQsIHRvby4gQWgsIGJ1dCB3YWl0LCBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGlzIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCBjb21wbGljYXRlcyB0aGluZ3MgYSBsaXR0bGUg4oCTIGJ1dCBJIHNob3VsZCBsaXN0IGJvdGgganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlIGNvdmVyZWQgYWxsIGJhc2VzIGFuZCBhdm9pZCBhbnkgZ290Y2hhcy4gSSB3aWxsIGZvY3VzIG9uIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIG9yIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmBcblxuTGV0J3MgY2hlY2sgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbid0IGFsc28gZGVwZW5kZW50IG9uIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgb3IgaW5kZWVkIGFueSBvdGhlciBjb2RlIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzLCB0byBlbnN1cmUgbm8gc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODoyOC40MTg5MDY3OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE2NDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZGV2bGluay9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9kZXYuYz0xMTM0PWludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMTg3LVxcbm5ldC9kZXZsaW5rL2Rldi5jOjExODg6c3RhdGljIHZvaWQgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2RldmxpbmsvZGV2LmMtMTE4OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jPTEyMjQ9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvZGV2LmM6MTIzMjpcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxubmV0L2RldmxpbmsvZGV2LmMtMTIzMy1cXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6MjguNTQwMDc4MDU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzUwNTc0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIENvbXBhdGliaWxpdHkgVmVyc2lvbiBVcGRhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSByZWFsaXplIHRoYXQgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGlzbid0IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEkgc2VlIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYE5FVERFVlNJTWAsIGFuZCBzaW5jZSBgTkVUREVWU0lNYCBnaXZlcyBtZSBhIHNvZnR3YXJlIGRldmljZSB0aGF0IHV0aWxpemVzIGRldmxpbmssIHRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJ3Qgc2VlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgYHNlcV9idWZgIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIGNvcmUga2VybmVsLlxuXG5MZXQgbWUgZ28gdGhyb3VnaCB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluLiBJdCdzIGNoYW5naW5nIGhvdyBhIHZlcnNpb24gc3RyaW5nIGlzIGJ1aWx0LiBQcmV2aW91c2x5LCBpdCB1c2VkIGBzdHJsY2F0YC4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgc2VxX2J1Zl9wcmludGZgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIHBvdGVudGlhbGx5IHNhZmVyLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlZ2FyZGluZyBgc3RybGNhdGAgd2hlcmUgaXQgbWlnaHQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBubGFfZGF0YShrdilgIGRhdGEsIGlmIGl0IHdhcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBvciBqdXN0IGdlbmVyYWwgdXNlIGNhc2Ugc2FmZXR5IHVzaW5nIGBzZXFfYnVmX3ByaW50ZmAuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGVyZSdzIGEgdHlwZSBjYXN0IHRvIGAoY29uc3QgY2hhciAqKWAgYW5kIHByaW50cyB3aXRoIGAlc2AsIHdoaWNoIHN0aWxsIHJlbGllcyBvbiBudWxsLXRlcm1pbmF0aW9uLiBCdXQgYHNlcV9idWZfcHJpbnRmYCBoYW5kbGVzIGJ1ZmZlciBib3VuZGFyaWVzIG11Y2ggYmV0dGVyLiBJIGFtIHJlbWVtYmVyaW5nIHRoYXQgYHN0cmxjYXRgIHJlcXVpcmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGBidWZgIGlzIGEgdmFsaWQgQyBzdHJpbmcgYW5kIHRoYXQgaXQgaGFzIHRvIGJlIG51bGwtdGVybWluYXRlZCB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlci4gVGhlIHVwZGF0ZWQgY29kZSB1c2VzIGBzZXFfYnVmX2luaXRgIGFuZCB1c2VzIGBzdHJubGVuKGJ1ZiwgbGVuKWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBzYWZlciBjaG9pY2UuXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjaGFuZ2UuIEl0IGlzIGxpa2VseSBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGZ1enppbmcgb24gdGhpcyBhcmVhLlxuXG5UbyB0ZXN0IHRoaXMgY2hhbmdlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGJlOlxuXG4qICAgYE5FVERFVlNJTWAgKHRvIGVuYWJsZSBhIGRyaXZlciB0aGF0IHVzZXMgZGV2bGluayBhbmQgaW1wbGVtZW50cyBgaW5mb19nZXRgKVxuXG5UaGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBleGFtaW5lIGFyZTpcblxuKiAgIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmBcbiogICBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYFxuXG5JJ2xsIGNoZWNrIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGluIGBuZXQvZGV2bGluay9kZXYuY2AgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjM3LjcxNTEzODEzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRmcmVlX21zZzpcXG4xMjIxOlxcdFxcdG5sbXNnX2NvbnN1bWUobXNnKTtcXG4xMjIyOlxcdH1cXG4xMjIzOlxcdFxcbjEyMjQ6XFx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjEyMjY6XFx0e1xcbjEyMjc6XFx0XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KVxcbjEyMjg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRkZXZsX2xvY2soZGV2bGluayk7XFxuMTIzMTpcXHRcXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKVxcbjEyMzI6XFx0XFx0XFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xcbjEyMzM6XFx0XFx0ZGV2bF91bmxvY2soZGV2bGluayk7XFxuMTIzNDpcXHR9XFxuMTIzNTpcXHRcXG4xMjM2OlxcdGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcXG4xMjM3OlxcdHtcXG4xMjM4OlxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XFxuMTIzOTpcXHRcXHRpbnQgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODozNy43MTUyNzA4OTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTA2NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIFZhcmlhYmxlKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgdGhpcyBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYCB0aGluZy4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGl0LCBvciBhdCBsZWFzdCB1c2luZyBpdCBzb21ld2hlcmUsIHByb2JhYmx5IGFjcm9zcyBmaWxlcywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFuZCB1c2VkIGluIGBpbmNsdWRlL25ldC9kZXZsaW5rLmhgLiBFeGNlbGxlbnQuIE5vdywgd2hlcmUgaXMgaXQgKmNhbGxlZCogZnJvbT8gQWgsIGhlcmUgd2UgZ28sIGl0J3MgY2FsbGVkIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgLlxuXG5BaGEhIE5vdywgYSBxdWljayBjaGVjayBvZiB0aGUgYnVpbGQgcHJvY2VzcyBpcyBpbiBvcmRlciBoZXJlLiBMZXQncyB0aGluaywgaXMgYG5ldC9ldGh0b29sL2lvY3RsLmNgIHNvbWV0aGluZyB0aGF0J3MgYnVpbHQgYnkgZGVmYXVsdD8gWWVzLCBpdCBpcyEgRXRodG9vbCBpcyBjb3JlIG5ldHdvcmtpbmcsIHNvIGl0J3MgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBjb21waWxlZCBhbmQgbGlua2VkLiBHb29kLCB0aGF0IGNvbmZpcm1zIGEgYmFzZWxpbmUgZm9yIG15IGludmVzdGlnYXRpb24uIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgLiBJIHdpbGwgY2hlY2sgaWYgaXQgY2FuIGJlIGRpc2FibGVkIGJ1dCBub3JtYWxseSBpdCBpcyBhIGtleSBjb21wb25lbnQgdG8gbmV0d29ya2luZyBhbmQgd2lsbCBiZSBpbmNsdWRlZCBieSBkZWZhdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjQxLjQ1NjM0MDY4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwODc4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jdGwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZS0yLVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQrPSBpb2N0bC5vIGNvbW1vbi5vXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDQ6MTg6NDEuNTM0NDMzNTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTIxNTgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGlvY3RsLm9gKipcblxuUmlnaHQsIHNvIGBpb2N0bC5vYCBpcyBhbHdheXMgYnVpbHQuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBtYWluIHF1ZXN0aW9uIGlzIGFyb3VuZCB0aG9zZSBgTkVUREVWU0lNYCBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXM/IERvZXMgZW5hYmxpbmcgYE5FVERFVlNJTWAgYXV0b21hdGljYWxseSBwdWxsIGluIGFueSBvdGhlciBjb25maWd1cmF0aW9ucz8gQmVzdCB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCBgTkVUREVWU0lNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODo0NC41NDY1OTM0ODlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFxuIDYwMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcXFwiXFxuIDYwMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbiA2MDM6XFx0XFxuIDYwNDpcXHRjb25maWcgTkVUREVWU0lNXFxuIDYwNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbiA2MDY6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiA2MDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDYwODpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXFxuIDYwOTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuIDYxMDpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gNjExOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gNjEyOlxcdFxcdHNlbGVjdCBORVRfU0hBUEVSXFxuIDYxMzpcXHRcXHRoZWxwXFxuIDYxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cXG4gNjE1OlxcdFxcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxcbiA2MTY6XFx0XFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA2MTk6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZXRkZXZzaW0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA0OjE4OjQ0LjU0NjY3MTAzOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjkyMzYxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgb25lIGhpbmdlcyBvbiBhIGNvdXBsZSBvZiBrZXkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgREVCVUdfRlNgIGFuZCBgSU5FVGAuIEdlbmVyYWxseSwgdGhvc2UgYXJlIHN0YW5kYXJkIGZhcmUgaW4gc3l6a2FsbGVyIHNldHVwcywgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgcGxhbiBpcyB0byBpbmNsdWRlIGBORVRERVZTSU1gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBzdHJsY2F0YCBmb3IgYHNlcV9idWZfcHJpbnRmYCB3aXRoaW4gdGhlIGBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbmAgZnVuY3Rpb24uIFRoYXQncyBhIGRpcmVjdCBtb3ZlIHRvIGltcHJvdmUgYnVmZmVyIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIHZlcnNpb24gcmV0cmlldmFsIHRocm91Z2ggZGV2bGluay4gQW5kIHNpbmNlIHRoYXQgY2hhbmdlIG9jY3VycyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSAoZXRodG9vbC9kZXZsaW5rKSwgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuXG5cblRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgd2lsbCBiZSBgX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25gIGFuZCBgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uYC4gQW5kLCBhcyBzdGF0ZWQgZWFybGllciwgdGhlIGBORVRERVZTSU1gIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZCB0byBtYXhpbWl6ZSB0aGlzIGZ1enppbmcuXG5cbkknbSBub3cgY29uZmlkZW50IGluIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZXR0aW5ncyBmb3IgdGhpcyBydW4sIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0OCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwNDoxODo0OS4yMzkwMzQ0OTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg1MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb25cIixcbiAgICBcImRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHN0cmxjYXQgd2l0aCBzZXFfYnVmX3ByaW50ZiBpbiBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbiB0byBmaXggcG90ZW50aWFsIGJ1ZmZlciBoYW5kbGluZyBpc3N1ZXMgd2hlbiByZXRyaWV2aW5nIHRoZSBydW5uaW5nIHZlcnNpb24gb2YgYSBkZXZpY2UgdmlhIGRldmxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgKGV0aHRvb2wvZGV2bGluaykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[1] Phase: Succeeded StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 04:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 04:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2] Phase: Succeeded StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 04:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-04 04:19:14 +0000 UTC FinishedAt: 2026-07-04 04:19:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-484431274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-04 04:19:24 +0000 UTC FinishedAt: 2026-07-04 04:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-04 04:19:24 +0000 UTC FinishedAt: 2026-07-04 04:48:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a3562622-e17e-4393-93dd-7589ee2495fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-484431274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "1fa1bdb8-418c-4df4-85ff-749e9948b993", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-2166705944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-04 04:19:24 +0000 UTC FinishedAt: 2026-07-04 04:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a3562622-e17e-4393-93dd-7589ee2495fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-484431274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "1fa1bdb8-418c-4df4-85ff-749e9948b993", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-2166705944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-04 04:48:22 +0000 UTC FinishedAt: 2026-07-04 04:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-04 04:48:22 +0000 UTC FinishedAt: 2026-07-04 04:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-04 04:48:22 +0000 UTC FinishedAt: 2026-07-04 04:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-04 04:48:22 +0000 UTC FinishedAt: 2026-07-04 04:48:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-3619648197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-04 04:48:42 +0000 UTC FinishedAt: 2026-07-04 04:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-04 04:48:42 +0000 UTC FinishedAt: 2026-07-04 04:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fa1bdb8-418c-4df4-85ff-749e9948b993,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-2166705944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-04 04:51:34 +0000 UTC FinishedAt: 2026-07-04 04:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-04 04:51:34 +0000 UTC FinishedAt: 2026-07-04 04:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-04 04:51:34 +0000 UTC FinishedAt: 2026-07-04 05:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-04 04:51:34 +0000 UTC FinishedAt: 2026-07-04 05:13:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a3562622-e17e-4393-93dd-7589ee2495fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-3619648197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "12950245-2ef2-4e47-b096-fa4f45e2dc79", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-1166726929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-04 04:51:34 +0000 UTC FinishedAt: 2026-07-04 05:13:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a3562622-e17e-4393-93dd-7589ee2495fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-3619648197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "12950245-2ef2-4e47-b096-fa4f45e2dc79", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-1166726929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-04 05:13:55 +0000 UTC FinishedAt: 2026-07-04 05:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-04 05:13:55 +0000 UTC FinishedAt: 2026-07-04 05:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-04 05:13:55 +0000 UTC FinishedAt: 2026-07-04 05:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-04 05:13:55 +0000 UTC FinishedAt: 2026-07-04 05:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*12950245-2ef2-4e47-b096-fa4f45e2dc79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-1166726929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1fa1bdb8-418c-4df4-85ff-749e9948b993,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*12950245-2ef2-4e47-b096-fa4f45e2dc79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-2166705944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-1166726929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 05:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 05:17:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-2307310154/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 05:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 05:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-04 05:16:15 +0000 UTC FinishedAt: 2026-07-04 05:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-04 05:18:08 +0000 UTC FinishedAt: 2026-07-04 08:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6hngb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__devlink_compat_running_version","devlink_compat_running_version"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM"],"series_id":"73bb8809-6c18-4fb4-9947-ad5ba5eeb149","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-04 05:18:08 +0000 UTC FinishedAt: 2026-07-04 08:20:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fa1bdb8-418c-4df4-85ff-749e9948b993,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*12950245-2ef2-4e47-b096-fa4f45e2dc79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-2166705944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-build-action-1166726929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6hngb/series-workflow6hngb-convert-artifact-2307310154/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}