Name: series-workflow2pf59 Phase: Succeeded StartedAt: 2026-08-24 14:03:23 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[0] Phase: Succeeded StartedAt: 2026-08-24 14:03:23 +0000 UTC FinishedAt: 2026-08-24 14:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 14:03:23 +0000 UTC FinishedAt: 2026-08-24 14:39:34 +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": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB" ], "series_id": "e88180b7-1b50-452f-ac41-1af2aaaed4e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_request_interrupt", "phy_free_interrupt", "phy_connect_direct", "phy_disconnect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9yZXF1ZXN0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtwaHlfZnJlZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2Nvbm5lY3RfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1ZDViOWM1YmFlMWVhNTBlOTEyZmY0ZWYyMzk5NTk4ZTQ0ZDU5NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNDozNjo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICYjNDM7MTY4LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9yYXRlX21hdGNoaW5nKTtcbiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcbiB7XG4gXHRwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9IGludGVycnVwdHMgPyAxIDogMDtcbi1cdGlmIChwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWNvbmZpZ19pbnRyKVxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlZHJ2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWNvbmZpZ19pbnRyKVxuIFx0XHRyZXR1cm4gcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cihwaHlkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQzNiw3ICYjNDM7MTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VkcnYpXG4mIzQzO1x0XHRyZXQgPSBJUlFfTk9ORTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcmVxdWVzdF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2ZyZWVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1ZDViOWM1YmFlMWVhNTBlOTEyZmY0ZWYyMzk5NTk4ZTQ0ZDU5NDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNDozNjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBmY2U5YmM3YmUzMzA0Li41NDM1ZjYyZTk4MTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC0xNjgsNyAmIzQzOzE2OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7CiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cykKIHsKIAlwaHlkZXYtJmd0O2ludGVycnVwdHMgPSBpbnRlcnJ1cHRzID8gMSA6IDA7Ci0JaWYgKHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cikKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7ZHJ2ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtkcnYtJmd0O2NvbmZpZ19pbnRyKQogCQlyZXR1cm4gcGh5ZGV2LSZndDtkcnYtJmd0O2NvbmZpZ19pbnRyKHBoeWRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTE0MzYsNyAmIzQzOzE0MzYsMTAgQEAgc3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdCkKIAl9CiAKIAltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKLQlyZXQgPSBwaHlkZXYtJmd0O2Rydi0mZ3Q7aGFuZGxlX2ludGVycnVwdChwaHlkZXYpOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7ZHJ2KQomIzQzOwkJcmV0ID0gSVJRX05PTkU7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHBoeWRldi0mZ3Q7ZHJ2LSZndDtoYW5kbGVfaW50ZXJydXB0KHBoeWRldik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKIAogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eTogUEhZIERyaXZlciBOdWxsIFBvaW50ZXIgRGVyZWZlcmVuY2UqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvcGh5LmNgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgbnVsbCBjaGVjayBmb3IgYHBoeWRldi0mZ3Q7ZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IEl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCwgc3VnZ2VzdHMgdGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuICpyZWFjaGFibGUqLiBgcGh5X2ludGVycnVwdGAgaXMgb2J2aW91c2x5IGFuIGludGVycnVwdCBoYW5kbGVyLCBhbmQgYHBoeV9jb25maWdfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGludGVycnVwdC4gQm90aCBhcmUgY29yZSBwYXJ0cyBvZiB0aGUgUEhZIGxpYnJhcnkuIEdpdmVuIHRoZSBjZW50cmFsaXR5IG9mIHRoZSBQSFkgbGlicmFyeSwgaXQmIzM5O3MgdXNlZCBieSBudW1lcm91cyBuZXR3b3JrIGRyaXZlcnMsIGEga2V5IGFyZWEgb2YgcG90ZW50aWFsIGV4cGxvaXRhdGlvbi4gVGhpbmtpbmcgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB2aXJ0aW8tbmV0LCBlMTAwMCwgYW5kIG90aGVyIGVtdWxhdGVkIGhhcmR3YXJlIHVzZSBpdC4KCkFoLCB3YWl0LCBQSFkgZGV2aWNlcyBhcmUgKmFsc28qIGNvbW1vbmx5IHVzZWQgYnkgTUFDIGRyaXZlcnMsIHdoaWNoIHNpZ25pZmljYW50bHkgZXhwYW5kcyB0aGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLiBZZXAsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgZHJpdmVycyBsaWtlIGBtYWNiYCwgYGZlY2AsIGBzdG1tYWNgLCBhbmQgb3RoZXJzIGFsbCB1dGlsaXplIHRoZSBQSFkgbGlicmFyeS4gT2theSwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoZW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBmaXggaW4gZnVuZGFtZW50YWwgUEhZIGNvZGUuCgpOb3cgdG8gZGlnIGEgYml0IGRlZXBlci4gSSBzZWUgdGhhdCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtYWtlIGFjY2VzcyB0cmlja3kuIEhvd2V2ZXIsIGBwaHlfaW50ZXJydXB0YCBpcyBzdGF0aWMgYXMgd2VsbCwgKmJ1dCogaXTigJlzIGFuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgZ2V0cyBpdHMgYWRkcmVzcyBwYXNzZWQgdG8gYHJlcXVlc3RfdGhyZWFkZWRfaXJxYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBub3cgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHBoeV9jb25maWdfaW50ZXJydXB0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfY29uZmlnX2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjI6ICogcGh5X2NvbmZpZ19pbnRlcnJ1cHQgLSBjb25maWd1cmUgdGhlIFBIWSBkZXZpY2UgZm9yIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0c1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2My0gKiBAcGh5ZGV2OiB0aGUgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTY3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE2ODpzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNjkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzkxPWludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTUtXHQvKiBEaXNhYmxlIFBIWSBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5NjpcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NTI9c3RhdGljIGludCBwaHlfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDU0Olx0cmV0dXJuIHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9FTkFCTEVEKTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEludGVycnVwdCBDb25maWd1cmF0aW9uIGFuZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAsIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBtb2R1bGUuIFN0YXRpYyBmdW5jdGlvbnMgdXN1YWxseSBpbmRpY2F0ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNeSBnb2FsIG5vdyBpcyB0byB0cmFjayBkb3duIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgdHdvLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBzcG90dGVkIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBhbmQgYHBoeV9lbmFibGVfaW50ZXJydXB0c2AuIEFoYSEgVGhleSBib3RoIGNhbGwgYHBoeV9jb25maWdfaW50ZXJydXB0YC4gVGhhdCBtYWtlcyBzZW5zZTsgZGlzYWJsaW5nIG9yIGVuYWJsaW5nIGludGVycnVwdHMgd291bGQgbGlrZWx5IGludm9sdmUgcmVjb25maWd1cmluZyB0aGVtLiBUaGF0JiMzOTtzIGEga2V5IGludGVyYWN0aW9uIHJpZ2h0IHRoZXJlLgoKTm93LCBJIHNlZSB0aGF0IGBwaHlfaW50ZXJydXB0YCBpdHNlbGYgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgcmVxdWVzdF90aHJlYWRlZF9pcnFgIHdpdGhpbiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YC4gVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHNldHVwIOKAkyBsaW5raW5nIHRoZSBwaHlzaWNhbCBsYXllciBpbnRlcnJ1cHQgdG8gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcnJ1cHQgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTM5MT1pbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDA0LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0MDU6ICogcGh5X2ludGVycnVwdCAtIFBIWSBpbnRlcnJ1cHQgaGFuZGxlclxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0MDYtICogQGlycTogaW50ZXJydXB0IGxpbmVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDExOnN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ4NS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDg2Olx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGh5ZGV2LVx1MDAzZWlycSwgTlVMTCwgcGh5X2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDg3LVx0XHRcdFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEludGVycnVwdCBIYW5kbGluZyBpbiBQSFkgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBpbnRlcnJ1cHQgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBQSFkgZHJpdmVyLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgYWNxdWlyaW5nIGFuZCBlbmFibGluZyB0aGUgaW50ZXJydXB0IGxpbmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHByb3Blcmx5IGNvbmZpZ3VyZWQ/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBpZiB0aGUgcmVxdWVzdCBmYWlscz8KCkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZS1yZWdpc3RlciBhbmQgZGlzYWJsZSB0aGUgaW50ZXJydXB0LCBzbyBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIGl0JiMzOTtzIGRvaW5nIHByZWNpc2VseSB3aGF0JiMzOTtzIGV4cGVjdGVkLiBJcyBpdCBhIGNsZWFuIHVuLXJlZ2lzdHJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIGludGVycnVwdHMgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgaW50ZXJydXB0LXJlbGF0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBhcmUgc2tpcHBlZCBkdXJpbmcgdGhpcyBzdGFnZSwgYmVjYXVzZSB0aG9zZSBjb3VsZCBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcyB0b28uIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUgaXMgY3JpdGljYWwsIHNvIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9yZXF1ZXN0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ2Nj1zdGF0aWMgaW50IHBoeV91cGRhdGVfc3RhdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDc1OiAqIHBoeV9yZXF1ZXN0X2ludGVycnVwdCAtIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NzYtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ4Mjp2b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAwLX1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgdXN1YWwgc3VzcGVjdCBpbiB0aGVzZSB0eXBlcyBvZiBzY2VuYXJpb3MsIHlvdSBrbm93LCB3aGVuIHlvdSYjMzk7cmUgdHJvdWJsZXNob290aW5nIFBIWS1yZWxhdGVkIGludGVycnVwdCBpc3N1ZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVycnVwdHMgYXJlIGNvcnJlY3RseSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IHRoZSByaWdodCBwb2ludHMgaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCByZXZlYWwgaWYgdGhlIGludGVycnVwdCBkaXNhYmxpbmcgbG9naWMgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBjYWxsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCwgYW5kIGlmIGl0IGlzLCB3aGVuIGFuZCB3aGVyZSwgcmVsYXRpdmUgdG8gb3RoZXIgY3JpdGljYWwgb3BlcmF0aW9ucyBsaWtlIGluaXRpYWxpemF0aW9uLCBsaW5rIHN0YXR1cyBjaGFuZ2VzLCBhbmQgYW55IHBvdGVudGlhbCBlcnJvciBoYW5kbGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIHRoZSByb290IGNhdXNlLCBvciwgYXQgbGVhc3QsIGlmIGl0IG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM4Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODktICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTExLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTMtXHRmcmVlX2lycShwaHlkZXYtXHUwMDNlaXJxLCBwaHlkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW50ZXJydXB0IEhhbmRsZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZvciB0aGUgUEhZLiBUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgYW5kIGBwaHlfZnJlZV9pbnRlcnJ1cHRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aG9zZSBhcmUgdGhlIHR5cGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBpbnRlcnJ1cHQgcmVzb3VyY2VzLCByaWdodD8gQWxsb2NhdGUgYW5kIHJlbGVhc2UuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCBzZWVpbmcgYSBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24gc29tZXdoZXJlLiBJdCYjMzk7cyBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgZm9yIGNvbnRyb2xsaW5nIGludGVycnVwdHMuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIGV4cG9ydGVkIHN5bWJvbHMuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgRXhwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYWJvdXQgdGhpcyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sLCByaWdodD8gR2l2ZW4gdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLiBCdXQsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHN0dWZmIGxpa2UgaW50ZXJydXB0IG1hbmFnZW1lbnQgYXQgdGhlIFBIWSBsZXZlbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiBhY3R1YWxseSBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB3aGVyZXZlciBJJiMzOTttIHBsYW5uaW5nIHRvIHVzZSBpdC4gTm8gcG9pbnQgaW4gY29udGludWluZyBkb3duIHRoaXMgcGF0aCBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuIFNvLCB5ZWFoLCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc3ltYm9sIGlzIGFjdHVhbGx5IHZpc2libGUuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuIEl0IGNvdWxkIGJlIGluIHRoZSBrZXJuZWwgb3IgYW5vdGhlciBmaXJtd2FyZSBpbWFnZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldhaXQsIFRoYXQmIzM5O3MgRXhwb3J0ZWQ/KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkgc3R1bWJsZWQgYWNyb3NzIGEgY2FsbCB0byBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIE5vdywgdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgKmxvb2tzKiBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb24uIFRoZSByZWFsIHN1cnByaXNlIGlzIHRoYXQgaXQgYXBwZWFycyB0byBiZSAqZXhwb3J0ZWQqIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBQSFkgc3Vic3lzdGVtLiBXaHkgaXMgdGhhdD8gSSYjMzk7ZCB1c3VhbGx5IGV4cGVjdCB0aGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgaW50ZXJydXB0IGRpc2FibGluZyByb3V0aW5lcyB0byBiZSBlaXRoZXIgc3RhdGljLCBvciwgYXQgbW9zdCwgYXZhaWxhYmxlIHZpYSBhIHZlcnkgc3BlY2lmaWMgYW5kIHdlbGwtZGVmaW5lZCBBUEkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuIEV4cG9ydGluZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2Agc3VnZ2VzdHMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgdXNlZCBtb3JlIGJyb2FkbHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2Ugb3IgcmVhc29uIGZvciB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbiBjaG9pY2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzIGJyb2FkZXIgYXZhaWxhYmlsaXR5PyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIFBIWSBzdWJzeXN0ZW0gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzc5PXN0YXRpYyB2b2lkIHBoeV93cml0ZV9iYXJyaWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM4ODogKiBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gRGlzYWJsZSB0aGUgUEhZIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5MTppbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTEwPXZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUxMjpcdHBoeV9kaXNhYmxlX2ludGVycnVwdHMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVx0ZnJlZV9pcnEocGh5ZGV2LVx1MDAzZWlycSwgcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUEhZIEludGVycnVwdHMgaW4gYHBoeS5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBIWSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBkaXNhYmxlZCBhdCB0aGlzIGxldmVsLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBpbnRlcnJ1cHQgY29udHJvbCBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxpbmsgc3RhdHVzIGNoYW5nZXMgb3IgcG93ZXIgbWFuYWdlbWVudC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSB3ZSBjYW4gdHdlYWsgaG93IGludGVycnVwdHMgYXJlIG1hc2tlZCBhbmQgdW5tYXNrZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZHJpdmVyJiMzOTtzIGludGVyZmFjZSB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIsIHJpZ2h0PyBTbywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXJzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IHN0YXR1cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGFic3RyYWN0aW9uIHRoZXJlIG9yIGlmIGl0IGlzIHRvbyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlLiBJIHdpbGwgbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwgYW5kIHBlcmhhcHMgb3RoZXIgc2ltaWxhciBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHQgKi9cbjEzOTE6XHRpbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTM5MjpcdHtcbjEzOTM6XHRcdGludCBlcnI7XG4xMzk0Olx0XG4xMzk1Olx0XHQvKiBEaXNhYmxlIFBIWSBpbnRlcnJ1cHRzICovXG4xMzk2Olx0XHRlcnIgPSBwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRElTQUJMRUQpO1xuMTM5NzpcdFx0aWYgKGVycilcbjEzOTg6XHRcdFx0cmV0dXJuIGVycjtcbjEzOTk6XHRcbjE0MDA6XHRcdHBoeV93cml0ZV9iYXJyaWVyKHBoeWRldik7XG4xNDAxOlx0XHRyZXR1cm4gMDtcbjE0MDI6XHR9XG4xNDAzOlx0XG4xNDA0Olx0LyoqXG4xNDA1Olx0ICogcGh5X2ludGVycnVwdCAtIFBIWSBpbnRlcnJ1cHQgaGFuZGxlclxuMTQwNjpcdCAqIEBpcnE6IGludGVycnVwdCBsaW5lXG4xNDA3Olx0ICogQHBoeV9kYXQ6IHBoeV9kZXZpY2UgcG9pbnRlclxuMTQwODpcdCAqXG4xNDA5Olx0ICogRGVzY3JpcHRpb246IEhhbmRsZSBQSFkgaW50ZXJydXB0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEcml2ZXIgSXNzdWUqKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGluIGEgcGh5c2ljYWwgbGF5ZXIgZHJpdmVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cG9ydGVkLiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCAqaXMqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QsIGJ1dCBzb21ldGhpbmcgZWxzZSBpc24mIzM5O3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCAmIzM0O3NvbWV0aGluZyBlbHNlJiMzNDsgaXMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgaW50ZXJydXB0IGlzIHNldCB1cCBvciB0b3JuIGRvd24uCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQtZnJlZWluZyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgYHBoeV9mcmVlX2ludGVycnVwdGAuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIG1pc3NpbmcgZXhwb3J0IGlzIGluIGEgcmVsYXRlZCBjb21wb25lbnQuIElzIGl0IHRoZSBhY3R1YWwgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBvciBzb21lIHNldHVwIGZ1bmN0aW9uLCBtYXliZT8gVGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgc2VlIGlmIEkgY2FuIHNwb3QgdGhlIGRpc2Nvbm5lY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGludGVycnVwdCBmbG93IHRvIHRyYWNrIGRvd24gdGhpcyBsYWNrIG9mIGV4cG9ydCBhbmQgd2hhdCBpdCBtaWdodCBtZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZnJlZV9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbiYjMzk7dCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcdFx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk3LVx0XHRcdHBoeWRldi1cdTAwM2VpcnEgPSBQSFlfUE9MTDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTUwMT1FWFBPUlRfU1lNQk9MKHBoeV9yZXF1ZXN0X2ludGVycnVwdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUwNDogKiBwaHlfZnJlZV9pbnRlcnJ1cHQgLSBkaXNhYmxlIGFuZCBmcmVlIGludGVycnVwdCBmb3IgYSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwOS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkludGVycnVwdCBIYW5kbGluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgUEhZIGRyaXZlciBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBhbmQgYHBoeV9mcmVlX2ludGVycnVwdGAgYXJlIHRoZSBrZXkgcGxheWVycyBoZXJlIGZvciBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gVGhvc2UgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIHRoYXQmIzM5O3Mgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBnb2luZyB0byBjYWxsIHRvIGNsYWltIGFuZCByZWxlYXNlIHRoZSBpbnRlcnJ1cHQgbGluZXMuIEkmIzM5O20gYWxzbyBiZXR0aW5nIGBwaHlfc3RhcnRgIGFuZCBgcGh5X3N0b3BgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBwaGFzZXMuCgpUaGUgY3JpdGljYWwgdGhpbmcgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBmbG93LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaCBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGludGVycnVwdHMgYXJlIGluaXRpYWxseSBlbmFibGVkLCBob3cgdGhlIGRyaXZlciYjMzk7cyBsaW5rZWQgaW50byB0aGUgc3lzdGVtLCBhbmQgd2hlcmUgdGhlIGludGVycnVwdCBoYW5kbGluZyBzdGFydHMuIERpZ2dpbmcgdGhyb3VnaCB0aG9zZSBjYWxsIHNpdGVzIGlzIHRoZSBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlcXVlc3RfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ2Nj1zdGF0aWMgaW50IHBoeV91cGRhdGVfc3RhdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDc1OiAqIHBoeV9yZXF1ZXN0X2ludGVycnVwdCAtIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NzYtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ4Mjp2b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAwLX1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIyNT1pbnQgcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM5LVx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI0MDpcdFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDg2PXN0YXRpYyBpbnQgcGh5bGlua19icmluZ3VwX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk3LVx0aWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBwaHlfaW50ZXJydXB0X2lzX3ZhbGlkKHBoeSkpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxOTg6XHRcdHBoeV9yZXF1ZXN0X2ludGVycnVwdChwaHkpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBIWSBJbnRlcnJ1cHQgSGFuZGxpbmcgRml4KioKCk9rYXksIHNvIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5bGlua19icmluZ3VwX3BoeWAgYm90aCBjYWxsIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LCBtZWFuaW5nIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5ldHdvcmsgaW50ZXJmYWNlIFBIWSBicmluZ3VwLCB3aGljaCBtYWtlcyB0aGlzIHZ1bG5lcmFiaWxpdHkgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBQSFkgY29kZSwgZnV6emluZyBzZWVtcyBsaWtlIGEgZ29vZCBpbnZlc3RtZW50LgoKVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZXJlIGBwaHlkZXYtJmd0O2RydmAgaXMgTlVMTC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoZW4gd291bGQgYHBoeWRldi0mZ3Q7ZHJ2YCAqYmUqIE5VTEw/IEkmIzM5O20gdGhpbmtpbmcuLi4gcGVyaGFwcyBkdXJpbmcgYSBQSFkgZGV2aWNlIHVuYmluZGluZyBzY2VuYXJpbywgd2hlcmUgdGhlIGRyaXZlciBpcyBhY3RpdmVseSBiZWluZyB1bmJvdW5kIHdoaWxlIGFuIGludGVycnVwdCBpcyBwZW5kaW5nIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNvbmZpZ3VyZWQuIEFub3RoZXIgcG9zc2liaWxpdHkgbWlnaHQgYmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgdGhlIGRyaXZlciBoYXMgZXZlbiBzdWNjZXNzZnVsbHkgYm91bmQgdG8gdGhlIFBIWS4gRWl0aGVyIHdheSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGZpeCBpbiBjcnVjaWFsIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmdXJ0aGVyLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCBjaGVjayB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQuIGBDT05GSUdfUEhZTElCYCBsb29rcyBsaWtlIHRoZSBmdW5kYW1lbnRhbCBjb3JlIGNvbmZpZyBuZWVkZWQgZm9yIHRoZSBQSFkgbGlicmFyeSwgd2hpY2ggc2VlbXMgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSUImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02PWNvbmZpZyBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDY9Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDk6Y29uZmlnIFBIWUxJQl9MRURTXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy01MC1cdGRlZl9ib29sIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBQSFlMSUIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gaWYgYFBIWUxJQmAgaXMgYWN0dWFsbHkgcmVxdWlyZWQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLiBBaCwgeWVzLCBpdCBhcHBlYXJzIGBQSFlMSUJgIGlzIHRoZSBmb3VuZGF0aW9uYWwgY29uZmlnIGhlcmUg4oCTIHRoZSBtYWluIGRyaXZlciwgaWYgeW91IHdpbGwuIE5vdywgbGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aGF0IHdlIHNob3VsZCBrbm93IGFib3V0PyBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIGxpa2UgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AgaXMgY29tcGlsZWQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQuIEV4Y2VsbGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXHRcdCYjNDM7PSBzd3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTUtbGlicGh5LSQoQ09ORklHX0xFRF9UUklHR0VSX1BIWSlcdCYjNDM7PSBwaHlfbGVkX3RyaWdnZXJzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1BIWUxJTkspXHRcdCYjNDM7PSBwaHlsaW5rLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbGlicGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19kZXZyZXMub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfQURJTjExMDBfUEhZKVx0JiM0Mzs9IGFkaW4xMTAwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfQURJTjExNDBfUEhZKVx0JiM0Mzs9IGFkaW4xMTQwLXBoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfRFA4M1RHNzIwX1BIWSlcdCYjNDM7PSBkcDgzdGc3MjAub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19GSVhFRF9QSFkpXHRcdCYjNDM7PSBmaXhlZF9waHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTY3LW9iai0kKENPTkZJR19JQ1BMVVNfUEhZKVx0JiM0Mzs9IGljcGx1cy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX1BIWUxJQmAgaXMsIGFzIGV4cGVjdGVkLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuIE5vdywgSSBuZWVkIHRvIGZvY3VzIGluIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkLiBIbW0sIGl0IGxvb2tzIGxpa2UgYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgY2hhbmdlcyB0byB0aGVzZSB0d28gZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24sIGl0IHNlZW1zLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCogYW5kIGludGVyYWN0IHdpdGggdGhlc2UgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zPyBJJiMzOTttIHNlZWluZyBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgYHBoeV9mcmVlX2ludGVycnVwdGAsIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCwgYW5kLi4ud2FpdCBhIG1pbnV0ZS4uLiBpcyBgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzYCBhY3R1YWxseSBleHBvcnRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGRldGFpbCBpZiBpdCYjMzk7cyBub3QuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXNuJiMzOTt0IGJyZWFraW5nIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoYXQgZnVuY3Rpb24gaXMgbm90IG1lYW50IHRvIGJlIHB1YmxpYy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSB0byBhc3Nlc3MgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2VuYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDExPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NDgtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ0OTogKiBwaHlfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGUgdGhlIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUwLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ1MjpzdGF0aWMgaW50IHBoeV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTMtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0OTQ6XHRcdGlmIChwaHlfZW5hYmxlX2ludGVycnVwdHMocGh5ZGV2KSkge1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTUtXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtDYW4mIzM5O3QgZW5hYmxlIGludGVycnVwdCwgZmFsbGluZyBiYWNrIHRvIHBvbGxpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA4MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVycnVwdCBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhcmUgbWFuYWdlZCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgSSBzZWUgaXQmIzM5O3MgbGlua2VkIGRpcmVjdGx5IHRvIGBwaHlfZW5hYmxlX2ludGVycnVwdHNgLiBUaGF0IG1ha2VzIHNlbnNlOyByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQsIGVuYWJsZSB0aGUgaGFyZHdhcmUuIE5hdHVyYWxseSwgdGhlIG9wcG9zaXRlIHNlZW1zIHRvIGJlIHRydWUgdG9vIC0gYHBoeV9mcmVlX2ludGVycnVwdGAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwLCBhbmQgdGhhdCBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIGNhbGxpbmcgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBNeSBndXQgZmVlbGluZyBpcyB0aGVzZSBhcmUgcHJvYmFibHkgdmVyeSBzaW1wbGUgd3JhcHBlcnMgYXJvdW5kIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHRob3VnaCwgc28gdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgaXMgcHJvcGVybHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgd2hlcmUgaXQgbmVlZHMgdG8gYmUuIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nIGlzIGhvb2tlZCB1cCBjb3JyZWN0bHkuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gcnVubmluZyB0aHJvdWdoIGEgbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlOgoKKipEZWJ1Z2dpbmcgYW4gVW5leHBvcnRlZCBGdW5jdGlvbioqCgpIbW0sIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IG9kZC4gV2FpdCBhIG1pbnV0ZSwgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLi4uIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQgKnNob3VsZCogYmUgdmlzaWJsZSBhY3Jvc3MgdGhlIGtlcm5lbCwgYnV0IGl0JiMzOTtzIG5vdD8gU29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgZm9yIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gSSYjMzk7bGwganVtcCBpbnRvIGBkcml2ZXJzL25ldC9waHkvcGh5LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiB0aGVyZS4gVGhlcmXigJlzIGdvdCB0byBiZSBhIHJlYXNvbiB0aGlzIGlzIGhhcHBlbmluZywgYW5kIHRoZSBkZWZpbml0aW9uIGluIHRoZSBzb3VyY2UgZmlsZSB3aWxsIGVpdGhlciBjbGFyaWZ5IGl0IG9yIGFsbG93IG1lIHRvIHN0YXJ0IGxvb2tpbmcgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzc5PXN0YXRpYyB2b2lkIHBoeV93cml0ZV9iYXJyaWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM4ODogKiBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gRGlzYWJsZSB0aGUgUEhZIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5MTppbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTEwPXZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUxMjpcdHBoeV9kaXNhYmxlX2ludGVycnVwdHMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVx0ZnJlZV9pcnEocGh5ZGV2LVx1MDAzZWlycSwgcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgaXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7ZXhwb3J0ZWQmIzM0OyBmdW5jdGlvbiBvciB2YXJpYWJsZSwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBpcyBhIGtleSBpbmRpY2F0b3IuIElmIGl0ICp3ZXJlKiBzdGF0aWMsIGl0IHdvdWxkIGJlIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgZmlsZS4gU2luY2UgaXQmIzM5O3Mgbm90LCBpdCBzdWdnZXN0cyB0aGlzIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgKmlzKiBpbnRlbmRlZCBmb3IgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIEdpdmVuIHRoZSBkaXJlY3RvcnkgcGF0aCBgZHJpdmVycy9uZXQvcGh5L2AsIGl0JiMzOTtzIGEgdmVyeSBzdHJvbmcgaHVuY2ggdGhhdCB0aGlzIHRoaW5nIGluIHF1ZXN0aW9uIGlzIGJlaW5nIHVzZWQg4oCTIG9yIGF0IGxlYXN0LCAqY291bGQqIGJlIHVzZWQg4oCTIGJ5IG90aGVyIGZpbGVzIHdpdGhpbiB0aGF0IHNwZWNpZmljIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG5ldHdvcmsgZHJpdmVyIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyByZXF1aXJlcyBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Rpc2FibGVfaW50ZXJydXB0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM4Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODktICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTExLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTMtXHRmcmVlX2lycShwaHlkZXYtXHUwMDNlaXJxLCBwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzY4NT1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzExLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNzEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQSFkgSW50ZXJydXB0cyBhbmQgQ29ubmVjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgUEhZIGludGVycnVwdHMgYW5kIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLiBJdCBzZWVtcyBsaWtlIGBwaHlfcHJvYmVgIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZW50cnkgc2luY2UgaXQgY2FsbHMgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXRzZWxmLCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBzZWVtcyBpbXBvcnRhbnQuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeWxpbmtfYnJpbmd1cF9waHlgLCBzbyB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvaW5nIHRvIGJlIGtleSBmb2N1cyBwb2ludHMgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCk5leHQsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpdHNlbGYsIGBwaHlfaW50ZXJydXB0YCwgaXMgcmVnaXN0ZXJlZCB0aHJvdWdoIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBzbyB0aGF0IGNvbmZpcm1zIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFzIGJlaW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYHBoeV9pbnRlcnJ1cHRgIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGRhdGEuIFRoZW4gdGhlcmUmIzM5O3MgYHBoeV9mcmVlX2ludGVycnVwdGAuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwaHlfZGlzY29ubmVjdGAsIGFsc28gZHVyaW5nIGBwaHlsaW5rX2JyaW5ndXBfcGh5YCBpbiBjYXNlIG9mIGVycm9yLCBhcyB3ZWxsIGFzIGBwaHlsaW5rX3BoeV9jaGFuZ2VgLiBTbyBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSByZWxhdGVkIGNhbGxzIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9mcmVlX2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbiYjMzk7dCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcdFx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk3LVx0XHRcdHBoeWRldi1cdTAwM2VpcnEgPSBQSFlfUE9MTDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTUwMT1FWFBPUlRfU1lNQk9MKHBoeV9yZXF1ZXN0X2ludGVycnVwdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUwNDogKiBwaHlfZnJlZV9pbnRlcnJ1cHQgLSBkaXNhYmxlIGFuZCBmcmVlIGludGVycnVwdCBmb3IgYSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwOS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkzPXZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTgtXHRpZiAocGh5X2ludGVycnVwdF9pc192YWxpZChwaHlkZXYpKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk5Olx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTMwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gUEhZIERpc2Nvbm5lY3Rpb24qKgoKT2theSwgc28gYHBoeV9kaXNjb25uZWN0YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGFyZWEuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQuIExldCYjMzk7cyBzdGFydCBieSBjb21wYXJpbmcgaXQgdG8gYHBoeV9jb25uZWN0X2RpcmVjdGAgYXMgd2VsbC4gVGhlc2UgYXJlIGZvdW5kYXRpb25hbCBQSFkgQVBJIGZ1bmN0aW9ucywgc28gZ2V0dGluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlbSBpcyBrZXkuCgpUbyBnZXQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUsIEkmIzM5O2xsIGFsc28gYWRkIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhbmQgYHBoeV9wcm9iZWAgdG8gdGhlIGxpc3QuIFRob3VnaCwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBgcGh5X3Byb2JlYC4gVGhhdCYjMzk7cyBhIGRyaXZlciBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IEl0IG1pZ2h0IGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCkkgc2hvdWxkIGFsc28gdGFrZSBhIGxvb2sgYXQgYHBoeV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIGJlIHN1cmUgSSBhbSBmYW1pbGlhciB3aXRoIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGZ3bm9kZV9nZXRfcGh5X25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzY3OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzY4MDogKiBwaHlfcHJvYmUgLSBwcm9iZSBhbmQgaW5pdCBhIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzY4MS0gKiBAZGV2OiBkZXZpY2UgdG8gcHJvYmUgYW5kIGluaXRcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM2ODU6c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNjg2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM4NjQ9c3RhdGljIGludCBwaHlfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpuZXdfZHJpdmVyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzg5MC1cdG5ld19kcml2ZXItXHUwMDNlbWRpb2Rydi5kcml2ZXIuYnVzID0gXHUwMDI2bWRpb19idXNfdHlwZTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzg5MTpcdG5ld19kcml2ZXItXHUwMDNlbWRpb2Rydi5kcml2ZXIucHJvYmUgPSBwaHlfcHJvYmU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4OTItXHRuZXdfZHJpdmVyLVx1MDAzZW1kaW9kcnYuZHJpdmVyLnJlbW92ZSA9IHBoeV9yZW1vdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA3CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBIWSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIHRoZSBQSFkgZHJpdmVyIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCwgYHBoeV9jb25uZWN0X2RpcmVjdGAsIGFuZCBgcGh5X2Rpc2Nvbm5lY3RgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIFBIWSBpbnRlcmFjdGlvbnMsIGFuZCBsaWtlbHkgdGhlIHBsYWNlcyB3aGVyZSBhIGRyaXZlciBjYW4gYmVjb21lIHVuYm91bmQsIGFzIHRoZSBwYXRjaCBzdWdnZXN0cy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFBIWUxJQmAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZS4gR2l2ZW4gdGhlIGNoYW5nZSBpcyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCwgYW5kIHRoYXQgZmlsZSYjMzk7cyBjb21waWxhdGlvbiBpcyBjb25kaXRpb25lZCBvbiBgQ09ORklHX1BIWUxJQmAsIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBjYXNlLCBzbyBJIHdpbGwgc3RpY2sgd2l0aCB0aGF0LgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFkZGluZyBOVUxMIGNoZWNrcyBmb3IgYHBoeWRldi0mZ3Q7ZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuICBUaGlzIGlzIHRvIHByZXZlbnQgYSBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHJvb3QgY2F1c2UgaXMgYSByYWNlIGNvbmRpdGlvbjogYSBkcml2ZXIgaXMgYmVpbmcgdW5ib3VuZCAob3IgcGVyaGFwcyBhICYjMzQ7ZHVtbXkmIzM0OyBQSFkgaXMgaW4gdXNlKSAqd2hpbGUqIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLCBhbmQgaXQmIzM5O3MgYWNjZXNzaW5nIHRoZSBkcml2ZXImIzM5O3MgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiB0aGUgZHJpdmVyIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgbmV0d29yayBkcml2ZXJzIHRoYXQgdXNlIGEgUEhZIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgcmVib3VuZC4gVGhlIG51bGwgcG9pbnRlciBwcm90ZWN0aW9uIHdpbGwgbWFrZSB0aGlzIG1vcmUgcm9idXN0LgoKVGhpcyBpcyBhIGdvb2QsIHNvbGlkIGZpeCBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4gU2luY2UgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byB0cmlnZ2VyIGV2ZW4gd2l0aCBhICYjMzQ7ZHVtbXkmIzM0OyBQSFksIEkgd291bGQgY2FsbCBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGluIGVudmlyb25tZW50cyBsaWtlIHZpcnR1YWwgbWFjaGluZXMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGludGVycnVwdC1yZWxhdGVkIHRpbWluZyBpc3N1ZXMuIFNvLCBiYXNlZCBvbiB0aGlzLCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcmVxdWVzdF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2ZyZWVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3JlcXVlc3RfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9mcmVlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtwaHlfY29ubmVjdF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2Rpc2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNvcmUgUEhZIGxpYnJhcnkgKGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCkgYnkgY2hlY2tpbmcgaWYgYHBoeWRldi1cdTAwM2VkcnZgIGlzIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBpdHMgY2FsbGJhY2tzLiBUaGlzIGNhbiBvY2N1ciBpZiBhIFBIWSBkcml2ZXIgaXMgdW5ib3VuZCB3aGlsZSBpbnRlcnJ1cHRzIGFyZSBzdGlsbCBhY3RpdmUgb3IgYmVpbmcgY29uZmlndXJlZC4gVGhlIFBIWSBsaWJyYXJ5IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG5ldHdvcmsgZHJpdmVycyB0aGF0IHV0aWxpemUgUEhZIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggZmNlOWJjN2JlMzMwNC4uNTQzNWY2MmU5ODE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtMTY4LDcgJiM0MzsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpOwogc3RhdGljIGludCBwaHlfY29uZmlnX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGludGVycnVwdHMpCiB7CiAJcGh5ZGV2LSZndDtpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwOwotCWlmIChwaHlkZXYtJmd0O2Rydi0mZ3Q7Y29uZmlnX2ludHIpCiYjNDM7CWlmIChwaHlkZXYtJmd0O2RydiAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cikKIAkJcmV0dXJuIHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cihwaHlkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDM2LDcgJiM0MzsxNDM2LDEwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpCiAJfQogCiAJbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7Ci0JcmV0ID0gcGh5ZGV2LSZndDtkcnYtJmd0O2hhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTsKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O2RydikKJiM0MzsJCXJldCA9IElSUV9OT05FOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBwaHlkZXYtJmd0O2Rydi0mZ3Q7aGFuZGxlX2ludGVycnVwdChwaHlkZXYpOwogCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMwoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gUmVsZXZhbmNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBpbnRyb2R1Y2luZyBgTlVMTGAgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtJmd0O2RydmAgd2l0aGluIHRoZSBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgZnVuY3Rpb25zLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYWltZWQgYXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgcGh5ZGV2LSZndDtkcnZgIGhhcHBlbnMgdG8gYmUgYE5VTExgLgoKTXkgZXhwZXJ0IGludHVpdGlvbiwgY29tYmluZWQgd2l0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSwgdGVsbHMgbWUgdGhpcyBpcyBzb2xlbHkgYSBgTlVMTGAgcG9pbnRlciBpc3N1ZS4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZTsgdGhhdCYjMzk7cyBLTVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycywgb3IgZnJhbmtseSwganVzdCB0aGUga2VybmVsIGNyYXNoaW5nLCB3aWxsIGNhdGNoIHRoZXNlIGBOVUxMYCBkZXJlZmVyZW5jZXMgaW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBwYXRjaC4KClRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBwb3RlbnRpYWwgY3Jhc2gsIG5vdCBhIEtNU0FOLXJlbGF0ZWQgY29uY2Vybi4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb21wbGV4aXRpZXMgdG8gd2FycmFudCBhIHNlY29uZCBsb29rLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDAuNjcyNjY1NzEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjQ4MTUzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICAgIFwicGh5X2ZyZWVfaW50ZXJydXB0XCIsXG4gICAgXCJwaHlfY29ubmVjdF9kaXJlY3RcIixcbiAgICBcInBoeV9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtXFx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDAuNjcyNjczMDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI5MzcwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjM2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jXFxuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xcbiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcXG4ge1xcbiBcXHRwaHlkZXYtXFx1MDAzZWludGVycnVwdHMgPSBpbnRlcnJ1cHRzID8gMSA6IDA7XFxuLVxcdGlmIChwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIpXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWRydiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIpXFxuIFxcdFxcdHJldHVybiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDM2LDcgKzE0MzYsMTAgQEAgc3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdClcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWRydilcXG4rXFx0XFx0cmV0ID0gSVJRX05PTkU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDEuMjE2NjcyMTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwMzE2NjEwNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICAgIFwicGh5X2ZyZWVfaW50ZXJydXB0XCIsXG4gICAgXCJwaHlfY29ubmVjdF9kaXJlY3RcIixcbiAgICBcInBoeV9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNvcmUgUEhZIGxpYnJhcnkgKGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCkgYnkgY2hlY2tpbmcgaWYgYHBoeWRldi1cXHUwMDNlZHJ2YCBpcyBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGNhbGxiYWNrcy4gVGhpcyBjYW4gb2NjdXIgaWYgYSBQSFkgZHJpdmVyIGlzIHVuYm91bmQgd2hpbGUgaW50ZXJydXB0cyBhcmUgc3RpbGwgYWN0aXZlIG9yIGJlaW5nIGNvbmZpZ3VyZWQuIFRoZSBQSFkgbGlicmFyeSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXR3b3JrIGRyaXZlcnMgdGhhdCB1dGlsaXplIFBIWSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xuIHN0YXRpYyBpbnQgcGh5X2NvbmZpZ19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBpbnRlcnJ1cHRzKVxuIHtcbiBcdHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwO1xuLVx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIpXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cilcbiBcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0MzYsNyArMTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbitcdGlmICghcGh5ZGV2LVx1MDAzZWRydilcbitcdFx0cmV0ID0gSVJRX05PTkU7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdChwaHlkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzowMS4yMTY2NzQxMDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzk5OTA1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IFBIWSBEcml2ZXIgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIG51bGwgY2hlY2sgZm9yIGBwaHlkZXYtXHUwMDNlZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIEl0J3MgZml4aW5nIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAsIHN1Z2dlc3RzIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuICpyZWFjaGFibGUqLiBgcGh5X2ludGVycnVwdGAgaXMgb2J2aW91c2x5IGFuIGludGVycnVwdCBoYW5kbGVyLCBhbmQgYHBoeV9jb25maWdfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGludGVycnVwdC4gQm90aCBhcmUgY29yZSBwYXJ0cyBvZiB0aGUgUEhZIGxpYnJhcnkuIEdpdmVuIHRoZSBjZW50cmFsaXR5IG9mIHRoZSBQSFkgbGlicmFyeSwgaXQncyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmsgZHJpdmVycywgYSBrZXkgYXJlYSBvZiBwb3RlbnRpYWwgZXhwbG9pdGF0aW9uLiBUaGlua2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZpcnRpby1uZXQsIGUxMDAwLCBhbmQgb3RoZXIgZW11bGF0ZWQgaGFyZHdhcmUgdXNlIGl0LlxuXG5BaCwgd2FpdCwgUEhZIGRldmljZXMgYXJlICphbHNvKiBjb21tb25seSB1c2VkIGJ5IE1BQyBkcml2ZXJzLCB3aGljaCBzaWduaWZpY2FudGx5IGV4cGFuZHMgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGxvb2tpbmcgcHJvbWlzaW5nLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHRydWUuIFllcCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBkcml2ZXJzIGxpa2UgYG1hY2JgLCBgZmVjYCwgYHN0bW1hY2AsIGFuZCBvdGhlcnMgYWxsIHV0aWxpemUgdGhlIFBIWSBsaWJyYXJ5LiBPa2F5LCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhlbiwgZ2l2ZW4gdGhhdCBpdCdzIGEgZml4IGluIGZ1bmRhbWVudGFsIFBIWSBjb2RlLlxuXG5Ob3cgdG8gZGlnIGEgYml0IGRlZXBlci4gSSBzZWUgdGhhdCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtYWtlIGFjY2VzcyB0cmlja3kuIEhvd2V2ZXIsIGBwaHlfaW50ZXJydXB0YCBpcyBzdGF0aWMgYXMgd2VsbCwgKmJ1dCogaXTigJlzIGFuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgZ2V0cyBpdHMgYWRkcmVzcyBwYXNzZWQgdG8gYHJlcXVlc3RfdGhyZWFkZWRfaXJxYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgZnV6emluZyBzdHJhdGVneS4gU28sIG5vdyBsZXQncyBnbyBiYWNrIGFuZCBleGFtaW5lIGBwaHlfY29uZmlnX2ludGVycnVwdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxMC4wMTY1ODIxNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzY4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25maWdfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTYxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjI6ICogcGh5X2NvbmZpZ19pbnRlcnJ1cHQgLSBjb25maWd1cmUgdGhlIFBIWSBkZXZpY2UgZm9yIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0c1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNjMtICogQHBoeWRldjogdGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjg6c3RhdGljIGludCBwaHlfY29uZmlnX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGludGVycnVwdHMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTM5MT1pbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTUtXFx0LyogRGlzYWJsZSBQSFkgaW50ZXJydXB0cyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzk2OlxcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDUyPXN0YXRpYyBpbnQgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTMte1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDU0OlxcdHJldHVybiBwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRU5BQkxFRCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxMC4xNDc5NTYyMjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUwMTIzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBhbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIHR3byBmdW5jdGlvbnMsIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCwgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIG1vZHVsZS4gU3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGluZGljYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIE15IGdvYWwgbm93IGlzIHRvIHRyYWNrIGRvd24gYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSB0d28uXG5cbkxldCdzIHNlZeKApiBJJ3ZlIHNwb3R0ZWQgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGFuZCBgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzYC4gQWhhISBUaGV5IGJvdGggY2FsbCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgLiBUaGF0IG1ha2VzIHNlbnNlOyBkaXNhYmxpbmcgb3IgZW5hYmxpbmcgaW50ZXJydXB0cyB3b3VsZCBsaWtlbHkgaW52b2x2ZSByZWNvbmZpZ3VyaW5nIHRoZW0uIFRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiByaWdodCB0aGVyZS5cblxuTm93LCBJIHNlZSB0aGF0IGBwaHlfaW50ZXJydXB0YCBpdHNlbGYgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgcmVxdWVzdF90aHJlYWRlZF9pcnFgIHdpdGhpbiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YC4gVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHNldHVwIOKAkyBsaW5raW5nIHRoZSBwaHlzaWNhbCBsYXllciBpbnRlcnJ1cHQgdG8gdGhlIGtlcm5lbCdzIGludGVycnVwdCBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjE1LjI5ODA4MjQ2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MDM5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzOTE9aW50IHBoeV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDA0LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDA1OiAqIHBoeV9pbnRlcnJ1cHQgLSBQSFkgaW50ZXJydXB0IGhhbmRsZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQwNi0gKiBAaXJxOiBpbnRlcnJ1cHQgbGluZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0MTAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0MTE6c3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdClcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ4Mj12b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0ODY6XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGh5ZGV2LVxcdTAwM2VpcnEsIE5VTEwsIHBoeV9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODctXFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjE1LjQyMjg0MzIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzkzMzMxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEludGVycnVwdCBIYW5kbGluZyBpbiBQSFkgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaW50ZXJydXB0IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgUEhZIGRyaXZlci4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgYWNxdWlyaW5nIGFuZCBlbmFibGluZyB0aGUgaW50ZXJydXB0IGxpbmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHByb3Blcmx5IGNvbmZpZ3VyZWQ/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBpZiB0aGUgcmVxdWVzdCBmYWlscz9cblxuRm9sbG93aW5nIHRoYXQsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBUaGlzIGlzIHdoZXJlIHdlIGRlLXJlZ2lzdGVyIGFuZCBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQsIHNvIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQncyBkb2luZyBwcmVjaXNlbHkgd2hhdCdzIGV4cGVjdGVkLiBJcyBpdCBhIGNsZWFuIHVuLXJlZ2lzdHJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIGludGVycnVwdHMgaWYgdGhlIGRldmljZSBpc24ndCBoYW5kbGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBpbnRlcnJ1cHQtcmVsYXRlZCBzdGF0ZSB0cmFuc2l0aW9ucyB0aGF0IGFyZSBza2lwcGVkIGR1cmluZyB0aGlzIHN0YWdlLCBiZWNhdXNlIHRob3NlIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zIHRvby4gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZSBpcyBjcml0aWNhbCwgc28gYSBjbG9zZSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxOS45NjIxNzg5MTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDM0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NjY9c3RhdGljIGludCBwaHlfdXBkYXRlX3N0YXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ3NTogKiBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQgLSByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3Ni0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDgyOnZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MjAuMTczNjE4NzQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1ODE4MDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24uIEl0J3MgdGhlIHVzdWFsIHN1c3BlY3QgaW4gdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLCB5b3Uga25vdywgd2hlbiB5b3UncmUgdHJvdWJsZXNob290aW5nIFBIWS1yZWxhdGVkIGludGVycnVwdCBpc3N1ZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVycnVwdHMgYXJlIGNvcnJlY3RseSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IHRoZSByaWdodCBwb2ludHMgaW4gdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIHJldmVhbCBpZiB0aGUgaW50ZXJydXB0IGRpc2FibGluZyBsb2dpYyBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgb3IgaWYgdGhlcmUncyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtaXNzZWQgY2FsbC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCdzIGdldHRpbmcgY2FsbGVkLCBhbmQgaWYgaXQgaXMsIHdoZW4gYW5kIHdoZXJlLCByZWxhdGl2ZSB0byBvdGhlciBjcml0aWNhbCBvcGVyYXRpb25zIGxpa2UgaW5pdGlhbGl6YXRpb24sIGxpbmsgc3RhdHVzIGNoYW5nZXMsIGFuZCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgdGhlIHJvb3QgY2F1c2UsIG9yLCBhdCBsZWFzdCwgaWYgaXQgbWlnaHQgYmUgYSBwYXJ0IG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjI2LjMzMTgwMzI3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMzE1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoyNi40MTg4NDExMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NDI1OTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW50ZXJydXB0IEhhbmRsZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBmb3IgdGhlIFBIWS4gVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhvc2UgYXJlIHRoZSB0eXBpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgaW50ZXJydXB0IHJlc291cmNlcywgcmlnaHQ/IEFsbG9jYXRlIGFuZCByZWxlYXNlLiBOb3csIEkgdmFndWVseSByZWNhbGwgc2VlaW5nIGEgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uIHNvbWV3aGVyZS4gSXQncyBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgcHVibGljIEFQSSBmb3IgY29udHJvbGxpbmcgaW50ZXJydXB0cy4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBleHBvcnRlZCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBhbmQgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjMyLjYxMzEwNDQ2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTQ3OTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MzIuNzUzNjYxOTY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAwMDY0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIEV4cG9ydCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IHRoaXMgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyBhbiBleHBvcnRlZCBzeW1ib2wsIHJpZ2h0PyBHaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyBpbiwgdGhhdCdzIGFsbW9zdCBhIGdpdmVuLiBCdXQsIGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgc3R1ZmYgbGlrZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBhdCB0aGUgUEhZIGxldmVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGFjdHVhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHdoZXJldmVyIEknbSBwbGFubmluZyB0byB1c2UgaXQuIE5vIHBvaW50IGluIGNvbnRpbnVpbmcgZG93biB0aGlzIHBhdGggaWYgaXQncyBub3QgZXhwb3J0ZWQuIFNvLCB5ZWFoLCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc3ltYm9sIGlzIGFjdHVhbGx5IHZpc2libGUuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuIEl0IGNvdWxkIGJlIGluIHRoZSBrZXJuZWwgb3IgYW5vdGhlciBmaXJtd2FyZSBpbWFnZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjM2Ljg4MzY3MjYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MDk1NDkxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjQyLjk1NDYzNTg0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk0MDk2Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXYWl0LCBUaGF0J3MgRXhwb3J0ZWQ/KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhpcyBjb2RlLCBhbmQgSSBzdHVtYmxlZCBhY3Jvc3MgYSBjYWxsIHRvIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gTm93LCB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlICpsb29rcyogcHJldHR5IHN0YW5kYXJkIGZvciBhIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9uLiBUaGUgcmVhbCBzdXJwcmlzZSBpcyB0aGF0IGl0IGFwcGVhcnMgdG8gYmUgKmV4cG9ydGVkKiBmcm9tIHRoZSBrZXJuZWwncyBQSFkgc3Vic3lzdGVtLiBXaHkgaXMgdGhhdD8gSSdkIHVzdWFsbHkgZXhwZWN0IHRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBpbnRlcnJ1cHQgZGlzYWJsaW5nIHJvdXRpbmVzIHRvIGJlIGVpdGhlciBzdGF0aWMsIG9yLCBhdCBtb3N0LCBhdmFpbGFibGUgdmlhIGEgdmVyeSBzcGVjaWZpYyBhbmQgd2VsbC1kZWZpbmVkIEFQSSB3aXRoaW4gYSBkcml2ZXIgY29udGV4dC4gRXhwb3J0aW5nIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBzdWdnZXN0cyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgbW9yZSBicm9hZGx5IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlIG9yIHJlYXNvbiBmb3Igd2h5IGl0J3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbiBjaG9pY2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzIGJyb2FkZXIgYXZhaWxhYmlsaXR5PyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIFBIWSBzdWJzeXN0ZW0gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6NDcuMTQ4NzM1Mzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwMDc4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzo0Ny4yNzA3NDg5MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTIwMzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQSFkgSW50ZXJydXB0cyBpbiBgcGh5LmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBIWSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBkaXNhYmxlZCBhdCB0aGlzIGxldmVsLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBpbnRlcnJ1cHQgY29udHJvbCBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggbGluayBzdGF0dXMgY2hhbmdlcyBvciBwb3dlciBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgcGxhY2Ugd2hlcmUgd2UgY2FuIHR3ZWFrIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQgYW5kIHVubWFza2VkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSSdtIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciwgcmlnaHQ/IFNvLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIGhvdyB0aGV5J3JlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IHN0YXR1cy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gdGhlcmUgb3IgaWYgaXQgaXMgdG9vIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUuIEkgd2lsbCBsb29rIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxhdGVkLCBhbmQgcGVyaGFwcyBvdGhlciBzaW1pbGFyIHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgaG93IHRoZXkgZG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzo1My41MTU5NTU2OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdCAqL1xcbjEzOTE6XFx0aW50IHBoeV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMzkyOlxcdHtcXG4xMzkzOlxcdFxcdGludCBlcnI7XFxuMTM5NDpcXHRcXG4xMzk1OlxcdFxcdC8qIERpc2FibGUgUEhZIGludGVycnVwdHMgKi9cXG4xMzk2OlxcdFxcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XFxuMTM5NzpcXHRcXHRpZiAoZXJyKVxcbjEzOTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzk5OlxcdFxcbjE0MDA6XFx0XFx0cGh5X3dyaXRlX2JhcnJpZXIocGh5ZGV2KTtcXG4xNDAxOlxcdFxcdHJldHVybiAwO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHQvKipcXG4xNDA1OlxcdCAqIHBoeV9pbnRlcnJ1cHQgLSBQSFkgaW50ZXJydXB0IGhhbmRsZXJcXG4xNDA2OlxcdCAqIEBpcnE6IGludGVycnVwdCBsaW5lXFxuMTQwNzpcXHQgKiBAcGh5X2RhdDogcGh5X2RldmljZSBwb2ludGVyXFxuMTQwODpcXHQgKlxcbjE0MDk6XFx0ICogRGVzY3JpcHRpb246IEhhbmRsZSBQSFkgaW50ZXJydXB0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjUzLjUxNjExMTkzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzE3MDg0ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBJc3N1ZSoqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGluIGEgcGh5c2ljYWwgbGF5ZXIgZHJpdmVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBzb21ldGhpbmcgaXNuJ3QgZXhwb3J0ZWQuIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgICppcyogZXhwb3J0ZWQsIHRoYXQncyBnb29kLCBidXQgc29tZXRoaW5nIGVsc2UgaXNuJ3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBcInNvbWV0aGluZyBlbHNlXCIgaXMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggaG93IHRoZSBpbnRlcnJ1cHQgaXMgc2V0IHVwIG9yIHRvcm4gZG93bi5cblxuTGV0J3Mgc3RhcnQgd2l0aCB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQtZnJlZWluZyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YC4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgbWlzc2luZyBleHBvcnQgaXMgaW4gYSByZWxhdGVkIGNvbXBvbmVudC4gSXMgaXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgaGFuZGxlciBpdHNlbGYsIG9yIHNvbWUgc2V0dXAgZnVuY3Rpb24sIG1heWJlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gc3BvdCB0aGUgZGlzY29ubmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW50ZXJydXB0IGZsb3cgdG8gdHJhY2sgZG93biB0aGlzIGxhY2sgb2YgZXhwb3J0IGFuZCB3aGF0IGl0IG1pZ2h0IG1lYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjAwLjgzMzE5OTkwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NDYzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk1LVxcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIkNhbid0IGVuYWJsZSBpbnRlcnJ1cHQsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcXHRcXHRcXHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5Ny1cXHRcXHRcXHRwaHlkZXYtXFx1MDAzZWlycSA9IFBIWV9QT0xMO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MDE9RVhQT1JUX1NZTUJPTChwaHlfcmVxdWVzdF9pbnRlcnJ1cHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MDQ6ICogcGh5X2ZyZWVfaW50ZXJydXB0IC0gZGlzYWJsZSBhbmQgZnJlZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTA1LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTA6dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxNC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODowMS41MDc2NjgyMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5NTQ2MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipJbnRlcnJ1cHQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQSFkgZHJpdmVyIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUgZm9yIGludGVycnVwdCBtYW5hZ2VtZW50LiBUaG9zZSBhcmUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgdGhhdCdzIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZ29pbmcgdG8gY2FsbCB0byBjbGFpbSBhbmQgcmVsZWFzZSB0aGUgaW50ZXJydXB0IGxpbmVzLiBJJ20gYWxzbyBiZXR0aW5nIGBwaHlfc3RhcnRgIGFuZCBgcGh5X3N0b3BgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBwaGFzZXMuXG5cblRoZSBjcml0aWNhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJydXB0IGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGhlcmUuIExldCdzIHN0YXJ0IHdpdGggYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAg4oCTIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCouIFRoYXQnbGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGludGVycnVwdHMgYXJlIGluaXRpYWxseSBlbmFibGVkLCBob3cgdGhlIGRyaXZlcidzIGxpbmtlZCBpbnRvIHRoZSBzeXN0ZW0sIGFuZCB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHN0YXJ0cy4gRGlnZ2luZyB0aHJvdWdoIHRob3NlIGNhbGwgc2l0ZXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MDYuMzAzMTMxODcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NDk0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlcXVlc3RfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NjY9c3RhdGljIGludCBwaHlfdXBkYXRlX3N0YXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ3NTogKiBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQgLSByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3Ni0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDgyOnZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIyNT1pbnQgcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzktXFx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNDA6XFx0XFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjQxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDg2PXN0YXRpYyBpbnQgcGh5bGlua19icmluZ3VwX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxOTctXFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxOTg6XFx0XFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODowNi40Mzc2ODY1MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NzI2MjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQSFkgSW50ZXJydXB0IEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5bGlua19icmluZ3VwX3BoeWAgYm90aCBjYWxsIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLiBUaGF0J3MgYSBrZXkgcG9pbnQsIG1lYW5pbmcgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgbmV0d29yayBpbnRlcmZhY2UgUEhZIGJyaW5ndXAsIHdoaWNoIG1ha2VzIHRoaXMgdnVsbmVyYWJpbGl0eSBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIFBIWSBjb2RlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSBnb29kIGludmVzdG1lbnQuXG5cblRoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVyZSBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoZW4gd291bGQgYHBoeWRldi1cdTAwM2VkcnZgICpiZSogTlVMTD8gSSdtIHRoaW5raW5nLi4uIHBlcmhhcHMgZHVyaW5nIGEgUEhZIGRldmljZSB1bmJpbmRpbmcgc2NlbmFyaW8sIHdoZXJlIHRoZSBkcml2ZXIgaXMgYWN0aXZlbHkgYmVpbmcgdW5ib3VuZCB3aGlsZSBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZyBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjb25maWd1cmVkLiBBbm90aGVyIHBvc3NpYmlsaXR5IG1pZ2h0IGJlIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYmVmb3JlIHRoZSBkcml2ZXIgaGFzIGV2ZW4gc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIHRoZSBQSFkuIEVpdGhlciB3YXksIGl0J3MgYSBmdW5jdGlvbmFsIGZpeCBpbiBjcnVjaWFsIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmdXJ0aGVyLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBgQ09ORklHX1BIWUxJQmAgbG9va3MgbGlrZSB0aGUgZnVuZGFtZW50YWwgY29yZSBjb25maWcgbmVlZGVkIGZvciB0aGUgUEhZIGxpYnJhcnksIHdoaWNoIHNlZW1zIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjEyLjgyNDk1MzA4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTM4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjEzLjA2ODA5NzQ2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE0MDg2NTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBQSFlMSUIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBjb25maXJtIGlmIGBQSFlMSUJgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzay4gQWgsIHllcywgaXQgYXBwZWFycyBgUEhZTElCYCBpcyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZyBoZXJlIOKAkyB0aGUgbWFpbiBkcml2ZXIsIGlmIHlvdSB3aWxsLiBOb3csIGxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aGF0IHdlIHNob3VsZCBrbm93IGFib3V0PyBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBjb21waWxlZCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MjMuMjA4OTY2MTQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4NTQ0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTEyPWVuZGlmXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXFx0XFx0Kz0gc3dwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNS1saWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVxcdCs9IHBoeV9sZWRfdHJpZ2dlcnMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19QSFlMSU5LKVxcdFxcdCs9IHBoeWxpbmsub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IGxpYnBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19kZXZyZXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BRElOMTEwMF9QSFkpXFx0Kz0gYWRpbjExMDAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfQURJTjExNDBfUEhZKVxcdCs9IGFkaW4xMTQwLXBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMzLW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcXHQrPSBhaXJfYW44ODAxLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfRFA4M1RHNzIwX1BIWSlcXHQrPSBkcDgzdGc3MjAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfRklYRURfUEhZKVxcdFxcdCs9IGZpeGVkX3BoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTY3LW9iai0kKENPTkZJR19JQ1BMVVNfUEhZKVxcdCs9IGljcGx1cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjIzLjQyMDgzNjE1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY2NzE5ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUEhZIEludGVycnVwdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyB0aGF0IGBDT05GSUdfUEhZTElCYCBpcywgYXMgZXhwZWN0ZWQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR29vZC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgaW4gb24gdGhlIHN5bWJvbHMgaW52b2x2ZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZXNlIHR3byBmdW5jdGlvbnMuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uLCBpdCBzZWVtcy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCogYW5kIGludGVyYWN0IHdpdGggdGhlc2UgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zPyBJJ20gc2VlaW5nIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCwgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLCBhbmQuLi53YWl0IGEgbWludXRlLi4uIGlzIGBwaHlfZW5hYmxlX2ludGVycnVwdHNgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IGl0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGV0YWlsIGlmIGl0J3Mgbm90LiBHb3R0YSBtYWtlIHN1cmUgdGhlIHBhdGNoIGlzbid0IGJyZWFraW5nIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoYXQgZnVuY3Rpb24gaXMgbm90IG1lYW50IHRvIGJlIHB1YmxpYy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSB0byBhc3Nlc3MgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODoyOC40ODc1NjA1MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDEwMzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZW5hYmxlX2ludGVycnVwdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDExPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ0OC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ0OTogKiBwaHlfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGUgdGhlIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ1MC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ1MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ1MjpzdGF0aWMgaW50IHBoeV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5My1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDk0OlxcdFxcdGlmIChwaHlfZW5hYmxlX2ludGVycnVwdHMocGh5ZGV2KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk1LVxcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIkNhbid0IGVuYWJsZSBpbnRlcnJ1cHQsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MjguNjg3NjcyNDYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUzMTg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJydXB0IE1hbmFnZW1lbnQgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhcmUgbWFuYWdlZCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgSSBzZWUgaXQncyBsaW5rZWQgZGlyZWN0bHkgdG8gYHBoeV9lbmFibGVfaW50ZXJydXB0c2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHJlcXVlc3QgdGhlIGludGVycnVwdCwgZW5hYmxlIHRoZSBoYXJkd2FyZS4gTmF0dXJhbGx5LCB0aGUgb3Bwb3NpdGUgc2VlbXMgdG8gYmUgdHJ1ZSB0b28gLSBgcGh5X2ZyZWVfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAsIGFuZCB0aGF0IGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggY2FsbGluZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIE15IGd1dCBmZWVsaW5nIGlzIHRoZXNlIGFyZSBwcm9iYWJseSB2ZXJ5IHNpbXBsZSB3cmFwcGVycyBhcm91bmQgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgbWFuaXB1bGF0aW9ucy4gSSBzaG91bGQgY2hlY2sgdGhvdWdoLCBzbyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBpcyBwcm9wZXJseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aGVyZSBpdCBuZWVkcyB0byBiZS4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHVwIGNvcnJlY3RseS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODozMy4wMTI5OTQzMDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDY4MjkxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjMzLjE5MzY4Nzk5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI3MjY0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBydW5uaW5nIHRocm91Z2ggYSBuZXR3b3JraW5nIGtlcm5lbCBtb2R1bGU6XG5cbioqRGVidWdnaW5nIGFuIFVuZXhwb3J0ZWQgRnVuY3Rpb24qKlxuXG5IbW0sIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQuIFRoYXQncyBpbW1lZGlhdGVseSBvZGQuIFdhaXQgYSBtaW51dGUsIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4uLiBpdCdzIG5vdCBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQgKnNob3VsZCogYmUgdmlzaWJsZSBhY3Jvc3MgdGhlIGtlcm5lbCwgYnV0IGl0J3Mgbm90PyBTb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIExldCdzIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgZm9yIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gSSdsbCBqdW1wIGludG8gYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIHRoZXJlLiBUaGVyZeKAmXMgZ290IHRvIGJlIGEgcmVhc29uIHRoaXMgaXMgaGFwcGVuaW5nLCBhbmQgdGhlIGRlZmluaXRpb24gaW4gdGhlIHNvdXJjZSBmaWxlIHdpbGwgZWl0aGVyIGNsYXJpZnkgaXQgb3IgYWxsb3cgbWUgdG8gc3RhcnQgbG9va2luZyBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MzkuMTIwOTU2MDk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1MDU5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODozOS4yODg0Njc0MzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5OTQ3NTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkludGVybmFsIENvZGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGUsIGFuZCBpdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBcImV4cG9ydGVkXCIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG1lYW5pbmcgaXQncyBsaWtlbHkgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGlzIGEga2V5IGluZGljYXRvci4gSWYgaXQgKndlcmUqIHN0YXRpYywgaXQgd291bGQgYmUgbGltaXRlZCB0byB0aGUgY3VycmVudCBmaWxlLiBTaW5jZSBpdCdzIG5vdCwgaXQgc3VnZ2VzdHMgdGhpcyBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5ICppcyogaW50ZW5kZWQgZm9yIHVzZSBlbHNld2hlcmUgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBHaXZlbiB0aGUgZGlyZWN0b3J5IHBhdGggYGRyaXZlcnMvbmV0L3BoeS9gLCBpdCdzIGEgdmVyeSBzdHJvbmcgaHVuY2ggdGhhdCB0aGlzIHRoaW5nIGluIHF1ZXN0aW9uIGlzIGJlaW5nIHVzZWQg4oCTIG9yIGF0IGxlYXN0LCAqY291bGQqIGJlIHVzZWQg4oCTIGJ5IG90aGVyIGZpbGVzIHdpdGhpbiB0aGF0IHNwZWNpZmljIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG5ldHdvcmsgZHJpdmVyIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyByZXF1aXJlcyBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODo0NC45ODc5NDYyMTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY3NjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjg1PXN0YXRpYyBpbnQgcGh5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6NDUuMTQ1NjMyMjg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODU5NDg5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUEhZIEludGVycnVwdHMgYW5kIENvbm5lY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhbmQgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQuIEl0IHNlZW1zIGxpa2UgYHBoeV9wcm9iZWAgaXMgYSBjcml0aWNhbCBwb2ludCBvZiBlbnRyeSBzaW5jZSBpdCBjYWxscyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIFRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBmb2N1cyBzeW1ib2wuIE5vdywgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVycnVwdCByZXF1ZXN0IGl0c2VsZiwgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgc2VlbXMgaW1wb3J0YW50LiBJdCdzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeWxpbmtfYnJpbmd1cF9waHlgLCBzbyB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvaW5nIHRvIGJlIGtleSBmb2N1cyBwb2ludHMgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5OZXh0LCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBgcGh5X2ludGVycnVwdGAsIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgc28gdGhhdCBjb25maXJtcyBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBhcyBiZWluZyBhIGNvcmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHBoeV9pbnRlcnJ1cHRgIHRvIHNlZSB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgZGF0YS4gVGhlbiB0aGVyZSdzIGBwaHlfZnJlZV9pbnRlcnJ1cHRgLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBwaHlfZGlzY29ubmVjdGAsIGFsc28gZHVyaW5nIGBwaHlsaW5rX2JyaW5ndXBfcGh5YCBpbiBjYXNlIG9mIGVycm9yLCBhcyB3ZWxsIGFzIGBwaHlsaW5rX3BoeV9jaGFuZ2VgLiBTbyBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSByZWxhdGVkIGNhbGxzIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjUzLjMzMTU4NzQxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDU3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJDYW4ndCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0OTY6XFx0XFx0XFx0cGh5X2ZyZWVfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTctXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VpcnEgPSBQSFlfUE9MTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTAxPUVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTA0OiAqIHBoeV9mcmVlX2ludGVycnVwdCAtIGRpc2FibGUgYW5kIGZyZWUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTA5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTE1OkVYUE9SVF9TWU1CT0wocGh5X2ZyZWVfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI5Mz12b2lkIHBoeV9kaXNjb25uZWN0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTgtXFx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyOTk6XFx0XFx0cGh5X2ZyZWVfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODo1My40OTg2NTE1ODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1MTQ2Nzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBQSFkgRGlzY29ubmVjdGlvbioqXG5cbk9rYXksIHNvIGBwaHlfZGlzY29ubmVjdGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQuIExldCdzIHN0YXJ0IGJ5IGNvbXBhcmluZyBpdCB0byBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhcyB3ZWxsLiBUaGVzZSBhcmUgZm91bmRhdGlvbmFsIFBIWSBBUEkgZnVuY3Rpb25zLCBzbyBnZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVtIGlzIGtleS5cblxuVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLCBJJ2xsIGFsc28gYWRkIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhbmQgYHBoeV9wcm9iZWAgdG8gdGhlIGxpc3QuIFRob3VnaCwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBgcGh5X3Byb2JlYC4gVGhhdCdzIGEgZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCByaWdodD8gSXQgbWlnaHQgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5JIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IGBwaHlfcHJvYmVgIGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCB0byBiZSBzdXJlIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjU5LjA1MDEyMjg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMTk2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGZ3bm9kZV9nZXRfcGh5X25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNjc5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzY4MDogKiBwaHlfcHJvYmUgLSBwcm9iZSBhbmQgaW5pdCBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODEtICogQGRldjogZGV2aWNlIHRvIHByb2JlIGFuZCBpbml0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNjg1OnN0YXRpYyBpbnQgcGh5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zODY0PXN0YXRpYyBpbnQgcGh5X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzg5MC1cXHRuZXdfZHJpdmVyLVxcdTAwM2VtZGlvZHJ2LmRyaXZlci5idXMgPSBcXHUwMDI2bWRpb19idXNfdHlwZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM4OTE6XFx0bmV3X2RyaXZlci1cXHUwMDNlbWRpb2Rydi5kcml2ZXIucHJvYmUgPSBwaHlfcHJvYmU7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODkyLVxcdG5ld19kcml2ZXItXFx1MDAzZW1kaW9kcnYuZHJpdmVyLnJlbW92ZSA9IHBoeV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjU5LjE4ODI0ODM4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEwMDM2NTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgUEhZIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgYHBoeV9mcmVlX2ludGVycnVwdGAsIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgYHBoeV9kaXNjb25uZWN0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgYW5kIGV4aXQgcG9pbnRzIGZvciBQSFkgaW50ZXJhY3Rpb25zLCBhbmQgbGlrZWx5IHRoZSBwbGFjZXMgd2hlcmUgYSBkcml2ZXIgY2FuIGJlY29tZSB1bmJvdW5kLCBhcyB0aGUgcGF0Y2ggc3VnZ2VzdHMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBQSFlMSUJgIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gbmVlZGVkIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjaGFuZ2UgaXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIGFuZCB0aGF0IGZpbGUncyBjb21waWxhdGlvbiBpcyBjb25kaXRpb25lZCBvbiBgQ09ORklHX1BIWUxJQmAsIHRoYXQncyBsaWtlbHkgdGhlIGNhc2UsIHNvIEkgd2lsbCBzdGljayB3aXRoIHRoYXQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGVzc2VudGlhbGx5IGFkZGluZyBOVUxMIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIHdpdGhpbiB0aGUgYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIGZ1bmN0aW9ucy4gIFRoaXMgaXMgdG8gcHJldmVudCBhIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBUaGUgcm9vdCBjYXVzZSBpcyBhIHJhY2UgY29uZGl0aW9uOiBhIGRyaXZlciBpcyBiZWluZyB1bmJvdW5kIChvciBwZXJoYXBzIGEgXCJkdW1teVwiIFBIWSBpcyBpbiB1c2UpICp3aGlsZSogaW50ZXJydXB0cyBhcmUgc3RpbGwgYWN0aXZlIG9yIGJlaW5nIGNvbmZpZ3VyZWQsIGFuZCBpdCdzIGFjY2Vzc2luZyB0aGUgZHJpdmVyJ3MgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiB0aGUgZHJpdmVyIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgbmV0d29yayBkcml2ZXJzIHRoYXQgdXNlIGEgUEhZIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgcmVib3VuZC4gVGhlIG51bGwgcG9pbnRlciBwcm90ZWN0aW9uIHdpbGwgbWFrZSB0aGlzIG1vcmUgcm9idXN0LlxuXG5UaGlzIGlzIGEgZ29vZCwgc29saWQgZml4IGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTaW5jZSB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgZXZlbiB3aXRoIGEgXCJkdW1teVwiIFBIWSwgSSB3b3VsZCBjYWxsIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgdmlydHVhbCBtYWNoaW5lcywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJydXB0LXJlbGF0ZWQgdGltaW5nIGlzc3Vlcy4gU28sIGJhc2VkIG9uIHRoaXMsIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIwNywiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MTEuMjg4NjE2NjM2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NjYxMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfcmVxdWVzdF9pbnRlcnJ1cHRcIixcbiAgICBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICAgIFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfcmVxdWVzdF9pbnRlcnJ1cHRcIixcbiAgICBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICAgIFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MTEuNTMzMjk2MjkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NzUwNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM5OjExLjUzNDYxNzM4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM4NjE3OTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVxcdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xuIHN0YXRpYyBpbnQgcGh5X2NvbmZpZ19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBpbnRlcnJ1cHRzKVxuIHtcbiBcdHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwO1xuLVx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIpXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cilcbiBcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0MzYsNyArMTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbitcdGlmICghcGh5ZGV2LVx1MDAzZWRydilcbitcdFx0cmV0ID0gSVJRX05PTkU7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdChwaHlkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozOToxMS41MzQ2MjAwMzFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzODYxNDc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBSZWxldmFuY2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBpbnRyb2R1Y2luZyBgTlVMTGAgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtXHUwMDNlZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBwaHlkZXYtXHUwMDNlZHJ2YCBoYXBwZW5zIHRvIGJlIGBOVUxMYC5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiwgY29tYmluZWQgd2l0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSwgdGVsbHMgbWUgdGhpcyBpcyBzb2xlbHkgYSBgTlVMTGAgcG9pbnRlciBpc3N1ZS4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyB0aGF0J3MgS01TQU4ncyBkb21haW4uIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBvciBmcmFua2x5LCBqdXN0IHRoZSBrZXJuZWwgY3Jhc2hpbmcsIHdpbGwgY2F0Y2ggdGhlc2UgYE5VTExgIGRlcmVmZXJlbmNlcyBpbiB0aGUgYWJzZW5jZSBvZiB0aGlzIHBhdGNoLlxuXG5UaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgcG90ZW50aWFsIGNyYXNoLCBub3QgYSBLTVNBTi1yZWxhdGVkIGNvbmNlcm4uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBjb21wbGV4aXRpZXMgdG8gd2FycmFudCBhIHNlY29uZCBsb29rLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjMsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MjEuOTIwNzcyMzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cXHUwMDNlZHJ2YCBpbiBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQga2VybmVsIGNyYXNoIGhhbmRsZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVxcdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2pf59[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 14:03:23 +0000 UTC FinishedAt: 2026-08-24 14:39:24 +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": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB" ], "series_id": "e88180b7-1b50-452f-ac41-1af2aaaed4e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_request_interrupt", "phy_free_interrupt", "phy_connect_direct", "phy_disconnect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9yZXF1ZXN0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtwaHlfZnJlZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2Nvbm5lY3RfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1ZDViOWM1YmFlMWVhNTBlOTEyZmY0ZWYyMzk5NTk4ZTQ0ZDU5NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNDozNjo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICYjNDM7MTY4LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5X2dldF9yYXRlX21hdGNoaW5nKTtcbiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcbiB7XG4gXHRwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9IGludGVycnVwdHMgPyAxIDogMDtcbi1cdGlmIChwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWNvbmZpZ19pbnRyKVxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlZHJ2IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWNvbmZpZ19pbnRyKVxuIFx0XHRyZXR1cm4gcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cihwaHlkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQzNiw3ICYjNDM7MTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VkcnYpXG4mIzQzO1x0XHRyZXQgPSBJUlFfTk9ORTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcmVxdWVzdF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2ZyZWVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1ZDViOWM1YmFlMWVhNTBlOTEyZmY0ZWYyMzk5NTk4ZTQ0ZDU5NDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNDozNjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBmY2U5YmM3YmUzMzA0Li41NDM1ZjYyZTk4MTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC0xNjgsNyAmIzQzOzE2OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7CiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cykKIHsKIAlwaHlkZXYtJmd0O2ludGVycnVwdHMgPSBpbnRlcnJ1cHRzID8gMSA6IDA7Ci0JaWYgKHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cikKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7ZHJ2ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtkcnYtJmd0O2NvbmZpZ19pbnRyKQogCQlyZXR1cm4gcGh5ZGV2LSZndDtkcnYtJmd0O2NvbmZpZ19pbnRyKHBoeWRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTE0MzYsNyAmIzQzOzE0MzYsMTAgQEAgc3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdCkKIAl9CiAKIAltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKLQlyZXQgPSBwaHlkZXYtJmd0O2Rydi0mZ3Q7aGFuZGxlX2ludGVycnVwdChwaHlkZXYpOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7ZHJ2KQomIzQzOwkJcmV0ID0gSVJRX05PTkU7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHBoeWRldi0mZ3Q7ZHJ2LSZndDtoYW5kbGVfaW50ZXJydXB0KHBoeWRldik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKIAogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eTogUEhZIERyaXZlciBOdWxsIFBvaW50ZXIgRGVyZWZlcmVuY2UqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvcGh5LmNgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgbnVsbCBjaGVjayBmb3IgYHBoeWRldi0mZ3Q7ZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IEl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCwgc3VnZ2VzdHMgdGhlc2UgYXJlIHRoZSBrZXkgYXJlYXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuICpyZWFjaGFibGUqLiBgcGh5X2ludGVycnVwdGAgaXMgb2J2aW91c2x5IGFuIGludGVycnVwdCBoYW5kbGVyLCBhbmQgYHBoeV9jb25maWdfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGludGVycnVwdC4gQm90aCBhcmUgY29yZSBwYXJ0cyBvZiB0aGUgUEhZIGxpYnJhcnkuIEdpdmVuIHRoZSBjZW50cmFsaXR5IG9mIHRoZSBQSFkgbGlicmFyeSwgaXQmIzM5O3MgdXNlZCBieSBudW1lcm91cyBuZXR3b3JrIGRyaXZlcnMsIGEga2V5IGFyZWEgb2YgcG90ZW50aWFsIGV4cGxvaXRhdGlvbi4gVGhpbmtpbmcgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB2aXJ0aW8tbmV0LCBlMTAwMCwgYW5kIG90aGVyIGVtdWxhdGVkIGhhcmR3YXJlIHVzZSBpdC4KCkFoLCB3YWl0LCBQSFkgZGV2aWNlcyBhcmUgKmFsc28qIGNvbW1vbmx5IHVzZWQgYnkgTUFDIGRyaXZlcnMsIHdoaWNoIHNpZ25pZmljYW50bHkgZXhwYW5kcyB0aGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgbG9va2luZyBwcm9taXNpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLiBZZXAsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgZHJpdmVycyBsaWtlIGBtYWNiYCwgYGZlY2AsIGBzdG1tYWNgLCBhbmQgb3RoZXJzIGFsbCB1dGlsaXplIHRoZSBQSFkgbGlicmFyeS4gT2theSwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoZW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBmaXggaW4gZnVuZGFtZW50YWwgUEhZIGNvZGUuCgpOb3cgdG8gZGlnIGEgYml0IGRlZXBlci4gSSBzZWUgdGhhdCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtYWtlIGFjY2VzcyB0cmlja3kuIEhvd2V2ZXIsIGBwaHlfaW50ZXJydXB0YCBpcyBzdGF0aWMgYXMgd2VsbCwgKmJ1dCogaXTigJlzIGFuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgZ2V0cyBpdHMgYWRkcmVzcyBwYXNzZWQgdG8gYHJlcXVlc3RfdGhyZWFkZWRfaXJxYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBub3cgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHBoeV9jb25maWdfaW50ZXJydXB0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfY29uZmlnX2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjI6ICogcGh5X2NvbmZpZ19pbnRlcnJ1cHQgLSBjb25maWd1cmUgdGhlIFBIWSBkZXZpY2UgZm9yIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0c1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2My0gKiBAcGh5ZGV2OiB0aGUgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTY3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE2ODpzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNjkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzkxPWludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTUtXHQvKiBEaXNhYmxlIFBIWSBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5NjpcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NTI9c3RhdGljIGludCBwaHlfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDU0Olx0cmV0dXJuIHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9FTkFCTEVEKTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEludGVycnVwdCBDb25maWd1cmF0aW9uIGFuZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAsIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBtb2R1bGUuIFN0YXRpYyBmdW5jdGlvbnMgdXN1YWxseSBpbmRpY2F0ZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNeSBnb2FsIG5vdyBpcyB0byB0cmFjayBkb3duIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgdHdvLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBzcG90dGVkIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBhbmQgYHBoeV9lbmFibGVfaW50ZXJydXB0c2AuIEFoYSEgVGhleSBib3RoIGNhbGwgYHBoeV9jb25maWdfaW50ZXJydXB0YC4gVGhhdCBtYWtlcyBzZW5zZTsgZGlzYWJsaW5nIG9yIGVuYWJsaW5nIGludGVycnVwdHMgd291bGQgbGlrZWx5IGludm9sdmUgcmVjb25maWd1cmluZyB0aGVtLiBUaGF0JiMzOTtzIGEga2V5IGludGVyYWN0aW9uIHJpZ2h0IHRoZXJlLgoKTm93LCBJIHNlZSB0aGF0IGBwaHlfaW50ZXJydXB0YCBpdHNlbGYgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgcmVxdWVzdF90aHJlYWRlZF9pcnFgIHdpdGhpbiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YC4gVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHNldHVwIOKAkyBsaW5raW5nIHRoZSBwaHlzaWNhbCBsYXllciBpbnRlcnJ1cHQgdG8gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcnJ1cHQgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTM5MT1pbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDA0LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0MDU6ICogcGh5X2ludGVycnVwdCAtIFBIWSBpbnRlcnJ1cHQgaGFuZGxlclxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0MDYtICogQGlycTogaW50ZXJydXB0IGxpbmVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDExOnN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ4NS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDg2Olx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGh5ZGV2LVx1MDAzZWlycSwgTlVMTCwgcGh5X2ludGVycnVwdCxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDg3LVx0XHRcdFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEludGVycnVwdCBIYW5kbGluZyBpbiBQSFkgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBpbnRlcnJ1cHQgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBQSFkgZHJpdmVyLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgYWNxdWlyaW5nIGFuZCBlbmFibGluZyB0aGUgaW50ZXJydXB0IGxpbmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHByb3Blcmx5IGNvbmZpZ3VyZWQ/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBpZiB0aGUgcmVxdWVzdCBmYWlscz8KCkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZS1yZWdpc3RlciBhbmQgZGlzYWJsZSB0aGUgaW50ZXJydXB0LCBzbyBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIGl0JiMzOTtzIGRvaW5nIHByZWNpc2VseSB3aGF0JiMzOTtzIGV4cGVjdGVkLiBJcyBpdCBhIGNsZWFuIHVuLXJlZ2lzdHJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIGludGVycnVwdHMgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgaW50ZXJydXB0LXJlbGF0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBhcmUgc2tpcHBlZCBkdXJpbmcgdGhpcyBzdGFnZSwgYmVjYXVzZSB0aG9zZSBjb3VsZCBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcyB0b28uIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUgaXMgY3JpdGljYWwsIHNvIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9yZXF1ZXN0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ2Nj1zdGF0aWMgaW50IHBoeV91cGRhdGVfc3RhdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDc1OiAqIHBoeV9yZXF1ZXN0X2ludGVycnVwdCAtIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NzYtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ4Mjp2b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAwLX1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgdXN1YWwgc3VzcGVjdCBpbiB0aGVzZSB0eXBlcyBvZiBzY2VuYXJpb3MsIHlvdSBrbm93LCB3aGVuIHlvdSYjMzk7cmUgdHJvdWJsZXNob290aW5nIFBIWS1yZWxhdGVkIGludGVycnVwdCBpc3N1ZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVycnVwdHMgYXJlIGNvcnJlY3RseSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IHRoZSByaWdodCBwb2ludHMgaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCByZXZlYWwgaWYgdGhlIGludGVycnVwdCBkaXNhYmxpbmcgbG9naWMgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBjYWxsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCwgYW5kIGlmIGl0IGlzLCB3aGVuIGFuZCB3aGVyZSwgcmVsYXRpdmUgdG8gb3RoZXIgY3JpdGljYWwgb3BlcmF0aW9ucyBsaWtlIGluaXRpYWxpemF0aW9uLCBsaW5rIHN0YXR1cyBjaGFuZ2VzLCBhbmQgYW55IHBvdGVudGlhbCBlcnJvciBoYW5kbGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIHRoZSByb290IGNhdXNlLCBvciwgYXQgbGVhc3QsIGlmIGl0IG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM4Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODktICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTExLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTMtXHRmcmVlX2lycShwaHlkZXYtXHUwMDNlaXJxLCBwaHlkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW50ZXJydXB0IEhhbmRsZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZvciB0aGUgUEhZLiBUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgYW5kIGBwaHlfZnJlZV9pbnRlcnJ1cHRgLiBUaGF0IG1ha2VzIHNlbnNlOyB0aG9zZSBhcmUgdGhlIHR5cGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBpbnRlcnJ1cHQgcmVzb3VyY2VzLCByaWdodD8gQWxsb2NhdGUgYW5kIHJlbGVhc2UuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCBzZWVpbmcgYSBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24gc29tZXdoZXJlLiBJdCYjMzk7cyBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgZm9yIGNvbnRyb2xsaW5nIGludGVycnVwdHMuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIGV4cG9ydGVkIHN5bWJvbHMuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgRXhwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYWJvdXQgdGhpcyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sLCByaWdodD8gR2l2ZW4gdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLiBCdXQsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIHN0dWZmIGxpa2UgaW50ZXJydXB0IG1hbmFnZW1lbnQgYXQgdGhlIFBIWSBsZXZlbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiBhY3R1YWxseSBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB3aGVyZXZlciBJJiMzOTttIHBsYW5uaW5nIHRvIHVzZSBpdC4gTm8gcG9pbnQgaW4gY29udGludWluZyBkb3duIHRoaXMgcGF0aCBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuIFNvLCB5ZWFoLCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc3ltYm9sIGlzIGFjdHVhbGx5IHZpc2libGUuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuIEl0IGNvdWxkIGJlIGluIHRoZSBrZXJuZWwgb3IgYW5vdGhlciBmaXJtd2FyZSBpbWFnZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldhaXQsIFRoYXQmIzM5O3MgRXhwb3J0ZWQ/KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkgc3R1bWJsZWQgYWNyb3NzIGEgY2FsbCB0byBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIE5vdywgdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgKmxvb2tzKiBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb24uIFRoZSByZWFsIHN1cnByaXNlIGlzIHRoYXQgaXQgYXBwZWFycyB0byBiZSAqZXhwb3J0ZWQqIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBQSFkgc3Vic3lzdGVtLiBXaHkgaXMgdGhhdD8gSSYjMzk7ZCB1c3VhbGx5IGV4cGVjdCB0aGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgaW50ZXJydXB0IGRpc2FibGluZyByb3V0aW5lcyB0byBiZSBlaXRoZXIgc3RhdGljLCBvciwgYXQgbW9zdCwgYXZhaWxhYmxlIHZpYSBhIHZlcnkgc3BlY2lmaWMgYW5kIHdlbGwtZGVmaW5lZCBBUEkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuIEV4cG9ydGluZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2Agc3VnZ2VzdHMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgdXNlZCBtb3JlIGJyb2FkbHkgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2Ugb3IgcmVhc29uIGZvciB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbiBjaG9pY2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzIGJyb2FkZXIgYXZhaWxhYmlsaXR5PyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIFBIWSBzdWJzeXN0ZW0gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzc5PXN0YXRpYyB2b2lkIHBoeV93cml0ZV9iYXJyaWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM4ODogKiBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gRGlzYWJsZSB0aGUgUEhZIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5MTppbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTEwPXZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUxMjpcdHBoeV9kaXNhYmxlX2ludGVycnVwdHMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVx0ZnJlZV9pcnEocGh5ZGV2LVx1MDAzZWlycSwgcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUEhZIEludGVycnVwdHMgaW4gYHBoeS5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBIWSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBkaXNhYmxlZCBhdCB0aGlzIGxldmVsLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBpbnRlcnJ1cHQgY29udHJvbCBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxpbmsgc3RhdHVzIGNoYW5nZXMgb3IgcG93ZXIgbWFuYWdlbWVudC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSB3ZSBjYW4gdHdlYWsgaG93IGludGVycnVwdHMgYXJlIG1hc2tlZCBhbmQgdW5tYXNrZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZHJpdmVyJiMzOTtzIGludGVyZmFjZSB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIsIHJpZ2h0PyBTbywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXJzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IHRoZXkmIzM5O3JlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IHN0YXR1cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGFic3RyYWN0aW9uIHRoZXJlIG9yIGlmIGl0IGlzIHRvbyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlLiBJIHdpbGwgbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwgYW5kIHBlcmhhcHMgb3RoZXIgc2ltaWxhciBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHQgKi9cbjEzOTE6XHRpbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTM5MjpcdHtcbjEzOTM6XHRcdGludCBlcnI7XG4xMzk0Olx0XG4xMzk1Olx0XHQvKiBEaXNhYmxlIFBIWSBpbnRlcnJ1cHRzICovXG4xMzk2Olx0XHRlcnIgPSBwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRElTQUJMRUQpO1xuMTM5NzpcdFx0aWYgKGVycilcbjEzOTg6XHRcdFx0cmV0dXJuIGVycjtcbjEzOTk6XHRcbjE0MDA6XHRcdHBoeV93cml0ZV9iYXJyaWVyKHBoeWRldik7XG4xNDAxOlx0XHRyZXR1cm4gMDtcbjE0MDI6XHR9XG4xNDAzOlx0XG4xNDA0Olx0LyoqXG4xNDA1Olx0ICogcGh5X2ludGVycnVwdCAtIFBIWSBpbnRlcnJ1cHQgaGFuZGxlclxuMTQwNjpcdCAqIEBpcnE6IGludGVycnVwdCBsaW5lXG4xNDA3Olx0ICogQHBoeV9kYXQ6IHBoeV9kZXZpY2UgcG9pbnRlclxuMTQwODpcdCAqXG4xNDA5Olx0ICogRGVzY3JpcHRpb246IEhhbmRsZSBQSFkgaW50ZXJydXB0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEcml2ZXIgSXNzdWUqKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGluIGEgcGh5c2ljYWwgbGF5ZXIgZHJpdmVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cG9ydGVkLiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCAqaXMqIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGdvb2QsIGJ1dCBzb21ldGhpbmcgZWxzZSBpc24mIzM5O3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCAmIzM0O3NvbWV0aGluZyBlbHNlJiMzNDsgaXMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgaW50ZXJydXB0IGlzIHNldCB1cCBvciB0b3JuIGRvd24uCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQtZnJlZWluZyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgYHBoeV9mcmVlX2ludGVycnVwdGAuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIG1pc3NpbmcgZXhwb3J0IGlzIGluIGEgcmVsYXRlZCBjb21wb25lbnQuIElzIGl0IHRoZSBhY3R1YWwgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBvciBzb21lIHNldHVwIGZ1bmN0aW9uLCBtYXliZT8gVGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgc2VlIGlmIEkgY2FuIHNwb3QgdGhlIGRpc2Nvbm5lY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGludGVycnVwdCBmbG93IHRvIHRyYWNrIGRvd24gdGhpcyBsYWNrIG9mIGV4cG9ydCBhbmQgd2hhdCBpdCBtaWdodCBtZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZnJlZV9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbiYjMzk7dCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcdFx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk3LVx0XHRcdHBoeWRldi1cdTAwM2VpcnEgPSBQSFlfUE9MTDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTUwMT1FWFBPUlRfU1lNQk9MKHBoeV9yZXF1ZXN0X2ludGVycnVwdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUwNDogKiBwaHlfZnJlZV9pbnRlcnJ1cHQgLSBkaXNhYmxlIGFuZCBmcmVlIGludGVycnVwdCBmb3IgYSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwOS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkludGVycnVwdCBIYW5kbGluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgUEhZIGRyaXZlciBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBhbmQgYHBoeV9mcmVlX2ludGVycnVwdGAgYXJlIHRoZSBrZXkgcGxheWVycyBoZXJlIGZvciBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gVGhvc2UgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIHRoYXQmIzM5O3Mgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBnb2luZyB0byBjYWxsIHRvIGNsYWltIGFuZCByZWxlYXNlIHRoZSBpbnRlcnJ1cHQgbGluZXMuIEkmIzM5O20gYWxzbyBiZXR0aW5nIGBwaHlfc3RhcnRgIGFuZCBgcGh5X3N0b3BgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBwaGFzZXMuCgpUaGUgY3JpdGljYWwgdGhpbmcgbm93IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBmbG93LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaCBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGludGVycnVwdHMgYXJlIGluaXRpYWxseSBlbmFibGVkLCBob3cgdGhlIGRyaXZlciYjMzk7cyBsaW5rZWQgaW50byB0aGUgc3lzdGVtLCBhbmQgd2hlcmUgdGhlIGludGVycnVwdCBoYW5kbGluZyBzdGFydHMuIERpZ2dpbmcgdGhyb3VnaCB0aG9zZSBjYWxsIHNpdGVzIGlzIHRoZSBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlcXVlc3RfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ2Nj1zdGF0aWMgaW50IHBoeV91cGRhdGVfc3RhdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDc1OiAqIHBoeV9yZXF1ZXN0X2ludGVycnVwdCAtIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NzYtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ4Mjp2b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAwLX1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIyNT1pbnQgcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM5LVx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI0MDpcdFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDg2PXN0YXRpYyBpbnQgcGh5bGlua19icmluZ3VwX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk3LVx0aWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBwaHlfaW50ZXJydXB0X2lzX3ZhbGlkKHBoeSkpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxOTg6XHRcdHBoeV9yZXF1ZXN0X2ludGVycnVwdChwaHkpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBIWSBJbnRlcnJ1cHQgSGFuZGxpbmcgRml4KioKCk9rYXksIHNvIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5bGlua19icmluZ3VwX3BoeWAgYm90aCBjYWxsIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LCBtZWFuaW5nIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5ldHdvcmsgaW50ZXJmYWNlIFBIWSBicmluZ3VwLCB3aGljaCBtYWtlcyB0aGlzIHZ1bG5lcmFiaWxpdHkgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBQSFkgY29kZSwgZnV6emluZyBzZWVtcyBsaWtlIGEgZ29vZCBpbnZlc3RtZW50LgoKVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZXJlIGBwaHlkZXYtJmd0O2RydmAgaXMgTlVMTC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoZW4gd291bGQgYHBoeWRldi0mZ3Q7ZHJ2YCAqYmUqIE5VTEw/IEkmIzM5O20gdGhpbmtpbmcuLi4gcGVyaGFwcyBkdXJpbmcgYSBQSFkgZGV2aWNlIHVuYmluZGluZyBzY2VuYXJpbywgd2hlcmUgdGhlIGRyaXZlciBpcyBhY3RpdmVseSBiZWluZyB1bmJvdW5kIHdoaWxlIGFuIGludGVycnVwdCBpcyBwZW5kaW5nIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNvbmZpZ3VyZWQuIEFub3RoZXIgcG9zc2liaWxpdHkgbWlnaHQgYmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgdGhlIGRyaXZlciBoYXMgZXZlbiBzdWNjZXNzZnVsbHkgYm91bmQgdG8gdGhlIFBIWS4gRWl0aGVyIHdheSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGZpeCBpbiBjcnVjaWFsIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmdXJ0aGVyLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCBjaGVjayB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQuIGBDT05GSUdfUEhZTElCYCBsb29rcyBsaWtlIHRoZSBmdW5kYW1lbnRhbCBjb3JlIGNvbmZpZyBuZWVkZWQgZm9yIHRoZSBQSFkgbGlicmFyeSwgd2hpY2ggc2VlbXMgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSUImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02PWNvbmZpZyBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDY9Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDk6Y29uZmlnIFBIWUxJQl9MRURTXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy01MC1cdGRlZl9ib29sIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBQSFlMSUIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gaWYgYFBIWUxJQmAgaXMgYWN0dWFsbHkgcmVxdWlyZWQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLiBBaCwgeWVzLCBpdCBhcHBlYXJzIGBQSFlMSUJgIGlzIHRoZSBmb3VuZGF0aW9uYWwgY29uZmlnIGhlcmUg4oCTIHRoZSBtYWluIGRyaXZlciwgaWYgeW91IHdpbGwuIE5vdywgbGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aGF0IHdlIHNob3VsZCBrbm93IGFib3V0PyBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIGxpa2UgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AgaXMgY29tcGlsZWQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQuIEV4Y2VsbGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXHRcdCYjNDM7PSBzd3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTUtbGlicGh5LSQoQ09ORklHX0xFRF9UUklHR0VSX1BIWSlcdCYjNDM7PSBwaHlfbGVkX3RyaWdnZXJzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1BIWUxJTkspXHRcdCYjNDM7PSBwaHlsaW5rLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbGlicGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19kZXZyZXMub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfQURJTjExMDBfUEhZKVx0JiM0Mzs9IGFkaW4xMTAwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfQURJTjExNDBfUEhZKVx0JiM0Mzs9IGFkaW4xMTQwLXBoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfRFA4M1RHNzIwX1BIWSlcdCYjNDM7PSBkcDgzdGc3MjAub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19GSVhFRF9QSFkpXHRcdCYjNDM7PSBmaXhlZF9waHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTY3LW9iai0kKENPTkZJR19JQ1BMVVNfUEhZKVx0JiM0Mzs9IGljcGx1cy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX1BIWUxJQmAgaXMsIGFzIGV4cGVjdGVkLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuIE5vdywgSSBuZWVkIHRvIGZvY3VzIGluIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkLiBIbW0sIGl0IGxvb2tzIGxpa2UgYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgY2hhbmdlcyB0byB0aGVzZSB0d28gZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24sIGl0IHNlZW1zLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCogYW5kIGludGVyYWN0IHdpdGggdGhlc2UgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zPyBJJiMzOTttIHNlZWluZyBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgYHBoeV9mcmVlX2ludGVycnVwdGAsIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCwgYW5kLi4ud2FpdCBhIG1pbnV0ZS4uLiBpcyBgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzYCBhY3R1YWxseSBleHBvcnRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGRldGFpbCBpZiBpdCYjMzk7cyBub3QuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXNuJiMzOTt0IGJyZWFraW5nIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoYXQgZnVuY3Rpb24gaXMgbm90IG1lYW50IHRvIGJlIHB1YmxpYy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSB0byBhc3Nlc3MgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2VuYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDExPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NDgtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ0OTogKiBwaHlfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGUgdGhlIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUwLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ1MjpzdGF0aWMgaW50IHBoeV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTMtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0OTQ6XHRcdGlmIChwaHlfZW5hYmxlX2ludGVycnVwdHMocGh5ZGV2KSkge1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTUtXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtDYW4mIzM5O3QgZW5hYmxlIGludGVycnVwdCwgZmFsbGluZyBiYWNrIHRvIHBvbGxpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA4MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVycnVwdCBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhcmUgbWFuYWdlZCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgSSBzZWUgaXQmIzM5O3MgbGlua2VkIGRpcmVjdGx5IHRvIGBwaHlfZW5hYmxlX2ludGVycnVwdHNgLiBUaGF0IG1ha2VzIHNlbnNlOyByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQsIGVuYWJsZSB0aGUgaGFyZHdhcmUuIE5hdHVyYWxseSwgdGhlIG9wcG9zaXRlIHNlZW1zIHRvIGJlIHRydWUgdG9vIC0gYHBoeV9mcmVlX2ludGVycnVwdGAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwLCBhbmQgdGhhdCBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIGNhbGxpbmcgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBNeSBndXQgZmVlbGluZyBpcyB0aGVzZSBhcmUgcHJvYmFibHkgdmVyeSBzaW1wbGUgd3JhcHBlcnMgYXJvdW5kIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHRob3VnaCwgc28gdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgaXMgcHJvcGVybHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgd2hlcmUgaXQgbmVlZHMgdG8gYmUuIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nIGlzIGhvb2tlZCB1cCBjb3JyZWN0bHkuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBoeV9kaXNhYmxlX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gcnVubmluZyB0aHJvdWdoIGEgbmV0d29ya2luZyBrZXJuZWwgbW9kdWxlOgoKKipEZWJ1Z2dpbmcgYW4gVW5leHBvcnRlZCBGdW5jdGlvbioqCgpIbW0sIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IG9kZC4gV2FpdCBhIG1pbnV0ZSwgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLi4uIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQgKnNob3VsZCogYmUgdmlzaWJsZSBhY3Jvc3MgdGhlIGtlcm5lbCwgYnV0IGl0JiMzOTtzIG5vdD8gU29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgZm9yIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gSSYjMzk7bGwganVtcCBpbnRvIGBkcml2ZXJzL25ldC9waHkvcGh5LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiB0aGVyZS4gVGhlcmXigJlzIGdvdCB0byBiZSBhIHJlYXNvbiB0aGlzIGlzIGhhcHBlbmluZywgYW5kIHRoZSBkZWZpbml0aW9uIGluIHRoZSBzb3VyY2UgZmlsZSB3aWxsIGVpdGhlciBjbGFyaWZ5IGl0IG9yIGFsbG93IG1lIHRvIHN0YXJ0IGxvb2tpbmcgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHkuYz0xMzc5PXN0YXRpYyB2b2lkIHBoeV93cml0ZV9iYXJyaWVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM4ODogKiBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gRGlzYWJsZSB0aGUgUEhZIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTM5MTppbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTEwPXZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUxMjpcdHBoeV9kaXNhYmxlX2ludGVycnVwdHMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVx0ZnJlZV9pcnEocGh5ZGV2LVx1MDAzZWlycSwgcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgaXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7ZXhwb3J0ZWQmIzM0OyBmdW5jdGlvbiBvciB2YXJpYWJsZSwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBpcyBhIGtleSBpbmRpY2F0b3IuIElmIGl0ICp3ZXJlKiBzdGF0aWMsIGl0IHdvdWxkIGJlIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgZmlsZS4gU2luY2UgaXQmIzM5O3Mgbm90LCBpdCBzdWdnZXN0cyB0aGlzIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgKmlzKiBpbnRlbmRlZCBmb3IgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIEdpdmVuIHRoZSBkaXJlY3RvcnkgcGF0aCBgZHJpdmVycy9uZXQvcGh5L2AsIGl0JiMzOTtzIGEgdmVyeSBzdHJvbmcgaHVuY2ggdGhhdCB0aGlzIHRoaW5nIGluIHF1ZXN0aW9uIGlzIGJlaW5nIHVzZWQg4oCTIG9yIGF0IGxlYXN0LCAqY291bGQqIGJlIHVzZWQg4oCTIGJ5IG90aGVyIGZpbGVzIHdpdGhpbiB0aGF0IHNwZWNpZmljIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG5ldHdvcmsgZHJpdmVyIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyByZXF1aXJlcyBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Rpc2FibGVfaW50ZXJydXB0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM4Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzODktICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTM5Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTExLXtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTMtXHRmcmVlX2lycShwaHlkZXYtXHUwMDNlaXJxLCBwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzY4NT1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzExLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNzEyOlx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQSFkgSW50ZXJydXB0cyBhbmQgQ29ubmVjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgUEhZIGludGVycnVwdHMgYW5kIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLiBJdCBzZWVtcyBsaWtlIGBwaHlfcHJvYmVgIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZW50cnkgc2luY2UgaXQgY2FsbHMgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXRzZWxmLCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBzZWVtcyBpbXBvcnRhbnQuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeWxpbmtfYnJpbmd1cF9waHlgLCBzbyB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvaW5nIHRvIGJlIGtleSBmb2N1cyBwb2ludHMgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCk5leHQsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpdHNlbGYsIGBwaHlfaW50ZXJydXB0YCwgaXMgcmVnaXN0ZXJlZCB0aHJvdWdoIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBzbyB0aGF0IGNvbmZpcm1zIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFzIGJlaW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYHBoeV9pbnRlcnJ1cHRgIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGRhdGEuIFRoZW4gdGhlcmUmIzM5O3MgYHBoeV9mcmVlX2ludGVycnVwdGAuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwaHlfZGlzY29ubmVjdGAsIGFsc28gZHVyaW5nIGBwaHlsaW5rX2JyaW5ndXBfcGh5YCBpbiBjYXNlIG9mIGVycm9yLCBhcyB3ZWxsIGFzIGBwaHlsaW5rX3BoeV9jaGFuZ2VgLiBTbyBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSByZWxhdGVkIGNhbGxzIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9mcmVlX2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbiYjMzk7dCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcdFx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk3LVx0XHRcdHBoeWRldi1cdTAwM2VpcnEgPSBQSFlfUE9MTDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTUwMT1FWFBPUlRfU1lNQk9MKHBoeV9yZXF1ZXN0X2ludGVycnVwdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTUwNDogKiBwaHlfZnJlZV9pbnRlcnJ1cHQgLSBkaXNhYmxlIGFuZCBmcmVlIGludGVycnVwdCBmb3IgYSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwOS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjkzPXZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTgtXHRpZiAocGh5X2ludGVycnVwdF9pc192YWxpZChwaHlkZXYpKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMjk5Olx0XHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTMwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gUEhZIERpc2Nvbm5lY3Rpb24qKgoKT2theSwgc28gYHBoeV9kaXNjb25uZWN0YCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGFyZWEuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQuIExldCYjMzk7cyBzdGFydCBieSBjb21wYXJpbmcgaXQgdG8gYHBoeV9jb25uZWN0X2RpcmVjdGAgYXMgd2VsbC4gVGhlc2UgYXJlIGZvdW5kYXRpb25hbCBQSFkgQVBJIGZ1bmN0aW9ucywgc28gZ2V0dGluZyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlbSBpcyBrZXkuCgpUbyBnZXQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUsIEkmIzM5O2xsIGFsc28gYWRkIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhbmQgYHBoeV9wcm9iZWAgdG8gdGhlIGxpc3QuIFRob3VnaCwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBgcGh5X3Byb2JlYC4gVGhhdCYjMzk7cyBhIGRyaXZlciBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IEl0IG1pZ2h0IGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCkkgc2hvdWxkIGFsc28gdGFrZSBhIGxvb2sgYXQgYHBoeV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIGJlIHN1cmUgSSBhbSBmYW1pbGlhciB3aXRoIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGZ3bm9kZV9nZXRfcGh5X25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzY3OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzY4MDogKiBwaHlfcHJvYmUgLSBwcm9iZSBhbmQgaW5pdCBhIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzY4MS0gKiBAZGV2OiBkZXZpY2UgdG8gcHJvYmUgYW5kIGluaXRcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM2ODU6c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNjg2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM4NjQ9c3RhdGljIGludCBwaHlfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZHJpdmVyICpuZXdfZHJpdmVyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzg5MC1cdG5ld19kcml2ZXItXHUwMDNlbWRpb2Rydi5kcml2ZXIuYnVzID0gXHUwMDI2bWRpb19idXNfdHlwZTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzg5MTpcdG5ld19kcml2ZXItXHUwMDNlbWRpb2Rydi5kcml2ZXIucHJvYmUgPSBwaHlfcHJvYmU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4OTItXHRuZXdfZHJpdmVyLVx1MDAzZW1kaW9kcnYuZHJpdmVyLnJlbW92ZSA9IHBoeV9yZW1vdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA3CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBIWSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIHRoZSBQSFkgZHJpdmVyIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCwgYHBoeV9jb25uZWN0X2RpcmVjdGAsIGFuZCBgcGh5X2Rpc2Nvbm5lY3RgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIFBIWSBpbnRlcmFjdGlvbnMsIGFuZCBsaWtlbHkgdGhlIHBsYWNlcyB3aGVyZSBhIGRyaXZlciBjYW4gYmVjb21lIHVuYm91bmQsIGFzIHRoZSBwYXRjaCBzdWdnZXN0cy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFBIWUxJQmAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZS4gR2l2ZW4gdGhlIGNoYW5nZSBpcyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCwgYW5kIHRoYXQgZmlsZSYjMzk7cyBjb21waWxhdGlvbiBpcyBjb25kaXRpb25lZCBvbiBgQ09ORklHX1BIWUxJQmAsIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBjYXNlLCBzbyBJIHdpbGwgc3RpY2sgd2l0aCB0aGF0LgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFkZGluZyBOVUxMIGNoZWNrcyBmb3IgYHBoeWRldi0mZ3Q7ZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuICBUaGlzIGlzIHRvIHByZXZlbnQgYSBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHJvb3QgY2F1c2UgaXMgYSByYWNlIGNvbmRpdGlvbjogYSBkcml2ZXIgaXMgYmVpbmcgdW5ib3VuZCAob3IgcGVyaGFwcyBhICYjMzQ7ZHVtbXkmIzM0OyBQSFkgaXMgaW4gdXNlKSAqd2hpbGUqIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLCBhbmQgaXQmIzM5O3MgYWNjZXNzaW5nIHRoZSBkcml2ZXImIzM5O3MgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiB0aGUgZHJpdmVyIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgbmV0d29yayBkcml2ZXJzIHRoYXQgdXNlIGEgUEhZIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgcmVib3VuZC4gVGhlIG51bGwgcG9pbnRlciBwcm90ZWN0aW9uIHdpbGwgbWFrZSB0aGlzIG1vcmUgcm9idXN0LgoKVGhpcyBpcyBhIGdvb2QsIHNvbGlkIGZpeCBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4gU2luY2UgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byB0cmlnZ2VyIGV2ZW4gd2l0aCBhICYjMzQ7ZHVtbXkmIzM0OyBQSFksIEkgd291bGQgY2FsbCBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGluIGVudmlyb25tZW50cyBsaWtlIHZpcnR1YWwgbWFjaGluZXMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGludGVycnVwdC1yZWxhdGVkIHRpbWluZyBpc3N1ZXMuIFNvLCBiYXNlZCBvbiB0aGlzLCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfcmVxdWVzdF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cGh5X2ZyZWVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY29yZSBQSFkgbGlicmFyeSAoYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgKSBieSBjaGVja2luZyBpZiBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3JlcXVlc3RfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3BoeV9mcmVlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtwaHlfY29ubmVjdF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2Rpc2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNvcmUgUEhZIGxpYnJhcnkgKGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCkgYnkgY2hlY2tpbmcgaWYgYHBoeWRldi1cdTAwM2VkcnZgIGlzIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBpdHMgY2FsbGJhY2tzLiBUaGlzIGNhbiBvY2N1ciBpZiBhIFBIWSBkcml2ZXIgaXMgdW5ib3VuZCB3aGlsZSBpbnRlcnJ1cHRzIGFyZSBzdGlsbCBhY3RpdmUgb3IgYmVpbmcgY29uZmlndXJlZC4gVGhlIFBIWSBsaWJyYXJ5IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG5ldHdvcmsgZHJpdmVycyB0aGF0IHV0aWxpemUgUEhZIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggZmNlOWJjN2JlMzMwNC4uNTQzNWY2MmU5ODE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtMTY4LDcgJiM0MzsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpOwogc3RhdGljIGludCBwaHlfY29uZmlnX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGludGVycnVwdHMpCiB7CiAJcGh5ZGV2LSZndDtpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwOwotCWlmIChwaHlkZXYtJmd0O2Rydi0mZ3Q7Y29uZmlnX2ludHIpCiYjNDM7CWlmIChwaHlkZXYtJmd0O2RydiAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cikKIAkJcmV0dXJuIHBoeWRldi0mZ3Q7ZHJ2LSZndDtjb25maWdfaW50cihwaHlkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDM2LDcgJiM0MzsxNDM2LDEwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpCiAJfQogCiAJbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7Ci0JcmV0ID0gcGh5ZGV2LSZndDtkcnYtJmd0O2hhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTsKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O2RydikKJiM0MzsJCXJldCA9IElSUV9OT05FOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSBwaHlkZXYtJmd0O2Rydi0mZ3Q7aGFuZGxlX2ludGVycnVwdChwaHlkZXYpOwogCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMwoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gUmVsZXZhbmNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBpbnRyb2R1Y2luZyBgTlVMTGAgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtJmd0O2RydmAgd2l0aGluIHRoZSBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgZnVuY3Rpb25zLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYWltZWQgYXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgcGh5ZGV2LSZndDtkcnZgIGhhcHBlbnMgdG8gYmUgYE5VTExgLgoKTXkgZXhwZXJ0IGludHVpdGlvbiwgY29tYmluZWQgd2l0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSwgdGVsbHMgbWUgdGhpcyBpcyBzb2xlbHkgYSBgTlVMTGAgcG9pbnRlciBpc3N1ZS4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZTsgdGhhdCYjMzk7cyBLTVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycywgb3IgZnJhbmtseSwganVzdCB0aGUga2VybmVsIGNyYXNoaW5nLCB3aWxsIGNhdGNoIHRoZXNlIGBOVUxMYCBkZXJlZmVyZW5jZXMgaW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBwYXRjaC4KClRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBwb3RlbnRpYWwgY3Jhc2gsIG5vdCBhIEtNU0FOLXJlbGF0ZWQgY29uY2Vybi4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb21wbGV4aXRpZXMgdG8gd2FycmFudCBhIHNlY29uZCBsb29rLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDAuNjcyNjY1NzEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjQ4MTUzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICAgIFwicGh5X2ZyZWVfaW50ZXJydXB0XCIsXG4gICAgXCJwaHlfY29ubmVjdF9kaXJlY3RcIixcbiAgICBcInBoeV9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5VTEwgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtXFx1MDAzZWRydmAgaW4gYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIGtlcm5lbCBjcmFzaCBoYW5kbGVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDAuNjcyNjczMDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI5MzcwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjM2OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jXFxuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xcbiBzdGF0aWMgaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgaW50ZXJydXB0cylcXG4ge1xcbiBcXHRwaHlkZXYtXFx1MDAzZWludGVycnVwdHMgPSBpbnRlcnJ1cHRzID8gMSA6IDA7XFxuLVxcdGlmIChwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIpXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWRydiBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIpXFxuIFxcdFxcdHJldHVybiBwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDM2LDcgKzE0MzYsMTAgQEAgc3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdClcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWRydilcXG4rXFx0XFx0cmV0ID0gSVJRX05PTkU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MDEuMjE2NjcyMTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwMzE2NjEwNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICAgIFwicGh5X2ZyZWVfaW50ZXJydXB0XCIsXG4gICAgXCJwaHlfY29ubmVjdF9kaXJlY3RcIixcbiAgICBcInBoeV9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNvcmUgUEhZIGxpYnJhcnkgKGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCkgYnkgY2hlY2tpbmcgaWYgYHBoeWRldi1cXHUwMDNlZHJ2YCBpcyBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGNhbGxiYWNrcy4gVGhpcyBjYW4gb2NjdXIgaWYgYSBQSFkgZHJpdmVyIGlzIHVuYm91bmQgd2hpbGUgaW50ZXJydXB0cyBhcmUgc3RpbGwgYWN0aXZlIG9yIGJlaW5nIGNvbmZpZ3VyZWQuIFRoZSBQSFkgbGlicmFyeSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXR3b3JrIGRyaXZlcnMgdGhhdCB1dGlsaXplIFBIWSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xuIHN0YXRpYyBpbnQgcGh5X2NvbmZpZ19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBpbnRlcnJ1cHRzKVxuIHtcbiBcdHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwO1xuLVx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIpXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cilcbiBcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0MzYsNyArMTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbitcdGlmICghcGh5ZGV2LVx1MDAzZWRydilcbitcdFx0cmV0ID0gSVJRX05PTkU7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdChwaHlkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzowMS4yMTY2NzQxMDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzk5OTA1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IFBIWSBEcml2ZXIgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIG51bGwgY2hlY2sgZm9yIGBwaHlkZXYtXHUwMDNlZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIEl0J3MgZml4aW5nIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAsIHN1Z2dlc3RzIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuICpyZWFjaGFibGUqLiBgcGh5X2ludGVycnVwdGAgaXMgb2J2aW91c2x5IGFuIGludGVycnVwdCBoYW5kbGVyLCBhbmQgYHBoeV9jb25maWdfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGludGVycnVwdC4gQm90aCBhcmUgY29yZSBwYXJ0cyBvZiB0aGUgUEhZIGxpYnJhcnkuIEdpdmVuIHRoZSBjZW50cmFsaXR5IG9mIHRoZSBQSFkgbGlicmFyeSwgaXQncyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmsgZHJpdmVycywgYSBrZXkgYXJlYSBvZiBwb3RlbnRpYWwgZXhwbG9pdGF0aW9uLiBUaGlua2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZpcnRpby1uZXQsIGUxMDAwLCBhbmQgb3RoZXIgZW11bGF0ZWQgaGFyZHdhcmUgdXNlIGl0LlxuXG5BaCwgd2FpdCwgUEhZIGRldmljZXMgYXJlICphbHNvKiBjb21tb25seSB1c2VkIGJ5IE1BQyBkcml2ZXJzLCB3aGljaCBzaWduaWZpY2FudGx5IGV4cGFuZHMgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGxvb2tpbmcgcHJvbWlzaW5nLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHRydWUuIFllcCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBkcml2ZXJzIGxpa2UgYG1hY2JgLCBgZmVjYCwgYHN0bW1hY2AsIGFuZCBvdGhlcnMgYWxsIHV0aWxpemUgdGhlIFBIWSBsaWJyYXJ5LiBPa2F5LCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdGhlbiwgZ2l2ZW4gdGhhdCBpdCdzIGEgZml4IGluIGZ1bmRhbWVudGFsIFBIWSBjb2RlLlxuXG5Ob3cgdG8gZGlnIGEgYml0IGRlZXBlci4gSSBzZWUgdGhhdCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtYWtlIGFjY2VzcyB0cmlja3kuIEhvd2V2ZXIsIGBwaHlfaW50ZXJydXB0YCBpcyBzdGF0aWMgYXMgd2VsbCwgKmJ1dCogaXTigJlzIGFuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgZ2V0cyBpdHMgYWRkcmVzcyBwYXNzZWQgdG8gYHJlcXVlc3RfdGhyZWFkZWRfaXJxYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgZnV6emluZyBzdHJhdGVneS4gU28sIG5vdyBsZXQncyBnbyBiYWNrIGFuZCBleGFtaW5lIGBwaHlfY29uZmlnX2ludGVycnVwdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxMC4wMTY1ODIxNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzY4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25maWdfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmM9MTU5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfcmF0ZV9tYXRjaGluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTYxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjI6ICogcGh5X2NvbmZpZ19pbnRlcnJ1cHQgLSBjb25maWd1cmUgdGhlIFBIWSBkZXZpY2UgZm9yIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0c1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNjMtICogQHBoeWRldjogdGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNjg6c3RhdGljIGludCBwaHlfY29uZmlnX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGludGVycnVwdHMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTM5MT1pbnQgcGh5X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTUtXFx0LyogRGlzYWJsZSBQSFkgaW50ZXJydXB0cyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzk2OlxcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDUyPXN0YXRpYyBpbnQgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTMte1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDU0OlxcdHJldHVybiBwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRU5BQkxFRCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0NTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxMC4xNDc5NTYyMjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUwMTIzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBhbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIHR3byBmdW5jdGlvbnMsIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCwgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIG1vZHVsZS4gU3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGluZGljYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIE15IGdvYWwgbm93IGlzIHRvIHRyYWNrIGRvd24gYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSB0d28uXG5cbkxldCdzIHNlZeKApiBJJ3ZlIHNwb3R0ZWQgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGFuZCBgcGh5X2VuYWJsZV9pbnRlcnJ1cHRzYC4gQWhhISBUaGV5IGJvdGggY2FsbCBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgLiBUaGF0IG1ha2VzIHNlbnNlOyBkaXNhYmxpbmcgb3IgZW5hYmxpbmcgaW50ZXJydXB0cyB3b3VsZCBsaWtlbHkgaW52b2x2ZSByZWNvbmZpZ3VyaW5nIHRoZW0uIFRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiByaWdodCB0aGVyZS5cblxuTm93LCBJIHNlZSB0aGF0IGBwaHlfaW50ZXJydXB0YCBpdHNlbGYgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgcmVxdWVzdF90aHJlYWRlZF9pcnFgIHdpdGhpbiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YC4gVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHNldHVwIOKAkyBsaW5raW5nIHRoZSBwaHlzaWNhbCBsYXllciBpbnRlcnJ1cHQgdG8gdGhlIGtlcm5lbCdzIGludGVycnVwdCBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjE1LjI5ODA4MjQ2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MDM5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzOTE9aW50IHBoeV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDA0LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDA1OiAqIHBoeV9pbnRlcnJ1cHQgLSBQSFkgaW50ZXJydXB0IGhhbmRsZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQwNi0gKiBAaXJxOiBpbnRlcnJ1cHQgbGluZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0MTAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0MTE6c3RhdGljIGlycXJldHVybl90IHBoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcGh5X2RhdClcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM9MTQ4Mj12b2lkIHBoeV9yZXF1ZXN0X2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0ODY6XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGh5ZGV2LVxcdTAwM2VpcnEsIE5VTEwsIHBoeV9pbnRlcnJ1cHQsXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODctXFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9TSEFSRUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjE1LjQyMjg0MzIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzkzMzMxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEludGVycnVwdCBIYW5kbGluZyBpbiBQSFkgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaW50ZXJydXB0IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgUEhZIGRyaXZlci4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgYWNxdWlyaW5nIGFuZCBlbmFibGluZyB0aGUgaW50ZXJydXB0IGxpbmUuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHByb3Blcmx5IGNvbmZpZ3VyZWQ/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBpZiB0aGUgcmVxdWVzdCBmYWlscz9cblxuRm9sbG93aW5nIHRoYXQsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLiBUaGlzIGlzIHdoZXJlIHdlIGRlLXJlZ2lzdGVyIGFuZCBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQsIHNvIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQncyBkb2luZyBwcmVjaXNlbHkgd2hhdCdzIGV4cGVjdGVkLiBJcyBpdCBhIGNsZWFuIHVuLXJlZ2lzdHJhdGlvbiwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHNwdXJpb3VzIGludGVycnVwdHMgaWYgdGhlIGRldmljZSBpc24ndCBoYW5kbGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBpbnRlcnJ1cHQtcmVsYXRlZCBzdGF0ZSB0cmFuc2l0aW9ucyB0aGF0IGFyZSBza2lwcGVkIGR1cmluZyB0aGlzIHN0YWdlLCBiZWNhdXNlIHRob3NlIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zIHRvby4gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZSBpcyBjcml0aWNhbCwgc28gYSBjbG9zZSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoxOS45NjIxNzg5MTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDM0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9yZXF1ZXN0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NjY9c3RhdGljIGludCBwaHlfdXBkYXRlX3N0YXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ3NTogKiBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQgLSByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3Ni0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDgyOnZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MjAuMTczNjE4NzQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1ODE4MDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AgZnVuY3Rpb24uIEl0J3MgdGhlIHVzdWFsIHN1c3BlY3QgaW4gdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLCB5b3Uga25vdywgd2hlbiB5b3UncmUgdHJvdWJsZXNob290aW5nIFBIWS1yZWxhdGVkIGludGVycnVwdCBpc3N1ZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVycnVwdHMgYXJlIGNvcnJlY3RseSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IHRoZSByaWdodCBwb2ludHMgaW4gdGhlIGRyaXZlcidzIGV4ZWN1dGlvbiBmbG93LiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIHJldmVhbCBpZiB0aGUgaW50ZXJydXB0IGRpc2FibGluZyBsb2dpYyBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgb3IgaWYgdGhlcmUncyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtaXNzZWQgY2FsbC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCdzIGdldHRpbmcgY2FsbGVkLCBhbmQgaWYgaXQgaXMsIHdoZW4gYW5kIHdoZXJlLCByZWxhdGl2ZSB0byBvdGhlciBjcml0aWNhbCBvcGVyYXRpb25zIGxpa2UgaW5pdGlhbGl6YXRpb24sIGxpbmsgc3RhdHVzIGNoYW5nZXMsIGFuZCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgdGhlIHJvb3QgY2F1c2UsIG9yLCBhdCBsZWFzdCwgaWYgaXQgbWlnaHQgYmUgYSBwYXJ0IG9mIHRoZSBwcm9ibGVtLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjI2LjMzMTgwMzI3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMzE1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzoyNi40MTg4NDExMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NDI1OTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW50ZXJydXB0IEhhbmRsZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBmb3IgdGhlIFBIWS4gVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhvc2UgYXJlIHRoZSB0eXBpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgaW50ZXJydXB0IHJlc291cmNlcywgcmlnaHQ/IEFsbG9jYXRlIGFuZCByZWxlYXNlLiBOb3csIEkgdmFndWVseSByZWNhbGwgc2VlaW5nIGEgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uIHNvbWV3aGVyZS4gSXQncyBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgcHVibGljIEFQSSBmb3IgY29udHJvbGxpbmcgaW50ZXJydXB0cy4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBleHBvcnRlZCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBhbmQgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjMyLjYxMzEwNDQ2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTQ3OTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6MzIuNzUzNjYxOTY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAwMDY0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIEV4cG9ydCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IHRoaXMgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyBhbiBleHBvcnRlZCBzeW1ib2wsIHJpZ2h0PyBHaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyBpbiwgdGhhdCdzIGFsbW9zdCBhIGdpdmVuLiBCdXQsIGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgc3R1ZmYgbGlrZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBhdCB0aGUgUEhZIGxldmVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGFjdHVhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHdoZXJldmVyIEknbSBwbGFubmluZyB0byB1c2UgaXQuIE5vIHBvaW50IGluIGNvbnRpbnVpbmcgZG93biB0aGlzIHBhdGggaWYgaXQncyBub3QgZXhwb3J0ZWQuIFNvLCB5ZWFoLCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc3ltYm9sIGlzIGFjdHVhbGx5IHZpc2libGUuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGl2ZSBkZWVwZXIuIEl0IGNvdWxkIGJlIGluIHRoZSBrZXJuZWwgb3IgYW5vdGhlciBmaXJtd2FyZSBpbWFnZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjM2Ljg4MzY3MjYwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MDk1NDkxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjQyLjk1NDYzNTg0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk0MDk2Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXYWl0LCBUaGF0J3MgRXhwb3J0ZWQ/KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhpcyBjb2RlLCBhbmQgSSBzdHVtYmxlZCBhY3Jvc3MgYSBjYWxsIHRvIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gTm93LCB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlICpsb29rcyogcHJldHR5IHN0YW5kYXJkIGZvciBhIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9uLiBUaGUgcmVhbCBzdXJwcmlzZSBpcyB0aGF0IGl0IGFwcGVhcnMgdG8gYmUgKmV4cG9ydGVkKiBmcm9tIHRoZSBrZXJuZWwncyBQSFkgc3Vic3lzdGVtLiBXaHkgaXMgdGhhdD8gSSdkIHVzdWFsbHkgZXhwZWN0IHRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBpbnRlcnJ1cHQgZGlzYWJsaW5nIHJvdXRpbmVzIHRvIGJlIGVpdGhlciBzdGF0aWMsIG9yLCBhdCBtb3N0LCBhdmFpbGFibGUgdmlhIGEgdmVyeSBzcGVjaWZpYyBhbmQgd2VsbC1kZWZpbmVkIEFQSSB3aXRoaW4gYSBkcml2ZXIgY29udGV4dC4gRXhwb3J0aW5nIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBzdWdnZXN0cyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgbW9yZSBicm9hZGx5IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlIG9yIHJlYXNvbiBmb3Igd2h5IGl0J3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbiBjaG9pY2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCB0aGlzIGJyb2FkZXIgYXZhaWxhYmlsaXR5PyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIFBIWSBzdWJzeXN0ZW0gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzc6NDcuMTQ4NzM1Mzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwMDc4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzo0Ny4yNzA3NDg5MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTIwMzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQSFkgSW50ZXJydXB0cyBpbiBgcGh5LmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBIWSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBkaXNhYmxlZCBhdCB0aGlzIGxldmVsLCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBpbnRlcnJ1cHQgY29udHJvbCBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggbGluayBzdGF0dXMgY2hhbmdlcyBvciBwb3dlciBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgcGxhY2Ugd2hlcmUgd2UgY2FuIHR3ZWFrIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQgYW5kIHVubWFza2VkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSSdtIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciwgcmlnaHQ/IFNvLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIGhvdyB0aGV5J3JlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IHN0YXR1cy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gdGhlcmUgb3IgaWYgaXQgaXMgdG9vIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUuIEkgd2lsbCBsb29rIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxhdGVkLCBhbmQgcGVyaGFwcyBvdGhlciBzaW1pbGFyIHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgaG93IHRoZXkgZG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozNzo1My41MTU5NTU2OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdCAqL1xcbjEzOTE6XFx0aW50IHBoeV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMzkyOlxcdHtcXG4xMzkzOlxcdFxcdGludCBlcnI7XFxuMTM5NDpcXHRcXG4xMzk1OlxcdFxcdC8qIERpc2FibGUgUEhZIGludGVycnVwdHMgKi9cXG4xMzk2OlxcdFxcdGVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9ESVNBQkxFRCk7XFxuMTM5NzpcXHRcXHRpZiAoZXJyKVxcbjEzOTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzk5OlxcdFxcbjE0MDA6XFx0XFx0cGh5X3dyaXRlX2JhcnJpZXIocGh5ZGV2KTtcXG4xNDAxOlxcdFxcdHJldHVybiAwO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHQvKipcXG4xNDA1OlxcdCAqIHBoeV9pbnRlcnJ1cHQgLSBQSFkgaW50ZXJydXB0IGhhbmRsZXJcXG4xNDA2OlxcdCAqIEBpcnE6IGludGVycnVwdCBsaW5lXFxuMTQwNzpcXHQgKiBAcGh5X2RhdDogcGh5X2RldmljZSBwb2ludGVyXFxuMTQwODpcXHQgKlxcbjE0MDk6XFx0ICogRGVzY3JpcHRpb246IEhhbmRsZSBQSFkgaW50ZXJydXB0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM3OjUzLjUxNjExMTkzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzE3MDg0ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBJc3N1ZSoqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGluIGEgcGh5c2ljYWwgbGF5ZXIgZHJpdmVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBzb21ldGhpbmcgaXNuJ3QgZXhwb3J0ZWQuIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgICppcyogZXhwb3J0ZWQsIHRoYXQncyBnb29kLCBidXQgc29tZXRoaW5nIGVsc2UgaXNuJ3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBcInNvbWV0aGluZyBlbHNlXCIgaXMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggaG93IHRoZSBpbnRlcnJ1cHQgaXMgc2V0IHVwIG9yIHRvcm4gZG93bi5cblxuTGV0J3Mgc3RhcnQgd2l0aCB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQtZnJlZWluZyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YC4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgbWlzc2luZyBleHBvcnQgaXMgaW4gYSByZWxhdGVkIGNvbXBvbmVudC4gSXMgaXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgaGFuZGxlciBpdHNlbGYsIG9yIHNvbWUgc2V0dXAgZnVuY3Rpb24sIG1heWJlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gc3BvdCB0aGUgZGlzY29ubmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW50ZXJydXB0IGZsb3cgdG8gdHJhY2sgZG93biB0aGlzIGxhY2sgb2YgZXhwb3J0IGFuZCB3aGF0IGl0IG1pZ2h0IG1lYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjAwLjgzMzE5OTkwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NDYzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0ODI9dm9pZCBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk1LVxcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIkNhbid0IGVuYWJsZSBpbnRlcnJ1cHQsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ5NjpcXHRcXHRcXHRwaHlfZnJlZV9pbnRlcnJ1cHQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5Ny1cXHRcXHRcXHRwaHlkZXYtXFx1MDAzZWlycSA9IFBIWV9QT0xMO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MDE9RVhQT1JUX1NZTUJPTChwaHlfcmVxdWVzdF9pbnRlcnJ1cHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MDQ6ICogcGh5X2ZyZWVfaW50ZXJydXB0IC0gZGlzYWJsZSBhbmQgZnJlZSBpbnRlcnJ1cHQgZm9yIGEgUEhZIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTA1LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDktICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTA6dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxNC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTU6RVhQT1JUX1NZTUJPTChwaHlfZnJlZV9pbnRlcnJ1cHQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODowMS41MDc2NjgyMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5NTQ2MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipJbnRlcnJ1cHQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQSFkgZHJpdmVyIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgIGFuZCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUgZm9yIGludGVycnVwdCBtYW5hZ2VtZW50LiBUaG9zZSBhcmUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgdGhhdCdzIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZ29pbmcgdG8gY2FsbCB0byBjbGFpbSBhbmQgcmVsZWFzZSB0aGUgaW50ZXJydXB0IGxpbmVzLiBJJ20gYWxzbyBiZXR0aW5nIGBwaHlfc3RhcnRgIGFuZCBgcGh5X3N0b3BgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBwaGFzZXMuXG5cblRoZSBjcml0aWNhbCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJydXB0IGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGhlcmUuIExldCdzIHN0YXJ0IHdpdGggYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAg4oCTIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCouIFRoYXQnbGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGludGVycnVwdHMgYXJlIGluaXRpYWxseSBlbmFibGVkLCBob3cgdGhlIGRyaXZlcidzIGxpbmtlZCBpbnRvIHRoZSBzeXN0ZW0sIGFuZCB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHN0YXJ0cy4gRGlnZ2luZyB0aHJvdWdoIHRob3NlIGNhbGwgc2l0ZXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MDYuMzAzMTMxODcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NDk0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlcXVlc3RfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE0NjY9c3RhdGljIGludCBwaHlfdXBkYXRlX3N0YXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3NC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ3NTogKiBwaHlfcmVxdWVzdF9pbnRlcnJ1cHQgLSByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ3Ni0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDgyOnZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTAxOkVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTIyNT1pbnQgcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzktXFx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNDA6XFx0XFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjQxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMDg2PXN0YXRpYyBpbnQgcGh5bGlua19icmluZ3VwX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxOTctXFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxOTg6XFx0XFx0cGh5X3JlcXVlc3RfaW50ZXJydXB0KHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODowNi40Mzc2ODY1MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NzI2MjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQSFkgSW50ZXJydXB0IEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5bGlua19icmluZ3VwX3BoeWAgYm90aCBjYWxsIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLiBUaGF0J3MgYSBrZXkgcG9pbnQsIG1lYW5pbmcgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgbmV0d29yayBpbnRlcmZhY2UgUEhZIGJyaW5ndXAsIHdoaWNoIG1ha2VzIHRoaXMgdnVsbmVyYWJpbGl0eSBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIFBIWSBjb2RlLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSBnb29kIGludmVzdG1lbnQuXG5cblRoZSBwYXRjaCBmaXhlcyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVyZSBgcGh5ZGV2LVx1MDAzZWRydmAgaXMgTlVMTC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoZW4gd291bGQgYHBoeWRldi1cdTAwM2VkcnZgICpiZSogTlVMTD8gSSdtIHRoaW5raW5nLi4uIHBlcmhhcHMgZHVyaW5nIGEgUEhZIGRldmljZSB1bmJpbmRpbmcgc2NlbmFyaW8sIHdoZXJlIHRoZSBkcml2ZXIgaXMgYWN0aXZlbHkgYmVpbmcgdW5ib3VuZCB3aGlsZSBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZyBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjb25maWd1cmVkLiBBbm90aGVyIHBvc3NpYmlsaXR5IG1pZ2h0IGJlIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYmVmb3JlIHRoZSBkcml2ZXIgaGFzIGV2ZW4gc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIHRoZSBQSFkuIEVpdGhlciB3YXksIGl0J3MgYSBmdW5jdGlvbmFsIGZpeCBpbiBjcnVjaWFsIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmdXJ0aGVyLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBgQ09ORklHX1BIWUxJQmAgbG9va3MgbGlrZSB0aGUgZnVuZGFtZW50YWwgY29yZSBjb25maWcgbmVlZGVkIGZvciB0aGUgUEhZIGxpYnJhcnksIHdoaWNoIHNlZW1zIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjEyLjgyNDk1MzA4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTM4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjEzLjA2ODA5NzQ2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE0MDg2NTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBQSFlMSUIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBjb25maXJtIGlmIGBQSFlMSUJgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzay4gQWgsIHllcywgaXQgYXBwZWFycyBgUEhZTElCYCBpcyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZyBoZXJlIOKAkyB0aGUgbWFpbiBkcml2ZXIsIGlmIHlvdSB3aWxsLiBOb3csIGxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aGF0IHdlIHNob3VsZCBrbm93IGFib3V0PyBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBjb21waWxlZCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MjMuMjA4OTY2MTQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4NTQ0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTEyPWVuZGlmXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXFx0XFx0Kz0gc3dwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNS1saWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVxcdCs9IHBoeV9sZWRfdHJpZ2dlcnMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19QSFlMSU5LKVxcdFxcdCs9IHBoeWxpbmsub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IGxpYnBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19kZXZyZXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BRElOMTEwMF9QSFkpXFx0Kz0gYWRpbjExMDAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfQURJTjExNDBfUEhZKVxcdCs9IGFkaW4xMTQwLXBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMzLW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcXHQrPSBhaXJfYW44ODAxLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfRFA4M1RHNzIwX1BIWSlcXHQrPSBkcDgzdGc3MjAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfRklYRURfUEhZKVxcdFxcdCs9IGZpeGVkX3BoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTY3LW9iai0kKENPTkZJR19JQ1BMVVNfUEhZKVxcdCs9IGljcGx1cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjIzLjQyMDgzNjE1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY2NzE5ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUEhZIEludGVycnVwdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyB0aGF0IGBDT05GSUdfUEhZTElCYCBpcywgYXMgZXhwZWN0ZWQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR29vZC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgaW4gb24gdGhlIHN5bWJvbHMgaW52b2x2ZWQuIEhtbSwgaXQgbG9va3MgbGlrZSBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZXNlIHR3byBmdW5jdGlvbnMuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uLCBpdCBzZWVtcy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCogYW5kIGludGVyYWN0IHdpdGggdGhlc2UgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zPyBJJ20gc2VlaW5nIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCwgYHBoeV9kaXNhYmxlX2ludGVycnVwdHNgLCBhbmQuLi53YWl0IGEgbWludXRlLi4uIGlzIGBwaHlfZW5hYmxlX2ludGVycnVwdHNgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IGl0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGV0YWlsIGlmIGl0J3Mgbm90LiBHb3R0YSBtYWtlIHN1cmUgdGhlIHBhdGNoIGlzbid0IGJyZWFraW5nIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoYXQgZnVuY3Rpb24gaXMgbm90IG1lYW50IHRvIGJlIHB1YmxpYy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSB0byBhc3Nlc3MgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODoyOC40ODc1NjA1MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDEwMzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZW5hYmxlX2ludGVycnVwdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDExPXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBoeV9kYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ0OC0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ0OTogKiBwaHlfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGUgdGhlIGludGVycnVwdHMgZnJvbSB0aGUgUEhZIHNpZGVcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ1MC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ1MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LmM6MTQ1MjpzdGF0aWMgaW50IHBoeV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5My1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNDk0OlxcdFxcdGlmIChwaHlfZW5hYmxlX2ludGVycnVwdHMocGh5ZGV2KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNDk1LVxcdFxcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIkNhbid0IGVuYWJsZSBpbnRlcnJ1cHQsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MjguNjg3NjcyNDYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUzMTg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJydXB0IE1hbmFnZW1lbnQgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhcmUgbWFuYWdlZCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyB0aGluZ3Mgb2ZmLCBhbmQgSSBzZWUgaXQncyBsaW5rZWQgZGlyZWN0bHkgdG8gYHBoeV9lbmFibGVfaW50ZXJydXB0c2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHJlcXVlc3QgdGhlIGludGVycnVwdCwgZW5hYmxlIHRoZSBoYXJkd2FyZS4gTmF0dXJhbGx5LCB0aGUgb3Bwb3NpdGUgc2VlbXMgdG8gYmUgdHJ1ZSB0b28gLSBgcGh5X2ZyZWVfaW50ZXJydXB0YCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAsIGFuZCB0aGF0IGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggY2FsbGluZyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIE15IGd1dCBmZWVsaW5nIGlzIHRoZXNlIGFyZSBwcm9iYWJseSB2ZXJ5IHNpbXBsZSB3cmFwcGVycyBhcm91bmQgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgbWFuaXB1bGF0aW9ucy4gSSBzaG91bGQgY2hlY2sgdGhvdWdoLCBzbyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYCBpcyBwcm9wZXJseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aGVyZSBpdCBuZWVkcyB0byBiZS4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHVwIGNvcnJlY3RseS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODozMy4wMTI5OTQzMDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDY4MjkxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjMzLjE5MzY4Nzk5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI3MjY0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBydW5uaW5nIHRocm91Z2ggYSBuZXR3b3JraW5nIGtlcm5lbCBtb2R1bGU6XG5cbioqRGVidWdnaW5nIGFuIFVuZXhwb3J0ZWQgRnVuY3Rpb24qKlxuXG5IbW0sIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQuIFRoYXQncyBpbW1lZGlhdGVseSBvZGQuIFdhaXQgYSBtaW51dGUsIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4uLiBpdCdzIG5vdCBkZWNsYXJlZCBgc3RhdGljYCwgc28gaXQgKnNob3VsZCogYmUgdmlzaWJsZSBhY3Jvc3MgdGhlIGtlcm5lbCwgYnV0IGl0J3Mgbm90PyBTb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIExldCdzIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgZm9yIGBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzYC4gSSdsbCBqdW1wIGludG8gYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIHRoZXJlLiBUaGVyZeKAmXMgZ290IHRvIGJlIGEgcmVhc29uIHRoaXMgaXMgaGFwcGVuaW5nLCBhbmQgdGhlIGRlZmluaXRpb24gaW4gdGhlIHNvdXJjZSBmaWxlIHdpbGwgZWl0aGVyIGNsYXJpZnkgaXQgb3IgYWxsb3cgbWUgdG8gc3RhcnQgbG9va2luZyBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6MzkuMTIwOTU2MDk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1MDU5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Rpc2FibGVfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODozOS4yODg0Njc0MzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5OTQ3NTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkludGVybmFsIENvZGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGUsIGFuZCBpdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBcImV4cG9ydGVkXCIgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG1lYW5pbmcgaXQncyBsaWtlbHkgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGlzIGEga2V5IGluZGljYXRvci4gSWYgaXQgKndlcmUqIHN0YXRpYywgaXQgd291bGQgYmUgbGltaXRlZCB0byB0aGUgY3VycmVudCBmaWxlLiBTaW5jZSBpdCdzIG5vdCwgaXQgc3VnZ2VzdHMgdGhpcyBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5ICppcyogaW50ZW5kZWQgZm9yIHVzZSBlbHNld2hlcmUgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBHaXZlbiB0aGUgZGlyZWN0b3J5IHBhdGggYGRyaXZlcnMvbmV0L3BoeS9gLCBpdCdzIGEgdmVyeSBzdHJvbmcgaHVuY2ggdGhhdCB0aGlzIHRoaW5nIGluIHF1ZXN0aW9uIGlzIGJlaW5nIHVzZWQg4oCTIG9yIGF0IGxlYXN0LCAqY291bGQqIGJlIHVzZWQg4oCTIGJ5IG90aGVyIGZpbGVzIHdpdGhpbiB0aGF0IHNwZWNpZmljIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG5ldHdvcmsgZHJpdmVyIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyByZXF1aXJlcyBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODo0NC45ODc5NDYyMTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY3NjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS5jPTEzNzk9c3RhdGljIHZvaWQgcGh5X3dyaXRlX2JhcnJpZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzg4OiAqIHBoeV9kaXNhYmxlX2ludGVycnVwdHMgLSBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgc2lkZVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzg5LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xMzkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxMzkxOmludCBwaHlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTEzOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jPTE1MTA9dm9pZCBwaHlfZnJlZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxMS17XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE1MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTEzLVxcdGZyZWVfaXJxKHBoeWRldi1cXHUwMDNlaXJxLCBwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjg1PXN0YXRpYyBpbnQgcGh5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3MTI6XFx0cGh5X2Rpc2FibGVfaW50ZXJydXB0cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzg6NDUuMTQ1NjMyMjg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODU5NDg5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUEhZIEludGVycnVwdHMgYW5kIENvbm5lY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQSFkgaW50ZXJydXB0cyBhbmQgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQuIEl0IHNlZW1zIGxpa2UgYHBoeV9wcm9iZWAgaXMgYSBjcml0aWNhbCBwb2ludCBvZiBlbnRyeSBzaW5jZSBpdCBjYWxscyBgcGh5X2Rpc2FibGVfaW50ZXJydXB0c2AuIFRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBmb2N1cyBzeW1ib2wuIE5vdywgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVycnVwdCByZXF1ZXN0IGl0c2VsZiwgYHBoeV9yZXF1ZXN0X2ludGVycnVwdGAgc2VlbXMgaW1wb3J0YW50LiBJdCdzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeWxpbmtfYnJpbmd1cF9waHlgLCBzbyB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvaW5nIHRvIGJlIGtleSBmb2N1cyBwb2ludHMgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5OZXh0LCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLCBgcGh5X2ludGVycnVwdGAsIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgc28gdGhhdCBjb25maXJtcyBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCBhcyBiZWluZyBhIGNvcmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHBoeV9pbnRlcnJ1cHRgIHRvIHNlZSB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgZGF0YS4gVGhlbiB0aGVyZSdzIGBwaHlfZnJlZV9pbnRlcnJ1cHRgLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBwaHlfZGlzY29ubmVjdGAsIGFsc28gZHVyaW5nIGBwaHlsaW5rX2JyaW5ndXBfcGh5YCBpbiBjYXNlIG9mIGVycm9yLCBhcyB3ZWxsIGFzIGBwaHlsaW5rX3BoeV9jaGFuZ2VgLiBTbyBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSByZWxhdGVkIGNhbGxzIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjUzLjMzMTU4NzQxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDU3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNDgyPXZvaWQgcGh5X3JlcXVlc3RfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTQ5NS1cXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJDYW4ndCBlbmFibGUgaW50ZXJydXB0LCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jOjE0OTY6XFx0XFx0XFx0cGh5X2ZyZWVfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE0OTctXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VpcnEgPSBQSFlfUE9MTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYz0xNTAxPUVYUE9SVF9TWU1CT0wocGh5X3JlcXVlc3RfaW50ZXJydXB0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTA0OiAqIHBoeV9mcmVlX2ludGVycnVwdCAtIGRpc2FibGUgYW5kIGZyZWUgaW50ZXJydXB0IGZvciBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUwNS0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYy0xNTA5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTEwOnZvaWQgcGh5X2ZyZWVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS5jLTE1MTQtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHkuYzoxNTE1OkVYUE9SVF9TWU1CT0wocGh5X2ZyZWVfaW50ZXJydXB0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LmMtMTUxNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTI5Mz12b2lkIHBoeV9kaXNjb25uZWN0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyOTgtXFx0aWYgKHBoeV9pbnRlcnJ1cHRfaXNfdmFsaWQocGh5ZGV2KSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyOTk6XFx0XFx0cGh5X2ZyZWVfaW50ZXJydXB0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozODo1My40OTg2NTE1ODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1MTQ2Nzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBQSFkgRGlzY29ubmVjdGlvbioqXG5cbk9rYXksIHNvIGBwaHlfZGlzY29ubmVjdGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQuIExldCdzIHN0YXJ0IGJ5IGNvbXBhcmluZyBpdCB0byBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhcyB3ZWxsLiBUaGVzZSBhcmUgZm91bmRhdGlvbmFsIFBIWSBBUEkgZnVuY3Rpb25zLCBzbyBnZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVtIGlzIGtleS5cblxuVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLCBJJ2xsIGFsc28gYWRkIGBwaHlfcmVxdWVzdF9pbnRlcnJ1cHRgLCBgcGh5X2ZyZWVfaW50ZXJydXB0YCBhbmQgYHBoeV9wcm9iZWAgdG8gdGhlIGxpc3QuIFRob3VnaCwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBgcGh5X3Byb2JlYC4gVGhhdCdzIGEgZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCByaWdodD8gSXQgbWlnaHQgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5JIHNob3VsZCBhbHNvIHRha2UgYSBsb29rIGF0IGBwaHlfcHJvYmVgIGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCB0byBiZSBzdXJlIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjU5LjA1MDEyMjg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxMTk2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGZ3bm9kZV9nZXRfcGh5X25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNjc5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzY4MDogKiBwaHlfcHJvYmUgLSBwcm9iZSBhbmQgaW5pdCBhIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODEtICogQGRldjogZGV2aWNlIHRvIHByb2JlIGFuZCBpbml0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODQtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNjg1OnN0YXRpYyBpbnQgcGh5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM2ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zODY0PXN0YXRpYyBpbnQgcGh5X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzg5MC1cXHRuZXdfZHJpdmVyLVxcdTAwM2VtZGlvZHJ2LmRyaXZlci5idXMgPSBcXHUwMDI2bWRpb19idXNfdHlwZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM4OTE6XFx0bmV3X2RyaXZlci1cXHUwMDNlbWRpb2Rydi5kcml2ZXIucHJvYmUgPSBwaHlfcHJvYmU7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODkyLVxcdG5ld19kcml2ZXItXFx1MDAzZW1kaW9kcnYuZHJpdmVyLnJlbW92ZSA9IHBoeV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM4OjU5LjE4ODI0ODM4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEwMDM2NTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgUEhZIGRyaXZlciBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcGh5X3JlcXVlc3RfaW50ZXJydXB0YCwgYHBoeV9mcmVlX2ludGVycnVwdGAsIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgYHBoeV9kaXNjb25uZWN0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgYW5kIGV4aXQgcG9pbnRzIGZvciBQSFkgaW50ZXJhY3Rpb25zLCBhbmQgbGlrZWx5IHRoZSBwbGFjZXMgd2hlcmUgYSBkcml2ZXIgY2FuIGJlY29tZSB1bmJvdW5kLCBhcyB0aGUgcGF0Y2ggc3VnZ2VzdHMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBQSFlMSUJgIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gbmVlZGVkIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjaGFuZ2UgaXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHkuY2AsIGFuZCB0aGF0IGZpbGUncyBjb21waWxhdGlvbiBpcyBjb25kaXRpb25lZCBvbiBgQ09ORklHX1BIWUxJQmAsIHRoYXQncyBsaWtlbHkgdGhlIGNhc2UsIHNvIEkgd2lsbCBzdGljayB3aXRoIHRoYXQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGVzc2VudGlhbGx5IGFkZGluZyBOVUxMIGNoZWNrcyBmb3IgYHBoeWRldi1cdTAwM2VkcnZgIHdpdGhpbiB0aGUgYHBoeV9jb25maWdfaW50ZXJydXB0YCBhbmQgYHBoeV9pbnRlcnJ1cHRgIGZ1bmN0aW9ucy4gIFRoaXMgaXMgdG8gcHJldmVudCBhIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBUaGUgcm9vdCBjYXVzZSBpcyBhIHJhY2UgY29uZGl0aW9uOiBhIGRyaXZlciBpcyBiZWluZyB1bmJvdW5kIChvciBwZXJoYXBzIGEgXCJkdW1teVwiIFBIWSBpcyBpbiB1c2UpICp3aGlsZSogaW50ZXJydXB0cyBhcmUgc3RpbGwgYWN0aXZlIG9yIGJlaW5nIGNvbmZpZ3VyZWQsIGFuZCBpdCdzIGFjY2Vzc2luZyB0aGUgZHJpdmVyJ3MgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiB0aGUgZHJpdmVyIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgbmV0d29yayBkcml2ZXJzIHRoYXQgdXNlIGEgUEhZIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgcmVib3VuZC4gVGhlIG51bGwgcG9pbnRlciBwcm90ZWN0aW9uIHdpbGwgbWFrZSB0aGlzIG1vcmUgcm9idXN0LlxuXG5UaGlzIGlzIGEgZ29vZCwgc29saWQgZml4IGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTaW5jZSB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgZXZlbiB3aXRoIGEgXCJkdW1teVwiIFBIWSwgSSB3b3VsZCBjYWxsIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgdmlydHVhbCBtYWNoaW5lcywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJydXB0LXJlbGF0ZWQgdGltaW5nIGlzc3Vlcy4gU28sIGJhc2VkIG9uIHRoaXMsIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIwNywiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MTEuMjg4NjE2NjM2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NjYxMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfcmVxdWVzdF9pbnRlcnJ1cHRcIixcbiAgICBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICAgIFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfcmVxdWVzdF9pbnRlcnJ1cHRcIixcbiAgICBcInBoeV9mcmVlX2ludGVycnVwdFwiLFxuICAgIFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjb3JlIFBIWSBsaWJyYXJ5IChgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGApIGJ5IGNoZWNraW5nIGlmIGBwaHlkZXYtXFx1MDAzZWRydmAgaXMgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBjYWxsYmFja3MuIFRoaXMgY2FuIG9jY3VyIGlmIGEgUEhZIGRyaXZlciBpcyB1bmJvdW5kIHdoaWxlIGludGVycnVwdHMgYXJlIHN0aWxsIGFjdGl2ZSBvciBiZWluZyBjb25maWd1cmVkLiBUaGUgUEhZIGxpYnJhcnkgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0d29yayBkcml2ZXJzIHRoYXQgdXRpbGl6ZSBQSFkgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MTEuNTMzMjk2MjkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NzUwNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjM5OjExLjUzNDYxNzM4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM4NjE3OTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVxcdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNWQ1YjljNWJhZTFlYTUwZTkxMmZmNGVmMjM5OTU5OGU0NGQ1OTQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmNcbmluZGV4IGZjZTliYzdiZTMzMDQuLjU0MzVmNjJlOTgxNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuY1xuQEAgLTE2OCw3ICsxNjgsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3JhdGVfbWF0Y2hpbmcpO1xuIHN0YXRpYyBpbnQgcGh5X2NvbmZpZ19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBpbnRlcnJ1cHRzKVxuIHtcbiBcdHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID0gaW50ZXJydXB0cyA/IDEgOiAwO1xuLVx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIpXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vjb25maWdfaW50cilcbiBcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlY29uZmlnX2ludHIocGh5ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0MzYsNyArMTQzNiwxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwaHlfZGF0KVxuIFx0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4tXHRyZXQgPSBwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQocGh5ZGV2KTtcbitcdGlmICghcGh5ZGV2LVx1MDAzZWRydilcbitcdFx0cmV0ID0gSVJRX05PTkU7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdChwaHlkZXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDozOToxMS41MzQ2MjAwMzFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzODYxNDc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBSZWxldmFuY2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS5jYCBpcyBpbnRyb2R1Y2luZyBgTlVMTGAgcG9pbnRlciBjaGVja3MgZm9yIGBwaHlkZXYtXHUwMDNlZHJ2YCB3aXRoaW4gdGhlIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCBmdW5jdGlvbnMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBwaHlkZXYtXHUwMDNlZHJ2YCBoYXBwZW5zIHRvIGJlIGBOVUxMYC5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiwgY29tYmluZWQgd2l0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSwgdGVsbHMgbWUgdGhpcyBpcyBzb2xlbHkgYSBgTlVMTGAgcG9pbnRlciBpc3N1ZS4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyB0aGF0J3MgS01TQU4ncyBkb21haW4uIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBvciBmcmFua2x5LCBqdXN0IHRoZSBrZXJuZWwgY3Jhc2hpbmcsIHdpbGwgY2F0Y2ggdGhlc2UgYE5VTExgIGRlcmVmZXJlbmNlcyBpbiB0aGUgYWJzZW5jZSBvZiB0aGlzIHBhdGNoLlxuXG5UaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgcG90ZW50aWFsIGNyYXNoLCBub3QgYSBLTVNBTi1yZWxhdGVkIGNvbmNlcm4uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBjb21wbGV4aXRpZXMgdG8gd2FycmFudCBhIHNlY29uZCBsb29rLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHNvIEkgY2FuIGNvbmZpZGVudGx5IHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjMsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6Mzk6MjEuOTIwNzcyMzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTlVMTCBwb2ludGVyIGNoZWNrcyBmb3IgYHBoeWRldi1cXHUwMDNlZHJ2YCBpbiBgcGh5X2NvbmZpZ19pbnRlcnJ1cHRgIGFuZCBgcGh5X2ludGVycnVwdGAgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQga2VybmVsIGNyYXNoIGhhbmRsZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBOVUxMIHBvaW50ZXIgY2hlY2tzIGZvciBgcGh5ZGV2LVxcdTAwM2VkcnZgIGluIGBwaHlfY29uZmlnX2ludGVycnVwdGAgYW5kIGBwaHlfaW50ZXJydXB0YCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFuZCBrZXJuZWwgY3Jhc2ggaGFuZGxlcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2pf59[1] Phase: Succeeded StartedAt: 2026-08-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 14:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 14:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2] Phase: Succeeded StartedAt: 2026-08-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 14:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:34 +0000 UTC FinishedAt: 2026-08-24 14:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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-workflow2pf59/series-workflow2pf59-convert-artifact-4142905119/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:44 +0000 UTC FinishedAt: 2026-08-24 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:44 +0000 UTC FinishedAt: 2026-08-24 15:01:33 +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:*919186b9-4f4d-44d4-b877-4908ab63e8f7,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-workflow2pf59/series-workflow2pf59-convert-artifact-4142905119/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": "1a8b8c48-2979-4438-bb72-8117d1dcf4ad", "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-workflow2pf59/series-workflow2pf59-build-action-3090688293/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 14:39:44 +0000 UTC FinishedAt: 2026-08-24 15:01:23 +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:*919186b9-4f4d-44d4-b877-4908ab63e8f7,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-workflow2pf59/series-workflow2pf59-convert-artifact-4142905119/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": "1a8b8c48-2979-4438-bb72-8117d1dcf4ad", "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-workflow2pf59/series-workflow2pf59-build-action-3090688293/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:33 +0000 UTC FinishedAt: 2026-08-24 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:33 +0000 UTC FinishedAt: 2026-08-24 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:33 +0000 UTC FinishedAt: 2026-08-24 15:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:33 +0000 UTC FinishedAt: 2026-08-24 15:01:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-workflow2pf59/series-workflow2pf59-convert-artifact-4068477358/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:43 +0000 UTC FinishedAt: 2026-08-24 15:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:01:43 +0000 UTC FinishedAt: 2026-08-24 15:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a8b8c48-2979-4438-bb72-8117d1dcf4ad,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-workflow2pf59/series-workflow2pf59-build-action-3090688293/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-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:03:32 +0000 UTC FinishedAt: 2026-08-24 15:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:03:32 +0000 UTC FinishedAt: 2026-08-24 15:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:03:32 +0000 UTC FinishedAt: 2026-08-24 15:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:03:32 +0000 UTC FinishedAt: 2026-08-24 15:20:04 +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:*919186b9-4f4d-44d4-b877-4908ab63e8f7,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-workflow2pf59/series-workflow2pf59-convert-artifact-4068477358/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": "34894266-1672-428c-8306-ef993047ee08", "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-workflow2pf59/series-workflow2pf59-build-action-314097858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:03:32 +0000 UTC FinishedAt: 2026-08-24 15:19:54 +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:*919186b9-4f4d-44d4-b877-4908ab63e8f7,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-workflow2pf59/series-workflow2pf59-convert-artifact-4068477358/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": "34894266-1672-428c-8306-ef993047ee08", "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-workflow2pf59/series-workflow2pf59-build-action-314097858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:20:04 +0000 UTC FinishedAt: 2026-08-24 15:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:20:04 +0000 UTC FinishedAt: 2026-08-24 15:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:20:04 +0000 UTC FinishedAt: 2026-08-24 15:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:20:04 +0000 UTC FinishedAt: 2026-08-24 15:21:54 +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:*34894266-1672-428c-8306-ef993047ee08,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-workflow2pf59/series-workflow2pf59-build-action-314097858/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-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"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:*1a8b8c48-2979-4438-bb72-8117d1dcf4ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34894266-1672-428c-8306-ef993047ee08,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-workflow2pf59/series-workflow2pf59-build-action-3090688293/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-workflow2pf59/series-workflow2pf59-build-action-314097858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 15:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 15:22:09 +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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"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-workflow2pf59/series-workflow2pf59-convert-artifact-1877382739/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 15:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 15:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:04 +0000 UTC FinishedAt: 2026-08-24 15:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:15 +0000 UTC FinishedAt: 2026-08-24 16:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pf59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"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":["phy_request_interrupt","phy_free_interrupt","phy_connect_direct","phy_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB"],"series_id":"e88180b7-1b50-452f-ac41-1af2aaaed4e3","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-24 15:22:15 +0000 UTC FinishedAt: 2026-08-24 16:19:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a8b8c48-2979-4438-bb72-8117d1dcf4ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34894266-1672-428c-8306-ef993047ee08,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-workflow2pf59/series-workflow2pf59-build-action-3090688293/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-workflow2pf59/series-workflow2pf59-build-action-314097858/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-workflow2pf59/series-workflow2pf59-convert-artifact-1877382739/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,}