Name: series-workflowxrrft Phase: Succeeded StartedAt: 2026-08-12 18:14:54 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[0] Phase: Succeeded StartedAt: 2026-08-12 18:14:54 +0000 UTC FinishedAt: 2026-08-12 18:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 18:14:54 +0000 UTC FinishedAt: 2026-08-12 18:39:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT" ], "series_id": "069903d8-25f3-4cbf-9677-df0a5f350fe2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_newlink", "ip_tunnel_changelink", "ip6gre_newlink", "ip6gre_changelink", "ip6_tnl_newlink", "ip6_tnl_changelink", "ipip6_newlink", "ipip6_changelink" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcF90dW5uZWxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxMTQyZTI2MmY5NTg1YTQxMTg4Y2YyMjk3ZjdlZDhlM2ZhYjNjZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODozMzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTYyOSw4ICYjNDM7NjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxuIHtcbiBcdC8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkXG4gXHQgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS5cbkBAIC02NDAsNiAmIzQzOzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBtYXhfYWxsb3dlZClcbiBcdFx0aGVhZHJvb20gPSBtYXhfYWxsb3dlZDtcbiBcbiYjNDM7XHRyZXR1cm4gaGVhZHJvb207XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiYjNDM7e1xuJiM0MztcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbiYjNDM7XG4gXHRpZiAoaGVhZHJvb20gXHUwMDNlIFJFQURfT05DRShkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tLCBoZWFkcm9vbSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjViMWYxODA0ODVkNDIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbkBAIC0zMTcsNyAmIzQzOzMxNyw3IEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG4gXHR9XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47XG4mIzQzO1x0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG4gXHRtdHUgLT0gdF9obGVuICYjNDM7IChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDEzICYjNDM7MTEzNywxMSBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2KSB7XG4tXHRcdFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuIFxuLVx0XHRcdGlmICh0LVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47XG4mIzQzO1x0XHRcdGhlYWRyb29tID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdF9obGVuO1xuJiM0MztcdFx0XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTtcbiBcbiBcdFx0XHRpZiAoc2V0X210dSkge1xuIFx0XHRcdFx0aW50IG10dSA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1IC0gdF9obGVuO1xuQEAgLTExNzEsOCAmIzQzOzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcbiBcbiBcdHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuO1xuJiM0MztcdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVA2R1JFKVxuJiM0MztcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0X2hsZW47XG4gXHRlbHNlXG4gXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiAmIzQzOyB0X2hsZW47XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4Li4yYzk0MWFjYjA4MWZhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xNTIyLDggJiM0MzsxNTIyLDExIEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuJiM0MztcbiYjNDM7XHRcdFx0aGVhZHJvb20gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiYjNDM7XHRcdFx0aGVhZHJvb20gJiM0Mzs9IHRfaGxlbjtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4gXHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiBcdH1cbi1cdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjtcbiYjNDM7XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiAmIzQzOyBobGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBfdHVubmVsX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxMTQyZTI2MmY5NTg1YTQxMTg4Y2YyMjk3ZjdlZDhlM2ZhYjNjZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODozMzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLAogaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsCiAJCQkgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiB7CiAJLyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWQKIAkgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4KQEAgLTY0MCw2ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGhlYWRyb29tICZndDsgbWF4X2FsbG93ZWQpCiAJCWhlYWRyb29tID0gbWF4X2FsbG93ZWQ7CiAKJiM0MzsJcmV0dXJuIGhlYWRyb29tOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiYjNDM7ewomIzQzOwloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CiAJaWYgKGhlYWRyb29tICZndDsgUkVBRF9PTkNFKGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tKSkKIAkJV1JJVEVfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltdHUgPSBtaW4odGRldi0mZ3Q7bXR1LCBJUF9NQVhfTVRVKTsKIAl9CiAKLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiAJbXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMCk7CiAKIAlpZiAobXR1ICZsdDsgSVBWNF9NSU5fTVRVKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjIwMGQwYmExYTQwZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTExMzcsMTMgJiM0MzsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LAogCQkJcmV0dXJuOwogCiAJCWlmIChydC0mZ3Q7ZHN0LmRldikgewotCQkJdW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LSZndDtkc3QuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKLQkJCQkJCSB0X2hsZW47CiYjNDM7CQkJdW5zaWduZWQgaW50IGhlYWRyb29tOwogCi0JCQlpZiAodC0mZ3Q7ZGV2LSZndDtoZWFkZXJfb3BzKQotCQkJCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjsKLQkJCWVsc2UKLQkJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47CiYjNDM7CQkJaGVhZHJvb20gPSBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRfaGxlbjsKJiM0MzsJCQloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTsKIAogCQkJaWYgKHNldF9tdHUpIHsKIAkJCQlpbnQgbXR1ID0gcnQtJmd0O2RzdC5kZXYtJmd0O210dSAtIHRfaGxlbjsKQEAgLTExNzEsOCAmIzQzOzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbCkKIAogCXRfaGxlbiA9IHR1bm5lbC0mZ3Q7aGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCi0JaWYgKHR1bm5lbC0mZ3Q7ZGV2LSZndDtoZWFkZXJfb3BzKQotCQl0dW5uZWwtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gTExfTUFYX0hFQURFUiAmIzQzOyB0X2hsZW47CiYjNDM7CWlmICh0dW5uZWwtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcyAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUDZHUkUpCiYjNDM7CQl0dW5uZWwtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gdF9obGVuOwogCWVsc2UKIAkJdHVubmVsLSZndDtkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwOC4uMmM5NDFhY2IwODFmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTUyMiw4ICYjNDM7MTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KQogCQkJdGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LSZndDtuZXQsIHAtJmd0O2xpbmspOwogCiAJCWlmICh0ZGV2KSB7Ci0JCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOwotCQkJCXRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSAmIzQzOyB0X2hsZW47CiYjNDM7CQkJdW5zaWduZWQgaW50IGhlYWRyb29tOwomIzQzOwomIzQzOwkJCWhlYWRyb29tID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbTsKJiM0MzsJCQloZWFkcm9vbSAmIzQzOz0gdF9obGVuOwomIzQzOwkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTsKIAkJCW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi0mZ3Q7bXR1LCBJUDZfTUFYX01UVSk7CiAKIAkJCW10dSA9IG10dSAtIHRfaGxlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmMKQEAgLTExMzEsNyAmIzQzOzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJV1JJVEVfT05DRShkZXYtJmd0O210dSwgbXR1KTsKIAkJaGxlbiA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb207CiAJfQotCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiAmIzQzOyBobGVuKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBuZXR3b3JraW5nIGZpbGVzOiBgaXBfdHVubmVscy5oYCwgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgdG8gaW50cm9kdWNlIGFuZCB1c2UgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIGVmZmVjdGl2ZWx5IHB1dHRpbmcgYSBjYXAgb24gdGhlIGhlYWRyb29tIHVzZWQgYnkgSVAgdHVubmVscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBBbnkgY2hhbmdlIGF0IHRoaXMgbGV2ZWwgd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZy4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBgaXBfdHVubmVsLmNgIHdpbGwgcmVxdWlyZSBgQ09ORklHX05FVF9JUElQYCBhbmQgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc2luY2Ugd2UmIzM5O3JlIGFsc28gZGVhbGluZyB3aXRoIElQdjYsIGBDT05GSUdfSVBWNl9TSVRgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gYW5kIGdhdGhlciBhbGwgdGhlIG5lY2Vzc2FyeSBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG5uZXQvaXB2NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBpcF90dW5uZWwuYyBhbmQgaXRzIENvcmUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHBpZWNlIGhlcmUsIHRoZSBhYnNvbHV0ZSBsaW5jaHBpbiwgaXMgYENPTkZJR19ORVRfSVBfVFVOTkVMYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBgaXBfdHVubmVsLmNgLiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlrZWx5IGNvbnRpbmdlbnQgb24gdGhhdC4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBlbmFibGVyLiBXaXRob3V0IGl0LCB0aGUgd2hvbGUgdGhpbmcmIzM5O3MgbGlrZWx5IGRpc2FibGVkLCBvciBhdCBsZWFzdCBvcGVyYXRpbmcgaW4gc29tZSBkZWdyYWRlZCBtb2RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgZm9yZWZyb250IGFzIEkgaW52ZXN0aWdhdGUgaXRzIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiB0aGUgdHVubmVscyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9ncmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgJiM0Mzs9IGZvdTYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSVB2NiBHUkUgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19JUFY2X0dSRWAgYXNzb2NpYXRlZCB3aXRoIGBpcDZfZ3JlLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gKEdSRSkgdHVubmVscyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGhlcmU6IHRoZSBhYmlsaXR5IHRvIGVuY2Fwc3VsYXRlIElQdjYgcGFja2V0cyB3aXRoaW4gYW5vdGhlciBJUHY2IG9yIElQdjQgaGVhZGVyIGZvciB0cmFuc3BvcnQgYWNyb3NzIG5ldHdvcmtzIHRoYXQgbWlnaHQgbm90IG5hdGl2ZWx5IHN1cHBvcnQgSVB2Niwgb3IgZm9yIGNyZWF0aW5nIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3JrcywgdGhhdCBzb3J0IG9mIHRoaW5nLiAKCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uLiBJdCB3b3VsZCBiZSB3b3J0aCBhIGRlZXBlciBkaXZlLiBJcyB0aGlzIGEgZnVsbCBpbXBsZW1lbnRhdGlvbiB0aGF0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGtleWluZywgc2VxdWVuY2UgbnVtYmVycywgYW5kIGNoZWNrc3Vtcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGRvdWJsZSBlbmNhcHN1bGF0aW9uPyBXaGF0IGFib3V0IGZyYWdtZW50YXRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgaXRzZWxmPyBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSB0aGUgSVB2NiByb3V0aW5nIHRhYmxlcyBhbmQgdGhlIGhhbmRsaW5nIG9mIE1UVSBkaXNjb3ZlcnkuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGlzIHNldHRpbmcgaXMgZGVwZW5kZW50IG9uIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCBzdWNoIGFzIElQc2VjLCByZWx5IG9uIGl0LgoKRnJvbSBhIHByYWN0aWNhbCBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zLiBJcyB0aGlzIG1vZHVsZSBjb21waWxlZCBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gR1JFIHR1bm5lbHMsIHN1Y2ggYXMgdGhlIHJpc2sgb2YgdHVubmVsaW5nIG1hbGljaW91cyB0cmFmZmljPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBrZXJuZWwgbW9kdWxlIG9uIHN5c3RlbSByZXNvdXJjZSB1c2FnZT8gT3ZlcmFsbCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyB0byBkZXRlcm1pbmUgaXRzIHByYWN0aWNhbCBzdWl0YWJpbGl0eSwgYW5kIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgdGhlIGxhdGVzdCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IGFueSBhbWJpZ3VpdGllcyBvciBjaGFuZ2VzIGluIGJlaGF2aW91ciBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWxcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipJUHY2IFR1bm5lbHM6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGlwNl90dW5uZWwuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHJlcXVpcmVtZW50LCByaWdodD8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBmZWF0dXJlIGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgd2UgYXJlIGdvaW5nIHRvIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggdGhlIGNvZGUuIEl0IGlzIGFuIGltbWVkaWF0ZSBmbGFnIHRvIGNvbmZpcm0uIEkgd291bGQgYXNzdW1lIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHJlbHkgb24gdGhpcyBmZWF0dXJlLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGJlZm9yZSBzcGVuZGluZyBtb3JlIHRpbWUuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gTWFrZXMgc2Vuc2UgdG8gYmUgY2VydGFpbiwgYW5kIG5vdCB3YXN0ZSB0aW1lIHRyeWluZyB0byBkZWJ1ZyBpZiBpdCYjMzk7cyBkaXNhYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2l0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQyLW9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFNJVCBDb25maWd1cmF0aW9uIGZvciBLZXJuZWwgTW9kdWxlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1NJVGAgd2l0aGluIGBzaXQuY2AuIFRoZSBzeXN0ZW0gY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhbHNvIGluY2x1ZGUgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYElQVjZfU0lUYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSByZWxldmFudDogYGlwX3R1bm5lbF9iaW5kX2RldmAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCwgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIGFuZCBgaXA2Z3JlX2NhbGNfaGxlbmAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AsIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCwgYW5kIGZpbmFsbHksIGBpcGlwNl90dW5uZWxfYmluZF9kZXZgIGluIGBuZXQvaXB2Ni9zaXQuY2AuCgpOb3csIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTZWVpbmcgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yNzktXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDItXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz04NjI9c3RhdGljIHZvaWQgaXBfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cdFx0dC1cdTAwM2Vmd21hcmsgPSBmd21hcms7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4ODk6XHRcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODkwLVx0XHRpZiAoc2V0X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU1LVx0XHRpdG4tXHUwMDNlZmJfdHVubmVsX2Rldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcdFx0aXRuLVx1MDAzZWZiX3R1bm5lbF9kZXYtXHUwMDNlbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGl0bi1cdTAwM2VmYl90dW5uZWxfZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXHRcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXHUwMDNlZmJfdHVubmVsX2RldikpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNi1cdGlmICh0YltJRkxBX01UVV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IExpbnV4IGtlcm5lbCBjb2RlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgSVAgVHVubmVsIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgcm91dGluZXMgZm9yIGhhbmRsaW5nIElQIHR1bm5lbHMgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCBmb3VyIGtleSBmdW5jdGlvbnM6IGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfaW5pdF9uZXRgLCBgaXBfdHVubmVsX3VwZGF0ZWAsIGFuZCBgaXBfdHVubmVsX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGxpa2VseSByZXByZXNlbnQgdGhlIGxpZmVjeWNsZSBvZiBhbiBJUCB0dW5uZWwgaW50ZXJmYWNlLgoKYGlwX3R1bm5lbF9uZXdsaW5rYCBiZWluZyBleHBsaWNpdGx5IGV4cG9ydGVkIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNyZWF0aW9uIG9mIHRoZXNlIHR1bm5lbCBkZXZpY2VzIGlzIGEgZnVuY3Rpb24geW91IGNhbiBjYWxsIGZyb20gdGhlIHVzZXItc3BhY2UsIHdoaWNoIEkgZmluZCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYnJpbmdpbmcgdXAgYSB0dW5uZWwgaW50ZXJmYWNlLgoKTm93LCBgaXBfdHVubmVsX2luaXRfbmV0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIGNvbnRleHQgZm9yIElQIHR1bm5lbHMuIEkgd291bGQgZ3Vlc3MgdGhpcyBoYXBwZW5zIGR1cmluZyBzeXN0ZW0gc3RhcnR1cCBvciB3aGVuIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBmb3IgdGhlc2UgdHVubmVscyB0byBmdW5jdGlvbiBjb3JyZWN0bHkgd2l0aGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4KCmBpcF90dW5uZWxfdXBkYXRlYCBsaWtlbHkgaGFuZGxlcyBtb2RpZmljYXRpb25zIHRvIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbiBhZnRlciBpdCYjMzk7cyBiZWVuIGNyZWF0ZWQuIFRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzLCB0aGUga2V5LCBvciB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIGNoYW5nZXMgdG8gYmUgYXBwbGllZCBkeW5hbWljYWxseSB0byB0aGUgcnVubmluZyB0dW5uZWwuCgpGaW5hbGx5LCBgaXBfdHVubmVsX2NyZWF0ZWAgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGlwX3R1bm5lbF9uZXdsaW5rYC4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIHR1bm5lbCBkZXZpY2UsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBJJiMzOTtkIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIGFuZCByZWdpc3RlcmluZyB0aGUgdHVubmVsIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEluIGVzc2VuY2UsIGl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIHByb2Nlc3MuCgpJJiMzOTtkIGV4cGVjdCB0aGVzZSBmdW5jdGlvbnMgdG8gaW50ZXJhY3QgY2xvc2VseSwgd2l0aCBgaXBfdHVubmVsX25ld2xpbmtgIGFjdGluZyBhcyBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSwgY2FsbGluZyBgaXBfdHVubmVsX2NyZWF0ZWAgaW50ZXJuYWxseSwgYW5kIHBlcmhhcHMgc3Vic2VxdWVudGx5IHVzaW5nIGBpcF90dW5uZWxfdXBkYXRlYCBpZiB0aGUgbmV3IGRldmljZSBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5NTppbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Ni1cdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZXdsaW5rKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IEdSRSBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGRlZmluaXRlbHkgYSBrZXkgZW50cnkgcG9pbnQgaGVyZSDigJMgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIGxpbmsgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIHNvdW5kcyBsaWtlIGl0JiMzOTtzIHdoZXJlIHRoZSByb3V0aW5nIGFzcGVjdHMgb2YgdGhlIElQdjYgR1JFIHR1bm5lbCBhcmUgY29uZmlndXJlZCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHJvdXRlcyBhcmUgc2V0IHVwIGFuZCBtYW5hZ2VkIGZvciB0aGUgdHVubmVsLiBGb2xsb3dpbmcgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGBpcDZncmVfY2FsY19obGVuYC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjYWxjdWxhdGluZyB0aGUgaGVhZGVyIGxlbmd0aCBvZiB0aGUgR1JFIHR1bm5lbCBpdHNlbGYsIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZW5jYXBzdWxhdGlvbiBvdmVyaGVhZC4gVW5kZXJzdGFuZGluZyB0aGUgaGVhZGVyIGNhbGN1bGF0aW9uIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgTVRVIGhhbmRsaW5nIGFuZCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gV2l0aCB0aGVzZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGZhY2V0IG9mIHRoZSBJUHY2IEdSRSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTgwPXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgyLVx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNDg9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTAtXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUxOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBTdGF0aWMgQ29uZmlndXJhdGlvbiBvZiBUdW5uZWwgTGlua3MqKgoKQWxyaWdodCwgc28gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgYXJlIGRlZmluZWQgYXMgKnN0YXRpYyogY29uc3RydWN0cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBsaWtlbHkgZWl0aGVyIGdsb2JhbCBjb25zdGFudHMsIHByZS1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgZG9lc24mIzM5O3QgY2hhbmdlIGR1cmluZyB0aGUgc3lzdGVtJiMzOTtzIHJ1bnRpbWUgaW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2Ygb3BlcmF0aW9uLiBHaXZlbiB0aGVpciBuYW1pbmcsIHRoZXkmIzM5O3JlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1JFIGFuZCBFUlNQQU4gSVB2NiB0dW5uZWwgbGlua3MsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgaG9sZCBkZWZhdWx0IHNldHRpbmdzIG9yIG1heWJlIHNvbWUga2luZCBvZiBwcmUtZGVmaW5lZCBwb2xpY3kuCgpOb3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBzdGF0aWMgY29uZmlndXJhdGlvbnMgYXJlIHV0aWxpemVkLiBTdGF0aWMgY29uZmlndXJhdGlvbiBjYW4gYmUgcG93ZXJmdWwsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGtub3cgaG93IHRoZXkgYXJlIGFjY2Vzc2VkIGFuZCB3aGVuLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGVpciB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSAqY2FsbGVkKi4gSSBuZWVkIHRvIGZpbmQgdGhlIHBsYWNlcyB3aGVyZSB0aGV5IGFyZSByZWZlcmVuY2VkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGFsbCB0aGUgY2FsbGVycy4gT25seSB0aGVuIGNhbiBJIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgdGhlaXIgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfdG5sX2xpbmtfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz03OT1zdGF0aWMgdm9pZCBpcDZncmVfdHVubmVsX2xpbmsoc3RydWN0IGlwNmdyZV9uZXQgKmlnbiwgc3RydWN0IGlwNl90bmwgKnQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjgwOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KTtcbm5ldC9pcHY2L2lwNl9ncmUuYy04MS1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTMxNT1zdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNmdyZV90dW5uZWxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMzUyLVxubmV0L2lwdjYvaXA2X2dyZS5jOjM1MzpcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsIDEpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTM1NC1cdGlwNmdyZV90dW5uZWxfbGluayhpZ24sIG50KTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTE3PXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4Ny1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDg4OnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxubmV0L2lwdjYvaXA2X2dyZS5jLTEwODkte1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxubmV0L2lwdjYvaXA2X2dyZS5jOjExMjI6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMy1cdFx0XHRcdFx0IGludCB0X2hsZW4pXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTExNjM9c3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTExNzktXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgxLXtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTgyOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTEyMDk9c3RhdGljIGludCBpcDZncmVfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjEyLVx0aXA2Z3JlX3RubF9jb3B5X3RubF9wYXJtKHQsIHApO1xubmV0L2lwdjYvaXA2X2dyZS5jOjEyMTM6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKHQsIHNldF9tdHUpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk3NT1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXHRpZiAoIWVycikge1xubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTk6XHRcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsICF0YltJRkxBX01UVV0pO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXHRcdGlwNmdyZV90dW5uZWxfbGlua19tZChpZ24sIG50KTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI0OD1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjQ5LXtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUwOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1MTpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2ZXJzcGFuX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEluaXRpYWwgQXNzZXNzbWVudDogaXA2Z3JlX25ld2xpbmsqKgoKUmlnaHQsIGBpcDZncmVfbmV3bGlua2AuIFRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyBwb3NpdGl2ZS4gSSBzZWUgdGhhdCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgd2hhdCB0aGF0IG1lYW5zIGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgSVB2NiBHUkUgdHVubmVscy4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIG5ldyBHUkUgdHVubmVsIGxpbmtzIHNwZWNpZmljYWxseSBmb3IgSVB2NiB0cmFmZmljLiBJIGJldCB0aGlzIGlzIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gcGFyYW1ldGVycywgYWRkcmVzc2luZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIE1UVSBhZGp1c3RtZW50cy4gVGhpcyBpcyB3aGVyZSB5b3UgZ2V0IHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIHR1bm5lbCBkZWZpbml0aW9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldGxpbmsgY2FsbHMuIFByb2JhYmx5IHNldHRpbmcgdXAgYSBuZXcgaW50ZXJmYWNlIHdpdGggdGhlIHJpZ2h0IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IHRoZSBHUkUgdHVubmVsLiBHb29kIGNob2ljZSwgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0xOTA4PXN0YXRpYyBib29sIGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0MC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTQxOnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NDItXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTc0LVxubmV0L2lwdjYvaXA2X2dyZS5jOjE5NzU6c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NzYtXHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk2LVxubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTc6XHRlcnIgPSBpcDZncmVfbmV3bGlua19jb21tb24obmV0LCBkZXYsIHRiLCBkYXRhLCBleHRhY2spO1xubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXHRpZiAoIWVycikge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjE2PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjIzOC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjM5Olx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjQwLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4Nz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTMtXHQudmFsaWRhdGVcdD0gaXA2Z3JlX3R1bm5lbF92YWxpZGF0ZSxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjk0Olx0Lm5ld2xpbmtcdD0gaXA2Z3JlX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5NS1cdC5jaGFuZ2VsaW5rXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzA4LVx0LnZhbGlkYXRlXHQ9IGlwNmdyZV90YXBfdmFsaWRhdGUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMwOTpcdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTAtXHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgR1JFIExpbmsgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwNmdyZV9uZXdsaW5rYCBmdW5jdGlvbi4gSXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLCBidXQgaXQgKmlzKiBhc3NpZ25lZCB0byBgcnRubF9saW5rX29wc2AsIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGxpbmsgb3BlcmF0aW9uIHN0cnVjdHVyZS4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHdhcyBob3BpbmcgaXQgd291bGQgYmUgYSByZWd1bGFyIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGluayB0eXBlIGdldHMgaW5zdGFudGlhdGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGBzdGF0aWNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCBzY2FuIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSBob29rIG9yIGFuIGludGVyZmFjZSBmb3IgdGhlIHN5c3RlbSB0byBpbnRlcmFjdCB3aXRoIHRoZSBJUDZHUkUgZnVuY3Rpb25hbGl0eS4KCkFoLCBJIHNlZSBgaXA2Z3JlX2luaXRfbmV0YC4gVGhhdCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBDb3VsZCB0aGF0IGJlIHRoZSBrZXk/IEkmIzM5O2xsIGRpZyBpbnRvIHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2xpbmtfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNDczLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNDc1LXtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1Mz1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTY0LVx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNnQtXHUwMDNlZHN0X2NhY2hlKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTY1Olx0aXA2X3RubF9saW5rX2NvbmZpZyh0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTY2LX1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTk3Nj1zdGF0aWMgaW50IGlwNl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4Mi1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgzOlx0aXA2X3RubF9saW5rX2NvbmZpZyh0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTg0LVx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5vbi1TdGF0aWMgYGlwNl90bmxfY2hhbmdlYCBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gYGlwNl90bmxfY2hhbmdlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc2VyaWVzIG9mIGNvbnNpZGVyYXRpb25zLiBJZiB0aGlzIGlzIGEgZnVuY3Rpb24sIGl0cyBub24tc3RhdGljIG5hdHVyZSBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgaXRzIHNjb3BlIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBBcmUgdGhlcmUgYW55IGV4dGVybiBkZWNsYXJhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbj8gV2hlcmUgaXMgaXQgZGVmaW5lZD8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiBpdCYjMzk7cyBwYXJ0IG9mIGEgbW9kdWxlIG9yIGxpbmtlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEl0cyB1c2UgaW4gbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMgaW5jcmVhc2VzIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGR1ZSB0byBpbmNvbnNpc3RlbnQgZGVmaW5pdGlvbnMgb3IgbWlzdXNlIGlmIG5vdCBjYXJlZnVsbHkgbWFuYWdlZC4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgY2FsbCBzaXRlcyB0byBlbnN1cmUgdGhhdCBhbnkgc2lkZSBlZmZlY3RzIGFyZSB1bmRlcnN0b29kIGFuZCBhY2NvdW50ZWQgZm9yLCBnaXZlbiB0aGF0IGl0cyBkZWZpbml0aW9uIG1pZ2h0IHZhcnkgZGVwZW5kaW5nIG9uIGNvbXBpbGF0aW9uIG9wdGlvbnMgb3IgbW9kdWxlIGxvYWRpbmcuIE15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgZm9yIHRoaXMgbm9uLXN0YXRpYyBiZWhhdmlvciBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIGRlc2lnbi4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IG1hbmlwdWxhdGUsIGFuZCBob3cgYXJlIHRob3NlIHN0cnVjdHVyZXMgc2hhcmVkPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQsIGlmIGFueT8gSeKAmWxsIGFsc28gbmVlZCB0byBjaGVjayBpdHMgdXNhZ2UgaW4gdGhlIGV4aXN0aW5nIGNvZGViYXNlIGZvciB0aHJlYWQgc2FmZXR5IGlzc3VlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVWx0aW1hdGVseSwgaXQgbWVhbnMgSSBoYXZlIHRvIGJlIG1vcmUgZGlsaWdlbnQgaW4gcmV2aWV3aW5nIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24sIGFzIHRoZXkgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyB0aGFuIGlmIGl0IHdlcmUgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQzLS8qKlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU0NS0gKiAgIEB0OiB0dW5uZWwgdG8gYmUgY2hhbmdlZFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDk6ICogICBpcDZfdG5sX2NoYW5nZSgpIHVwZGF0ZXMgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1MC0gKiovXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1NTI9c3RhdGljIHZvaWRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTUzOmlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1Njg9c3RhdGljIHZvaWQgaXA2X3RubF91cGRhdGUoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU3NC1cdHN5bmNocm9uaXplX25ldCgpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XHRpcDZfdG5sX2NoYW5nZSh0LCBwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTc2LVx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjU2PWlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NTEtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc1MjogKiBpcDZfdG5sX2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG1hbnVhbGx5IGZvciB0dW5uZWwgZGV2aWNlXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2MC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2Mi17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODUtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXA2X3RubF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODg1Olx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtXHQubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2NT1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTAxOlx0XHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAyLVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDY6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA3LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQubmV3bGlua1x0PSBpcDZfdG5sX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVx0LmRlbGxpbmtcdD0gaXA2X3RubF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgYGlwNl90bmxfY2hhbmdlX210dWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIE1UVSBvZiB0aGUgSVB2NiB0dW5uZWxzIGV4dGVybmFsbHkuIEludGVyZXN0aW5nLiBOb3csIEkgbm90aWNlIGBpcDZfdG5sX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VsaW5rYCBhcmUgZGVjbGFyZWQgc3RhdGljLCBidXQgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgLiBIbW0sIHRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiDigJMgaW50ZXJuYWwgZnVuY3Rpb25zIHVzZWQgYXMgaGFuZGxlcnMuIEJ1dCB3YWl0Li4uIGBpcF90dW5uZWxfbmV3bGlua2AgKmlzKiBleHBvcnRlZCBhcyB3ZWxsISBUaGF0IG1lYW5zIHdlIGNhbiBjcmVhdGUgSVAgdHVubmVscyBnZW5lcmFsbHksIG5vdCBqdXN0IElQdjYuIEFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGhlcmUuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBpcyBsaWtlbHkgdG8gYmUgYHNpdC5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTA5NC1cbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTU2LVx0XHR0LVx1MDAzZWZ3bWFyayA9IGZ3bWFyaztcbm5ldC9pcHY2L3NpdC5jOjExNTc6XHRcdGlwaXA2X3R1bm5lbF9iaW5kX2Rldih0LVx1MDAzZWRldik7XG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVx0fVxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L3NpdC5jLTE0NTAtXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KGRldik7XG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipDb25jZXJuaW5nIHRoZSBgaXBpcDZfdHVubmVsX2luaXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcGlwNl90dW5uZWxfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBSaWdodCwgc28gaW1tZWRpYXRlbHkgdGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIGRlZmluaXRlbHkgcmVzdHJpY3RlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3Mgbm90IGludGVuZGVkIHRvIGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBleHRlcm5hbGx5IGZyb20gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4gSXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIHByb2JhYmx5IGRvaW5nIHNvbWUgc2V0dXAgb3IgaW5pdGlhbGl6YXRpb24gc3BlY2lmaWMgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGUgY29kZSBpdCYjMzk7cyBjb250YWluZWQgd2l0aGluLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGluaXRpYWxpemF0aW9uIGVudGFpbHMgYW5kIHdoZXJlIGVsc2UgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGJ1dCB0aGlzIGluaXRpYWwgYml0IG9mIGluZm9ybWF0aW9uIHNldHMgdGhlIHRvbmUuIEtub3dpbmcgdGhpcyBoYXMgY29udGV4dCBpcyB2aXRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYz02OT1NT0RVTEVfUEFSTV9ERVNDKGxvZ19lY25fZXJyb3IsIFwmIzM0O0xvZyBwYWNrZXRzIHJlY2VpdmVkIHdpdGggY29ycnVwdGVkIEVDTlwmIzM0Oyk7XG5uZXQvaXB2Ni9zaXQuYy03MC1cbm5ldC9pcHY2L3NpdC5jOjcxOnN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvaXB2Ni9zaXQuYy03Mi1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2lwdjYvc2l0LmM9MTM5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XG5uZXQvaXB2Ni9zaXQuYzoxMzk4Olx0Lm5kb19pbml0XHQ9IGlwaXA2X3R1bm5lbF9pbml0LFxubmV0L2lwdjYvc2l0LmMtMTM5OS1cdC5uZG9fdW5pbml0XHQ9IGlwaXA2X3R1bm5lbF91bmluaXQsXG4tLVxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNDQyLVxubmV0L2lwdjYvc2l0LmM6MTQ0MzpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xNDQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gc2VlaW5nOgoKKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgVHVubmVsIEluaXRpYWxpemF0aW9uIGFuZCBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2l0X3R1bm5lbF94bWl0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYG5kb19zdGFydF94bWl0YC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgc2Vuc2libGUg4oCTIHRoaXMgbGlrZWx5IG1lYW5zIGBzaXRfdHVubmVsX3htaXRgIGlzIHRoZSBhY3R1YWwgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgdHVubmVsIHR5cGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0lUIHR1bm5lbHMsIGFuZCBgbmRvX3N0YXJ0X3htaXRgIGlzIHRoZSBnZW5lcmljIG5ldHdvcmsgZGV2aWNlIHRyYW5zbWl0IGZ1bmN0aW9uIHRoZSBrZXJuZWwgdXNlcyB0byBpbnZva2UgaXQuIE1ha2VzIHNlbnNlIGZvciBob3cgdGhpcyBraW5kIG9mIGRyaXZlciBnZW5lcmFsbHkgb3BlcmF0ZXMuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoYXQgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgYW5kIGBpcGlwNl90dW5uZWxfaW5pdGAuIFRoaXMgc3VnZ2VzdHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgbGlrZWx5IGhhbmRsZXMgdGhlIGNvcmUgYmluZGluZyBvciBhc3NvY2lhdGlvbiBvZiB0aGUgSVBJUDYgdHVubmVsIHdpdGggaXRzIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGJvdGggZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzLiBUaGUgaW50ZXJwbGF5IG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGltcG9ydGFudCBoZXJlLgoKRnVydGhlciwgYGlwaXA2X3R1bm5lbF91cGRhdGVgIGlzIHRoZW4gY2FsbGVkIGZyb20gYGlwaXA2X3R1bm5lbF9jaGFuZ2VgIGFuZCBgaXBpcDZfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGBpcGlwNl90dW5uZWxfY2hhbmdlYCBwcm9iYWJseSBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBgaXBpcDZfbmV3bGlua2AgaXMgY2xlYXJseSBjYWxsZWQgd2hlbiBhIG5ldyBsaW5rIChuZXR3b3JrIGRldmljZSkgaXMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCB3aGVuZXZlciB0aGVyZSYjMzk7cyBhIGNoYW5nZSBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgbGluaywgdGhlIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBmdW5jdGlvbiBpcyBydW4sIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAuIFRoYXQgd291bGQgZXhwbGFpbiBob3cgbmV3IElQSVA2IHR1bm5lbHMgZ2V0IHNldCB1cCBhbmQgaG93IGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZCBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBob3cgZWFjaCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHVubmVsJiMzOTtzIElQIGFkZHJlc3MgYW5kIHJvdXRpbmcgdGFibGUgZ2V0cyBzZXR1cCBhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gdXNlcyBuZXRsaW5rIG1lc3NhZ2VzIG9yIHNpbWlsYXIgQVBJcyB0byBzZXR1cCBvciBtb2RpZnkgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jPTE1MTQ9c3RhdGljIGJvb2wgaXBpcDZfbmV0bGlua182cmRfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L3NpdC5jLTE1NDgtXG5uZXQvaXB2Ni9zaXQuYzoxNTQ5OnN0YXRpYyBpbnQgaXBpcDZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvc2l0LmMtMTU1MC1cdFx0XHQgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNzc3LVx0LnZhbGlkYXRlXHQ9IGlwaXA2X3ZhbGlkYXRlLFxubmV0L2lwdjYvc2l0LmM6MTc3ODpcdC5uZXdsaW5rXHQ9IGlwaXA2X25ld2xpbmssXG5uZXQvaXB2Ni9zaXQuYy0xNzc5LVx0LmNoYW5nZWxpbmtcdD0gaXBpcDZfY2hhbmdlbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgSVB2NiBUdW5uZWwgQ3JlYXRpb24gYW5kIE1UVSBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUHY2IHR1bm5lbHMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIEkmIzM5O3ZlIGdvdCBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpbiBtaW5kLiBNYWtlcyBzZW5zZSDigJMgdGhleSYjMzk7cmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aG9zZSBhc3BlY3RzLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgc3BlY2lmaWNhbGx5LiBJIHJlbWVtYmVyIGBpcDZncmVfbmV3bGlua2AsIGFuZCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpY2FsbHkgZGVmaW5lZC4gVGhpcyBpcyBhIGJpdCBvZiBhIGNvZGUgc21lbGwuIElzIHRoZXJlIGEgc2ltaWxhciBleHBvcnRlZCBmdW5jdGlvbiBpbiBgaXA2X2dyZS5jYD8gSXQgd291bGQgYmUgd2VpcmQgdG8gaGF2ZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZGVmaW5lZCBzdGF0aWNhbGx5LCBlc3BlY2lhbGx5IGlmIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGNhbiBoYW5kbGUgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGBpcDZncmVfbmV3bGlua2AgaXMgbGlrZSB0aGF0LiBEb2VzIGBpcDZfZ3JlLmNgIGhhdmUgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgcHVycG9zZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFR1bm5lbGluZyBJbXBsZW1lbnRhdGlvbioqCgpIbW0sIG5vIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJJiMzOTtkIGV4cGVjdCBzb21lLCBldmVuIGZvciBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBJdCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgSVB2NiB0dW5uZWxpbmcgaW1wbGVtZW50YXRpb24uIEFscmlnaHQsIGxldCYjMzk7cyBwaXZvdCB0byBgaXA2X3R1bm5lbC5jYC4gUGVyaGFwcyB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgdGhlIGVudHJ5IHBvaW50cywgcmVzaWRlIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGZpbGVzIGFuZCBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IElQdjYgdHVubmVscyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIHRvcm4gZG93bi4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBgaXA2X3R1bm5lbC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9Mzk2PV9fdTE2IGlwNl90bmxfcGFyc2VfdGx2X2VuY19saW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqcmF3KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy00NjMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjQ2NDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfcGFyc2VfdGx2X2VuY19saW0pO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTQ2NS1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9NzUyPV9fdTMyIGlwNl90bmxfZ2V0X2NhcChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNzczLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo3NzQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3NS1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9Nzc3PWludCBpcDZfdG5sX3Jjdl9jdGwoc3RydWN0IGlwNl90bmwgKnQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgwMi19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODAzOkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfcmN2X2N0bCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODA0LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz05MDI9aW50IGlwNl90bmxfcmN2KHN0cnVjdCBpcDZfdG5sICp0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTctfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjkxODpFWFBPUlRfU1lNQk9MKGlwNl90bmxfcmN2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTktXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwMzk9aW50IGlwNl90bmxfeG1pdF9jdGwoc3RydWN0IGlwNl90bmwgKnQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEwNzQtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEwNzU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF94bWl0X2N0bCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ni1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTA5Nz1pbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMS19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTMwMjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfeG1pdCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMy1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc2MT1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzgzLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzg1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3ODY9aW50IGlwNl90bmxfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkxLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzkyOkVYUE9SVF9TWU1CT0woaXA2X3RubF9nZXRfaWZsaW5rKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkzLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTQ9aW50IGlwNl90bmxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgwMy19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgwNS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODA2PWludCBpcDZfdG5sX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjEtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MjI6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTgyND1pbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg0NC19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg0NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX2VuY2FwX3NldHVwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ2LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMjM4PXN0cnVjdCBuZXQgKmlwNl90bmxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNDMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIyNDQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9saW5rX25ldCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTVRVIFVwZGF0ZXMgYW5kIFR1bm5lbGluZyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQuIE5vdywgYSBxdWljayBjaGVjay4uLiB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgbXkgaW50ZW5kZWQgdXNlLCBzbyB0aGF0JiMzOTtzIG9uZSBsZXNzIGhlYWRhY2hlLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIG9mIGV2ZXJ5dGhpbmcgYW5kIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cy4uLiB3aGF0IGFib3V0IHRoZSBTSVQgZHJpdmVyPyBJcyB0aGVyZSBhbnl0aGluZyBpbiBgc2l0LmNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IE1UVS1yZWxhdGVkIGFkanVzdG1lbnRzIG9yIGludGVyYWN0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mIHRoZXJlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSB0dW5uZWxpbmcgaW50ZXJmYWNlJiMzOTtzIGJlaGF2aW91cj8gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgY2hlY2sgZm9yIGNvbW1vbiBpc3N1ZXMuIEJldHRlciB0byBjYXRjaCBwb3RlbnRpYWwgY29uZmxpY3RzIG5vdyB0aGFuIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEZvY3VzZWQgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzaXQuY2AgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0IG5hcnJvd3MgZG93biBteSBzZWFyY2ggY29uc2lkZXJhYmx5LiBTaW5jZSB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlIHByb2JsZW0gZG9tYWluIGFyZSBpbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UuIFRoZXkmIzM5O3JlIGdvb2QgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQuIEJ1dCBiZWZvcmUgSSB6ZXJvIGluLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjazogSSYjMzk7bGwgc2NhbiBgaXBfdHVubmVsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgcmlnaHQ/IEp1c3QgYSBxdWljayBsb29rIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc21hcnQgbW92ZSByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYz04MT1zdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfbG9va3VwKHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTY5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjE3MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbG9va3VwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE3MS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zNjM9dm9pZCBpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzc1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX21kX3VkcF9lbmNhcCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzYtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zNzc9aW50IGlwX3R1bm5lbF9yY3Yoc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1Ni19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0NTc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Jjdik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NTgtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz00NTk9aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTQ3MT1pbnQgaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg3OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDg5PWludCBpcF90dW5uZWxfZW5jYXBfc2V0dXAoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MDktfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NTEwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MTEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NTcxPXZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NjYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX21kX3R1bm5lbF94bWl0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY2OC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY2OT12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtODU5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg2MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NjEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODk3PWludCBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTk5Ny19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2N0bCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy05OTktXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDAwPWJvb2wgaXBfdHVubmVsX3Bhcm1fZnJvbV91c2VyKHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICprcCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDE3LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwMTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fZnJvbV91c2VyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMTktXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDIwPWJvb2wgaXBfdHVubmVsX3Bhcm1fdG9fdXNlcih2b2lkIF9fdXNlciAqZGF0YSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKmtwKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMzktfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV90b191c2VyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNDEtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDQyPWludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1NC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU2LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgX19pcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSwgYm9vbCBzdHJpY3QpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA3OC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDc5OkVYUE9SVF9TWU1CT0xfR1BMKF9faXBfdHVubmVsX2NoYW5nZV9tdHUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA4MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwODE9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlX210dSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDg2LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwOTU9dm9pZCBpcF90dW5uZWxfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTEwNzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTA4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEwOT1zdHJ1Y3QgbmV0ICppcF90dW5uZWxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTExNC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTE1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2dldF9saW5rX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTE2LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTExNz1pbnQgaXBfdHVubmVsX2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTIyLX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExMjM6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZ2V0X2lmbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEyNT1pbnQgaXBfdHVubmVsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlwX3RubF9uZXRfaWQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE2My19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTY0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9pbml0X25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTY1LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE2Nj12b2lkIGlwX3R1bm5lbF9kZWxldGVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTItfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5NT1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTI0OT1pbnQgaXBfdHVubmVsX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg0LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyODU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2NoYW5nZWxpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4Ni1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyODc9aW50IF9faXBfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzE1LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMTY6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfaW5pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzE3LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTMxOD12b2lkIGlwX3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMwLX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMzE6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3VuaW5pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEzMzQ9dm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZClcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzM4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMzk6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3NldHVwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1czogVHVubmVsIEludGVyZmFjZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdHVubmVsIGludGVyZmFjZXMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIGBpcF90dW5uZWxfY2hhbmdlX210dWAsIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gSSBhbHNvIG5vdGVkIHRoZSBjYWxscyB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCBmcm9tIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBhcHBlYXJzIGluIHRoZSBjYWxsIGNoYWluIGBpcDZfdG5sX2NoYW5nZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBpcDZfdG5sX2NoYW5nZWxpbmtgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVzdGFibGlzaGluZyBNVFUgb24gSVB2NiB0dW5uZWxzLiBBbHNvLCBJIHNhdyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwaXA2X2NoYW5nZWxpbmtgIGFuZCBgaXBpcDZfbmV3bGlua2AuIEFuZCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmdyZV9uZXdsaW5rYCBhbmQgYGlwNmdyZV9jaGFuZ2VsaW5rYC4KCkhvd2V2ZXIsIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW52b2tlIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBkaXJlY3RseTsgaXQganVzdCBoYW5kbGVzIHRoZSBNVFUgY2hhbmdlLiBJIG5vdyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNvLCBJIG5lZWQgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gJiMzNDtzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGEgc3RydWN0JiMzNDsgdmVyc3VzIHRydWx5IGlubGluZWQgaGVscGVyIGZ1bmN0aW9ucy4KCmBpcDZfdG5sX2NoYW5nZWxpbmtgIGFuZCBgaXA2X3RubF9uZXdsaW5rYCBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gYGlwNl9saW5rX29wc2AuIFRoaXMgbWVhbnMgdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGVudHJ5IHBvaW50cy4gTGlrZXdpc2UsIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZncmVfY2hhbmdlbGlua2AgYXJlIHN0YXRpYyBidXQgbGlua2VkIHRvIGBpcDZncmVfbGlua19vcHNgIGFzIGFyZSBgaXBpcDZfbmV3bGlua2AgYW5kIGBpcGlwNl9jaGFuZ2VsaW5rYC4KClRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyByZWFzb25pbmcsIHRoZSB1cGRhdGVkIGxpc3Qgb2YgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOgoKKiAgIGBpcF90dW5uZWxfbmV3bGlua2AKKiAgIGBpcF90dW5uZWxfY2hhbmdlbGlua2AKKiAgIGBpcDZncmVfbmV3bGlua2AKKiAgIGBpcDZncmVfY2hhbmdlbGlua2AKKiAgIGBpcDZfdG5sX25ld2xpbmtgCiogICBgaXA2X3RubF9jaGFuZ2VsaW5rYAoqICAgYGlwaXA2X25ld2xpbmtgCiogICBgaXBpcDZfY2hhbmdlbGlua2AKCkkmIzM5O2xsIHZlcmlmeSB0aGF0IGBpcDZncmVfbmV3bGlua2AgaXMgaW5kZWVkIHN0YXRpYywgYnV0IG15IGFzc2Vzc21lbnQgbm93IGxlYW5zIHRvd2FyZCB1c2luZyB0aGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHNpbmNlIHRoZXkgYXJlIGV4cG9ydGVkIGFuZCBhcmUgbm90IHN0YXRpYy4KVGhlIHN0YXRpYyBuYXR1cmUgb2YgYGlwNl90bmxfY2hhbmdlYCBlYXJsaWVyIGlzIGEgcmVkIGhlcnJpbmcuIEl0JiMzOTtzIHRoZSBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQzLS8qKlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU0NS0gKiAgIEB0OiB0dW5uZWwgdG8gYmUgY2hhbmdlZFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDk6ICogICBpcDZfdG5sX2NoYW5nZSgpIHVwZGF0ZXMgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1MC0gKiovXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1NTI9c3RhdGljIHZvaWRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTUzOmlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1Njg9c3RhdGljIHZvaWQgaXA2X3RubF91cGRhdGUoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU3NC1cdHN5bmNocm9uaXplX25ldCgpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XHRpcDZfdG5sX2NoYW5nZSh0LCBwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTc2LVx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjU2PWlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NTEtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc1MjogKiBpcDZfdG5sX2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG1hbnVhbGx5IGZvciB0dW5uZWwgZGV2aWNlXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2MC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2Mi17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODUtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXA2X3RubF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODg1Olx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtXHQubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2NT1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTAxOlx0XHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAyLVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDY6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA3LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQubmV3bGlua1x0PSBpcDZfdG5sX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVx0LmRlbGxpbmtcdD0gaXA2X3RubF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBpcDZfdG5sX2NoYW5nZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCwgbm90IGlubGluZWQsIGFuZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoLiBJJiMzOTtsbCBmb2N1cyBteSBhbmFseXNpcyBvbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIGFzIG15IHByaW1hcnkgc3ltYm9scywgYW5kIHRoZW4gY29uc2lkZXIgYGlwNmdyZV9uZXdsaW5rYCwgYGlwNl90bmxfbmV3bGlua2AsIGFuZCBgaXBpcDZfbmV3bGlua2AgYXMgbGlrZWx5IGFyZWFzIG9mIGltcGFjdCBhcyB3ZWxsLCBrZWVwaW5nIHRoZSBjaGFuZ2VsaW5rIGZ1bmN0aW9ucyBpbiBtaW5kLCB0b28uIFRoZSBmYWN0IHRoZXkmIzM5O3JlIGFsbCBhc3NpZ25lZCB0byBgcnRubF9saW5rX29wc2AgY29uZmlybXMgdGhlaXIgdXRpbGl0eSBhcyBlbnRyeSBwb2ludHMgZm9yIG5ldGxpbmsgaW50ZXJhY3Rpb24uCgpOb3csIGxldCBtZSBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LgoKKipDb25maWdzOioqIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseToKCiogICBgTkVUX0lQX1RVTk5FTGAKKiAgIGBJUFY2X0dSRWAKKiAgIGBJUFY2X1RVTk5FTGAKKiAgIGBJUFY2X1NJVGAKCioqRm9jdXMgU3ltYm9sczoqKiBNeSBsaXN0IG9mIGVudHJ5IHBvaW50cyBpczoKCiogICBgaXBfdHVubmVsX25ld2xpbmtgCiogICBgaXBfdHVubmVsX2NoYW5nZWxpbmtgCiogICBgaXA2Z3JlX25ld2xpbmtgCiogICBgaXA2Z3JlX2NoYW5nZWxpbmtgCiogICBgaXA2X3RubF9uZXdsaW5rYAoqICAgYGlwNl90bmxfY2hhbmdlbGlua2AKKiAgIGBpcGlwNl9uZXdsaW5rYAoqICAgYGlwaXA2X2NoYW5nZWxpbmtgCgoqKlJlYXNvbmluZzoqKiBUaGUgY3J1eCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHdoaWNoIGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIHdpdGhpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgaGVhZHJvb20gY2FsY3VsYXRpb25zIGZvciBhIHJhbmdlIG9mIElQIHR1bm5lbHMg4oCTIHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGxvZ2ljIGhlcmUgaXMgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiwgYW5kIGFueSBtb2RpZmljYXRpb25zIHdpbGwgbmVjZXNzYXJpbHkgYmUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBjYWxscyBmb3IgaW50ZXJmYWNlIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcyBhbmQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBjb3VsZCByZXZlYWwgc3VidGxlIGlzc3VlcyBpbiB0dW5uZWwgYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBfdHVubmVsX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwX3R1bm5lbF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBib3VuZHMgY2hlY2tpbmcgZm9yIGBoZWFkcm9vbWAgaW4gdmFyaW91cyBJUCB0dW5uZWwgaW1wbGVtZW50YXRpb25zIChJUHY0LCBJUHY2IEdSRSwgU0lULCBldGMuKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAgd2hlbiBgcHNrYl9leHBhbmRfaGVhZCgpYCBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGlzc3VlcyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MzM6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKaW5kZXggZDcwOGI2NmU1NWNkYS4uODVlMzQ1NWNlYTI1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaApAQCAtNjI5LDggJiM0Mzs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCwKIGludCBza2JfdHVubmVsX2NoZWNrX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZW5jYXBfZHN0LAogCQkJICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgIHVuc2lnbmVkIGludCBoZWFkcm9vbSkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKQogewogCS8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkCiAJICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuCkBAIC02NDAsNiAmIzQzOzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChoZWFkcm9vbSAmZ3Q7IG1heF9hbGxvd2VkKQogCQloZWFkcm9vbSA9IG1heF9hbGxvd2VkOwogCiYjNDM7CXJldHVybiBoZWFkcm9vbTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3sKJiM0MzsJaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pOwomIzQzOwogCWlmIChoZWFkcm9vbSAmZ3Q7IFJFQURfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSkpCiAJCVdSSVRFX09OQ0UoZGV2LSZndDtuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmMKaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsLmMKQEAgLTMxNyw3ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJbXR1ID0gbWluKHRkZXYtJmd0O210dSwgSVBfTUFYX01UVSk7CiAJfQogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjsKJiM0MzsJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pOwogCW10dSAtPSB0X2hsZW4gJiM0MzsgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDApOwogCiAJaWYgKG10dSAmbHQ7IElQVjRfTUlOX01UVSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuYwppbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2dyZS5jCkBAIC0xMTM3LDEzICYjNDM7MTEzNywxMSBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSwKIAkJCXJldHVybjsKIAogCQlpZiAocnQtJmd0O2RzdC5kZXYpIHsKLQkJCXVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7Ci0JCQkJCQkgdF9obGVuOwomIzQzOwkJCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKIAotCQkJaWYgKHQtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKLQkJCQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47Ci0JCQllbHNlCi0JCQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBkc3RfbGVuOwomIzQzOwkJCWhlYWRyb29tID0gcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0X2hsZW47CiYjNDM7CQkJaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pOwomIzQzOwkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaGVhZHJvb207CiAKIAkJCWlmIChzZXRfbXR1KSB7CiAJCQkJaW50IG10dSA9IHJ0LSZndDtkc3QuZGV2LSZndDttdHUgLSB0X2hsZW47CkBAIC0xMTcxLDggJiM0MzsxMTY5LDggQEAgc3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpCiAKIAl0X2hsZW4gPSB0dW5uZWwtJmd0O2hsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAotCWlmICh0dW5uZWwtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKLQkJdHVubmVsLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuOwomIzQzOwlpZiAodHVubmVsLSZndDtkZXYtJmd0O2hlYWRlcl9vcHMgJmFtcDsmYW1wOyB0dW5uZWwtJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVA2R1JFKQomIzQzOwkJdHVubmVsLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjsKIAllbHNlCiAJCXR1bm5lbC0mZ3Q7ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBMTF9NQVhfSEVBREVSICYjNDM7IHRfaGxlbjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTE1MjIsOCAmIzQzOzE1MjIsMTEgQEAgc3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCkKIAkJCXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodC0mZ3Q7bmV0LCBwLSZndDtsaW5rKTsKIAogCQlpZiAodGRldikgewotCQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKLQkJCQl0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0MzsgdF9obGVuOwomIzQzOwkJCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsKJiM0MzsJCQloZWFkcm9vbSA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb207CiYjNDM7CQkJaGVhZHJvb20gJiM0Mzs9IHRfaGxlbjsKJiM0MzsJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiAJCQltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtJmd0O210dSwgSVA2X01BWF9NVFUpOwogCiAJCQltdHUgPSBtdHUgLSB0X2hsZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGEzOGIyNGZiODM4NDIuLjE5YjdmYThkMWEyYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NpdC5jCkBAIC0xMTMxLDcgJiM0MzsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG10dSk7CiAJCWhsZW4gPSB0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tOwogCX0KLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTQKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUCBUdW5uZWwgSGVhZHJvb20gUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHBza2JfZXhwYW5kX2hlYWRgIGZ1bmN0aW9uLCBhbmQgYnkgZXh0ZW5zaW9uIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgLCBhcmUgdnVsbmVyYWJsZSB0byBvdmVyZmxvd2luZyBoZWFkZXIgb2Zmc2V0cyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBoZWFkcm9vbSB2YWx1ZXMsIGFzIHVzZWQgaW4gdmFyaW91cyB0dW5uZWwgaW1wbGVtZW50YXRpb25zLCBuYW1lbHkgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLCBwcmVzdW1hYmx5IHRvIG1ha2UgaXQgc2FmZS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBhcml0aG1ldGljIG92ZXJmbG93IGR1cmluZyB0aGUgaGVhZGVyIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgb3ZlcmZsb3cgaXMgY2F1c2VkIGJ5IHRoZSBsYXJnZSBoZWFkcm9vbSB2YWx1ZS4gVGhlIHBhdGNoIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBpdHMgZ29hbCBpcyBqdXN0IHRvIGxpbWl0IHRoZSBoZWFkcm9vbSB0byBhdm9pZCB0aGlzIG92ZXJmbG93LgoKVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3N1bXB0aW9uOiBpdCYjMzk7cyBhIHNpbXBsZSBib3VuZHMgY2hlY2sgdG8gZW5zdXJlIHRoZSBgaGVhZHJvb21gIHZhbHVlIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIHByZWRlZmluZWQgbWF4aW11bS4gVGhlIGV4aXN0aW5nIGZ1bmN0aW9uLCBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAsIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmV0dXJuIHRoZSBhZGp1c3RlZCBoZWFkcm9vbSB2YWx1ZS4KClNpbmNlIHRoZSBwcm9ibGVtIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhcml0aG1ldGljIG92ZXJmbG93LCBhIHRvb2wgbGlrZSBLQVNBTiBpcyB0aGUgbW9zdCByZWxldmFudCBhcHByb2FjaCBmb3IgZGV0ZWN0aW5nIGFuZCBwaW5wb2ludGluZyBzdWNoIGlzc3Vlcy4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNvbmNlcm4gaGVyZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYSBuZXcgd2F5IHRvIGluaXRpYWxpemUgbWVtb3J5OyBpdCYjMzk7cyBhIGJvdW5kcyBjaGVjay4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBzZXRzIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgaW50ZWdlciBvdmVyZmxvdyB0aGF0IGxlYWRzIHRvIG91dCBvZiBib3VuZHMgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjMzOjU3LjM3NTc1MzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NDU1MDczMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICAgIFwiaXBfdHVubmVsX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmdyZV9uZXdsaW5rXCIsXG4gICAgXCJpcDZncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gIHRvIGNhcCB0aGUgaGVhZHJvb20gb2YgSVAgdHVubmVscywgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBhZmZlY3RzIElQdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHR1bm5lbCBpbnRlcmZhY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozMzo1Ny4zNzU3NTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1MzU2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjMzOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuQEAgLTYyOSw4ICs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXFxuIFxcdFxcdFxcdCAgaW50IGhlYWRyb29tLCBib29sIHJlcGx5KTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxcbiB7XFxuIFxcdC8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkXFxuIFxcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxcbkBAIC02NDAsNiArNjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChoZWFkcm9vbSBcXHUwMDNlIG1heF9hbGxvd2VkKVxcbiBcXHRcXHRoZWFkcm9vbSA9IG1heF9hbGxvd2VkO1xcbiBcXG4rXFx0cmV0dXJuIGhlYWRyb29tO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4re1xcbitcXHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XFxuK1xcbiBcXHRpZiAoaGVhZHJvb20gXFx1MDAzZSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxcbiBcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tLCBoZWFkcm9vbSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjViMWYxODA0ODVkNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0bXR1ID0gbWluKHRkZXYtXFx1MDAzZW10dSwgSVBfTUFYX01UVSk7XFxuIFxcdH1cXG4gXFxuLVxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcXG4rXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxuIFxcdG10dSAtPSB0X2hsZW4gKyAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XFxuIFxcbiBcXHRpZiAobXR1IFxcdTAwM2MgSVBWNF9NSU5fTVRVKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9ncmUuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xcbkBAIC0xMTM3LDEzICsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5kZXYpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdF9obGVuO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XFxuIFxcbi1cXHRcXHRcXHRpZiAodC1cXHUwMDNlZGV2LVxcdTAwM2VoZWFkZXJfb3BzKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBkc3RfbGVuO1xcbitcXHRcXHRcXHRoZWFkcm9vbSA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0X2hsZW47XFxuK1xcdFxcdFxcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXRfbXR1KSB7XFxuIFxcdFxcdFxcdFxcdGludCBtdHUgPSBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1IC0gdF9obGVuO1xcbkBAIC0xMTcxLDggKzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcXG4gXFxuIFxcdHRfaGxlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuIFxcbi1cXHRpZiAodHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhlYWRlcl9vcHMpXFxuLVxcdFxcdHR1bm5lbC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBMTF9NQVhfSEVBREVSICsgdF9obGVuO1xcbitcXHRpZiAodHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhlYWRlcl9vcHMgXFx1MDAyNlxcdTAwMjYgdHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQNkdSRSlcXG4rXFx0XFx0dHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0dW5uZWwtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE1MjIsOCArMTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbiBcXHRcXHRcXHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtXFx1MDAzZW5ldCwgcC1cXHUwMDNlbGluayk7XFxuIFxcbiBcXHRcXHRpZiAodGRldikge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxuLVxcdFxcdFxcdFxcdHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArIHRfaGxlbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xcbitcXG4rXFx0XFx0XFx0aGVhZHJvb20gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxuK1xcdFxcdFxcdGhlYWRyb29tICs9IHRfaGxlbjtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbiBcXHRcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtXFx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xcbiBcXG4gXFx0XFx0XFx0bXR1ID0gbXR1IC0gdF9obGVuO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXFxuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xcbisrKyBiL25ldC9pcHY2L3NpdC5jXFxuQEAgLTExMzEsNyArMTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBtdHUpO1xcbiBcXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbiBcXHR9XFxuLVxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcXG4rXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzM6NTcuODM4OTU0NzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE5MjQ1MTY1OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICAgIFwiaXBfdHVubmVsX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmdyZV9uZXdsaW5rXCIsXG4gICAgXCJpcDZncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gIHRvIGNhcCB0aGUgaGVhZHJvb20gb2YgSVAgdHVubmVscywgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBhZmZlY3RzIElQdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHR1bm5lbCBpbnRlcmZhY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MzM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTYyOSw4ICs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcbiBpbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcbiBcdFx0XHQgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiB7XG4gXHQvKiB3ZSBtdXN0IGNhcCBoZWFkcm9vbSB0byBzb21lIHVwcGVybGltaXQsIGVsc2UgcHNrYl9leHBhbmRfaGVhZFxuIFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXG5AQCAtNjQwLDYgKzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBtYXhfYWxsb3dlZClcbiBcdFx0aGVhZHJvb20gPSBtYXhfYWxsb3dlZDtcbiBcbitcdHJldHVybiBoZWFkcm9vbTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4re1xuK1x0aGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xuK1xuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBSRUFEX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG4gXHR9XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gXHRtdHUgLT0gdF9obGVuICsgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcbiBcbiBcdGlmIChtdHUgXHUwMDNjIElQVjRfTUlOX01UVSlcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjIwMGQwYmExYTQwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuQEAgLTExMzcsMTMgKzExMzcsMTEgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldikge1xuLVx0XHRcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbitcdFx0XHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4gXG4tXHRcdFx0aWYgKHQtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gZHN0X2xlbjtcbitcdFx0XHRoZWFkcm9vbSA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdF9obGVuO1xuK1x0XHRcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaGVhZHJvb207XG4gXG4gXHRcdFx0aWYgKHNldF9tdHUpIHtcbiBcdFx0XHRcdGludCBtdHUgPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSAtIHRfaGxlbjtcbkBAIC0xMTcxLDggKzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcbiBcbiBcdHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcbi1cdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4tXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcbitcdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVA2R1JFKVxuK1x0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjtcbiBcdGVsc2VcbiBcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBMTF9NQVhfSEVBREVSICsgdF9obGVuO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwOC4uMmM5NDFhY2IwODFmYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTUyMiw4ICsxNTIyLDExIEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKyB0X2hsZW47XG4rXHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuK1xuK1x0XHRcdGhlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbitcdFx0XHRoZWFkcm9vbSArPSB0X2hsZW47XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbisrKyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbiBcdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjMzOjU3LjgzODk1NzM1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDA2MjQ4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjb3JlIG5ldHdvcmtpbmcgZmlsZXM6IGBpcF90dW5uZWxzLmhgLCBgaXBfdHVubmVsLmNgLCBgaXA2X2dyZS5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBgc2l0LmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyB0byBpbnRyb2R1Y2UgYW5kIHVzZSBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCwgZWZmZWN0aXZlbHkgcHV0dGluZyBhIGNhcCBvbiB0aGUgaGVhZHJvb20gdXNlZCBieSBJUCB0dW5uZWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW55IGNoYW5nZSBhdCB0aGlzIGxldmVsIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgbGV0J3Mgc2VlLCB0byBlZmZlY3RpdmVseSB0ZXN0IHRoaXMsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gYGlwX3R1bm5lbC5jYCB3aWxsIHJlcXVpcmUgYENPTkZJR19ORVRfSVBJUGAgYW5kIGBDT05GSUdfTkVUX0lQR1JFYCwgYW5kIHNpbmNlIHdlJ3JlIGFsc28gZGVhbGluZyB3aXRoIElQdjYsIGBDT05GSUdfSVBWNl9TSVRgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9NYWtlZmlsZWAgdG8gY29uZmlybSBhbmQgZ2F0aGVyIGFsbCB0aGUgbmVjZXNzYXJ5IG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MDUuMDc5NTg0Njk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzEzODc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MDUuMjYyNzMxNzU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNzU0NTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIGlwX3R1bm5lbC5jIGFuZCBpdHMgQ29yZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBwaWVjZSBoZXJlLCB0aGUgYWJzb2x1dGUgbGluY2hwaW4sIGlzIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAuIFRoYXQncyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGBpcF90dW5uZWwuY2AuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBsaWtlbHkgY29udGluZ2VudCBvbiB0aGF0LiBJdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgZW5hYmxlci4gV2l0aG91dCBpdCwgdGhlIHdob2xlIHRoaW5nJ3MgbGlrZWx5IGRpc2FibGVkLCBvciBhdCBsZWFzdCBvcGVyYXRpbmcgaW4gc29tZSBkZWdyYWRlZCBtb2RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgZm9yZWZyb250IGFzIEkgaW52ZXN0aWdhdGUgaXRzIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHRoZSB0dW5uZWxzIEknbSBjb25jZXJuZWQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjA4LjQwMDI3ODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDAxMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9ncmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgKz0gZm91Ni5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjA4LjQ0NTI4NTQxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjA3MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJUHY2IEdSRSBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYENPTkZJR19JUFY2X0dSRWAgYXNzb2NpYXRlZCB3aXRoIGBpcDZfZ3JlLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gKEdSRSkgdHVubmVscyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgaGVyZTogdGhlIGFiaWxpdHkgdG8gZW5jYXBzdWxhdGUgSVB2NiBwYWNrZXRzIHdpdGhpbiBhbm90aGVyIElQdjYgb3IgSVB2NCBoZWFkZXIgZm9yIHRyYW5zcG9ydCBhY3Jvc3MgbmV0d29ya3MgdGhhdCBtaWdodCBub3QgbmF0aXZlbHkgc3VwcG9ydCBJUHY2LCBvciBmb3IgY3JlYXRpbmcgdmlydHVhbCBwcml2YXRlIG5ldHdvcmtzLCB0aGF0IHNvcnQgb2YgdGhpbmcuIFxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uLiBJdCB3b3VsZCBiZSB3b3J0aCBhIGRlZXBlciBkaXZlLiBJcyB0aGlzIGEgZnVsbCBpbXBsZW1lbnRhdGlvbiB0aGF0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGtleWluZywgc2VxdWVuY2UgbnVtYmVycywgYW5kIGNoZWNrc3Vtcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGRvdWJsZSBlbmNhcHN1bGF0aW9uPyBXaGF0IGFib3V0IGZyYWdtZW50YXRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgaXRzZWxmPyBJJ2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IHRoZSBJUHY2IHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgaGFuZGxpbmcgb2YgTVRVIGRpc2NvdmVyeS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRoaXMgc2V0dGluZyBpcyBkZXBlbmRlbnQgb24gYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2ssIHN1Y2ggYXMgSVBzZWMsIHJlbHkgb24gaXQuXG5cbkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBtb2R1bGUgY29tcGlsZWQgc3RhdGljYWxseSBvciBkeW5hbWljYWxseT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIEdSRSB0dW5uZWxzLCBzdWNoIGFzIHRoZSByaXNrIG9mIHR1bm5lbGluZyBtYWxpY2lvdXMgdHJhZmZpYz8gV2hhdCBpcyB0aGUgaW1wYWN0IG9mIHRoaXMga2VybmVsIG1vZHVsZSBvbiBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2U/IE92ZXJhbGwsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyB0byBkZXRlcm1pbmUgaXRzIHByYWN0aWNhbCBzdWl0YWJpbGl0eSwgYW5kIEknZCBiZSBsb29raW5nIGZvciB0aGUgbGF0ZXN0IGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgYW55IGFtYmlndWl0aWVzIG9yIGNoYW5nZXMgaW4gYmVoYXZpb3VyIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoxMy4yNjYwMTE3MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2Nzk5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoxMy4zMTM2OTY0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzk2MDUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKklQdjYgVHVubmVsczogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgaXA2X3R1bm5lbC5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYENPTkZJR19JUFY2X1RVTk5FTGAuIEl0J3MgYSBzdGFuZGFyZCByZXF1aXJlbWVudCwgcmlnaHQ/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHdlIGFyZSBnb2luZyB0byBydW4gaW50byBwcm9ibGVtcyB3aXRoIHRoZSBjb2RlLiBJdCBpcyBhbiBpbW1lZGlhdGUgZmxhZyB0byBjb25maXJtLiBJIHdvdWxkIGFzc3VtZSB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyBnb2luZyB0byByZWx5IG9uIHRoaXMgZmVhdHVyZSwgc28gaXQgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSBiZWZvcmUgc3BlbmRpbmcgbW9yZSB0aW1lLiBJJ2xsIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gTWFrZXMgc2Vuc2UgdG8gYmUgY2VydGFpbiwgYW5kIG5vdCB3YXN0ZSB0aW1lIHRyeWluZyB0byBkZWJ1ZyBpZiBpdCdzIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MTYuNDkzMzA0OTI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4NTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0lQVjZfVlRJKSArPSBpcDZfdnRpLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MTYuNTM5Mzk2MjUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjY5NzgyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgU0lUIENvbmZpZ3VyYXRpb24gZm9yIEtlcm5lbCBNb2R1bGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1NJVGAgd2l0aGluIGBzaXQuY2AuIFRoZSBzeXN0ZW0gY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhbHNvIGluY2x1ZGUgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYElQVjZfU0lUYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gdG8gYmUgcmVsZXZhbnQ6IGBpcF90dW5uZWxfYmluZF9kZXZgIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlYCBhbmQgYGlwNmdyZV9jYWxjX2hsZW5gIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLCBgaXA2X3RubF9saW5rX2NvbmZpZ2AgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AsIGFuZCBmaW5hbGx5LCBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpbiBgbmV0L2lwdjYvc2l0LmNgLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTZWVpbmcgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyMS42NjYzNzczMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzk1NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9iaW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0yMzM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpfX2lwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMjc5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjI4MDpzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzQyLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM0MzpcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDQtXFx0ZXJyID0gZGV2X3NldF9tdHUoZGV2LCBtdHUpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODYyPXN0YXRpYyB2b2lkIGlwX3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cXHRcXHR0LVxcdTAwM2Vmd21hcmsgPSBmd21hcms7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODg5OlxcdFxcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg5MC1cXHRcXHRpZiAoc2V0X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExMjU9aW50IGlwX3R1bm5lbF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBpcF90bmxfbmV0X2lkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE1NS1cXHRcXHRpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcXHRcXHRpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYtXFx1MDAzZW10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXFx0XFx0aXBfdHVubmVsX2FkZChpdG4sIG5ldGRldl9wcml2KGl0bi1cXHUwMDNlZmJfdHVubmVsX2RldikpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5NT1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjI1OlxcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMjYtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyMS43MTM3Nzc4NjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNDAyNDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IExpbnV4IGtlcm5lbCBjb2RlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBJUCBUdW5uZWwgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgcm91dGluZXMgZm9yIGhhbmRsaW5nIElQIHR1bm5lbHMgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSd2ZSBpZGVudGlmaWVkIGZvdXIga2V5IGZ1bmN0aW9uczogYGlwX3R1bm5lbF9uZXdsaW5rYCwgYGlwX3R1bm5lbF9pbml0X25ldGAsIGBpcF90dW5uZWxfdXBkYXRlYCwgYW5kIGBpcF90dW5uZWxfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgbGlrZWx5IHJlcHJlc2VudCB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHR1bm5lbCBpbnRlcmZhY2UuXG5cbmBpcF90dW5uZWxfbmV3bGlua2AgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjcmVhdGlvbiBvZiB0aGVzZSB0dW5uZWwgZGV2aWNlcyBpcyBhIGZ1bmN0aW9uIHlvdSBjYW4gY2FsbCBmcm9tIHRoZSB1c2VyLXNwYWNlLCB3aGljaCBJIGZpbmQgaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYnJpbmdpbmcgdXAgYSB0dW5uZWwgaW50ZXJmYWNlLlxuXG5Ob3csIGBpcF90dW5uZWxfaW5pdF9uZXRgIG11c3QgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgbmV0d29ya2luZyBuYW1lc3BhY2UgY29udGV4dCBmb3IgSVAgdHVubmVscy4gSSB3b3VsZCBndWVzcyB0aGlzIGhhcHBlbnMgZHVyaW5nIHN5c3RlbSBzdGFydHVwIG9yIHdoZW4gYSBuZXcgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgcmVzb3VyY2VzIGZvciB0aGVzZSB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRoaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlLlxuXG5gaXBfdHVubmVsX3VwZGF0ZWAgbGlrZWx5IGhhbmRsZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgaXQncyBiZWVuIGNyZWF0ZWQuIFRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzLCB0aGUga2V5LCBvciB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCBhbGxvd3MgY2hhbmdlcyB0byBiZSBhcHBsaWVkIGR5bmFtaWNhbGx5IHRvIHRoZSBydW5uaW5nIHR1bm5lbC5cblxuRmluYWxseSwgYGlwX3R1bm5lbF9jcmVhdGVgIGlzIHByb2JhYmx5IHRoZSB3b3JraG9yc2UgZnVuY3Rpb24gY2FsbGVkIGJ5IGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCB0dW5uZWwgZGV2aWNlLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3RhYmxpc2hlZC4gSSdkIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIGFuZCByZWdpc3RlcmluZyB0aGUgdHVubmVsIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEluIGVzc2VuY2UsIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHR1bm5lbCBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy5cblxuSSdkIGV4cGVjdCB0aGVzZSBmdW5jdGlvbnMgdG8gaW50ZXJhY3QgY2xvc2VseSwgd2l0aCBgaXBfdHVubmVsX25ld2xpbmtgIGFjdGluZyBhcyBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSwgY2FsbGluZyBgaXBfdHVubmVsX2NyZWF0ZWAgaW50ZXJuYWxseSwgYW5kIHBlcmhhcHMgc3Vic2VxdWVudGx5IHVzaW5nIGBpcF90dW5uZWxfdXBkYXRlYCBpZiB0aGUgbmV3IGRldmljZSBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyNi40NDc4MDU1MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzE4NDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MjYuNTUwOTk1NDA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzMyMTQ5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgR1JFIFR1bm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBkZWZpbml0ZWx5IGEga2V5IGVudHJ5IHBvaW50IGhlcmUg4oCTIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgbGluayBzZXR1cC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIHNvdW5kcyBsaWtlIGl0J3Mgd2hlcmUgdGhlIHJvdXRpbmcgYXNwZWN0cyBvZiB0aGUgSVB2NiBHUkUgdHVubmVsIGFyZSBjb25maWd1cmVkLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgcm91dGVzIGFyZSBzZXQgdXAgYW5kIG1hbmFnZWQgZm9yIHRoZSB0dW5uZWwuIEZvbGxvd2luZyB0aGF0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBgaXA2Z3JlX2NhbGNfaGxlbmAuIEkgc3VzcGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gY2FsY3VsYXRpbmcgdGhlIGhlYWRlciBsZW5ndGggb2YgdGhlIEdSRSB0dW5uZWwgaXRzZWxmLCBzbyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGVuY2Fwc3VsYXRpb24gb3ZlcmhlYWQuIFVuZGVyc3RhbmRpbmcgdGhlIGhlYWRlciBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWFsIE1UVSBoYW5kbGluZyBhbmQgcGFja2V0IGZyYWdtZW50YXRpb24uIFdpdGggdGhlc2UgcGllY2VzIG9mIGluZm9ybWF0aW9uLCBJIHNob3VsZCBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhpcyBmYWNldCBvZiB0aGUgSVB2NiBHUkUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozMC42MjQyMTMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM3OTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIzLVxcdFxcdFxcdFxcdFxcdCBpbnQgdF9obGVuKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTExODA9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4Mi1cXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmdyZV9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg0LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjQ4PXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTAtXFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNTE6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjMwLjY3MTU5OTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg5ODI4NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgQ29uZmlndXJhdGlvbiBvZiBUdW5uZWwgTGlua3MqKlxuXG5BbHJpZ2h0LCBzbyBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgYW5kIGBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnYCBhcmUgZGVmaW5lZCBhcyAqc3RhdGljKiBjb25zdHJ1Y3RzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgbGlrZWx5IGVpdGhlciBnbG9iYWwgY29uc3RhbnRzLCBwcmUtaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGRvZXNuJ3QgY2hhbmdlIGR1cmluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBvcGVyYXRpb24uIEdpdmVuIHRoZWlyIG5hbWluZywgdGhleSdyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIEdSRSBhbmQgRVJTUEFOIElQdjYgdHVubmVsIGxpbmtzLCB3aGljaCBzdWdnZXN0cyB0aGV5IGhvbGQgZGVmYXVsdCBzZXR0aW5ncyBvciBtYXliZSBzb21lIGtpbmQgb2YgcHJlLWRlZmluZWQgcG9saWN5LlxuXG5Ob3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBzdGF0aWMgY29uZmlndXJhdGlvbnMgYXJlIHV0aWxpemVkLiBTdGF0aWMgY29uZmlndXJhdGlvbiBjYW4gYmUgcG93ZXJmdWwsIGJ1dCBpdCdzIGNydWNpYWwgdG8ga25vdyBob3cgdGhleSBhcmUgYWNjZXNzZWQgYW5kIHdoZW4uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZWlyIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYXJlIGFjdHVhbGx5ICpjYWxsZWQqLiBJIG5lZWQgdG8gZmluZCB0aGUgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIHJlZmVyZW5jZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBhbGwgdGhlIGNhbGxlcnMuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBuZXR3b3JrIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg0NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjM0Ljc2MTQyOThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz03OT1zdGF0aWMgdm9pZCBpcDZncmVfdHVubmVsX2xpbmsoc3RydWN0IGlwNmdyZV9uZXQgKmlnbiwgc3RydWN0IGlwNl90bmwgKnQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzo4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTgxLXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0zMTU9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZncmVfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMzUyLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzozNTM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyhudCwgMSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTM1NC1cXHRpcDZncmVfdHVubmVsX2xpbmsoaWduLCBudCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTE3PXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg3LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDg4OnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg5LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIzLVxcdFxcdFxcdFxcdFxcdCBpbnQgdF9obGVuKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTExNjM9c3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE3OS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4MS17XFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODI6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZncmVfY2FsY19obGVuKHQpKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTIwOT1zdGF0aWMgaW50IGlwNmdyZV90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxMi1cXHRpcDZncmVfdG5sX2NvcHlfdG5sX3Bhcm0odCwgcCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyMTM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyh0LCBzZXRfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxNC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xOTc1PXN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk4LVxcdGlmICghZXJyKSB7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTk6XFx0XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyhudCwgIXRiW0lGTEFfTVRVXSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXFx0XFx0aXA2Z3JlX3R1bm5lbF9saW5rX21kKGlnbiwgbnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNDg9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDkte1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUwOlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUxOlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2ZXJzcGFuX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozNC44MDY4NzQ3OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzkwOTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBJbml0aWFsIEFzc2Vzc21lbnQ6IGlwNmdyZV9uZXdsaW5rKipcblxuUmlnaHQsIGBpcDZncmVfbmV3bGlua2AuIFRoYXQncyBhIHNvbGlkIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHBvc2l0aXZlLiBJIHNlZSB0aGF0IGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25zaWRlcmluZyB3aGF0IHRoYXQgbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBJUHY2IEdSRSB0dW5uZWxzLiBJdCdzIGEga2V5IHBpZWNlLCBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBuZXcgR1JFIHR1bm5lbCBsaW5rcyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gSSBiZXQgdGhpcyBpcyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIHBhcmFtZXRlcnMsIGFkZHJlc3NpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBNVFUgYWRqdXN0bWVudHMuIFRoaXMgaXMgd2hlcmUgeW91IGdldCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSB0dW5uZWwgZGVmaW5pdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldGxpbmsgY2FsbHMuIFByb2JhYmx5IHNldHRpbmcgdXAgYSBuZXcgaW50ZXJmYWNlIHdpdGggdGhlIHJpZ2h0IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IHRoZSBHUkUgdHVubmVsLiBHb29kIGNob2ljZSwgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozOC41ODA3ODYxMTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDkyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MTkwOD1zdGF0aWMgYm9vbCBpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0MC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk0MTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NzQtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjE5NzU6c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTc2LVxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk2LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTk3OlxcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjE2PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjM4LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjM5OlxcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDAtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjg3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjkzLVxcdC52YWxpZGF0ZVxcdD0gaXA2Z3JlX3R1bm5lbF92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5NDpcXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTUtXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDI9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMwOC1cXHQudmFsaWRhdGVcXHQ9IGlwNmdyZV90YXBfdmFsaWRhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMDk6XFx0Lm5ld2xpbmtcXHQ9IGlwNmdyZV9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzEwLVxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZncmVfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MzguNjI0ODgzMjU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDU2NTcyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IEdSRSBMaW5rIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXA2Z3JlX25ld2xpbmtgIGZ1bmN0aW9uLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgYSBiaXQgbGltaXRpbmcsIGJ1dCBpdCAqaXMqIGFzc2lnbmVkIHRvIGBydG5sX2xpbmtfb3BzYCwgd2hpY2ggaXMgdGhlIG5ldGxpbmsgbGluayBvcGVyYXRpb24gc3RydWN0dXJlLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSB3YXMgaG9waW5nIGl0IHdvdWxkIGJlIGEgcmVndWxhciBmdW5jdGlvbi5cblxuTGV0J3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBsaW5rIHR5cGUgZ2V0cyBpbnN0YW50aWF0ZWQuIEdpdmVuIHRoYXQgaXQncyBgc3RhdGljYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoICpub24qLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIEknbSBtaXNzaW5nPyBJIHNob3VsZCBzY2FuIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSBob29rIG9yIGFuIGludGVyZmFjZSBmb3IgdGhlIHN5c3RlbSB0byBpbnRlcmFjdCB3aXRoIHRoZSBJUDZHUkUgZnVuY3Rpb25hbGl0eS5cblxuQWgsIEkgc2VlIGBpcDZncmVfaW5pdF9uZXRgLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgY2FuZGlkYXRlIHRvIGludmVzdGlnYXRlIG5leHQuIENvdWxkIHRoYXQgYmUgdGhlIGtleT8gSSdsbCBkaWcgaW50byB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo0Mi44MzA1NDMzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAzNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTQ3NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1Mz1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtXFx0ZHN0X2NhY2hlX3Jlc2V0KFxcdTAwMjZ0LVxcdTAwM2Vkc3RfY2FjaGUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTY1OlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjYtfVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5NzY9c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4Mi1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgzOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODQtXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjQyLjg3NjA1MzU1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ3MTEwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5vbi1TdGF0aWMgYGlwNl90bmxfY2hhbmdlYCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgaXA2X3RubF9jaGFuZ2VgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNlcmllcyBvZiBjb25zaWRlcmF0aW9ucy4gSWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdHMgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgaXQncyBsaWtlbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgaXRzIHNjb3BlIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBBcmUgdGhlcmUgYW55IGV4dGVybiBkZWNsYXJhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbj8gV2hlcmUgaXMgaXQgZGVmaW5lZD9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIGl0J3MgcGFydCBvZiBhIG1vZHVsZSBvciBsaW5rZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLiBJdHMgdXNlIGluIG11bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzIGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBkdWUgdG8gaW5jb25zaXN0ZW50IGRlZmluaXRpb25zIG9yIG1pc3VzZSBpZiBub3QgY2FyZWZ1bGx5IG1hbmFnZWQuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIGNhbGwgc2l0ZXMgdG8gZW5zdXJlIHRoYXQgYW55IHNpZGUgZWZmZWN0cyBhcmUgdW5kZXJzdG9vZCBhbmQgYWNjb3VudGVkIGZvciwgZ2l2ZW4gdGhhdCBpdHMgZGVmaW5pdGlvbiBtaWdodCB2YXJ5IGRlcGVuZGluZyBvbiBjb21waWxhdGlvbiBvcHRpb25zIG9yIG1vZHVsZSBsb2FkaW5nLiBNeSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGNhc2VzIGZvciB0aGlzIG5vbi1zdGF0aWMgYmVoYXZpb3IgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0cyBkZXNpZ24uIFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBtYW5pcHVsYXRlLCBhbmQgaG93IGFyZSB0aG9zZSBzdHJ1Y3R1cmVzIHNoYXJlZD8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLCBpZiBhbnk/IEnigJlsbCBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIHVzYWdlIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZSBmb3IgdGhyZWFkIHNhZmV0eSBpc3N1ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFVsdGltYXRlbHksIGl0IG1lYW5zIEkgaGF2ZSB0byBiZSBtb3JlIGRpbGlnZW50IGluIHJldmlld2luZyBhbmQgdW5kZXJzdGFuZGluZyBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uLCBhcyB0aGV5IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgdGhhbiBpZiBpdCB3ZXJlIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo0OC4wMjMxNjU3MDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTI0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDUtICogICBAdDogdHVubmVsIHRvIGJlIGNoYW5nZWRcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTQ5OiAqICAgaXA2X3RubF9jaGFuZ2UoKSB1cGRhdGVzIHRoZSB0dW5uZWwgcGFyYW1ldGVyc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTUwLSAqKi9cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUyPXN0YXRpYyB2b2lkXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NTM6aXA2X3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU2OD1zdGF0aWMgdm9pZCBpcDZfdG5sX3VwZGF0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzQtXFx0c3luY2hyb25pemVfbmV0KCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XFx0aXA2X3RubF9jaGFuZ2UodCwgcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzYtXFx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2NTY9aXA2X3RubF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzUxLS8qKlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzUyOiAqIGlwNl90bmxfY2hhbmdlX210dSAtIGNoYW5nZSBtdHUgbWFudWFsbHkgZm9yIHR1bm5lbCBkZXZpY2VcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzYwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwNl90bmxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNjU9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHRiW0lGTEFfTVRVXSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMTpcXHRcXHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMi1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTA2OnN0YXRpYyBpbnQgaXA2X3RubF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0Lm5ld2xpbmtcXHQ9IGlwNl90bmxfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcXHQuY2hhbmdlbGlua1xcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVxcdC5kZWxsaW5rXFx0PSBpcDZfdG5sX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjQ4LjA2OTY5NjIwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgyODMyOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpcyBleHBvcnRlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBNVFUgb2YgdGhlIElQdjYgdHVubmVscyBleHRlcm5hbGx5LiBJbnRlcmVzdGluZy4gTm93LCBJIG5vdGljZSBgaXA2X3RubF9uZXdsaW5rYCBhbmQgYGlwNl90bmxfY2hhbmdlbGlua2AgYXJlIGRlY2xhcmVkIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgLiBIbW0sIHRoYXQncyBhIGNvbW1vbiBwYXR0ZXJuIOKAkyBpbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBhcyBoYW5kbGVycy4gQnV0IHdhaXQuLi4gYGlwX3R1bm5lbF9uZXdsaW5rYCAqaXMqIGV4cG9ydGVkIGFzIHdlbGwhIFRoYXQgbWVhbnMgd2UgY2FuIGNyZWF0ZSBJUCB0dW5uZWxzIGdlbmVyYWxseSwgbm90IGp1c3QgSVB2Ni4gQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gaGVyZS4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGlzIGxpa2VseSB0byBiZSBgc2l0LmNgLiBMZXQncyBkaWcgaW50byB0aGF0IHNvdXJjZSBmaWxlIGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6NTEuNjUyNTMyMTgzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl90dW5uZWxfYmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMDk0LVxcbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvc2l0LmMtMTA5Ni17XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTExNTYtXFx0XFx0dC1cXHUwMDNlZndtYXJrID0gZndtYXJrO1xcbm5ldC9pcHY2L3NpdC5jOjExNTc6XFx0XFx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KHQtXFx1MDAzZWRldik7XFxubmV0L2lwdjYvc2l0LmMtMTE1OC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNDQzPXN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0NTAtXFxubmV0L2lwdjYvc2l0LmM6MTQ1MTpcXHRpcGlwNl90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo1MS42OTY1NDk0OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNzQ4MTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQ29uY2VybmluZyB0aGUgYGlwaXA2X3R1bm5lbF9pbml0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwaXA2X3R1bm5lbF9pbml0YCBmdW5jdGlvbiwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHNvIGltbWVkaWF0ZWx5IHRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLiBGaXJzdCwgdGhpcyBmdW5jdGlvbidzIHNjb3BlIGlzIGRlZmluaXRlbHkgcmVzdHJpY3RlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gSXQncyBub3QgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBhbmQgY2FsbGVkIGV4dGVybmFsbHkgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBJdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBpdCdzIHByb2JhYmx5IGRvaW5nIHNvbWUgc2V0dXAgb3IgaW5pdGlhbGl6YXRpb24gc3BlY2lmaWMgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGUgY29kZSBpdCdzIGNvbnRhaW5lZCB3aXRoaW4uIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gZW50YWlscyBhbmQgd2hlcmUgZWxzZSB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYnV0IHRoaXMgaW5pdGlhbCBiaXQgb2YgaW5mb3JtYXRpb24gc2V0cyB0aGUgdG9uZS4gS25vd2luZyB0aGlzIGhhcyBjb250ZXh0IGlzIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjU2LjQwNDAzMzgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl90dW5uZWxfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zaXQuYz02OT1NT0RVTEVfUEFSTV9ERVNDKGxvZ19lY25fZXJyb3IsIFxcXCJMb2cgcGFja2V0cyByZWNlaXZlZCB3aXRoIGNvcnJ1cHRlZCBFQ05cXFwiKTtcXG5uZXQvaXB2Ni9zaXQuYy03MC1cXG5uZXQvaXB2Ni9zaXQuYzo3MTpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9pcHY2L3NpdC5jLTcyLXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTEzOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwNl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY2L3NpdC5jOjEzOTg6XFx0Lm5kb19pbml0XFx0PSBpcGlwNl90dW5uZWxfaW5pdCxcXG5uZXQvaXB2Ni9zaXQuYy0xMzk5LVxcdC5uZG9fdW5pbml0XFx0PSBpcGlwNl90dW5uZWxfdW5pbml0LFxcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0NDItXFxubmV0L2lwdjYvc2l0LmM6MTQ0MzpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvc2l0LmMtMTQ0NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjU2LjQ0ODA4NDEyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3MTcyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBUdW5uZWwgSW5pdGlhbGl6YXRpb24gYW5kIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHNpdF90dW5uZWxfeG1pdGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgYmVpbmcgYXNzaWduZWQgdG8gYG5kb19zdGFydF94bWl0YC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSDigJMgdGhpcyBsaWtlbHkgbWVhbnMgYHNpdF90dW5uZWxfeG1pdGAgaXMgdGhlIGFjdHVhbCB0cmFuc21pdCBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyB0dW5uZWwgdHlwZSwgcHJvYmFibHkgcmVsYXRlZCB0byBTSVQgdHVubmVscywgYW5kIGBuZG9fc3RhcnRfeG1pdGAgaXMgdGhlIGdlbmVyaWMgbmV0d29yayBkZXZpY2UgdHJhbnNtaXQgZnVuY3Rpb24gdGhlIGtlcm5lbCB1c2VzIHRvIGludm9rZSBpdC4gTWFrZXMgc2Vuc2UgZm9yIGhvdyB0aGlzIGtpbmQgb2YgZHJpdmVyIGdlbmVyYWxseSBvcGVyYXRlcy5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY3J1Y2lhbDsgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBhbmQgYGlwaXA2X3R1bm5lbF9pbml0YC4gVGhpcyBzdWdnZXN0cyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBsaWtlbHkgaGFuZGxlcyB0aGUgY29yZSBiaW5kaW5nIG9yIGFzc29jaWF0aW9uIG9mIHRoZSBJUElQNiB0dW5uZWwgd2l0aCBpdHMgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgYm90aCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMuIFRoZSBpbnRlcnBsYXkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IGhlcmUuXG5cbkZ1cnRoZXIsIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBpcGlwNl90dW5uZWxfY2hhbmdlYCBhbmQgYGlwaXA2X25ld2xpbmtgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBgaXBpcDZfdHVubmVsX2NoYW5nZWAgcHJvYmFibHkgaGFuZGxlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBleGlzdGluZyB0dW5uZWwgY29uZmlndXJhdGlvbiBhbmQgYGlwaXA2X25ld2xpbmtgIGlzIGNsZWFybHkgY2FsbGVkIHdoZW4gYSBuZXcgbGluayAobmV0d29yayBkZXZpY2UpIGlzIGNyZWF0ZWQuIENvbnNlcXVlbnRseSwgd2hlbmV2ZXIgdGhlcmUncyBhIGNoYW5nZSBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgbGluaywgdGhlIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBmdW5jdGlvbiBpcyBydW4sIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAuIFRoYXQgd291bGQgZXhwbGFpbiBob3cgbmV3IElQSVA2IHR1bm5lbHMgZ2V0IHNldCB1cCBhbmQgaG93IGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZCBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBob3cgZWFjaCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHVubmVsJ3MgSVAgYWRkcmVzcyBhbmQgcm91dGluZyB0YWJsZSBnZXRzIHNldHVwIGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiB1c2VzIG5ldGxpbmsgbWVzc2FnZXMgb3Igc2ltaWxhciBBUElzIHRvIHNldHVwIG9yIG1vZGlmeSB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjAwLjkyNTI1OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDE0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTUxND1zdGF0aWMgYm9vbCBpcGlwNl9uZXRsaW5rXzZyZF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xNTQ4LVxcbm5ldC9pcHY2L3NpdC5jOjE1NDk6c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvc2l0LmMtMTU1MC1cXHRcXHRcXHQgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE3NzE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHNpdF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTc3Ny1cXHQudmFsaWRhdGVcXHQ9IGlwaXA2X3ZhbGlkYXRlLFxcbm5ldC9pcHY2L3NpdC5jOjE3Nzg6XFx0Lm5ld2xpbmtcXHQ9IGlwaXA2X25ld2xpbmssXFxubmV0L2lwdjYvc2l0LmMtMTc3OS1cXHQuY2hhbmdlbGlua1xcdD0gaXBpcDZfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MDAuOTcwMjgwNDI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDA5NDk0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyBJUHY2IFR1bm5lbCBDcmVhdGlvbiBhbmQgTVRVIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBJUHY2IHR1bm5lbHMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIEkndmUgZ290IGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGluIG1pbmQuIE1ha2VzIHNlbnNlIOKAkyB0aGV5J3JlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgdGhvc2UgYXNwZWN0cy4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgc3BlY2lmaWNhbGx5LiBJIHJlbWVtYmVyIGBpcDZncmVfbmV3bGlua2AsIGFuZCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGl0J3Mgc3RhdGljYWxseSBkZWZpbmVkLiBUaGlzIGlzIGEgYml0IG9mIGEgY29kZSBzbWVsbC4gSXMgdGhlcmUgYSBzaW1pbGFyIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBpcDZfZ3JlLmNgPyBJdCB3b3VsZCBiZSB3ZWlyZCB0byBoYXZlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBkZWZpbmVkIHN0YXRpY2FsbHksIGVzcGVjaWFsbHkgaWYgYGlwX3R1bm5lbF9uZXdsaW5rYCBhbmQgYGlwNl90bmxfY2hhbmdlX210dWAgY2FuIGhhbmRsZSB0aGF0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYGlwNmdyZV9uZXdsaW5rYCBpcyBsaWtlIHRoYXQuIERvZXMgYGlwNl9ncmUuY2AgaGF2ZSBhbm90aGVyIGZ1bmN0aW9uIHdpdGggc2ltaWxhciBwdXJwb3NlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjA1LjI3MTIzMjAwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDY2MzMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MDUuNDcyNzA1MjE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDgyNDQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5IbW0sIG5vIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgaXA2X2dyZS5jYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEknZCBleHBlY3Qgc29tZSwgZXZlbiBmb3IgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eS4gSXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIElQdjYgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBBbHJpZ2h0LCBsZXQncyBwaXZvdCB0byBgaXA2X3R1bm5lbC5jYC4gUGVyaGFwcyB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgdGhlIGVudHJ5IHBvaW50cywgcmVzaWRlIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGZpbGVzIGFuZCBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IElQdjYgdHVubmVscyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIHRvcm4gZG93bi4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBgaXA2X3R1bm5lbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNTowOC44ODA5NTE0NzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTc0Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0zOTY9X191MTYgaXA2X3RubF9wYXJzZV90bHZfZW5jX2xpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpyYXcpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNDYzLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NDY0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9wYXJzZV90bHZfZW5jX2xpbSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTQ2NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz03NTI9X191MzIgaXA2X3RubF9nZXRfY2FwKHN0cnVjdCBpcDZfdG5sICp0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3My19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjc3NDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2NhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz03Nzc9aW50IGlwNl90bmxfcmN2X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy04MDItfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4MDM6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9yY3ZfY3RsKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODA0LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTkwMj1pbnQgaXA2X3RubF9yY3Yoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtOTE3LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6OTE4OkVYUE9SVF9TWU1CT0woaXA2X3RubF9yY3YpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTAzOT1pbnQgaXA2X3RubF94bWl0X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMDc0LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTA3NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX3htaXRfY3RsKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ni1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMDk3PWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEzMDEtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMzAyOkVYUE9SVF9TWU1CT0woaXA2X3RubF94bWl0KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMy1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzYxPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4My19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzg1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzg2PWludCBpcDZfdG5sX2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkxLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc5MjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2lmbGluayk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3OTMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTQ9aW50IGlwNl90bmxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODAzLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDUtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4MDY9aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODIxLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgyMjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4MjQ9aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg0NC19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NDU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9lbmNhcF9zZXR1cCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDYtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjIzOD1zdHJ1Y3QgbmV0ICppcDZfdG5sX2dldF9saW5rX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNDMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjQ0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9nZXRfbGlua19uZXQpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjQ1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNTowOC45MjU5MzE5MTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTM3NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTVRVIFVwZGF0ZXMgYW5kIFR1bm5lbGluZyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGlzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZC4gVGhhdCdzIHRoZSBmdW5jdGlvbiBJIG5lZWQuIE5vdywgYSBxdWljayBjaGVjay4uLiB0aGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBteSBpbnRlbmRlZCB1c2UsIHNvIHRoYXQncyBvbmUgbGVzcyBoZWFkYWNoZS4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gdGhpbmtpbmcgb2YgZXZlcnl0aGluZyBhbmQgbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLi4uIHdoYXQgYWJvdXQgdGhlIFNJVCBkcml2ZXI/IElzIHRoZXJlIGFueXRoaW5nIGluIGBzaXQuY2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgTVRVLXJlbGF0ZWQgYWRqdXN0bWVudHMgb3IgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIG1pbmRmdWwgb2YgdGhlcmUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHR1bm5lbGluZyBpbnRlcmZhY2UncyBiZWhhdmlvdXI/IEl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgY2hlY2sgZm9yIGNvbW1vbiBpc3N1ZXMuIEJldHRlciB0byBjYXRjaCBwb3RlbnRpYWwgY29uZmxpY3RzIG5vdyB0aGFuIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjEzLjM3MTMxMjk5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczOTk0MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjEzLjQxODcyMDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MTI5NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEZvY3VzZWQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2l0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlcmUgYXJlbid0IGFueSBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0IG5hcnJvd3MgZG93biBteSBzZWFyY2ggY29uc2lkZXJhYmx5LiBTaW5jZSB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlIHByb2JsZW0gZG9tYWluIGFyZSBpbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBJIHRoaW5rIEknbGwgc3RhcnQgd2l0aCB0aG9zZS4gVGhleSdyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24sIGdpdmVuIHRoZSBjb250ZXh0LiBCdXQgYmVmb3JlIEkgemVybyBpbiwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2s6IEknbGwgc2NhbiBgaXBfdHVubmVsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgcmlnaHQ/IEp1c3QgYSBxdWljayBsb29rIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc21hcnQgbW92ZSByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MTguNTYwMDE3MjU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjIxNTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jPTgxPXN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9sb29rdXAoc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE2OS19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTcwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9sb29rdXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE3MS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM2Mz12b2lkIGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzc0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNzU6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfbWRfdWRwX2VuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzYtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9Mzc3PWludCBpcF90dW5uZWxfcmN2KHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDU3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz00NTk9aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzAtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDcxPWludCBpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0ODc6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTQ4OT1pbnQgaXBfdHVubmVsX2VuY2FwX3NldHVwKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MDktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjUxMDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTUxMS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NjYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjY2NzpFWFBPUlRfU1lNQk9MX0dQTChpcF9tZF90dW5uZWxfeG1pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjY4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY2OT12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg2MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtODYxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODk3PWludCBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtOTk3LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2N0bCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtOTk5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwMDA9Ym9vbCBpcF90dW5uZWxfcGFybV9mcm9tX3VzZXIoc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKmtwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTAxNy19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTAxODpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV9mcm9tX3VzZXIpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMTktXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTAyMD1ib29sIGlwX3R1bm5lbF9wYXJtX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRhdGEsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICprcClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMzktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0MS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDQyPWludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBfX2lwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1LCBib29sIHN0cmljdClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNzgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNzk6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfY2hhbmdlX210dSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA4MC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDgxPWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODQtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwODU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2NoYW5nZV9tdHUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODYtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDk1PXZvaWQgaXBfdHVubmVsX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExMDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGxpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDgtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEwOT1zdHJ1Y3QgbmV0ICppcF90dW5uZWxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTE0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTE1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2dldF9saW5rX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTExNi1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTE3PWludCBpcF90dW5uZWxfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTEyMi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTEyMzpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9nZXRfaWZsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTI0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExMjU9aW50IGlwX3R1bm5lbF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBpcF90bmxfbmV0X2lkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE2My19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE2NDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfaW5pdF9uZXQpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNjUtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE2Nj12b2lkIGlwX3R1bm5lbF9kZWxldGVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Mi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTk1PWludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZXdsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDk9aW50IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjg1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9jaGFuZ2VsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg2LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyODc9aW50IF9faXBfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzMTUtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMTY6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfaW5pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMxNy1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMzE4PXZvaWQgaXBfdHVubmVsX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMzMC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTMzMTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfdW5pbml0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMyLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTMzND12b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMzOC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTMzOTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2V0dXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjE4LjYxMjIzNjgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc5OTk3NjcwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBUdW5uZWwgSW50ZXJmYWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdHVubmVsIGludGVyZmFjZXMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIGBpcF90dW5uZWxfY2hhbmdlX210dWAsIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gSSBhbHNvIG5vdGVkIHRoZSBjYWxscyB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCBmcm9tIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBhcHBlYXJzIGluIHRoZSBjYWxsIGNoYWluIGBpcDZfdG5sX2NoYW5nZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBpcDZfdG5sX2NoYW5nZWxpbmtgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVzdGFibGlzaGluZyBNVFUgb24gSVB2NiB0dW5uZWxzLiBBbHNvLCBJIHNhdyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwaXA2X2NoYW5nZWxpbmtgIGFuZCBgaXBpcDZfbmV3bGlua2AuIEFuZCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmdyZV9uZXdsaW5rYCBhbmQgYGlwNmdyZV9jaGFuZ2VsaW5rYC5cblxuSG93ZXZlciwgYGlwNl90bmxfY2hhbmdlX210dWAgZG9lc24ndCBzZWVtIHRvIGludm9rZSBgaXA2X3RubF9saW5rX2NvbmZpZ2AgZGlyZWN0bHk7IGl0IGp1c3QgaGFuZGxlcyB0aGUgTVRVIGNoYW5nZS4gSSBub3cgbmVlZCB0byBjb25zaWRlciB0aGUgc3RhdGljIG5hdHVyZSBvZiBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFwic3RhdGljIGJ1dCBhc3NpZ25lZCB0byBhIHN0cnVjdFwiIHZlcnN1cyB0cnVseSBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuXG5cbmBpcDZfdG5sX2NoYW5nZWxpbmtgIGFuZCBgaXA2X3RubF9uZXdsaW5rYCBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gYGlwNl9saW5rX29wc2AuIFRoaXMgbWVhbnMgdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGVudHJ5IHBvaW50cy4gTGlrZXdpc2UsIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZncmVfY2hhbmdlbGlua2AgYXJlIHN0YXRpYyBidXQgbGlua2VkIHRvIGBpcDZncmVfbGlua19vcHNgIGFzIGFyZSBgaXBpcDZfbmV3bGlua2AgYW5kIGBpcGlwNl9jaGFuZ2VsaW5rYC5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGlzIHJlYXNvbmluZywgdGhlIHVwZGF0ZWQgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgaXBfdHVubmVsX25ld2xpbmtgXG4qICAgYGlwX3R1bm5lbF9jaGFuZ2VsaW5rYFxuKiAgIGBpcDZncmVfbmV3bGlua2BcbiogICBgaXA2Z3JlX2NoYW5nZWxpbmtgXG4qICAgYGlwNl90bmxfbmV3bGlua2BcbiogICBgaXA2X3RubF9jaGFuZ2VsaW5rYFxuKiAgIGBpcGlwNl9uZXdsaW5rYFxuKiAgIGBpcGlwNl9jaGFuZ2VsaW5rYFxuXG5JJ2xsIHZlcmlmeSB0aGF0IGBpcDZncmVfbmV3bGlua2AgaXMgaW5kZWVkIHN0YXRpYywgYnV0IG15IGFzc2Vzc21lbnQgbm93IGxlYW5zIHRvd2FyZCB1c2luZyB0aGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHNpbmNlIHRoZXkgYXJlIGV4cG9ydGVkIGFuZCBhcmUgbm90IHN0YXRpYy5cblRoZSBzdGF0aWMgbmF0dXJlIG9mIGBpcDZfdG5sX2NoYW5nZWAgZWFybGllciBpcyBhIHJlZCBoZXJyaW5nLiBJdCdzIHRoZSBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozODo0Ni42MTIwMDg5NTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYwOTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDUtICogICBAdDogdHVubmVsIHRvIGJlIGNoYW5nZWRcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTQ5OiAqICAgaXA2X3RubF9jaGFuZ2UoKSB1cGRhdGVzIHRoZSB0dW5uZWwgcGFyYW1ldGVyc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTUwLSAqKi9cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUyPXN0YXRpYyB2b2lkXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NTM6aXA2X3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU2OD1zdGF0aWMgdm9pZCBpcDZfdG5sX3VwZGF0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzQtXFx0c3luY2hyb25pemVfbmV0KCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XFx0aXA2X3RubF9jaGFuZ2UodCwgcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzYtXFx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2NTY9aXA2X3RubF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzUxLS8qKlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzUyOiAqIGlwNl90bmxfY2hhbmdlX210dSAtIGNoYW5nZSBtdHUgbWFudWFsbHkgZm9yIHR1bm5lbCBkZXZpY2VcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzYwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwNl90bmxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNjU9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHRiW0lGTEFfTVRVXSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMTpcXHRcXHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMi1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTA2OnN0YXRpYyBpbnQgaXA2X3RubF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0Lm5ld2xpbmtcXHQ9IGlwNl90bmxfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcXHQuY2hhbmdlbGlua1xcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVxcdC5kZWxsaW5rXFx0PSBpcDZfdG5sX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM4OjQ2LjY5MjU3NDAwN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTg4Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgaXA2X3RubF9jaGFuZ2VgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyBpdCdzIGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCwgbm90IGlubGluZWQsIGFuZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoLiBJJ2xsIGZvY3VzIG15IGFuYWx5c2lzIG9uIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLCBhbmQgdGhlbiBjb25zaWRlciBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYCBhcyBsaWtlbHkgYXJlYXMgb2YgaW1wYWN0IGFzIHdlbGwsIGtlZXBpbmcgdGhlIGNoYW5nZWxpbmsgZnVuY3Rpb25zIGluIG1pbmQsIHRvby4gVGhlIGZhY3QgdGhleSdyZSBhbGwgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgIGNvbmZpcm1zIHRoZWlyIHV0aWxpdHkgYXMgZW50cnkgcG9pbnRzIGZvciBuZXRsaW5rIGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCBtZSBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LlxuXG4qKkNvbmZpZ3M6KiogVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5OlxuXG4qICAgYE5FVF9JUF9UVU5ORUxgXG4qICAgYElQVjZfR1JFYFxuKiAgIGBJUFY2X1RVTk5FTGBcbiogICBgSVBWNl9TSVRgXG5cbioqRm9jdXMgU3ltYm9sczoqKiBNeSBsaXN0IG9mIGVudHJ5IHBvaW50cyBpczpcblxuKiAgIGBpcF90dW5uZWxfbmV3bGlua2BcbiogICBgaXBfdHVubmVsX2NoYW5nZWxpbmtgXG4qICAgYGlwNmdyZV9uZXdsaW5rYFxuKiAgIGBpcDZncmVfY2hhbmdlbGlua2BcbiogICBgaXA2X3RubF9uZXdsaW5rYFxuKiAgIGBpcDZfdG5sX2NoYW5nZWxpbmtgXG4qICAgYGlwaXA2X25ld2xpbmtgXG4qICAgYGlwaXA2X2NoYW5nZWxpbmtgXG5cbioqUmVhc29uaW5nOioqIFRoZSBjcnV4IG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCwgd2hpY2ggYWltcyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3Mgd2l0aGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbnMgZm9yIGEgcmFuZ2Ugb2YgSVAgdHVubmVscyDigJMgdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgbG9naWMgaGVyZSBpcyBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uLCBhbmQgYW55IG1vZGlmaWNhdGlvbnMgd2lsbCBuZWNlc3NhcmlseSBiZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGNhbGxzIGZvciBpbnRlcmZhY2UgY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFuZCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQsIHdoaWxlIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIGluIHR1bm5lbCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjYsIk91dHB1dFRva2VucyI6MjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE2LjkyNDQ2NDMyNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTY1MjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9uZXdsaW5rXCIsXG4gICAgXCJpcF90dW5uZWxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZfdG5sX25ld2xpbmtcIixcbiAgICBcImlwNl90bmxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXBpcDZfbmV3bGlua1wiLFxuICAgIFwiaXBpcDZfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9uZXdsaW5rXCIsXG4gICAgXCJpcF90dW5uZWxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZfdG5sX25ld2xpbmtcIixcbiAgICBcImlwNl90bmxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXBpcDZfbmV3bGlua1wiLFxuICAgIFwiaXBpcDZfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE3LjA4NDEyNTgzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NjY4NjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE3LjA4NDc3MjU3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzQ2MDM1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTExNDJlMjYyZjk1ODVhNDExODhjZjIyOTdmN2VkOGUzZmFiM2NkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjMzOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCArNjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4ge1xuIFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcbiBcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4rXHRyZXR1cm4gaGVhZHJvb207XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3tcbitcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgUkVBRF9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiArIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDEzICsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYpIHtcbi1cdFx0XHR1bnNpZ25lZCBzaG9ydCBkc3RfbGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0XHRcdCB0X2hsZW47XG4rXHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuIFxuLVx0XHRcdGlmICh0LVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47XG4rXHRcdFx0aGVhZHJvb20gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRfaGxlbjtcbitcdFx0XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGhlYWRyb29tO1xuIFxuIFx0XHRcdGlmIChzZXRfbXR1KSB7XG4gXHRcdFx0XHRpbnQgbXR1ID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUgLSB0X2hsZW47XG5AQCAtMTE3MSw4ICsxMTY5LDggQEAgc3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXG4gXG4gXHR0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgKyB0X2hsZW47XG4rXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzIFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQNkdSRSlcbitcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0X2hsZW47XG4gXHRlbHNlXG4gXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE1MjIsOCArMTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuIFx0XHRcdHRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodC1cdTAwM2VuZXQsIHAtXHUwMDNlbGluayk7XG4gXG4gXHRcdGlmICh0ZGV2KSB7XG4tXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICsgdF9obGVuO1xuK1x0XHRcdHVuc2lnbmVkIGludCBoZWFkcm9vbTtcbitcbitcdFx0XHRoZWFkcm9vbSA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4rXHRcdFx0aGVhZHJvb20gKz0gdF9obGVuO1xuK1x0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xuIFx0XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcbiBcbiBcdFx0XHRtdHUgPSBtdHUgLSB0X2hsZW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTExMzEsNyArMTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4gXHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xuIFx0fVxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozOToxNy4wODQ3NzQyNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0NTk5NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVAgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBgcHNrYl9leHBhbmRfaGVhZGAgZnVuY3Rpb24sIGFuZCBieSBleHRlbnNpb24gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAsIGFyZSB2dWxuZXJhYmxlIHRvIG92ZXJmbG93aW5nIGhlYWRlciBvZmZzZXRzIHdoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGhlYWRyb29tIHZhbHVlcywgYXMgdXNlZCBpbiB2YXJpb3VzIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMsIG5hbWVseSBgaXBfdHVubmVsLmNgLCBgaXA2X2dyZS5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBgc2l0LmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHByZXN1bWFibHkgdG8gbWFrZSBpdCBzYWZlLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgYXJpdGhtZXRpYyBvdmVyZmxvdyBkdXJpbmcgdGhlIGhlYWRlciBvZmZzZXQgY2FsY3VsYXRpb25zLiBUaGlzIG92ZXJmbG93IGlzIGNhdXNlZCBieSB0aGUgbGFyZ2UgaGVhZHJvb20gdmFsdWUuIFRoZSBwYXRjaCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXRzIGdvYWwgaXMganVzdCB0byBsaW1pdCB0aGUgaGVhZHJvb20gdG8gYXZvaWQgdGhpcyBvdmVyZmxvdy5cblxuVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3N1bXB0aW9uOiBpdCdzIGEgc2ltcGxlIGJvdW5kcyBjaGVjayB0byBlbnN1cmUgdGhlIGBoZWFkcm9vbWAgdmFsdWUgZG9lc24ndCBleGNlZWQgYSBwcmVkZWZpbmVkIG1heGltdW0uIFRoZSBleGlzdGluZyBmdW5jdGlvbiwgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gLCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJldHVybiB0aGUgYWRqdXN0ZWQgaGVhZHJvb20gdmFsdWUuXG5cblNpbmNlIHRoZSBwcm9ibGVtIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhcml0aG1ldGljIG92ZXJmbG93LCBhIHRvb2wgbGlrZSBLQVNBTiBpcyB0aGUgbW9zdCByZWxldmFudCBhcHByb2FjaCBmb3IgZGV0ZWN0aW5nIGFuZCBwaW5wb2ludGluZyBzdWNoIGlzc3Vlcy4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhhdCdzIG5vdCB0aGUgY29uY2VybiBoZXJlLiBUaGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGEgbmV3IHdheSB0byBpbml0aWFsaXplIG1lbW9yeTsgaXQncyBhIGJvdW5kcyBjaGVjay4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBzZXRzIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgaW50ZWdlciBvdmVyZmxvdyB0aGF0IGxlYWRzIHRvIG91dCBvZiBib3VuZHMgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjI1LjgzMDc3MzQzOVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBib3VuZHMgY2hlY2tpbmcgZm9yIGBoZWFkcm9vbWAgaW4gdmFyaW91cyBJUCB0dW5uZWwgaW1wbGVtZW50YXRpb25zIChJUHY0LCBJUHY2IEdSRSwgU0lULCBldGMuKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAgd2hlbiBgcHNrYl9leHBhbmRfaGVhZCgpYCBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGlzc3VlcyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 18:14:54 +0000 UTC FinishedAt: 2026-08-12 18:39:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "IPV6_GRE", "IPV6_TUNNEL", "IPV6_SIT" ], "series_id": "069903d8-25f3-4cbf-9677-df0a5f350fe2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_newlink", "ip_tunnel_changelink", "ip6gre_newlink", "ip6gre_changelink", "ip6_tnl_newlink", "ip6_tnl_changelink", "ipip6_newlink", "ipip6_changelink" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7SVBWNl9TSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcF90dW5uZWxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZncmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxMTQyZTI2MmY5NTg1YTQxMTg4Y2YyMjk3ZjdlZDhlM2ZhYjNjZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODozMzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTYyOSw4ICYjNDM7NjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxuIHtcbiBcdC8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkXG4gXHQgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS5cbkBAIC02NDAsNiAmIzQzOzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBtYXhfYWxsb3dlZClcbiBcdFx0aGVhZHJvb20gPSBtYXhfYWxsb3dlZDtcbiBcbiYjNDM7XHRyZXR1cm4gaGVhZHJvb207XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiYjNDM7e1xuJiM0MztcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbiYjNDM7XG4gXHRpZiAoaGVhZHJvb20gXHUwMDNlIFJFQURfT05DRShkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tLCBoZWFkcm9vbSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjViMWYxODA0ODVkNDIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbkBAIC0zMTcsNyAmIzQzOzMxNyw3IEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG4gXHR9XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47XG4mIzQzO1x0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7XG4gXHRtdHUgLT0gdF9obGVuICYjNDM7IChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDEzICYjNDM7MTEzNywxMSBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSxcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2KSB7XG4tXHRcdFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7XG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuIFxuLVx0XHRcdGlmICh0LVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47XG4mIzQzO1x0XHRcdGhlYWRyb29tID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdF9obGVuO1xuJiM0MztcdFx0XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTtcbiBcbiBcdFx0XHRpZiAoc2V0X210dSkge1xuIFx0XHRcdFx0aW50IG10dSA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1IC0gdF9obGVuO1xuQEAgLTExNzEsOCAmIzQzOzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcbiBcbiBcdHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuO1xuJiM0MztcdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVA2R1JFKVxuJiM0MztcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0X2hsZW47XG4gXHRlbHNlXG4gXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiAmIzQzOyB0X2hsZW47XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4Li4yYzk0MWFjYjA4MWZhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xNTIyLDggJiM0MzsxNTIyLDExIEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0Mztcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7IHRfaGxlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuJiM0MztcbiYjNDM7XHRcdFx0aGVhZHJvb20gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiYjNDM7XHRcdFx0aGVhZHJvb20gJiM0Mzs9IHRfaGxlbjtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4gXHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiBcdH1cbi1cdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjtcbiYjNDM7XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiAmIzQzOyBobGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBfdHVubmVsX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxMTQyZTI2MmY5NTg1YTQxMTg4Y2YyMjk3ZjdlZDhlM2ZhYjNjZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODozMzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC02MjksOCAmIzQzOzYyOSw3IEBAIHN0cnVjdCBtZXRhZGF0YV9kc3QgKmlwdHVubmVsX21ldGFkYXRhX3JlcGx5KHN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kLAogaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsCiAJCQkgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiB7CiAJLyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWQKIAkgKiB3aWxsIG92ZXJmbG93IGhlYWRlciBvZmZzZXRzIGluIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKS4KQEAgLTY0MCw2ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGhlYWRyb29tICZndDsgbWF4X2FsbG93ZWQpCiAJCWhlYWRyb29tID0gbWF4X2FsbG93ZWQ7CiAKJiM0MzsJcmV0dXJuIGhlYWRyb29tOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCiYjNDM7ewomIzQzOwloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CiAJaWYgKGhlYWRyb29tICZndDsgUkVBRF9PTkNFKGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tKSkKIAkJV1JJVEVfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzE3LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltdHUgPSBtaW4odGRldi0mZ3Q7bXR1LCBJUF9NQVhfTVRVKTsKIAl9CiAKLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiAJbXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIDogMCk7CiAKIAlpZiAobXR1ICZsdDsgSVBWNF9NSU5fTVRVKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjIwMGQwYmExYTQwZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTExMzcsMTMgJiM0MzsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LAogCQkJcmV0dXJuOwogCiAJCWlmIChydC0mZ3Q7ZHN0LmRldikgewotCQkJdW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LSZndDtkc3QuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKLQkJCQkJCSB0X2hsZW47CiYjNDM7CQkJdW5zaWduZWQgaW50IGhlYWRyb29tOwogCi0JCQlpZiAodC0mZ3Q7ZGV2LSZndDtoZWFkZXJfb3BzKQotCQkJCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjsKLQkJCWVsc2UKLQkJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47CiYjNDM7CQkJaGVhZHJvb20gPSBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRfaGxlbjsKJiM0MzsJCQloZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiYjNDM7CQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTsKIAogCQkJaWYgKHNldF9tdHUpIHsKIAkJCQlpbnQgbXR1ID0gcnQtJmd0O2RzdC5kZXYtJmd0O210dSAtIHRfaGxlbjsKQEAgLTExNzEsOCAmIzQzOzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbCkKIAogCXRfaGxlbiA9IHR1bm5lbC0mZ3Q7aGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCi0JaWYgKHR1bm5lbC0mZ3Q7ZGV2LSZndDtoZWFkZXJfb3BzKQotCQl0dW5uZWwtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gTExfTUFYX0hFQURFUiAmIzQzOyB0X2hsZW47CiYjNDM7CWlmICh0dW5uZWwtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcyAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUDZHUkUpCiYjNDM7CQl0dW5uZWwtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gdF9obGVuOwogCWVsc2UKIAkJdHVubmVsLSZndDtkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwOC4uMmM5NDFhY2IwODFmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTUyMiw4ICYjNDM7MTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KQogCQkJdGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LSZndDtuZXQsIHAtJmd0O2xpbmspOwogCiAJCWlmICh0ZGV2KSB7Ci0JCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOwotCQkJCXRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSAmIzQzOyB0X2hsZW47CiYjNDM7CQkJdW5zaWduZWQgaW50IGhlYWRyb29tOwomIzQzOwomIzQzOwkJCWhlYWRyb29tID0gdGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtJmd0O25lZWRlZF9oZWFkcm9vbTsKJiM0MzsJCQloZWFkcm9vbSAmIzQzOz0gdF9obGVuOwomIzQzOwkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTsKIAkJCW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi0mZ3Q7bXR1LCBJUDZfTUFYX01UVSk7CiAKIAkJCW10dSA9IG10dSAtIHRfaGxlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2l0LmMKQEAgLTExMzEsNyAmIzQzOzExMzEsNyBAQCBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJV1JJVEVfT05DRShkZXYtJmd0O210dSwgbXR1KTsKIAkJaGxlbiA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb207CiAJfQotCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gdF9obGVuICYjNDM7IGhsZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiAmIzQzOyBobGVuKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsICp0LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBuZXR3b3JraW5nIGZpbGVzOiBgaXBfdHVubmVscy5oYCwgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgdG8gaW50cm9kdWNlIGFuZCB1c2UgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIGVmZmVjdGl2ZWx5IHB1dHRpbmcgYSBjYXAgb24gdGhlIGhlYWRyb29tIHVzZWQgYnkgSVAgdHVubmVscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBBbnkgY2hhbmdlIGF0IHRoaXMgbGV2ZWwgd2FycmFudHMgdGhvcm91Z2ggdGVzdGluZy4KCk5vdywgbGV0JiMzOTtzIHNlZSwgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBgaXBfdHVubmVsLmNgIHdpbGwgcmVxdWlyZSBgQ09ORklHX05FVF9JUElQYCBhbmQgYENPTkZJR19ORVRfSVBHUkVgLCBhbmQgc2luY2Ugd2UmIzM5O3JlIGFsc28gZGVhbGluZyB3aXRoIElQdjYsIGBDT05GSUdfSVBWNl9TSVRgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gYW5kIGdhdGhlciBhbGwgdGhlIG5lY2Vzc2FyeSBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG5uZXQvaXB2NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBpcF90dW5uZWwuYyBhbmQgaXRzIENvcmUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHBpZWNlIGhlcmUsIHRoZSBhYnNvbHV0ZSBsaW5jaHBpbiwgaXMgYENPTkZJR19ORVRfSVBfVFVOTkVMYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBgaXBfdHVubmVsLmNgLiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlrZWx5IGNvbnRpbmdlbnQgb24gdGhhdC4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBlbmFibGVyLiBXaXRob3V0IGl0LCB0aGUgd2hvbGUgdGhpbmcmIzM5O3MgbGlrZWx5IGRpc2FibGVkLCBvciBhdCBsZWFzdCBvcGVyYXRpbmcgaW4gc29tZSBkZWdyYWRlZCBtb2RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgZm9yZWZyb250IGFzIEkgaW52ZXN0aWdhdGUgaXRzIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiB0aGUgdHVubmVscyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9ncmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgJiM0Mzs9IGZvdTYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSVB2NiBHUkUgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19JUFY2X0dSRWAgYXNzb2NpYXRlZCB3aXRoIGBpcDZfZ3JlLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gKEdSRSkgdHVubmVscyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGhlcmU6IHRoZSBhYmlsaXR5IHRvIGVuY2Fwc3VsYXRlIElQdjYgcGFja2V0cyB3aXRoaW4gYW5vdGhlciBJUHY2IG9yIElQdjQgaGVhZGVyIGZvciB0cmFuc3BvcnQgYWNyb3NzIG5ldHdvcmtzIHRoYXQgbWlnaHQgbm90IG5hdGl2ZWx5IHN1cHBvcnQgSVB2Niwgb3IgZm9yIGNyZWF0aW5nIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3JrcywgdGhhdCBzb3J0IG9mIHRoaW5nLiAKCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uLiBJdCB3b3VsZCBiZSB3b3J0aCBhIGRlZXBlciBkaXZlLiBJcyB0aGlzIGEgZnVsbCBpbXBsZW1lbnRhdGlvbiB0aGF0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGtleWluZywgc2VxdWVuY2UgbnVtYmVycywgYW5kIGNoZWNrc3Vtcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGRvdWJsZSBlbmNhcHN1bGF0aW9uPyBXaGF0IGFib3V0IGZyYWdtZW50YXRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgaXRzZWxmPyBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSB0aGUgSVB2NiByb3V0aW5nIHRhYmxlcyBhbmQgdGhlIGhhbmRsaW5nIG9mIE1UVSBkaXNjb3ZlcnkuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGlzIHNldHRpbmcgaXMgZGVwZW5kZW50IG9uIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCBzdWNoIGFzIElQc2VjLCByZWx5IG9uIGl0LgoKRnJvbSBhIHByYWN0aWNhbCBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zLiBJcyB0aGlzIG1vZHVsZSBjb21waWxlZCBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gR1JFIHR1bm5lbHMsIHN1Y2ggYXMgdGhlIHJpc2sgb2YgdHVubmVsaW5nIG1hbGljaW91cyB0cmFmZmljPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBrZXJuZWwgbW9kdWxlIG9uIHN5c3RlbSByZXNvdXJjZSB1c2FnZT8gT3ZlcmFsbCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyB0byBkZXRlcm1pbmUgaXRzIHByYWN0aWNhbCBzdWl0YWJpbGl0eSwgYW5kIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgdGhlIGxhdGVzdCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IGFueSBhbWJpZ3VpdGllcyBvciBjaGFuZ2VzIGluIGJlaGF2aW91ciBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90dW5uZWxcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9NDE9b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtNDMtb2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipJUHY2IFR1bm5lbHM6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGlwNl90dW5uZWwuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHJlcXVpcmVtZW50LCByaWdodD8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBmZWF0dXJlIGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgd2UgYXJlIGdvaW5nIHRvIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggdGhlIGNvZGUuIEl0IGlzIGFuIGltbWVkaWF0ZSBmbGFnIHRvIGNvbmZpcm0uIEkgd291bGQgYXNzdW1lIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHJlbHkgb24gdGhpcyBmZWF0dXJlLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGJlZm9yZSBzcGVuZGluZyBtb3JlIHRpbWUuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gTWFrZXMgc2Vuc2UgdG8gYmUgY2VydGFpbiwgYW5kIG5vdCB3YXN0ZSB0aW1lIHRyeWluZyB0byBkZWJ1ZyBpZiBpdCYjMzk7cyBkaXNhYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2l0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQyLW9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFNJVCBDb25maWd1cmF0aW9uIGZvciBLZXJuZWwgTW9kdWxlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1NJVGAgd2l0aGluIGBzaXQuY2AuIFRoZSBzeXN0ZW0gY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhbHNvIGluY2x1ZGUgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYElQVjZfU0lUYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZnVuY3Rpb25zIHRoYXQgc2VlbSB0byBiZSByZWxldmFudDogYGlwX3R1bm5lbF9iaW5kX2RldmAgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCwgYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIGFuZCBgaXA2Z3JlX2NhbGNfaGxlbmAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AsIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCwgYW5kIGZpbmFsbHksIGBpcGlwNl90dW5uZWxfYmluZF9kZXZgIGluIGBuZXQvaXB2Ni9zaXQuY2AuCgpOb3csIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTZWVpbmcgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqX19pcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yNzktXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoyODA6c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDItXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6XHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cdGVyciA9IGRldl9zZXRfbXR1KGRldiwgbXR1KTtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz04NjI9c3RhdGljIHZvaWQgaXBfdHVubmVsX3VwZGF0ZShzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cdFx0dC1cdTAwM2Vmd21hcmsgPSBmd21hcms7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo4ODk6XHRcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtODkwLVx0XHRpZiAoc2V0X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTI1PWludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaXBfdG5sX25ldF9pZCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTU1LVx0XHRpdG4tXHUwMDNlZmJfdHVubmVsX2Rldi1cdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcdFx0aXRuLVx1MDAzZWZiX3R1bm5lbF9kZXYtXHUwMDNlbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGl0bi1cdTAwM2VmYl90dW5uZWxfZGV2KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXHRcdGlwX3R1bm5lbF9hZGQoaXRuLCBuZXRkZXZfcHJpdihpdG4tXHUwMDNlZmJfdHVubmVsX2RldikpO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExOTU9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIyNTpcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNi1cdGlmICh0YltJRkxBX01UVV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IExpbnV4IGtlcm5lbCBjb2RlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgSVAgVHVubmVsIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgcm91dGluZXMgZm9yIGhhbmRsaW5nIElQIHR1bm5lbHMgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCBmb3VyIGtleSBmdW5jdGlvbnM6IGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfaW5pdF9uZXRgLCBgaXBfdHVubmVsX3VwZGF0ZWAsIGFuZCBgaXBfdHVubmVsX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGxpa2VseSByZXByZXNlbnQgdGhlIGxpZmVjeWNsZSBvZiBhbiBJUCB0dW5uZWwgaW50ZXJmYWNlLgoKYGlwX3R1bm5lbF9uZXdsaW5rYCBiZWluZyBleHBsaWNpdGx5IGV4cG9ydGVkIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNyZWF0aW9uIG9mIHRoZXNlIHR1bm5lbCBkZXZpY2VzIGlzIGEgZnVuY3Rpb24geW91IGNhbiBjYWxsIGZyb20gdGhlIHVzZXItc3BhY2UsIHdoaWNoIEkgZmluZCBpcyBjcnVjaWFsIGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYnJpbmdpbmcgdXAgYSB0dW5uZWwgaW50ZXJmYWNlLgoKTm93LCBgaXBfdHVubmVsX2luaXRfbmV0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIGNvbnRleHQgZm9yIElQIHR1bm5lbHMuIEkgd291bGQgZ3Vlc3MgdGhpcyBoYXBwZW5zIGR1cmluZyBzeXN0ZW0gc3RhcnR1cCBvciB3aGVuIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBmb3IgdGhlc2UgdHVubmVscyB0byBmdW5jdGlvbiBjb3JyZWN0bHkgd2l0aGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4KCmBpcF90dW5uZWxfdXBkYXRlYCBsaWtlbHkgaGFuZGxlcyBtb2RpZmljYXRpb25zIHRvIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbiBhZnRlciBpdCYjMzk7cyBiZWVuIGNyZWF0ZWQuIFRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzLCB0aGUga2V5LCBvciB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIGNoYW5nZXMgdG8gYmUgYXBwbGllZCBkeW5hbWljYWxseSB0byB0aGUgcnVubmluZyB0dW5uZWwuCgpGaW5hbGx5LCBgaXBfdHVubmVsX2NyZWF0ZWAgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGlwX3R1bm5lbF9uZXdsaW5rYC4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIHR1bm5lbCBkZXZpY2UsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBJJiMzOTtkIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIGFuZCByZWdpc3RlcmluZyB0aGUgdHVubmVsIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEluIGVzc2VuY2UsIGl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIHByb2Nlc3MuCgpJJiMzOTtkIGV4cGVjdCB0aGVzZSBmdW5jdGlvbnMgdG8gaW50ZXJhY3QgY2xvc2VseSwgd2l0aCBgaXBfdHVubmVsX25ld2xpbmtgIGFjdGluZyBhcyBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSwgY2FsbGluZyBgaXBfdHVubmVsX2NyZWF0ZWAgaW50ZXJuYWxseSwgYW5kIHBlcmhhcHMgc3Vic2VxdWVudGx5IHVzaW5nIGBpcF90dW5uZWxfdXBkYXRlYCBpZiB0aGUgbmV3IGRldmljZSBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3R1bm5lbF9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5NTppbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Ni1cdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZXdsaW5rKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IEdSRSBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBgaXBfdHVubmVsX25ld2xpbmtgIGlzIGRlZmluaXRlbHkgYSBrZXkgZW50cnkgcG9pbnQgaGVyZSDigJMgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIGxpbmsgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIHNvdW5kcyBsaWtlIGl0JiMzOTtzIHdoZXJlIHRoZSByb3V0aW5nIGFzcGVjdHMgb2YgdGhlIElQdjYgR1JFIHR1bm5lbCBhcmUgY29uZmlndXJlZCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHJvdXRlcyBhcmUgc2V0IHVwIGFuZCBtYW5hZ2VkIGZvciB0aGUgdHVubmVsLiBGb2xsb3dpbmcgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGBpcDZncmVfY2FsY19obGVuYC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjYWxjdWxhdGluZyB0aGUgaGVhZGVyIGxlbmd0aCBvZiB0aGUgR1JFIHR1bm5lbCBpdHNlbGYsIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZW5jYXBzdWxhdGlvbiBvdmVyaGVhZC4gVW5kZXJzdGFuZGluZyB0aGUgaGVhZGVyIGNhbGN1bGF0aW9uIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgTVRVIGhhbmRsaW5nIGFuZCBwYWNrZXQgZnJhZ21lbnRhdGlvbi4gV2l0aCB0aGVzZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGZhY2V0IG9mIHRoZSBJUHY2IEdSRSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMS1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxubmV0L2lwdjYvaXA2X2dyZS5jLTExMjMtXHRcdFx0XHRcdCBpbnQgdF9obGVuKVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMTgwPXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgyLVx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNDg9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTAtXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUxOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBTdGF0aWMgQ29uZmlndXJhdGlvbiBvZiBUdW5uZWwgTGlua3MqKgoKQWxyaWdodCwgc28gYGlwNmdyZV90bmxfbGlua19jb25maWdgIGFuZCBgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZ2AgYXJlIGRlZmluZWQgYXMgKnN0YXRpYyogY29uc3RydWN0cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBsaWtlbHkgZWl0aGVyIGdsb2JhbCBjb25zdGFudHMsIHByZS1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgZG9lc24mIzM5O3QgY2hhbmdlIGR1cmluZyB0aGUgc3lzdGVtJiMzOTtzIHJ1bnRpbWUgaW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2Ygb3BlcmF0aW9uLiBHaXZlbiB0aGVpciBuYW1pbmcsIHRoZXkmIzM5O3JlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1JFIGFuZCBFUlNQQU4gSVB2NiB0dW5uZWwgbGlua3MsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgaG9sZCBkZWZhdWx0IHNldHRpbmdzIG9yIG1heWJlIHNvbWUga2luZCBvZiBwcmUtZGVmaW5lZCBwb2xpY3kuCgpOb3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBzdGF0aWMgY29uZmlndXJhdGlvbnMgYXJlIHV0aWxpemVkLiBTdGF0aWMgY29uZmlndXJhdGlvbiBjYW4gYmUgcG93ZXJmdWwsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGtub3cgaG93IHRoZXkgYXJlIGFjY2Vzc2VkIGFuZCB3aGVuLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGVpciB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSAqY2FsbGVkKi4gSSBuZWVkIHRvIGZpbmQgdGhlIHBsYWNlcyB3aGVyZSB0aGV5IGFyZSByZWZlcmVuY2VkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGFsbCB0aGUgY2FsbGVycy4gT25seSB0aGVuIGNhbiBJIHRydWx5IHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgdGhlaXIgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfdG5sX2xpbmtfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz03OT1zdGF0aWMgdm9pZCBpcDZncmVfdHVubmVsX2xpbmsoc3RydWN0IGlwNmdyZV9uZXQgKmlnbiwgc3RydWN0IGlwNl90bmwgKnQpO1xubmV0L2lwdjYvaXA2X2dyZS5jOjgwOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KTtcbm5ldC9pcHY2L2lwNl9ncmUuYy04MS1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTMxNT1zdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNmdyZV90dW5uZWxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMzUyLVxubmV0L2lwdjYvaXA2X2dyZS5jOjM1MzpcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsIDEpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTM1NC1cdGlwNmdyZV90dW5uZWxfbGluayhpZ24sIG50KTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTE3PXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTA4Ny1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDg4OnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxubmV0L2lwdjYvaXA2X2dyZS5jLTEwODkte1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxubmV0L2lwdjYvaXA2X2dyZS5jOjExMjI6c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTEyMy1cdFx0XHRcdFx0IGludCB0X2hsZW4pXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTExNjM9c3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTExNzktXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTgxLXtcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTgyOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2Z3JlX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTEyMDk9c3RhdGljIGludCBpcDZncmVfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjEyLVx0aXA2Z3JlX3RubF9jb3B5X3RubF9wYXJtKHQsIHApO1xubmV0L2lwdjYvaXA2X2dyZS5jOjEyMTM6XHRpcDZncmVfdG5sX2xpbmtfY29uZmlnKHQsIHNldF9tdHUpO1xubmV0L2lwdjYvaXA2X2dyZS5jLTEyMTQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk3NT1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXHRpZiAoIWVycikge1xubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTk6XHRcdGlwNmdyZV90bmxfbGlua19jb25maWcobnQsICF0YltJRkxBX01UVV0pO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXHRcdGlwNmdyZV90dW5uZWxfbGlua19tZChpZ24sIG50KTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI0OD1zdGF0aWMgdm9pZCBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjQ5LXtcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUwOlx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI1MTpcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2ZXJzcGFuX2NhbGNfaGxlbih0KSk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEluaXRpYWwgQXNzZXNzbWVudDogaXA2Z3JlX25ld2xpbmsqKgoKUmlnaHQsIGBpcDZncmVfbmV3bGlua2AuIFRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyBwb3NpdGl2ZS4gSSBzZWUgdGhhdCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgd2hhdCB0aGF0IG1lYW5zIGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgSVB2NiBHUkUgdHVubmVscy4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIG5ldyBHUkUgdHVubmVsIGxpbmtzIHNwZWNpZmljYWxseSBmb3IgSVB2NiB0cmFmZmljLiBJIGJldCB0aGlzIGlzIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24gcGFyYW1ldGVycywgYWRkcmVzc2luZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIE1UVSBhZGp1c3RtZW50cy4gVGhpcyBpcyB3aGVyZSB5b3UgZ2V0IHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIHR1bm5lbCBkZWZpbml0aW9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldGxpbmsgY2FsbHMuIFByb2JhYmx5IHNldHRpbmcgdXAgYSBuZXcgaW50ZXJmYWNlIHdpdGggdGhlIHJpZ2h0IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IHRoZSBHUkUgdHVubmVsLiBHb29kIGNob2ljZSwgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0xOTA4PXN0YXRpYyBib29sIGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0MC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTQxOnN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NDItXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTc0LVxubmV0L2lwdjYvaXA2X2dyZS5jOjE5NzU6c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NzYtXHRcdFx0ICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk2LVxubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTc6XHRlcnIgPSBpcDZncmVfbmV3bGlua19jb21tb24obmV0LCBkZXYsIHRiLCBkYXRhLCBleHRhY2spO1xubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXHRpZiAoIWVycikge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjE2PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjIzOC1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjM5Olx0ZXJyID0gaXA2Z3JlX25ld2xpbmtfY29tbW9uKG5ldCwgZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjQwLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4Nz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTMtXHQudmFsaWRhdGVcdD0gaXA2Z3JlX3R1bm5lbF92YWxpZGF0ZSxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjk0Olx0Lm5ld2xpbmtcdD0gaXA2Z3JlX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5NS1cdC5jaGFuZ2VsaW5rXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzA4LVx0LnZhbGlkYXRlXHQ9IGlwNmdyZV90YXBfdmFsaWRhdGUsXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMwOTpcdC5uZXdsaW5rXHQ9IGlwNmdyZV9uZXdsaW5rLFxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTAtXHQuY2hhbmdlbGlua1x0PSBpcDZncmVfY2hhbmdlbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgR1JFIExpbmsgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwNmdyZV9uZXdsaW5rYCBmdW5jdGlvbi4gSXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLCBidXQgaXQgKmlzKiBhc3NpZ25lZCB0byBgcnRubF9saW5rX29wc2AsIHdoaWNoIGlzIHRoZSBuZXRsaW5rIGxpbmsgb3BlcmF0aW9uIHN0cnVjdHVyZS4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHdhcyBob3BpbmcgaXQgd291bGQgYmUgYSByZWd1bGFyIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGluayB0eXBlIGdldHMgaW5zdGFudGlhdGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGBzdGF0aWNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCBzY2FuIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSBob29rIG9yIGFuIGludGVyZmFjZSBmb3IgdGhlIHN5c3RlbSB0byBpbnRlcmFjdCB3aXRoIHRoZSBJUDZHUkUgZnVuY3Rpb25hbGl0eS4KCkFoLCBJIHNlZSBgaXA2Z3JlX2luaXRfbmV0YC4gVGhhdCBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGNhbmRpZGF0ZSB0byBpbnZlc3RpZ2F0ZSBuZXh0LiBDb3VsZCB0aGF0IGJlIHRoZSBrZXk/IEkmIzM5O2xsIGRpZyBpbnRvIHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2xpbmtfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNDczLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNDc1LXtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1Mz1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTY0LVx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNnQtXHUwMDNlZHN0X2NhY2hlKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTY1Olx0aXA2X3RubF9saW5rX2NvbmZpZyh0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTY2LX1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTk3Nj1zdGF0aWMgaW50IGlwNl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4Mi1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgzOlx0aXA2X3RubF9saW5rX2NvbmZpZyh0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTg0LVx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5vbi1TdGF0aWMgYGlwNl90bmxfY2hhbmdlYCBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gYGlwNl90bmxfY2hhbmdlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc2VyaWVzIG9mIGNvbnNpZGVyYXRpb25zLiBJZiB0aGlzIGlzIGEgZnVuY3Rpb24sIGl0cyBub24tc3RhdGljIG5hdHVyZSBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgaXRzIHNjb3BlIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBBcmUgdGhlcmUgYW55IGV4dGVybiBkZWNsYXJhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbj8gV2hlcmUgaXMgaXQgZGVmaW5lZD8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiBpdCYjMzk7cyBwYXJ0IG9mIGEgbW9kdWxlIG9yIGxpbmtlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEl0cyB1c2UgaW4gbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMgaW5jcmVhc2VzIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGR1ZSB0byBpbmNvbnNpc3RlbnQgZGVmaW5pdGlvbnMgb3IgbWlzdXNlIGlmIG5vdCBjYXJlZnVsbHkgbWFuYWdlZC4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgY2FsbCBzaXRlcyB0byBlbnN1cmUgdGhhdCBhbnkgc2lkZSBlZmZlY3RzIGFyZSB1bmRlcnN0b29kIGFuZCBhY2NvdW50ZWQgZm9yLCBnaXZlbiB0aGF0IGl0cyBkZWZpbml0aW9uIG1pZ2h0IHZhcnkgZGVwZW5kaW5nIG9uIGNvbXBpbGF0aW9uIG9wdGlvbnMgb3IgbW9kdWxlIGxvYWRpbmcuIE15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgZm9yIHRoaXMgbm9uLXN0YXRpYyBiZWhhdmlvciBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIGRlc2lnbi4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IG1hbmlwdWxhdGUsIGFuZCBob3cgYXJlIHRob3NlIHN0cnVjdHVyZXMgc2hhcmVkPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQsIGlmIGFueT8gSeKAmWxsIGFsc28gbmVlZCB0byBjaGVjayBpdHMgdXNhZ2UgaW4gdGhlIGV4aXN0aW5nIGNvZGViYXNlIGZvciB0aHJlYWQgc2FmZXR5IGlzc3VlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVWx0aW1hdGVseSwgaXQgbWVhbnMgSSBoYXZlIHRvIGJlIG1vcmUgZGlsaWdlbnQgaW4gcmV2aWV3aW5nIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24sIGFzIHRoZXkgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyB0aGFuIGlmIGl0IHdlcmUgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQzLS8qKlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU0NS0gKiAgIEB0OiB0dW5uZWwgdG8gYmUgY2hhbmdlZFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDk6ICogICBpcDZfdG5sX2NoYW5nZSgpIHVwZGF0ZXMgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1MC0gKiovXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1NTI9c3RhdGljIHZvaWRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTUzOmlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1Njg9c3RhdGljIHZvaWQgaXA2X3RubF91cGRhdGUoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU3NC1cdHN5bmNocm9uaXplX25ldCgpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XHRpcDZfdG5sX2NoYW5nZSh0LCBwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTc2LVx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjU2PWlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NTEtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc1MjogKiBpcDZfdG5sX2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG1hbnVhbGx5IGZvciB0dW5uZWwgZGV2aWNlXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2MC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2Mi17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODUtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXA2X3RubF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODg1Olx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtXHQubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2NT1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTAxOlx0XHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAyLVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDY6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA3LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQubmV3bGlua1x0PSBpcDZfdG5sX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVx0LmRlbGxpbmtcdD0gaXA2X3RubF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgYGlwNl90bmxfY2hhbmdlX210dWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIE1UVSBvZiB0aGUgSVB2NiB0dW5uZWxzIGV4dGVybmFsbHkuIEludGVyZXN0aW5nLiBOb3csIEkgbm90aWNlIGBpcDZfdG5sX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VsaW5rYCBhcmUgZGVjbGFyZWQgc3RhdGljLCBidXQgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgLiBIbW0sIHRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiDigJMgaW50ZXJuYWwgZnVuY3Rpb25zIHVzZWQgYXMgaGFuZGxlcnMuIEJ1dCB3YWl0Li4uIGBpcF90dW5uZWxfbmV3bGlua2AgKmlzKiBleHBvcnRlZCBhcyB3ZWxsISBUaGF0IG1lYW5zIHdlIGNhbiBjcmVhdGUgSVAgdHVubmVscyBnZW5lcmFsbHksIG5vdCBqdXN0IElQdjYuIEFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGhlcmUuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBpcyBsaWtlbHkgdG8gYmUgYHNpdC5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2JpbmRfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTA5NC1cbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xMDk2LXtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xMTU2LVx0XHR0LVx1MDAzZWZ3bWFyayA9IGZ3bWFyaztcbm5ldC9pcHY2L3NpdC5jOjExNTc6XHRcdGlwaXA2X3R1bm5lbF9iaW5kX2Rldih0LVx1MDAzZWRldik7XG5uZXQvaXB2Ni9zaXQuYy0xMTU4LVx0fVxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0NDM9c3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L3NpdC5jLTE0NTAtXG5uZXQvaXB2Ni9zaXQuYzoxNDUxOlx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KGRldik7XG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipDb25jZXJuaW5nIHRoZSBgaXBpcDZfdHVubmVsX2luaXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcGlwNl90dW5uZWxfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBSaWdodCwgc28gaW1tZWRpYXRlbHkgdGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIGRlZmluaXRlbHkgcmVzdHJpY3RlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3Mgbm90IGludGVuZGVkIHRvIGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBleHRlcm5hbGx5IGZyb20gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4gSXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIHByb2JhYmx5IGRvaW5nIHNvbWUgc2V0dXAgb3IgaW5pdGlhbGl6YXRpb24gc3BlY2lmaWMgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGUgY29kZSBpdCYjMzk7cyBjb250YWluZWQgd2l0aGluLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGluaXRpYWxpemF0aW9uIGVudGFpbHMgYW5kIHdoZXJlIGVsc2UgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGJ1dCB0aGlzIGluaXRpYWwgYml0IG9mIGluZm9ybWF0aW9uIHNldHMgdGhlIHRvbmUuIEtub3dpbmcgdGhpcyBoYXMgY29udGV4dCBpcyB2aXRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfdHVubmVsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYz02OT1NT0RVTEVfUEFSTV9ERVNDKGxvZ19lY25fZXJyb3IsIFwmIzM0O0xvZyBwYWNrZXRzIHJlY2VpdmVkIHdpdGggY29ycnVwdGVkIEVDTlwmIzM0Oyk7XG5uZXQvaXB2Ni9zaXQuYy03MC1cbm5ldC9pcHY2L3NpdC5jOjcxOnN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvaXB2Ni9zaXQuYy03Mi1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2lwdjYvc2l0LmM9MTM5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7XG5uZXQvaXB2Ni9zaXQuYzoxMzk4Olx0Lm5kb19pbml0XHQ9IGlwaXA2X3R1bm5lbF9pbml0LFxubmV0L2lwdjYvc2l0LmMtMTM5OS1cdC5uZG9fdW5pbml0XHQ9IGlwaXA2X3R1bm5lbF91bmluaXQsXG4tLVxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNDQyLVxubmV0L2lwdjYvc2l0LmM6MTQ0MzpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9zaXQuYy0xNDQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gc2VlaW5nOgoKKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgVHVubmVsIEluaXRpYWxpemF0aW9uIGFuZCBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2l0X3R1bm5lbF94bWl0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYG5kb19zdGFydF94bWl0YC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgc2Vuc2libGUg4oCTIHRoaXMgbGlrZWx5IG1lYW5zIGBzaXRfdHVubmVsX3htaXRgIGlzIHRoZSBhY3R1YWwgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgdHVubmVsIHR5cGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0lUIHR1bm5lbHMsIGFuZCBgbmRvX3N0YXJ0X3htaXRgIGlzIHRoZSBnZW5lcmljIG5ldHdvcmsgZGV2aWNlIHRyYW5zbWl0IGZ1bmN0aW9uIHRoZSBrZXJuZWwgdXNlcyB0byBpbnZva2UgaXQuIE1ha2VzIHNlbnNlIGZvciBob3cgdGhpcyBraW5kIG9mIGRyaXZlciBnZW5lcmFsbHkgb3BlcmF0ZXMuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoYXQgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgYW5kIGBpcGlwNl90dW5uZWxfaW5pdGAuIFRoaXMgc3VnZ2VzdHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgbGlrZWx5IGhhbmRsZXMgdGhlIGNvcmUgYmluZGluZyBvciBhc3NvY2lhdGlvbiBvZiB0aGUgSVBJUDYgdHVubmVsIHdpdGggaXRzIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGJvdGggZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzLiBUaGUgaW50ZXJwbGF5IG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGltcG9ydGFudCBoZXJlLgoKRnVydGhlciwgYGlwaXA2X3R1bm5lbF91cGRhdGVgIGlzIHRoZW4gY2FsbGVkIGZyb20gYGlwaXA2X3R1bm5lbF9jaGFuZ2VgIGFuZCBgaXBpcDZfbmV3bGlua2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGBpcGlwNl90dW5uZWxfY2hhbmdlYCBwcm9iYWJseSBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9uIGFuZCBgaXBpcDZfbmV3bGlua2AgaXMgY2xlYXJseSBjYWxsZWQgd2hlbiBhIG5ldyBsaW5rIChuZXR3b3JrIGRldmljZSkgaXMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCB3aGVuZXZlciB0aGVyZSYjMzk7cyBhIGNoYW5nZSBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgbGluaywgdGhlIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBmdW5jdGlvbiBpcyBydW4sIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAuIFRoYXQgd291bGQgZXhwbGFpbiBob3cgbmV3IElQSVA2IHR1bm5lbHMgZ2V0IHNldCB1cCBhbmQgaG93IGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZCBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBob3cgZWFjaCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHVubmVsJiMzOTtzIElQIGFkZHJlc3MgYW5kIHJvdXRpbmcgdGFibGUgZ2V0cyBzZXR1cCBhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gdXNlcyBuZXRsaW5rIG1lc3NhZ2VzIG9yIHNpbWlsYXIgQVBJcyB0byBzZXR1cCBvciBtb2RpZnkgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NpdC5jPTE1MTQ9c3RhdGljIGJvb2wgaXBpcDZfbmV0bGlua182cmRfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY2L3NpdC5jLTE1NDgtXG5uZXQvaXB2Ni9zaXQuYzoxNTQ5OnN0YXRpYyBpbnQgaXBpcDZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjYvc2l0LmMtMTU1MC1cdFx0XHQgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xNzcxPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBzaXRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9zaXQuYy0xNzc3LVx0LnZhbGlkYXRlXHQ9IGlwaXA2X3ZhbGlkYXRlLFxubmV0L2lwdjYvc2l0LmM6MTc3ODpcdC5uZXdsaW5rXHQ9IGlwaXA2X25ld2xpbmssXG5uZXQvaXB2Ni9zaXQuYy0xNzc5LVx0LmNoYW5nZWxpbmtcdD0gaXBpcDZfY2hhbmdlbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgSVB2NiBUdW5uZWwgQ3JlYXRpb24gYW5kIE1UVSBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUHY2IHR1bm5lbHMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIEkmIzM5O3ZlIGdvdCBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpbiBtaW5kLiBNYWtlcyBzZW5zZSDigJMgdGhleSYjMzk7cmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aG9zZSBhc3BlY3RzLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgc3BlY2lmaWNhbGx5LiBJIHJlbWVtYmVyIGBpcDZncmVfbmV3bGlua2AsIGFuZCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpY2FsbHkgZGVmaW5lZC4gVGhpcyBpcyBhIGJpdCBvZiBhIGNvZGUgc21lbGwuIElzIHRoZXJlIGEgc2ltaWxhciBleHBvcnRlZCBmdW5jdGlvbiBpbiBgaXA2X2dyZS5jYD8gSXQgd291bGQgYmUgd2VpcmQgdG8gaGF2ZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZGVmaW5lZCBzdGF0aWNhbGx5LCBlc3BlY2lhbGx5IGlmIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGNhbiBoYW5kbGUgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGBpcDZncmVfbmV3bGlua2AgaXMgbGlrZSB0aGF0LiBEb2VzIGBpcDZfZ3JlLmNgIGhhdmUgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgcHVycG9zZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IFR1bm5lbGluZyBJbXBsZW1lbnRhdGlvbioqCgpIbW0sIG5vIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgaXA2X2dyZS5jYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJJiMzOTtkIGV4cGVjdCBzb21lLCBldmVuIGZvciBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBJdCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgSVB2NiB0dW5uZWxpbmcgaW1wbGVtZW50YXRpb24uIEFscmlnaHQsIGxldCYjMzk7cyBwaXZvdCB0byBgaXA2X3R1bm5lbC5jYC4gUGVyaGFwcyB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgdGhlIGVudHJ5IHBvaW50cywgcmVzaWRlIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGZpbGVzIGFuZCBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IElQdjYgdHVubmVscyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIHRvcm4gZG93bi4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBgaXA2X3R1bm5lbC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9Mzk2PV9fdTE2IGlwNl90bmxfcGFyc2VfdGx2X2VuY19saW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqcmF3KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy00NjMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjQ2NDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfcGFyc2VfdGx2X2VuY19saW0pO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTQ2NS1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9NzUyPV9fdTMyIGlwNl90bmxfZ2V0X2NhcChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNzczLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo3NzQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3NS1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9Nzc3PWludCBpcDZfdG5sX3Jjdl9jdGwoc3RydWN0IGlwNl90bmwgKnQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTgwMi19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODAzOkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfcmN2X2N0bCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODA0LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz05MDI9aW50IGlwNl90bmxfcmN2KHN0cnVjdCBpcDZfdG5sICp0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTctfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjkxODpFWFBPUlRfU1lNQk9MKGlwNl90bmxfcmN2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTktXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwMzk9aW50IGlwNl90bmxfeG1pdF9jdGwoc3RydWN0IGlwNl90bmwgKnQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEwNzQtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEwNzU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF94bWl0X2N0bCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ni1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTA5Nz1pbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMS19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTMwMjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfeG1pdCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMy1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc2MT1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzgzLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzg1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3ODY9aW50IGlwNl90bmxfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkxLX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzkyOkVYUE9SVF9TWU1CT0woaXA2X3RubF9nZXRfaWZsaW5rKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkzLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTQ9aW50IGlwNl90bmxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgwMy19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgwNS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODA2PWludCBpcDZfdG5sX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjEtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MjI6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTgyND1pbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg0NC19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg0NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX2VuY2FwX3NldHVwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ2LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0yMjM4PXN0cnVjdCBuZXQgKmlwNl90bmxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNDMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIyNDQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9saW5rX25ldCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjI0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTVRVIFVwZGF0ZXMgYW5kIFR1bm5lbGluZyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQuIE5vdywgYSBxdWljayBjaGVjay4uLiB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBmb3IgbXkgaW50ZW5kZWQgdXNlLCBzbyB0aGF0JiMzOTtzIG9uZSBsZXNzIGhlYWRhY2hlLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIG9mIGV2ZXJ5dGhpbmcgYW5kIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cy4uLiB3aGF0IGFib3V0IHRoZSBTSVQgZHJpdmVyPyBJcyB0aGVyZSBhbnl0aGluZyBpbiBgc2l0LmNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IE1UVS1yZWxhdGVkIGFkanVzdG1lbnRzIG9yIGludGVyYWN0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mIHRoZXJlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSB0dW5uZWxpbmcgaW50ZXJmYWNlJiMzOTtzIGJlaGF2aW91cj8gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgY2hlY2sgZm9yIGNvbW1vbiBpc3N1ZXMuIEJldHRlciB0byBjYXRjaCBwb3RlbnRpYWwgY29uZmxpY3RzIG5vdyB0aGFuIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEZvY3VzZWQgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzaXQuY2AgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0IG5hcnJvd3MgZG93biBteSBzZWFyY2ggY29uc2lkZXJhYmx5LiBTaW5jZSB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlIHByb2JsZW0gZG9tYWluIGFyZSBpbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UuIFRoZXkmIzM5O3JlIGdvb2QgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQuIEJ1dCBiZWZvcmUgSSB6ZXJvIGluLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjazogSSYjMzk7bGwgc2NhbiBgaXBfdHVubmVsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgcmlnaHQ/IEp1c3QgYSBxdWljayBsb29rIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc21hcnQgbW92ZSByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYz04MT1zdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfbG9va3VwKHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTY5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjE3MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbG9va3VwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE3MS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zNjM9dm9pZCBpcF90dW5uZWxfbWRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzc1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX21kX3VkcF9lbmNhcCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzYtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zNzc9aW50IGlwX3R1bm5lbF9yY3Yoc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1Ni19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0NTc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Jjdik7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NTgtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz00NTk9aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTQ3MT1pbnQgaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg3OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDg5PWludCBpcF90dW5uZWxfZW5jYXBfc2V0dXAoc3RydWN0IGlwX3R1bm5lbCAqdCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MDktfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NTEwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MTEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NTcxPXZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NjYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX21kX3R1bm5lbF94bWl0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY2OC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY2OT12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtODU5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg2MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NjEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODk3PWludCBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTk5Ny19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2N0bCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy05OTktXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDAwPWJvb2wgaXBfdHVubmVsX3Bhcm1fZnJvbV91c2VyKHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICprcCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDE3LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwMTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fZnJvbV91c2VyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMTktXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDIwPWJvb2wgaXBfdHVubmVsX3Bhcm1fdG9fdXNlcih2b2lkIF9fdXNlciAqZGF0YSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKmtwKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMzktfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA0MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV90b191c2VyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNDEtXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDQyPWludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1NC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU2LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgX19pcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSwgYm9vbCBzdHJpY3QpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA3OC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDc5OkVYUE9SVF9TWU1CT0xfR1BMKF9faXBfdHVubmVsX2NoYW5nZV9tdHUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA4MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwODE9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODQtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfY2hhbmdlX210dSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDg2LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwOTU9dm9pZCBpcF90dW5uZWxfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTEwNzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTA4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEwOT1zdHJ1Y3QgbmV0ICppcF90dW5uZWxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTExNC19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTE1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2dldF9saW5rX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTE2LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTExNz1pbnQgaXBfdHVubmVsX2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTIyLX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExMjM6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZ2V0X2lmbGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTI0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEyNT1pbnQgaXBfdHVubmVsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlwX3RubF9uZXRfaWQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE2My19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTY0OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9pbml0X25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTY1LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE2Nj12b2lkIGlwX3R1bm5lbF9kZWxldGVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExOTItfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5NT1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyNDYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTI0OT1pbnQgaXBfdHVubmVsX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg0LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyODU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2NoYW5nZWxpbmspO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI4Ni1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyODc9aW50IF9faXBfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzE1LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMTY6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfaW5pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzE3LVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTMxOD12b2lkIGlwX3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMwLX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMzE6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3VuaW5pdCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEzMzQ9dm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZClcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzM4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMzk6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3NldHVwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1czogVHVubmVsIEludGVyZmFjZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdHVubmVsIGludGVyZmFjZXMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIGBpcF90dW5uZWxfY2hhbmdlX210dWAsIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gSSBhbHNvIG5vdGVkIHRoZSBjYWxscyB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCBmcm9tIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBhcHBlYXJzIGluIHRoZSBjYWxsIGNoYWluIGBpcDZfdG5sX2NoYW5nZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBpcDZfdG5sX2NoYW5nZWxpbmtgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVzdGFibGlzaGluZyBNVFUgb24gSVB2NiB0dW5uZWxzLiBBbHNvLCBJIHNhdyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwaXA2X2NoYW5nZWxpbmtgIGFuZCBgaXBpcDZfbmV3bGlua2AuIEFuZCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmdyZV9uZXdsaW5rYCBhbmQgYGlwNmdyZV9jaGFuZ2VsaW5rYC4KCkhvd2V2ZXIsIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW52b2tlIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBkaXJlY3RseTsgaXQganVzdCBoYW5kbGVzIHRoZSBNVFUgY2hhbmdlLiBJIG5vdyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNvLCBJIG5lZWQgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gJiMzNDtzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGEgc3RydWN0JiMzNDsgdmVyc3VzIHRydWx5IGlubGluZWQgaGVscGVyIGZ1bmN0aW9ucy4KCmBpcDZfdG5sX2NoYW5nZWxpbmtgIGFuZCBgaXA2X3RubF9uZXdsaW5rYCBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gYGlwNl9saW5rX29wc2AuIFRoaXMgbWVhbnMgdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGVudHJ5IHBvaW50cy4gTGlrZXdpc2UsIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZncmVfY2hhbmdlbGlua2AgYXJlIHN0YXRpYyBidXQgbGlua2VkIHRvIGBpcDZncmVfbGlua19vcHNgIGFzIGFyZSBgaXBpcDZfbmV3bGlua2AgYW5kIGBpcGlwNl9jaGFuZ2VsaW5rYC4KClRoZXJlZm9yZSwgYmFzZWQgb24gdGhpcyByZWFzb25pbmcsIHRoZSB1cGRhdGVkIGxpc3Qgb2YgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOgoKKiAgIGBpcF90dW5uZWxfbmV3bGlua2AKKiAgIGBpcF90dW5uZWxfY2hhbmdlbGlua2AKKiAgIGBpcDZncmVfbmV3bGlua2AKKiAgIGBpcDZncmVfY2hhbmdlbGlua2AKKiAgIGBpcDZfdG5sX25ld2xpbmtgCiogICBgaXA2X3RubF9jaGFuZ2VsaW5rYAoqICAgYGlwaXA2X25ld2xpbmtgCiogICBgaXBpcDZfY2hhbmdlbGlua2AKCkkmIzM5O2xsIHZlcmlmeSB0aGF0IGBpcDZncmVfbmV3bGlua2AgaXMgaW5kZWVkIHN0YXRpYywgYnV0IG15IGFzc2Vzc21lbnQgbm93IGxlYW5zIHRvd2FyZCB1c2luZyB0aGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHNpbmNlIHRoZXkgYXJlIGV4cG9ydGVkIGFuZCBhcmUgbm90IHN0YXRpYy4KVGhlIHN0YXRpYyBuYXR1cmUgb2YgYGlwNl90bmxfY2hhbmdlYCBlYXJsaWVyIGlzIGEgcmVkIGhlcnJpbmcuIEl0JiMzOTtzIHRoZSBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQzLS8qKlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU0NS0gKiAgIEB0OiB0dW5uZWwgdG8gYmUgY2hhbmdlZFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDk6ICogICBpcDZfdG5sX2NoYW5nZSgpIHVwZGF0ZXMgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1MC0gKiovXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1NTI9c3RhdGljIHZvaWRcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTUzOmlwNl90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnApXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE1Njg9c3RhdGljIHZvaWQgaXA2X3RubF91cGRhdGUoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU3NC1cdHN5bmNocm9uaXplX25ldCgpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XHRpcDZfdG5sX2NoYW5nZSh0LCBwKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTc2LVx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNjU2PWlwNl90bmxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NTEtLyoqXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc1MjogKiBpcDZfdG5sX2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG1hbnVhbGx5IGZvciB0dW5uZWwgZGV2aWNlXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2MC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2Mi17XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODUtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gaXA2X3RubF9zaW9jZGV2cHJpdmF0ZSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODg1Olx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtXHQubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjA2NT1zdGF0aWMgaW50IGlwNl90bmxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHRiW0lGTEFfTVRVXSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTAxOlx0XHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAyLVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxMDY6c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA3LVx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjI2Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXHQubmV3bGlua1x0PSBpcDZfdG5sX25ld2xpbmssXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcdC5jaGFuZ2VsaW5rXHQ9IGlwNl90bmxfY2hhbmdlbGluayxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVx0LmRlbGxpbmtcdD0gaXA2X3RubF9kZWxsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFR1bm5lbCBIZWFkcm9vbSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBpcDZfdG5sX2NoYW5nZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCwgbm90IGlubGluZWQsIGFuZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoLiBJJiMzOTtsbCBmb2N1cyBteSBhbmFseXNpcyBvbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIGFzIG15IHByaW1hcnkgc3ltYm9scywgYW5kIHRoZW4gY29uc2lkZXIgYGlwNmdyZV9uZXdsaW5rYCwgYGlwNl90bmxfbmV3bGlua2AsIGFuZCBgaXBpcDZfbmV3bGlua2AgYXMgbGlrZWx5IGFyZWFzIG9mIGltcGFjdCBhcyB3ZWxsLCBrZWVwaW5nIHRoZSBjaGFuZ2VsaW5rIGZ1bmN0aW9ucyBpbiBtaW5kLCB0b28uIFRoZSBmYWN0IHRoZXkmIzM5O3JlIGFsbCBhc3NpZ25lZCB0byBgcnRubF9saW5rX29wc2AgY29uZmlybXMgdGhlaXIgdXRpbGl0eSBhcyBlbnRyeSBwb2ludHMgZm9yIG5ldGxpbmsgaW50ZXJhY3Rpb24uCgpOb3csIGxldCBtZSBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LgoKKipDb25maWdzOioqIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseToKCiogICBgTkVUX0lQX1RVTk5FTGAKKiAgIGBJUFY2X0dSRWAKKiAgIGBJUFY2X1RVTk5FTGAKKiAgIGBJUFY2X1NJVGAKCioqRm9jdXMgU3ltYm9sczoqKiBNeSBsaXN0IG9mIGVudHJ5IHBvaW50cyBpczoKCiogICBgaXBfdHVubmVsX25ld2xpbmtgCiogICBgaXBfdHVubmVsX2NoYW5nZWxpbmtgCiogICBgaXA2Z3JlX25ld2xpbmtgCiogICBgaXA2Z3JlX2NoYW5nZWxpbmtgCiogICBgaXA2X3RubF9uZXdsaW5rYAoqICAgYGlwNl90bmxfY2hhbmdlbGlua2AKKiAgIGBpcGlwNl9uZXdsaW5rYAoqICAgYGlwaXA2X2NoYW5nZWxpbmtgCgoqKlJlYXNvbmluZzoqKiBUaGUgY3J1eCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHdoaWNoIGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgb3ZlcmZsb3dzIHdpdGhpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgaGVhZHJvb20gY2FsY3VsYXRpb25zIGZvciBhIHJhbmdlIG9mIElQIHR1bm5lbHMg4oCTIHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGxvZ2ljIGhlcmUgaXMgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiwgYW5kIGFueSBtb2RpZmljYXRpb25zIHdpbGwgbmVjZXNzYXJpbHkgYmUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBjYWxscyBmb3IgaW50ZXJmYWNlIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcyBhbmQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBjb3VsZCByZXZlYWwgc3VidGxlIGlzc3VlcyBpbiB0dW5uZWwgYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0lUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXBfdHVubmVsX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX25ld2xpbmsmIzM0OywKICAgICYjMzQ7aXA2Z3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXA2X3RubF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwaXA2X2NoYW5nZWxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCB0byBjYXAgdGhlIGhlYWRyb29tIG9mIElQIHR1bm5lbHMsIHByZXZlbnRpbmcgcG90ZW50aWFsIG92ZXJmbG93cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAuIFRoaXMgYWZmZWN0cyBJUHY0IHR1bm5lbHMsIElQdjYgR1JFLCBJUHY2IHR1bm5lbHMsIGFuZCBTSVQgdHVubmVscy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgdHVubmVsIGNvbmZpZ3VyYXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0dW5uZWwgaW50ZXJmYWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwX3R1bm5lbF9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9uZXdsaW5rJiMzNDssCiAgICAmIzM0O2lwNmdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwNl90bmxfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcDZfdG5sX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBpcDZfbmV3bGluayYjMzQ7LAogICAgJiMzNDtpcGlwNl9jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBib3VuZHMgY2hlY2tpbmcgZm9yIGBoZWFkcm9vbWAgaW4gdmFyaW91cyBJUCB0dW5uZWwgaW1wbGVtZW50YXRpb25zIChJUHY0LCBJUHY2IEdSRSwgU0lULCBldGMuKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAgd2hlbiBgcHNrYl9leHBhbmRfaGVhZCgpYCBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGlzc3VlcyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MzM6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKaW5kZXggZDcwOGI2NmU1NWNkYS4uODVlMzQ1NWNlYTI1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaApAQCAtNjI5LDggJiM0Mzs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCwKIGludCBza2JfdHVubmVsX2NoZWNrX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZW5jYXBfZHN0LAogCQkJICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgIHVuc2lnbmVkIGludCBoZWFkcm9vbSkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKQogewogCS8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkCiAJICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuCkBAIC02NDAsNiAmIzQzOzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChoZWFkcm9vbSAmZ3Q7IG1heF9hbGxvd2VkKQogCQloZWFkcm9vbSA9IG1heF9hbGxvd2VkOwogCiYjNDM7CXJldHVybiBoZWFkcm9vbTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGhlYWRyb29tKQomIzQzO3sKJiM0MzsJaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pOwomIzQzOwogCWlmIChoZWFkcm9vbSAmZ3Q7IFJFQURfT05DRShkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSkpCiAJCVdSSVRFX09OQ0UoZGV2LSZndDtuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmMKaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfdHVubmVsLmMKQEAgLTMxNyw3ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJbXR1ID0gbWluKHRkZXYtJmd0O210dSwgSVBfTUFYX01UVSk7CiAJfQogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0X2hsZW4gJiM0MzsgaGxlbjsKJiM0MzsJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pOwogCW10dSAtPSB0X2hsZW4gJiM0MzsgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDApOwogCiAJaWYgKG10dSAmbHQ7IElQVjRfTUlOX01UVSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9ncmUuYyBiL25ldC9pcHY2L2lwNl9ncmUuYwppbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2dyZS5jCkBAIC0xMTM3LDEzICYjNDM7MTEzNywxMSBAQCBzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSwKIAkJCXJldHVybjsKIAogCQlpZiAocnQtJmd0O2RzdC5kZXYpIHsKLQkJCXVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7Ci0JCQkJCQkgdF9obGVuOwomIzQzOwkJCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKIAotCQkJaWYgKHQtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKLQkJCQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47Ci0JCQllbHNlCi0JCQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBkc3RfbGVuOwomIzQzOwkJCWhlYWRyb29tID0gcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0X2hsZW47CiYjNDM7CQkJaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pOwomIzQzOwkJCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gaGVhZHJvb207CiAKIAkJCWlmIChzZXRfbXR1KSB7CiAJCQkJaW50IG10dSA9IHJ0LSZndDtkc3QuZGV2LSZndDttdHUgLSB0X2hsZW47CkBAIC0xMTcxLDggJiM0MzsxMTY5LDggQEAgc3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpCiAKIAl0X2hsZW4gPSB0dW5uZWwtJmd0O2hsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAotCWlmICh0dW5uZWwtJmd0O2Rldi0mZ3Q7aGVhZGVyX29wcykKLQkJdHVubmVsLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgJiM0MzsgdF9obGVuOwomIzQzOwlpZiAodHVubmVsLSZndDtkZXYtJmd0O2hlYWRlcl9vcHMgJmFtcDsmYW1wOyB0dW5uZWwtJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVA2R1JFKQomIzQzOwkJdHVubmVsLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjsKIAllbHNlCiAJCXR1bm5lbC0mZ3Q7ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBMTF9NQVhfSEVBREVSICYjNDM7IHRfaGxlbjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTE1MjIsOCAmIzQzOzE1MjIsMTEgQEAgc3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCkKIAkJCXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodC0mZ3Q7bmV0LCBwLSZndDtsaW5rKTsKIAogCQlpZiAodGRldikgewotCQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSB0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsKLQkJCQl0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0MzsgdF9obGVuOwomIzQzOwkJCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsKJiM0MzsJCQloZWFkcm9vbSA9IHRkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LSZndDtuZWVkZWRfaGVhZHJvb207CiYjNDM7CQkJaGVhZHJvb20gJiM0Mzs9IHRfaGxlbjsKJiM0MzsJCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7CiAJCQltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtJmd0O210dSwgSVA2X01BWF9NVFUpOwogCiAJCQltdHUgPSBtdHUgLSB0X2hsZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IGEzOGIyNGZiODM4NDIuLjE5YjdmYThkMWEyYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3NpdC5jCkBAIC0xMTMxLDcgJiM0MzsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG10dSk7CiAJCWhsZW4gPSB0ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tOwogCX0KLQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiAmIzQzOyBobGVuOwomIzQzOwlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh0X2hsZW4gJiM0MzsgaGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTQKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUCBUdW5uZWwgSGVhZHJvb20gUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHBza2JfZXhwYW5kX2hlYWRgIGZ1bmN0aW9uLCBhbmQgYnkgZXh0ZW5zaW9uIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgLCBhcmUgdnVsbmVyYWJsZSB0byBvdmVyZmxvd2luZyBoZWFkZXIgb2Zmc2V0cyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBoZWFkcm9vbSB2YWx1ZXMsIGFzIHVzZWQgaW4gdmFyaW91cyB0dW5uZWwgaW1wbGVtZW50YXRpb25zLCBuYW1lbHkgYGlwX3R1bm5lbC5jYCwgYGlwNl9ncmUuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYHNpdC5jYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gLCBwcmVzdW1hYmx5IHRvIG1ha2UgaXQgc2FmZS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBhcml0aG1ldGljIG92ZXJmbG93IGR1cmluZyB0aGUgaGVhZGVyIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgb3ZlcmZsb3cgaXMgY2F1c2VkIGJ5IHRoZSBsYXJnZSBoZWFkcm9vbSB2YWx1ZS4gVGhlIHBhdGNoIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBpdHMgZ29hbCBpcyBqdXN0IHRvIGxpbWl0IHRoZSBoZWFkcm9vbSB0byBhdm9pZCB0aGlzIG92ZXJmbG93LgoKVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3N1bXB0aW9uOiBpdCYjMzk7cyBhIHNpbXBsZSBib3VuZHMgY2hlY2sgdG8gZW5zdXJlIHRoZSBgaGVhZHJvb21gIHZhbHVlIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIHByZWRlZmluZWQgbWF4aW11bS4gVGhlIGV4aXN0aW5nIGZ1bmN0aW9uLCBgaXBfdHVubmVsX2Fkal9oZWFkcm9vbWAsIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmV0dXJuIHRoZSBhZGp1c3RlZCBoZWFkcm9vbSB2YWx1ZS4KClNpbmNlIHRoZSBwcm9ibGVtIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhcml0aG1ldGljIG92ZXJmbG93LCBhIHRvb2wgbGlrZSBLQVNBTiBpcyB0aGUgbW9zdCByZWxldmFudCBhcHByb2FjaCBmb3IgZGV0ZWN0aW5nIGFuZCBwaW5wb2ludGluZyBzdWNoIGlzc3Vlcy4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNvbmNlcm4gaGVyZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYSBuZXcgd2F5IHRvIGluaXRpYWxpemUgbWVtb3J5OyBpdCYjMzk7cyBhIGJvdW5kcyBjaGVjay4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBzZXRzIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgaW50ZWdlciBvdmVyZmxvdyB0aGF0IGxlYWRzIHRvIG91dCBvZiBib3VuZHMgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjMzOjU3LjM3NTc1MzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NDU1MDczMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICAgIFwiaXBfdHVubmVsX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmdyZV9uZXdsaW5rXCIsXG4gICAgXCJpcDZncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gIHRvIGNhcCB0aGUgaGVhZHJvb20gb2YgSVAgdHVubmVscywgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBhZmZlY3RzIElQdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHR1bm5lbCBpbnRlcmZhY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozMzo1Ny4zNzU3NTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1MzU2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjMzOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuQEAgLTYyOSw4ICs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXFxuIFxcdFxcdFxcdCAgaW50IGhlYWRyb29tLCBib29sIHJlcGx5KTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odW5zaWduZWQgaW50IGhlYWRyb29tKVxcbiB7XFxuIFxcdC8qIHdlIG11c3QgY2FwIGhlYWRyb29tIHRvIHNvbWUgdXBwZXJsaW1pdCwgZWxzZSBwc2tiX2V4cGFuZF9oZWFkXFxuIFxcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxcbkBAIC02NDAsNiArNjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChoZWFkcm9vbSBcXHUwMDNlIG1heF9hbGxvd2VkKVxcbiBcXHRcXHRoZWFkcm9vbSA9IG1heF9hbGxvd2VkO1xcbiBcXG4rXFx0cmV0dXJuIGhlYWRyb29tO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcXG4re1xcbitcXHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XFxuK1xcbiBcXHRpZiAoaGVhZHJvb20gXFx1MDAzZSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxcbiBcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tLCBoZWFkcm9vbSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjViMWYxODA0ODVkNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0bXR1ID0gbWluKHRkZXYtXFx1MDAzZW10dSwgSVBfTUFYX01UVSk7XFxuIFxcdH1cXG4gXFxuLVxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcXG4rXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxuIFxcdG10dSAtPSB0X2hsZW4gKyAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XFxuIFxcbiBcXHRpZiAobXR1IFxcdTAwM2MgSVBWNF9NSU5fTVRVKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9ncmUuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xcbkBAIC0xMTM3LDEzICsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5kZXYpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgc2hvcnQgZHN0X2xlbiA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdF9obGVuO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XFxuIFxcbi1cXHRcXHRcXHRpZiAodC1cXHUwMDNlZGV2LVxcdTAwM2VoZWFkZXJfb3BzKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBkc3RfbGVuO1xcbitcXHRcXHRcXHRoZWFkcm9vbSA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0X2hsZW47XFxuK1xcdFxcdFxcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBoZWFkcm9vbTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXRfbXR1KSB7XFxuIFxcdFxcdFxcdFxcdGludCBtdHUgPSBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1IC0gdF9obGVuO1xcbkBAIC0xMTcxLDggKzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcXG4gXFxuIFxcdHRfaGxlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuIFxcbi1cXHRpZiAodHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhlYWRlcl9vcHMpXFxuLVxcdFxcdHR1bm5lbC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBMTF9NQVhfSEVBREVSICsgdF9obGVuO1xcbitcXHRpZiAodHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhlYWRlcl9vcHMgXFx1MDAyNlxcdTAwMjYgdHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQNkdSRSlcXG4rXFx0XFx0dHVubmVsLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0dW5uZWwtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE1MjIsOCArMTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbiBcXHRcXHRcXHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHQtXFx1MDAzZW5ldCwgcC1cXHUwMDNlbGluayk7XFxuIFxcbiBcXHRcXHRpZiAodGRldikge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXFxuLVxcdFxcdFxcdFxcdHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArIHRfaGxlbjtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xcbitcXG4rXFx0XFx0XFx0aGVhZHJvb20gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxuK1xcdFxcdFxcdGhlYWRyb29tICs9IHRfaGxlbjtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbiBcXHRcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtXFx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xcbiBcXG4gXFx0XFx0XFx0bXR1ID0gbXR1IC0gdF9obGVuO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXFxuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9zaXQuY1xcbisrKyBiL25ldC9pcHY2L3NpdC5jXFxuQEAgLTExMzEsNyArMTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBtdHUpO1xcbiBcXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbiBcXHR9XFxuLVxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcXG4rXFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzM6NTcuODM4OTU0NzUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE5MjQ1MTY1OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIklQVjZfR1JFXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICAgIFwiaXBfdHVubmVsX2NoYW5nZWxpbmtcIixcbiAgICBcImlwNmdyZV9uZXdsaW5rXCIsXG4gICAgXCJpcDZncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2X3RubF9uZXdsaW5rXCIsXG4gICAgXCJpcDZfdG5sX2NoYW5nZWxpbmtcIixcbiAgICBcImlwaXA2X25ld2xpbmtcIixcbiAgICBcImlwaXA2X2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpcF90dW5uZWxfbGltaXRfaGVhZHJvb21gIHRvIGNhcCB0aGUgaGVhZHJvb20gb2YgSVAgdHVubmVscywgcHJldmVudGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBhZmZlY3RzIElQdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgY2hhbmdlcyBtb2RpZnkgY29yZSB0dW5uZWwgY29uZmlndXJhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIHR1bm5lbCBpbnRlcmZhY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTE0MmUyNjJmOTU4NWE0MTE4OGNmMjI5N2Y3ZWQ4ZTNmYWIzY2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MzM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IGQ3MDhiNjZlNTVjZGEuLjg1ZTM0NTVjZWEyNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTYyOSw4ICs2MjksNyBAQCBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICppcHR1bm5lbF9tZXRhZGF0YV9yZXBseShzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZCxcbiBpbnQgc2tiX3R1bm5lbF9jaGVja19wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmVuY2FwX2RzdCxcbiBcdFx0XHQgIGludCBoZWFkcm9vbSwgYm9vbCByZXBseSk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbiB7XG4gXHQvKiB3ZSBtdXN0IGNhcCBoZWFkcm9vbSB0byBzb21lIHVwcGVybGltaXQsIGVsc2UgcHNrYl9leHBhbmRfaGVhZFxuIFx0ICogd2lsbCBvdmVyZmxvdyBoZWFkZXIgb2Zmc2V0cyBpbiBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKCkuXG5AQCAtNjQwLDYgKzYzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdHVubmVsX2Fkal9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBtYXhfYWxsb3dlZClcbiBcdFx0aGVhZHJvb20gPSBtYXhfYWxsb3dlZDtcbiBcbitcdHJldHVybiBoZWFkcm9vbTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4re1xuK1x0aGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xuK1xuIFx0aWYgKGhlYWRyb29tIFx1MDAzZSBSRUFEX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSwgaGVhZHJvb20pO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi41YjFmMTgwNDg1ZDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG4gXHR9XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gXHRtdHUgLT0gdF9obGVuICsgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcbiBcbiBcdGlmIChtdHUgXHUwMDNjIElQVjRfTUlOX01UVSlcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjIwMGQwYmExYTQwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuQEAgLTExMzcsMTMgKzExMzcsMTEgQEAgc3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUsXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldikge1xuLVx0XHRcdHVuc2lnbmVkIHNob3J0IGRzdF9sZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArXG4tXHRcdFx0XHRcdFx0IHRfaGxlbjtcbitcdFx0XHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4gXG4tXHRcdFx0aWYgKHQtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZHN0X2xlbjtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gZHN0X2xlbjtcbitcdFx0XHRoZWFkcm9vbSA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdF9obGVuO1xuK1x0XHRcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaGVhZHJvb207XG4gXG4gXHRcdFx0aWYgKHNldF9tdHUpIHtcbiBcdFx0XHRcdGludCBtdHUgPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSAtIHRfaGxlbjtcbkBAIC0xMTcxLDggKzExNjksOCBAQCBzdGF0aWMgaW50IGlwNmdyZV9jYWxjX2hsZW4oc3RydWN0IGlwNl90bmwgKnR1bm5lbClcbiBcbiBcdHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcbi1cdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMpXG4tXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcbitcdGlmICh0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhlYWRlcl9vcHMgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVA2R1JFKVxuK1x0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHRfaGxlbjtcbiBcdGVsc2VcbiBcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBMTF9NQVhfSEVBREVSICsgdF9obGVuO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwOC4uMmM5NDFhY2IwODFmYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTUyMiw4ICsxNTIyLDExIEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4gXHRcdFx0dGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCh0LVx1MDAzZW5ldCwgcC1cdTAwM2VsaW5rKTtcbiBcbiBcdFx0aWYgKHRkZXYpIHtcbi1cdFx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0dGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKyB0X2hsZW47XG4rXHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuK1xuK1x0XHRcdGhlYWRyb29tID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbitcdFx0XHRoZWFkcm9vbSArPSB0X2hsZW47XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4gXHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCB0ZGV2LVx1MDAzZW10dSwgSVA2X01BWF9NVFUpO1xuIFxuIFx0XHRcdG10dSA9IG10dSAtIHRfaGxlbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jXG5pbmRleCBhMzhiMjRmYjgzODQyLi4xOWI3ZmE4ZDFhMmEwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc2l0LmNcbisrKyBiL25ldC9pcHY2L3NpdC5jXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbiBcdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4gXHR9XG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdF9obGVuICsgaGxlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICsgaGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjMzOjU3LjgzODk1NzM1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDA2MjQ4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjb3JlIG5ldHdvcmtpbmcgZmlsZXM6IGBpcF90dW5uZWxzLmhgLCBgaXBfdHVubmVsLmNgLCBgaXA2X2dyZS5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBgc2l0LmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyB0byBpbnRyb2R1Y2UgYW5kIHVzZSBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCwgZWZmZWN0aXZlbHkgcHV0dGluZyBhIGNhcCBvbiB0aGUgaGVhZHJvb20gdXNlZCBieSBJUCB0dW5uZWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW55IGNoYW5nZSBhdCB0aGlzIGxldmVsIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgbGV0J3Mgc2VlLCB0byBlZmZlY3RpdmVseSB0ZXN0IHRoaXMsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gYGlwX3R1bm5lbC5jYCB3aWxsIHJlcXVpcmUgYENPTkZJR19ORVRfSVBJUGAgYW5kIGBDT05GSUdfTkVUX0lQR1JFYCwgYW5kIHNpbmNlIHdlJ3JlIGFsc28gZGVhbGluZyB3aXRoIElQdjYsIGBDT05GSUdfSVBWNl9TSVRgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9NYWtlZmlsZWAgdG8gY29uZmlybSBhbmQgZ2F0aGVyIGFsbCB0aGUgbmVjZXNzYXJ5IG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MDUuMDc5NTg0Njk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzEzODc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MDUuMjYyNzMxNzU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNzU0NTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIGlwX3R1bm5lbC5jIGFuZCBpdHMgQ29yZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBwaWVjZSBoZXJlLCB0aGUgYWJzb2x1dGUgbGluY2hwaW4sIGlzIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAuIFRoYXQncyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGBpcF90dW5uZWwuY2AuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBsaWtlbHkgY29udGluZ2VudCBvbiB0aGF0LiBJdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgZW5hYmxlci4gV2l0aG91dCBpdCwgdGhlIHdob2xlIHRoaW5nJ3MgbGlrZWx5IGRpc2FibGVkLCBvciBhdCBsZWFzdCBvcGVyYXRpbmcgaW4gc29tZSBkZWdyYWRlZCBtb2RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgZm9yZWZyb250IGFzIEkgaW52ZXN0aWdhdGUgaXRzIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHRoZSB0dW5uZWxzIEknbSBjb25jZXJuZWQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjA4LjQwMDI3ODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDAxMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9ncmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgKz0gZm91Ni5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjA4LjQ0NTI4NTQxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjA3MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJUHY2IEdSRSBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYENPTkZJR19JUFY2X0dSRWAgYXNzb2NpYXRlZCB3aXRoIGBpcDZfZ3JlLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIGNsZWFybHkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gKEdSRSkgdHVubmVscyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgaGVyZTogdGhlIGFiaWxpdHkgdG8gZW5jYXBzdWxhdGUgSVB2NiBwYWNrZXRzIHdpdGhpbiBhbm90aGVyIElQdjYgb3IgSVB2NCBoZWFkZXIgZm9yIHRyYW5zcG9ydCBhY3Jvc3MgbmV0d29ya3MgdGhhdCBtaWdodCBub3QgbmF0aXZlbHkgc3VwcG9ydCBJUHY2LCBvciBmb3IgY3JlYXRpbmcgdmlydHVhbCBwcml2YXRlIG5ldHdvcmtzLCB0aGF0IHNvcnQgb2YgdGhpbmcuIFxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uLiBJdCB3b3VsZCBiZSB3b3J0aCBhIGRlZXBlciBkaXZlLiBJcyB0aGlzIGEgZnVsbCBpbXBsZW1lbnRhdGlvbiB0aGF0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGtleWluZywgc2VxdWVuY2UgbnVtYmVycywgYW5kIGNoZWNrc3Vtcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBjb25zaWRlcmluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGRvdWJsZSBlbmNhcHN1bGF0aW9uPyBXaGF0IGFib3V0IGZyYWdtZW50YXRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB0dW5uZWwgaXRzZWxmPyBJJ2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IHRoZSBJUHY2IHJvdXRpbmcgdGFibGVzIGFuZCB0aGUgaGFuZGxpbmcgb2YgTVRVIGRpc2NvdmVyeS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRoaXMgc2V0dGluZyBpcyBkZXBlbmRlbnQgb24gYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2ssIHN1Y2ggYXMgSVBzZWMsIHJlbHkgb24gaXQuXG5cbkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBtb2R1bGUgY29tcGlsZWQgc3RhdGljYWxseSBvciBkeW5hbWljYWxseT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIEdSRSB0dW5uZWxzLCBzdWNoIGFzIHRoZSByaXNrIG9mIHR1bm5lbGluZyBtYWxpY2lvdXMgdHJhZmZpYz8gV2hhdCBpcyB0aGUgaW1wYWN0IG9mIHRoaXMga2VybmVsIG1vZHVsZSBvbiBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2U/IE92ZXJhbGwsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyB0byBkZXRlcm1pbmUgaXRzIHByYWN0aWNhbCBzdWl0YWJpbGl0eSwgYW5kIEknZCBiZSBsb29raW5nIGZvciB0aGUgbGF0ZXN0IGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgYW55IGFtYmlndWl0aWVzIG9yIGNoYW5nZXMgaW4gYmVoYXZpb3VyIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoxMy4yNjYwMTE3MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2Nzk5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoxMy4zMTM2OTY0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzk2MDUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKklQdjYgVHVubmVsczogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgaXA2X3R1bm5lbC5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYENPTkZJR19JUFY2X1RVTk5FTGAuIEl0J3MgYSBzdGFuZGFyZCByZXF1aXJlbWVudCwgcmlnaHQ/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHdlIGFyZSBnb2luZyB0byBydW4gaW50byBwcm9ibGVtcyB3aXRoIHRoZSBjb2RlLiBJdCBpcyBhbiBpbW1lZGlhdGUgZmxhZyB0byBjb25maXJtLiBJIHdvdWxkIGFzc3VtZSB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyBnb2luZyB0byByZWx5IG9uIHRoaXMgZmVhdHVyZSwgc28gaXQgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSBiZWZvcmUgc3BlbmRpbmcgbW9yZSB0aW1lLiBJJ2xsIGZsYWcgdGhpcyBhcyBzb21ldGhpbmcgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBkaWdnaW5nIGRlZXBlci4gTWFrZXMgc2Vuc2UgdG8gYmUgY2VydGFpbiwgYW5kIG5vdCB3YXN0ZSB0aW1lIHRyeWluZyB0byBkZWJ1ZyBpZiBpdCdzIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MTYuNDkzMzA0OTI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4NTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0lQVjZfVlRJKSArPSBpcDZfdnRpLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MTYuNTM5Mzk2MjUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjY5NzgyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgU0lUIENvbmZpZ3VyYXRpb24gZm9yIEtlcm5lbCBNb2R1bGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1NJVGAgd2l0aGluIGBzaXQuY2AuIFRoZSBzeXN0ZW0gY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhbHNvIGluY2x1ZGUgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9HUkVgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYElQVjZfU0lUYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gdG8gYmUgcmVsZXZhbnQ6IGBpcF90dW5uZWxfYmluZF9kZXZgIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIGBpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlYCBhbmQgYGlwNmdyZV9jYWxjX2hsZW5gIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLCBgaXA2X3RubF9saW5rX2NvbmZpZ2AgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AsIGFuZCBmaW5hbGx5LCBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpbiBgbmV0L2lwdjYvc2l0LmNgLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTZWVpbmcgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyMS42NjYzNzczMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzk1NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3R1bm5lbF9iaW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0yMzM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpfX2lwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMjc5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjI4MDpzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI4MS17XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzQyLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM0MzpcXHRtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDQtXFx0ZXJyID0gZGV2X3NldF9tdHUoZGV2LCBtdHUpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODYyPXN0YXRpYyB2b2lkIGlwX3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg4OC1cXHRcXHR0LVxcdTAwM2Vmd21hcmsgPSBmd21hcms7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODg5OlxcdFxcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTg5MC1cXHRcXHRpZiAoc2V0X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExMjU9aW50IGlwX3R1bm5lbF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBpcF90bmxfbmV0X2lkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE1NS1cXHRcXHRpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE1NjpcXHRcXHRpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYtXFx1MDAzZW10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihpdG4tXFx1MDAzZWZiX3R1bm5lbF9kZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNTctXFx0XFx0aXBfdHVubmVsX2FkZChpdG4sIG5ldGRldl9wcml2KGl0bi1cXHUwMDNlZmJfdHVubmVsX2RldikpO1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE5NT1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIyNC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjI1OlxcdG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMjYtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyMS43MTM3Nzc4NjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNDAyNDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IExpbnV4IGtlcm5lbCBjb2RlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBJUCBUdW5uZWwgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgcm91dGluZXMgZm9yIGhhbmRsaW5nIElQIHR1bm5lbHMgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSd2ZSBpZGVudGlmaWVkIGZvdXIga2V5IGZ1bmN0aW9uczogYGlwX3R1bm5lbF9uZXdsaW5rYCwgYGlwX3R1bm5lbF9pbml0X25ldGAsIGBpcF90dW5uZWxfdXBkYXRlYCwgYW5kIGBpcF90dW5uZWxfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgbGlrZWx5IHJlcHJlc2VudCB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHR1bm5lbCBpbnRlcmZhY2UuXG5cbmBpcF90dW5uZWxfbmV3bGlua2AgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjcmVhdGlvbiBvZiB0aGVzZSB0dW5uZWwgZGV2aWNlcyBpcyBhIGZ1bmN0aW9uIHlvdSBjYW4gY2FsbCBmcm9tIHRoZSB1c2VyLXNwYWNlLCB3aGljaCBJIGZpbmQgaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYnJpbmdpbmcgdXAgYSB0dW5uZWwgaW50ZXJmYWNlLlxuXG5Ob3csIGBpcF90dW5uZWxfaW5pdF9uZXRgIG11c3QgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgbmV0d29ya2luZyBuYW1lc3BhY2UgY29udGV4dCBmb3IgSVAgdHVubmVscy4gSSB3b3VsZCBndWVzcyB0aGlzIGhhcHBlbnMgZHVyaW5nIHN5c3RlbSBzdGFydHVwIG9yIHdoZW4gYSBuZXcgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgcmVzb3VyY2VzIGZvciB0aGVzZSB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRoaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlLlxuXG5gaXBfdHVubmVsX3VwZGF0ZWAgbGlrZWx5IGhhbmRsZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgdHVubmVsIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgaXQncyBiZWVuIGNyZWF0ZWQuIFRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzLCB0aGUga2V5LCBvciB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCBhbGxvd3MgY2hhbmdlcyB0byBiZSBhcHBsaWVkIGR5bmFtaWNhbGx5IHRvIHRoZSBydW5uaW5nIHR1bm5lbC5cblxuRmluYWxseSwgYGlwX3R1bm5lbF9jcmVhdGVgIGlzIHByb2JhYmx5IHRoZSB3b3JraG9yc2UgZnVuY3Rpb24gY2FsbGVkIGJ5IGBpcF90dW5uZWxfbmV3bGlua2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCB0dW5uZWwgZGV2aWNlLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3RhYmxpc2hlZC4gSSdkIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIGFuZCByZWdpc3RlcmluZyB0aGUgdHVubmVsIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEluIGVzc2VuY2UsIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHR1bm5lbCBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy5cblxuSSdkIGV4cGVjdCB0aGVzZSBmdW5jdGlvbnMgdG8gaW50ZXJhY3QgY2xvc2VseSwgd2l0aCBgaXBfdHVubmVsX25ld2xpbmtgIGFjdGluZyBhcyBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSwgY2FsbGluZyBgaXBfdHVubmVsX2NyZWF0ZWAgaW50ZXJuYWxseSwgYW5kIHBlcmhhcHMgc3Vic2VxdWVudGx5IHVzaW5nIGBpcF90dW5uZWxfdXBkYXRlYCBpZiB0aGUgbmV3IGRldmljZSBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDoyNi40NDc4MDU1MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzE4NDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF90dW5uZWxfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9kZWxldGVfbmV0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExOTU6aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTk2LVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfbmV3bGluayk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTI0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MjYuNTUwOTk1NDA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzMyMTQ5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgR1JFIFR1bm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgYGlwX3R1bm5lbF9uZXdsaW5rYCBpcyBkZWZpbml0ZWx5IGEga2V5IGVudHJ5IHBvaW50IGhlcmUg4oCTIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgbGluayBzZXR1cC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gYGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGVgIHNvdW5kcyBsaWtlIGl0J3Mgd2hlcmUgdGhlIHJvdXRpbmcgYXNwZWN0cyBvZiB0aGUgSVB2NiBHUkUgdHVubmVsIGFyZSBjb25maWd1cmVkLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgcm91dGVzIGFyZSBzZXQgdXAgYW5kIG1hbmFnZWQgZm9yIHRoZSB0dW5uZWwuIEZvbGxvd2luZyB0aGF0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBgaXA2Z3JlX2NhbGNfaGxlbmAuIEkgc3VzcGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gY2FsY3VsYXRpbmcgdGhlIGhlYWRlciBsZW5ndGggb2YgdGhlIEdSRSB0dW5uZWwgaXRzZWxmLCBzbyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGVuY2Fwc3VsYXRpb24gb3ZlcmhlYWQuIFVuZGVyc3RhbmRpbmcgdGhlIGhlYWRlciBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWFsIE1UVSBoYW5kbGluZyBhbmQgcGFja2V0IGZyYWdtZW50YXRpb24uIFdpdGggdGhlc2UgcGllY2VzIG9mIGluZm9ybWF0aW9uLCBJIHNob3VsZCBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhpcyBmYWNldCBvZiB0aGUgSVB2NiBHUkUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozMC42MjQyMTMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM3OTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MTA4OD1zdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbihzdHJ1Y3QgaXA2X3RubCAqdClcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIzLVxcdFxcdFxcdFxcdFxcdCBpbnQgdF9obGVuKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTExODA9c3RhdGljIHZvaWQgaXA2Z3JlX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4Mi1cXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX2NvbW1vbih0KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MzpcXHRpcDZncmVfdG5sX2xpbmtfY29uZmlnX3JvdXRlKHQsIHNldF9tdHUsIGlwNmdyZV9jYWxjX2hsZW4odCkpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTg0LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjQ4PXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTAtXFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNTE6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZlcnNwYW5fY2FsY19obGVuKHQpKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjMwLjY3MTU5OTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg5ODI4NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgQ29uZmlndXJhdGlvbiBvZiBUdW5uZWwgTGlua3MqKlxuXG5BbHJpZ2h0LCBzbyBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgYW5kIGBpcDZlcnNwYW5fdG5sX2xpbmtfY29uZmlnYCBhcmUgZGVmaW5lZCBhcyAqc3RhdGljKiBjb25zdHJ1Y3RzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgbGlrZWx5IGVpdGhlciBnbG9iYWwgY29uc3RhbnRzLCBwcmUtaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGRvZXNuJ3QgY2hhbmdlIGR1cmluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBvcGVyYXRpb24uIEdpdmVuIHRoZWlyIG5hbWluZywgdGhleSdyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIEdSRSBhbmQgRVJTUEFOIElQdjYgdHVubmVsIGxpbmtzLCB3aGljaCBzdWdnZXN0cyB0aGV5IGhvbGQgZGVmYXVsdCBzZXR0aW5ncyBvciBtYXliZSBzb21lIGtpbmQgb2YgcHJlLWRlZmluZWQgcG9saWN5LlxuXG5Ob3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBzdGF0aWMgY29uZmlndXJhdGlvbnMgYXJlIHV0aWxpemVkLiBTdGF0aWMgY29uZmlndXJhdGlvbiBjYW4gYmUgcG93ZXJmdWwsIGJ1dCBpdCdzIGNydWNpYWwgdG8ga25vdyBob3cgdGhleSBhcmUgYWNjZXNzZWQgYW5kIHdoZW4uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZWlyIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGVzZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYXJlIGFjdHVhbGx5ICpjYWxsZWQqLiBJIG5lZWQgdG8gZmluZCB0aGUgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIHJlZmVyZW5jZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBhbGwgdGhlIGNhbGxlcnMuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBuZXR3b3JrIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg0NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjM0Ljc2MTQyOThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz03OT1zdGF0aWMgdm9pZCBpcDZncmVfdHVubmVsX2xpbmsoc3RydWN0IGlwNmdyZV9uZXQgKmlnbiwgc3RydWN0IGlwNl90bmwgKnQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzo4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTgxLXN0YXRpYyB2b2lkIGlwNmVyc3Bhbl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1KTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0zMTU9c3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZncmVfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMzUyLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzozNTM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyhudCwgMSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTM1NC1cXHRpcDZncmVfdHVubmVsX2xpbmsoaWduLCBudCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9OTE3PXN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg3LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMDg4OnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHN0cnVjdCBpcDZfdG5sICp0KVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMDg5LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIxLVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxMTIyOnN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMTIzLVxcdFxcdFxcdFxcdFxcdCBpbnQgdF9obGVuKVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTExNjM9c3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE3OS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTE4MDpzdGF0aWMgdm9pZCBpcDZncmVfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0LCBpbnQgc2V0X210dSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4MS17XFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODI6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19jb21tb24odCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjExODM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZ19yb3V0ZSh0LCBzZXRfbXR1LCBpcDZncmVfY2FsY19obGVuKHQpKTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTE4NC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTIwOT1zdGF0aWMgaW50IGlwNmdyZV90bmxfY2hhbmdlKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxMi1cXHRpcDZncmVfdG5sX2NvcHlfdG5sX3Bhcm0odCwgcCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyMTM6XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyh0LCBzZXRfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTIxNC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xOTc1PXN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk4LVxcdGlmICghZXJyKSB7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjE5OTk6XFx0XFx0aXA2Z3JlX3RubF9saW5rX2NvbmZpZyhudCwgIXRiW0lGTEFfTVRVXSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwMDAtXFx0XFx0aXA2Z3JlX3R1bm5lbF9saW5rX21kKGlnbiwgbnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNDg9c3RhdGljIHZvaWQgaXA2ZXJzcGFuX3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCwgaW50IHNldF9tdHUpXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDkte1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUwOlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfY29tbW9uKHQpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjUxOlxcdGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUodCwgc2V0X210dSwgaXA2ZXJzcGFuX2NhbGNfaGxlbih0KSk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozNC44MDY4NzQ3OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzkwOTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBJbml0aWFsIEFzc2Vzc21lbnQ6IGlwNmdyZV9uZXdsaW5rKipcblxuUmlnaHQsIGBpcDZncmVfbmV3bGlua2AuIFRoYXQncyBhIHNvbGlkIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHBvc2l0aXZlLiBJIHNlZSB0aGF0IGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25zaWRlcmluZyB3aGF0IHRoYXQgbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBJUHY2IEdSRSB0dW5uZWxzLiBJdCdzIGEga2V5IHBpZWNlLCBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBuZXcgR1JFIHR1bm5lbCBsaW5rcyBzcGVjaWZpY2FsbHkgZm9yIElQdjYgdHJhZmZpYy4gSSBiZXQgdGhpcyBpcyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uIHBhcmFtZXRlcnMsIGFkZHJlc3NpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBNVFUgYWRqdXN0bWVudHMuIFRoaXMgaXMgd2hlcmUgeW91IGdldCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSB0dW5uZWwgZGVmaW5pdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldGxpbmsgY2FsbHMuIFByb2JhYmx5IHNldHRpbmcgdXAgYSBuZXcgaW50ZXJmYWNlIHdpdGggdGhlIHJpZ2h0IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IHRoZSBHUkUgdHVubmVsLiBHb29kIGNob2ljZSwgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgSVB2NiBHUkUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDozOC41ODA3ODYxMTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDkyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9uZXdsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfZ3JlLmM9MTkwOD1zdGF0aWMgYm9vbCBpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0MC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTk0MTpzdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk0Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NzQtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjE5NzU6c3RhdGljIGludCBpcDZncmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTc2LVxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTk2LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTk3OlxcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5OTgtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjE2PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjM4LVxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjM5OlxcdGVyciA9IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihuZXQsIGRldiwgdGIsIGRhdGEsIGV4dGFjayk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNDAtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjg3PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcDZncmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMjkzLVxcdC52YWxpZGF0ZVxcdD0gaXA2Z3JlX3R1bm5lbF92YWxpZGF0ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5NDpcXHQubmV3bGlua1xcdD0gaXA2Z3JlX25ld2xpbmssXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTUtXFx0LmNoYW5nZWxpbmtcXHQ9IGlwNmdyZV9jaGFuZ2VsaW5rLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDI9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMwOC1cXHQudmFsaWRhdGVcXHQ9IGlwNmdyZV90YXBfdmFsaWRhdGUsXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMDk6XFx0Lm5ld2xpbmtcXHQ9IGlwNmdyZV9uZXdsaW5rLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzEwLVxcdC5jaGFuZ2VsaW5rXFx0PSBpcDZncmVfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6MzguNjI0ODgzMjU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDU2NTcyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IEdSRSBMaW5rIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXA2Z3JlX25ld2xpbmtgIGZ1bmN0aW9uLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgYSBiaXQgbGltaXRpbmcsIGJ1dCBpdCAqaXMqIGFzc2lnbmVkIHRvIGBydG5sX2xpbmtfb3BzYCwgd2hpY2ggaXMgdGhlIG5ldGxpbmsgbGluayBvcGVyYXRpb24gc3RydWN0dXJlLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSB3YXMgaG9waW5nIGl0IHdvdWxkIGJlIGEgcmVndWxhciBmdW5jdGlvbi5cblxuTGV0J3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBsaW5rIHR5cGUgZ2V0cyBpbnN0YW50aWF0ZWQuIEdpdmVuIHRoYXQgaXQncyBgc3RhdGljYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoICpub24qLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIEknbSBtaXNzaW5nPyBJIHNob3VsZCBzY2FuIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSBob29rIG9yIGFuIGludGVyZmFjZSBmb3IgdGhlIHN5c3RlbSB0byBpbnRlcmFjdCB3aXRoIHRoZSBJUDZHUkUgZnVuY3Rpb25hbGl0eS5cblxuQWgsIEkgc2VlIGBpcDZncmVfaW5pdF9uZXRgLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgY2FuZGlkYXRlIHRvIGludmVzdGlnYXRlIG5leHQuIENvdWxkIHRoYXQgYmUgdGhlIGtleT8gSSdsbCBkaWcgaW50byB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo0Mi44MzA1NDMzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAzNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfbGlua19jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDM2PWlwNl90bmxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE0NzMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE0NzQ6c3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTQ3NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU1Mz1pcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjQtXFx0ZHN0X2NhY2hlX3Jlc2V0KFxcdTAwMjZ0LVxcdTAwM2Vkc3RfY2FjaGUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTY1OlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NjYtfVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5NzY9c3RhdGljIGludCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk4Mi1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxOTgzOlxcdGlwNl90bmxfbGlua19jb25maWcodCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5ODQtXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjQyLjg3NjA1MzU1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ3MTEwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5vbi1TdGF0aWMgYGlwNl90bmxfY2hhbmdlYCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgaXA2X3RubF9jaGFuZ2VgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNlcmllcyBvZiBjb25zaWRlcmF0aW9ucy4gSWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdHMgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgaXQncyBsaWtlbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgaXRzIHNjb3BlIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBBcmUgdGhlcmUgYW55IGV4dGVybiBkZWNsYXJhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbj8gV2hlcmUgaXMgaXQgZGVmaW5lZD9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIGl0J3MgcGFydCBvZiBhIG1vZHVsZSBvciBsaW5rZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLiBJdHMgdXNlIGluIG11bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzIGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBkdWUgdG8gaW5jb25zaXN0ZW50IGRlZmluaXRpb25zIG9yIG1pc3VzZSBpZiBub3QgY2FyZWZ1bGx5IG1hbmFnZWQuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIGNhbGwgc2l0ZXMgdG8gZW5zdXJlIHRoYXQgYW55IHNpZGUgZWZmZWN0cyBhcmUgdW5kZXJzdG9vZCBhbmQgYWNjb3VudGVkIGZvciwgZ2l2ZW4gdGhhdCBpdHMgZGVmaW5pdGlvbiBtaWdodCB2YXJ5IGRlcGVuZGluZyBvbiBjb21waWxhdGlvbiBvcHRpb25zIG9yIG1vZHVsZSBsb2FkaW5nLiBNeSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGNhc2VzIGZvciB0aGlzIG5vbi1zdGF0aWMgYmVoYXZpb3IgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0cyBkZXNpZ24uIFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBtYW5pcHVsYXRlLCBhbmQgaG93IGFyZSB0aG9zZSBzdHJ1Y3R1cmVzIHNoYXJlZD8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLCBpZiBhbnk/IEnigJlsbCBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIHVzYWdlIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZSBmb3IgdGhyZWFkIHNhZmV0eSBpc3N1ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFVsdGltYXRlbHksIGl0IG1lYW5zIEkgaGF2ZSB0byBiZSBtb3JlIGRpbGlnZW50IGluIHJldmlld2luZyBhbmQgdW5kZXJzdGFuZGluZyBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uLCBhcyB0aGV5IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgdGhhbiBpZiBpdCB3ZXJlIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo0OC4wMjMxNjU3MDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTI0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDUtICogICBAdDogdHVubmVsIHRvIGJlIGNoYW5nZWRcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTQ5OiAqICAgaXA2X3RubF9jaGFuZ2UoKSB1cGRhdGVzIHRoZSB0dW5uZWwgcGFyYW1ldGVyc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTUwLSAqKi9cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUyPXN0YXRpYyB2b2lkXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NTM6aXA2X3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU2OD1zdGF0aWMgdm9pZCBpcDZfdG5sX3VwZGF0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzQtXFx0c3luY2hyb25pemVfbmV0KCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XFx0aXA2X3RubF9jaGFuZ2UodCwgcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzYtXFx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2NTY9aXA2X3RubF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzUxLS8qKlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzUyOiAqIGlwNl90bmxfY2hhbmdlX210dSAtIGNoYW5nZSBtdHUgbWFudWFsbHkgZm9yIHR1bm5lbCBkZXZpY2VcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzYwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwNl90bmxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNjU9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHRiW0lGTEFfTVRVXSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMTpcXHRcXHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMi1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTA2OnN0YXRpYyBpbnQgaXA2X3RubF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0Lm5ld2xpbmtcXHQ9IGlwNl90bmxfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcXHQuY2hhbmdlbGlua1xcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVxcdC5kZWxsaW5rXFx0PSBpcDZfdG5sX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjQ4LjA2OTY5NjIwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgyODMyOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgaXA2X3RubF9jaGFuZ2VfbXR1YCBpcyBleHBvcnRlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBNVFUgb2YgdGhlIElQdjYgdHVubmVscyBleHRlcm5hbGx5LiBJbnRlcmVzdGluZy4gTm93LCBJIG5vdGljZSBgaXA2X3RubF9uZXdsaW5rYCBhbmQgYGlwNl90bmxfY2hhbmdlbGlua2AgYXJlIGRlY2xhcmVkIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgLiBIbW0sIHRoYXQncyBhIGNvbW1vbiBwYXR0ZXJuIOKAkyBpbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBhcyBoYW5kbGVycy4gQnV0IHdhaXQuLi4gYGlwX3R1bm5lbF9uZXdsaW5rYCAqaXMqIGV4cG9ydGVkIGFzIHdlbGwhIFRoYXQgbWVhbnMgd2UgY2FuIGNyZWF0ZSBJUCB0dW5uZWxzIGdlbmVyYWxseSwgbm90IGp1c3QgSVB2Ni4gQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gaGVyZS4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGlzIGxpa2VseSB0byBiZSBgc2l0LmNgLiBMZXQncyBkaWcgaW50byB0aGF0IHNvdXJjZSBmaWxlIGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzQ6NTEuNjUyNTMyMTgzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl90dW5uZWxfYmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTA2ND1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2l0X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xMDk0LVxcbm5ldC9pcHY2L3NpdC5jOjEwOTU6c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvc2l0LmMtMTA5Ni17XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xMTM3PXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91cGRhdGUoc3RydWN0IGlwX3R1bm5lbCAqdCxcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTExNTYtXFx0XFx0dC1cXHUwMDNlZndtYXJrID0gZndtYXJrO1xcbm5ldC9pcHY2L3NpdC5jOjExNTc6XFx0XFx0aXBpcDZfdHVubmVsX2JpbmRfZGV2KHQtXFx1MDAzZWRldik7XFxubmV0L2lwdjYvc2l0LmMtMTE1OC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNDQzPXN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0NTAtXFxubmV0L2lwdjYvc2l0LmM6MTQ1MTpcXHRpcGlwNl90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG5uZXQvaXB2Ni9zaXQuYy0xNDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNDo1MS42OTY1NDk0OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNzQ4MTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQ29uY2VybmluZyB0aGUgYGlwaXA2X3R1bm5lbF9pbml0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwaXA2X3R1bm5lbF9pbml0YCBmdW5jdGlvbiwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHNvIGltbWVkaWF0ZWx5IHRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLiBGaXJzdCwgdGhpcyBmdW5jdGlvbidzIHNjb3BlIGlzIGRlZmluaXRlbHkgcmVzdHJpY3RlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gSXQncyBub3QgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBhbmQgY2FsbGVkIGV4dGVybmFsbHkgZnJvbSBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBJdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBpdCdzIHByb2JhYmx5IGRvaW5nIHNvbWUgc2V0dXAgb3IgaW5pdGlhbGl6YXRpb24gc3BlY2lmaWMgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGUgY29kZSBpdCdzIGNvbnRhaW5lZCB3aXRoaW4uIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gZW50YWlscyBhbmQgd2hlcmUgZWxzZSB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYnV0IHRoaXMgaW5pdGlhbCBiaXQgb2YgaW5mb3JtYXRpb24gc2V0cyB0aGUgdG9uZS4gS25vd2luZyB0aGlzIGhhcyBjb250ZXh0IGlzIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjU2LjQwNDAzMzgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwNl90dW5uZWxfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zaXQuYz02OT1NT0RVTEVfUEFSTV9ERVNDKGxvZ19lY25fZXJyb3IsIFxcXCJMb2cgcGFja2V0cyByZWNlaXZlZCB3aXRoIGNvcnJ1cHRlZCBFQ05cXFwiKTtcXG5uZXQvaXB2Ni9zaXQuYy03MC1cXG5uZXQvaXB2Ni9zaXQuYzo3MTpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9pcHY2L3NpdC5jLTcyLXN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTEzOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGlwNl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY2L3NpdC5jOjEzOTg6XFx0Lm5kb19pbml0XFx0PSBpcGlwNl90dW5uZWxfaW5pdCxcXG5uZXQvaXB2Ni9zaXQuYy0xMzk5LVxcdC5uZG9fdW5pbml0XFx0PSBpcGlwNl90dW5uZWxfdW5pbml0LFxcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0NDItXFxubmV0L2lwdjYvc2l0LmM6MTQ0MzpzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvc2l0LmMtMTQ0NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM0OjU2LjQ0ODA4NDEyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3MTcyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBUdW5uZWwgSW5pdGlhbGl6YXRpb24gYW5kIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHNpdF90dW5uZWxfeG1pdGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgYmVpbmcgYXNzaWduZWQgdG8gYG5kb19zdGFydF94bWl0YC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSDigJMgdGhpcyBsaWtlbHkgbWVhbnMgYHNpdF90dW5uZWxfeG1pdGAgaXMgdGhlIGFjdHVhbCB0cmFuc21pdCBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyB0dW5uZWwgdHlwZSwgcHJvYmFibHkgcmVsYXRlZCB0byBTSVQgdHVubmVscywgYW5kIGBuZG9fc3RhcnRfeG1pdGAgaXMgdGhlIGdlbmVyaWMgbmV0d29yayBkZXZpY2UgdHJhbnNtaXQgZnVuY3Rpb24gdGhlIGtlcm5lbCB1c2VzIHRvIGludm9rZSBpdC4gTWFrZXMgc2Vuc2UgZm9yIGhvdyB0aGlzIGtpbmQgb2YgZHJpdmVyIGdlbmVyYWxseSBvcGVyYXRlcy5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAgaXMgY3J1Y2lhbDsgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBhbmQgYGlwaXA2X3R1bm5lbF9pbml0YC4gVGhpcyBzdWdnZXN0cyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBsaWtlbHkgaGFuZGxlcyB0aGUgY29yZSBiaW5kaW5nIG9yIGFzc29jaWF0aW9uIG9mIHRoZSBJUElQNiB0dW5uZWwgd2l0aCBpdHMgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgYm90aCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMuIFRoZSBpbnRlcnBsYXkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IGhlcmUuXG5cbkZ1cnRoZXIsIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBpcGlwNl90dW5uZWxfY2hhbmdlYCBhbmQgYGlwaXA2X25ld2xpbmtgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBgaXBpcDZfdHVubmVsX2NoYW5nZWAgcHJvYmFibHkgaGFuZGxlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBleGlzdGluZyB0dW5uZWwgY29uZmlndXJhdGlvbiBhbmQgYGlwaXA2X25ld2xpbmtgIGlzIGNsZWFybHkgY2FsbGVkIHdoZW4gYSBuZXcgbGluayAobmV0d29yayBkZXZpY2UpIGlzIGNyZWF0ZWQuIENvbnNlcXVlbnRseSwgd2hlbmV2ZXIgdGhlcmUncyBhIGNoYW5nZSBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgbGluaywgdGhlIGBpcGlwNl90dW5uZWxfdXBkYXRlYCBmdW5jdGlvbiBpcyBydW4sIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlwaXA2X3R1bm5lbF9iaW5kX2RldmAuIFRoYXQgd291bGQgZXhwbGFpbiBob3cgbmV3IElQSVA2IHR1bm5lbHMgZ2V0IHNldCB1cCBhbmQgaG93IGV4aXN0aW5nIHR1bm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYXBwbGllZCBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSBuZXR3b3JrLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBob3cgZWFjaCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHVubmVsJ3MgSVAgYWRkcmVzcyBhbmQgcm91dGluZyB0YWJsZSBnZXRzIHNldHVwIGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiB1c2VzIG5ldGxpbmsgbWVzc2FnZXMgb3Igc2ltaWxhciBBUElzIHRvIHNldHVwIG9yIG1vZGlmeSB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjAwLjkyNTI1OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDE0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXA2X25ld2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2l0LmM9MTUxND1zdGF0aWMgYm9vbCBpcGlwNl9uZXRsaW5rXzZyZF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaXB2Ni9zaXQuYy0xNTQ4LVxcbm5ldC9pcHY2L3NpdC5jOjE1NDk6c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjYvc2l0LmMtMTU1MC1cXHRcXHRcXHQgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9pcHY2L3NpdC5jPTE3NzE9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHNpdF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTc3Ny1cXHQudmFsaWRhdGVcXHQ9IGlwaXA2X3ZhbGlkYXRlLFxcbm5ldC9pcHY2L3NpdC5jOjE3Nzg6XFx0Lm5ld2xpbmtcXHQ9IGlwaXA2X25ld2xpbmssXFxubmV0L2lwdjYvc2l0LmMtMTc3OS1cXHQuY2hhbmdlbGlua1xcdD0gaXBpcDZfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MDAuOTcwMjgwNDI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDA5NDk0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyBJUHY2IFR1bm5lbCBDcmVhdGlvbiBhbmQgTVRVIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBJUHY2IHR1bm5lbHMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIEkndmUgZ290IGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGluIG1pbmQuIE1ha2VzIHNlbnNlIOKAkyB0aGV5J3JlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgdGhvc2UgYXNwZWN0cy4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgc3BlY2lmaWNhbGx5LiBJIHJlbWVtYmVyIGBpcDZncmVfbmV3bGlua2AsIGFuZCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGl0J3Mgc3RhdGljYWxseSBkZWZpbmVkLiBUaGlzIGlzIGEgYml0IG9mIGEgY29kZSBzbWVsbC4gSXMgdGhlcmUgYSBzaW1pbGFyIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBpcDZfZ3JlLmNgPyBJdCB3b3VsZCBiZSB3ZWlyZCB0byBoYXZlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBkZWZpbmVkIHN0YXRpY2FsbHksIGVzcGVjaWFsbHkgaWYgYGlwX3R1bm5lbF9uZXdsaW5rYCBhbmQgYGlwNl90bmxfY2hhbmdlX210dWAgY2FuIGhhbmRsZSB0aGF0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYGlwNmdyZV9uZXdsaW5rYCBpcyBsaWtlIHRoYXQuIERvZXMgYGlwNl9ncmUuY2AgaGF2ZSBhbm90aGVyIGZ1bmN0aW9uIHdpdGggc2ltaWxhciBwdXJwb3NlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjA1LjI3MTIzMjAwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDY2MzMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MDUuNDcyNzA1MjE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDgyNDQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBUdW5uZWxpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5IbW0sIG5vIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBgaXA2X2dyZS5jYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEknZCBleHBlY3Qgc29tZSwgZXZlbiBmb3IgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eS4gSXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIElQdjYgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBBbHJpZ2h0LCBsZXQncyBwaXZvdCB0byBgaXA2X3R1bm5lbC5jYC4gUGVyaGFwcyB0aGUgY29yZSBsb2dpYywgb3IgYXQgbGVhc3QgdGhlIGVudHJ5IHBvaW50cywgcmVzaWRlIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGlmZmVyZW50IGZpbGVzIGFuZCBtb2R1bGVzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IElQdjYgdHVubmVscyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIHRvcm4gZG93bi4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBgaXA2X3R1bm5lbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNTowOC44ODA5NTE0NzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTc0Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0zOTY9X191MTYgaXA2X3RubF9wYXJzZV90bHZfZW5jX2xpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpyYXcpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNDYzLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NDY0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9wYXJzZV90bHZfZW5jX2xpbSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTQ2NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz03NTI9X191MzIgaXA2X3RubF9nZXRfY2FwKHN0cnVjdCBpcDZfdG5sICp0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3My19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjc3NDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2NhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTc3NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz03Nzc9aW50IGlwNl90bmxfcmN2X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy04MDItfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4MDM6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9yY3ZfY3RsKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODA0LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTkwMj1pbnQgaXA2X3RubF9yY3Yoc3RydWN0IGlwNl90bmwgKnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtOTE3LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6OTE4OkVYUE9SVF9TWU1CT0woaXA2X3RubF9yY3YpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy05MTktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTAzOT1pbnQgaXA2X3RubF94bWl0X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMDc0LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTA3NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX3htaXRfY3RsKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ni1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMDk3PWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEzMDEtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMzAyOkVYUE9SVF9TWU1CT0woaXA2X3RubF94bWl0KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTMwMy1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzYxPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4My19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3ODQ6RVhQT1JUX1NZTUJPTChpcDZfdG5sX2NoYW5nZV9tdHUpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzg1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzg2PWludCBpcDZfdG5sX2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzkxLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTc5MjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2lmbGluayk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3OTMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTQ9aW50IGlwNl90bmxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODAzLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNDpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDUtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4MDY9aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODIxLX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgyMjpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4MjQ9aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg0NC19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NDU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9lbmNhcF9zZXR1cCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDYtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjIzOD1zdHJ1Y3QgbmV0ICppcDZfdG5sX2dldF9saW5rX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNDMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMjQ0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9nZXRfbGlua19uZXQpO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjQ1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozNTowOC45MjU5MzE5MTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTM3NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTVRVIFVwZGF0ZXMgYW5kIFR1bm5lbGluZyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGBpcDZfdG5sX2NoYW5nZV9tdHVgIGlzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZC4gVGhhdCdzIHRoZSBmdW5jdGlvbiBJIG5lZWQuIE5vdywgYSBxdWljayBjaGVjay4uLiB0aGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBteSBpbnRlbmRlZCB1c2UsIHNvIHRoYXQncyBvbmUgbGVzcyBoZWFkYWNoZS4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gdGhpbmtpbmcgb2YgZXZlcnl0aGluZyBhbmQgbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLi4uIHdoYXQgYWJvdXQgdGhlIFNJVCBkcml2ZXI/IElzIHRoZXJlIGFueXRoaW5nIGluIGBzaXQuY2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgTVRVLXJlbGF0ZWQgYWRqdXN0bWVudHMgb3IgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIG1pbmRmdWwgb2YgdGhlcmUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHR1bm5lbGluZyBpbnRlcmZhY2UncyBiZWhhdmlvdXI/IEl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgY2hlY2sgZm9yIGNvbW1vbiBpc3N1ZXMuIEJldHRlciB0byBjYXRjaCBwb3RlbnRpYWwgY29uZmxpY3RzIG5vdyB0aGFuIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjEzLjM3MTMxMjk5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczOTk0MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2l0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjEzLjQxODcyMDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MTI5NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEZvY3VzZWQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2l0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlcmUgYXJlbid0IGFueSBleHBvcnRlZCBzeW1ib2xzIHRoZXJlLiBUaGF0IG5hcnJvd3MgZG93biBteSBzZWFyY2ggY29uc2lkZXJhYmx5LiBTaW5jZSB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlIHByb2JsZW0gZG9tYWluIGFyZSBpbiBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBJIHRoaW5rIEknbGwgc3RhcnQgd2l0aCB0aG9zZS4gVGhleSdyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24sIGdpdmVuIHRoZSBjb250ZXh0LiBCdXQgYmVmb3JlIEkgemVybyBpbiwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2s6IEknbGwgc2NhbiBgaXBfdHVubmVsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMgaW4gdGhhdCBtb2R1bGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgcmlnaHQ/IEp1c3QgYSBxdWljayBsb29rIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc21hcnQgbW92ZSByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MzU6MTguNTYwMDE3MjU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjIxNTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jPTgxPXN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9sb29rdXAoc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE2OS19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTcwOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9sb29rdXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTE3MS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM2Mz12b2lkIGlwX3R1bm5lbF9tZF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzc0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNzU6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfbWRfdWRwX2VuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNzYtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9Mzc3PWludCBpcF90dW5uZWxfcmN2KHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1Ni19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDU3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz00NTk9aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzAtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDcxPWludCBpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0ODc6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTQ4OT1pbnQgaXBfdHVubmVsX2VuY2FwX3NldHVwKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MDktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjUxMDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTUxMS1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3MT12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NjYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjY2NzpFWFBPUlRfU1lNQk9MX0dQTChpcF9tZF90dW5uZWxfeG1pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjY4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY2OT12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjg2MDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtODYxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9ODk3PWludCBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtOTk3LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2N0bCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtOTk5LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwMDA9Ym9vbCBpcF90dW5uZWxfcGFybV9mcm9tX3VzZXIoc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKmtwLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTAxNy19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTAxODpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcGFybV9mcm9tX3VzZXIpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMTktXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTAyMD1ib29sIGlwX3R1bm5lbF9wYXJtX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRhdGEsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICprcClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwMzktfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3Bhcm1fdG9fdXNlcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA0MS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDQyPWludCBpcF90dW5uZWxfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDU0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMDU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9zaW9jZGV2cHJpdmF0ZSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA1Ni1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBfX2lwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1LCBib29sIHN0cmljdClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNzgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNzk6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfY2hhbmdlX210dSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA4MC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDgxPWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODQtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwODU6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2NoYW5nZV9tdHUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwODYtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDk1PXZvaWQgaXBfdHVubmVsX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDYtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjExMDc6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGxpbmspO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExMDgtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTEwOT1zdHJ1Y3QgbmV0ICppcF90dW5uZWxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTE0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMTE1OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2dldF9saW5rX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTExNi1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTE3PWludCBpcF90dW5uZWxfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTEyMi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTEyMzpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9nZXRfaWZsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMTI0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExMjU9aW50IGlwX3R1bm5lbF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBpcF90bmxfbmV0X2lkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE2My19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE2NDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfaW5pdF9uZXQpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTExNjUtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE2Nj12b2lkIGlwX3R1bm5lbF9kZWxldGVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5Mi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZGVsZXRlX25ldCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTE5NC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTk1PWludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9uZXdsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjQ4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyNDk9aW50IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg0LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjg1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9jaGFuZ2VsaW5rKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjg2LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEyODc9aW50IF9faXBfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzMTUtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEzMTY6RVhQT1JUX1NZTUJPTF9HUEwoX19pcF90dW5uZWxfaW5pdCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMxNy1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMzE4PXZvaWQgaXBfdHVubmVsX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMzMC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTMzMTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfdW5pbml0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMzMyLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTMzND12b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTMzOC19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTMzOTpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfc2V0dXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEzNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM1OjE4LjYxMjIzNjgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc5OTk3NjcwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBUdW5uZWwgSW50ZXJmYWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdHVubmVsIGludGVyZmFjZXMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBpcF90dW5uZWxfbmV3bGlua2AsIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIGBpcF90dW5uZWxfY2hhbmdlX210dWAsIGFuZCBgaXA2X3RubF9jaGFuZ2VfbXR1YCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gSSBhbHNvIG5vdGVkIHRoZSBjYWxscyB0byBgaXBfdHVubmVsX2JpbmRfZGV2YCBmcm9tIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AsIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcDZfdG5sX2xpbmtfY29uZmlnYCBhcHBlYXJzIGluIHRoZSBjYWxsIGNoYWluIGBpcDZfdG5sX2NoYW5nZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBpcDZfdG5sX2NoYW5nZWxpbmtgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVzdGFibGlzaGluZyBNVFUgb24gSVB2NiB0dW5uZWxzLiBBbHNvLCBJIHNhdyBgaXBpcDZfdHVubmVsX2JpbmRfZGV2YCBpcyBjYWxsZWQgZnJvbSBgaXBpcDZfdHVubmVsX3VwZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwaXA2X2NoYW5nZWxpbmtgIGFuZCBgaXBpcDZfbmV3bGlua2AuIEFuZCBgaXA2Z3JlX3RubF9saW5rX2NvbmZpZ2AgaXMgY2FsbGVkIGZyb20gYGlwNmdyZV9uZXdsaW5rYCBhbmQgYGlwNmdyZV9jaGFuZ2VsaW5rYC5cblxuSG93ZXZlciwgYGlwNl90bmxfY2hhbmdlX210dWAgZG9lc24ndCBzZWVtIHRvIGludm9rZSBgaXA2X3RubF9saW5rX2NvbmZpZ2AgZGlyZWN0bHk7IGl0IGp1c3QgaGFuZGxlcyB0aGUgTVRVIGNoYW5nZS4gSSBub3cgbmVlZCB0byBjb25zaWRlciB0aGUgc3RhdGljIG5hdHVyZSBvZiBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFwic3RhdGljIGJ1dCBhc3NpZ25lZCB0byBhIHN0cnVjdFwiIHZlcnN1cyB0cnVseSBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuXG5cbmBpcDZfdG5sX2NoYW5nZWxpbmtgIGFuZCBgaXA2X3RubF9uZXdsaW5rYCBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gYGlwNl9saW5rX29wc2AuIFRoaXMgbWVhbnMgdGhleSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGVudHJ5IHBvaW50cy4gTGlrZXdpc2UsIGBpcDZncmVfbmV3bGlua2AgYW5kIGBpcDZncmVfY2hhbmdlbGlua2AgYXJlIHN0YXRpYyBidXQgbGlua2VkIHRvIGBpcDZncmVfbGlua19vcHNgIGFzIGFyZSBgaXBpcDZfbmV3bGlua2AgYW5kIGBpcGlwNl9jaGFuZ2VsaW5rYC5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGlzIHJlYXNvbmluZywgdGhlIHVwZGF0ZWQgbGlzdCBvZiBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgaXBfdHVubmVsX25ld2xpbmtgXG4qICAgYGlwX3R1bm5lbF9jaGFuZ2VsaW5rYFxuKiAgIGBpcDZncmVfbmV3bGlua2BcbiogICBgaXA2Z3JlX2NoYW5nZWxpbmtgXG4qICAgYGlwNl90bmxfbmV3bGlua2BcbiogICBgaXA2X3RubF9jaGFuZ2VsaW5rYFxuKiAgIGBpcGlwNl9uZXdsaW5rYFxuKiAgIGBpcGlwNl9jaGFuZ2VsaW5rYFxuXG5JJ2xsIHZlcmlmeSB0aGF0IGBpcDZncmVfbmV3bGlua2AgaXMgaW5kZWVkIHN0YXRpYywgYnV0IG15IGFzc2Vzc21lbnQgbm93IGxlYW5zIHRvd2FyZCB1c2luZyB0aGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBgaXBfdHVubmVsX25ld2xpbmtgIGFuZCBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHNpbmNlIHRoZXkgYXJlIGV4cG9ydGVkIGFuZCBhcmUgbm90IHN0YXRpYy5cblRoZSBzdGF0aWMgbmF0dXJlIG9mIGBpcDZfdG5sX2NoYW5nZWAgZWFybGllciBpcyBhIHJlZCBoZXJyaW5nLiBJdCdzIHRoZSBgbmV3bGlua2AgYW5kIGBjaGFuZ2VsaW5rYCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozODo0Ni42MTIwMDg5NTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYwOTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ3ND1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDMtLyoqXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NDQ6ICogaXA2X3RubF9jaGFuZ2UgLSB1cGRhdGUgdGhlIHR1bm5lbCBwYXJhbWV0ZXJzXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NDUtICogICBAdDogdHVubmVsIHRvIGJlIGNoYW5nZWRcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTQ4LSAqIERlc2NyaXB0aW9uOlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTQ5OiAqICAgaXA2X3RubF9jaGFuZ2UoKSB1cGRhdGVzIHRoZSB0dW5uZWwgcGFyYW1ldGVyc1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNTUwLSAqKi9cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNTUyPXN0YXRpYyB2b2lkXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NTM6aXA2X3RubF9jaGFuZ2Uoc3RydWN0IGlwNl90bmwgKnQsIGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcClcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTU1NC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTU2OD1zdGF0aWMgdm9pZCBpcDZfdG5sX3VwZGF0ZShzdHJ1Y3QgaXA2X3RubCAqdCwgc3RydWN0IF9faXA2X3RubF9wYXJtICpwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzQtXFx0c3luY2hyb25pemVfbmV0KCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE1NzU6XFx0aXA2X3RubF9jaGFuZ2UodCwgcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1NzYtXFx0aXA2X3RubF9saW5rKGlwNm4sIHQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE2NTY9aXA2X3RubF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzUxLS8qKlxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzUyOiAqIGlwNl90bmxfY2hhbmdlX210dSAtIGNoYW5nZSBtdHUgbWFudWFsbHkgZm9yIHR1bm5lbCBkZXZpY2VcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc1My0gKiAgIEBkZXY6IHZpcnR1YWwgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0dW5uZWxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzYwLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzYxOmludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjIte1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3ODMtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzg0OkVYUE9SVF9TWU1CT0woaXA2X3RubF9jaGFuZ2VfbXR1KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc4NS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODQtXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZSA9IGlwNl90bmxfc2lvY2RldnByaXZhdGUsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNjU9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTAwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHRiW0lGTEFfTVRVXSlcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjEwMTpcXHRcXHRpcDZfdG5sX2NoYW5nZV9tdHUoZGV2LCBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjEwMi1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTA1LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTA2OnN0YXRpYyBpbnQgaXA2X3RubF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIyNjM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIyNzAtXFx0Lm5ld2xpbmtcXHQ9IGlwNl90bmxfbmV3bGluayxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjI3MTpcXHQuY2hhbmdlbGlua1xcdD0gaXA2X3RubF9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMjcyLVxcdC5kZWxsaW5rXFx0PSBpcDZfdG5sX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM4OjQ2LjY5MjU3NDAwN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTg4Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgaXA2X3RubF9jaGFuZ2VgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyBpdCdzIGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCwgbm90IGlubGluZWQsIGFuZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoLiBJJ2xsIGZvY3VzIG15IGFuYWx5c2lzIG9uIGBpcF90dW5uZWxfbmV3bGlua2AgYW5kIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLCBhbmQgdGhlbiBjb25zaWRlciBgaXA2Z3JlX25ld2xpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYW5kIGBpcGlwNl9uZXdsaW5rYCBhcyBsaWtlbHkgYXJlYXMgb2YgaW1wYWN0IGFzIHdlbGwsIGtlZXBpbmcgdGhlIGNoYW5nZWxpbmsgZnVuY3Rpb25zIGluIG1pbmQsIHRvby4gVGhlIGZhY3QgdGhleSdyZSBhbGwgYXNzaWduZWQgdG8gYHJ0bmxfbGlua19vcHNgIGNvbmZpcm1zIHRoZWlyIHV0aWxpdHkgYXMgZW50cnkgcG9pbnRzIGZvciBuZXRsaW5rIGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCBtZSBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LlxuXG4qKkNvbmZpZ3M6KiogVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5OlxuXG4qICAgYE5FVF9JUF9UVU5ORUxgXG4qICAgYElQVjZfR1JFYFxuKiAgIGBJUFY2X1RVTk5FTGBcbiogICBgSVBWNl9TSVRgXG5cbioqRm9jdXMgU3ltYm9sczoqKiBNeSBsaXN0IG9mIGVudHJ5IHBvaW50cyBpczpcblxuKiAgIGBpcF90dW5uZWxfbmV3bGlua2BcbiogICBgaXBfdHVubmVsX2NoYW5nZWxpbmtgXG4qICAgYGlwNmdyZV9uZXdsaW5rYFxuKiAgIGBpcDZncmVfY2hhbmdlbGlua2BcbiogICBgaXA2X3RubF9uZXdsaW5rYFxuKiAgIGBpcDZfdG5sX2NoYW5nZWxpbmtgXG4qICAgYGlwaXA2X25ld2xpbmtgXG4qICAgYGlwaXA2X2NoYW5nZWxpbmtgXG5cbioqUmVhc29uaW5nOioqIFRoZSBjcnV4IG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tYCwgd2hpY2ggYWltcyB0byBwcmV2ZW50IHBvdGVudGlhbCBvdmVyZmxvd3Mgd2l0aGluIGBwc2tiX2V4cGFuZF9oZWFkYC4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbnMgZm9yIGEgcmFuZ2Ugb2YgSVAgdHVubmVscyDigJMgdjQgdHVubmVscywgSVB2NiBHUkUsIElQdjYgdHVubmVscywgYW5kIFNJVCB0dW5uZWxzLiBUaGUgbG9naWMgaGVyZSBpcyBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uLCBhbmQgYW55IG1vZGlmaWNhdGlvbnMgd2lsbCBuZWNlc3NhcmlseSBiZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGNhbGxzIGZvciBpbnRlcmZhY2UgY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFuZCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQsIHdoaWxlIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIGluIHR1bm5lbCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNjYsIk91dHB1dFRva2VucyI6MjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE2LjkyNDQ2NDMyNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTY1MjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9uZXdsaW5rXCIsXG4gICAgXCJpcF90dW5uZWxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZfdG5sX25ld2xpbmtcIixcbiAgICBcImlwNl90bmxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXBpcDZfbmV3bGlua1wiLFxuICAgIFwiaXBpcDZfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiSVBWNl9HUkVcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9uZXdsaW5rXCIsXG4gICAgXCJpcF90dW5uZWxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXA2Z3JlX25ld2xpbmtcIixcbiAgICBcImlwNmdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcDZfdG5sX25ld2xpbmtcIixcbiAgICBcImlwNl90bmxfY2hhbmdlbGlua1wiLFxuICAgIFwiaXBpcDZfbmV3bGlua1wiLFxuICAgIFwiaXBpcDZfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAgdG8gY2FwIHRoZSBoZWFkcm9vbSBvZiBJUCB0dW5uZWxzLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdmVyZmxvd3MgaW4gYHBza2JfZXhwYW5kX2hlYWRgLiBUaGlzIGFmZmVjdHMgSVB2NCB0dW5uZWxzLCBJUHY2IEdSRSwgSVB2NiB0dW5uZWxzLCBhbmQgU0lUIHR1bm5lbHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHR1bm5lbCBjb25maWd1cmF0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdHVubmVsIGludGVyZmFjZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE3LjA4NDEyNTgzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NjY4NjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjE3LjA4NDc3MjU3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzQ2MDM1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyBmb3IgYGhlYWRyb29tYCBpbiB2YXJpb3VzIElQIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMgKElQdjQsIElQdjYgR1JFLCBTSVQsIGV0Yy4pIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpYCB3aGVuIGBwc2tiX2V4cGFuZF9oZWFkKClgIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgaXNzdWVzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTExNDJlMjYyZjk1ODVhNDExODhjZjIyOTdmN2VkOGUzZmFiM2NkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjMzOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5pbmRleCBkNzA4YjY2ZTU1Y2RhLi44NWUzNDU1Y2VhMjU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbkBAIC02MjksOCArNjI5LDcgQEAgc3RydWN0IG1ldGFkYXRhX2RzdCAqaXB0dW5uZWxfbWV0YWRhdGFfcmVwbHkoc3RydWN0IG1ldGFkYXRhX2RzdCAqbWQsXG4gaW50IHNrYl90dW5uZWxfY2hlY2tfcG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICplbmNhcF9kc3QsXG4gXHRcdFx0ICBpbnQgaGVhZHJvb20sIGJvb2wgcmVwbHkpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbSh1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4ge1xuIFx0Lyogd2UgbXVzdCBjYXAgaGVhZHJvb20gdG8gc29tZSB1cHBlcmxpbWl0LCBlbHNlIHBza2JfZXhwYW5kX2hlYWRcbiBcdCAqIHdpbGwgb3ZlcmZsb3cgaGVhZGVyIG9mZnNldHMgaW4gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSgpLlxuQEAgLTY0MCw2ICs2MzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgbWF4X2FsbG93ZWQpXG4gXHRcdGhlYWRyb29tID0gbWF4X2FsbG93ZWQ7XG4gXG4rXHRyZXR1cm4gaGVhZHJvb207XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90dW5uZWxfYWRqX2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuK3tcbitcdGhlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKGhlYWRyb29tKTtcbitcbiBcdGlmIChoZWFkcm9vbSBcdTAwM2UgUkVBRF9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20sIGhlYWRyb29tKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNWIxZjE4MDQ4NWQ0MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xuIFx0fVxuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIFx0bXR1IC09IHRfaGxlbiArIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMCk7XG4gXG4gXHRpZiAobXR1IFx1MDAzYyBJUFY0X01JTl9NVFUpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4yMDBkMGJhMWE0MGU3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC0xMTM3LDEzICsxMTM3LDExIEBAIHN0YXRpYyB2b2lkIGlwNmdyZV90bmxfbGlua19jb25maWdfcm91dGUoc3RydWN0IGlwNl90bmwgKnQsIGludCBzZXRfbXR1LFxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYpIHtcbi1cdFx0XHR1bnNpZ25lZCBzaG9ydCBkc3RfbGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gK1xuLVx0XHRcdFx0XHRcdCB0X2hsZW47XG4rXHRcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuIFxuLVx0XHRcdGlmICh0LVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRzdF9sZW47XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGRzdF9sZW47XG4rXHRcdFx0aGVhZHJvb20gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRfaGxlbjtcbitcdFx0XHRoZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG4rXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGhlYWRyb29tO1xuIFxuIFx0XHRcdGlmIChzZXRfbXR1KSB7XG4gXHRcdFx0XHRpbnQgbXR1ID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUgLSB0X2hsZW47XG5AQCAtMTE3MSw4ICsxMTY5LDggQEAgc3RhdGljIGludCBpcDZncmVfY2FsY19obGVuKHN0cnVjdCBpcDZfdG5sICp0dW5uZWwpXG4gXG4gXHR0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHR0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IExMX01BWF9IRUFERVIgKyB0X2hsZW47XG4rXHRpZiAodHVubmVsLVx1MDAzZWRldi1cdTAwM2VoZWFkZXJfb3BzIFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQNkdSRSlcbitcdFx0dHVubmVsLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0X2hsZW47XG4gXHRlbHNlXG4gXHRcdHR1bm5lbC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gTExfTUFYX0hFQURFUiArIHRfaGxlbjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGJmOGU0MGFmNjBiMDguLjJjOTQxYWNiMDgxZmEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE1MjIsOCArMTUyMiwxMSBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxuIFx0XHRcdHRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodC1cdTAwM2VuZXQsIHAtXHUwMDNlbGluayk7XG4gXG4gXHRcdGlmICh0ZGV2KSB7XG4tXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICtcbi1cdFx0XHRcdHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICsgdF9obGVuO1xuK1x0XHRcdHVuc2lnbmVkIGludCBoZWFkcm9vbTtcbitcbitcdFx0XHRoZWFkcm9vbSA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG4rXHRcdFx0aGVhZHJvb20gKz0gdF9obGVuO1xuK1x0XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xuIFx0XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cdTAwM2VtdHUsIElQNl9NQVhfTVRVKTtcbiBcbiBcdFx0XHRtdHUgPSBtdHUgLSB0X2hsZW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuY1xuaW5kZXggYTM4YjI0ZmI4Mzg0Mi4uMTliN2ZhOGQxYTJhMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NpdC5jXG4rKysgYi9uZXQvaXB2Ni9zaXQuY1xuQEAgLTExMzEsNyArMTEzMSw3IEBAIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4gXHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xuIFx0fVxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHRfaGxlbiArIGhsZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfdXBkYXRlKHN0cnVjdCBpcF90dW5uZWwgKnQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODozOToxNy4wODQ3NzQyNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0NTk5NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVAgVHVubmVsIEhlYWRyb29tIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBgcHNrYl9leHBhbmRfaGVhZGAgZnVuY3Rpb24sIGFuZCBieSBleHRlbnNpb24gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAsIGFyZSB2dWxuZXJhYmxlIHRvIG92ZXJmbG93aW5nIGhlYWRlciBvZmZzZXRzIHdoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGhlYWRyb29tIHZhbHVlcywgYXMgdXNlZCBpbiB2YXJpb3VzIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMsIG5hbWVseSBgaXBfdHVubmVsLmNgLCBgaXA2X2dyZS5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBgc2l0LmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbWAsIHByZXN1bWFibHkgdG8gbWFrZSBpdCBzYWZlLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgYXJpdGhtZXRpYyBvdmVyZmxvdyBkdXJpbmcgdGhlIGhlYWRlciBvZmZzZXQgY2FsY3VsYXRpb25zLiBUaGlzIG92ZXJmbG93IGlzIGNhdXNlZCBieSB0aGUgbGFyZ2UgaGVhZHJvb20gdmFsdWUuIFRoZSBwYXRjaCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXRzIGdvYWwgaXMganVzdCB0byBsaW1pdCB0aGUgaGVhZHJvb20gdG8gYXZvaWQgdGhpcyBvdmVyZmxvdy5cblxuVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3N1bXB0aW9uOiBpdCdzIGEgc2ltcGxlIGJvdW5kcyBjaGVjayB0byBlbnN1cmUgdGhlIGBoZWFkcm9vbWAgdmFsdWUgZG9lc24ndCBleGNlZWQgYSBwcmVkZWZpbmVkIG1heGltdW0uIFRoZSBleGlzdGluZyBmdW5jdGlvbiwgYGlwX3R1bm5lbF9hZGpfaGVhZHJvb21gLCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJldHVybiB0aGUgYWRqdXN0ZWQgaGVhZHJvb20gdmFsdWUuXG5cblNpbmNlIHRoZSBwcm9ibGVtIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhcml0aG1ldGljIG92ZXJmbG93LCBhIHRvb2wgbGlrZSBLQVNBTiBpcyB0aGUgbW9zdCByZWxldmFudCBhcHByb2FjaCBmb3IgZGV0ZWN0aW5nIGFuZCBwaW5wb2ludGluZyBzdWNoIGlzc3Vlcy4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhhdCdzIG5vdCB0aGUgY29uY2VybiBoZXJlLiBUaGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGEgbmV3IHdheSB0byBpbml0aWFsaXplIG1lbW9yeTsgaXQncyBhIGJvdW5kcyBjaGVjay4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBzZXRzIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBpc3N1ZSBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgaW50ZWdlciBvdmVyZmxvdyB0aGF0IGxlYWRzIHRvIG91dCBvZiBib3VuZHMgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjM5OjI1LjgzMDc3MzQzOVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBib3VuZHMgY2hlY2tpbmcgZm9yIGBoZWFkcm9vbWAgaW4gdmFyaW91cyBJUCB0dW5uZWwgaW1wbGVtZW50YXRpb25zIChJUHY0LCBJUHY2IEdSRSwgU0lULCBldGMuKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoKWAgd2hlbiBgcHNrYl9leHBhbmRfaGVhZCgpYCBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGlzc3VlcyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIGZvciBgaGVhZHJvb21gIGluIHZhcmlvdXMgSVAgdHVubmVsIGltcGxlbWVudGF0aW9ucyAoSVB2NCwgSVB2NiBHUkUsIFNJVCwgZXRjLikgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKClgIHdoZW4gYHBza2JfZXhwYW5kX2hlYWQoKWAgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[1] Phase: Succeeded StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 18:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 18:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2] Phase: Succeeded StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 18:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 18:39:37 +0000 UTC FinishedAt: 2026-08-12 18:39:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxrrft/series-workflowxrrft-convert-artifact-2478474607/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 18:39:47 +0000 UTC FinishedAt: 2026-08-12 18:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 18:39:47 +0000 UTC FinishedAt: 2026-08-12 18:58:40 +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:*d9e4b92c-fd83-4517-8f7e-1975514ee3c9,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-workflowxrrft/series-workflowxrrft-convert-artifact-2478474607/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": "d3c78fbc-7974-4923-9625-fcb75b380bea", "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-workflowxrrft/series-workflowxrrft-build-action-196690485/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 18:39:47 +0000 UTC FinishedAt: 2026-08-12 18:58:30 +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:*d9e4b92c-fd83-4517-8f7e-1975514ee3c9,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-workflowxrrft/series-workflowxrrft-convert-artifact-2478474607/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": "d3c78fbc-7974-4923-9625-fcb75b380bea", "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-workflowxrrft/series-workflowxrrft-build-action-196690485/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 18:58:40 +0000 UTC FinishedAt: 2026-08-12 18:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 18:58:40 +0000 UTC FinishedAt: 2026-08-12 18:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 18:58:40 +0000 UTC FinishedAt: 2026-08-12 18:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 18:58:40 +0000 UTC FinishedAt: 2026-08-12 18:58:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxrrft/series-workflowxrrft-convert-artifact-720496062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 18:58:50 +0000 UTC FinishedAt: 2026-08-12 19:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 18:58:50 +0000 UTC FinishedAt: 2026-08-12 19:00:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3c78fbc-7974-4923-9625-fcb75b380bea,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-workflowxrrft/series-workflowxrrft-build-action-196690485/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-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 19:01:07 +0000 UTC FinishedAt: 2026-08-12 19:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 19:01:07 +0000 UTC FinishedAt: 2026-08-12 19:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 19:01:07 +0000 UTC FinishedAt: 2026-08-12 19:17:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 19:01:07 +0000 UTC FinishedAt: 2026-08-12 19:17:22 +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:*d9e4b92c-fd83-4517-8f7e-1975514ee3c9,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-workflowxrrft/series-workflowxrrft-convert-artifact-720496062/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": "799b3041-438b-4d4c-8201-2e595117c95a", "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-workflowxrrft/series-workflowxrrft-build-action-2773262098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 19:01:07 +0000 UTC FinishedAt: 2026-08-12 19:17:12 +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:*d9e4b92c-fd83-4517-8f7e-1975514ee3c9,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-workflowxrrft/series-workflowxrrft-convert-artifact-720496062/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": "799b3041-438b-4d4c-8201-2e595117c95a", "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-workflowxrrft/series-workflowxrrft-build-action-2773262098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 19:17:22 +0000 UTC FinishedAt: 2026-08-12 19:17:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 19:17:22 +0000 UTC FinishedAt: 2026-08-12 19:17:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 19:17:22 +0000 UTC FinishedAt: 2026-08-12 19:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 19:17:22 +0000 UTC FinishedAt: 2026-08-12 19:19:16 +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:*799b3041-438b-4d4c-8201-2e595117c95a,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-workflowxrrft/series-workflowxrrft-build-action-2773262098/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-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +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":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"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:*d3c78fbc-7974-4923-9625-fcb75b380bea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*799b3041-438b-4d4c-8201-2e595117c95a,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-workflowxrrft/series-workflowxrrft-build-action-196690485/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-workflowxrrft/series-workflowxrrft-build-action-2773262098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 19:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 19:19:31 +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":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"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-workflowxrrft/series-workflowxrrft-convert-artifact-91150275/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 19:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 19:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 19:19:26 +0000 UTC FinishedAt: 2026-08-12 19:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 19:19:36 +0000 UTC FinishedAt: 2026-08-12 22:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrrft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_newlink","ip_tunnel_changelink","ip6gre_newlink","ip6gre_changelink","ip6_tnl_newlink","ip6_tnl_changelink","ipip6_newlink","ipip6_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","IPV6_GRE","IPV6_TUNNEL","IPV6_SIT"],"series_id":"069903d8-25f3-4cbf-9677-df0a5f350fe2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 19:19:36 +0000 UTC FinishedAt: 2026-08-12 22:22:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3c78fbc-7974-4923-9625-fcb75b380bea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*799b3041-438b-4d4c-8201-2e595117c95a,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-workflowxrrft/series-workflowxrrft-build-action-196690485/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-workflowxrrft/series-workflowxrrft-build-action-2773262098/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-workflowxrrft/series-workflowxrrft-convert-artifact-91150275/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,}